## Features - **Codex**: add GPT 6.0 Astra (`gpt-6-astra`) with vision, thinking and search capabilities - **Usage**: add Claude Fable quota tracker support with weekly window normalization (`weekly fable (7d)`) - **Dashboard**: group Antigravity Gemini and Claude quotas in Quota Tracker, prune stale hidden keys - **OpenCode Go**: add `muse-spark-1.3-contributor` model and support parallel tool calls on Responses path (#3819) - **Providers & Models**: align CodeBuddy-CN catalog/capabilities with server config; add GPT-5.6 Sol, Terra, Luna image aliases on Codex (#3806); refresh Qoder catalog with capability mapping and image pass-through - **CLI tools**: replace Copilot MITM with VS Code extension setup guide - **Gemini**: persist and replay `thoughtSignature` scoped by session namespace ## Fixes - **Claude**: normalize adaptive auto effort (`output_config.effort`) (#3792) - **Antigravity**: prevent Google anti-abuse rate limits during multi-account refresh (#3813) - **Anthropic-compatible**: forward Claude beta flags to nodes fronting Anthropic (#3797) - **Dashboard**: dynamic mode label for local/remote detection (#3801) - **Codex**: format reset credit API errors cleanly (#3778) - **Security**: guard cowork MCP tools probe against SSRF (#3783) - **OpenCode Go**: track OpenCode Go quota (#3791) and send stable session headers (#3800) - **Logger**: suppress noisy background token refresh logs - **CLI**: export packed `.tgz` directly into workspace root instead of parent directory
77 lines
3.2 KiB
JavaScript
77 lines
3.2 KiB
JavaScript
import { describe, expect, it } from "vitest";
|
|
import { getCapabilitiesForModel } from "../../open-sse/providers/capabilities.js";
|
|
|
|
describe("getCapabilitiesForModel", () => {
|
|
const claudeSonnet5Expected = {
|
|
contextWindow: 1000000,
|
|
maxOutput: 128000,
|
|
thinkingFormat: "claude-adaptive",
|
|
reasoning: true,
|
|
vision: true,
|
|
search: true,
|
|
};
|
|
|
|
const kiroGpt56Expected = {
|
|
contextWindow: 272000,
|
|
maxOutput: 128000,
|
|
thinkingFormat: "openai",
|
|
reasoning: true,
|
|
vision: true,
|
|
search: true,
|
|
};
|
|
|
|
it("reports Kiro Claude Opus 5 variants as 1M adaptive-thinking models", () => {
|
|
for (const model of [
|
|
"claude-opus-5",
|
|
"anthropic/claude-opus-5",
|
|
"claude-opus-5-thinking",
|
|
"claude-opus-5-agentic",
|
|
"claude-opus-5-thinking-agentic",
|
|
]) {
|
|
expect(getCapabilitiesForModel("kiro", model)).toMatchObject(claudeSonnet5Expected);
|
|
}
|
|
});
|
|
|
|
it("reports Claude Fable 5.1 as a permanent adaptive-thinking model", () => {
|
|
expect(getCapabilitiesForModel("claude", "claude-fable-5-1")).toMatchObject({
|
|
...claudeSonnet5Expected,
|
|
thinkingCanDisable: false,
|
|
});
|
|
});
|
|
|
|
it("reports Kiro Claude Opus 4.8 as a 1M context model", () => {
|
|
expect(getCapabilitiesForModel("kiro", "claude-opus-4.8").contextWindow).toBe(1000000);
|
|
expect(getCapabilitiesForModel("kiro", "anthropic/claude-opus-4.8").contextWindow).toBe(1000000);
|
|
expect(getCapabilitiesForModel("kiro", "claude-opus-4-8").contextWindow).toBe(1000000);
|
|
expect(getCapabilitiesForModel("kiro", "claude-opus-4.8-thinking").contextWindow).toBe(1000000);
|
|
expect(getCapabilitiesForModel("kiro", "claude-opus-4-8-thinking").contextWindow).toBe(1000000);
|
|
});
|
|
|
|
it("reports Kiro Claude Sonnet 5 as a 1M adaptive-thinking model", () => {
|
|
expect(getCapabilitiesForModel("kiro", "claude-sonnet-5")).toMatchObject(claudeSonnet5Expected);
|
|
expect(getCapabilitiesForModel("kiro", "anthropic/claude-sonnet-5")).toMatchObject(claudeSonnet5Expected);
|
|
expect(getCapabilitiesForModel("kiro", "claude-sonnet-5-thinking")).toMatchObject(claudeSonnet5Expected);
|
|
expect(getCapabilitiesForModel("kiro", "claude-sonnet-5-agentic")).toMatchObject(claudeSonnet5Expected);
|
|
expect(getCapabilitiesForModel("kiro", "claude-sonnet-5-thinking-agentic")).toMatchObject(claudeSonnet5Expected);
|
|
});
|
|
|
|
it("reports Kiro GPT 5.6 models with the Kiro 272k context window", () => {
|
|
expect(getCapabilitiesForModel("kiro", "gpt-5.6-sol")).toMatchObject(kiroGpt56Expected);
|
|
expect(getCapabilitiesForModel("kiro", "openai/gpt-5.6-sol")).toMatchObject(kiroGpt56Expected);
|
|
expect(getCapabilitiesForModel("kiro", "gpt-5.6-terra-thinking")).toMatchObject(kiroGpt56Expected);
|
|
expect(getCapabilitiesForModel("kiro", "gpt-5.6-luna-agentic")).toMatchObject(kiroGpt56Expected);
|
|
expect(getCapabilitiesForModel("kiro", "gpt-5.6-sol-thinking-agentic")).toMatchObject(kiroGpt56Expected);
|
|
});
|
|
|
|
it("reports Codex GPT 6.0 Astra as a vision and thinking capable model", () => {
|
|
expect(getCapabilitiesForModel("codex", "gpt-6-astra")).toMatchObject({
|
|
vision: true,
|
|
reasoning: true,
|
|
search: true,
|
|
thinkingFormat: "openai",
|
|
contextWindow: 272000,
|
|
maxOutput: 128000,
|
|
});
|
|
});
|
|
});
|