@gajae-code/coding-agent 0.15.5 → 0.16.0
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 +85 -1
- package/dist/types/async/job-manager.d.ts +83 -0
- package/dist/types/cli/args.d.ts +2 -0
- package/dist/types/cli/auth-gateway-cli.d.ts +17 -0
- package/dist/types/cli/model-presets-cli.d.ts +9 -0
- package/dist/types/cli/root-flags.d.ts +14 -0
- package/dist/types/cli/update-cli.d.ts +15 -0
- package/dist/types/cli.d.ts +7 -0
- package/dist/types/commands/auth-gateway.d.ts +3 -0
- package/dist/types/commands/gc.d.ts +13 -0
- package/dist/types/commands/launch.d.ts +10 -0
- package/dist/types/commands/model-presets.d.ts +21 -0
- package/dist/types/config/autorouting-tier-map.d.ts +120 -0
- package/dist/types/config/file-lock.d.ts +54 -2
- package/dist/types/config/internal/model-preset-registry-test-state.d.ts +4 -0
- package/dist/types/config/internal/model-preset-registry-test-support.d.ts +3 -0
- package/dist/types/config/keybindings.d.ts +3 -2
- package/dist/types/config/model-preset-registry.d.ts +368 -0
- package/dist/types/config/model-profile-activation.d.ts +39 -0
- package/dist/types/config/model-profiles.d.ts +5 -3
- package/dist/types/config/model-registry.d.ts +17 -5
- package/dist/types/config/settings-schema.d.ts +19 -1
- package/dist/types/config/settings.d.ts +2 -0
- package/dist/types/coordinator-mcp/model-preset.d.ts +7 -5
- package/dist/types/coordinator-mcp/projection-scan.d.ts +54 -0
- package/dist/types/crash/record-loader.d.ts +15 -0
- package/dist/types/extensibility/extensions/types.d.ts +2 -5
- package/dist/types/gjc-runtime/empty-delete-gc.d.ts +58 -0
- package/dist/types/gjc-runtime/gc-runtime.d.ts +2 -0
- package/dist/types/gjc-runtime/launch-worktree-reservation.d.ts +21 -0
- package/dist/types/gjc-runtime/managed-owner-supervisor.d.ts +2 -0
- package/dist/types/gjc-runtime/session-state-lock.d.ts +35 -6
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +72 -1
- package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +1 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +27 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/main.d.ts +3 -1
- package/dist/types/master-mode/context.d.ts +21 -0
- package/dist/types/master-mode/first-request.d.ts +34 -0
- package/dist/types/master-mode/snapshot.d.ts +32 -0
- package/dist/types/modes/components/frictionless-onboarding-selector.d.ts +10 -0
- package/dist/types/modes/components/jobs-overlay-model.d.ts +4 -2
- package/dist/types/modes/components/oauth-selector.d.ts +1 -0
- package/dist/types/modes/components/status-line/model-name.d.ts +18 -0
- package/dist/types/modes/components/status-line/priority-row.d.ts +34 -0
- package/dist/types/modes/components/status-line/segments.d.ts +10 -0
- package/dist/types/modes/jobs-observer.d.ts +36 -0
- package/dist/types/modes/print-mode.d.ts +17 -0
- package/dist/types/modes/ui-language.d.ts +7 -1
- package/dist/types/sdk/broker/broker.d.ts +80 -1
- package/dist/types/sdk/broker/endpoint-authority.d.ts +24 -0
- package/dist/types/sdk/broker/index.d.ts +3 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +26 -0
- package/dist/types/sdk/broker/master-capability.d.ts +10 -0
- package/dist/types/sdk/broker/session-index.d.ts +40 -11
- package/dist/types/sdk/broker/session-scope.d.ts +72 -0
- package/dist/types/sdk/broker/spawn-authority.d.ts +201 -0
- package/dist/types/sdk/broker/spawn-substrate.d.ts +30 -0
- package/dist/types/sdk/broker/state-version.d.ts +4 -1
- package/dist/types/sdk/broker/worktree-occupancy.d.ts +28 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +3 -0
- package/dist/types/sdk/bus/index.d.ts +6 -0
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +3 -0
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +4 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +1 -1
- package/dist/types/sdk/cli/index.d.ts +1 -0
- package/dist/types/sdk/cli/master-cli.d.ts +63 -0
- package/dist/types/sdk/cli/rows.d.ts +4 -3
- package/dist/types/sdk/cli/session-cli.d.ts +18 -2
- package/dist/types/sdk/client/client.d.ts +3 -2
- package/dist/types/sdk/client/discovery.d.ts +1 -0
- package/dist/types/sdk/host/control/dispatch.d.ts +10 -0
- package/dist/types/sdk/host/control/index.d.ts +1 -1
- package/dist/types/sdk/host/control/operations.d.ts +2 -0
- package/dist/types/sdk/host/control/runtime-gate.d.ts +21 -7
- package/dist/types/sdk/host/host.d.ts +10 -0
- package/dist/types/sdk/host/model-pin.d.ts +7 -2
- package/dist/types/sdk/host/sdk-run-capability.d.ts +1 -0
- package/dist/types/sdk/host/session-runtime.d.ts +67 -1
- package/dist/types/sdk/lifecycle/broker-client.d.ts +6 -0
- package/dist/types/sdk/lifecycle/service.d.ts +15 -3
- package/dist/types/sdk/lifecycle-session.d.ts +2 -0
- package/dist/types/sdk/prompt-deadline-manager.d.ts +11 -1
- package/dist/types/sdk/protocol/adapter-validation.d.ts +2 -0
- package/dist/types/sdk/router/session-router.d.ts +11 -0
- package/dist/types/sdk/session.d.ts +16 -0
- package/dist/types/sdk/startup-capability.d.ts +2 -1
- package/dist/types/session/account-inventory.d.ts +1 -0
- package/dist/types/session/agent-session.d.ts +24 -7
- package/dist/types/session/credential-store-errors.d.ts +1 -0
- package/dist/types/session/fold-coordinator.d.ts +201 -0
- package/dist/types/session/sdk-run-capability-internal.d.ts +7 -0
- package/dist/types/session/sdk-run-capability.d.ts +2 -0
- package/dist/types/session/session-manager.d.ts +65 -0
- package/dist/types/session/yield-queue.d.ts +5 -4
- package/dist/types/setup/frictionless-onboarding.d.ts +1 -0
- package/dist/types/telemetry/control.d.ts +11 -0
- package/dist/types/telemetry/events.d.ts +20 -0
- package/dist/types/telemetry/index.d.ts +3 -0
- package/dist/types/telemetry/transport.d.ts +22 -0
- package/dist/types/tools/bash-interactive.d.ts +23 -0
- package/dist/types/tools/bash.d.ts +4 -0
- package/dist/types/tools/gh.d.ts +8 -0
- package/dist/types/tools/index.d.ts +10 -5
- package/dist/types/web/search/providers/base.d.ts +9 -4
- package/dist/types/web/search/providers/xai.d.ts +2 -1
- package/dist/types/web/search/types.d.ts +14 -0
- package/package.json +10 -7
- package/scripts/generate-hotkeys-docs.ts +4 -0
- package/scripts/generate-sdk-operation-inventory.ts +9 -3
- package/scripts/verify-gjc-sdk-canonicalization.ts +35 -1
- package/src/async/job-manager.ts +671 -39
- package/src/cli/accounts-cli.ts +9 -5
- package/src/cli/args.ts +17 -0
- package/src/cli/auth-broker-cli.ts +40 -12
- package/src/cli/auth-gateway-cli.ts +273 -97
- package/src/cli/config-cli.ts +2 -2
- package/src/cli/fast-help.ts +4 -0
- package/src/cli/model-presets-cli.ts +100 -0
- package/src/cli/root-flags.ts +5 -0
- package/src/cli/update-cli.ts +117 -16
- package/src/cli.ts +6 -2
- package/src/commands/auth-gateway.ts +12 -8
- package/src/commands/gc.ts +19 -0
- package/src/commands/launch.ts +86 -18
- package/src/commands/model-presets.ts +24 -0
- package/src/commands/sdk.ts +113 -21
- package/src/config/autorouting-tier-map.ts +44 -0
- package/src/config/file-lock-gc.ts +9 -4
- package/src/config/file-lock.ts +890 -99
- package/src/config/internal/model-preset-registry-test-state.ts +28 -0
- package/src/config/internal/model-preset-registry-test-support.ts +11 -0
- package/src/config/keybindings.ts +6 -2
- package/src/config/model-preset-registry.ts +2795 -0
- package/src/config/model-profile-activation.ts +115 -28
- package/src/config/model-profile-contract.ts +4 -1
- package/src/config/model-profiles.ts +56 -14
- package/src/config/model-registry.ts +1044 -122
- package/src/config/model-resolver.ts +5 -0
- package/src/config/settings-schema.ts +19 -1
- package/src/config/settings.ts +11 -1
- package/src/coordinator-mcp/model-preset.ts +32 -17
- package/src/coordinator-mcp/projection-scan.ts +592 -0
- package/src/coordinator-mcp/question-state.ts +9 -11
- package/src/coordinator-mcp/server.ts +111 -42
- package/src/coordinator-mcp/session-reaper.ts +9 -3
- package/src/crash/index-store.ts +2 -0
- package/src/crash/record-loader.ts +10 -0
- package/src/extensibility/extensions/loader.ts +0 -1
- package/src/extensibility/extensions/types.ts +2 -3
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +1 -0
- package/src/gjc-runtime/empty-delete-gc.ts +301 -0
- package/src/gjc-runtime/gc-render.ts +29 -0
- package/src/gjc-runtime/gc-runtime.ts +174 -11
- package/src/gjc-runtime/launch-worktree-reservation.ts +242 -0
- package/src/gjc-runtime/managed-owner-supervisor.ts +63 -51
- package/src/gjc-runtime/session-state-lock.ts +1321 -147
- package/src/gjc-runtime/session-state-sidecar.ts +1004 -25
- package/src/gjc-runtime/tmux-owner-isolation-cli.ts +4 -7
- package/src/gjc-runtime/tmux-owner-isolation.ts +2 -2
- package/src/gjc-runtime/tmux-sessions.ts +252 -13
- package/src/hooks/skill-state.ts +6 -0
- package/src/index.ts +1 -0
- package/src/internal-urls/docs-index.generated.ts +14 -13
- package/src/internal-urls/issue-pr-protocol.ts +4 -2
- package/src/lsp/config.ts +4 -3
- package/src/lsp/path-trust.ts +12 -6
- package/src/main.ts +66 -4
- package/src/master-mode/context.ts +50 -0
- package/src/master-mode/first-request.ts +65 -0
- package/src/master-mode/snapshot.ts +205 -0
- package/src/modes/acp/acp-agent.ts +616 -161
- package/src/modes/components/footer.ts +4 -2
- package/src/modes/components/frictionless-onboarding-selector.ts +48 -2
- package/src/modes/components/jobs-overlay-model.ts +99 -16
- package/src/modes/components/model-selector.ts +158 -18
- package/src/modes/components/oauth-selector.ts +6 -1
- package/src/modes/components/settings-selector.ts +1 -0
- package/src/modes/components/status-line/model-name.ts +53 -0
- package/src/modes/components/status-line/priority-row.ts +107 -0
- package/src/modes/components/status-line/segments.ts +29 -10
- package/src/modes/components/tool-status-header.ts +151 -15
- package/src/modes/controllers/extension-ui-controller.ts +1 -1
- package/src/modes/controllers/input-controller.ts +51 -6
- package/src/modes/controllers/selector-controller.ts +191 -96
- package/src/modes/interactive-mode.ts +14 -1
- package/src/modes/jobs-observer.ts +149 -16
- package/src/modes/print-mode.ts +64 -0
- package/src/modes/runtime-init.ts +1 -1
- package/src/modes/ui-language.ts +49 -2
- package/src/modes/utils/injected-user-submission.ts +15 -1
- package/src/prompts/system/master-mode.md +28 -0
- package/src/prompts/tools/bash.md +2 -2
- package/src/prompts/tools/fold-receipt.md +3 -0
- package/src/prompts/tools/job.md +1 -1
- package/src/sdk/acp/adapter.ts +17 -2
- package/src/sdk/broker/broker.ts +1671 -34
- package/src/sdk/broker/endpoint-authority.ts +86 -0
- package/src/sdk/broker/ensure.ts +5 -0
- package/src/sdk/broker/index.ts +3 -0
- package/src/sdk/broker/lifecycle.ts +217 -46
- package/src/sdk/broker/master-capability.ts +232 -0
- package/src/sdk/broker/session-index.ts +121 -17
- package/src/sdk/broker/session-scope.ts +272 -0
- package/src/sdk/broker/spawn-authority.ts +1031 -0
- package/src/sdk/broker/spawn-substrate.ts +548 -0
- package/src/sdk/broker/state-version.ts +26 -14
- package/src/sdk/broker/transport.ts +1 -0
- package/src/sdk/broker/worktree-occupancy.ts +90 -0
- package/src/sdk/bus/chat-daemon-control.ts +5 -2
- package/src/sdk/bus/chat-daemon-runtime.ts +46 -5
- package/src/sdk/bus/index.ts +51 -4
- package/src/sdk/bus/kind-aware-reconciliation.ts +36 -6
- package/src/sdk/bus/prompt-reconciliation.ts +28 -4
- package/src/sdk/bus/slack-conversation.ts +5 -1
- package/src/sdk/bus/telegram-daemon-contract.ts +1 -1
- package/src/sdk/cli/index.ts +1 -0
- package/src/sdk/cli/master-cli.ts +259 -0
- package/src/sdk/cli/rows.ts +11 -8
- package/src/sdk/cli/session-cli.ts +276 -6
- package/src/sdk/client/client.ts +14 -8
- package/src/sdk/client/discovery.ts +3 -1
- package/src/sdk/host/control/dispatch.ts +101 -37
- package/src/sdk/host/control/index.ts +2 -0
- package/src/sdk/host/control/operations.ts +2 -0
- package/src/sdk/host/control/runtime-gate.ts +203 -11
- package/src/sdk/host/host.ts +27 -2
- package/src/sdk/host/model-pin.ts +185 -25
- package/src/sdk/host/sdk-run-capability.ts +1 -0
- package/src/sdk/host/session-runtime.test.ts +581 -43
- package/src/sdk/host/session-runtime.ts +655 -101
- package/src/sdk/lifecycle/broker-client.ts +28 -0
- package/src/sdk/lifecycle/service.ts +279 -20
- package/src/sdk/lifecycle-session.ts +10 -2
- package/src/sdk/prompt-deadline-manager.ts +16 -1
- package/src/sdk/protocol/adapter-validation.ts +27 -0
- package/src/sdk/protocol/operation-inventory.generated.json +53 -2
- package/src/sdk/protocol/operation-registry.ts +17 -4
- package/src/sdk/router/session-router.ts +294 -154
- package/src/sdk/session.ts +440 -167
- package/src/sdk/startup-capability.ts +1 -0
- package/src/session/account-inventory.ts +27 -11
- package/src/session/agent-session.ts +1292 -180
- package/src/session/blob-store.ts +15 -5
- package/src/session/credential-store-errors.ts +2 -0
- package/src/session/fold-coordinator.ts +433 -0
- package/src/session/internal/managed-session-storage.ts +153 -78
- package/src/session/sdk-run-capability-internal.ts +15 -0
- package/src/session/sdk-run-capability.ts +2 -0
- package/src/session/session-manager.ts +342 -28
- package/src/session/yield-queue.ts +24 -10
- package/src/setup/frictionless-onboarding.ts +2 -0
- package/src/setup/provider-presets.json +1 -1
- package/src/slash-commands/helpers/credential-switch.ts +6 -1
- package/src/task/executor.ts +19 -3
- package/src/telemetry/control.ts +26 -0
- package/src/telemetry/events.ts +1268 -0
- package/src/telemetry/index.ts +3 -0
- package/src/telemetry/transport.ts +87 -0
- package/src/tools/bash-interactive.ts +182 -85
- package/src/tools/bash.ts +1028 -109
- package/src/tools/gh.ts +104 -48
- package/src/tools/github-cache.ts +2 -2
- package/src/tools/index.ts +11 -5
- package/src/tools/tool-catalog.generated.ts +1 -1
- package/src/web/search/provider.ts +120 -11
- package/src/web/search/providers/anthropic.ts +89 -17
- package/src/web/search/providers/base.ts +9 -4
- package/src/web/search/providers/gemini.ts +87 -15
- package/src/web/search/providers/openai-compatible.ts +23 -8
- package/src/web/search/providers/xai.ts +98 -12
- package/src/web/search/types.ts +16 -0
|
@@ -1580,6 +1580,11 @@ export async function findInitialModel(options: {
|
|
|
1580
1580
|
thinkingLevel = resolveThinkingLevelForModel(found, defaultThinkingSelector);
|
|
1581
1581
|
return { model, thinkingLevel, fallbackMessage: undefined };
|
|
1582
1582
|
}
|
|
1583
|
+
return {
|
|
1584
|
+
model: undefined,
|
|
1585
|
+
thinkingLevel: undefined,
|
|
1586
|
+
fallbackMessage: `Model ${defaultProvider}/${defaultModelId} not found`,
|
|
1587
|
+
};
|
|
1583
1588
|
}
|
|
1584
1589
|
|
|
1585
1590
|
// 4. Try first available model with valid API key
|
|
@@ -421,6 +421,12 @@ export const SETTINGS_SCHEMA = {
|
|
|
421
421
|
description: "Hard maximum runtime for an SDK prompt from acceptance, bounding progress-aware renewals.",
|
|
422
422
|
validate: (value: number) => Number.isSafeInteger(value) && value >= 60_000 && value <= 86_400_000,
|
|
423
423
|
},
|
|
424
|
+
"sdk.masterOrphanGraceMs": {
|
|
425
|
+
type: "number",
|
|
426
|
+
default: 120_000,
|
|
427
|
+
description: "Grace period before a master-spawned child orphaned by confirmed master loss is closed.",
|
|
428
|
+
validate: (value: number) => Number.isSafeInteger(value) && value >= 60_000 && value <= 3_600_000,
|
|
429
|
+
},
|
|
424
430
|
|
|
425
431
|
// Notifications (shared daemon with Telegram/Discord/Slack presentation adapters)
|
|
426
432
|
"notifications.enabled": { type: "boolean", default: false },
|
|
@@ -745,7 +751,7 @@ export const SETTINGS_SCHEMA = {
|
|
|
745
751
|
// ────────────────────────────────────────────────────────────────────────
|
|
746
752
|
"ui.language": {
|
|
747
753
|
type: "enum",
|
|
748
|
-
values: ["en", "ko", "ja"] as const,
|
|
754
|
+
values: ["en", "ko", "zh", "ja"] as const,
|
|
749
755
|
default: "en",
|
|
750
756
|
ui: {
|
|
751
757
|
tab: "appearance",
|
|
@@ -754,6 +760,7 @@ export const SETTINGS_SCHEMA = {
|
|
|
754
760
|
options: [
|
|
755
761
|
{ value: "en", label: "English" },
|
|
756
762
|
{ value: "ko", label: "Korean (한국어)" },
|
|
763
|
+
{ value: "zh", label: "Chinese (简体中文)" },
|
|
757
764
|
{ value: "ja", label: "Japanese (日本語)" },
|
|
758
765
|
],
|
|
759
766
|
},
|
|
@@ -1720,6 +1727,17 @@ export const SETTINGS_SCHEMA = {
|
|
|
1720
1727
|
},
|
|
1721
1728
|
},
|
|
1722
1729
|
|
|
1730
|
+
"telemetry.enabled": {
|
|
1731
|
+
type: "boolean",
|
|
1732
|
+
default: false,
|
|
1733
|
+
ui: {
|
|
1734
|
+
tab: "interaction",
|
|
1735
|
+
label: "Anonymous Usage Telemetry",
|
|
1736
|
+
description:
|
|
1737
|
+
"Send minimal allowlisted update and adoption events. Disabled by default; no prompts, paths, environment, identity, or arbitrary errors are collected.",
|
|
1738
|
+
},
|
|
1739
|
+
},
|
|
1740
|
+
|
|
1723
1741
|
"starReminder.enabled": {
|
|
1724
1742
|
type: "boolean",
|
|
1725
1743
|
default: true,
|
package/src/config/settings.ts
CHANGED
|
@@ -329,7 +329,12 @@ function getByPath(obj: RawSettings, segments: string[]): unknown {
|
|
|
329
329
|
|
|
330
330
|
const PATH_SCOPED_ARRAY_SETTINGS = new Set<SettingPath>(["enabledModels", "disabledProviders"]);
|
|
331
331
|
/** Operator-owned settings which must never be workspace-controlled or runtime-overridden. */
|
|
332
|
-
const GLOBAL_ONLY_SETTINGS = new Set<SettingPath>([
|
|
332
|
+
const GLOBAL_ONLY_SETTINGS = new Set<SettingPath>([
|
|
333
|
+
"crashReport.upstream",
|
|
334
|
+
"crashReport.upstreamDsn",
|
|
335
|
+
"ui.language",
|
|
336
|
+
"telemetry.enabled",
|
|
337
|
+
]);
|
|
333
338
|
const LEGACY_THEME_NAME_REPLACEMENTS = {
|
|
334
339
|
dark: "red-claw",
|
|
335
340
|
light: "blue-crab",
|
|
@@ -743,6 +748,11 @@ export class Settings implements NotificationSettingsReader {
|
|
|
743
748
|
return !this.#persist || !this.#hasRecoveredConfigSyntax;
|
|
744
749
|
}
|
|
745
750
|
|
|
751
|
+
/** Whether this instance can publish a mutation to a durable config file. */
|
|
752
|
+
canPersistDurableConfig(): boolean {
|
|
753
|
+
return this.#persist && !this.#hasRecoveredConfigSyntax;
|
|
754
|
+
}
|
|
755
|
+
|
|
746
756
|
/**
|
|
747
757
|
* Set a setting value (sync).
|
|
748
758
|
* Updates global settings and reserves its background persistence slot before
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import * as path from "node:path";
|
|
2
2
|
import { getAgentDir } from "@gajae-code/utils";
|
|
3
|
-
import {
|
|
3
|
+
import { ConfigFile } from "../config/config-file";
|
|
4
|
+
import {
|
|
5
|
+
type AcceptedModelPresetRegistry,
|
|
6
|
+
loadAcceptedModelPresetRegistryAsync,
|
|
7
|
+
} from "../config/model-preset-registry";
|
|
4
8
|
import { UnknownModelProfileError, validateModelProfileName } from "../config/model-profile-contract";
|
|
5
9
|
import { mergeModelProfiles } from "../config/model-profiles";
|
|
6
|
-
import { ModelsConfigSchema } from "../config/models-config-schema";
|
|
10
|
+
import { type ModelsConfig, ModelsConfigSchema } from "../config/models-config-schema";
|
|
7
11
|
|
|
8
12
|
export interface CoordinatorModelProfile {
|
|
9
13
|
name: string;
|
|
10
14
|
}
|
|
11
15
|
|
|
12
16
|
/**
|
|
13
|
-
* Loads the merged
|
|
17
|
+
* Loads the merged embedded + accepted registry + custom model-profile names
|
|
14
18
|
* without loading the session-host model registry. The child still owns
|
|
15
19
|
* profile activation; this validates the selection before session creation.
|
|
16
20
|
*/
|
|
@@ -20,10 +24,11 @@ export type CoordinatorModelProfileLoader = () =>
|
|
|
20
24
|
|
|
21
25
|
const MAX_ECHOED_MPRESET_LENGTH = 128;
|
|
22
26
|
/**
|
|
23
|
-
* Thrown by the default loader when `models.yml`
|
|
24
|
-
* unreadable. This lets the resolver fail closed with a
|
|
25
|
-
* instead of silently collapsing a broken registry to
|
|
26
|
-
* (which would misreport a caller's valid custom
|
|
27
|
+
* Thrown by the default loader when `models.yml` or the accepted preset
|
|
28
|
+
* registry is invalid or unreadable. This lets the resolver fail closed with a
|
|
29
|
+
* distinct, stable reason instead of silently collapsing a broken registry to
|
|
30
|
+
* the built-ins-only set (which would misreport a caller's valid custom
|
|
31
|
+
* profile as unknown).
|
|
27
32
|
*/
|
|
28
33
|
export class CoordinatorModelProfileRegistryError extends Error {
|
|
29
34
|
constructor(cause?: unknown) {
|
|
@@ -34,23 +39,33 @@ export class CoordinatorModelProfileRegistryError extends Error {
|
|
|
34
39
|
}
|
|
35
40
|
|
|
36
41
|
function coordinatorModelProfiles(
|
|
37
|
-
profiles?:
|
|
42
|
+
profiles?: ModelsConfig["profiles"],
|
|
43
|
+
registryProfiles?: AcceptedModelPresetRegistry["profiles"],
|
|
38
44
|
): Map<string, CoordinatorModelProfile> {
|
|
39
|
-
return new Map([...mergeModelProfiles(profiles).keys()].map(name => [name, { name }]));
|
|
45
|
+
return new Map([...mergeModelProfiles(profiles, registryProfiles).keys()].map(name => [name, { name }]));
|
|
40
46
|
}
|
|
41
47
|
|
|
42
|
-
export
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
export function createCoordinatorModelProfileLoader(agentDir: string): CoordinatorModelProfileLoader {
|
|
49
|
+
return async () => loadCoordinatorModelProfilesFromAgentDir(agentDir);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function loadCoordinatorModelProfilesFromAgentDir(
|
|
53
|
+
agentDir: string,
|
|
54
|
+
): Promise<Map<string, CoordinatorModelProfile>> {
|
|
55
|
+
const accepted = await loadAcceptedModelPresetRegistryAsync(agentDir);
|
|
56
|
+
if (accepted.error) throw new CoordinatorModelProfileRegistryError(accepted.error);
|
|
45
57
|
try {
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
if (
|
|
49
|
-
return coordinatorModelProfiles(
|
|
58
|
+
const modelsConfig = new ConfigFile("models", ModelsConfigSchema, path.join(agentDir, "models.yml"));
|
|
59
|
+
const loaded = modelsConfig.tryLoad();
|
|
60
|
+
if (loaded.status === "error") throw loaded.error;
|
|
61
|
+
return coordinatorModelProfiles(loaded.value?.profiles, accepted.profiles);
|
|
50
62
|
} catch (error) {
|
|
51
63
|
throw new CoordinatorModelProfileRegistryError(error);
|
|
52
64
|
}
|
|
53
|
-
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export const loadCoordinatorModelProfiles: CoordinatorModelProfileLoader = async () =>
|
|
68
|
+
loadCoordinatorModelProfilesFromAgentDir(getAgentDir());
|
|
54
69
|
|
|
55
70
|
export type CoordinatorMpresetResolution =
|
|
56
71
|
| { ok: true; mpreset: string | null }
|