@gajae-code/coding-agent 0.18.6 → 0.18.8
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.
- package/CHANGELOG.md +318 -1
- package/dist/types/async/job-manager.d.ts +1 -1
- package/dist/types/capability/mcp.d.ts +2 -0
- package/dist/types/capability/skill.d.ts +2 -0
- package/dist/types/capability/types.d.ts +6 -0
- package/dist/types/cli/public-command-errors.d.ts +3 -1
- package/dist/types/cli/setup-cli.d.ts +1 -1
- package/dist/types/commands/deep-interview.d.ts +3 -0
- package/dist/types/config/autorouting-tier-map.d.ts +348 -9
- package/dist/types/config/file-lock.d.ts +1 -0
- package/dist/types/config/model-bindings-applier.d.ts +2 -0
- package/dist/types/config/model-profile-activation.d.ts +11 -3
- package/dist/types/config/model-registry.d.ts +4 -9
- package/dist/types/config/settings.d.ts +4 -0
- package/dist/types/config/skill-settings-defaults.d.ts +2 -0
- package/dist/types/cursor-delete-path.d.ts +1 -0
- package/dist/types/cursor-mcp-name.d.ts +8 -0
- package/dist/types/customization/inventory.d.ts +2 -0
- package/dist/types/debug/report-bundle-parent.d.ts +2 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.d.ts +1 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.d.ts +31 -0
- package/dist/types/defaults/gjc-skills.generated.d.ts +5 -6
- package/dist/types/discovery/helpers.d.ts +8 -3
- package/dist/types/export/html/css-color.d.ts +2 -0
- package/dist/types/export/html/template.generated.d.ts +1 -1
- package/dist/types/extensibility/extensions/types.d.ts +7 -0
- package/dist/types/extensibility/gjc-plugins/runtime-adapters.d.ts +14 -1
- package/dist/types/extensibility/plugins/marketplace/cache.d.ts +2 -0
- package/dist/types/extensibility/plugins/plugin-link-path.d.ts +2 -0
- package/dist/types/extensibility/runtime-skill-discovery.d.ts +3 -1
- package/dist/types/extensibility/skill-management.d.ts +3 -1
- package/dist/types/extensibility/skills.d.ts +2 -0
- package/dist/types/gjc-runtime/deep-interview-crystallize.d.ts +74 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +11 -0
- package/dist/types/gjc-runtime/gc-runtime.d.ts +5 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +0 -5
- package/dist/types/gjc-runtime/state-argv.d.ts +1 -1
- package/dist/types/gjc-runtime/state-migrations.d.ts +8 -0
- package/dist/types/gjc-runtime/state-runtime.d.ts +95 -0
- package/dist/types/gjc-runtime/state-writer.d.ts +11 -1
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -0
- package/dist/types/internal-urls/skill-path.d.ts +1 -0
- package/dist/types/lsp/workspace-path.d.ts +1 -0
- package/dist/types/modes/acp/acp-agent.d.ts +7 -0
- package/dist/types/modes/components/custom-editor.d.ts +6 -0
- package/dist/types/modes/components/customization/customization-dashboard.d.ts +1 -0
- package/dist/types/modes/components/extensions/state-manager.d.ts +4 -3
- package/dist/types/modes/controllers/input-controller.d.ts +9 -0
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/utils/interrupt-ownership.d.ts +3 -0
- package/dist/types/modes/utils/keybinding-matchers.d.ts +1 -0
- package/dist/types/modes/utils/macos-option-forwarding.d.ts +17 -0
- package/dist/types/progress/collect-project-progress.d.ts +38 -0
- package/dist/types/progress/progress-contract.d.ts +154 -0
- package/dist/types/progress/progress-snapshot.d.ts +11 -0
- package/dist/types/progress/project-progress.d.ts +141 -0
- package/dist/types/progress/render-progress.d.ts +28 -0
- package/dist/types/runtime-mcp/elicitation.d.ts +12 -0
- package/dist/types/runtime-mcp/oauth-public-url.d.ts +1 -0
- package/dist/types/runtime-mcp/plugin-network-boundary.d.ts +1 -0
- package/dist/types/runtime-mcp/smithery-registry.d.ts +24 -0
- package/dist/types/runtime-mcp/types.d.ts +6 -0
- package/dist/types/sdk/acp/adapter.d.ts +1 -1
- package/dist/types/sdk/broker/broker-exit.d.ts +6 -2
- package/dist/types/sdk/broker/broker.d.ts +18 -1
- package/dist/types/sdk/broker/lifecycle.d.ts +9 -0
- package/dist/types/sdk/broker/session-index.d.ts +12 -6
- package/dist/types/sdk/broker/task-artifact-owner-validation.d.ts +55 -0
- package/dist/types/sdk/bus/index.d.ts +12 -1
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +6 -1
- package/dist/types/sdk/bus/telegram-daemon.d.ts +3 -2
- package/dist/types/sdk/client/client.d.ts +2 -0
- package/dist/types/sdk/host/host.d.ts +6 -0
- package/dist/types/sdk/host/query/handlers.d.ts +3 -0
- package/dist/types/sdk/index.d.ts +1 -0
- package/dist/types/sdk/router/session-router.d.ts +9 -0
- package/dist/types/sdk/session-list.d.ts +1 -1
- package/dist/types/sdk/session.d.ts +8 -0
- package/dist/types/session/agent-session.d.ts +38 -9
- package/dist/types/session/artifacts.d.ts +2 -2
- package/dist/types/session/internal/managed-gc-retirement-codec.d.ts +32 -0
- package/dist/types/session/internal/managed-session-scope.d.ts +79 -2
- package/dist/types/session/internal/managed-session-storage.d.ts +36 -1
- package/dist/types/session/internal/managed-task-owner-cleanup.d.ts +62 -0
- package/dist/types/session/internal/task-artifact-owner-access.d.ts +19 -0
- package/dist/types/session/internal/task-artifact-owner-transcript.d.ts +11 -0
- package/dist/types/session/session-manager.d.ts +31 -5
- package/dist/types/session/session-retirement.d.ts +71 -0
- package/dist/types/session/session-storage.d.ts +62 -48
- package/dist/types/session/session-transcript-header.d.ts +2 -0
- package/dist/types/session/task-artifact-owner-codec.d.ts +109 -0
- package/dist/types/session/task-artifact-owner-retirement.d.ts +7 -0
- package/dist/types/session/task-artifact-owner.d.ts +10 -0
- package/dist/types/setup/credential-auto-import.d.ts +1 -1
- package/dist/types/setup/credential-import.d.ts +6 -4
- package/dist/types/skill-state/active-state.d.ts +38 -0
- package/dist/types/slash-commands/helpers/progress-report.d.ts +8 -0
- package/dist/types/task/executor.d.ts +3 -0
- package/dist/types/tools/bash-skill-urls.d.ts +1 -1
- package/dist/types/tools/index.d.ts +3 -0
- package/dist/types/tools/python.d.ts +9 -1
- package/dist/types/tools/recipe/recipe-guard.d.ts +7 -0
- package/dist/types/tools/restricted-cwd.d.ts +1 -0
- package/dist/types/tools/todo-write.d.ts +6 -0
- package/dist/types/utils/tools-checksum.d.ts +7 -0
- package/package.json +7 -7
- package/scripts/generate-sdk-operation-inventory.ts +21 -0
- package/scripts/resident-memory-bench.ts +174 -20
- package/scripts/verify-managed-empty-stop.ts +28 -0
- package/src/async/job-manager.ts +228 -122
- package/src/capability/index.ts +18 -0
- package/src/capability/mcp.ts +2 -0
- package/src/capability/skill.ts +2 -0
- package/src/capability/types.ts +6 -0
- package/src/cli/auth-broker-cli.ts +1 -1
- package/src/cli/config-cli.ts +8 -18
- package/src/cli/customize-doctor.ts +15 -2
- package/src/cli/public-command-errors.ts +21 -1
- package/src/cli/setup-cli.ts +4 -4
- package/src/cli/skills-cli.ts +5 -0
- package/src/cli-main.ts +7 -8
- package/src/commands/deep-interview.ts +47 -8
- package/src/commands/sdk.ts +140 -29
- package/src/config/autorouting-tier-map.ts +117 -7
- package/src/config/file-lock.ts +307 -68
- package/src/config/mcp-schema.json +4 -0
- package/src/config/model-bindings-applier.ts +20 -0
- package/src/config/model-profile-activation.ts +240 -46
- package/src/config/model-registry.ts +47 -153
- package/src/config/settings.ts +44 -4
- package/src/config/skill-settings-defaults.ts +7 -0
- package/src/coordinator-mcp/policy.ts +3 -2
- package/src/cursor-delete-path.ts +10 -0
- package/src/cursor-mcp-name.ts +15 -0
- package/src/cursor.ts +13 -2
- package/src/customization/inventory.ts +3 -0
- package/src/debug/report-bundle-parent.ts +22 -0
- package/src/debug/report-bundle.ts +3 -0
- package/src/debug/system-info.ts +13 -1
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.ts +67 -4
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.ts +80 -0
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +105 -10
- package/src/defaults/gjc/skills/ralplan/SKILL.md +6 -4
- package/src/defaults/gjc-defaults.test.ts +18 -1
- package/src/defaults/gjc-defaults.ts +3 -0
- package/src/defaults/gjc-skills.generated.ts +58 -36
- package/src/discovery/agents.ts +6 -1
- package/src/discovery/builtin.ts +10 -0
- package/src/discovery/helpers.ts +168 -23
- package/src/discovery/mcp-json.ts +6 -0
- package/src/discovery/ssh.ts +9 -4
- package/src/discovery/substitute-plugin-root.ts +3 -1
- package/src/edit/file-read-cache.ts +1 -1
- package/src/eval/py/executor.ts +380 -120
- package/src/export/html/css-color.ts +9 -0
- package/src/export/html/index.ts +5 -4
- package/src/export/html/template.generated.ts +1 -1
- package/src/extensibility/extensions/runner.ts +4 -0
- package/src/extensibility/extensions/types.ts +7 -0
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +73 -8
- package/src/extensibility/plugins/manager.ts +3 -2
- package/src/extensibility/plugins/marketplace/cache.ts +15 -0
- package/src/extensibility/plugins/marketplace/manager.ts +11 -3
- package/src/extensibility/plugins/plugin-link-path.ts +12 -0
- package/src/extensibility/runtime-skill-discovery.ts +20 -2
- package/src/extensibility/skill-management.ts +6 -2
- package/src/extensibility/skills.ts +6 -1
- package/src/gjc-runtime/deep-interview-crystallize.ts +1814 -0
- package/src/gjc-runtime/deep-interview-recorder.ts +20 -2
- package/src/gjc-runtime/deep-interview-runtime.ts +1415 -13
- package/src/gjc-runtime/deep-interview-stage.ts +98 -21
- package/src/gjc-runtime/gc-runtime.ts +206 -8
- package/src/gjc-runtime/launch-worktree.ts +14 -4
- package/src/gjc-runtime/ralplan-runtime.ts +447 -52
- package/src/gjc-runtime/state-argv.ts +2 -0
- package/src/gjc-runtime/state-migrations.ts +91 -29
- package/src/gjc-runtime/state-runtime.ts +3716 -135
- package/src/gjc-runtime/state-writer.ts +83 -8
- package/src/gjc-runtime/ultragoal-runtime.ts +16 -4
- package/src/gjc-runtime/workflow-manifest.generated.json +70 -42
- package/src/gjc-runtime/workflow-manifest.ts +54 -21
- package/src/harness-control-plane/operate.ts +12 -4
- package/src/harness-control-plane/owner.ts +5 -1
- package/src/hashline/parser.ts +48 -9
- package/src/hashline/recovery.ts +13 -4
- package/src/hindsight/config.ts +9 -3
- package/src/internal-urls/docs-index.generated.ts +19 -18
- package/src/internal-urls/skill-path.ts +19 -0
- package/src/internal-urls/skill-protocol.ts +2 -0
- package/src/lsp/edits.ts +6 -0
- package/src/lsp/workspace-path.ts +51 -0
- package/src/main.ts +195 -31
- package/src/modes/acp/acp-agent.ts +163 -7
- package/src/modes/components/custom-editor.ts +14 -0
- package/src/modes/components/customization/customization-dashboard.ts +12 -0
- package/src/modes/components/extensions/extension-dashboard.ts +2 -2
- package/src/modes/components/extensions/state-manager.ts +15 -5
- package/src/modes/components/model-selector.ts +1 -4
- package/src/modes/components/provider-onboarding-selector.ts +1 -1
- package/src/modes/components/status-line/segments.ts +4 -0
- package/src/modes/controllers/event-controller.ts +11 -4
- package/src/modes/controllers/input-controller.ts +74 -29
- package/src/modes/controllers/runtime-mcp-command-controller.ts +8 -3
- package/src/modes/controllers/selector-controller.ts +28 -15
- package/src/modes/interactive-mode.ts +4 -0
- package/src/modes/runtime-init.ts +4 -0
- package/src/modes/utils/abort-message.ts +3 -1
- package/src/modes/utils/interrupt-ownership.ts +12 -0
- package/src/modes/utils/keybinding-matchers.ts +4 -0
- package/src/modes/utils/macos-option-forwarding.ts +80 -0
- package/src/progress/collect-project-progress.ts +153 -0
- package/src/progress/progress-contract.ts +172 -0
- package/src/progress/progress-snapshot.ts +140 -0
- package/src/progress/project-progress.ts +446 -0
- package/src/progress/render-progress.ts +209 -0
- package/src/prompts/system/master-mode.md +1 -0
- package/src/prompts/tools/skill-discovery.md +1 -1
- package/src/runtime-mcp/client.ts +13 -4
- package/src/runtime-mcp/config-writer.ts +10 -6
- package/src/runtime-mcp/config.ts +1 -0
- package/src/runtime-mcp/elicitation.ts +142 -0
- package/src/runtime-mcp/oauth-flow.ts +5 -0
- package/src/runtime-mcp/oauth-public-url.ts +8 -0
- package/src/runtime-mcp/plugin-network-boundary.ts +4 -0
- package/src/runtime-mcp/smithery-registry.ts +22 -3
- package/src/runtime-mcp/transports/http.ts +2 -2
- package/src/runtime-mcp/types.ts +6 -0
- package/src/sdk/acp/adapter.ts +93 -8
- package/src/sdk/broker/broker-exit.ts +52 -23
- package/src/sdk/broker/broker.ts +83 -7
- package/src/sdk/broker/ensure.ts +2 -0
- package/src/sdk/broker/lifecycle.ts +820 -73
- package/src/sdk/broker/session-index.ts +191 -81
- package/src/sdk/broker/task-artifact-owner-validation.ts +259 -0
- package/src/sdk/bus/chat-daemon-cli.ts +38 -1
- package/src/sdk/bus/chat-daemon-control.ts +2 -2
- package/src/sdk/bus/chat-daemon-runtime.ts +3 -0
- package/src/sdk/bus/index.ts +241 -46
- package/src/sdk/bus/telegram-daemon-contract.ts +6 -1
- package/src/sdk/bus/telegram-daemon.ts +4 -2
- package/src/sdk/cli/session-cli.ts +17 -3
- package/src/sdk/client/client.ts +28 -8
- package/src/sdk/host/host.ts +6 -0
- package/src/sdk/host/query/handlers.ts +9 -1
- package/src/sdk/host/session-runtime.test.ts +2805 -411
- package/src/sdk/host/session-runtime.ts +428 -111
- package/src/sdk/host/surface-policy.ts +1 -0
- package/src/sdk/index.ts +8 -0
- package/src/sdk/lifecycle-session.ts +3 -1
- package/src/sdk/mcp/server.ts +15 -3
- package/src/sdk/prompt-deadline-manager.ts +15 -0
- package/src/sdk/protocol/operation-inventory.generated.json +146 -0
- package/src/sdk/protocol/operation-registry.ts +9 -2
- package/src/sdk/router/session-router.ts +94 -14
- package/src/sdk/session-list.ts +1 -0
- package/src/sdk/session.ts +81 -38
- package/src/session/agent-session.ts +674 -224
- package/src/session/artifacts.ts +174 -70
- package/src/session/internal/managed-gc-retirement-codec.ts +319 -0
- package/src/session/internal/managed-session-scope.ts +3457 -462
- package/src/session/internal/managed-session-storage.ts +482 -61
- package/src/session/internal/managed-task-owner-cleanup.ts +473 -0
- package/src/session/internal/task-artifact-owner-access.ts +245 -0
- package/src/session/internal/task-artifact-owner-transcript.ts +614 -0
- package/src/session/session-manager.ts +939 -133
- package/src/session/session-retirement.ts +714 -0
- package/src/session/session-storage.ts +418 -174
- package/src/session/session-transcript-header.ts +17 -0
- package/src/session/task-artifact-owner-codec.ts +641 -0
- package/src/session/task-artifact-owner-retirement.ts +477 -0
- package/src/session/task-artifact-owner.ts +289 -0
- package/src/setup/credential-auto-import.ts +12 -3
- package/src/setup/credential-import.ts +176 -5
- package/src/setup/paseo/announce.ts +6 -1
- package/src/skill-state/active-state.ts +132 -2
- package/src/slash-commands/builtin-registry.ts +39 -9
- package/src/slash-commands/helpers/progress-report.ts +23 -0
- package/src/stt/setup.ts +3 -5
- package/src/task/commands.ts +3 -1
- package/src/task/executor.ts +4 -0
- package/src/task/index.ts +6 -0
- package/src/tools/ask.ts +205 -6
- package/src/tools/ast-edit.ts +4 -0
- package/src/tools/bash-allowed-prefixes.ts +15 -0
- package/src/tools/bash-skill-urls.ts +56 -3
- package/src/tools/bash.ts +48 -79
- package/src/tools/descriptors.ts +5 -1
- package/src/tools/eval.ts +56 -36
- package/src/tools/image-gen.ts +1 -1
- package/src/tools/index.ts +3 -0
- package/src/tools/python.ts +187 -66
- package/src/tools/recipe/index.ts +9 -0
- package/src/tools/recipe/recipe-guard.ts +19 -0
- package/src/tools/restricted-cwd.ts +10 -0
- package/src/tools/skill-discovery.ts +5 -0
- package/src/tools/skill.ts +28 -1
- package/src/tools/todo-write.ts +10 -1
- package/src/tools/tool-catalog.generated.ts +1 -1
- package/src/tools/write.ts +1 -0
- package/src/utils/tools-checksum.ts +34 -0
- package/src/utils/tools-manager.ts +24 -6
- package/src/web/search/providers/codex.ts +3 -2
package/src/commands/sdk.ts
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { type ChildProcess, spawn } from "node:child_process";
|
|
2
|
-
import { createHash } from "node:crypto";
|
|
2
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
3
3
|
import * as nodeFs from "node:fs";
|
|
4
4
|
import * as fs from "node:fs/promises";
|
|
5
5
|
import * as os from "node:os";
|
|
6
6
|
import * as path from "node:path";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
exactRemoveDirectoryTree,
|
|
9
|
+
exactUnlinkDirect,
|
|
10
|
+
type NativeDirectoryTreeSnapshot,
|
|
11
|
+
snapshotDirectoryTree,
|
|
12
|
+
} from "@gajae-code/natives";
|
|
8
13
|
import { logger, postmortem } from "@gajae-code/utils";
|
|
9
14
|
import { CliParseError, Command } from "@gajae-code/utils/cli";
|
|
10
15
|
import type { Args as ParsedArgs } from "../cli/args";
|
|
11
16
|
import { isSafeSdkInternalAgentDir, scanPublicCommand } from "../cli/public-command-entry";
|
|
12
17
|
import { PublicCommandFailure } from "../cli/public-command-errors";
|
|
18
|
+
import { FileLockAcquireError } from "../config/file-lock";
|
|
13
19
|
import { parseModelString } from "../config/model-resolver";
|
|
14
20
|
import { Settings } from "../config/settings";
|
|
15
21
|
import { usePostmortemSignalExitAuthority } from "../lsp/client";
|
|
@@ -24,7 +30,9 @@ import {
|
|
|
24
30
|
writeBrokerStartupExitRecordBounded,
|
|
25
31
|
} from "../sdk/broker/broker-exit";
|
|
26
32
|
import { readBrokerDiscovery } from "../sdk/broker/discovery";
|
|
33
|
+
import { type EndpointFileRead, readEndpointFile } from "../sdk/broker/endpoint-authority";
|
|
27
34
|
import {
|
|
35
|
+
BROKER_DISCOVERY_BUDGET,
|
|
28
36
|
emitBrokerStartupTestSignal,
|
|
29
37
|
reconcileBrokerGenerationForStartup,
|
|
30
38
|
withBrokerStartupLock,
|
|
@@ -653,6 +661,7 @@ export async function runSessionHost(
|
|
|
653
661
|
let startupComplete = false;
|
|
654
662
|
let readinessPublicationCleanupComplete = true;
|
|
655
663
|
let revokePendingReadinessMarker: (() => Promise<boolean>) | undefined;
|
|
664
|
+
let revokePublishedReadinessMarker: (() => Promise<boolean>) | undefined;
|
|
656
665
|
let readinessRevocation: Promise<boolean> | undefined;
|
|
657
666
|
let startupInterruption: SdkStartupFailure | undefined;
|
|
658
667
|
const interrupted = Promise.withResolvers<SdkStartupFailure>();
|
|
@@ -1267,20 +1276,76 @@ export async function runSessionHost(
|
|
|
1267
1276
|
return failureRollback;
|
|
1268
1277
|
};
|
|
1269
1278
|
const sessionEndpointPath = path.join(request.stateRoot, "sdk", `${request.sessionId}.json`);
|
|
1270
|
-
const
|
|
1271
|
-
|
|
1279
|
+
const removeOwnedSessionEndpoint = async (): Promise<boolean> => {
|
|
1280
|
+
try {
|
|
1281
|
+
await fs.stat(sessionEndpointPath);
|
|
1282
|
+
} catch (error) {
|
|
1283
|
+
if ((error as NodeJS.ErrnoException).code === "ENOENT") return true;
|
|
1284
|
+
return false;
|
|
1285
|
+
}
|
|
1286
|
+
const endpoint: EndpointFileRead | undefined = await readEndpointFile(sessionEndpointPath);
|
|
1287
|
+
if (!endpoint) return false;
|
|
1288
|
+
let parsed: { pid?: unknown; sessionId?: unknown };
|
|
1289
|
+
try {
|
|
1290
|
+
parsed = JSON.parse(endpoint.source) as { pid?: unknown; sessionId?: unknown };
|
|
1291
|
+
} catch {
|
|
1292
|
+
return false;
|
|
1293
|
+
}
|
|
1294
|
+
if (parsed.pid !== process.pid || parsed.sessionId !== request.sessionId) {
|
|
1295
|
+
return false;
|
|
1296
|
+
}
|
|
1297
|
+
const removal = (() => {
|
|
1298
|
+
try {
|
|
1299
|
+
return exactUnlinkDirect(sessionEndpointPath, {
|
|
1300
|
+
dev: endpoint.dev,
|
|
1301
|
+
ino: endpoint.ino,
|
|
1302
|
+
nlink: endpoint.nlink,
|
|
1303
|
+
size: endpoint.size,
|
|
1304
|
+
mtimeNs: endpoint.mtimeNs,
|
|
1305
|
+
quarantineName: `.gjc-delete-endpoint-${request.sessionId}-${randomUUID()}`,
|
|
1306
|
+
sha256: createHash("sha256").update(endpoint.source).digest("hex"),
|
|
1307
|
+
allowHardLink: true,
|
|
1308
|
+
});
|
|
1309
|
+
} catch (error) {
|
|
1310
|
+
logger.warn("SDK host endpoint cleanup failed", { error: String(error) });
|
|
1311
|
+
return undefined;
|
|
1312
|
+
}
|
|
1313
|
+
})();
|
|
1314
|
+
if (!removal) return false;
|
|
1315
|
+
return (
|
|
1316
|
+
removal.ok ||
|
|
1317
|
+
removal.code === "not_found" ||
|
|
1318
|
+
(removal.code === "cleanup_pending" &&
|
|
1319
|
+
removal.payloadDurable === true &&
|
|
1320
|
+
!removal.retainedSuccessorPath &&
|
|
1321
|
+
!removal.retainedUnknownPath)
|
|
1322
|
+
);
|
|
1323
|
+
};
|
|
1324
|
+
let unregisterHostPostmortem: (() => void) | undefined;
|
|
1325
|
+
let sessionDisposalExit: Promise<void> | undefined;
|
|
1326
|
+
const exitAfterSessionDisposal = async (reason?: "detached_idle", exitProcess = true): Promise<void> => {
|
|
1272
1327
|
let failure: SdkStartupFailure | undefined;
|
|
1328
|
+
let ownsEndpoint = false;
|
|
1329
|
+
const endpointCleanup = (async (): Promise<boolean> => {
|
|
1330
|
+
let complete = await removeOwnedSessionEndpoint();
|
|
1331
|
+
for (let attempt = 0; !complete && attempt < 20; attempt += 1) {
|
|
1332
|
+
await Bun.sleep(25);
|
|
1333
|
+
complete = await removeOwnedSessionEndpoint();
|
|
1334
|
+
}
|
|
1335
|
+
return complete;
|
|
1336
|
+
})();
|
|
1337
|
+
let [endpointCleanupComplete, readinessRevoked] = await Promise.all([
|
|
1338
|
+
endpointCleanup,
|
|
1339
|
+
revokePublishedReadinessMarker?.() ?? Promise.resolve(true),
|
|
1340
|
+
]);
|
|
1341
|
+
await disposeSession(reason);
|
|
1342
|
+
endpointCleanupComplete = await removeOwnedSessionEndpoint();
|
|
1273
1343
|
try {
|
|
1274
1344
|
const endpoint = JSON.parse(await fs.readFile(sessionEndpointPath, "utf8")) as {
|
|
1275
1345
|
pid?: unknown;
|
|
1276
1346
|
sessionId?: unknown;
|
|
1277
1347
|
};
|
|
1278
|
-
|
|
1279
|
-
failure = {
|
|
1280
|
-
phase: "startup",
|
|
1281
|
-
reason: "failed",
|
|
1282
|
-
message: `SDK host endpoint remained after graceful shutdown: ${request.sessionId}`,
|
|
1283
|
-
};
|
|
1348
|
+
ownsEndpoint = endpoint.pid === process.pid && endpoint.sessionId === request.sessionId;
|
|
1284
1349
|
} catch (error) {
|
|
1285
1350
|
if ((error as NodeJS.ErrnoException).code !== "ENOENT") {
|
|
1286
1351
|
failure = {
|
|
@@ -1288,27 +1353,57 @@ export async function runSessionHost(
|
|
|
1288
1353
|
reason: "failed",
|
|
1289
1354
|
message: `SDK host endpoint cleanup could not be verified: ${request.sessionId}`,
|
|
1290
1355
|
};
|
|
1291
|
-
}
|
|
1356
|
+
} else endpointCleanupComplete = true;
|
|
1357
|
+
}
|
|
1358
|
+
if (!ownsEndpoint && !failure && !readinessRevoked && revokePublishedReadinessMarker) {
|
|
1359
|
+
failure = {
|
|
1360
|
+
phase: "startup",
|
|
1361
|
+
reason: "failed",
|
|
1362
|
+
message: `SDK host readiness marker cleanup could not be verified: ${request.sessionId}`,
|
|
1363
|
+
};
|
|
1292
1364
|
}
|
|
1365
|
+
if (ownsEndpoint && !endpointCleanupComplete && !failure)
|
|
1366
|
+
failure = {
|
|
1367
|
+
phase: "startup",
|
|
1368
|
+
reason: "failed",
|
|
1369
|
+
message: `SDK host endpoint remained after graceful shutdown: ${request.sessionId}`,
|
|
1370
|
+
};
|
|
1293
1371
|
if (failure) {
|
|
1294
1372
|
process.exitCode = 1;
|
|
1295
1373
|
process.stderr.write(`${failure.message}\n`);
|
|
1296
1374
|
await writeFailure(failure, rollback.result).catch(() => {});
|
|
1297
1375
|
}
|
|
1298
|
-
|
|
1376
|
+
unregisterHostPostmortem?.();
|
|
1377
|
+
unregisterHostPostmortem = undefined;
|
|
1378
|
+
if (exitProcess) process.exit(process.exitCode ?? 0);
|
|
1299
1379
|
};
|
|
1300
1380
|
let stopping = false;
|
|
1381
|
+
const requestSessionStop = (reason?: "detached_idle", exitProcess = true): Promise<void> => {
|
|
1382
|
+
if (stopping) return sessionDisposalExit ?? Promise.resolve();
|
|
1383
|
+
stopping = true;
|
|
1384
|
+
sessionDisposalExit = exitAfterSessionDisposal(reason, exitProcess);
|
|
1385
|
+
return sessionDisposalExit;
|
|
1386
|
+
};
|
|
1301
1387
|
const stop = (reason?: "detached_idle") => {
|
|
1302
1388
|
if (startupComplete) {
|
|
1303
|
-
|
|
1304
|
-
stopping = true;
|
|
1305
|
-
void exitAfterSessionDisposal(reason);
|
|
1389
|
+
void requestSessionStop(reason);
|
|
1306
1390
|
return;
|
|
1307
1391
|
}
|
|
1308
1392
|
const failure = capability.normalizeFailure("startup", "failed", "SDK lifecycle host terminated.");
|
|
1309
1393
|
interruptStartup(failure);
|
|
1310
1394
|
};
|
|
1311
|
-
const
|
|
1395
|
+
const registerHostPostmortem = (): void => {
|
|
1396
|
+
if (unregisterHostPostmortem) return;
|
|
1397
|
+
unregisterHostPostmortem = postmortem.register("sdk-session-host:exit", async reason => {
|
|
1398
|
+
if (reason !== postmortem.Reason.SIGTERM && reason !== postmortem.Reason.SIGINT) return;
|
|
1399
|
+
// The postmortem signal authority defaults to 143/130; a session host
|
|
1400
|
+
// signal is graceful and must preserve its cleanup result instead.
|
|
1401
|
+
await requestSessionStop(undefined, false);
|
|
1402
|
+
process.exitCode = 0;
|
|
1403
|
+
process.exit(0);
|
|
1404
|
+
});
|
|
1405
|
+
};
|
|
1406
|
+
registerHostPostmortem();
|
|
1312
1407
|
|
|
1313
1408
|
try {
|
|
1314
1409
|
const startupThinkingLevel = request.modelId ? parseModelString(request.modelId)?.thinkingLevel : undefined;
|
|
@@ -1356,6 +1451,7 @@ export async function runSessionHost(
|
|
|
1356
1451
|
effectMarker,
|
|
1357
1452
|
() => startupInterruption === undefined && now() < request.semanticReadyDeadlineAt,
|
|
1358
1453
|
revoke => {
|
|
1454
|
+
revokePublishedReadinessMarker = revoke;
|
|
1359
1455
|
revokePendingReadinessMarker = revoke;
|
|
1360
1456
|
if (startupInterruption !== undefined) startReadinessRevocation(revoke);
|
|
1361
1457
|
else if (now() >= request.semanticReadyDeadlineAt) {
|
|
@@ -1390,8 +1486,6 @@ export async function runSessionHost(
|
|
|
1390
1486
|
revokePendingReadinessMarker = undefined;
|
|
1391
1487
|
readinessRevocation = undefined;
|
|
1392
1488
|
removeStartupSignalHandlers();
|
|
1393
|
-
process.once("SIGTERM", onReadySignal);
|
|
1394
|
-
process.once("SIGINT", onReadySignal);
|
|
1395
1489
|
} catch (error) {
|
|
1396
1490
|
if (error instanceof LifecycleReadinessCleanupError) constructionCleanupComplete = false;
|
|
1397
1491
|
const failure =
|
|
@@ -1404,8 +1498,6 @@ export async function runSessionHost(
|
|
|
1404
1498
|
await failAfterRollback(durableFailure);
|
|
1405
1499
|
} finally {
|
|
1406
1500
|
removeStartupSignalHandlers();
|
|
1407
|
-
process.removeListener("SIGTERM", onReadySignal);
|
|
1408
|
-
process.removeListener("SIGINT", onReadySignal);
|
|
1409
1501
|
}
|
|
1410
1502
|
throw error;
|
|
1411
1503
|
}
|
|
@@ -1655,7 +1747,8 @@ export default class Sdk extends Command {
|
|
|
1655
1747
|
child.unref();
|
|
1656
1748
|
return;
|
|
1657
1749
|
}
|
|
1658
|
-
if (internal.action === "broker-internal"
|
|
1750
|
+
if (internal.action === "broker-internal" || internal.action === "session-host-internal")
|
|
1751
|
+
usePostmortemSignalExitAuthority();
|
|
1659
1752
|
if (internal.action === "session-host-internal") {
|
|
1660
1753
|
await runSessionHost();
|
|
1661
1754
|
return;
|
|
@@ -1669,7 +1762,7 @@ export default class Sdk extends Command {
|
|
|
1669
1762
|
let runningBroker: Broker | undefined;
|
|
1670
1763
|
let stopSweep: (() => void) | undefined;
|
|
1671
1764
|
let startupExitRequested = false;
|
|
1672
|
-
let startupExitReason: "
|
|
1765
|
+
let startupExitReason: BrokerStartupExitRecord["reason"] | undefined;
|
|
1673
1766
|
let startupExitLogged = false;
|
|
1674
1767
|
let pendingShutdownSignal: "SIGTERM" | "SIGINT" | undefined;
|
|
1675
1768
|
let startupExitTask: Promise<boolean> | undefined;
|
|
@@ -1690,10 +1783,11 @@ export default class Sdk extends Command {
|
|
|
1690
1783
|
};
|
|
1691
1784
|
const startupSignalExitCode = (signal: "SIGTERM" | "SIGINT"): 130 | 143 => (signal === "SIGINT" ? 130 : 143);
|
|
1692
1785
|
const makeStartupExitRecord = (
|
|
1693
|
-
reason: "
|
|
1786
|
+
reason: BrokerStartupExitRecord["reason"],
|
|
1694
1787
|
exitCode: 1 | 130 | 143,
|
|
1695
1788
|
signal: "SIGTERM" | "SIGINT" | null,
|
|
1696
1789
|
timeoutMs?: number,
|
|
1790
|
+
blockingLockPath?: string,
|
|
1697
1791
|
): BrokerStartupExitRecord & Record<string, unknown> => ({
|
|
1698
1792
|
version: 1,
|
|
1699
1793
|
reason,
|
|
@@ -1706,6 +1800,7 @@ export default class Sdk extends Command {
|
|
|
1706
1800
|
exitCode,
|
|
1707
1801
|
timeoutMs: timeoutMs ?? null,
|
|
1708
1802
|
writtenAt: Date.now(),
|
|
1803
|
+
...(blockingLockPath === undefined ? {} : { blockingLockPath }),
|
|
1709
1804
|
});
|
|
1710
1805
|
const beginStartupExitRecordWrite = (record: BrokerStartupExitRecord): Promise<BrokerStartupExitWriteStatus> => {
|
|
1711
1806
|
const testDelayMs = Number(process.env.GJC_SDK_TEST_BROKER_STARTUP_EXIT_RECORD_DELAY_MS ?? 0);
|
|
@@ -1740,21 +1835,24 @@ export default class Sdk extends Command {
|
|
|
1740
1835
|
process.stderr.write(`${JSON.stringify({ level, message, ...record })}\n`);
|
|
1741
1836
|
};
|
|
1742
1837
|
const exitDuringStartup = (
|
|
1743
|
-
reason: "
|
|
1838
|
+
reason: BrokerStartupExitRecord["reason"],
|
|
1744
1839
|
exitCode: 1 | 130 | 143,
|
|
1745
1840
|
signal: "SIGTERM" | "SIGINT" | null,
|
|
1746
1841
|
timeoutMs?: number,
|
|
1842
|
+
blockingLockPath?: string,
|
|
1747
1843
|
): Promise<boolean> => {
|
|
1748
1844
|
// The first startup exit cause owns both the persisted reason and the process exit code.
|
|
1749
1845
|
if (startupExitTask) return startupExitReason === reason ? startupExitTask : Promise.resolve(false);
|
|
1750
1846
|
if (startupExitRequested) return Promise.resolve(false);
|
|
1751
1847
|
startupExitRequested = true;
|
|
1752
1848
|
startupExitReason = reason;
|
|
1753
|
-
const exitRecord = makeStartupExitRecord(reason, exitCode, signal, timeoutMs);
|
|
1849
|
+
const exitRecord = makeStartupExitRecord(reason, exitCode, signal, timeoutMs, blockingLockPath);
|
|
1754
1850
|
const message =
|
|
1755
|
-
reason === "startup-
|
|
1756
|
-
? `SDK broker startup
|
|
1757
|
-
:
|
|
1851
|
+
reason === "startup-lock-blocked" && blockingLockPath
|
|
1852
|
+
? `SDK broker startup blocked by retained removal transition ${blockingLockPath}.`
|
|
1853
|
+
: reason === "startup-deadline"
|
|
1854
|
+
? `SDK broker startup exceeded its ${timeoutMs}ms fence deadline.`
|
|
1855
|
+
: `SDK broker startup interrupted by ${signal} before readiness.`;
|
|
1758
1856
|
writeStartupExitLog(exitRecord, message);
|
|
1759
1857
|
startupExitTask = (async () => {
|
|
1760
1858
|
const exitRecordWrite = await beginStartupExitRecordWrite(exitRecord);
|
|
@@ -1783,7 +1881,7 @@ export default class Sdk extends Command {
|
|
|
1783
1881
|
: pendingShutdownSignal;
|
|
1784
1882
|
if (!signal) return;
|
|
1785
1883
|
pendingShutdownSignal = signal;
|
|
1786
|
-
if (startupExitTask && startupExitReason
|
|
1884
|
+
if (startupExitTask && startupExitReason !== "startup-signal") {
|
|
1787
1885
|
await startupExitTask;
|
|
1788
1886
|
await waitForStartupAbortCleanup();
|
|
1789
1887
|
process.exit(1);
|
|
@@ -1816,6 +1914,7 @@ export default class Sdk extends Command {
|
|
|
1816
1914
|
Number.isSafeInteger(testWatchdogMs) && testWatchdogMs > 0 && testWatchdogMs <= remainingMs
|
|
1817
1915
|
? testWatchdogMs
|
|
1818
1916
|
: remainingMs;
|
|
1917
|
+
const startupCheckpointDeadline = performance.now() + watchdogMs - 1_000;
|
|
1819
1918
|
const startupWatchdog = setTimeout(() => {
|
|
1820
1919
|
startupAbortController.abort();
|
|
1821
1920
|
void exitDuringStartup("startup-deadline", 1, null, watchdogMs).then(async started => {
|
|
@@ -1913,6 +2012,7 @@ export default class Sdk extends Command {
|
|
|
1913
2012
|
const candidate = new Broker({
|
|
1914
2013
|
agentDir,
|
|
1915
2014
|
startupAbortSignal: startupAbortController.signal,
|
|
2015
|
+
startupCheckpointDeadline,
|
|
1916
2016
|
onStartupReady: () => clearTimeout(startupWatchdog),
|
|
1917
2017
|
masterOrphanGraceMs: (await Settings.loadForScope({ cwd: process.cwd(), agentDir })).get(
|
|
1918
2018
|
"sdk.masterOrphanGraceMs",
|
|
@@ -1956,6 +2056,17 @@ export default class Sdk extends Command {
|
|
|
1956
2056
|
await finishPendingStartupSignal();
|
|
1957
2057
|
return;
|
|
1958
2058
|
}
|
|
2059
|
+
// A retained removal transition is an explicit acquire failure, not only
|
|
2060
|
+
// an exhausted ordinary contention timeout.
|
|
2061
|
+
if (error instanceof FileLockAcquireError && error.orphanPath) {
|
|
2062
|
+
await exitDuringStartup(
|
|
2063
|
+
"startup-lock-blocked",
|
|
2064
|
+
1,
|
|
2065
|
+
null,
|
|
2066
|
+
BROKER_DISCOVERY_BUDGET.startupLockWaitMs,
|
|
2067
|
+
error.orphanPath,
|
|
2068
|
+
);
|
|
2069
|
+
}
|
|
1959
2070
|
if (broker) {
|
|
1960
2071
|
try {
|
|
1961
2072
|
await broker.stop({ kind: "startup-failure" });
|
|
@@ -77,16 +77,9 @@ export const CURATED_TIER_LABELS = {
|
|
|
77
77
|
|
|
78
78
|
/** Generated from packages/ai/src/models.json at feature land: 3936 in-scope baseline skips. */
|
|
79
79
|
export const TIER_MAP_SKIP_LIST = {
|
|
80
|
-
"amazon-bedrock/anthropic.claude-sonnet-5-5": { rationale: "Sonnet 5.5 catalog addition (#6111); not yet curated" },
|
|
81
80
|
"amazon-bedrock/au.anthropic.claude-sonnet-5-5": {
|
|
82
81
|
rationale: "Sonnet 5.5 catalog addition (#6111); not yet curated",
|
|
83
82
|
},
|
|
84
|
-
"amazon-bedrock/eu.anthropic.claude-sonnet-5-5": {
|
|
85
|
-
rationale: "Sonnet 5.5 catalog addition (#6111); not yet curated",
|
|
86
|
-
},
|
|
87
|
-
"amazon-bedrock/global.anthropic.claude-sonnet-5-5": {
|
|
88
|
-
rationale: "Sonnet 5.5 catalog addition (#6111); not yet curated",
|
|
89
|
-
},
|
|
90
83
|
"amazon-bedrock/jp.anthropic.claude-sonnet-5-5": {
|
|
91
84
|
rationale: "Sonnet 5.5 catalog addition (#6111); not yet curated",
|
|
92
85
|
},
|
|
@@ -6498,6 +6491,123 @@ export const TIER_MAP_SKIP_LIST = {
|
|
|
6498
6491
|
"kiro/minimax-m2.1": { rationale: "Kiro API-key catalog addition; not yet curated" },
|
|
6499
6492
|
"kiro/minimax-m2.5": { rationale: "Kiro API-key catalog addition; not yet curated" },
|
|
6500
6493
|
"kiro/qwen3-coder-next": { rationale: "Kiro API-key catalog addition; not yet curated" },
|
|
6494
|
+
// Models.dev refresh additions
|
|
6495
|
+
"amazon-bedrock/anthropic.claude-sonnet-5-5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6496
|
+
"amazon-bedrock/eu.anthropic.claude-sonnet-5-5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6497
|
+
"amazon-bedrock/global.anthropic.claude-sonnet-5-5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6498
|
+
"amazon-bedrock/global.moonshotai.kimi-k3": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6499
|
+
"amazon-bedrock/global.openai.gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6500
|
+
"amazon-bedrock/global.openai.gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6501
|
+
"amazon-bedrock/global.openai.gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6502
|
+
"amazon-bedrock/global.xai.grok-4.7": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6503
|
+
"amazon-bedrock/openai.gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6504
|
+
"amazon-bedrock/openai.gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6505
|
+
"amazon-bedrock/openai.gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6506
|
+
"amazon-bedrock/us.moonshotai.kimi-k3": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6507
|
+
"amazon-bedrock/us.openai.gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6508
|
+
"amazon-bedrock/us.openai.gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6509
|
+
"amazon-bedrock/us.openai.gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6510
|
+
"amazon-bedrock/us.xai.grok-4.7": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6511
|
+
"cloudflare-ai-gateway/anthropic/claude-opus-5.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6512
|
+
"cloudflare-ai-gateway/openai/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6513
|
+
"cloudflare-ai-gateway/openai/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6514
|
+
"cloudflare-ai-gateway/xai/grok-4.7": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6515
|
+
"deepinfra/XiaomiMiMo/MiMo-V2.6-Flash": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6516
|
+
"deepinfra/XiaomiMiMo/MiMo-V2.6-Pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6517
|
+
"deepinfra/tencent/Hy4-preview": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6518
|
+
"github-copilot/claude-opus-5.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6519
|
+
"github-copilot/claude-sonnet-5.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6520
|
+
"github-copilot/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6521
|
+
"github-copilot/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6522
|
+
"github-copilot/gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6523
|
+
"kilo/aion-labs/aion-3.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6524
|
+
"kilo/aion-labs/aion-3.5-mini": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6525
|
+
"kilo/anthropic/claude-sonnet-5.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6526
|
+
"kilo/cohere/command-a-plus": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6527
|
+
"kilo/fireworks/ember-1": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6528
|
+
"kilo/openai/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6529
|
+
"kilo/openai/gpt-6-luna-pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6530
|
+
"kilo/openai/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6531
|
+
"kilo/openai/gpt-6-sol-pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6532
|
+
"kilo/openai/gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6533
|
+
"kilo/openai/gpt-6.1-sol-pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6534
|
+
"kilo/perceptron/perceptron-mk1.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6535
|
+
"kilo/qwen/qwen3.8-max-prime": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6536
|
+
"kilo/qwen/qwen3.8-omni-flash": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6537
|
+
"kilo/stealth/space-bunny-alpha": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6538
|
+
"kilo/typesafe/jev-router": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6539
|
+
"kilo/upstage/solar-mini4": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6540
|
+
"kilo/z-ai/glm-5.3-prime": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6541
|
+
"minimax-code-cn/MiniMax-M3.1-Flash-Preview": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6542
|
+
"minimax-code/MiniMax-M3.1-Flash-Preview": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6543
|
+
"openai/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6544
|
+
"openai/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6545
|
+
"openai/gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6546
|
+
"openai/gpt-daybreak-blue-latest": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6547
|
+
"openai/gpt-daybreak-red-latest": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6548
|
+
"opencode-go/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6549
|
+
"opencode-go/longcat-2.5-preview-free": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6550
|
+
"opencode-go/space-bunny-free": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6551
|
+
"opencode-zen/claude-opus-5-5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6552
|
+
"opencode-zen/claude-sonnet-5-5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6553
|
+
"opencode-zen/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6554
|
+
"opencode-zen/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6555
|
+
"opencode-zen/gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6556
|
+
"opencode-zen/grok-4.7": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6557
|
+
"opencode-zen/longcat-2.5-preview-free": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6558
|
+
"opencode-zen/qwen3.8-max": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6559
|
+
"opencode-zen/space-bunny-free": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6560
|
+
"openrouter/aion-labs/aion-3.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6561
|
+
"openrouter/aion-labs/aion-3.5-mini": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6562
|
+
"openrouter/anthropic/claude-sonnet-5.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6563
|
+
"openrouter/anthropic/claude-sonnet-5.5:batch": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6564
|
+
"openrouter/cohere/command-a-plus": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6565
|
+
"openrouter/fireworks/ember-1": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6566
|
+
"openrouter/openai/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6567
|
+
"openrouter/openai/gpt-6-luna-pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6568
|
+
"openrouter/openai/gpt-6-luna-pro:batch": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6569
|
+
"openrouter/openai/gpt-6-luna:batch": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6570
|
+
"openrouter/openai/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6571
|
+
"openrouter/openai/gpt-6-sol:batch": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6572
|
+
"openrouter/openai/gpt-6-sol-pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6573
|
+
"openrouter/openai/gpt-6-sol-pro:batch": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6574
|
+
"openrouter/openai/gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6575
|
+
"openrouter/openai/gpt-6.1-sol-pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6576
|
+
"openrouter/openai/gpt-oss-120b:batch": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6577
|
+
"openrouter/perceptron/perceptron-mk1.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6578
|
+
"openrouter/qwen/qwen3.8-max-prime": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6579
|
+
"openrouter/qwen/qwen3.8-omni-flash": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6580
|
+
"openrouter/stealth/space-bunny-alpha": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6581
|
+
"openrouter/typesafe/jev-router": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6582
|
+
"openrouter/upstage/solar-mini4": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6583
|
+
"openrouter/z-ai/glm-5.3-prime": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6584
|
+
"venice/aion-labs-aion-3-5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6585
|
+
"venice/aion-labs-aion-3-5-mini": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6586
|
+
"venice/claude-opus-5-5-fast": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6587
|
+
"venice/claude-sonnet-5-5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6588
|
+
"venice/openai-gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6589
|
+
"venice/openai-gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6590
|
+
"venice/openai-gpt-61-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6591
|
+
"venice/xiaomi-mimo-v2-6-flash": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6592
|
+
"vercel-ai-gateway/alibaba/qwen3.8-max-prime": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6593
|
+
"vercel-ai-gateway/anthropic/claude-sonnet-5.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6594
|
+
"vercel-ai-gateway/fireworks/ember-1": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6595
|
+
"vercel-ai-gateway/inclusionai/ling-3.1-flash": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6596
|
+
"vercel-ai-gateway/inclusionai/ling-3.1-flash-free": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6597
|
+
"vercel-ai-gateway/meituan/longcat-2.5-preview": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6598
|
+
"vercel-ai-gateway/openai/gpt-6-luna": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6599
|
+
"vercel-ai-gateway/openai/gpt-6-luna-fast": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6600
|
+
"vercel-ai-gateway/openai/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6601
|
+
"vercel-ai-gateway/openai/gpt-6-sol-fast": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6602
|
+
"vercel-ai-gateway/openai/gpt-6.1-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6603
|
+
"vercel-ai-gateway/openai/gpt-6.1-sol-fast": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6604
|
+
"zenmux/anthropic/claude-fable-5.1": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6605
|
+
"zenmux/anthropic/claude-opus-5.5": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6606
|
+
"zenmux/deepseek/deepseek-v4.1-flash": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6607
|
+
"zenmux/moonshotai/kimi-k2.7-code-highspeed": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6608
|
+
"zenmux/openai/gpt-6-astra": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6609
|
+
"zenmux/openai/gpt-6-sol": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6610
|
+
"zenmux/xiaomi/mimo-v2.6-pro": { rationale: "models.dev refresh addition; not yet curated" },
|
|
6501
6611
|
} as const satisfies TierMapSkipList;
|
|
6502
6612
|
|
|
6503
6613
|
export const CURATED_TIER_MAP: AutoroutingCuratedTierMap = {
|