@di-code/coding-agent 0.1.7 → 0.1.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/README.md +104 -46
- package/compositions/base.yml +54 -0
- package/compositions/interactive.yml +14 -0
- package/compositions/json.yml +6 -0
- package/compositions/print.yml +5 -0
- package/compositions/rpc.yml +12 -0
- package/compositions/webui.yml +9 -0
- package/dist/cli.d.ts +22 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +97 -3
- package/dist/cli.js.map +1 -1
- package/dist/composition-loader-entry.d.ts +11 -0
- package/dist/composition-loader-entry.d.ts.map +1 -0
- package/dist/composition-loader-entry.js +12 -0
- package/dist/composition-loader-entry.js.map +1 -0
- package/dist/compositions.d.ts +32 -0
- package/dist/compositions.d.ts.map +1 -0
- package/dist/compositions.js +173 -0
- package/dist/compositions.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +9 -2
- package/dist/core/session/session-manager.d.ts.map +1 -1
- package/dist/core/session/session-manager.js +28 -0
- package/dist/core/session/session-manager.js.map +1 -1
- package/dist/core/session/session-storage.d.ts.map +1 -1
- package/dist/core/session/session-storage.js +20 -3
- package/dist/core/session/session-storage.js.map +1 -1
- package/dist/core/session/types.d.ts +11 -2
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/types.js.map +1 -1
- package/dist/core/session-tools.d.ts +5 -0
- package/dist/core/session-tools.d.ts.map +1 -0
- package/dist/core/session-tools.js +17 -0
- package/dist/core/session-tools.js.map +1 -0
- package/dist/core/session.d.ts +19 -7
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +71 -39
- package/dist/core/session.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -38
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +1 -207
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +1 -24
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +1 -135
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +1 -26
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -140
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +1 -23
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/file-search.d.ts +1 -13
- package/dist/core/tools/file-search.d.ts.map +1 -1
- package/dist/core/tools/file-search.js +1 -98
- package/dist/core/tools/file-search.js.map +1 -1
- package/dist/core/tools/glob.d.ts +1 -10
- package/dist/core/tools/glob.d.ts.map +1 -1
- package/dist/core/tools/glob.js +1 -43
- package/dist/core/tools/glob.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -12
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -66
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/load-skill.d.ts +1 -9
- package/dist/core/tools/load-skill.d.ts.map +1 -1
- package/dist/core/tools/load-skill.js +1 -21
- package/dist/core/tools/load-skill.js.map +1 -1
- package/dist/core/tools/path-boundary.d.ts +1 -4
- package/dist/core/tools/path-boundary.d.ts.map +1 -1
- package/dist/core/tools/path-boundary.js +1 -65
- package/dist/core/tools/path-boundary.js.map +1 -1
- package/dist/core/tools/read.d.ts +1 -16
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -131
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts +1 -16
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -44
- package/dist/core/tools/write.js.map +1 -1
- package/dist/entry.js +30 -28
- package/dist/entry.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/interactive/builtin.d.ts +17 -0
- package/dist/interactive/builtin.d.ts.map +1 -0
- package/dist/interactive/builtin.js +47 -0
- package/dist/interactive/builtin.js.map +1 -0
- package/dist/interactive/controller.d.ts +85 -0
- package/dist/interactive/controller.d.ts.map +1 -0
- package/dist/interactive/controller.js +211 -0
- package/dist/interactive/controller.js.map +1 -0
- package/dist/interactive/index.d.ts +3 -0
- package/dist/interactive/index.d.ts.map +1 -0
- package/dist/interactive/index.js +3 -0
- package/dist/interactive/index.js.map +1 -0
- package/dist/interactive-host-entry.d.ts +7 -0
- package/dist/interactive-host-entry.d.ts.map +1 -0
- package/dist/interactive-host-entry.js +123 -0
- package/dist/interactive-host-entry.js.map +1 -0
- package/dist/interactive-profile.d.ts +18 -0
- package/dist/interactive-profile.d.ts.map +1 -0
- package/dist/interactive-profile.js +290 -0
- package/dist/interactive-profile.js.map +1 -0
- package/dist/interactive-resources-entry.d.ts +7 -0
- package/dist/interactive-resources-entry.d.ts.map +1 -0
- package/dist/interactive-resources-entry.js +42 -0
- package/dist/interactive-resources-entry.js.map +1 -0
- package/dist/legacy-main.d.ts +39 -0
- package/dist/legacy-main.d.ts.map +1 -0
- package/dist/legacy-main.js +611 -0
- package/dist/legacy-main.js.map +1 -0
- package/dist/main.d.ts +15 -34
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +130 -518
- package/dist/main.js.map +1 -1
- package/dist/mcp/entries.d.ts +42 -0
- package/dist/mcp/entries.d.ts.map +1 -0
- package/dist/mcp/entries.js +98 -0
- package/dist/mcp/entries.js.map +1 -0
- package/dist/mcp-client-entry.d.ts +5 -0
- package/dist/mcp-client-entry.d.ts.map +1 -0
- package/dist/mcp-client-entry.js +6 -0
- package/dist/mcp-client-entry.js.map +1 -0
- package/dist/mcp-config-entry.d.ts +5 -0
- package/dist/mcp-config-entry.d.ts.map +1 -0
- package/dist/mcp-config-entry.js +6 -0
- package/dist/mcp-config-entry.js.map +1 -0
- package/dist/mcp-tools-entry.d.ts +5 -0
- package/dist/mcp-tools-entry.d.ts.map +1 -0
- package/dist/mcp-tools-entry.js +6 -0
- package/dist/mcp-tools-entry.js.map +1 -0
- package/dist/mcp-transport-entry.d.ts +5 -0
- package/dist/mcp-transport-entry.d.ts.map +1 -0
- package/dist/mcp-transport-entry.js +6 -0
- package/dist/mcp-transport-entry.js.map +1 -0
- package/dist/modes/interactive-entry.d.ts +18 -0
- package/dist/modes/interactive-entry.d.ts.map +1 -0
- package/dist/modes/interactive-entry.js +21 -0
- package/dist/modes/interactive-entry.js.map +1 -0
- package/dist/modes/interactive.d.ts +16 -6
- package/dist/modes/interactive.d.ts.map +1 -1
- package/dist/modes/interactive.js +81 -32
- package/dist/modes/interactive.js.map +1 -1
- package/dist/modes/json-entry.d.ts +13 -0
- package/dist/modes/json-entry.d.ts.map +1 -0
- package/dist/modes/json-entry.js +14 -0
- package/dist/modes/json-entry.js.map +1 -0
- package/dist/modes/json.d.ts +4 -1
- package/dist/modes/json.d.ts.map +1 -1
- package/dist/modes/json.js +3 -3
- package/dist/modes/json.js.map +1 -1
- package/dist/modes/print-entry.d.ts +10 -0
- package/dist/modes/print-entry.d.ts.map +1 -0
- package/dist/modes/print-entry.js +11 -0
- package/dist/modes/print-entry.js.map +1 -0
- package/dist/modes/tree-selector.d.ts.map +1 -1
- package/dist/modes/tree-selector.js +4 -0
- package/dist/modes/tree-selector.js.map +1 -1
- package/dist/plugin-dump-composition.d.ts +6 -0
- package/dist/plugin-dump-composition.d.ts.map +1 -0
- package/dist/plugin-dump-composition.js +7 -0
- package/dist/plugin-dump-composition.js.map +1 -0
- package/dist/plugin-inventory.d.ts +7 -0
- package/dist/plugin-inventory.d.ts.map +1 -0
- package/dist/plugin-inventory.js +8 -0
- package/dist/plugin-inventory.js.map +1 -0
- package/dist/plugin-manager.d.ts +6 -0
- package/dist/plugin-manager.d.ts.map +1 -0
- package/dist/plugin-manager.js +7 -0
- package/dist/plugin-manager.js.map +1 -0
- package/dist/plugin-trace.d.ts +6 -0
- package/dist/plugin-trace.d.ts.map +1 -0
- package/dist/plugin-trace.js +7 -0
- package/dist/plugin-trace.js.map +1 -0
- package/dist/plugins/dynamic-broker.d.ts +76 -0
- package/dist/plugins/dynamic-broker.d.ts.map +1 -0
- package/dist/plugins/dynamic-broker.js +852 -0
- package/dist/plugins/dynamic-broker.js.map +1 -0
- package/dist/plugins/profile.d.ts +15 -0
- package/dist/plugins/profile.d.ts.map +1 -0
- package/dist/plugins/profile.js +34 -0
- package/dist/plugins/profile.js.map +1 -0
- package/dist/plugins/runtime-host.d.ts +37 -0
- package/dist/plugins/runtime-host.d.ts.map +1 -0
- package/dist/plugins/runtime-host.js +95 -0
- package/dist/plugins/runtime-host.js.map +1 -0
- package/dist/plugins/trust.d.ts +8 -0
- package/dist/plugins/trust.d.ts.map +1 -0
- package/dist/plugins/trust.js +59 -0
- package/dist/plugins/trust.js.map +1 -0
- package/dist/project-trust-entry.d.ts +15 -0
- package/dist/project-trust-entry.d.ts.map +1 -0
- package/dist/project-trust-entry.js +15 -0
- package/dist/project-trust-entry.js.map +1 -0
- package/dist/rpc/client.d.ts +78 -6
- package/dist/rpc/client.d.ts.map +1 -1
- package/dist/rpc/client.js +172 -4
- package/dist/rpc/client.js.map +1 -1
- package/dist/rpc/dispatcher.d.ts +121 -0
- package/dist/rpc/dispatcher.d.ts.map +1 -0
- package/dist/rpc/dispatcher.js +994 -0
- package/dist/rpc/dispatcher.js.map +1 -0
- package/dist/rpc/index.d.ts +2 -0
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +2 -0
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/lifecycle.d.ts +6 -0
- package/dist/rpc/lifecycle.d.ts.map +1 -0
- package/dist/rpc/lifecycle.js +24 -0
- package/dist/rpc/lifecycle.js.map +1 -0
- package/dist/rpc/protocol.d.ts +112 -31
- package/dist/rpc/protocol.d.ts.map +1 -1
- package/dist/rpc/protocol.js +569 -117
- package/dist/rpc/protocol.js.map +1 -1
- package/dist/rpc/server-service.d.ts +7 -0
- package/dist/rpc/server-service.d.ts.map +1 -0
- package/dist/rpc/server-service.js +3 -0
- package/dist/rpc/server-service.js.map +1 -0
- package/dist/rpc/server.d.ts +16 -19
- package/dist/rpc/server.d.ts.map +1 -1
- package/dist/rpc/server.js +59 -115
- package/dist/rpc/server.js.map +1 -1
- package/dist/rpc-client-sdk-entry.d.ts +12 -0
- package/dist/rpc-client-sdk-entry.d.ts.map +1 -0
- package/dist/rpc-client-sdk-entry.js +11 -0
- package/dist/rpc-client-sdk-entry.js.map +1 -0
- package/dist/rpc-entry.js +50 -18
- package/dist/rpc-entry.js.map +1 -1
- package/dist/rpc-server-entry.d.ts +8 -0
- package/dist/rpc-server-entry.d.ts.map +1 -0
- package/dist/rpc-server-entry.js +67 -0
- package/dist/rpc-server-entry.js.map +1 -0
- package/dist/runtime/attachment-store.d.ts +13 -0
- package/dist/runtime/attachment-store.d.ts.map +1 -0
- package/dist/runtime/attachment-store.js +93 -0
- package/dist/runtime/attachment-store.js.map +1 -0
- package/dist/runtime/bootstrap.d.ts +14 -0
- package/dist/runtime/bootstrap.d.ts.map +1 -0
- package/dist/runtime/bootstrap.js +29 -0
- package/dist/runtime/bootstrap.js.map +1 -0
- package/dist/runtime/interactive-host-service.d.ts +22 -0
- package/dist/runtime/interactive-host-service.d.ts.map +1 -0
- package/dist/runtime/interactive-host-service.js +2 -0
- package/dist/runtime/interactive-host-service.js.map +1 -0
- package/dist/runtime/interactive-resource-service.d.ts +11 -0
- package/dist/runtime/interactive-resource-service.d.ts.map +1 -0
- package/dist/runtime/interactive-resource-service.js +3 -0
- package/dist/runtime/interactive-resource-service.js.map +1 -0
- package/dist/runtime/plugin-inventory-entry.d.ts +5 -0
- package/dist/runtime/plugin-inventory-entry.d.ts.map +1 -0
- package/dist/runtime/plugin-inventory-entry.js +18 -0
- package/dist/runtime/plugin-inventory-entry.js.map +1 -0
- package/dist/runtime/plugin-inventory-service.d.ts +8 -0
- package/dist/runtime/plugin-inventory-service.d.ts.map +1 -0
- package/dist/runtime/plugin-inventory-service.js +3 -0
- package/dist/runtime/plugin-inventory-service.js.map +1 -0
- package/dist/runtime/plugin-manager-entry.d.ts +20 -0
- package/dist/runtime/plugin-manager-entry.d.ts.map +1 -0
- package/dist/runtime/plugin-manager-entry.js +96 -0
- package/dist/runtime/plugin-manager-entry.js.map +1 -0
- package/dist/runtime/plugin-observability-entry.d.ts +12 -0
- package/dist/runtime/plugin-observability-entry.d.ts.map +1 -0
- package/dist/runtime/plugin-observability-entry.js +73 -0
- package/dist/runtime/plugin-observability-entry.js.map +1 -0
- package/dist/runtime/product-host.d.ts +91 -0
- package/dist/runtime/product-host.d.ts.map +1 -0
- package/dist/runtime/product-host.js +529 -0
- package/dist/runtime/product-host.js.map +1 -0
- package/dist/runtime/session-factory.d.ts +17 -0
- package/dist/runtime/session-factory.d.ts.map +1 -0
- package/dist/runtime/session-factory.js +75 -0
- package/dist/runtime/session-factory.js.map +1 -0
- package/dist/runtime/session-host.d.ts +152 -0
- package/dist/runtime/session-host.d.ts.map +1 -0
- package/dist/runtime/session-host.js +895 -0
- package/dist/runtime/session-host.js.map +1 -0
- package/dist/runtime-core-entry.d.ts +11 -0
- package/dist/runtime-core-entry.d.ts.map +1 -0
- package/dist/runtime-core-entry.js +9 -0
- package/dist/runtime-core-entry.js.map +1 -0
- package/dist/session-factory-entry.d.ts +7 -0
- package/dist/session-factory-entry.d.ts.map +1 -0
- package/dist/session-factory-entry.js +9 -0
- package/dist/session-factory-entry.js.map +1 -0
- package/dist/session-store-jsonl-entry.d.ts +7 -0
- package/dist/session-store-jsonl-entry.d.ts.map +1 -0
- package/dist/session-store-jsonl-entry.js +33 -0
- package/dist/session-store-jsonl-entry.js.map +1 -0
- package/dist/startup.d.ts +12 -1
- package/dist/startup.d.ts.map +1 -1
- package/dist/startup.js +106 -15
- package/dist/startup.js.map +1 -1
- package/dist/subagents/index.d.ts +2 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +2 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/service.d.ts +50 -0
- package/dist/subagents/service.d.ts.map +1 -0
- package/dist/subagents/service.js +521 -0
- package/dist/subagents/service.js.map +1 -0
- package/dist/ui-host.d.ts +125 -0
- package/dist/ui-host.d.ts.map +1 -0
- package/dist/ui-host.js +275 -0
- package/dist/ui-host.js.map +1 -0
- package/dist/web/assets/index-BwfuGMvv.css +1 -0
- package/dist/web/assets/index-DPUaJqFJ.js +41 -0
- package/dist/web/assets/index-DPUaJqFJ.js.map +1 -0
- package/dist/web/index.html +14 -0
- package/dist/web-command.d.ts +11 -0
- package/dist/web-command.d.ts.map +1 -0
- package/dist/web-command.js +114 -0
- package/dist/web-command.js.map +1 -0
- package/dist/web-frontend.d.ts +73 -0
- package/dist/web-frontend.d.ts.map +1 -0
- package/dist/web-frontend.js +249 -0
- package/dist/web-frontend.js.map +1 -0
- package/dist/web.d.ts +254 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +740 -0
- package/dist/web.js.map +1 -0
- package/dist/webui-entry.d.ts +3 -0
- package/dist/webui-entry.d.ts.map +1 -0
- package/dist/webui-entry.js +73 -0
- package/dist/webui-entry.js.map +1 -0
- package/dist/webui.d.ts +91 -0
- package/dist/webui.d.ts.map +1 -0
- package/dist/webui.js +882 -0
- package/dist/webui.js.map +1 -0
- package/package.json +89 -8
package/dist/startup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n\tcreateAnthropicProvider,\n\tcreateDeepSeekProvider,\n\tcreateFauxProvider,\n\tcreateKimiProvider,\n\tcreateOpenAIChatCompletionsProvider,\n\tcreateOpenAIProvider,\n\tcreateZhipuProvider,\n\ttype FauxResponse,\n\tfindBuiltinModel,\n\ttype Model,\n\ttype ModelApi,\n\ttype Provider,\n\ttype ThinkingLevel,\n} from \"@di-code/ai\";\nimport { isLocale, type Locale } from \"./i18n.ts\";\n\nexport interface StartupRuntime {\n\treadonly provider: Provider;\n\treadonly model: Model;\n}\n\nexport interface StartupProviderConfiguration {\n\treadonly id: string;\n\treadonly name?: string;\n\treadonly api?: string;\n\treadonly apiKey?: string;\n\treadonly baseUrl?: string;\n\treadonly models?: readonly Model[];\n}\n\nexport interface StartupConfiguration {\n\treadonly environment: Environment;\n\treadonly providers: readonly StartupProviderConfiguration[];\n\treadonly defaults?: StartupDefaults;\n\t/** User-level per-provider/model thinking-level preferences. */\n\treadonly thinkingLevels?: ThinkingLevelPreferences;\n\treadonly locale?: Locale;\n}\n\nexport interface StartupDefaults {\n\treadonly providerId?: string;\n\treadonly modelId?: string;\n}\n\nexport type ThinkingLevelPreferences = Readonly<Record<string, Readonly<Record<string, ThinkingLevel>>>>;\n\nexport interface CustomProviderInput {\n\treadonly api: Exclude<ModelApi, \"faux\">;\n\treadonly baseUrl: string;\n\treadonly apiKey: string;\n\treadonly modelId: string;\n}\n\nconst FAUX_RESPONSES: readonly FauxResponse[] = [\n\t{\n\t\ttype: \"success\",\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: \"你好,我是di-code,一个面向终端的 TypeScript AI Coding Agent,支持多 Provider 流式对话、工具调用、JSONL 会话持久化、交互式 TUI、插件扩展与 JSONL RPC 集成。\",\n\t\t\t},\n\t\t],\n\t},\n\t{ type: \"success\", content: [{ type: \"text\", text: \"当前回复为faux数据\" }] },\n];\n\nconst SETTINGS_FILE_NAME = \"settings.json\";\nconst SETTINGS_PATH = join(\".di-code\", SETTINGS_FILE_NAME);\n\ntype Environment = Readonly<Record<string, string | undefined>>;\n\ninterface SettingsFile {\n\treadonly defaultProvider?: string;\n\treadonly defaultModel?: string;\n\treadonly thinkingLevels?: ThinkingLevelPreferences;\n\treadonly locale?: Locale;\n\treadonly providers: Record<\n\t\tstring,\n\t\t{\n\t\t\treadonly name?: string;\n\t\t\treadonly baseUrl?: string;\n\t\t\treadonly apiKey?: string;\n\t\t\treadonly api?: string;\n\t\t\treadonly models?: unknown;\n\t\t}\n\t>;\n}\n\nexport function resolveStartupArgs(args: readonly string[]): readonly string[] {\n\treturn args.length === 0 ? [\"--interactive\"] : args;\n}\n\nfunction optionalString(value: unknown, path: string, settingsPath: string): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"string\") throw new Error(`${settingsPath}: ${path} must be a string`);\n\treturn value;\n}\n\nfunction requiredString(value: unknown, path: string, settingsPath = SETTINGS_PATH): string {\n\tconst result = optionalString(value, path, settingsPath);\n\tif (!result?.trim()) throw new Error(`${settingsPath}: ${path} must be a non-empty string`);\n\treturn result.trim();\n}\n\nfunction positiveInteger(value: unknown, path: string, fallback: number, settingsPath: string): number {\n\tconst result = value ?? fallback;\n\tif (!Number.isInteger(result) || (result as number) <= 0) {\n\t\tthrow new Error(`${settingsPath}: ${path} must be a positive integer`);\n\t}\n\treturn result as number;\n}\n\nfunction nonNegativeNumber(value: unknown, path: string, fallback: number, settingsPath: string): number {\n\tconst result = value ?? fallback;\n\tif (typeof result !== \"number\" || !Number.isFinite(result) || result < 0) {\n\t\tthrow new Error(`${settingsPath}: ${path} must be a non-negative finite number`);\n\t}\n\treturn result;\n}\n\nfunction parseChatCompletionsCompat(\n\tvalue: unknown,\n\tpath: string,\n\tsettingsPath: string,\n): Model[\"chatCompletionsCompat\"] {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${settingsPath}: ${path} must be an object`);\n\t}\n\tconst compat = value as Record<string, unknown>;\n\tconst optionalBoolean = (field: string): boolean | undefined => {\n\t\tconst candidate = compat[field];\n\t\tif (candidate === undefined) return undefined;\n\t\tif (typeof candidate !== \"boolean\") throw new Error(`${settingsPath}: ${path}.${field} must be a boolean`);\n\t\treturn candidate;\n\t};\n\tconst maxTokensField = compat.maxTokensField;\n\tif (maxTokensField !== undefined && maxTokensField !== \"max_tokens\" && maxTokensField !== \"max_completion_tokens\") {\n\t\tthrow new Error(`${settingsPath}: ${path}.maxTokensField is invalid`);\n\t}\n\tconst thinkingFormat = compat.thinkingFormat;\n\tif (\n\t\tthinkingFormat !== undefined &&\n\t\tthinkingFormat !== \"zai\" &&\n\t\tthinkingFormat !== \"deepseek\" &&\n\t\tthinkingFormat !== \"kimi\"\n\t) {\n\t\tthrow new Error(`${settingsPath}: ${path}.thinkingFormat is invalid`);\n\t}\n\tconst supportsUsageInStreaming = optionalBoolean(\"supportsUsageInStreaming\");\n\tconst supportsReasoningEffort = optionalBoolean(\"supportsReasoningEffort\");\n\tconst zaiToolStream = optionalBoolean(\"zaiToolStream\");\n\treturn {\n\t\t...(maxTokensField === undefined ? {} : { maxTokensField }),\n\t\t...(thinkingFormat === undefined ? {} : { thinkingFormat }),\n\t\t...(supportsUsageInStreaming === undefined ? {} : { supportsUsageInStreaming }),\n\t\t...(supportsReasoningEffort === undefined ? {} : { supportsReasoningEffort }),\n\t\t...(zaiToolStream === undefined ? {} : { zaiToolStream }),\n\t};\n}\n\nfunction parseModels(\n\tvalue: unknown,\n\tpath: string,\n\tproviderId: string,\n\tproviderApi: string | undefined,\n\tproviderBaseUrl: string | undefined,\n\tsettingsPath: string,\n): readonly Model[] | undefined {\n\tif (value === undefined) return undefined;\n\tif (!Array.isArray(value)) throw new Error(`${settingsPath}: ${path} must be an array`);\n\n\treturn value.map((entry, index) => {\n\t\tconst modelPath = `${path}[${index}]`;\n\t\tif (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath} must be an object`);\n\t\t}\n\t\tconst model = entry as Record<string, unknown>;\n\t\tconst input = model.input ?? [\"text\"];\n\t\tif (!Array.isArray(input) || input.length === 0 || input.some((item) => item !== \"text\" && item !== \"image\")) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.input must contain text and/or image`);\n\t\t}\n\t\tconst cost = model.cost ?? {};\n\t\tif (typeof cost !== \"object\" || cost === null || Array.isArray(cost)) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.cost must be an object`);\n\t\t}\n\t\tconst prices = cost as Record<string, unknown>;\n\t\tif (model.reasoning !== undefined && typeof model.reasoning !== \"boolean\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.reasoning must be a boolean`);\n\t\t}\n\t\tconst configuredReasoningEfforts = model.reasoningEfforts;\n\t\tif (configuredReasoningEfforts !== undefined) {\n\t\t\tif (!Array.isArray(configuredReasoningEfforts) || configuredReasoningEfforts.length === 0) {\n\t\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.reasoningEfforts must be a non-empty array`);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tmodel.reasoning !== true ||\n\t\t\t\tconfiguredReasoningEfforts.some(\n\t\t\t\t\t(effort) => effort !== \"low\" && effort !== \"medium\" && effort !== \"high\" && effort !== \"max\",\n\t\t\t\t) ||\n\t\t\t\tnew Set(configuredReasoningEfforts).size !== configuredReasoningEfforts.length\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${settingsPath}: ${modelPath}.reasoningEfforts requires reasoning=true and unique low, medium, high, or max values`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (model.cacheRetention !== undefined && model.cacheRetention !== \"long\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.cacheRetention must be \"long\" when provided`);\n\t\t}\n\t\tif (model.sessionAffinity !== undefined && model.sessionAffinity !== \"codex\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.sessionAffinity must be \"codex\" when provided`);\n\t\t}\n\t\tconst api = optionalString(model.api, `${modelPath}.api`, settingsPath) ?? providerApi;\n\t\tif (!api) throw new Error(`${settingsPath}: ${modelPath}.api is required`);\n\t\tif (![\"faux\", \"openai-responses\", \"openai-chat-completions\", \"anthropic-messages\"].includes(api)) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.api is unsupported`);\n\t\t}\n\t\tconst typedApi = api as ModelApi;\n\t\tconst reasoningEfforts: Model[\"reasoningEfforts\"] =\n\t\t\tconfiguredReasoningEfforts === undefined && model.reasoning === true && api === \"openai-responses\"\n\t\t\t\t? [\"low\", \"medium\", \"high\"]\n\t\t\t\t: configuredReasoningEfforts === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: ([...configuredReasoningEfforts] as Model[\"reasoningEfforts\"]);\n\t\tconst defaultReasoningEffort = model.defaultReasoningEffort;\n\t\tif (\n\t\t\tdefaultReasoningEffort !== undefined &&\n\t\t\t(typeof defaultReasoningEffort !== \"string\" ||\n\t\t\t\t!reasoningEfforts?.includes(defaultReasoningEffort as Exclude<Model[\"defaultReasoningEffort\"], undefined>))\n\t\t) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.defaultReasoningEffort must be included in reasoningEfforts`);\n\t\t}\n\t\tconst baseUrl = optionalString(model.baseUrl, `${modelPath}.baseUrl`, settingsPath) ?? providerBaseUrl;\n\t\tconst id = requiredString(model.id, `${modelPath}.id`, settingsPath);\n\t\tconst chatCompletionsCompat = parseChatCompletionsCompat(\n\t\t\tmodel.chatCompletionsCompat,\n\t\t\t`${modelPath}.chatCompletionsCompat`,\n\t\t\tsettingsPath,\n\t\t);\n\t\tif (chatCompletionsCompat !== undefined && typedApi !== \"openai-chat-completions\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.chatCompletionsCompat requires api \"openai-chat-completions\"`);\n\t\t}\n\t\treturn {\n\t\t\tid,\n\t\t\tname: requiredString(model.name ?? id, `${modelPath}.name`, settingsPath),\n\t\t\tprovider: providerId,\n\t\t\tapi: typedApi,\n\t\t\t...(baseUrl === undefined ? {} : { baseUrl }),\n\t\t\tinput: [...input],\n\t\t\treasoning: model.reasoning ?? false,\n\t\t\t...(reasoningEfforts ? { reasoningEfforts } : {}),\n\t\t\t...(defaultReasoningEffort\n\t\t\t\t? { defaultReasoningEffort: defaultReasoningEffort as Exclude<Model[\"defaultReasoningEffort\"], undefined> }\n\t\t\t\t: {}),\n\t\t\t...(chatCompletionsCompat ? { chatCompletionsCompat } : {}),\n\t\t\t...(model.cacheRetention === \"long\" ? { cacheRetention: \"long\" as const } : {}),\n\t\t\t...(model.sessionAffinity === \"codex\" ? { sessionAffinity: \"codex\" as const } : {}),\n\t\t\tcontextWindow: positiveInteger(model.contextWindow, `${modelPath}.contextWindow`, 128_000, settingsPath),\n\t\t\tmaxOutputTokens: positiveInteger(\n\t\t\t\tmodel.maxTokens ?? model.maxOutputTokens,\n\t\t\t\t`${modelPath}.maxTokens`,\n\t\t\t\t16_384,\n\t\t\t\tsettingsPath,\n\t\t\t),\n\t\t\tcost: {\n\t\t\t\tinput: nonNegativeNumber(prices.input, `${modelPath}.cost.input`, 0, settingsPath) / 1_000_000,\n\t\t\t\toutput: nonNegativeNumber(prices.output, `${modelPath}.cost.output`, 0, settingsPath) / 1_000_000,\n\t\t\t\tcacheRead: nonNegativeNumber(prices.cacheRead, `${modelPath}.cost.cacheRead`, 0, settingsPath) / 1_000_000,\n\t\t\t\tcacheWrite: nonNegativeNumber(prices.cacheWrite, `${modelPath}.cost.cacheWrite`, 0, settingsPath) / 1_000_000,\n\t\t\t},\n\t\t};\n\t});\n}\n\n/** Validates a Custom onboarding endpoint without issuing a network request. */\nexport function validateCustomBaseUrl(value: string): string {\n\tconst baseUrl = value.trim();\n\tif (!baseUrl) throw new Error(\"Base URL cannot be empty.\");\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(baseUrl);\n\t} catch {\n\t\tthrow new Error(\"Base URL must be an absolute http or https URL.\");\n\t}\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") throw new Error(\"Base URL must use http or https.\");\n\tif (url.username || url.password || url.search || url.hash) {\n\t\tthrow new Error(\"Base URL must not contain credentials, query, or hash.\");\n\t}\n\tif (baseUrl.endsWith(\"/\")) throw new Error(\"Base URL must not end with /.\");\n\treturn baseUrl;\n}\n\nfunction requireCustomValue(value: string, field: \"apiKey\" | \"modelId\"): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed) throw new Error(`${field === \"apiKey\" ? \"API key\" : \"Model ID\"} cannot be empty.`);\n\treturn trimmed;\n}\n\n/** Builds the single user-managed Custom provider from validated onboarding input. */\nexport function createCustomProviderConfiguration(input: CustomProviderInput): StartupProviderConfiguration {\n\tconst baseUrl = validateCustomBaseUrl(input.baseUrl);\n\tconst modelId = requireCustomValue(input.modelId, \"modelId\");\n\tconst apiKey = requireCustomValue(input.apiKey, \"apiKey\");\n\tconst known = findBuiltinModel(input.api, modelId);\n\tconst model: Model = known\n\t\t? {\n\t\t\t\t...known,\n\t\t\t\tid: modelId,\n\t\t\t\tprovider: \"custom\",\n\t\t\t\tapi: input.api,\n\t\t\t\tbaseUrl,\n\t\t\t}\n\t\t: {\n\t\t\t\tid: modelId,\n\t\t\t\tname: modelId,\n\t\t\t\tprovider: \"custom\",\n\t\t\t\tapi: input.api,\n\t\t\t\tbaseUrl,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\treasoning: false,\n\t\t\t\tcontextWindow: 128_000,\n\t\t\t\tmaxOutputTokens: 16_384,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n\t\t\t};\n\treturn { id: \"custom\", name: \"Custom\", api: input.api, apiKey, baseUrl, models: [model] };\n}\n\nfunction serializeModel(model: Model): Record<string, unknown> {\n\treturn {\n\t\tid: model.id,\n\t\tname: model.name,\n\t\tinput: model.input,\n\t\treasoning: model.reasoning,\n\t\t...(model.reasoningEfforts ? { reasoningEfforts: model.reasoningEfforts } : {}),\n\t\t...(model.defaultReasoningEffort ? { defaultReasoningEffort: model.defaultReasoningEffort } : {}),\n\t\t...(model.chatCompletionsCompat ? { chatCompletionsCompat: model.chatCompletionsCompat } : {}),\n\t\t...(model.cacheRetention ? { cacheRetention: model.cacheRetention } : {}),\n\t\t...(model.sessionAffinity ? { sessionAffinity: model.sessionAffinity } : {}),\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxOutputTokens,\n\t\tcost: Object.fromEntries(Object.entries(model.cost).map(([key, value]) => [key, value * 1_000_000])),\n\t};\n}\n\nfunction parseSettings(value: unknown, settingsPath: string): SettingsFile {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${settingsPath}: root value must be an object`);\n\t}\n\tconst record = value as Record<string, unknown>;\n\tconst providersValue = record.providers;\n\tif (typeof providersValue !== \"object\" || providersValue === null || Array.isArray(providersValue)) {\n\t\tthrow new Error(`${settingsPath}: providers must be an object`);\n\t}\n\tconst providers: Record<string, SettingsFile[\"providers\"][string]> = {};\n\tfor (const [id, entry] of Object.entries(providersValue as Record<string, unknown>)) {\n\t\tif (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n\t\t\tthrow new Error(`${settingsPath}: providers.${id} must be an object`);\n\t\t}\n\t\tconst provider = entry as Record<string, unknown>;\n\t\tproviders[id] = {\n\t\t\tname: optionalString(provider.name, `providers.${id}.name`, settingsPath),\n\t\t\tbaseUrl: optionalString(provider.baseUrl, `providers.${id}.baseUrl`, settingsPath),\n\t\t\tapiKey: optionalString(provider.apiKey, `providers.${id}.apiKey`, settingsPath),\n\t\t\tapi: optionalString(provider.api, `providers.${id}.api`, settingsPath),\n\t\t\tmodels: provider.models,\n\t\t};\n\t}\n\tconst defaultProvider =\n\t\trecord.defaultProvider === undefined\n\t\t\t? undefined\n\t\t\t: requiredString(record.defaultProvider, \"defaultProvider\", settingsPath);\n\tconst defaultModel =\n\t\trecord.defaultModel === undefined ? undefined : requiredString(record.defaultModel, \"defaultModel\", settingsPath);\n\tconst thinkingLevels = parseThinkingLevels(record.thinkingLevels, settingsPath);\n\tif (record.locale !== undefined && !isLocale(record.locale)) {\n\t\tthrow new Error(`${settingsPath}: locale must be \"en\" or \"zh-CN\"`);\n\t}\n\treturn {\n\t\tproviders,\n\t\t...(defaultProvider === undefined ? {} : { defaultProvider }),\n\t\t...(defaultModel === undefined ? {} : { defaultModel }),\n\t\t...(thinkingLevels === undefined ? {} : { thinkingLevels }),\n\t\t...(record.locale === undefined ? {} : { locale: record.locale }),\n\t};\n}\n\nfunction parseThinkingLevels(value: unknown, settingsPath: string): ThinkingLevelPreferences | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${settingsPath}: thinkingLevels must be an object`);\n\t}\n\tconst preferences: Record<string, Record<string, ThinkingLevel>> = {};\n\tfor (const [providerId, models] of Object.entries(value as Record<string, unknown>)) {\n\t\trequiredString(providerId, \"thinkingLevels provider ID\", settingsPath);\n\t\tif (typeof models !== \"object\" || models === null || Array.isArray(models)) {\n\t\t\tthrow new Error(`${settingsPath}: thinkingLevels.${providerId} must be an object`);\n\t\t}\n\t\tconst modelPreferences: Record<string, ThinkingLevel> = {};\n\t\tfor (const [modelId, level] of Object.entries(models as Record<string, unknown>)) {\n\t\t\trequiredString(modelId, `thinkingLevels.${providerId} model ID`, settingsPath);\n\t\t\tif (level !== \"low\" && level !== \"medium\" && level !== \"high\" && level !== \"max\") {\n\t\t\t\tthrow new Error(`${settingsPath}: thinkingLevels.${providerId}.${modelId} must be a valid thinking level`);\n\t\t\t}\n\t\t\tmodelPreferences[modelId] = level;\n\t\t}\n\t\tpreferences[providerId] = modelPreferences;\n\t}\n\treturn preferences;\n}\n\nasync function readSettingsFile(path: string, displayPath: string): Promise<SettingsFile | undefined> {\n\ttry {\n\t\tconst source = await readFile(path, \"utf8\");\n\t\tif (source.trim().length === 0) return undefined;\n\t\treturn parseSettings(JSON.parse(source), displayPath);\n\t} catch (cause) {\n\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\") return undefined;\n\t\tif (cause instanceof SyntaxError) throw new Error(`${displayPath}: invalid JSON`, { cause });\n\t\tthrow cause;\n\t}\n}\n\nfunction mergeSettings(\n\tglobalSettings: SettingsFile | undefined,\n\tprojectSettings: SettingsFile | undefined,\n): SettingsFile {\n\tconst globalProviders = globalSettings?.providers ?? {};\n\tconst projectProviders = projectSettings?.providers ?? {};\n\tconst providers = { ...globalProviders };\n\tfor (const [id, projectProvider] of Object.entries(projectProviders)) {\n\t\tproviders[id] = {\n\t\t\t...globalProviders[id],\n\t\t\t...(projectProvider.name === undefined ? {} : { name: projectProvider.name }),\n\t\t\t...(projectProvider.baseUrl === undefined ? {} : { baseUrl: projectProvider.baseUrl }),\n\t\t\t...(projectProvider.apiKey === undefined ? {} : { apiKey: projectProvider.apiKey }),\n\t\t\t...(projectProvider.api === undefined ? {} : { api: projectProvider.api }),\n\t\t\t...(projectProvider.models === undefined ? {} : { models: projectProvider.models }),\n\t\t};\n\t}\n\tconst defaultProvider = projectSettings?.defaultProvider ?? globalSettings?.defaultProvider;\n\tconst defaultModel =\n\t\tprojectSettings?.defaultModel ??\n\t\t(projectSettings?.defaultProvider === undefined ? globalSettings?.defaultModel : undefined);\n\tconst locale = globalSettings?.locale;\n\treturn {\n\t\tproviders,\n\t\t...(defaultProvider === undefined ? {} : { defaultProvider }),\n\t\t...(defaultModel === undefined ? {} : { defaultModel }),\n\t\t...(globalSettings?.thinkingLevels === undefined ? {} : { thinkingLevels: globalSettings.thinkingLevels }),\n\t\t...(locale === undefined ? {} : { locale }),\n\t};\n}\n\n/** Persists a user-level terminal language preference without changing project settings. */\nexport async function saveGlobalLocale(agentDir: string, locale: Locale): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings: SettingsFile = {\n\t\tproviders: existingSettings?.providers ?? {},\n\t\t...(existingSettings?.defaultProvider === undefined ? {} : { defaultProvider: existingSettings.defaultProvider }),\n\t\t...(existingSettings?.defaultModel === undefined ? {} : { defaultModel: existingSettings.defaultModel }),\n\t\t...(existingSettings?.thinkingLevels === undefined ? {} : { thinkingLevels: existingSettings.thinkingLevels }),\n\t\tlocale,\n\t};\n\tawait mkdir(agentDir, { recursive: true, mode: 0o700 });\n\tawait writeFile(settingsFilePath, `${JSON.stringify(settings, null, \"\\t\")}\\n`, { encoding: \"utf8\", mode: 0o600 });\n}\n\nexport async function saveGlobalProviderApiKey(\n\tagentDir: string,\n\tproviderId: string,\n\tapi: Exclude<ModelApi, \"faux\">,\n\tapiKey: string,\n\tmodelId?: string,\n): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst trimmedApiKey = apiKey.trim();\n\tif (!trimmedApiKey) throw new Error(`${settingsFilePath}: apiKey must be a non-empty string`);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings = mergeSettings(existingSettings, {\n\t\tproviders: { [providerId]: { api, apiKey: trimmedApiKey } },\n\t\tdefaultProvider: providerId,\n\t\t...(modelId === undefined ? {} : { defaultModel: modelId }),\n\t});\n\tawait mkdir(agentDir, { recursive: true, mode: 0o700 });\n\tawait writeFile(settingsFilePath, `${JSON.stringify(settings, null, \"\\t\")}\\n`, { encoding: \"utf8\", mode: 0o600 });\n}\n\n/** Persists the interactive model selection without changing credentials or Provider configuration. */\nexport async function saveGlobalModelSelection(agentDir: string, providerId: string, modelId: string): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst normalizedProviderId = requiredString(providerId, \"providerId\", settingsFilePath);\n\tconst normalizedModelId = requiredString(modelId, \"modelId\", settingsFilePath);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings = mergeSettings(existingSettings, {\n\t\tproviders: {},\n\t\tdefaultProvider: normalizedProviderId,\n\t\tdefaultModel: normalizedModelId,\n\t});\n\tawait mkdir(agentDir, { recursive: true, mode: 0o700 });\n\tawait writeFile(settingsFilePath, `${JSON.stringify(settings, null, \"\\t\")}\\n`, { encoding: \"utf8\", mode: 0o600 });\n}\n\n/** Persists a per-provider/model thinking preference in user settings. */\nexport async function saveGlobalThinkingLevel(\n\tagentDir: string,\n\tproviderId: string,\n\tmodelId: string,\n\tlevel: ThinkingLevel,\n): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst normalizedProviderId = requiredString(providerId, \"providerId\", settingsFilePath);\n\tconst normalizedModelId = requiredString(modelId, \"modelId\", settingsFilePath);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings: SettingsFile = {\n\t\t...mergeSettings(existingSettings, undefined),\n\t\tthinkingLevels: {\n\t\t\t...(existingSettings?.thinkingLevels ?? {}),\n\t\t\t[normalizedProviderId]: {\n\t\t\t\t...(existingSettings?.thinkingLevels?.[normalizedProviderId] ?? {}),\n\t\t\t\t[normalizedModelId]: level,\n\t\t\t},\n\t\t},\n\t};\n\tawait mkdir(agentDir, { recursive: true, mode: 0o700 });\n\tawait writeFile(settingsFilePath, `${JSON.stringify(settings, null, \"\\t\")}\\n`, { encoding: \"utf8\", mode: 0o600 });\n}\n\n/**\n * Replaces the user-managed `custom` provider while retaining other global\n * providers and preferences. The key is intentionally stored only here, never\n * in project settings or process environment.\n */\nexport async function saveGlobalCustomProvider(\n\tagentDir: string,\n\tinput: CustomProviderInput,\n): Promise<StartupProviderConfiguration> {\n\tconst configuration = createCustomProviderConfiguration(input);\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings = mergeSettings(existingSettings, {\n\t\tproviders: {\n\t\t\tcustom: {\n\t\t\t\tname: configuration.name,\n\t\t\t\tapi: configuration.api,\n\t\t\t\tbaseUrl: configuration.baseUrl,\n\t\t\t\tapiKey: configuration.apiKey,\n\t\t\t\tmodels: configuration.models?.map(serializeModel),\n\t\t\t},\n\t\t},\n\t\tdefaultProvider: \"custom\",\n\t\tdefaultModel: configuration.models?.[0]?.id,\n\t});\n\tawait mkdir(agentDir, { recursive: true, mode: 0o700 });\n\tawait writeFile(settingsFilePath, `${JSON.stringify(settings, null, \"\\t\")}\\n`, { encoding: \"utf8\", mode: 0o600 });\n\treturn configuration;\n}\n\n/**\n * Removes one persisted credential and clears it as the default when applicable.\n * Environment variables and other Provider configuration remain untouched.\n */\nexport async function removeGlobalProviderApiKey(agentDir: string, providerId: string): Promise<boolean> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst provider = existingSettings?.providers[providerId];\n\tif (!provider || provider.apiKey === undefined) return false;\n\n\tconst { apiKey: _apiKey, ...providerWithoutApiKey } = provider;\n\tconst clearsDefault = existingSettings.defaultProvider === providerId;\n\tconst settings: SettingsFile = {\n\t\tproviders: {\n\t\t\t...existingSettings.providers,\n\t\t\t[providerId]: providerWithoutApiKey,\n\t\t},\n\t\t...(clearsDefault || existingSettings.defaultProvider === undefined\n\t\t\t? {}\n\t\t\t: { defaultProvider: existingSettings.defaultProvider }),\n\t\t...(clearsDefault || existingSettings.defaultModel === undefined\n\t\t\t? {}\n\t\t\t: { defaultModel: existingSettings.defaultModel }),\n\t\t...(existingSettings.thinkingLevels === undefined ? {} : { thinkingLevels: existingSettings.thinkingLevels }),\n\t\t...(existingSettings.locale === undefined ? {} : { locale: existingSettings.locale }),\n\t};\n\tawait writeFile(settingsFilePath, `${JSON.stringify(settings, null, \"\\t\")}\\n`, { encoding: \"utf8\", mode: 0o600 });\n\treturn true;\n}\n\nfunction resolveConfigValue(value: string | undefined, env: Environment): string | undefined {\n\tif (value === undefined) return undefined;\n\tconst trimmed = value.trim();\n\tconst match = /^\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}$|^\\$([A-Za-z_][A-Za-z0-9_]*)$/.exec(trimmed);\n\tif (match) {\n\t\tconst name = match[1] ?? match[2];\n\t\tconst resolved = env[name];\n\t\tif (!resolved?.trim()) throw new Error(`Configured apiKey environment variable \"${name}\" is not set.`);\n\t\treturn resolved;\n\t}\n\tif (trimmed.startsWith(\"!\")) {\n\t\tthrow new Error(\"Command-based apiKey values are not supported by di-code; use $ENV_VAR instead.\");\n\t}\n\treturn value;\n}\n\nfunction createFauxRuntime(): StartupRuntime {\n\tconst faux = createFauxProvider({ responses: FAUX_RESPONSES });\n\treturn { provider: faux.provider, model: faux.model };\n}\n\nfunction selectProviderModel(provider: Provider, providerId: string, env: Environment): Model {\n\tconst modelId =\n\t\tenv.DI_CODE_MODEL?.trim() ||\n\t\t(providerId === \"anthropic\"\n\t\t\t? provider.models.find((candidate) => candidate.id === \"claude-sonnet-4-5\")?.id\n\t\t\t: providerId === \"openai\"\n\t\t\t\t? provider.models.find((candidate) => candidate.id === \"gpt-4o\")?.id\n\t\t\t\t: providerId === \"zhipu\"\n\t\t\t\t\t? provider.models.find((candidate) => candidate.id === \"glm-5.3\")?.id\n\t\t\t\t\t: providerId === \"kimi\"\n\t\t\t\t\t\t? provider.models.find((candidate) => candidate.id === \"k3\")?.id\n\t\t\t\t\t\t: undefined) ||\n\t\tprovider.models[0]?.id;\n\tif (!modelId) throw new Error(\"DI_CODE_MODEL is required when the selected provider has no models\");\n\tconst model = provider.models.find((candidate) => candidate.id === modelId);\n\tif (!model) {\n\t\tconst availableModels = provider.models.map((candidate) => candidate.id).join(\", \");\n\t\tthrow new Error(`Unknown model \"${modelId}\" for provider \"${providerId}\". Available models: ${availableModels}.`);\n\t}\n\treturn model;\n}\n\nfunction createBuiltInRuntime(env: Environment, providerId: string): StartupRuntime | undefined {\n\tif (providerId === \"anthropic\") {\n\t\tconst provider = createAnthropicProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"openai\") {\n\t\tconst provider = createOpenAIProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"deepseek\") {\n\t\tconst provider = createDeepSeekProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"zhipu\") {\n\t\tconst provider = createZhipuProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"kimi\") {\n\t\tconst provider = createKimiProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\treturn undefined;\n}\n\nfunction createConfiguredRuntime(env: Environment, configuration: StartupProviderConfiguration): StartupRuntime {\n\tif (\n\t\tconfiguration.api !== \"openai-responses\" &&\n\t\tconfiguration.api !== \"openai-chat-completions\" &&\n\t\tconfiguration.api !== \"anthropic-messages\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Unsupported API \"${configuration.api ?? \"missing\"}\" for provider \"${configuration.id}\". Expected openai-responses, openai-chat-completions, or anthropic-messages.`,\n\t\t);\n\t}\n\tif (\n\t\tconfiguration.id !== \"openai\" &&\n\t\tconfiguration.id !== \"deepseek\" &&\n\t\tconfiguration.id !== \"zhipu\" &&\n\t\tconfiguration.id !== \"kimi\" &&\n\t\tconfiguration.id !== \"anthropic\" &&\n\t\t!configuration.models\n\t) {\n\t\tthrow new Error(`${SETTINGS_PATH}: providers.${configuration.id}.models is required for a custom provider`);\n\t}\n\tconst provider =\n\t\tconfiguration.api === \"openai-chat-completions\"\n\t\t\t? createOpenAIChatCompletionsProvider({\n\t\t\t\t\tenv:\n\t\t\t\t\t\tconfiguration.id === \"zhipu\" || configuration.id === \"deepseek\" || configuration.id === \"kimi\"\n\t\t\t\t\t\t\t? env\n\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\tObject.entries(env).filter(([name]) => name !== \"OPENAI_API_KEY\" && name !== \"OPENAI_BASE_URL\"),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\tproviderId: configuration.id,\n\t\t\t\t\tname: configuration.name ?? configuration.id,\n\t\t\t\t\t...(configuration.id === \"zhipu\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tapiKeyEnvironmentVariable: \"ZAI_API_KEY\",\n\t\t\t\t\t\t\t\tbaseUrlEnvironmentVariable: \"ZHIPU_BASE_URL\",\n\t\t\t\t\t\t\t\tdefaultBaseUrl: \"https://open.bigmodel.cn/api/coding/paas/v4\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: configuration.id === \"deepseek\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tapiKeyEnvironmentVariable: \"DEEPSEEK_API_KEY\",\n\t\t\t\t\t\t\t\t\tbaseUrlEnvironmentVariable: \"DEEPSEEK_BASE_URL\",\n\t\t\t\t\t\t\t\t\tdefaultBaseUrl: \"https://api.deepseek.com\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: configuration.id === \"kimi\"\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tapiKeyEnvironmentVariable: \"KIMI_API_KEY\",\n\t\t\t\t\t\t\t\t\t\tbaseUrlEnvironmentVariable: \"KIMI_BASE_URL\",\n\t\t\t\t\t\t\t\t\t\tdefaultBaseUrl: \"https://api.kimi.com/coding/v1\",\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t})\n\t\t\t: configuration.api === \"anthropic-messages\"\n\t\t\t\t? createAnthropicProvider({\n\t\t\t\t\t\tenv:\n\t\t\t\t\t\t\tconfiguration.id === \"anthropic\"\n\t\t\t\t\t\t\t\t? env\n\t\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\t\tObject.entries(env).filter(\n\t\t\t\t\t\t\t\t\t\t\t([name]) => name !== \"ANTHROPIC_API_KEY\" && name !== \"ANTHROPIC_BASE_URL\",\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\tproviderId: configuration.id,\n\t\t\t\t\t\tname: configuration.name,\n\t\t\t\t\t})\n\t\t\t\t: configuration.id === \"deepseek\"\n\t\t\t\t\t? createDeepSeekProvider({\n\t\t\t\t\t\t\tenv,\n\t\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\t})\n\t\t\t\t\t: configuration.id === \"zhipu\"\n\t\t\t\t\t\t? createZhipuProvider({\n\t\t\t\t\t\t\t\tenv,\n\t\t\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: createOpenAIProvider({\n\t\t\t\t\t\t\t\tenv:\n\t\t\t\t\t\t\t\t\tconfiguration.id === \"openai\"\n\t\t\t\t\t\t\t\t\t\t? env\n\t\t\t\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\t\t\t\tObject.entries(env).filter(([name]) => name !== \"OPENAI_API_KEY\" && name !== \"OPENAI_BASE_URL\"),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\t\t\tproviderId: configuration.id,\n\t\t\t\t\t\t\t\tname: configuration.name,\n\t\t\t\t\t\t\t});\n\tconst model = selectProviderModel(provider, configuration.id, env);\n\treturn { provider, model };\n}\n\nexport function resolveStartupRuntime(\n\tenv: Environment,\n\tproviders: readonly StartupProviderConfiguration[],\n\tdefaults: StartupDefaults = {},\n): StartupRuntime {\n\tconst selectedProviderId =\n\t\tenv.DI_CODE_PROVIDER?.trim() || defaults.providerId || (providers.length === 1 ? providers[0]?.id : undefined);\n\tif (selectedProviderId === \"faux\") return createFauxRuntime();\n\tif (!selectedProviderId) {\n\t\tif (providers.length === 0) {\n\t\t\tthrow new Error(\"Provider is not configured. Set DI_CODE_PROVIDER or start interactive mode in a TTY.\");\n\t\t}\n\t\tthrow new Error(\"DI_CODE_PROVIDER is required when more than one provider is configured.\");\n\t}\n\tconst runtimeEnvironment =\n\t\tenv.DI_CODE_MODEL?.trim() || defaults.providerId !== selectedProviderId || !defaults.modelId\n\t\t\t? env\n\t\t\t: { ...env, DI_CODE_MODEL: defaults.modelId };\n\tconst selectedProvider = providers.find((provider) => provider.id === selectedProviderId);\n\tif (selectedProvider) return createConfiguredRuntime(runtimeEnvironment, selectedProvider);\n\tconst builtInRuntime = createBuiltInRuntime(runtimeEnvironment, selectedProviderId);\n\tif (builtInRuntime) return builtInRuntime;\n\tthrow new Error(\n\t\t`Unknown configured provider \"${selectedProviderId}\". Available providers: ${providers.map((provider) => provider.id).join(\", \")}.`,\n\t);\n}\n\n/** Returns a stored preference only when the selected model still supports it. */\nexport function resolveThinkingLevelPreference(\n\tconfiguration: StartupConfiguration | undefined,\n\truntime: StartupRuntime,\n): ThinkingLevel | undefined {\n\tconst preference = configuration?.thinkingLevels?.[runtime.provider.id]?.[runtime.model.id];\n\treturn preference !== undefined && runtime.model.reasoningEfforts?.includes(preference) ? preference : undefined;\n}\n\nexport async function loadStartupConfiguration(\n\tcwd: string,\n\tenvironment: Environment = process.env,\n\tagentDir = join(homedir(), \".di-code\"),\n): Promise<StartupConfiguration> {\n\tconst [globalSettings, projectSettings] = await Promise.all([\n\t\treadSettingsFile(join(agentDir, SETTINGS_FILE_NAME), join(agentDir, SETTINGS_FILE_NAME)),\n\t\treadSettingsFile(join(cwd, SETTINGS_PATH), SETTINGS_PATH),\n\t]);\n\tconst settings = mergeSettings(globalSettings, projectSettings);\n\tconst requestedLocale = environment.DI_CODE_LOCALE?.trim();\n\tif (requestedLocale !== undefined && requestedLocale !== \"\" && !isLocale(requestedLocale)) {\n\t\tthrow new Error('DI_CODE_LOCALE must be \"en\" or \"zh-CN\".');\n\t}\n\n\tconst providers = Object.entries(settings.providers).map(([id, provider]) => ({\n\t\tid: requiredString(id, `providers.${id}`),\n\t\tname: provider.name,\n\t\tapi: provider.api,\n\t\tapiKey: provider.apiKey,\n\t\tbaseUrl: provider.baseUrl,\n\t\tmodels: parseModels(provider.models, `providers.${id}.models`, id, provider.api, provider.baseUrl, SETTINGS_PATH),\n\t}));\n\tconst defaults =\n\t\tsettings.defaultProvider === undefined && settings.defaultModel === undefined\n\t\t\t? undefined\n\t\t\t: { providerId: settings.defaultProvider, modelId: settings.defaultModel };\n\tconst locale = requestedLocale && isLocale(requestedLocale) ? requestedLocale : settings.locale;\n\treturn {\n\t\tenvironment,\n\t\tproviders,\n\t\t...(settings.thinkingLevels === undefined ? {} : { thinkingLevels: settings.thinkingLevels }),\n\t\t...(locale === undefined ? {} : { locale }),\n\t\t...(defaults === undefined ? {} : { defaults }),\n\t};\n}\n\nexport async function loadStartupEnvironment(\n\tcwd: string,\n\tenvironment: Environment = process.env,\n): Promise<Environment> {\n\treturn (await loadStartupConfiguration(cwd, environment)).environment;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"startup.js","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { mkdir, readFile, rename, unlink, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n\tcreateAnthropicProvider,\n\tcreateDeepSeekProvider,\n\tcreateFauxProvider,\n\tcreateKimiProvider,\n\tcreateOpenAIChatCompletionsProvider,\n\tcreateOpenAIProvider,\n\tcreateZhipuProvider,\n\ttype FauxResponse,\n\tfindBuiltinModel,\n\ttype Model,\n\ttype ModelApi,\n\ttype Provider,\n\ttype ThinkingLevel,\n} from \"@di-code/ai\";\nimport { isLocale, type Locale } from \"./i18n.ts\";\n\nexport interface StartupRuntime {\n\treadonly provider: Provider;\n\treadonly model: Model;\n}\n\nexport interface StartupProviderConfiguration {\n\treadonly id: string;\n\treadonly name?: string;\n\treadonly api?: string;\n\treadonly apiKey?: string;\n\treadonly baseUrl?: string;\n\treadonly models?: readonly Model[];\n}\n\nexport interface StartupConfiguration {\n\treadonly environment: Environment;\n\treadonly providers: readonly StartupProviderConfiguration[];\n\treadonly defaults?: StartupDefaults;\n\t/** Per-provider/model thinking-level preferences after workspace overrides. */\n\treadonly thinkingLevels?: ThinkingLevelPreferences;\n\treadonly locale?: Locale;\n\treadonly permissionMode?: PermissionMode;\n}\n\nexport type PermissionMode = \"ask\" | \"allow\" | \"deny\";\n\nexport interface StartupDefaults {\n\treadonly providerId?: string;\n\treadonly modelId?: string;\n}\n\nexport type ThinkingLevelPreferences = Readonly<Record<string, Readonly<Record<string, ThinkingLevel>>>>;\n\nexport interface CustomProviderInput {\n\treadonly api: Exclude<ModelApi, \"faux\">;\n\treadonly baseUrl: string;\n\treadonly apiKey: string;\n\treadonly modelId: string;\n}\n\nconst FAUX_RESPONSES: readonly FauxResponse[] = [\n\t{\n\t\ttype: \"success\",\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: \"你好,我是di-code,一个面向终端的 TypeScript AI Coding Agent,支持多 Provider 流式对话、工具调用、JSONL 会话持久化、交互式 TUI、插件扩展与 JSONL RPC 集成。\",\n\t\t\t},\n\t\t],\n\t},\n\t{ type: \"success\", content: [{ type: \"text\", text: \"当前回复为faux数据\" }] },\n];\n\nconst SETTINGS_FILE_NAME = \"settings.json\";\nconst SETTINGS_PATH = join(\".di-code\", SETTINGS_FILE_NAME);\n\ntype Environment = Readonly<Record<string, string | undefined>>;\n\ninterface SettingsFile {\n\treadonly defaultProvider?: string;\n\treadonly defaultModel?: string;\n\treadonly thinkingLevels?: ThinkingLevelPreferences;\n\treadonly locale?: Locale;\n\treadonly permissionMode?: PermissionMode;\n\treadonly providers: Record<\n\t\tstring,\n\t\t{\n\t\t\treadonly name?: string;\n\t\t\treadonly baseUrl?: string;\n\t\t\treadonly apiKey?: string;\n\t\t\treadonly api?: string;\n\t\t\treadonly models?: unknown;\n\t\t}\n\t>;\n}\n\nexport function resolveStartupArgs(args: readonly string[]): readonly string[] {\n\treturn args.length === 0 ? [\"--interactive\"] : args;\n}\n\nfunction optionalString(value: unknown, path: string, settingsPath: string): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"string\") throw new Error(`${settingsPath}: ${path} must be a string`);\n\treturn value;\n}\n\nfunction requiredString(value: unknown, path: string, settingsPath = SETTINGS_PATH): string {\n\tconst result = optionalString(value, path, settingsPath);\n\tif (!result?.trim()) throw new Error(`${settingsPath}: ${path} must be a non-empty string`);\n\treturn result.trim();\n}\n\nfunction positiveInteger(value: unknown, path: string, fallback: number, settingsPath: string): number {\n\tconst result = value ?? fallback;\n\tif (!Number.isInteger(result) || (result as number) <= 0) {\n\t\tthrow new Error(`${settingsPath}: ${path} must be a positive integer`);\n\t}\n\treturn result as number;\n}\n\nfunction nonNegativeNumber(value: unknown, path: string, fallback: number, settingsPath: string): number {\n\tconst result = value ?? fallback;\n\tif (typeof result !== \"number\" || !Number.isFinite(result) || result < 0) {\n\t\tthrow new Error(`${settingsPath}: ${path} must be a non-negative finite number`);\n\t}\n\treturn result;\n}\n\nfunction parseChatCompletionsCompat(\n\tvalue: unknown,\n\tpath: string,\n\tsettingsPath: string,\n): Model[\"chatCompletionsCompat\"] {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${settingsPath}: ${path} must be an object`);\n\t}\n\tconst compat = value as Record<string, unknown>;\n\tconst optionalBoolean = (field: string): boolean | undefined => {\n\t\tconst candidate = compat[field];\n\t\tif (candidate === undefined) return undefined;\n\t\tif (typeof candidate !== \"boolean\") throw new Error(`${settingsPath}: ${path}.${field} must be a boolean`);\n\t\treturn candidate;\n\t};\n\tconst maxTokensField = compat.maxTokensField;\n\tif (maxTokensField !== undefined && maxTokensField !== \"max_tokens\" && maxTokensField !== \"max_completion_tokens\") {\n\t\tthrow new Error(`${settingsPath}: ${path}.maxTokensField is invalid`);\n\t}\n\tconst thinkingFormat = compat.thinkingFormat;\n\tif (\n\t\tthinkingFormat !== undefined &&\n\t\tthinkingFormat !== \"zai\" &&\n\t\tthinkingFormat !== \"deepseek\" &&\n\t\tthinkingFormat !== \"kimi\"\n\t) {\n\t\tthrow new Error(`${settingsPath}: ${path}.thinkingFormat is invalid`);\n\t}\n\tconst supportsUsageInStreaming = optionalBoolean(\"supportsUsageInStreaming\");\n\tconst supportsReasoningEffort = optionalBoolean(\"supportsReasoningEffort\");\n\tconst zaiToolStream = optionalBoolean(\"zaiToolStream\");\n\treturn {\n\t\t...(maxTokensField === undefined ? {} : { maxTokensField }),\n\t\t...(thinkingFormat === undefined ? {} : { thinkingFormat }),\n\t\t...(supportsUsageInStreaming === undefined ? {} : { supportsUsageInStreaming }),\n\t\t...(supportsReasoningEffort === undefined ? {} : { supportsReasoningEffort }),\n\t\t...(zaiToolStream === undefined ? {} : { zaiToolStream }),\n\t};\n}\n\nfunction parseModels(\n\tvalue: unknown,\n\tpath: string,\n\tproviderId: string,\n\tproviderApi: string | undefined,\n\tproviderBaseUrl: string | undefined,\n\tsettingsPath: string,\n): readonly Model[] | undefined {\n\tif (value === undefined) return undefined;\n\tif (!Array.isArray(value)) throw new Error(`${settingsPath}: ${path} must be an array`);\n\n\treturn value.map((entry, index) => {\n\t\tconst modelPath = `${path}[${index}]`;\n\t\tif (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath} must be an object`);\n\t\t}\n\t\tconst model = entry as Record<string, unknown>;\n\t\tconst input = model.input ?? [\"text\"];\n\t\tif (!Array.isArray(input) || input.length === 0 || input.some((item) => item !== \"text\" && item !== \"image\")) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.input must contain text and/or image`);\n\t\t}\n\t\tconst cost = model.cost ?? {};\n\t\tif (typeof cost !== \"object\" || cost === null || Array.isArray(cost)) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.cost must be an object`);\n\t\t}\n\t\tconst prices = cost as Record<string, unknown>;\n\t\tif (model.reasoning !== undefined && typeof model.reasoning !== \"boolean\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.reasoning must be a boolean`);\n\t\t}\n\t\tconst configuredReasoningEfforts = model.reasoningEfforts;\n\t\tif (configuredReasoningEfforts !== undefined) {\n\t\t\tif (!Array.isArray(configuredReasoningEfforts) || configuredReasoningEfforts.length === 0) {\n\t\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.reasoningEfforts must be a non-empty array`);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tmodel.reasoning !== true ||\n\t\t\t\tconfiguredReasoningEfforts.some(\n\t\t\t\t\t(effort) => effort !== \"low\" && effort !== \"medium\" && effort !== \"high\" && effort !== \"max\",\n\t\t\t\t) ||\n\t\t\t\tnew Set(configuredReasoningEfforts).size !== configuredReasoningEfforts.length\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`${settingsPath}: ${modelPath}.reasoningEfforts requires reasoning=true and unique low, medium, high, or max values`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (model.cacheRetention !== undefined && model.cacheRetention !== \"long\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.cacheRetention must be \"long\" when provided`);\n\t\t}\n\t\tif (model.sessionAffinity !== undefined && model.sessionAffinity !== \"codex\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.sessionAffinity must be \"codex\" when provided`);\n\t\t}\n\t\tconst api = optionalString(model.api, `${modelPath}.api`, settingsPath) ?? providerApi;\n\t\tif (!api) throw new Error(`${settingsPath}: ${modelPath}.api is required`);\n\t\tif (![\"faux\", \"openai-responses\", \"openai-chat-completions\", \"anthropic-messages\"].includes(api)) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.api is unsupported`);\n\t\t}\n\t\tconst typedApi = api as ModelApi;\n\t\tconst reasoningEfforts: Model[\"reasoningEfforts\"] =\n\t\t\tconfiguredReasoningEfforts === undefined && model.reasoning === true && api === \"openai-responses\"\n\t\t\t\t? [\"low\", \"medium\", \"high\"]\n\t\t\t\t: configuredReasoningEfforts === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: ([...configuredReasoningEfforts] as Model[\"reasoningEfforts\"]);\n\t\tconst defaultReasoningEffort = model.defaultReasoningEffort;\n\t\tif (\n\t\t\tdefaultReasoningEffort !== undefined &&\n\t\t\t(typeof defaultReasoningEffort !== \"string\" ||\n\t\t\t\t!reasoningEfforts?.includes(defaultReasoningEffort as Exclude<Model[\"defaultReasoningEffort\"], undefined>))\n\t\t) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.defaultReasoningEffort must be included in reasoningEfforts`);\n\t\t}\n\t\tconst baseUrl = optionalString(model.baseUrl, `${modelPath}.baseUrl`, settingsPath) ?? providerBaseUrl;\n\t\tconst id = requiredString(model.id, `${modelPath}.id`, settingsPath);\n\t\tconst chatCompletionsCompat = parseChatCompletionsCompat(\n\t\t\tmodel.chatCompletionsCompat,\n\t\t\t`${modelPath}.chatCompletionsCompat`,\n\t\t\tsettingsPath,\n\t\t);\n\t\tif (chatCompletionsCompat !== undefined && typedApi !== \"openai-chat-completions\") {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.chatCompletionsCompat requires api \"openai-chat-completions\"`);\n\t\t}\n\t\tconst contextWindow = positiveInteger(model.contextWindow, `${modelPath}.contextWindow`, 128_000, settingsPath);\n\t\tconst maxOutputTokens = positiveInteger(\n\t\t\tmodel.maxTokens ?? model.maxOutputTokens,\n\t\t\t`${modelPath}.maxTokens`,\n\t\t\t16_384,\n\t\t\tsettingsPath,\n\t\t);\n\t\tif (maxOutputTokens >= contextWindow) {\n\t\t\tthrow new Error(`${settingsPath}: ${modelPath}.maxTokens must be smaller than contextWindow`);\n\t\t}\n\t\treturn {\n\t\t\tid,\n\t\t\tname: requiredString(model.name ?? id, `${modelPath}.name`, settingsPath),\n\t\t\tprovider: providerId,\n\t\t\tapi: typedApi,\n\t\t\t...(baseUrl === undefined ? {} : { baseUrl }),\n\t\t\tinput: [...input],\n\t\t\treasoning: model.reasoning ?? false,\n\t\t\t...(reasoningEfforts ? { reasoningEfforts } : {}),\n\t\t\t...(defaultReasoningEffort\n\t\t\t\t? { defaultReasoningEffort: defaultReasoningEffort as Exclude<Model[\"defaultReasoningEffort\"], undefined> }\n\t\t\t\t: {}),\n\t\t\t...(chatCompletionsCompat ? { chatCompletionsCompat } : {}),\n\t\t\t...(model.cacheRetention === \"long\" ? { cacheRetention: \"long\" as const } : {}),\n\t\t\t...(model.sessionAffinity === \"codex\" ? { sessionAffinity: \"codex\" as const } : {}),\n\t\t\tcontextWindow,\n\t\t\tmaxOutputTokens,\n\t\t\tcost: {\n\t\t\t\tinput: nonNegativeNumber(prices.input, `${modelPath}.cost.input`, 0, settingsPath) / 1_000_000,\n\t\t\t\toutput: nonNegativeNumber(prices.output, `${modelPath}.cost.output`, 0, settingsPath) / 1_000_000,\n\t\t\t\tcacheRead: nonNegativeNumber(prices.cacheRead, `${modelPath}.cost.cacheRead`, 0, settingsPath) / 1_000_000,\n\t\t\t\tcacheWrite: nonNegativeNumber(prices.cacheWrite, `${modelPath}.cost.cacheWrite`, 0, settingsPath) / 1_000_000,\n\t\t\t},\n\t\t};\n\t});\n}\n\n/** Validates a Custom onboarding endpoint without issuing a network request. */\nexport function validateCustomBaseUrl(value: string): string {\n\tconst baseUrl = value.trim();\n\tif (!baseUrl) throw new Error(\"Base URL cannot be empty.\");\n\tlet url: URL;\n\ttry {\n\t\turl = new URL(baseUrl);\n\t} catch {\n\t\tthrow new Error(\"Base URL must be an absolute http or https URL.\");\n\t}\n\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") throw new Error(\"Base URL must use http or https.\");\n\tif (url.username || url.password || url.search || url.hash) {\n\t\tthrow new Error(\"Base URL must not contain credentials, query, or hash.\");\n\t}\n\tif (baseUrl.endsWith(\"/\")) throw new Error(\"Base URL must not end with /.\");\n\treturn baseUrl;\n}\n\nfunction requireCustomValue(value: string, field: \"apiKey\" | \"modelId\"): string {\n\tconst trimmed = value.trim();\n\tif (!trimmed) throw new Error(`${field === \"apiKey\" ? \"API key\" : \"Model ID\"} cannot be empty.`);\n\treturn trimmed;\n}\n\n/** Builds the single user-managed Custom provider from validated onboarding input. */\nexport function createCustomProviderConfiguration(input: CustomProviderInput): StartupProviderConfiguration {\n\tconst baseUrl = validateCustomBaseUrl(input.baseUrl);\n\tconst modelId = requireCustomValue(input.modelId, \"modelId\");\n\tconst apiKey = requireCustomValue(input.apiKey, \"apiKey\");\n\tconst known = findBuiltinModel(input.api, modelId);\n\tconst model: Model = known\n\t\t? {\n\t\t\t\t...known,\n\t\t\t\tid: modelId,\n\t\t\t\tprovider: \"custom\",\n\t\t\t\tapi: input.api,\n\t\t\t\tbaseUrl,\n\t\t\t}\n\t\t: {\n\t\t\t\tid: modelId,\n\t\t\t\tname: modelId,\n\t\t\t\tprovider: \"custom\",\n\t\t\t\tapi: input.api,\n\t\t\t\tbaseUrl,\n\t\t\t\tinput: [\"text\"],\n\t\t\t\treasoning: false,\n\t\t\t\tcontextWindow: 128_000,\n\t\t\t\tmaxOutputTokens: 16_384,\n\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },\n\t\t\t};\n\treturn { id: \"custom\", name: \"Custom\", api: input.api, apiKey, baseUrl, models: [model] };\n}\n\nfunction serializeModel(model: Model): Record<string, unknown> {\n\treturn {\n\t\tid: model.id,\n\t\tname: model.name,\n\t\tinput: model.input,\n\t\treasoning: model.reasoning,\n\t\t...(model.reasoningEfforts ? { reasoningEfforts: model.reasoningEfforts } : {}),\n\t\t...(model.defaultReasoningEffort ? { defaultReasoningEffort: model.defaultReasoningEffort } : {}),\n\t\t...(model.chatCompletionsCompat ? { chatCompletionsCompat: model.chatCompletionsCompat } : {}),\n\t\t...(model.cacheRetention ? { cacheRetention: model.cacheRetention } : {}),\n\t\t...(model.sessionAffinity ? { sessionAffinity: model.sessionAffinity } : {}),\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxOutputTokens,\n\t\tcost: Object.fromEntries(Object.entries(model.cost).map(([key, value]) => [key, value * 1_000_000])),\n\t};\n}\n\nfunction parseSettings(value: unknown, settingsPath: string): SettingsFile {\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${settingsPath}: root value must be an object`);\n\t}\n\tconst record = value as Record<string, unknown>;\n\tconst providersValue = record.providers;\n\tif (typeof providersValue !== \"object\" || providersValue === null || Array.isArray(providersValue)) {\n\t\tthrow new Error(`${settingsPath}: providers must be an object`);\n\t}\n\tconst providers: Record<string, SettingsFile[\"providers\"][string]> = {};\n\tfor (const [id, entry] of Object.entries(providersValue as Record<string, unknown>)) {\n\t\tif (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n\t\t\tthrow new Error(`${settingsPath}: providers.${id} must be an object`);\n\t\t}\n\t\tconst provider = entry as Record<string, unknown>;\n\t\tproviders[id] = {\n\t\t\tname: optionalString(provider.name, `providers.${id}.name`, settingsPath),\n\t\t\tbaseUrl: optionalString(provider.baseUrl, `providers.${id}.baseUrl`, settingsPath),\n\t\t\tapiKey: optionalString(provider.apiKey, `providers.${id}.apiKey`, settingsPath),\n\t\t\tapi: optionalString(provider.api, `providers.${id}.api`, settingsPath),\n\t\t\tmodels: provider.models,\n\t\t};\n\t}\n\tconst defaultProvider =\n\t\trecord.defaultProvider === undefined\n\t\t\t? undefined\n\t\t\t: requiredString(record.defaultProvider, \"defaultProvider\", settingsPath);\n\tconst defaultModel =\n\t\trecord.defaultModel === undefined ? undefined : requiredString(record.defaultModel, \"defaultModel\", settingsPath);\n\tconst thinkingLevels = parseThinkingLevels(record.thinkingLevels, settingsPath);\n\tif (record.locale !== undefined && !isLocale(record.locale)) {\n\t\tthrow new Error(`${settingsPath}: locale must be \"en\" or \"zh-CN\"`);\n\t}\n\tif (\n\t\trecord.permissionMode !== undefined &&\n\t\trecord.permissionMode !== \"ask\" &&\n\t\trecord.permissionMode !== \"allow\" &&\n\t\trecord.permissionMode !== \"deny\"\n\t) {\n\t\tthrow new Error(`${settingsPath}: permissionMode must be \"ask\", \"allow\", or \"deny\"`);\n\t}\n\treturn {\n\t\tproviders,\n\t\t...(defaultProvider === undefined ? {} : { defaultProvider }),\n\t\t...(defaultModel === undefined ? {} : { defaultModel }),\n\t\t...(thinkingLevels === undefined ? {} : { thinkingLevels }),\n\t\t...(record.locale === undefined ? {} : { locale: record.locale }),\n\t\t...(record.permissionMode === undefined ? {} : { permissionMode: record.permissionMode }),\n\t};\n}\n\nfunction parseThinkingLevels(value: unknown, settingsPath: string): ThinkingLevelPreferences | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n\t\tthrow new Error(`${settingsPath}: thinkingLevels must be an object`);\n\t}\n\tconst preferences: Record<string, Record<string, ThinkingLevel>> = {};\n\tfor (const [providerId, models] of Object.entries(value as Record<string, unknown>)) {\n\t\trequiredString(providerId, \"thinkingLevels provider ID\", settingsPath);\n\t\tif (typeof models !== \"object\" || models === null || Array.isArray(models)) {\n\t\t\tthrow new Error(`${settingsPath}: thinkingLevels.${providerId} must be an object`);\n\t\t}\n\t\tconst modelPreferences: Record<string, ThinkingLevel> = {};\n\t\tfor (const [modelId, level] of Object.entries(models as Record<string, unknown>)) {\n\t\t\trequiredString(modelId, `thinkingLevels.${providerId} model ID`, settingsPath);\n\t\t\tif (level !== \"low\" && level !== \"medium\" && level !== \"high\" && level !== \"max\") {\n\t\t\t\tthrow new Error(`${settingsPath}: thinkingLevels.${providerId}.${modelId} must be a valid thinking level`);\n\t\t\t}\n\t\t\tmodelPreferences[modelId] = level;\n\t\t}\n\t\tpreferences[providerId] = modelPreferences;\n\t}\n\treturn preferences;\n}\n\nasync function readSettingsFile(path: string, displayPath: string): Promise<SettingsFile | undefined> {\n\ttry {\n\t\tconst source = await readFile(path, \"utf8\");\n\t\tif (source.trim().length === 0) return undefined;\n\t\treturn parseSettings(JSON.parse(source), displayPath);\n\t} catch (cause) {\n\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\") return undefined;\n\t\tif (cause instanceof SyntaxError) throw new Error(`${displayPath}: invalid JSON`, { cause });\n\t\tthrow cause;\n\t}\n}\n\nfunction mergeSettings(\n\tglobalSettings: SettingsFile | undefined,\n\tprojectSettings: SettingsFile | undefined,\n): SettingsFile {\n\tconst globalProviders = globalSettings?.providers ?? {};\n\tconst projectProviders = projectSettings?.providers ?? {};\n\tconst providers = { ...globalProviders };\n\tfor (const [id, projectProvider] of Object.entries(projectProviders)) {\n\t\tproviders[id] = {\n\t\t\t...globalProviders[id],\n\t\t\t...(projectProvider.name === undefined ? {} : { name: projectProvider.name }),\n\t\t\t...(projectProvider.baseUrl === undefined ? {} : { baseUrl: projectProvider.baseUrl }),\n\t\t\t...(projectProvider.apiKey === undefined ? {} : { apiKey: projectProvider.apiKey }),\n\t\t\t...(projectProvider.api === undefined ? {} : { api: projectProvider.api }),\n\t\t\t...(projectProvider.models === undefined ? {} : { models: projectProvider.models }),\n\t\t};\n\t}\n\tconst defaultProvider = projectSettings?.defaultProvider ?? globalSettings?.defaultProvider;\n\tconst defaultModel =\n\t\tprojectSettings?.defaultModel ??\n\t\t(projectSettings?.defaultProvider === undefined ? globalSettings?.defaultModel : undefined);\n\tconst thinkingLevels = mergeThinkingLevels(globalSettings?.thinkingLevels, projectSettings?.thinkingLevels);\n\tconst locale = globalSettings?.locale;\n\treturn {\n\t\tproviders,\n\t\t...(defaultProvider === undefined ? {} : { defaultProvider }),\n\t\t...(defaultModel === undefined ? {} : { defaultModel }),\n\t\t...(thinkingLevels === undefined ? {} : { thinkingLevels }),\n\t\t...(locale === undefined ? {} : { locale }),\n\t\t...(globalSettings?.permissionMode === undefined ? {} : { permissionMode: globalSettings.permissionMode }),\n\t};\n}\n\nfunction mergeThinkingLevels(\n\tglobalPreferences: ThinkingLevelPreferences | undefined,\n\tworkspacePreferences: ThinkingLevelPreferences | undefined,\n): ThinkingLevelPreferences | undefined {\n\tif (globalPreferences === undefined && workspacePreferences === undefined) return undefined;\n\tconst result: Record<string, Record<string, ThinkingLevel>> = {};\n\tfor (const [providerId, models] of Object.entries(globalPreferences ?? {})) result[providerId] = { ...models };\n\tfor (const [providerId, models] of Object.entries(workspacePreferences ?? {})) {\n\t\tresult[providerId] = { ...result[providerId], ...models };\n\t}\n\treturn result;\n}\n\nasync function writeSettingsFile(agentDir: string, settings: SettingsFile): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tawait mkdir(agentDir, { recursive: true, mode: 0o700 });\n\tconst temporaryPath = `${settingsFilePath}.tmp-${randomUUID()}`;\n\ttry {\n\t\tawait writeFile(temporaryPath, `${JSON.stringify(settings, null, \"\\t\")}\\n`, { encoding: \"utf8\", mode: 0o600 });\n\t\tawait rename(temporaryPath, settingsFilePath);\n\t} finally {\n\t\ttry {\n\t\t\tawait unlink(temporaryPath);\n\t\t} catch {\n\t\t\t// The temporary file was renamed or was never created.\n\t\t}\n\t}\n}\n\n/** Persists a user-level terminal language preference without changing project settings. */\nexport async function saveGlobalLocale(agentDir: string, locale: Locale): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings: SettingsFile = {\n\t\tproviders: existingSettings?.providers ?? {},\n\t\t...(existingSettings?.defaultProvider === undefined ? {} : { defaultProvider: existingSettings.defaultProvider }),\n\t\t...(existingSettings?.defaultModel === undefined ? {} : { defaultModel: existingSettings.defaultModel }),\n\t\t...(existingSettings?.thinkingLevels === undefined ? {} : { thinkingLevels: existingSettings.thinkingLevels }),\n\t\tlocale,\n\t\t...(existingSettings?.permissionMode === undefined ? {} : { permissionMode: existingSettings.permissionMode }),\n\t};\n\tawait writeSettingsFile(agentDir, settings);\n}\n\n/** Persists the default permission mode; the active Session keeps its own runtime until next turn. */\nexport async function saveGlobalPermissionMode(agentDir: string, permissionMode: PermissionMode): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tif (permissionMode !== \"ask\" && permissionMode !== \"allow\" && permissionMode !== \"deny\")\n\t\tthrow new Error(`${settingsFilePath}: permissionMode must be \"ask\", \"allow\", or \"deny\"`);\n\tawait writeSettingsFile(agentDir, { ...mergeSettings(existingSettings, undefined), permissionMode });\n}\n\nexport async function saveGlobalProviderApiKey(\n\tagentDir: string,\n\tproviderId: string,\n\tapi: Exclude<ModelApi, \"faux\">,\n\tapiKey: string,\n\tmodelId?: string,\n): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst trimmedApiKey = apiKey.trim();\n\tif (!trimmedApiKey) throw new Error(`${settingsFilePath}: apiKey must be a non-empty string`);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings = mergeSettings(existingSettings, {\n\t\tproviders: { [providerId]: { api, apiKey: trimmedApiKey } },\n\t\tdefaultProvider: providerId,\n\t\t...(modelId === undefined ? {} : { defaultModel: modelId }),\n\t});\n\tawait writeSettingsFile(agentDir, settings);\n}\n\n/** Persists the interactive model selection without changing credentials or Provider configuration. */\nexport async function saveGlobalModelSelection(agentDir: string, providerId: string, modelId: string): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst normalizedProviderId = requiredString(providerId, \"providerId\", settingsFilePath);\n\tconst normalizedModelId = requiredString(modelId, \"modelId\", settingsFilePath);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings = mergeSettings(existingSettings, {\n\t\tproviders: {},\n\t\tdefaultProvider: normalizedProviderId,\n\t\tdefaultModel: normalizedModelId,\n\t});\n\tawait writeSettingsFile(agentDir, settings);\n}\n\n/**\n * Persists a runtime preference in an existing workspace settings file, falling back to user settings when the\n * workspace has no settings file. This keeps an explicit WebUI selection aligned with startup resolution.\n */\nexport async function saveScopedModelSelection(\n\tcwd: string,\n\tagentDir: string,\n\tproviderId: string,\n\tmodelId: string,\n): Promise<void> {\n\tconst workspaceDir = join(cwd, \".di-code\");\n\tconst workspacePath = join(cwd, SETTINGS_PATH);\n\tconst workspaceSettings = await readSettingsFile(workspacePath, SETTINGS_PATH);\n\tif (workspaceSettings === undefined) {\n\t\tawait saveGlobalModelSelection(agentDir, providerId, modelId);\n\t\treturn;\n\t}\n\tconst normalizedProviderId = requiredString(providerId, \"providerId\", SETTINGS_PATH);\n\tconst normalizedModelId = requiredString(modelId, \"modelId\", SETTINGS_PATH);\n\tawait writeSettingsFile(workspaceDir, {\n\t\t...workspaceSettings,\n\t\tdefaultProvider: normalizedProviderId,\n\t\tdefaultModel: normalizedModelId,\n\t});\n}\n\n/** Persists a per-provider/model thinking preference in user settings. */\nexport async function saveGlobalThinkingLevel(\n\tagentDir: string,\n\tproviderId: string,\n\tmodelId: string,\n\tlevel: ThinkingLevel,\n): Promise<void> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst normalizedProviderId = requiredString(providerId, \"providerId\", settingsFilePath);\n\tconst normalizedModelId = requiredString(modelId, \"modelId\", settingsFilePath);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings: SettingsFile = {\n\t\t...mergeSettings(existingSettings, undefined),\n\t\tthinkingLevels: {\n\t\t\t...(existingSettings?.thinkingLevels ?? {}),\n\t\t\t[normalizedProviderId]: {\n\t\t\t\t...(existingSettings?.thinkingLevels?.[normalizedProviderId] ?? {}),\n\t\t\t\t[normalizedModelId]: level,\n\t\t\t},\n\t\t},\n\t};\n\tawait writeSettingsFile(agentDir, settings);\n}\n\n/** Persists a thinking preference beside an existing workspace model selection, or in user settings as a fallback. */\nexport async function saveScopedThinkingLevel(\n\tcwd: string,\n\tagentDir: string,\n\tproviderId: string,\n\tmodelId: string,\n\tlevel: ThinkingLevel,\n): Promise<void> {\n\tconst workspaceDir = join(cwd, \".di-code\");\n\tconst workspacePath = join(cwd, SETTINGS_PATH);\n\tconst workspaceSettings = await readSettingsFile(workspacePath, SETTINGS_PATH);\n\tif (workspaceSettings === undefined) {\n\t\tawait saveGlobalThinkingLevel(agentDir, providerId, modelId, level);\n\t\treturn;\n\t}\n\tconst normalizedProviderId = requiredString(providerId, \"providerId\", SETTINGS_PATH);\n\tconst normalizedModelId = requiredString(modelId, \"modelId\", SETTINGS_PATH);\n\tawait writeSettingsFile(workspaceDir, {\n\t\t...workspaceSettings,\n\t\tthinkingLevels: {\n\t\t\t...(workspaceSettings.thinkingLevels ?? {}),\n\t\t\t[normalizedProviderId]: {\n\t\t\t\t...(workspaceSettings.thinkingLevels?.[normalizedProviderId] ?? {}),\n\t\t\t\t[normalizedModelId]: level,\n\t\t\t},\n\t\t},\n\t});\n}\n\n/**\n * Replaces the user-managed `custom` provider while retaining other global\n * providers and preferences. The key is intentionally stored only here, never\n * in project settings or process environment.\n */\nexport async function saveGlobalCustomProvider(\n\tagentDir: string,\n\tinput: CustomProviderInput,\n): Promise<StartupProviderConfiguration> {\n\tconst configuration = createCustomProviderConfiguration(input);\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst settings = mergeSettings(existingSettings, {\n\t\tproviders: {\n\t\t\tcustom: {\n\t\t\t\tname: configuration.name,\n\t\t\t\tapi: configuration.api,\n\t\t\t\tbaseUrl: configuration.baseUrl,\n\t\t\t\tapiKey: configuration.apiKey,\n\t\t\t\tmodels: configuration.models?.map(serializeModel),\n\t\t\t},\n\t\t},\n\t\tdefaultProvider: \"custom\",\n\t\tdefaultModel: configuration.models?.[0]?.id,\n\t});\n\tawait writeSettingsFile(agentDir, settings);\n\treturn configuration;\n}\n\n/**\n * Removes one persisted credential and clears it as the default when applicable.\n * Environment variables and other Provider configuration remain untouched.\n */\nexport async function removeGlobalProviderApiKey(agentDir: string, providerId: string): Promise<boolean> {\n\tconst settingsFilePath = join(agentDir, SETTINGS_FILE_NAME);\n\tconst existingSettings = await readSettingsFile(settingsFilePath, settingsFilePath);\n\tconst provider = existingSettings?.providers[providerId];\n\tif (!provider || provider.apiKey === undefined) return false;\n\n\tconst { apiKey: _apiKey, ...providerWithoutApiKey } = provider;\n\tconst clearsDefault = existingSettings.defaultProvider === providerId;\n\tconst settings: SettingsFile = {\n\t\tproviders: {\n\t\t\t...existingSettings.providers,\n\t\t\t[providerId]: providerWithoutApiKey,\n\t\t},\n\t\t...(clearsDefault || existingSettings.defaultProvider === undefined\n\t\t\t? {}\n\t\t\t: { defaultProvider: existingSettings.defaultProvider }),\n\t\t...(clearsDefault || existingSettings.defaultModel === undefined\n\t\t\t? {}\n\t\t\t: { defaultModel: existingSettings.defaultModel }),\n\t\t...(existingSettings.thinkingLevels === undefined ? {} : { thinkingLevels: existingSettings.thinkingLevels }),\n\t\t...(existingSettings.locale === undefined ? {} : { locale: existingSettings.locale }),\n\t\t...(existingSettings.permissionMode === undefined ? {} : { permissionMode: existingSettings.permissionMode }),\n\t};\n\tawait writeSettingsFile(agentDir, settings);\n\treturn true;\n}\n\nfunction resolveConfigValue(value: string | undefined, env: Environment): string | undefined {\n\tif (value === undefined) return undefined;\n\tconst trimmed = value.trim();\n\tconst match = /^\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}$|^\\$([A-Za-z_][A-Za-z0-9_]*)$/.exec(trimmed);\n\tif (match) {\n\t\tconst name = match[1] ?? match[2];\n\t\tconst resolved = env[name];\n\t\tif (!resolved?.trim()) throw new Error(`Configured apiKey environment variable \"${name}\" is not set.`);\n\t\treturn resolved;\n\t}\n\tif (trimmed.startsWith(\"!\")) {\n\t\tthrow new Error(\"Command-based apiKey values are not supported by di-code; use $ENV_VAR instead.\");\n\t}\n\treturn value;\n}\n\nfunction createFauxRuntime(): StartupRuntime {\n\tconst faux = createFauxProvider({ responses: FAUX_RESPONSES });\n\treturn { provider: faux.provider, model: faux.model };\n}\n\nfunction selectProviderModel(provider: Provider, providerId: string, env: Environment): Model {\n\tconst modelId =\n\t\tenv.DI_CODE_MODEL?.trim() ||\n\t\t(providerId === \"anthropic\"\n\t\t\t? provider.models.find((candidate) => candidate.id === \"claude-sonnet-4-5\")?.id\n\t\t\t: providerId === \"openai\"\n\t\t\t\t? provider.models.find((candidate) => candidate.id === \"gpt-4o\")?.id\n\t\t\t\t: providerId === \"zhipu\"\n\t\t\t\t\t? provider.models.find((candidate) => candidate.id === \"glm-5.3\")?.id\n\t\t\t\t\t: providerId === \"kimi\"\n\t\t\t\t\t\t? provider.models.find((candidate) => candidate.id === \"k3\")?.id\n\t\t\t\t\t\t: undefined) ||\n\t\tprovider.models[0]?.id;\n\tif (!modelId) throw new Error(\"DI_CODE_MODEL is required when the selected provider has no models\");\n\tconst model = provider.models.find((candidate) => candidate.id === modelId);\n\tif (!model) {\n\t\tconst availableModels = provider.models.map((candidate) => candidate.id).join(\", \");\n\t\tthrow new Error(`Unknown model \"${modelId}\" for provider \"${providerId}\". Available models: ${availableModels}.`);\n\t}\n\treturn model;\n}\n\nfunction createBuiltInRuntime(env: Environment, providerId: string): StartupRuntime | undefined {\n\tif (providerId === \"anthropic\") {\n\t\tconst provider = createAnthropicProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"openai\") {\n\t\tconst provider = createOpenAIProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"deepseek\") {\n\t\tconst provider = createDeepSeekProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"zhipu\") {\n\t\tconst provider = createZhipuProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\tif (providerId === \"kimi\") {\n\t\tconst provider = createKimiProvider({ env });\n\t\treturn { provider, model: selectProviderModel(provider, providerId, env) };\n\t}\n\treturn undefined;\n}\n\nfunction createConfiguredRuntime(env: Environment, configuration: StartupProviderConfiguration): StartupRuntime {\n\tif (\n\t\tconfiguration.api !== \"openai-responses\" &&\n\t\tconfiguration.api !== \"openai-chat-completions\" &&\n\t\tconfiguration.api !== \"anthropic-messages\"\n\t) {\n\t\tthrow new Error(\n\t\t\t`Unsupported API \"${configuration.api ?? \"missing\"}\" for provider \"${configuration.id}\". Expected openai-responses, openai-chat-completions, or anthropic-messages.`,\n\t\t);\n\t}\n\tif (\n\t\tconfiguration.id !== \"openai\" &&\n\t\tconfiguration.id !== \"deepseek\" &&\n\t\tconfiguration.id !== \"zhipu\" &&\n\t\tconfiguration.id !== \"kimi\" &&\n\t\tconfiguration.id !== \"anthropic\" &&\n\t\t!configuration.models\n\t) {\n\t\tthrow new Error(`${SETTINGS_PATH}: providers.${configuration.id}.models is required for a custom provider`);\n\t}\n\tconst provider =\n\t\tconfiguration.api === \"openai-chat-completions\"\n\t\t\t? createOpenAIChatCompletionsProvider({\n\t\t\t\t\tenv:\n\t\t\t\t\t\tconfiguration.id === \"zhipu\" || configuration.id === \"deepseek\" || configuration.id === \"kimi\"\n\t\t\t\t\t\t\t? env\n\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\tObject.entries(env).filter(([name]) => name !== \"OPENAI_API_KEY\" && name !== \"OPENAI_BASE_URL\"),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\tproviderId: configuration.id,\n\t\t\t\t\tname: configuration.name ?? configuration.id,\n\t\t\t\t\t...(configuration.id === \"zhipu\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tapiKeyEnvironmentVariable: \"ZAI_API_KEY\",\n\t\t\t\t\t\t\t\tbaseUrlEnvironmentVariable: \"ZHIPU_BASE_URL\",\n\t\t\t\t\t\t\t\tdefaultBaseUrl: \"https://open.bigmodel.cn/api/coding/paas/v4\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: configuration.id === \"deepseek\"\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tapiKeyEnvironmentVariable: \"DEEPSEEK_API_KEY\",\n\t\t\t\t\t\t\t\t\tbaseUrlEnvironmentVariable: \"DEEPSEEK_BASE_URL\",\n\t\t\t\t\t\t\t\t\tdefaultBaseUrl: \"https://api.deepseek.com\",\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: configuration.id === \"kimi\"\n\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\tapiKeyEnvironmentVariable: \"KIMI_API_KEY\",\n\t\t\t\t\t\t\t\t\t\tbaseUrlEnvironmentVariable: \"KIMI_BASE_URL\",\n\t\t\t\t\t\t\t\t\t\tdefaultBaseUrl: \"https://api.kimi.com/coding/v1\",\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t})\n\t\t\t: configuration.api === \"anthropic-messages\"\n\t\t\t\t? createAnthropicProvider({\n\t\t\t\t\t\tenv:\n\t\t\t\t\t\t\tconfiguration.id === \"anthropic\"\n\t\t\t\t\t\t\t\t? env\n\t\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\t\tObject.entries(env).filter(\n\t\t\t\t\t\t\t\t\t\t\t([name]) => name !== \"ANTHROPIC_API_KEY\" && name !== \"ANTHROPIC_BASE_URL\",\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\tproviderId: configuration.id,\n\t\t\t\t\t\tname: configuration.name,\n\t\t\t\t\t})\n\t\t\t\t: configuration.id === \"deepseek\"\n\t\t\t\t\t? createDeepSeekProvider({\n\t\t\t\t\t\t\tenv,\n\t\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\t})\n\t\t\t\t\t: configuration.id === \"zhipu\"\n\t\t\t\t\t\t? createZhipuProvider({\n\t\t\t\t\t\t\t\tenv,\n\t\t\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: createOpenAIProvider({\n\t\t\t\t\t\t\t\tenv:\n\t\t\t\t\t\t\t\t\tconfiguration.id === \"openai\"\n\t\t\t\t\t\t\t\t\t\t? env\n\t\t\t\t\t\t\t\t\t\t: Object.fromEntries(\n\t\t\t\t\t\t\t\t\t\t\t\tObject.entries(env).filter(([name]) => name !== \"OPENAI_API_KEY\" && name !== \"OPENAI_BASE_URL\"),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tmodels: configuration.models,\n\t\t\t\t\t\t\t\tapiKey: resolveConfigValue(configuration.apiKey, env),\n\t\t\t\t\t\t\t\tbaseUrl: configuration.models ? undefined : configuration.baseUrl,\n\t\t\t\t\t\t\t\tproviderId: configuration.id,\n\t\t\t\t\t\t\t\tname: configuration.name,\n\t\t\t\t\t\t\t});\n\tconst model = selectProviderModel(provider, configuration.id, env);\n\treturn { provider, model };\n}\n\nexport function resolveStartupRuntime(\n\tenv: Environment,\n\tproviders: readonly StartupProviderConfiguration[],\n\tdefaults: StartupDefaults = {},\n): StartupRuntime {\n\tconst selectedProviderId =\n\t\tenv.DI_CODE_PROVIDER?.trim() || defaults.providerId || (providers.length === 1 ? providers[0]?.id : undefined);\n\tif (selectedProviderId === \"faux\") return createFauxRuntime();\n\tif (!selectedProviderId) {\n\t\tif (providers.length === 0) {\n\t\t\tthrow new Error(\"Provider is not configured. Set DI_CODE_PROVIDER or start interactive mode in a TTY.\");\n\t\t}\n\t\tthrow new Error(\"DI_CODE_PROVIDER is required when more than one provider is configured.\");\n\t}\n\tconst runtimeEnvironment =\n\t\tenv.DI_CODE_MODEL?.trim() || defaults.providerId !== selectedProviderId || !defaults.modelId\n\t\t\t? env\n\t\t\t: { ...env, DI_CODE_MODEL: defaults.modelId };\n\tconst selectedProvider = providers.find((provider) => provider.id === selectedProviderId);\n\tif (selectedProvider) return createConfiguredRuntime(runtimeEnvironment, selectedProvider);\n\tconst builtInRuntime = createBuiltInRuntime(runtimeEnvironment, selectedProviderId);\n\tif (builtInRuntime) return builtInRuntime;\n\tthrow new Error(\n\t\t`Unknown configured provider \"${selectedProviderId}\". Available providers: ${providers.map((provider) => provider.id).join(\", \")}.`,\n\t);\n}\n\n/** Returns a stored preference only when the selected model still supports it. */\nexport function resolveThinkingLevelPreference(\n\tconfiguration: StartupConfiguration | undefined,\n\truntime: StartupRuntime,\n): ThinkingLevel | undefined {\n\tconst preference = configuration?.thinkingLevels?.[runtime.provider.id]?.[runtime.model.id];\n\treturn preference !== undefined && runtime.model.reasoningEfforts?.includes(preference) ? preference : undefined;\n}\n\nexport async function loadStartupConfiguration(\n\tcwd: string,\n\tenvironment: Environment = process.env,\n\tagentDir = join(homedir(), \".di-code\"),\n): Promise<StartupConfiguration> {\n\tconst [globalSettings, projectSettings] = await Promise.all([\n\t\treadSettingsFile(join(agentDir, SETTINGS_FILE_NAME), join(agentDir, SETTINGS_FILE_NAME)),\n\t\treadSettingsFile(join(cwd, SETTINGS_PATH), SETTINGS_PATH),\n\t]);\n\tconst settings = mergeSettings(globalSettings, projectSettings);\n\tconst requestedLocale = environment.DI_CODE_LOCALE?.trim();\n\tif (requestedLocale !== undefined && requestedLocale !== \"\" && !isLocale(requestedLocale)) {\n\t\tthrow new Error('DI_CODE_LOCALE must be \"en\" or \"zh-CN\".');\n\t}\n\n\tconst providers = Object.entries(settings.providers).map(([id, provider]) => ({\n\t\tid: requiredString(id, `providers.${id}`),\n\t\tname: provider.name,\n\t\tapi: provider.api,\n\t\tapiKey: provider.apiKey,\n\t\tbaseUrl: provider.baseUrl,\n\t\tmodels: parseModels(provider.models, `providers.${id}.models`, id, provider.api, provider.baseUrl, SETTINGS_PATH),\n\t}));\n\tconst defaults =\n\t\tsettings.defaultProvider === undefined && settings.defaultModel === undefined\n\t\t\t? undefined\n\t\t\t: { providerId: settings.defaultProvider, modelId: settings.defaultModel };\n\tconst locale = requestedLocale && isLocale(requestedLocale) ? requestedLocale : settings.locale;\n\treturn {\n\t\tenvironment,\n\t\tproviders,\n\t\t...(settings.thinkingLevels === undefined ? {} : { thinkingLevels: settings.thinkingLevels }),\n\t\t...(locale === undefined ? {} : { locale }),\n\t\t...(settings.permissionMode === undefined ? {} : { permissionMode: settings.permissionMode }),\n\t\t...(defaults === undefined ? {} : { defaults }),\n\t};\n}\n\nexport async function loadStartupEnvironment(\n\tcwd: string,\n\tenvironment: Environment = process.env,\n): Promise<Environment> {\n\treturn (await loadStartupConfiguration(cwd, environment)).environment;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/subagents/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subagents/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC","sourcesContent":["export * from \"./service.ts\";\n"]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { AgentTool, AgentToolResult } from "@di-code/agent";
|
|
2
|
+
import type { Model, Provider, TSchema } from "@di-code/ai";
|
|
3
|
+
import type { SubagentProvider, SubagentRun, SubagentStartRequest, SubagentStatus } from "@di-code/plugin-runtime";
|
|
4
|
+
import type { AgentSession } from "../core/session.ts";
|
|
5
|
+
export interface SubagentEvent {
|
|
6
|
+
readonly type: "subagent_start" | "subagent_update" | "subagent_end";
|
|
7
|
+
readonly runId: string;
|
|
8
|
+
readonly parentSessionId: string;
|
|
9
|
+
readonly status: SubagentStatus;
|
|
10
|
+
readonly text?: string;
|
|
11
|
+
readonly errorMessage?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SubagentServiceOptions {
|
|
14
|
+
readonly parentSessionId: string;
|
|
15
|
+
readonly cwd: string;
|
|
16
|
+
readonly provider: Provider;
|
|
17
|
+
readonly model: Model;
|
|
18
|
+
readonly createSession: (request: SubagentStartRequest) => AgentSession;
|
|
19
|
+
readonly providers?: readonly SubagentProvider[];
|
|
20
|
+
readonly maxDepth?: number;
|
|
21
|
+
readonly maxConcurrent?: number;
|
|
22
|
+
readonly defaultTimeoutMs?: number;
|
|
23
|
+
readonly maxResultBytes?: number;
|
|
24
|
+
readonly currentDepth?: number;
|
|
25
|
+
readonly toolNames?: readonly string[];
|
|
26
|
+
readonly pluginIds?: readonly string[];
|
|
27
|
+
readonly emit?: (event: SubagentEvent) => void | Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare class SubagentService {
|
|
30
|
+
private readonly config;
|
|
31
|
+
private readonly options;
|
|
32
|
+
private readonly providers;
|
|
33
|
+
private readonly runs;
|
|
34
|
+
private readonly terminalResults;
|
|
35
|
+
private activeCount;
|
|
36
|
+
constructor(options: SubagentServiceOptions);
|
|
37
|
+
list(): readonly SubagentRun[];
|
|
38
|
+
private rememberTerminalResult;
|
|
39
|
+
private completeRun;
|
|
40
|
+
start(input: {
|
|
41
|
+
readonly prompt: string;
|
|
42
|
+
readonly depth?: number;
|
|
43
|
+
readonly providerId?: string;
|
|
44
|
+
}, signal?: AbortSignal): Promise<SubagentRun>;
|
|
45
|
+
get(id: string): SubagentRun;
|
|
46
|
+
interrupt(id: string): Promise<void>;
|
|
47
|
+
dispose(): Promise<void>;
|
|
48
|
+
createTools(): readonly AgentTool<TSchema, AgentToolResult>[];
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/subagents/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAEX,gBAAgB,EAEhB,WAAW,EACX,oBAAoB,EACpB,cAAc,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,cAAc,CAAC;IACrE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,YAAY,CAAC;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AA8ND,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAEtB;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IACrE,OAAO,CAAC,WAAW,CAAK;gBAEZ,OAAO,EAAE,sBAAsB;IA0B3C,IAAI,IAAI,SAAS,WAAW,EAAE;IAI9B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,WAAW;IAOb,KAAK,CACV,KAAK,EAAE;QACN,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;KAC7B,EACD,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,WAAW,CAAC;IAsIvB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW;IAMtB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,WAAW,IAAI,SAAS,SAAS,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE;CAqG7D"}
|