@agent-native/core 0.205.0 → 0.206.0-nightly-20261009011246

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/a2a/client.d.ts +2 -2
  2. package/dist/agent/engine/anthropic-engine.d.ts +1 -1
  3. package/dist/agent/engine/builder-engine.d.ts +1 -1
  4. package/dist/agent/engine/builder-engine.js +23 -8
  5. package/dist/agent/engine/error-telemetry.d.ts +5 -0
  6. package/dist/agent/engine/error-telemetry.js +41 -0
  7. package/dist/agent/engine/registry.d.ts +1 -6
  8. package/dist/agent/engine/registry.js +2 -31
  9. package/dist/agent/model-config.d.ts +26 -14
  10. package/dist/agent/model-config.js +131 -8
  11. package/dist/agent/model-version.d.ts +19 -0
  12. package/dist/agent/model-version.js +153 -0
  13. package/dist/agent/production-agent.d.ts +1 -0
  14. package/dist/agent/production-agent.js +24 -6
  15. package/dist/agent/provider-model-selection.js +6 -4
  16. package/dist/agent/run-manager.js +5 -11
  17. package/dist/agent/thread-data-builder.js +14 -6
  18. package/dist/authorization/check-action.js +8 -4
  19. package/dist/chat-threads/store.js +22 -9
  20. package/dist/client/analytics.d.ts +1 -0
  21. package/dist/client/analytics.js +10 -2
  22. package/dist/client/chat/runtime.js +18 -0
  23. package/dist/client/chat-model-groups.d.ts +3 -0
  24. package/dist/client/error-format.js +10 -7
  25. package/dist/client/onboarding/use-onboarding.d.ts +12 -0
  26. package/dist/client/onboarding/use-onboarding.js +491 -4
  27. package/dist/client/session-replay-privacy.d.ts +8 -0
  28. package/dist/client/session-replay-privacy.js +8 -0
  29. package/dist/client/session-replay.d.ts +1 -0
  30. package/dist/client/session-replay.js +18 -9
  31. package/dist/client/sse-event-processor.js +10 -6
  32. package/dist/client/use-chat-models.d.ts +5 -0
  33. package/dist/client/use-chat-models.js +51 -5
  34. package/dist/client/use-session.d.ts +8 -1
  35. package/dist/client/use-session.js +20 -1
  36. package/dist/collab/struct-routes.d.ts +1 -1
  37. package/dist/deploy/build.js +353 -3
  38. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  39. package/dist/jobs/backfill-run-history-ownership.d.ts +12 -0
  40. package/dist/jobs/backfill-run-history-ownership.js +87 -0
  41. package/dist/jobs/background-automation-runner.js +3 -9
  42. package/dist/jobs/remote-execution.js +3 -9
  43. package/dist/jobs/run-history-ownership.d.ts +5 -0
  44. package/dist/jobs/run-history-ownership.js +16 -0
  45. package/dist/jobs/run-now.js +2 -3
  46. package/dist/localization/agent-resources-messages.d.ts +3 -0
  47. package/dist/localization/agent-resources-messages.js +33 -0
  48. package/dist/mcp/actions/create-org-service-token.js +5 -7
  49. package/dist/mcp/build-server.d.ts +23 -18
  50. package/dist/mcp/build-server.js +220 -212
  51. package/dist/mcp/connect-route.d.ts +11 -2
  52. package/dist/mcp/connect-route.js +34 -24
  53. package/dist/mcp/connect-store.d.ts +9 -13
  54. package/dist/mcp/connect-store.js +11 -24
  55. package/dist/mcp/credential-membership.js +17 -6
  56. package/dist/mcp/oauth-route.d.ts +11 -1
  57. package/dist/mcp/oauth-route.js +28 -6
  58. package/dist/mcp/oauth-token.d.ts +12 -2
  59. package/dist/mcp/oauth-token.js +15 -4
  60. package/dist/mcp/server.js +9 -5
  61. package/dist/notifications/routes.d.ts +2 -2
  62. package/dist/observability/posthog-ai.d.ts +1 -0
  63. package/dist/observability/posthog-ai.js +20 -8
  64. package/dist/observability/routes.d.ts +6 -6
  65. package/dist/observability/traces.js +61 -39
  66. package/dist/org/app-roles.d.ts +8 -1
  67. package/dist/org/app-roles.js +29 -9
  68. package/dist/org/context.js +24 -8
  69. package/dist/org/index.d.ts +2 -2
  70. package/dist/org/workspace-app-identity.d.ts +1 -0
  71. package/dist/org/workspace-app-identity.js +25 -0
  72. package/dist/progress/routes.d.ts +1 -1
  73. package/dist/provider-api/actions/custom-provider-registration.d.ts +11 -11
  74. package/dist/provider-api/actions/provider-api.d.ts +3 -3
  75. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  76. package/dist/scripts/agent-engines/list-agent-engines.js +1 -0
  77. package/dist/server/action-routes.js +8 -1
  78. package/dist/server/agent-chat-plugin.js +1 -0
  79. package/dist/server/agent-engine-default-model-route.d.ts +1 -1
  80. package/dist/server/auth.js +33 -17
  81. package/dist/server/bearer-credential-refusal.d.ts +23 -0
  82. package/dist/server/bearer-credential-refusal.js +67 -0
  83. package/dist/server/better-auth-instance.js +13 -6
  84. package/dist/server/builder-browser.d.ts +2 -0
  85. package/dist/server/builder-browser.js +16 -3
  86. package/dist/server/capture-error.d.ts +1 -0
  87. package/dist/server/capture-error.js +28 -4
  88. package/dist/server/complete-text.js +16 -3
  89. package/dist/server/core-routes-plugin.js +2 -0
  90. package/dist/server/dev-action-bridge.js +7 -1
  91. package/dist/server/google-oauth.js +6 -3
  92. package/dist/server/index.d.ts +1 -1
  93. package/dist/server/index.js +1 -1
  94. package/dist/server/realtime-token.d.ts +1 -1
  95. package/dist/server/recap-image-route.js +4 -0
  96. package/dist/server/request-context.d.ts +16 -0
  97. package/dist/server/request-context.js +17 -0
  98. package/dist/shared/agent-chat-context.d.ts +1 -0
  99. package/dist/shared/agent-chat-context.js +26 -0
  100. package/dist/shared/index.d.ts +1 -1
  101. package/dist/shared/index.js +1 -1
  102. package/dist/shared/reasoning-effort.js +10 -1
  103. package/dist/shared/ssr-session-bootstrap.d.ts +7 -0
  104. package/dist/shared/ssr-session-bootstrap.js +21 -0
  105. package/dist/sharing/access.js +86 -5
  106. package/dist/templates/builder-code-starter/server/routes/index.get.ts +2 -0
  107. package/dist/triggers/routes.js +2 -1
  108. package/docs/content/automation-connectors.mdx +5 -3
  109. package/docs/content/automations.mdx +78 -49
  110. package/docs/content/observability.mdx +16 -5
  111. package/docs/content/organizations-teams-permissions.mdx +44 -2
  112. package/docs/content/recurring-jobs.mdx +4 -8
  113. package/docs/content/template-forms.mdx +6 -0
  114. package/package.json +5 -4
  115. package/src/templates/builder-code-starter/server/routes/index.get.ts +2 -0
@@ -50,8 +50,8 @@ export declare function signA2AToken(email: string, orgDomain?: string, orgSecre
50
50
  preferGlobalSecret?: boolean;
51
51
  audience?: string | string[];
52
52
  /**
53
- * Extra JWT claims to merge alongside `sub` / `org_domain`. Used by the
54
- * MCP connect flow to add a revocable `jti` and a `scope: "mcp-connect"`
53
+ * Extra JWT claims to merge alongside `sub` / `org_domain`. Used by
54
+ * first-party MCP calls to add a `jti` and a `scope: "mcp-connect"`
55
55
  * marker. Reserved claims (`sub`, `org_domain`) cannot be overridden —
56
56
  * they are spread last so a caller can never spoof identity via this map.
57
57
  */
@@ -1,5 +1,5 @@
1
1
  import type { AgentEngine, EngineCapabilities } from "./types.js";
2
2
  export declare const ANTHROPIC_CAPABILITIES: EngineCapabilities;
3
- export declare const ANTHROPIC_SUPPORTED_MODELS: readonly ["claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5"];
3
+ export declare const ANTHROPIC_SUPPORTED_MODELS: readonly ["claude-haiku-5-5", "claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5-1", "claude-fable-5"];
4
4
  export declare const ANTHROPIC_DEFAULT_MODEL: "claude-sonnet-5-5";
5
5
  export declare function createAnthropicEngine(config?: Record<string, unknown>): AgentEngine;
@@ -1,7 +1,7 @@
1
1
  import { type BuilderGatewayLane } from "../../server/credential-provider.js";
2
2
  import type { AgentEngine, EngineCapabilities } from "./types.js";
3
3
  export declare const BUILDER_CAPABILITIES: EngineCapabilities;
4
- export declare const BUILDER_SUPPORTED_MODELS: readonly ["auto", "claude-haiku-4-5", "claude-sonnet-5", "claude-opus-5-5", "gpt-5-4", "gpt-5-5", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gpt-6.1-sol", "gpt-5-6-terra", "gpt-6-luna", "gemini-3-1-pro", "gemini-3-8-flash", "gemini-3-5-flash-lite", "gemini-3-1-flash-lite", "qwen3-coder", "kimi-k2-5", "deepseek-v3-1", "deepseek-v4-1-flash", "z-ai-glm-4-5", "z-ai-glm-5-1", "z-ai-glm-5-3-flash"];
4
+ export declare const BUILDER_SUPPORTED_MODELS: readonly ["auto", "claude-haiku-5-5", "claude-sonnet-5-5", "claude-opus-5-5", "gpt-5-4", "gpt-5-5", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gpt-6-1-sol", "gpt-5-6-terra", "gpt-6-luna", "gemini-3-1-pro", "gemini-3-8-flash", "gemini-3-5-flash-lite", "gemini-3-1-flash-lite", "grok-code-fast", "qwen3-coder", "kimi-k2-5", "deepseek-v4-pro", "deepseek-v4-1-flash", "deepseek-v3-1", "z-ai-glm-4-5", "z-ai-glm-5-1", "z-ai-glm-5-3-flash"];
5
5
  export declare const BUILDER_MODEL_UNAUTHORIZED_ERROR_CODE = "builder_model_unauthorized";
6
6
  /**
7
7
  * A truncated stream, not a rejected request: the client continues the partial
@@ -347,10 +347,15 @@ class BuilderEngine {
347
347
  }
348
348
  const RETRYABLE_GATEWAY_STATUSES = new Set([408, 429, 500, 502, 503, 504, 529]);
349
349
  const TRANSIENT_UPSTREAM_PATTERN = /overloaded|rate_limit|rate limit reached|too many requests|\b429\b|\b529\b|\b502\b|\b503\b|\b504\b|resource_exhausted|quota exceeded|socket hang up|connection reset|temporarily unavailable|timeout/i;
350
- function isTransientGatewayFailure(rawMessage, status) {
350
+ function isTransientGatewayFailure(rawMessage, status, structuredCode) {
351
351
  if (status !== undefined && RETRYABLE_GATEWAY_STATUSES.has(status)) {
352
352
  return true;
353
353
  }
354
+ if (structuredCode &&
355
+ /^[a-z\d_.-]{1,64}$/i.test(structuredCode) &&
356
+ TRANSIENT_UPSTREAM_PATTERN.test(structuredCode)) {
357
+ return true;
358
+ }
354
359
  if (isBuilderGatewayInternalErrorMessage(rawMessage))
355
360
  return true;
356
361
  return TRANSIENT_UPSTREAM_PATTERN.test(rawMessage);
@@ -699,6 +704,7 @@ async function* parseJsonlStream(reader, model, captureContext = {}) {
699
704
  yield stop({
700
705
  error: errMsg,
701
706
  errorCode: errCode,
707
+ providerRetryable: false,
702
708
  ...(isCreditsLimitErrorCode(errCode)
703
709
  ? { upgradeUrl: await buildUpgradeUrl() }
704
710
  : {}),
@@ -706,9 +712,8 @@ async function* parseJsonlStream(reader, model, captureContext = {}) {
706
712
  }
707
713
  else if (reason === "error") {
708
714
  const explicitErrMsg = event.error || event.message || event.detail;
709
- const errMsg = explicitErrMsg ??
710
- `Gateway error (no detail; raw event: ${JSON.stringify(event)})`;
711
715
  const gatewayRequestId = typeof event.requestId === "string" ? event.requestId : undefined;
716
+ const errMsg = explicitErrMsg ?? "Gateway error (no detail)";
712
717
  const gatewayErrCode = canonicalizeBuilderGatewayErrorCode(event.errorCode ?? event.code, String(errMsg));
713
718
  // The gateway already authenticated this request before streaming,
714
719
  // so a bare "Unauthorized" here means the account cannot use this
@@ -736,6 +741,8 @@ async function* parseJsonlStream(reader, model, captureContext = {}) {
736
741
  (!explicitErrMsg
737
742
  ? "builder_gateway_error"
738
743
  : classifyTerminalErrorCode(String(errMsg))));
744
+ const isInvalidRequest = gatewayErrCode === "invalid_request" ||
745
+ gatewayErrCode === "invalid_request_error";
739
746
  console.error(`[builder-engine] stop reason=error model=${model} code=${errCode ?? "(none)"} requestId=${gatewayRequestId ?? "(none)"} error=${errMsg}`);
740
747
  if (isCredentialAuthError) {
741
748
  await recordAuthFailureForCurrentLane({
@@ -753,7 +760,7 @@ async function* parseJsonlStream(reader, model, captureContext = {}) {
753
760
  requestId: gatewayRequestId,
754
761
  model,
755
762
  gatewayUrl: captureContext.gatewayUrl,
756
- rawEvent: event,
763
+ errorCode: gatewayErrCode,
757
764
  });
758
765
  }
759
766
  yield stop({
@@ -765,9 +772,12 @@ async function* parseJsonlStream(reader, model, captureContext = {}) {
765
772
  ? { upgradeUrl: await buildUpgradeUrl() }
766
773
  : {}),
767
774
  ...(isBareRejection ? { statusCode: 403 } : {}),
768
- ...(isBareRejection || isTransientGatewayFailure(String(errMsg))
769
- ? { providerRetryable: true }
770
- : {}),
775
+ ...(isInvalidRequest
776
+ ? { providerRetryable: false }
777
+ : isBareRejection ||
778
+ isTransientGatewayFailure(String(errMsg), undefined, gatewayErrCode)
779
+ ? { providerRetryable: true }
780
+ : {}),
771
781
  ...(gatewayRequestId ? { requestId: gatewayRequestId } : {}),
772
782
  });
773
783
  }
@@ -1059,6 +1069,7 @@ function isBuilderGatewayNetworkError(err) {
1059
1069
  function captureBuilderGatewayTransportError(err, context) {
1060
1070
  captureError(err, {
1061
1071
  route: "/_agent-native/agent-chat",
1072
+ errorMessagePolicy: "omit",
1062
1073
  tags: {
1063
1074
  source: "builder-engine",
1064
1075
  phase: context.phase,
@@ -1088,12 +1099,16 @@ function captureBuilderGatewayTransportError(err, context) {
1088
1099
  });
1089
1100
  }
1090
1101
  function captureBuilderGatewayNoDetailError(context) {
1102
+ const providerErrorCode = context.errorCode && /^[a-z\d_.-]{1,64}$/i.test(context.errorCode)
1103
+ ? context.errorCode
1104
+ : undefined;
1091
1105
  const err = new Error(context.requestId
1092
1106
  ? `Builder gateway stop reason=error with no detail (requestId=${context.requestId})`
1093
1107
  : "Builder gateway stop reason=error with no detail");
1094
1108
  err.name = "BuilderGatewayNoDetailError";
1095
1109
  captureError(err, {
1096
1110
  route: "/_agent-native/agent-chat",
1111
+ errorMessagePolicy: "omit",
1097
1112
  tags: {
1098
1113
  source: "builder-engine",
1099
1114
  phase: "stream",
@@ -1104,7 +1119,6 @@ function captureBuilderGatewayNoDetailError(context) {
1104
1119
  extra: {
1105
1120
  gatewayOrigin: context.gatewayUrl?.origin,
1106
1121
  gatewayPath: context.gatewayUrl?.pathname,
1107
- rawEvent: context.rawEvent,
1108
1122
  },
1109
1123
  contexts: {
1110
1124
  builderGateway: {
@@ -1114,6 +1128,7 @@ function captureBuilderGatewayNoDetailError(context) {
1114
1128
  gatewayPath: context.gatewayUrl?.pathname,
1115
1129
  requestId: context.requestId,
1116
1130
  errorCode: "builder_gateway_error",
1131
+ ...(providerErrorCode ? { providerErrorCode } : {}),
1117
1132
  },
1118
1133
  },
1119
1134
  });
@@ -0,0 +1,5 @@
1
+ export declare function runErrorTelemetryProperties(code: string | undefined, message?: string | null): {
2
+ error_code: string;
3
+ error_cause: string;
4
+ };
5
+ export declare function runTelemetryException(error: unknown, code: string): Error;
@@ -0,0 +1,41 @@
1
+ import { classifyTerminalErrorCode } from "./error-detail.js";
2
+ import { classifyAgentFailure } from "./failure-taxonomy.js";
3
+ export function runErrorTelemetryProperties(code, message) {
4
+ const errorCode = code && /^[a-zA-Z][a-zA-Z0-9_.:-]{0,99}$/.test(code)
5
+ ? code
6
+ : (classifyTerminalErrorCode(message ?? undefined) ?? "unknown");
7
+ return {
8
+ error_code: errorCode,
9
+ error_cause: classifyAgentFailure({ errorCode }).code,
10
+ };
11
+ }
12
+ export function runTelemetryException(error, code) {
13
+ const original = error instanceof Error ? error : undefined;
14
+ const exception = new Error("Internal Server Error");
15
+ // Code can set any name, so only class-shaped names are trusted.
16
+ exception.name =
17
+ original &&
18
+ /^[A-Za-z][A-Za-z0-9_]{0,90}(?:Error|Exception)$/.test(original.name)
19
+ ? original.name
20
+ : "Error";
21
+ const frames = original ? stackFrames(original) : [];
22
+ exception.stack = frames.length
23
+ ? `${exception.name}: ${exception.message}\n${frames.join("\n")}`
24
+ : undefined;
25
+ Object.assign(exception, { errorCode: code });
26
+ return exception;
27
+ }
28
+ function stackFrames(error) {
29
+ // V8 renders `stack` as String(error) followed by the frames, and any line
30
+ // of a message can look like a frame. Without that exact header, where the
31
+ // message ends is unknown, so no line is kept. Text appended after the frames,
32
+ // such as a cause, carries its own message, so the first non-frame line ends
33
+ // the stack.
34
+ const header = `${String(error)}\n`;
35
+ const stack = error.stack;
36
+ if (!stack?.startsWith(header))
37
+ return [];
38
+ const lines = stack.slice(header.length).split(/\r?\n/);
39
+ const end = lines.findIndex((line) => !/^\s+at\s.*(?:\)|:\d+:\d+)$/.test(line));
40
+ return end === -1 ? lines : lines.slice(0, end);
41
+ }
@@ -28,11 +28,7 @@ export declare function unregisterAgentEngine(name: string): void;
28
28
  export declare function getAgentEngineEntry(name: string): AgentEngineEntry | undefined;
29
29
  export declare function listAgentEngines(): AgentEngineEntry[];
30
30
  export declare function isAgentEnginePackageInstalled(entry: AgentEngineEntry): boolean;
31
- export interface NormalizeModelOptions {
32
- preserveCustomModels?: boolean;
33
- acceptsCustomModels?: boolean;
34
- }
35
- export declare function normalizeModelForEngine(engine: Pick<AgentEngine, "name" | "defaultModel" | "supportedModels" | "acceptsCustomModels" | "preserveCustomModels">, model: string | null | undefined, options?: NormalizeModelOptions): string;
31
+ export { normalizeModelForEngine, type NormalizeModelOptions, } from "../model-version.js";
36
32
  type ModelResolvableEngine = Pick<AgentEngine, "name" | "defaultModel" | "supportedModels" | "acceptsCustomModels" | "preserveCustomModels">;
37
33
  export declare function resolveDelegatedRunModel(engine: ModelResolvableEngine, options: {
38
34
  explicitModel?: string | null;
@@ -97,4 +93,3 @@ export declare function resolveEngine(config: ResolveEngineConfig): Promise<Agen
97
93
  export declare function getStoredModelForEngine(engine: AgentEngine | string, options?: {
98
94
  appId?: string;
99
95
  }): Promise<string | undefined>;
100
- export {};
@@ -10,8 +10,7 @@ import { resolveSecretWithAliasesDetailed, secretKeyNames, } from "../../server/
10
10
  import { getAgentAppModelDefaultForCurrentRequest } from "../app-model-defaults.js";
11
11
  import { CHATGPT_SUBSCRIPTION_ENGINE_NAME } from "../chatgpt-subscription-contract.js";
12
12
  import { readDefaultAgentEngineSetting } from "../default-agent-engine.js";
13
- import { BUILDER_CLAUDE_SONNET_MODEL_ID, CLAUDE_SONNET_MODEL_ID, } from "../model-config.js";
14
- import { findLatestSupportedVersionMatch, isNewerVersionedModel, upgradeModelToLatestSupportedVersion, } from "../model-version.js";
13
+ import { normalizeModelForEngine } from "../model-version.js";
15
14
  import { createProviderEndpointFetch } from "./ai-sdk-engine.js";
16
15
  import { AI_SDK_ANTHROPIC_DEFAULT_BASE_URL, OLLAMA_DEFAULT_BASE_URL, OLLAMA_BASE_URL_ENV_VAR, OPENAI_BASE_URL_ENV_VAR, OPENAI_DEFAULT_BASE_URL, isCustomOpenAiBaseUrl, } from "./openai-compatible-endpoint.js";
17
16
  import { isLocalNetworkOllamaEndpoint, validateProviderBaseUrl, } from "./provider-endpoint-validation.js";
@@ -129,35 +128,7 @@ export function isAgentEnginePackageInstalled(entry) {
129
128
  .filter((name) => Boolean(name)) ?? [];
130
129
  return packageNames.every(canResolvePackage);
131
130
  }
132
- export function normalizeModelForEngine(engine, model, options = {}) {
133
- const candidate = typeof model === "string" ? model.trim() : "";
134
- if (!candidate)
135
- return engine.defaultModel;
136
- if (engine.preserveCustomModels || options.preserveCustomModels) {
137
- return candidate;
138
- }
139
- const upgradedModel = upgradeModelToLatestSupportedVersion(candidate, engine.supportedModels);
140
- if (upgradedModel)
141
- return upgradedModel;
142
- if (candidate === "auto" ||
143
- engine.supportedModels.includes(candidate) ||
144
- engine.supportedModels.length === 0) {
145
- return candidate;
146
- }
147
- if (engine.acceptsCustomModels || options.acceptsCustomModels) {
148
- return candidate === BUILDER_CLAUDE_SONNET_MODEL_ID &&
149
- engine.supportedModels.includes(CLAUDE_SONNET_MODEL_ID)
150
- ? CLAUDE_SONNET_MODEL_ID
151
- : candidate;
152
- }
153
- const versionMatch = findLatestSupportedVersionMatch(candidate, engine.supportedModels);
154
- if (versionMatch && isNewerVersionedModel(candidate, versionMatch)) {
155
- return versionMatch;
156
- }
157
- if (versionMatch)
158
- return versionMatch;
159
- return engine.defaultModel;
160
- }
131
+ export { normalizeModelForEngine, } from "../model-version.js";
161
132
  function resolveModelHintForEngine(engine, hint) {
162
133
  const candidate = typeof hint === "string" ? hint.trim() : "";
163
134
  if (!candidate || candidate === "auto")
@@ -16,33 +16,45 @@ export declare function getContextWindowForModel(modelId: string): number;
16
16
  export declare function getMaxOutputTokensForModel(modelId: string | undefined): number;
17
17
  export declare const CLAUDE_SONNET_MODEL_ID = "claude-sonnet-5-5";
18
18
  export declare const CLAUDE_SONNET_MODEL_LABEL = "Claude Sonnet 5.5";
19
- export declare const BUILDER_CLAUDE_SONNET_MODEL_ID = "claude-sonnet-5";
20
- export declare const BUILDER_CLAUDE_SONNET_MODEL_LABEL = "Claude Sonnet 5";
19
+ export declare const BUILDER_CLAUDE_SONNET_MODEL_ID = "claude-sonnet-5-5";
20
+ export declare const BUILDER_CLAUDE_SONNET_MODEL_LABEL = "Claude Sonnet 5.5";
21
+ export declare const CURRENT_BUILDER_CLAUDE_MODEL_OPTIONS: readonly [{
22
+ readonly value: "claude-haiku-5-5";
23
+ readonly label: "Claude Haiku 5.5";
24
+ }, {
25
+ readonly value: "claude-sonnet-5-5";
26
+ readonly label: "Claude Sonnet 5.5";
27
+ }, {
28
+ readonly value: "claude-opus-5-5";
29
+ readonly label: "Claude Opus 5.5";
30
+ }];
31
+ export declare function getClaudeModelOptionLabel(modelId: string): string;
32
+ export declare const BUILDER_MODEL_ALIASES: Readonly<Record<string, string>>;
21
33
  export declare const AGENT_MODEL_CONFIG: {
22
34
  readonly builder: {
23
35
  readonly defaultModel: "gpt-6-luna";
24
- readonly supportedModels: readonly ["auto", "claude-haiku-4-5", "claude-sonnet-5", "claude-opus-5-5", "gpt-5-4", "gpt-5-5", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gpt-6.1-sol", "gpt-5-6-terra", "gpt-6-luna", "gemini-3-1-pro", "gemini-3-8-flash", "gemini-3-5-flash-lite", "gemini-3-1-flash-lite", "qwen3-coder", "kimi-k2-5", "deepseek-v3-1", "deepseek-v4-1-flash", "z-ai-glm-4-5", "z-ai-glm-5-1", "z-ai-glm-5-3-flash"];
36
+ readonly supportedModels: readonly ["auto", "claude-haiku-5-5", "claude-sonnet-5-5", "claude-opus-5-5", "gpt-5-4", "gpt-5-5", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gpt-6-1-sol", "gpt-5-6-terra", "gpt-6-luna", "gemini-3-1-pro", "gemini-3-8-flash", "gemini-3-5-flash-lite", "gemini-3-1-flash-lite", "grok-code-fast", "qwen3-coder", "kimi-k2-5", "deepseek-v4-pro", "deepseek-v4-1-flash", "deepseek-v3-1", "z-ai-glm-4-5", "z-ai-glm-5-1", "z-ai-glm-5-3-flash"];
25
37
  };
26
38
  readonly anthropic: {
27
39
  readonly defaultModel: "claude-sonnet-5-5";
28
- readonly supportedModels: readonly ["claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5"];
40
+ readonly supportedModels: readonly ["claude-haiku-5-5", "claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5-1", "claude-fable-5"];
29
41
  };
30
42
  readonly aiSdk: {
31
43
  readonly anthropic: {
32
44
  readonly defaultModel: "claude-sonnet-5-5";
33
- readonly supportedModels: readonly ["claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5"];
45
+ readonly supportedModels: readonly ["claude-haiku-5-5", "claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5-1", "claude-fable-5"];
34
46
  };
35
47
  readonly openai: {
36
48
  readonly defaultModel: "gpt-6-luna";
37
- readonly supportedModels: readonly ["gpt-6-luna", "gpt-5.6-terra", "gpt-6.1-sol"];
49
+ readonly supportedModels: readonly ["gpt-6-luna", "gpt-6.1-sol", "gpt-5.6-terra", "gpt-5.5", "gpt-5.4", "gpt-5.4-mini", "gpt-5.1-codex-mini"];
38
50
  };
39
51
  readonly openrouter: {
40
52
  readonly defaultModel: string;
41
- readonly supportedModels: readonly ["openai/gpt-6-luna", "openai/gpt-5.6-terra", "openai/gpt-6.1-sol", "openai/gpt-6-astra", "openai/gpt-6-astra-pro", "anthropic/claude-sonnet-5.5", "anthropic/claude-opus-5.5", "anthropic/claude-opus-4.8", "anthropic/claude-fable-5", "anthropic/claude-fable-5.1", "google/gemini-3.8-flash", "qwen/qwen3.8-max-0902", "meta/muse-spark-1.3", "inception/mercury-2.5", "z-ai/glm-5.2"];
53
+ readonly supportedModels: readonly ["openai/gpt-6-luna", "openai/gpt-5.6-terra", "openai/gpt-6.1-sol", "openai/gpt-6-astra", "openai/gpt-6-astra-pro", "openai/gpt-5.5", "openai/gpt-5.4", "openai/gpt-5.4-mini", "openai/gpt-5.1-codex-mini", "anthropic/claude-haiku-5.5", "anthropic/claude-sonnet-5.5", "anthropic/claude-opus-5.5", "anthropic/claude-opus-4.8", "anthropic/claude-fable-5", "anthropic/claude-fable-5.1", "google/gemini-3.8-flash", "google/gemini-3.5-flash-lite", "google/gemini-3.1-flash-lite", "google/gemini-3.1-pro-preview", "x-ai/grok-4.7", "x-ai/grok-build-0.1", "qwen/qwen3-coder", "moonshotai/kimi-k2.5", "deepseek/deepseek-v4-pro", "deepseek/deepseek-v4.1-flash", "deepseek/deepseek-chat-v3.1", "z-ai/glm-4.5", "z-ai/glm-5.1", "z-ai/glm-5.3-flash", "qwen/qwen3.8-max-0902", "meta/muse-spark-1.3", "inception/mercury-2.5", "z-ai/glm-5.2"];
42
54
  };
43
55
  readonly google: {
44
56
  readonly defaultModel: "gemini-3.8-flash";
45
- readonly supportedModels: readonly ["gemini-3.8-flash", "gemini-3.1-pro-preview"];
57
+ readonly supportedModels: readonly ["gemini-3.8-flash", "gemini-3.5-flash-lite", "gemini-3.1-flash-lite", "gemini-3.1-pro-preview"];
46
58
  };
47
59
  readonly groq: {
48
60
  readonly defaultModel: "llama-3.3-70b-versatile";
@@ -64,28 +76,28 @@ export declare const AGENT_MODEL_CONFIG: {
64
76
  };
65
77
  export declare const BUILDER_MODEL_CONFIG: {
66
78
  readonly defaultModel: "gpt-6-luna";
67
- readonly supportedModels: readonly ["auto", "claude-haiku-4-5", "claude-sonnet-5", "claude-opus-5-5", "gpt-5-4", "gpt-5-5", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gpt-6.1-sol", "gpt-5-6-terra", "gpt-6-luna", "gemini-3-1-pro", "gemini-3-8-flash", "gemini-3-5-flash-lite", "gemini-3-1-flash-lite", "qwen3-coder", "kimi-k2-5", "deepseek-v3-1", "deepseek-v4-1-flash", "z-ai-glm-4-5", "z-ai-glm-5-1", "z-ai-glm-5-3-flash"];
79
+ readonly supportedModels: readonly ["auto", "claude-haiku-5-5", "claude-sonnet-5-5", "claude-opus-5-5", "gpt-5-4", "gpt-5-5", "gpt-5-4-mini", "gpt-5-1-codex-mini", "gpt-6-1-sol", "gpt-5-6-terra", "gpt-6-luna", "gemini-3-1-pro", "gemini-3-8-flash", "gemini-3-5-flash-lite", "gemini-3-1-flash-lite", "grok-code-fast", "qwen3-coder", "kimi-k2-5", "deepseek-v4-pro", "deepseek-v4-1-flash", "deepseek-v3-1", "z-ai-glm-4-5", "z-ai-glm-5-1", "z-ai-glm-5-3-flash"];
68
80
  };
69
81
  export declare const ANTHROPIC_MODEL_CONFIG: {
70
82
  readonly defaultModel: "claude-sonnet-5-5";
71
- readonly supportedModels: readonly ["claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5"];
83
+ readonly supportedModels: readonly ["claude-haiku-5-5", "claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5-1", "claude-fable-5"];
72
84
  };
73
85
  export declare const AI_SDK_MODEL_CONFIG: {
74
86
  readonly anthropic: {
75
87
  readonly defaultModel: "claude-sonnet-5-5";
76
- readonly supportedModels: readonly ["claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5"];
88
+ readonly supportedModels: readonly ["claude-haiku-5-5", "claude-haiku-4-5-20251001", "claude-sonnet-5-5", "claude-opus-5-5", "claude-opus-4-8", "claude-fable-5-1", "claude-fable-5"];
77
89
  };
78
90
  readonly openai: {
79
91
  readonly defaultModel: "gpt-6-luna";
80
- readonly supportedModels: readonly ["gpt-6-luna", "gpt-5.6-terra", "gpt-6.1-sol"];
92
+ readonly supportedModels: readonly ["gpt-6-luna", "gpt-6.1-sol", "gpt-5.6-terra", "gpt-5.5", "gpt-5.4", "gpt-5.4-mini", "gpt-5.1-codex-mini"];
81
93
  };
82
94
  readonly openrouter: {
83
95
  readonly defaultModel: string;
84
- readonly supportedModels: readonly ["openai/gpt-6-luna", "openai/gpt-5.6-terra", "openai/gpt-6.1-sol", "openai/gpt-6-astra", "openai/gpt-6-astra-pro", "anthropic/claude-sonnet-5.5", "anthropic/claude-opus-5.5", "anthropic/claude-opus-4.8", "anthropic/claude-fable-5", "anthropic/claude-fable-5.1", "google/gemini-3.8-flash", "qwen/qwen3.8-max-0902", "meta/muse-spark-1.3", "inception/mercury-2.5", "z-ai/glm-5.2"];
96
+ readonly supportedModels: readonly ["openai/gpt-6-luna", "openai/gpt-5.6-terra", "openai/gpt-6.1-sol", "openai/gpt-6-astra", "openai/gpt-6-astra-pro", "openai/gpt-5.5", "openai/gpt-5.4", "openai/gpt-5.4-mini", "openai/gpt-5.1-codex-mini", "anthropic/claude-haiku-5.5", "anthropic/claude-sonnet-5.5", "anthropic/claude-opus-5.5", "anthropic/claude-opus-4.8", "anthropic/claude-fable-5", "anthropic/claude-fable-5.1", "google/gemini-3.8-flash", "google/gemini-3.5-flash-lite", "google/gemini-3.1-flash-lite", "google/gemini-3.1-pro-preview", "x-ai/grok-4.7", "x-ai/grok-build-0.1", "qwen/qwen3-coder", "moonshotai/kimi-k2.5", "deepseek/deepseek-v4-pro", "deepseek/deepseek-v4.1-flash", "deepseek/deepseek-chat-v3.1", "z-ai/glm-4.5", "z-ai/glm-5.1", "z-ai/glm-5.3-flash", "qwen/qwen3.8-max-0902", "meta/muse-spark-1.3", "inception/mercury-2.5", "z-ai/glm-5.2"];
85
97
  };
86
98
  readonly google: {
87
99
  readonly defaultModel: "gemini-3.8-flash";
88
- readonly supportedModels: readonly ["gemini-3.8-flash", "gemini-3.1-pro-preview"];
100
+ readonly supportedModels: readonly ["gemini-3.8-flash", "gemini-3.5-flash-lite", "gemini-3.1-flash-lite", "gemini-3.1-pro-preview"];
89
101
  };
90
102
  readonly groq: {
91
103
  readonly defaultModel: "llama-3.3-70b-versatile";
@@ -1,5 +1,7 @@
1
1
  const MODEL_CONTEXT_WINDOWS = {
2
2
  "claude-fable-5": 1_000_000,
3
+ "claude-fable-5-1": 1_000_000,
4
+ "claude-haiku-5-5": 1_000_000,
3
5
  "claude-opus-5-5": 1_000_000,
4
6
  "claude-opus-4-8": 1_000_000,
5
7
  "claude-opus-4-7": 1_000_000,
@@ -8,6 +10,16 @@ const MODEL_CONTEXT_WINDOWS = {
8
10
  "claude-sonnet-4-6": 1_000_000,
9
11
  "claude-haiku-4-5": 200_000,
10
12
  "claude-haiku-4-5-20251001": 200_000,
13
+ "anthropic/claude-fable-5.1": 1_000_000,
14
+ "anthropic/claude-haiku-5.5": 1_000_000,
15
+ "deepseek-v4-pro": 1_048_576,
16
+ "deepseek/deepseek-v4-pro": 1_048_576,
17
+ "deepseek-flash": 1_048_576,
18
+ "deepseek-v4-1-flash": 1_048_576,
19
+ "deepseek/deepseek-v4.1-flash": 1_048_576,
20
+ "grok-code-fast": 200_000,
21
+ "x-ai/grok-4.7": 500_000,
22
+ "x-ai/grok-build-0.1": 256_000,
11
23
  "gpt-5-6-sol": 1_050_000,
12
24
  "gpt-5-6-terra": 1_050_000,
13
25
  "gpt-5-6-luna": 400_000,
@@ -27,7 +39,14 @@ const MODEL_CONTEXT_WINDOWS = {
27
39
  "openai/gpt-6.1-sol": 1_050_000,
28
40
  "openai/gpt-6-sol": 1_050_000,
29
41
  "openai/gpt-6-luna": 1_050_000,
42
+ "openai/gpt-5.5": 1_050_000,
43
+ "openai/gpt-5.4": 1_050_000,
44
+ "openai/gpt-5.4-mini": 400_000,
45
+ "openai/gpt-5.1-codex-mini": 400_000,
30
46
  "google/gemini-2.5-flash": 1_048_576,
47
+ "google/gemini-3.5-flash-lite": 1_048_576,
48
+ "google/gemini-3.1-flash-lite": 1_048_576,
49
+ "google/gemini-3.1-pro-preview": 1_048_576,
31
50
  "z-ai/glm-5.2": 1_048_576,
32
51
  "gpt-6-sol": 1_050_000,
33
52
  "gpt-6.1-sol": 1_050_000,
@@ -35,8 +54,18 @@ const MODEL_CONTEXT_WINDOWS = {
35
54
  "gpt-5.6-sol": 1_050_000,
36
55
  "gpt-5.6-terra": 1_050_000,
37
56
  "gpt-5.6-luna": 400_000,
57
+ "gpt-5.5": 1_050_000,
58
+ "gpt-5.4": 1_050_000,
59
+ "gpt-5.4-mini": 400_000,
60
+ "gpt-5.1-codex-mini": 400_000,
61
+ "gpt-5-4-mini": 400_000,
62
+ "gpt-5-1-codex-mini": 400_000,
38
63
  "gemini-3.5-flash": 1_048_576,
64
+ "gemini-3.5-flash-lite": 1_048_576,
65
+ "gemini-3.1-flash-lite": 1_048_576,
39
66
  "gemini-3.1-pro-preview": 1_048_576,
67
+ "gemini-3-5-flash-lite": 1_048_576,
68
+ "gemini-3-8-flash": 1_048_576,
40
69
  "gemini-2.5-flash": 1_048_576,
41
70
  "gemini-2.5-pro": 1_048_576,
42
71
  };
@@ -57,6 +86,7 @@ export function getContextWindowForModel(modelId) {
57
86
  const id = modelId.toLowerCase();
58
87
  if (id === "claude-fable-5" ||
59
88
  id.includes("claude-fable-5") ||
89
+ id.includes("claude-haiku-5") ||
60
90
  id.startsWith("claude-opus-4") ||
61
91
  id.startsWith("claude-opus-5") ||
62
92
  id.includes("claude-sonnet-5") ||
@@ -78,6 +108,8 @@ export function getContextWindowForModel(modelId) {
78
108
  }
79
109
  const MODEL_MAX_OUTPUT_TOKENS = {
80
110
  "claude-fable-5": 128_000,
111
+ "claude-fable-5-1": 128_000,
112
+ "claude-haiku-5-5": 128_000,
81
113
  "claude-opus-5-5": 128_000,
82
114
  "claude-opus-4-8": 128_000,
83
115
  "claude-opus-4-7": 128_000,
@@ -86,6 +118,18 @@ const MODEL_MAX_OUTPUT_TOKENS = {
86
118
  "claude-sonnet-4-6": 128_000,
87
119
  "claude-haiku-4-5": 64_000,
88
120
  "claude-haiku-4-5-20251001": 64_000,
121
+ "anthropic/claude-fable-5.1": 128_000,
122
+ "anthropic/claude-haiku-5.5": 128_000,
123
+ "deepseek-v4-pro": 393_216,
124
+ "deepseek/deepseek-v4-pro": 393_216,
125
+ "deepseek-flash": 393_216,
126
+ "deepseek-v4-1-flash": 393_216,
127
+ "deepseek/deepseek-v4.1-flash": 393_216,
128
+ "deepseek-v3-1": 32_768,
129
+ "deepseek/deepseek-chat-v3.1": 32_768,
130
+ "grok-code-fast": 10_000,
131
+ "x-ai/grok-4.7": 450_000,
132
+ "x-ai/grok-build-0.1": 230_400,
89
133
  "gpt-5-6-sol": 40_000,
90
134
  "gpt-5-6-terra": 40_000,
91
135
  "gpt-5-6-luna": 40_000,
@@ -102,12 +146,24 @@ const MODEL_MAX_OUTPUT_TOKENS = {
102
146
  "openai/gpt-6.1-sol": 128_000,
103
147
  "openai/gpt-6-sol": 128_000,
104
148
  "openai/gpt-6-luna": 128_000,
149
+ "openai/gpt-5.5": 128_000,
150
+ "openai/gpt-5.4": 128_000,
151
+ "openai/gpt-5.4-mini": 128_000,
152
+ "openai/gpt-5.1-codex-mini": 128_000,
105
153
  "gpt-6-sol": 128_000,
106
154
  "gpt-6.1-sol": 128_000,
107
155
  "gpt-6-luna": 128_000,
108
156
  "gpt-5.6-sol": 40_000,
109
157
  "gpt-5.6-terra": 40_000,
110
158
  "gpt-5.6-luna": 40_000,
159
+ "gpt-5.5": 128_000,
160
+ "gpt-5.4": 128_000,
161
+ "gpt-5.4-mini": 128_000,
162
+ "gpt-5.1-codex-mini": 128_000,
163
+ "gpt-5-5": 128_000,
164
+ "gpt-5-4": 128_000,
165
+ "gpt-5-4-mini": 128_000,
166
+ "gpt-5-1-codex-mini": 128_000,
111
167
  };
112
168
  const DEFAULT_MAX_OUTPUT_TOKENS_CEILING = 64_000;
113
169
  /**
@@ -144,10 +200,40 @@ export function getMaxOutputTokensForModel(modelId) {
144
200
  }
145
201
  export const CLAUDE_SONNET_MODEL_ID = "claude-sonnet-5-5";
146
202
  export const CLAUDE_SONNET_MODEL_LABEL = "Claude Sonnet 5.5";
147
- // The Builder gateway still accepts Sonnet 5 while direct Anthropic serves 5.5.
148
- export const BUILDER_CLAUDE_SONNET_MODEL_ID = "claude-sonnet-5";
149
- export const BUILDER_CLAUDE_SONNET_MODEL_LABEL = "Claude Sonnet 5";
203
+ export const BUILDER_CLAUDE_SONNET_MODEL_ID = CLAUDE_SONNET_MODEL_ID;
204
+ export const BUILDER_CLAUDE_SONNET_MODEL_LABEL = CLAUDE_SONNET_MODEL_LABEL;
150
205
  const OPENROUTER_CLAUDE_SONNET_MODEL_ID = "anthropic/claude-sonnet-5.5";
206
+ export const CURRENT_BUILDER_CLAUDE_MODEL_OPTIONS = [
207
+ { value: "claude-haiku-5-5", label: "Claude Haiku 5.5" },
208
+ { value: CLAUDE_SONNET_MODEL_ID, label: CLAUDE_SONNET_MODEL_LABEL },
209
+ { value: "claude-opus-5-5", label: "Claude Opus 5.5" },
210
+ ];
211
+ export function getClaudeModelOptionLabel(modelId) {
212
+ const currentModel = CURRENT_BUILDER_CLAUDE_MODEL_OPTIONS.find((option) => option.value === modelId);
213
+ if (currentModel)
214
+ return currentModel.label;
215
+ const undatedModelId = modelId.replace(/-\d{8,}$/, "");
216
+ const match = /^claude-(haiku|sonnet|opus|fable)-(\d+)(?:[-.](\d+))?$/i.exec(undatedModelId);
217
+ if (!match)
218
+ return modelId;
219
+ const family = match[1][0].toUpperCase() + match[1].slice(1);
220
+ return `Claude ${family} ${match[2]}${match[3] ? `.${match[3]}` : ""}`;
221
+ }
222
+ export const BUILDER_MODEL_ALIASES = {
223
+ "claude-sonnet-4-6": "claude-sonnet-5-5",
224
+ "claude-sonnet-5": "claude-sonnet-5-5",
225
+ "claude-haiku-4-5": "claude-haiku-5-5",
226
+ "claude-opus-4-7": "claude-opus-5-5",
227
+ "claude-opus-4-8": "claude-opus-5-5",
228
+ "claude-opus-5": "claude-opus-5-5",
229
+ "gpt-5-6-sol": "gpt-6-1-sol",
230
+ "gpt-5-6-luna": "gpt-6-luna",
231
+ "gpt-6-sol": "gpt-6-1-sol",
232
+ "gpt-6.1-sol": "gpt-6-1-sol",
233
+ "gemini-3-5-flash": "gemini-3-8-flash",
234
+ "gemini-3-6-flash": "gemini-3-8-flash",
235
+ "gemini-3-7-flash": "gemini-3-8-flash",
236
+ };
151
237
  const ANTHROPIC_DEFAULT_MODEL_ID = CLAUDE_SONNET_MODEL_ID;
152
238
  function openRouterModelId(provider, model) {
153
239
  return `${provider}/${model}`;
@@ -160,24 +246,26 @@ export const AGENT_MODEL_CONFIG = {
160
246
  defaultModel: FRAMEWORK_DEFAULT_BUILDER_MODEL,
161
247
  supportedModels: [
162
248
  "auto",
163
- "claude-haiku-4-5",
249
+ "claude-haiku-5-5",
164
250
  BUILDER_CLAUDE_SONNET_MODEL_ID,
165
251
  "claude-opus-5-5",
166
252
  "gpt-5-4",
167
253
  "gpt-5-5",
168
254
  "gpt-5-4-mini",
169
255
  "gpt-5-1-codex-mini",
170
- "gpt-6.1-sol",
256
+ "gpt-6-1-sol",
171
257
  "gpt-5-6-terra",
172
258
  "gpt-6-luna",
173
259
  "gemini-3-1-pro",
174
260
  "gemini-3-8-flash",
175
261
  "gemini-3-5-flash-lite",
176
262
  "gemini-3-1-flash-lite",
263
+ "grok-code-fast",
177
264
  "qwen3-coder",
178
265
  "kimi-k2-5",
179
- "deepseek-v3-1",
266
+ "deepseek-v4-pro",
180
267
  "deepseek-v4-1-flash",
268
+ "deepseek-v3-1",
181
269
  "z-ai-glm-4-5",
182
270
  "z-ai-glm-5-1",
183
271
  "z-ai-glm-5-3-flash",
@@ -186,10 +274,12 @@ export const AGENT_MODEL_CONFIG = {
186
274
  anthropic: {
187
275
  defaultModel: ANTHROPIC_DEFAULT_MODEL_ID,
188
276
  supportedModels: [
277
+ "claude-haiku-5-5",
189
278
  "claude-haiku-4-5-20251001",
190
279
  CLAUDE_SONNET_MODEL_ID,
191
280
  "claude-opus-5-5",
192
281
  "claude-opus-4-8",
282
+ "claude-fable-5-1",
193
283
  "claude-fable-5",
194
284
  ],
195
285
  },
@@ -197,16 +287,26 @@ export const AGENT_MODEL_CONFIG = {
197
287
  anthropic: {
198
288
  defaultModel: ANTHROPIC_DEFAULT_MODEL_ID,
199
289
  supportedModels: [
290
+ "claude-haiku-5-5",
200
291
  "claude-haiku-4-5-20251001",
201
292
  CLAUDE_SONNET_MODEL_ID,
202
293
  "claude-opus-5-5",
203
294
  "claude-opus-4-8",
295
+ "claude-fable-5-1",
204
296
  "claude-fable-5",
205
297
  ],
206
298
  },
207
299
  openai: {
208
300
  defaultModel: FRAMEWORK_DEFAULT_OPENAI_MODEL,
209
- supportedModels: ["gpt-6-luna", "gpt-5.6-terra", "gpt-6.1-sol"],
301
+ supportedModels: [
302
+ "gpt-6-luna",
303
+ "gpt-6.1-sol",
304
+ "gpt-5.6-terra",
305
+ "gpt-5.5",
306
+ "gpt-5.4",
307
+ "gpt-5.4-mini",
308
+ "gpt-5.1-codex-mini",
309
+ ],
210
310
  },
211
311
  openrouter: {
212
312
  defaultModel: FRAMEWORK_DEFAULT_OPENROUTER_MODEL,
@@ -216,12 +316,30 @@ export const AGENT_MODEL_CONFIG = {
216
316
  "openai/gpt-6.1-sol",
217
317
  "openai/gpt-6-astra",
218
318
  "openai/gpt-6-astra-pro",
319
+ "openai/gpt-5.5",
320
+ "openai/gpt-5.4",
321
+ "openai/gpt-5.4-mini",
322
+ "openai/gpt-5.1-codex-mini",
323
+ "anthropic/claude-haiku-5.5",
219
324
  OPENROUTER_CLAUDE_SONNET_MODEL_ID,
220
325
  "anthropic/claude-opus-5.5",
221
326
  "anthropic/claude-opus-4.8",
222
327
  "anthropic/claude-fable-5",
223
328
  "anthropic/claude-fable-5.1",
224
329
  "google/gemini-3.8-flash",
330
+ "google/gemini-3.5-flash-lite",
331
+ "google/gemini-3.1-flash-lite",
332
+ "google/gemini-3.1-pro-preview",
333
+ "x-ai/grok-4.7",
334
+ "x-ai/grok-build-0.1",
335
+ "qwen/qwen3-coder",
336
+ "moonshotai/kimi-k2.5",
337
+ "deepseek/deepseek-v4-pro",
338
+ "deepseek/deepseek-v4.1-flash",
339
+ "deepseek/deepseek-chat-v3.1",
340
+ "z-ai/glm-4.5",
341
+ "z-ai/glm-5.1",
342
+ "z-ai/glm-5.3-flash",
225
343
  "qwen/qwen3.8-max-0902",
226
344
  "meta/muse-spark-1.3",
227
345
  "inception/mercury-2.5",
@@ -230,7 +348,12 @@ export const AGENT_MODEL_CONFIG = {
230
348
  },
231
349
  google: {
232
350
  defaultModel: "gemini-3.8-flash",
233
- supportedModels: ["gemini-3.8-flash", "gemini-3.1-pro-preview"],
351
+ supportedModels: [
352
+ "gemini-3.8-flash",
353
+ "gemini-3.5-flash-lite",
354
+ "gemini-3.1-flash-lite",
355
+ "gemini-3.1-pro-preview",
356
+ ],
234
357
  },
235
358
  groq: {
236
359
  defaultModel: "llama-3.3-70b-versatile",