@di-code/coding-agent 0.1.4 → 0.1.6
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 +74 -23
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +96 -17
- package/dist/cli.js.map +1 -1
- package/dist/core/clipboard-image.d.ts +3 -3
- package/dist/core/clipboard-image.d.ts.map +1 -1
- package/dist/core/clipboard-image.js +26 -13
- package/dist/core/clipboard-image.js.map +1 -1
- package/dist/core/resources/loader.d.ts.map +1 -1
- package/dist/core/resources/loader.js +15 -42
- package/dist/core/resources/loader.js.map +1 -1
- package/dist/core/resources/types.d.ts +6 -9
- package/dist/core/resources/types.d.ts.map +1 -1
- package/dist/core/resources/types.js.map +1 -1
- package/dist/core/session/session-manager.d.ts +12 -1
- package/dist/core/session/session-manager.d.ts.map +1 -1
- package/dist/core/session/session-manager.js +66 -3
- 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 +29 -15
- package/dist/core/session/session-storage.js.map +1 -1
- package/dist/core/session/types.d.ts +6 -1
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/types.js +1 -1
- package/dist/core/session/types.js.map +1 -1
- package/dist/core/session.d.ts +21 -1
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +81 -12
- package/dist/core/session.js.map +1 -1
- package/dist/core/system-prompt.js +2 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/file-search.d.ts +14 -0
- package/dist/core/tools/file-search.d.ts.map +1 -0
- package/dist/core/tools/file-search.js +99 -0
- package/dist/core/tools/file-search.js.map +1 -0
- package/dist/core/tools/glob.d.ts +11 -0
- package/dist/core/tools/glob.d.ts.map +1 -0
- package/dist/core/tools/glob.js +44 -0
- package/dist/core/tools/glob.js.map +1 -0
- package/dist/core/tools/grep.d.ts +13 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +67 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/load-skill.d.ts +10 -0
- package/dist/core/tools/load-skill.d.ts.map +1 -0
- package/dist/core/tools/load-skill.js +22 -0
- package/dist/core/tools/load-skill.js.map +1 -0
- package/dist/core/tools/path-boundary.d.ts +2 -0
- package/dist/core/tools/path-boundary.d.ts.map +1 -1
- package/dist/core/tools/path-boundary.js +4 -0
- package/dist/core/tools/path-boundary.js.map +1 -1
- package/dist/core/user-data.d.ts +3 -0
- package/dist/core/user-data.d.ts.map +1 -0
- package/dist/core/user-data.js +8 -0
- package/dist/core/user-data.js.map +1 -0
- package/dist/entry.js +13 -0
- package/dist/entry.js.map +1 -1
- package/dist/extensions/runtime.js +2 -2
- package/dist/extensions/runtime.js.map +1 -1
- package/dist/i18n.d.ts +5 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +223 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +17 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +238 -11
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts +33 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +211 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/loader.d.ts +21 -0
- package/dist/mcp/loader.d.ts.map +1 -0
- package/dist/mcp/loader.js +60 -0
- package/dist/mcp/loader.js.map +1 -0
- package/dist/mcp/tool-adapter.d.ts +5 -0
- package/dist/mcp/tool-adapter.d.ts.map +1 -0
- package/dist/mcp/tool-adapter.js +149 -0
- package/dist/mcp/tool-adapter.js.map +1 -0
- package/dist/modes/interactive-components.d.ts +2 -2
- package/dist/modes/interactive-components.d.ts.map +1 -1
- package/dist/modes/interactive-components.js +30 -33
- package/dist/modes/interactive-components.js.map +1 -1
- package/dist/modes/interactive-state.d.ts.map +1 -1
- package/dist/modes/interactive-state.js +1 -0
- package/dist/modes/interactive-state.js.map +1 -1
- package/dist/modes/interactive.d.ts +9 -0
- package/dist/modes/interactive.d.ts.map +1 -1
- package/dist/modes/interactive.js +191 -62
- package/dist/modes/interactive.js.map +1 -1
- package/dist/modes/tree-selector.d.ts +30 -0
- package/dist/modes/tree-selector.d.ts.map +1 -0
- package/dist/modes/tree-selector.js +205 -0
- package/dist/modes/tree-selector.js.map +1 -0
- package/dist/plugins/loader.d.ts +19 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +21 -2
- package/dist/plugins/loader.js.map +1 -1
- package/dist/provider-onboarding.d.ts.map +1 -1
- package/dist/provider-onboarding.js +119 -22
- package/dist/provider-onboarding.js.map +1 -1
- package/dist/startup.d.ts +24 -1
- package/dist/startup.d.ts.map +1 -1
- package/dist/startup.js +200 -9
- package/dist/startup.js.map +1 -1
- package/package.json +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAIlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAIlE,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE5F,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GACzB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC1G;IACA,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,qBAAqB,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAC;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACxB,CAAC;AAEL,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;IACjD,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAClD;AA0BD,wBAAsB,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4EvF"}
|
package/dist/plugins/loader.js
CHANGED
|
@@ -58,17 +58,22 @@ export async function loadPlugins(options) {
|
|
|
58
58
|
manifest = await readPluginManifest(manifestPath).catch(async () => readPackagePluginManifest(root));
|
|
59
59
|
}
|
|
60
60
|
catch (cause) {
|
|
61
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
61
62
|
diagnostics.push({
|
|
62
63
|
sourcePath: manifestPath,
|
|
63
64
|
stage: "manifest",
|
|
64
65
|
severity: "error",
|
|
65
|
-
message
|
|
66
|
+
message,
|
|
66
67
|
});
|
|
68
|
+
options.onPluginLoadStatus?.({ state: "failed", sourcePath: manifestPath, stage: "manifest", message });
|
|
67
69
|
continue;
|
|
68
70
|
}
|
|
69
71
|
const projectLocal = root.startsWith(resolve(cwd, ".di-code", "plugins"));
|
|
70
72
|
if (!projectLocal && !enabledGlobal.has(manifest.id))
|
|
71
73
|
continue;
|
|
74
|
+
options.onPluginLoadStatus?.({ state: "loading", pluginId: manifest.id });
|
|
75
|
+
const toolCount = extensionResult.host.listTools().length;
|
|
76
|
+
const commandCount = extensionResult.host.listCommands().length;
|
|
72
77
|
try {
|
|
73
78
|
const entry = await resolvePluginEntry(root, manifest.entry);
|
|
74
79
|
const module = await jiti.import(entry);
|
|
@@ -76,14 +81,28 @@ export async function loadPlugins(options) {
|
|
|
76
81
|
throw new Error("plugin entry must export a default factory function");
|
|
77
82
|
await extensionResult.host.registerExtension(entry, module.default, manifest.id);
|
|
78
83
|
loaded.push({ manifest, root, sourcePath: manifestPath, projectLocal });
|
|
84
|
+
options.onPluginLoadStatus?.({
|
|
85
|
+
state: "loaded",
|
|
86
|
+
pluginId: manifest.id,
|
|
87
|
+
tools: extensionResult.host.listTools().length - toolCount,
|
|
88
|
+
commands: extensionResult.host.listCommands().length - commandCount,
|
|
89
|
+
});
|
|
79
90
|
}
|
|
80
91
|
catch (cause) {
|
|
92
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
81
93
|
diagnostics.push({
|
|
82
94
|
pluginId: manifest.id,
|
|
83
95
|
sourcePath: manifestPath,
|
|
84
96
|
stage: "import",
|
|
85
97
|
severity: "error",
|
|
86
|
-
message
|
|
98
|
+
message,
|
|
99
|
+
});
|
|
100
|
+
options.onPluginLoadStatus?.({
|
|
101
|
+
state: "failed",
|
|
102
|
+
pluginId: manifest.id,
|
|
103
|
+
sourcePath: manifestPath,
|
|
104
|
+
stage: "import",
|
|
105
|
+
message,
|
|
87
106
|
});
|
|
88
107
|
}
|
|
89
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { type ExtensionHost, loadExtensions } from \"../extensions/runtime.ts\";\nimport type { ProjectTrustManager } from \"../extensions/trust.ts\";\nimport type { ExtensionFactory } from \"../extensions/types.ts\";\nimport { PluginManager } from \"./manager.ts\";\nimport { readPackagePluginManifest, readPluginManifest, resolvePluginEntry } from \"./manifest.ts\";\nimport type { DiscoveredPlugin, PluginDiagnostic } from \"./types.ts\";\n\nexport interface PluginLoadOptions {\n\treadonly cwd: string;\n\treadonly agentDir?: string;\n\treadonly projectTrusted?: boolean;\n\treadonly trustManager?: ProjectTrustManager;\n\treadonly mode?: \"interactive\" | \"print\" | \"json\";\n\treadonly explicitPaths?: readonly string[];\n}\n\nexport interface PluginLoadResult {\n\treadonly host: ExtensionHost;\n\treadonly loaded: readonly DiscoveredPlugin[];\n\treadonly diagnostics: readonly PluginDiagnostic[];\n}\n\nasync function isPluginPackage(root: string): Promise<boolean> {\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(await readFile(join(root, \"package.json\"), \"utf8\"));\n\t\treturn typeof parsed === \"object\" && parsed !== null && \"diCode\" in parsed;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function discoverPluginRoots(cwd: string, agentDir: string, trusted: boolean): Promise<string[]> {\n\tconst roots = [...(trusted ? [join(cwd, \".di-code\", \"plugins\")] : []), join(agentDir, \"plugins\", \"installed\")];\n\tconst result: string[] = [];\n\tfor (const root of roots) {\n\t\tif (!existsSync(root)) continue;\n\t\tfor (const entry of await readdir(root, { withFileTypes: true })) {\n\t\t\tif (!entry.isDirectory()) continue;\n\t\t\tconst pluginRoot = join(root, entry.name);\n\t\t\tif (existsSync(join(pluginRoot, \"plugin.json\")) || (await isPluginPackage(pluginRoot)))\n\t\t\t\tresult.push(resolve(pluginRoot));\n\t\t}\n\t}\n\treturn result.sort((a, b) => a.localeCompare(b));\n}\n\nexport async function loadPlugins(options: PluginLoadOptions): Promise<PluginLoadResult> {\n\tconst cwd = resolve(options.cwd);\n\tconst agentDir = resolve(options.agentDir ?? join(cwd, \".di-code\"));\n\tconst trusted =\n\t\toptions.projectTrusted ?? (options.trustManager ? (await options.trustManager.get(cwd)) === true : false);\n\tconst extensionResult = await loadExtensions({\n\t\tcwd,\n\t\tprojectTrusted: trusted,\n\t\ttrustManager: options.trustManager,\n\t\tmode: options.mode,\n\t\tpaths: options.explicitPaths,\n\t});\n\tconst diagnostics: PluginDiagnostic[] = extensionResult.diagnostics.map((diagnostic) => ({\n\t\tsourcePath: diagnostic.path,\n\t\tstage: diagnostic.stage,\n\t\tseverity: \"error\",\n\t\tmessage: diagnostic.message,\n\t}));\n\tconst enabledGlobal = new Set(\n\t\t(await new PluginManager({ agentDir }).list()).filter((plugin) => plugin.enabled).map((plugin) => plugin.id),\n\t);\n\tconst pluginRoots = await discoverPluginRoots(cwd, agentDir, trusted);\n\tconst loaded: DiscoveredPlugin[] = [];\n\tconst jiti = createJiti(import.meta.url, { moduleCache: false });\n\tfor (const root of pluginRoots) {\n\t\tconst manifestPath = join(root, \"plugin.json\");\n\t\tlet manifest: Awaited<ReturnType<typeof readPluginManifest>>;\n\t\ttry {\n\t\t\tmanifest = await readPluginManifest(manifestPath).catch(async () => readPackagePluginManifest(root));\n\t\t} catch (cause) {\n\t\t\tdiagnostics.push({\n\t\t\t\tsourcePath: manifestPath,\n\t\t\t\tstage: \"manifest\",\n\t\t\t\tseverity: \"error\",\n\t\t\t\tmessage: cause instanceof Error ? cause.message : String(cause),\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst projectLocal = root.startsWith(resolve(cwd, \".di-code\", \"plugins\"));\n\t\tif (!projectLocal && !enabledGlobal.has(manifest.id)) continue;\n\t\ttry {\n\t\t\tconst entry = await resolvePluginEntry(root, manifest.entry);\n\t\t\tconst module = await jiti.import<{ default?: unknown }>(entry);\n\t\t\tif (typeof module.default !== \"function\") throw new Error(\"plugin entry must export a default factory function\");\n\t\t\tawait extensionResult.host.registerExtension(entry, module.default as ExtensionFactory, manifest.id);\n\t\t\tloaded.push({ manifest, root, sourcePath: manifestPath, projectLocal });\n\t\t} catch (cause) {\n\t\t\tdiagnostics.push({\n\t\t\t\tpluginId: manifest.id,\n\t\t\t\tsourcePath: manifestPath,\n\t\t\t\tstage: \"import\",\n\t\t\t\tseverity: \"error\",\n\t\t\t\tmessage: cause instanceof Error ? cause.message : String(cause),\n\t\t\t});\n\t\t}\n\t}\n\treturn { host: extensionResult.host, loaded, diagnostics };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { createJiti } from \"jiti\";\nimport { type ExtensionHost, loadExtensions } from \"../extensions/runtime.ts\";\nimport type { ProjectTrustManager } from \"../extensions/trust.ts\";\nimport type { ExtensionFactory } from \"../extensions/types.ts\";\nimport { PluginManager } from \"./manager.ts\";\nimport { readPackagePluginManifest, readPluginManifest, resolvePluginEntry } from \"./manifest.ts\";\nimport type { DiscoveredPlugin, PluginDiagnostic, PluginDiagnosticStage } from \"./types.ts\";\n\n/** A plugin loading transition emitted after its manifest is discovered. */\nexport type PluginLoadStatus =\n\t| { readonly state: \"loading\"; readonly pluginId: string }\n\t| { readonly state: \"loaded\"; readonly pluginId: string; readonly tools: number; readonly commands: number }\n\t| {\n\t\t\treadonly state: \"failed\";\n\t\t\treadonly pluginId?: string;\n\t\t\treadonly sourcePath: string;\n\t\t\treadonly stage: Extract<PluginDiagnosticStage, \"manifest\" | \"import\">;\n\t\t\treadonly message: string;\n\t };\n\nexport interface PluginLoadOptions {\n\treadonly cwd: string;\n\treadonly agentDir?: string;\n\treadonly projectTrusted?: boolean;\n\treadonly trustManager?: ProjectTrustManager;\n\treadonly mode?: \"interactive\" | \"print\" | \"json\";\n\treadonly explicitPaths?: readonly string[];\n\t/** Observes packaged plugin import outcomes without affecting the loader. */\n\treadonly onPluginLoadStatus?: (status: PluginLoadStatus) => void;\n}\n\nexport interface PluginLoadResult {\n\treadonly host: ExtensionHost;\n\treadonly loaded: readonly DiscoveredPlugin[];\n\treadonly diagnostics: readonly PluginDiagnostic[];\n}\n\nasync function isPluginPackage(root: string): Promise<boolean> {\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(await readFile(join(root, \"package.json\"), \"utf8\"));\n\t\treturn typeof parsed === \"object\" && parsed !== null && \"diCode\" in parsed;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function discoverPluginRoots(cwd: string, agentDir: string, trusted: boolean): Promise<string[]> {\n\tconst roots = [...(trusted ? [join(cwd, \".di-code\", \"plugins\")] : []), join(agentDir, \"plugins\", \"installed\")];\n\tconst result: string[] = [];\n\tfor (const root of roots) {\n\t\tif (!existsSync(root)) continue;\n\t\tfor (const entry of await readdir(root, { withFileTypes: true })) {\n\t\t\tif (!entry.isDirectory()) continue;\n\t\t\tconst pluginRoot = join(root, entry.name);\n\t\t\tif (existsSync(join(pluginRoot, \"plugin.json\")) || (await isPluginPackage(pluginRoot)))\n\t\t\t\tresult.push(resolve(pluginRoot));\n\t\t}\n\t}\n\treturn result.sort((a, b) => a.localeCompare(b));\n}\n\nexport async function loadPlugins(options: PluginLoadOptions): Promise<PluginLoadResult> {\n\tconst cwd = resolve(options.cwd);\n\tconst agentDir = resolve(options.agentDir ?? join(cwd, \".di-code\"));\n\tconst trusted =\n\t\toptions.projectTrusted ?? (options.trustManager ? (await options.trustManager.get(cwd)) === true : false);\n\tconst extensionResult = await loadExtensions({\n\t\tcwd,\n\t\tprojectTrusted: trusted,\n\t\ttrustManager: options.trustManager,\n\t\tmode: options.mode,\n\t\tpaths: options.explicitPaths,\n\t});\n\tconst diagnostics: PluginDiagnostic[] = extensionResult.diagnostics.map((diagnostic) => ({\n\t\tsourcePath: diagnostic.path,\n\t\tstage: diagnostic.stage,\n\t\tseverity: \"error\",\n\t\tmessage: diagnostic.message,\n\t}));\n\tconst enabledGlobal = new Set(\n\t\t(await new PluginManager({ agentDir }).list()).filter((plugin) => plugin.enabled).map((plugin) => plugin.id),\n\t);\n\tconst pluginRoots = await discoverPluginRoots(cwd, agentDir, trusted);\n\tconst loaded: DiscoveredPlugin[] = [];\n\tconst jiti = createJiti(import.meta.url, { moduleCache: false });\n\tfor (const root of pluginRoots) {\n\t\tconst manifestPath = join(root, \"plugin.json\");\n\t\tlet manifest: Awaited<ReturnType<typeof readPluginManifest>>;\n\t\ttry {\n\t\t\tmanifest = await readPluginManifest(manifestPath).catch(async () => readPackagePluginManifest(root));\n\t\t} catch (cause) {\n\t\t\tconst message = cause instanceof Error ? cause.message : String(cause);\n\t\t\tdiagnostics.push({\n\t\t\t\tsourcePath: manifestPath,\n\t\t\t\tstage: \"manifest\",\n\t\t\t\tseverity: \"error\",\n\t\t\t\tmessage,\n\t\t\t});\n\t\t\toptions.onPluginLoadStatus?.({ state: \"failed\", sourcePath: manifestPath, stage: \"manifest\", message });\n\t\t\tcontinue;\n\t\t}\n\t\tconst projectLocal = root.startsWith(resolve(cwd, \".di-code\", \"plugins\"));\n\t\tif (!projectLocal && !enabledGlobal.has(manifest.id)) continue;\n\t\toptions.onPluginLoadStatus?.({ state: \"loading\", pluginId: manifest.id });\n\t\tconst toolCount = extensionResult.host.listTools().length;\n\t\tconst commandCount = extensionResult.host.listCommands().length;\n\t\ttry {\n\t\t\tconst entry = await resolvePluginEntry(root, manifest.entry);\n\t\t\tconst module = await jiti.import<{ default?: unknown }>(entry);\n\t\t\tif (typeof module.default !== \"function\") throw new Error(\"plugin entry must export a default factory function\");\n\t\t\tawait extensionResult.host.registerExtension(entry, module.default as ExtensionFactory, manifest.id);\n\t\t\tloaded.push({ manifest, root, sourcePath: manifestPath, projectLocal });\n\t\t\toptions.onPluginLoadStatus?.({\n\t\t\t\tstate: \"loaded\",\n\t\t\t\tpluginId: manifest.id,\n\t\t\t\ttools: extensionResult.host.listTools().length - toolCount,\n\t\t\t\tcommands: extensionResult.host.listCommands().length - commandCount,\n\t\t\t});\n\t\t} catch (cause) {\n\t\t\tconst message = cause instanceof Error ? cause.message : String(cause);\n\t\t\tdiagnostics.push({\n\t\t\t\tpluginId: manifest.id,\n\t\t\t\tsourcePath: manifestPath,\n\t\t\t\tstage: \"import\",\n\t\t\t\tseverity: \"error\",\n\t\t\t\tmessage,\n\t\t\t});\n\t\t\toptions.onPluginLoadStatus?.({\n\t\t\t\tstate: \"failed\",\n\t\t\t\tpluginId: manifest.id,\n\t\t\t\tsourcePath: manifestPath,\n\t\t\t\tstage: \"import\",\n\t\t\t\tmessage,\n\t\t\t});\n\t\t}\n\t}\n\treturn { host: extensionResult.host, loaded, diagnostics };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-onboarding.d.ts","sourceRoot":"","sources":["../src/provider-onboarding.ts"],"names":[],"mappings":"AACA,OAAO,EAON,KAAK,QAAQ,EAEb,GAAG,EACH,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-onboarding.d.ts","sourceRoot":"","sources":["../src/provider-onboarding.ts"],"names":[],"mappings":"AACA,OAAO,EAON,KAAK,QAAQ,EAEb,GAAG,EACH,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,cAAc,EAInB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAErE,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oCAAoC;IACpD,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;CAClB;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,iBAAiB,EAC1B,qBAAqB,EAAE,OAAO,EAC9B,aAAa,EAAE,oBAAoB,GACjC,OAAO,CAQT;AA0RD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAkB7G;AAED,wBAAgB,iCAAiC,CAChD,OAAO,EAAE,oCAAoC,GAC3C,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAkBrC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { createFauxProvider, MODELS } from "@di-code/ai";
|
|
2
2
|
import { Box, Input, Key, KeybindingsManager, SelectList, Text, TUI, } from "@di-code/tui";
|
|
3
|
-
import {
|
|
3
|
+
import { DEFAULT_LOCALE, translate } from "./i18n.js";
|
|
4
|
+
import { resolveStartupRuntime, saveGlobalCustomProvider, saveGlobalProviderApiKey, validateCustomBaseUrl, } from "./startup.js";
|
|
4
5
|
export function shouldStartProviderOnboarding(command, isInteractiveTerminal, configuration) {
|
|
5
6
|
return (command.mode === "interactive" &&
|
|
6
7
|
isInteractiveTerminal &&
|
|
7
|
-
configuration.
|
|
8
|
-
!configuration.
|
|
8
|
+
!configuration.environment.DI_CODE_PROVIDER?.trim() &&
|
|
9
|
+
!configuration.defaults?.providerId &&
|
|
10
|
+
configuration.providers.length !== 1);
|
|
9
11
|
}
|
|
10
12
|
class OnboardingScreen {
|
|
11
13
|
prompt = new Text("", 1, 0);
|
|
@@ -19,8 +21,8 @@ class OnboardingScreen {
|
|
|
19
21
|
setError(message) {
|
|
20
22
|
this.error.setText(message);
|
|
21
23
|
}
|
|
22
|
-
setCancelled() {
|
|
23
|
-
this.prompt.setText(
|
|
24
|
+
setCancelled(locale) {
|
|
25
|
+
this.prompt.setText(translate(locale, "providerSetupCancelled"));
|
|
24
26
|
this.error.setText("");
|
|
25
27
|
this.active = null;
|
|
26
28
|
}
|
|
@@ -33,16 +35,25 @@ class OnboardingScreen {
|
|
|
33
35
|
this.active?.invalidate();
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
|
-
function providerChoices() {
|
|
38
|
+
function providerChoices(locale) {
|
|
37
39
|
return [
|
|
38
40
|
{ value: "openai", providerId: "openai", label: "OpenAI", description: "OpenAI Responses API" },
|
|
39
41
|
{ value: "deepseek", providerId: "deepseek", label: "DeepSeek", description: "DeepSeek Chat Completions API" },
|
|
40
|
-
{ value: "faux", providerId: "faux", label: "Faux (offline)", description:
|
|
42
|
+
{ value: "faux", providerId: "faux", label: "Faux (offline)", description: translate(locale, "fauxProvider") },
|
|
41
43
|
{ value: "zhipu", providerId: "zhipu", label: "Zhipu AI", description: "GLM Chat Completions API" },
|
|
42
44
|
{ value: "anthropic", providerId: "anthropic", label: "Anthropic", description: "Claude Messages API" },
|
|
45
|
+
{
|
|
46
|
+
value: "custom",
|
|
47
|
+
providerId: "custom",
|
|
48
|
+
label: translate(locale, "customProvider"),
|
|
49
|
+
description: translate(locale, "customProviderDescription"),
|
|
50
|
+
},
|
|
51
|
+
{ value: "kimi", providerId: "kimi", label: "Kimi", description: "Kimi Coding Chat Completions API" },
|
|
43
52
|
];
|
|
44
53
|
}
|
|
45
54
|
function modelsFor(providerId) {
|
|
55
|
+
if (providerId === "custom")
|
|
56
|
+
return [];
|
|
46
57
|
if (providerId === "faux")
|
|
47
58
|
return [createFauxProvider({ responses: [] }).model];
|
|
48
59
|
const models = MODELS.filter((model) => model.provider === providerId);
|
|
@@ -65,6 +76,8 @@ function apiKeyEnvironmentVariable(providerId) {
|
|
|
65
76
|
return "OPENAI_API_KEY";
|
|
66
77
|
if (providerId === "deepseek")
|
|
67
78
|
return "DEEPSEEK_API_KEY";
|
|
79
|
+
if (providerId === "kimi")
|
|
80
|
+
return "KIMI_API_KEY";
|
|
68
81
|
if (providerId === "zhipu")
|
|
69
82
|
return "ZAI_API_KEY";
|
|
70
83
|
if (providerId === "anthropic")
|
|
@@ -76,15 +89,28 @@ function providerApi(providerId) {
|
|
|
76
89
|
return "openai-responses";
|
|
77
90
|
if (providerId === "deepseek" || providerId === "zhipu")
|
|
78
91
|
return "openai-chat-completions";
|
|
92
|
+
if (providerId === "kimi")
|
|
93
|
+
return "openai-chat-completions";
|
|
79
94
|
if (providerId === "anthropic")
|
|
80
95
|
return "anthropic-messages";
|
|
81
96
|
return undefined;
|
|
82
97
|
}
|
|
83
|
-
function
|
|
98
|
+
function customApiChoices() {
|
|
99
|
+
return [
|
|
100
|
+
{ value: "openai-responses", label: "OpenAI Responses", description: "OpenAI Responses API" },
|
|
101
|
+
{
|
|
102
|
+
value: "openai-chat-completions",
|
|
103
|
+
label: "OpenAI Chat Completions",
|
|
104
|
+
description: "Chat Completions-compatible API",
|
|
105
|
+
},
|
|
106
|
+
{ value: "anthropic-messages", label: "Anthropic Messages", description: "Anthropic Messages API" },
|
|
107
|
+
];
|
|
108
|
+
}
|
|
109
|
+
function modelChoices(models, locale) {
|
|
84
110
|
return models.map((model) => ({
|
|
85
111
|
value: model.id,
|
|
86
112
|
label: model.name,
|
|
87
|
-
description: `${model.id}${model.reasoning ?
|
|
113
|
+
description: `${model.id}${model.reasoning ? ` - ${translate(locale, "reasoning")}` : ""}`,
|
|
88
114
|
}));
|
|
89
115
|
}
|
|
90
116
|
function onboardingSelectList(items) {
|
|
@@ -96,6 +122,7 @@ function onboardingSelectList(items) {
|
|
|
96
122
|
}
|
|
97
123
|
function startProviderOnboarding(options, tui, screen, complete, failure, forceApiKey) {
|
|
98
124
|
return new Promise((resolve, reject) => {
|
|
125
|
+
const locale = options.configuration.locale ?? DEFAULT_LOCALE;
|
|
99
126
|
let settled = false;
|
|
100
127
|
let saving = false;
|
|
101
128
|
let selectedProvider;
|
|
@@ -104,7 +131,7 @@ function startProviderOnboarding(options, tui, screen, complete, failure, forceA
|
|
|
104
131
|
return;
|
|
105
132
|
settled = true;
|
|
106
133
|
if (runtime === undefined)
|
|
107
|
-
screen.setCancelled();
|
|
134
|
+
screen.setCancelled(locale);
|
|
108
135
|
complete(runtime);
|
|
109
136
|
resolve(runtime);
|
|
110
137
|
};
|
|
@@ -141,21 +168,21 @@ function startProviderOnboarding(options, tui, screen, complete, failure, forceA
|
|
|
141
168
|
input.onSubmit = (value) => {
|
|
142
169
|
const key = value.trim();
|
|
143
170
|
if (key.length === 0) {
|
|
144
|
-
screen.setError(
|
|
171
|
+
screen.setError(translate(locale, "apiKeyRequired"));
|
|
145
172
|
tui.requestRender(true);
|
|
146
173
|
return;
|
|
147
174
|
}
|
|
148
175
|
void finishSelection(modelId, key);
|
|
149
176
|
};
|
|
150
177
|
input.onEscape = () => finish(undefined);
|
|
151
|
-
screen.setStep(
|
|
178
|
+
screen.setStep(translate(locale, "enterApiKey", keyVariable), input);
|
|
152
179
|
tui.setFocus(input);
|
|
153
180
|
tui.requestRender(true);
|
|
154
181
|
};
|
|
155
182
|
const showModels = (choice) => {
|
|
156
183
|
selectedProvider = choice.providerId;
|
|
157
184
|
const models = modelsFor(choice.providerId);
|
|
158
|
-
const modelList = onboardingSelectList(modelChoices(models));
|
|
185
|
+
const modelList = onboardingSelectList(modelChoices(models, locale));
|
|
159
186
|
modelList.onSelect = (item) => {
|
|
160
187
|
const keyVariable = apiKeyEnvironmentVariable(choice.providerId);
|
|
161
188
|
const existingKey = keyVariable ? options.configuration.environment[keyVariable]?.trim() : undefined;
|
|
@@ -165,18 +192,84 @@ function startProviderOnboarding(options, tui, screen, complete, failure, forceA
|
|
|
165
192
|
void finishSelection(item.value);
|
|
166
193
|
};
|
|
167
194
|
modelList.onCancel = () => finish(undefined);
|
|
168
|
-
screen.setStep(
|
|
195
|
+
screen.setStep(translate(locale, "selectProviderModel", choice.label), modelList);
|
|
169
196
|
tui.setFocus(modelList);
|
|
170
197
|
tui.requestRender(true);
|
|
171
198
|
};
|
|
172
|
-
const
|
|
199
|
+
const showCustom = () => {
|
|
200
|
+
const protocolList = onboardingSelectList(customApiChoices());
|
|
201
|
+
protocolList.onSelect = (item) => {
|
|
202
|
+
const api = item.value;
|
|
203
|
+
const baseUrlInput = new Input({ cancelOnEndOfTransmission: true });
|
|
204
|
+
baseUrlInput.onSubmit = (value) => {
|
|
205
|
+
let baseUrl;
|
|
206
|
+
try {
|
|
207
|
+
baseUrl = validateCustomBaseUrl(value);
|
|
208
|
+
}
|
|
209
|
+
catch (cause) {
|
|
210
|
+
screen.setError(cause instanceof Error ? cause.message : translate(locale, "customBaseUrlInvalid"));
|
|
211
|
+
tui.requestRender(true);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const keyInput = new Input({ mask: "*", cancelOnEndOfTransmission: true });
|
|
215
|
+
keyInput.onSubmit = (keyValue) => {
|
|
216
|
+
const apiKey = keyValue.trim();
|
|
217
|
+
if (!apiKey) {
|
|
218
|
+
screen.setError(translate(locale, "apiKeyRequired"));
|
|
219
|
+
tui.requestRender(true);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const modelInput = new Input({ cancelOnEndOfTransmission: true });
|
|
223
|
+
modelInput.onSubmit = (modelValue) => {
|
|
224
|
+
const modelId = modelValue.trim();
|
|
225
|
+
if (!modelId) {
|
|
226
|
+
screen.setError(translate(locale, "modelIdRequired"));
|
|
227
|
+
tui.requestRender(true);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (saving || settled)
|
|
231
|
+
return;
|
|
232
|
+
saving = true;
|
|
233
|
+
void saveGlobalCustomProvider(options.agentDir, { api, baseUrl, apiKey, modelId })
|
|
234
|
+
.then((custom) => {
|
|
235
|
+
const providers = [
|
|
236
|
+
...options.configuration.providers.filter((provider) => provider.id !== "custom"),
|
|
237
|
+
custom,
|
|
238
|
+
];
|
|
239
|
+
finish(resolveStartupRuntime({ ...options.configuration.environment, DI_CODE_PROVIDER: "custom", DI_CODE_MODEL: modelId }, providers, { providerId: "custom", modelId }));
|
|
240
|
+
})
|
|
241
|
+
.catch(fail);
|
|
242
|
+
};
|
|
243
|
+
modelInput.onEscape = () => finish(undefined);
|
|
244
|
+
screen.setStep(translate(locale, "enterCustomModelId"), modelInput);
|
|
245
|
+
tui.setFocus(modelInput);
|
|
246
|
+
tui.requestRender(true);
|
|
247
|
+
};
|
|
248
|
+
keyInput.onEscape = () => finish(undefined);
|
|
249
|
+
screen.setStep(translate(locale, "enterCustomApiKey"), keyInput);
|
|
250
|
+
tui.setFocus(keyInput);
|
|
251
|
+
tui.requestRender(true);
|
|
252
|
+
};
|
|
253
|
+
baseUrlInput.onEscape = () => finish(undefined);
|
|
254
|
+
screen.setStep(translate(locale, "enterCustomBaseUrl"), baseUrlInput);
|
|
255
|
+
tui.setFocus(baseUrlInput);
|
|
256
|
+
tui.requestRender(true);
|
|
257
|
+
};
|
|
258
|
+
protocolList.onCancel = () => finish(undefined);
|
|
259
|
+
screen.setStep(translate(locale, "selectCustomApi"), protocolList);
|
|
260
|
+
tui.setFocus(protocolList);
|
|
261
|
+
tui.requestRender(true);
|
|
262
|
+
};
|
|
263
|
+
const providerList = onboardingSelectList(providerChoices(locale));
|
|
173
264
|
providerList.onSelect = (item) => {
|
|
174
|
-
const choice = providerChoices().find((candidate) => candidate.value === item.value);
|
|
175
|
-
if (choice)
|
|
265
|
+
const choice = providerChoices(locale).find((candidate) => candidate.value === item.value);
|
|
266
|
+
if (choice?.providerId === "custom")
|
|
267
|
+
showCustom();
|
|
268
|
+
else if (choice)
|
|
176
269
|
showModels(choice);
|
|
177
270
|
};
|
|
178
271
|
providerList.onCancel = () => finish(undefined);
|
|
179
|
-
screen.setStep(
|
|
272
|
+
screen.setStep(translate(locale, "selectProvider"), providerList);
|
|
180
273
|
tui.setFocus(providerList);
|
|
181
274
|
tui.requestRender(true);
|
|
182
275
|
});
|
|
@@ -184,15 +277,19 @@ function startProviderOnboarding(options, tui, screen, complete, failure, forceA
|
|
|
184
277
|
export function runProviderOnboarding(options) {
|
|
185
278
|
const tui = new TUI(options.terminal);
|
|
186
279
|
const screen = new OnboardingScreen();
|
|
187
|
-
|
|
280
|
+
const locale = options.configuration.locale ?? DEFAULT_LOCALE;
|
|
281
|
+
tui.addChild(new Box(screen, { border: "rounded", padding: 1, title: translate(locale, "providerSetup") }));
|
|
188
282
|
tui.start();
|
|
189
283
|
return startProviderOnboarding(options, tui, screen, (runtime) => {
|
|
190
|
-
tui.stop({
|
|
191
|
-
|
|
284
|
+
tui.stop({
|
|
285
|
+
finalLines: [translate(locale, runtime ? "providerConfigured" : "providerSetupCancelled")],
|
|
286
|
+
});
|
|
287
|
+
}, () => tui.stop({ finalLines: [translate(locale, "providerSetupFailed")] }), false);
|
|
192
288
|
}
|
|
193
289
|
export function showInteractiveProviderOnboarding(options) {
|
|
194
290
|
const screen = new OnboardingScreen();
|
|
195
|
-
const
|
|
291
|
+
const locale = options.configuration.locale ?? DEFAULT_LOCALE;
|
|
292
|
+
const panel = new Box(screen, { border: "rounded", padding: 1, title: translate(locale, "login") });
|
|
196
293
|
const overlay = options.tui.showOverlay(panel, {
|
|
197
294
|
width: "70%",
|
|
198
295
|
maxHeight: "60%",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-onboarding.js","sourceRoot":"","sources":["../src/provider-onboarding.ts"],"names":[],"mappings":"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","sourcesContent":["import { createFauxProvider, MODELS, type Model, type ModelApi } from \"@di-code/ai\";\nimport {\n\tBox,\n\tInput,\n\tKey,\n\tKeybindingsManager,\n\ttype SelectItem,\n\tSelectList,\n\ttype Terminal,\n\tText,\n\tTUI,\n} from \"@di-code/tui\";\nimport type { CliCommand } from \"./cli.ts\";\nimport {\n\tresolveStartupRuntime,\n\ttype StartupConfiguration,\n\ttype StartupRuntime,\n\tsaveGlobalProviderApiKey,\n} from \"./startup.ts\";\n\nexport type StartupRunCommand = Extract<CliCommand, { kind: \"run\" }>;\n\nexport interface ProviderOnboardingOptions {\n\treadonly configuration: StartupConfiguration;\n\treadonly terminal: Terminal;\n\treadonly agentDir: string;\n}\n\nexport interface InteractiveProviderOnboardingOptions {\n\treadonly configuration: StartupConfiguration;\n\treadonly agentDir: string;\n\treadonly tui: TUI;\n}\n\nexport function shouldStartProviderOnboarding(\n\tcommand: StartupRunCommand,\n\tisInteractiveTerminal: boolean,\n\tconfiguration: StartupConfiguration,\n): boolean {\n\treturn (\n\t\tcommand.mode === \"interactive\" &&\n\t\tisInteractiveTerminal &&\n\t\tconfiguration.providers.length === 0 &&\n\t\t!configuration.environment.DI_CODE_PROVIDER?.trim()\n\t);\n}\n\ninterface OnboardingChoice extends SelectItem {\n\treadonly providerId: \"openai\" | \"deepseek\" | \"zhipu\" | \"anthropic\" | \"faux\";\n}\n\nclass OnboardingScreen {\n\tprivate readonly prompt = new Text(\"\", 1, 0);\n\tprivate readonly error = new Text(\"\", 1, 0);\n\tprivate active: SelectList | Input | null = null;\n\n\tsetStep(prompt: string, active: SelectList | Input): void {\n\t\tthis.prompt.setText(prompt);\n\t\tthis.error.setText(\"\");\n\t\tthis.active = active;\n\t}\n\n\tsetError(message: string): void {\n\t\tthis.error.setText(message);\n\t}\n\n\tsetCancelled(): void {\n\t\tthis.prompt.setText(\"Provider setup cancelled.\");\n\t\tthis.error.setText(\"\");\n\t\tthis.active = null;\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [...this.prompt.render(width), ...this.error.render(width), ...(this.active?.render(width) ?? [])];\n\t}\n\n\tinvalidate(): void {\n\t\tthis.prompt.invalidate();\n\t\tthis.error.invalidate();\n\t\tthis.active?.invalidate();\n\t}\n}\n\nfunction providerChoices(): OnboardingChoice[] {\n\treturn [\n\t\t{ value: \"openai\", providerId: \"openai\", label: \"OpenAI\", description: \"OpenAI Responses API\" },\n\t\t{ value: \"deepseek\", providerId: \"deepseek\", label: \"DeepSeek\", description: \"DeepSeek Chat Completions API\" },\n\t\t{ value: \"faux\", providerId: \"faux\", label: \"Faux (offline)\", description: \"Deterministic local provider\" },\n\t\t{ value: \"zhipu\", providerId: \"zhipu\", label: \"Zhipu AI\", description: \"GLM Chat Completions API\" },\n\t\t{ value: \"anthropic\", providerId: \"anthropic\", label: \"Anthropic\", description: \"Claude Messages API\" },\n\t];\n}\n\nfunction modelsFor(providerId: OnboardingChoice[\"providerId\"]): readonly Model[] {\n\tif (providerId === \"faux\") return [createFauxProvider({ responses: [] }).model];\n\tconst models = MODELS.filter((model) => model.provider === providerId);\n\tif (providerId === \"openai\") {\n\t\tconst preferred = models.find((model) => model.id === \"gpt-4o\");\n\t\treturn preferred ? [preferred, ...models.filter((model) => model !== preferred)] : models;\n\t}\n\tif (providerId === \"zhipu\") {\n\t\tconst preferred = models.find((model) => model.id === \"glm-5.3\");\n\t\treturn preferred ? [preferred, ...models.filter((model) => model !== preferred)] : models;\n\t}\n\tif (providerId === \"anthropic\") {\n\t\tconst preferred = models.find((model) => model.id === \"claude-sonnet-4-5\");\n\t\treturn preferred ? [preferred, ...models.filter((model) => model !== preferred)] : models;\n\t}\n\treturn models;\n}\n\nfunction apiKeyEnvironmentVariable(providerId: OnboardingChoice[\"providerId\"]): string | undefined {\n\tif (providerId === \"openai\") return \"OPENAI_API_KEY\";\n\tif (providerId === \"deepseek\") return \"DEEPSEEK_API_KEY\";\n\tif (providerId === \"zhipu\") return \"ZAI_API_KEY\";\n\tif (providerId === \"anthropic\") return \"ANTHROPIC_API_KEY\";\n\treturn undefined;\n}\n\nfunction providerApi(providerId: OnboardingChoice[\"providerId\"]): Exclude<ModelApi, \"faux\"> | undefined {\n\tif (providerId === \"openai\") return \"openai-responses\";\n\tif (providerId === \"deepseek\" || providerId === \"zhipu\") return \"openai-chat-completions\";\n\tif (providerId === \"anthropic\") return \"anthropic-messages\";\n\treturn undefined;\n}\n\nfunction modelChoices(models: readonly Model[]): SelectItem[] {\n\treturn models.map((model) => ({\n\t\tvalue: model.id,\n\t\tlabel: model.name,\n\t\tdescription: `${model.id}${model.reasoning ? \" - reasoning\" : \"\"}`,\n\t}));\n}\n\nfunction onboardingSelectList(items: readonly SelectItem[]): SelectList {\n\treturn new SelectList(items, {\n\t\tkeybindings: new KeybindingsManager({\n\t\t\t\"tui.select.cancel\": [Key.escape, Key.ctrl(\"c\"), Key.ctrl(\"d\")],\n\t\t}),\n\t});\n}\n\nfunction startProviderOnboarding(\n\toptions: Pick<ProviderOnboardingOptions, \"configuration\" | \"agentDir\">,\n\ttui: TUI,\n\tscreen: OnboardingScreen,\n\tcomplete: (runtime: StartupRuntime | undefined) => void,\n\tfailure: () => void,\n\tforceApiKey: boolean,\n): Promise<StartupRuntime | undefined> {\n\treturn new Promise((resolve, reject) => {\n\t\tlet settled = false;\n\t\tlet saving = false;\n\t\tlet selectedProvider: OnboardingChoice[\"providerId\"] | undefined;\n\n\t\tconst finish = (runtime: StartupRuntime | undefined): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tif (runtime === undefined) screen.setCancelled();\n\t\t\tcomplete(runtime);\n\t\t\tresolve(runtime);\n\t\t};\n\n\t\tconst fail = (cause: unknown): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tfailure();\n\t\t\treject(cause);\n\t\t};\n\n\t\tconst finishSelection = async (modelId: string, apiKey?: string): Promise<void> => {\n\t\t\tif (!selectedProvider || saving || settled) return;\n\t\t\tsaving = true;\n\t\t\tconst keyVariable = apiKeyEnvironmentVariable(selectedProvider);\n\t\t\tconst environment = {\n\t\t\t\t...options.configuration.environment,\n\t\t\t\tDI_CODE_PROVIDER: selectedProvider,\n\t\t\t\tDI_CODE_MODEL: modelId,\n\t\t\t\t...(keyVariable && apiKey ? { [keyVariable]: apiKey } : {}),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst api = providerApi(selectedProvider);\n\t\t\t\tif (apiKey && api) await saveGlobalProviderApiKey(options.agentDir, selectedProvider, api, apiKey, modelId);\n\t\t\t\tfinish(resolveStartupRuntime(environment, options.configuration.providers));\n\t\t\t} catch (cause) {\n\t\t\t\tfail(cause);\n\t\t\t}\n\t\t};\n\n\t\tconst showKey = (modelId: string, keyVariable: string): void => {\n\t\t\tconst input = new Input({ mask: \"*\", cancelOnEndOfTransmission: true });\n\t\t\tinput.onSubmit = (value) => {\n\t\t\t\tconst key = value.trim();\n\t\t\t\tif (key.length === 0) {\n\t\t\t\t\tscreen.setError(\"API key cannot be empty. Press Escape to cancel.\");\n\t\t\t\t\ttui.requestRender(true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvoid finishSelection(modelId, key);\n\t\t\t};\n\t\t\tinput.onEscape = () => finish(undefined);\n\t\t\tscreen.setStep(`Enter ${keyVariable} (input is hidden):`, input);\n\t\t\ttui.setFocus(input);\n\t\t\ttui.requestRender(true);\n\t\t};\n\n\t\tconst showModels = (choice: OnboardingChoice): void => {\n\t\t\tselectedProvider = choice.providerId;\n\t\t\tconst models = modelsFor(choice.providerId);\n\t\t\tconst modelList = onboardingSelectList(modelChoices(models));\n\t\t\tmodelList.onSelect = (item) => {\n\t\t\t\tconst keyVariable = apiKeyEnvironmentVariable(choice.providerId);\n\t\t\t\tconst existingKey = keyVariable ? options.configuration.environment[keyVariable]?.trim() : undefined;\n\t\t\t\tif (keyVariable && (forceApiKey || !existingKey)) showKey(item.value, keyVariable);\n\t\t\t\telse void finishSelection(item.value);\n\t\t\t};\n\t\t\tmodelList.onCancel = () => finish(undefined);\n\t\t\tscreen.setStep(`Select a ${choice.label} model:`, modelList);\n\t\t\ttui.setFocus(modelList);\n\t\t\ttui.requestRender(true);\n\t\t};\n\n\t\tconst providerList = onboardingSelectList(providerChoices());\n\t\tproviderList.onSelect = (item) => {\n\t\t\tconst choice = providerChoices().find((candidate) => candidate.value === item.value);\n\t\t\tif (choice) showModels(choice);\n\t\t};\n\t\tproviderList.onCancel = () => finish(undefined);\n\t\tscreen.setStep(\"Select a provider:\", providerList);\n\t\ttui.setFocus(providerList);\n\t\ttui.requestRender(true);\n\t});\n}\n\nexport function runProviderOnboarding(options: ProviderOnboardingOptions): Promise<StartupRuntime | undefined> {\n\tconst tui = new TUI(options.terminal);\n\tconst screen = new OnboardingScreen();\n\ttui.addChild(new Box(screen, { border: \"rounded\", padding: 1, title: \"di-code provider setup\" }));\n\ttui.start();\n\treturn startProviderOnboarding(\n\t\toptions,\n\t\ttui,\n\t\tscreen,\n\t\t(runtime) => {\n\t\t\ttui.stop({ finalLines: runtime ? [\"Provider configured for this run.\"] : [\"Provider setup cancelled.\"] });\n\t\t},\n\t\t() => tui.stop({ finalLines: [\"Provider setup failed.\"] }),\n\t\tfalse,\n\t);\n}\n\nexport function showInteractiveProviderOnboarding(\n\toptions: InteractiveProviderOnboardingOptions,\n): Promise<StartupRuntime | undefined> {\n\tconst screen = new OnboardingScreen();\n\tconst panel = new Box(screen, { border: \"rounded\", padding: 1, title: \"di-code login\" });\n\tconst overlay = options.tui.showOverlay(panel, {\n\t\twidth: \"70%\",\n\t\tmaxHeight: \"60%\",\n\t\tanchor: \"center\",\n\t\tmargin: 1,\n\t});\n\treturn startProviderOnboarding(\n\t\toptions,\n\t\toptions.tui,\n\t\tscreen,\n\t\t() => overlay.hide(),\n\t\t() => overlay.hide(),\n\t\ttrue,\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"provider-onboarding.js","sourceRoot":"","sources":["../src/provider-onboarding.ts"],"names":[],"mappings":"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","sourcesContent":["import { createFauxProvider, MODELS, type Model, type ModelApi } from \"@di-code/ai\";\nimport {\n\tBox,\n\tInput,\n\tKey,\n\tKeybindingsManager,\n\ttype SelectItem,\n\tSelectList,\n\ttype Terminal,\n\tText,\n\tTUI,\n} from \"@di-code/tui\";\nimport type { CliCommand } from \"./cli.ts\";\nimport { DEFAULT_LOCALE, type Locale, translate } from \"./i18n.ts\";\nimport {\n\tresolveStartupRuntime,\n\ttype StartupConfiguration,\n\ttype StartupRuntime,\n\tsaveGlobalCustomProvider,\n\tsaveGlobalProviderApiKey,\n\tvalidateCustomBaseUrl,\n} from \"./startup.ts\";\n\nexport type StartupRunCommand = Extract<CliCommand, { kind: \"run\" }>;\n\nexport interface ProviderOnboardingOptions {\n\treadonly configuration: StartupConfiguration;\n\treadonly terminal: Terminal;\n\treadonly agentDir: string;\n}\n\nexport interface InteractiveProviderOnboardingOptions {\n\treadonly configuration: StartupConfiguration;\n\treadonly agentDir: string;\n\treadonly tui: TUI;\n}\n\nexport function shouldStartProviderOnboarding(\n\tcommand: StartupRunCommand,\n\tisInteractiveTerminal: boolean,\n\tconfiguration: StartupConfiguration,\n): boolean {\n\treturn (\n\t\tcommand.mode === \"interactive\" &&\n\t\tisInteractiveTerminal &&\n\t\t!configuration.environment.DI_CODE_PROVIDER?.trim() &&\n\t\t!configuration.defaults?.providerId &&\n\t\tconfiguration.providers.length !== 1\n\t);\n}\n\ninterface OnboardingChoice extends SelectItem {\n\treadonly providerId: \"openai\" | \"deepseek\" | \"kimi\" | \"zhipu\" | \"anthropic\" | \"faux\" | \"custom\";\n}\n\nclass OnboardingScreen {\n\tprivate readonly prompt = new Text(\"\", 1, 0);\n\tprivate readonly error = new Text(\"\", 1, 0);\n\tprivate active: SelectList | Input | null = null;\n\n\tsetStep(prompt: string, active: SelectList | Input): void {\n\t\tthis.prompt.setText(prompt);\n\t\tthis.error.setText(\"\");\n\t\tthis.active = active;\n\t}\n\n\tsetError(message: string): void {\n\t\tthis.error.setText(message);\n\t}\n\n\tsetCancelled(locale: Locale): void {\n\t\tthis.prompt.setText(translate(locale, \"providerSetupCancelled\"));\n\t\tthis.error.setText(\"\");\n\t\tthis.active = null;\n\t}\n\n\trender(width: number): string[] {\n\t\treturn [...this.prompt.render(width), ...this.error.render(width), ...(this.active?.render(width) ?? [])];\n\t}\n\n\tinvalidate(): void {\n\t\tthis.prompt.invalidate();\n\t\tthis.error.invalidate();\n\t\tthis.active?.invalidate();\n\t}\n}\n\nfunction providerChoices(locale: Locale): OnboardingChoice[] {\n\treturn [\n\t\t{ value: \"openai\", providerId: \"openai\", label: \"OpenAI\", description: \"OpenAI Responses API\" },\n\t\t{ value: \"deepseek\", providerId: \"deepseek\", label: \"DeepSeek\", description: \"DeepSeek Chat Completions API\" },\n\t\t{ value: \"faux\", providerId: \"faux\", label: \"Faux (offline)\", description: translate(locale, \"fauxProvider\") },\n\t\t{ value: \"zhipu\", providerId: \"zhipu\", label: \"Zhipu AI\", description: \"GLM Chat Completions API\" },\n\t\t{ value: \"anthropic\", providerId: \"anthropic\", label: \"Anthropic\", description: \"Claude Messages API\" },\n\t\t{\n\t\t\tvalue: \"custom\",\n\t\t\tproviderId: \"custom\",\n\t\t\tlabel: translate(locale, \"customProvider\"),\n\t\t\tdescription: translate(locale, \"customProviderDescription\"),\n\t\t},\n\t\t{ value: \"kimi\", providerId: \"kimi\", label: \"Kimi\", description: \"Kimi Coding Chat Completions API\" },\n\t];\n}\n\nfunction modelsFor(providerId: OnboardingChoice[\"providerId\"]): readonly Model[] {\n\tif (providerId === \"custom\") return [];\n\tif (providerId === \"faux\") return [createFauxProvider({ responses: [] }).model];\n\tconst models = MODELS.filter((model) => model.provider === providerId);\n\tif (providerId === \"openai\") {\n\t\tconst preferred = models.find((model) => model.id === \"gpt-4o\");\n\t\treturn preferred ? [preferred, ...models.filter((model) => model !== preferred)] : models;\n\t}\n\tif (providerId === \"zhipu\") {\n\t\tconst preferred = models.find((model) => model.id === \"glm-5.3\");\n\t\treturn preferred ? [preferred, ...models.filter((model) => model !== preferred)] : models;\n\t}\n\tif (providerId === \"anthropic\") {\n\t\tconst preferred = models.find((model) => model.id === \"claude-sonnet-4-5\");\n\t\treturn preferred ? [preferred, ...models.filter((model) => model !== preferred)] : models;\n\t}\n\treturn models;\n}\n\nfunction apiKeyEnvironmentVariable(providerId: OnboardingChoice[\"providerId\"]): string | undefined {\n\tif (providerId === \"openai\") return \"OPENAI_API_KEY\";\n\tif (providerId === \"deepseek\") return \"DEEPSEEK_API_KEY\";\n\tif (providerId === \"kimi\") return \"KIMI_API_KEY\";\n\tif (providerId === \"zhipu\") return \"ZAI_API_KEY\";\n\tif (providerId === \"anthropic\") return \"ANTHROPIC_API_KEY\";\n\treturn undefined;\n}\n\nfunction providerApi(providerId: OnboardingChoice[\"providerId\"]): Exclude<ModelApi, \"faux\"> | undefined {\n\tif (providerId === \"openai\") return \"openai-responses\";\n\tif (providerId === \"deepseek\" || providerId === \"zhipu\") return \"openai-chat-completions\";\n\tif (providerId === \"kimi\") return \"openai-chat-completions\";\n\tif (providerId === \"anthropic\") return \"anthropic-messages\";\n\treturn undefined;\n}\n\nfunction customApiChoices(): SelectItem[] {\n\treturn [\n\t\t{ value: \"openai-responses\", label: \"OpenAI Responses\", description: \"OpenAI Responses API\" },\n\t\t{\n\t\t\tvalue: \"openai-chat-completions\",\n\t\t\tlabel: \"OpenAI Chat Completions\",\n\t\t\tdescription: \"Chat Completions-compatible API\",\n\t\t},\n\t\t{ value: \"anthropic-messages\", label: \"Anthropic Messages\", description: \"Anthropic Messages API\" },\n\t];\n}\n\nfunction modelChoices(models: readonly Model[], locale: Locale): SelectItem[] {\n\treturn models.map((model) => ({\n\t\tvalue: model.id,\n\t\tlabel: model.name,\n\t\tdescription: `${model.id}${model.reasoning ? ` - ${translate(locale, \"reasoning\")}` : \"\"}`,\n\t}));\n}\n\nfunction onboardingSelectList(items: readonly SelectItem[]): SelectList {\n\treturn new SelectList(items, {\n\t\tkeybindings: new KeybindingsManager({\n\t\t\t\"tui.select.cancel\": [Key.escape, Key.ctrl(\"c\"), Key.ctrl(\"d\")],\n\t\t}),\n\t});\n}\n\nfunction startProviderOnboarding(\n\toptions: Pick<ProviderOnboardingOptions, \"configuration\" | \"agentDir\">,\n\ttui: TUI,\n\tscreen: OnboardingScreen,\n\tcomplete: (runtime: StartupRuntime | undefined) => void,\n\tfailure: () => void,\n\tforceApiKey: boolean,\n): Promise<StartupRuntime | undefined> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst locale = options.configuration.locale ?? DEFAULT_LOCALE;\n\t\tlet settled = false;\n\t\tlet saving = false;\n\t\tlet selectedProvider: OnboardingChoice[\"providerId\"] | undefined;\n\n\t\tconst finish = (runtime: StartupRuntime | undefined): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tif (runtime === undefined) screen.setCancelled(locale);\n\t\t\tcomplete(runtime);\n\t\t\tresolve(runtime);\n\t\t};\n\n\t\tconst fail = (cause: unknown): void => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tfailure();\n\t\t\treject(cause);\n\t\t};\n\n\t\tconst finishSelection = async (modelId: string, apiKey?: string): Promise<void> => {\n\t\t\tif (!selectedProvider || saving || settled) return;\n\t\t\tsaving = true;\n\t\t\tconst keyVariable = apiKeyEnvironmentVariable(selectedProvider);\n\t\t\tconst environment = {\n\t\t\t\t...options.configuration.environment,\n\t\t\t\tDI_CODE_PROVIDER: selectedProvider,\n\t\t\t\tDI_CODE_MODEL: modelId,\n\t\t\t\t...(keyVariable && apiKey ? { [keyVariable]: apiKey } : {}),\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tconst api = providerApi(selectedProvider);\n\t\t\t\tif (apiKey && api) await saveGlobalProviderApiKey(options.agentDir, selectedProvider, api, apiKey, modelId);\n\t\t\t\tfinish(resolveStartupRuntime(environment, options.configuration.providers));\n\t\t\t} catch (cause) {\n\t\t\t\tfail(cause);\n\t\t\t}\n\t\t};\n\n\t\tconst showKey = (modelId: string, keyVariable: string): void => {\n\t\t\tconst input = new Input({ mask: \"*\", cancelOnEndOfTransmission: true });\n\t\t\tinput.onSubmit = (value) => {\n\t\t\t\tconst key = value.trim();\n\t\t\t\tif (key.length === 0) {\n\t\t\t\t\tscreen.setError(translate(locale, \"apiKeyRequired\"));\n\t\t\t\t\ttui.requestRender(true);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvoid finishSelection(modelId, key);\n\t\t\t};\n\t\t\tinput.onEscape = () => finish(undefined);\n\t\t\tscreen.setStep(translate(locale, \"enterApiKey\", keyVariable), input);\n\t\t\ttui.setFocus(input);\n\t\t\ttui.requestRender(true);\n\t\t};\n\n\t\tconst showModels = (choice: OnboardingChoice): void => {\n\t\t\tselectedProvider = choice.providerId;\n\t\t\tconst models = modelsFor(choice.providerId);\n\t\t\tconst modelList = onboardingSelectList(modelChoices(models, locale));\n\t\t\tmodelList.onSelect = (item) => {\n\t\t\t\tconst keyVariable = apiKeyEnvironmentVariable(choice.providerId);\n\t\t\t\tconst existingKey = keyVariable ? options.configuration.environment[keyVariable]?.trim() : undefined;\n\t\t\t\tif (keyVariable && (forceApiKey || !existingKey)) showKey(item.value, keyVariable);\n\t\t\t\telse void finishSelection(item.value);\n\t\t\t};\n\t\t\tmodelList.onCancel = () => finish(undefined);\n\t\t\tscreen.setStep(translate(locale, \"selectProviderModel\", choice.label), modelList);\n\t\t\ttui.setFocus(modelList);\n\t\t\ttui.requestRender(true);\n\t\t};\n\n\t\tconst showCustom = (): void => {\n\t\t\tconst protocolList = onboardingSelectList(customApiChoices());\n\t\t\tprotocolList.onSelect = (item) => {\n\t\t\t\tconst api = item.value as Exclude<ModelApi, \"faux\">;\n\t\t\t\tconst baseUrlInput = new Input({ cancelOnEndOfTransmission: true });\n\t\t\t\tbaseUrlInput.onSubmit = (value) => {\n\t\t\t\t\tlet baseUrl: string;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tbaseUrl = validateCustomBaseUrl(value);\n\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\tscreen.setError(cause instanceof Error ? cause.message : translate(locale, \"customBaseUrlInvalid\"));\n\t\t\t\t\t\ttui.requestRender(true);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst keyInput = new Input({ mask: \"*\", cancelOnEndOfTransmission: true });\n\t\t\t\t\tkeyInput.onSubmit = (keyValue) => {\n\t\t\t\t\t\tconst apiKey = keyValue.trim();\n\t\t\t\t\t\tif (!apiKey) {\n\t\t\t\t\t\t\tscreen.setError(translate(locale, \"apiKeyRequired\"));\n\t\t\t\t\t\t\ttui.requestRender(true);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst modelInput = new Input({ cancelOnEndOfTransmission: true });\n\t\t\t\t\t\tmodelInput.onSubmit = (modelValue) => {\n\t\t\t\t\t\t\tconst modelId = modelValue.trim();\n\t\t\t\t\t\t\tif (!modelId) {\n\t\t\t\t\t\t\t\tscreen.setError(translate(locale, \"modelIdRequired\"));\n\t\t\t\t\t\t\t\ttui.requestRender(true);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (saving || settled) return;\n\t\t\t\t\t\t\tsaving = true;\n\t\t\t\t\t\t\tvoid saveGlobalCustomProvider(options.agentDir, { api, baseUrl, apiKey, modelId })\n\t\t\t\t\t\t\t\t.then((custom) => {\n\t\t\t\t\t\t\t\t\tconst providers = [\n\t\t\t\t\t\t\t\t\t\t...options.configuration.providers.filter((provider) => provider.id !== \"custom\"),\n\t\t\t\t\t\t\t\t\t\tcustom,\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\tfinish(\n\t\t\t\t\t\t\t\t\t\tresolveStartupRuntime(\n\t\t\t\t\t\t\t\t\t\t\t{ ...options.configuration.environment, DI_CODE_PROVIDER: \"custom\", DI_CODE_MODEL: modelId },\n\t\t\t\t\t\t\t\t\t\t\tproviders,\n\t\t\t\t\t\t\t\t\t\t\t{ providerId: \"custom\", modelId },\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\t\t\t})\n\t\t\t\t\t\t\t\t.catch(fail);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmodelInput.onEscape = () => finish(undefined);\n\t\t\t\t\t\tscreen.setStep(translate(locale, \"enterCustomModelId\"), modelInput);\n\t\t\t\t\t\ttui.setFocus(modelInput);\n\t\t\t\t\t\ttui.requestRender(true);\n\t\t\t\t\t};\n\t\t\t\t\tkeyInput.onEscape = () => finish(undefined);\n\t\t\t\t\tscreen.setStep(translate(locale, \"enterCustomApiKey\"), keyInput);\n\t\t\t\t\ttui.setFocus(keyInput);\n\t\t\t\t\ttui.requestRender(true);\n\t\t\t\t};\n\t\t\t\tbaseUrlInput.onEscape = () => finish(undefined);\n\t\t\t\tscreen.setStep(translate(locale, \"enterCustomBaseUrl\"), baseUrlInput);\n\t\t\t\ttui.setFocus(baseUrlInput);\n\t\t\t\ttui.requestRender(true);\n\t\t\t};\n\t\t\tprotocolList.onCancel = () => finish(undefined);\n\t\t\tscreen.setStep(translate(locale, \"selectCustomApi\"), protocolList);\n\t\t\ttui.setFocus(protocolList);\n\t\t\ttui.requestRender(true);\n\t\t};\n\n\t\tconst providerList = onboardingSelectList(providerChoices(locale));\n\t\tproviderList.onSelect = (item) => {\n\t\t\tconst choice = providerChoices(locale).find((candidate) => candidate.value === item.value);\n\t\t\tif (choice?.providerId === \"custom\") showCustom();\n\t\t\telse if (choice) showModels(choice);\n\t\t};\n\t\tproviderList.onCancel = () => finish(undefined);\n\t\tscreen.setStep(translate(locale, \"selectProvider\"), providerList);\n\t\ttui.setFocus(providerList);\n\t\ttui.requestRender(true);\n\t});\n}\n\nexport function runProviderOnboarding(options: ProviderOnboardingOptions): Promise<StartupRuntime | undefined> {\n\tconst tui = new TUI(options.terminal);\n\tconst screen = new OnboardingScreen();\n\tconst locale = options.configuration.locale ?? DEFAULT_LOCALE;\n\ttui.addChild(new Box(screen, { border: \"rounded\", padding: 1, title: translate(locale, \"providerSetup\") }));\n\ttui.start();\n\treturn startProviderOnboarding(\n\t\toptions,\n\t\ttui,\n\t\tscreen,\n\t\t(runtime) => {\n\t\t\ttui.stop({\n\t\t\t\tfinalLines: [translate(locale, runtime ? \"providerConfigured\" : \"providerSetupCancelled\")],\n\t\t\t});\n\t\t},\n\t\t() => tui.stop({ finalLines: [translate(locale, \"providerSetupFailed\")] }),\n\t\tfalse,\n\t);\n}\n\nexport function showInteractiveProviderOnboarding(\n\toptions: InteractiveProviderOnboardingOptions,\n): Promise<StartupRuntime | undefined> {\n\tconst screen = new OnboardingScreen();\n\tconst locale = options.configuration.locale ?? DEFAULT_LOCALE;\n\tconst panel = new Box(screen, { border: \"rounded\", padding: 1, title: translate(locale, \"login\") });\n\tconst overlay = options.tui.showOverlay(panel, {\n\t\twidth: \"70%\",\n\t\tmaxHeight: \"60%\",\n\t\tanchor: \"center\",\n\t\tmargin: 1,\n\t});\n\treturn startProviderOnboarding(\n\t\toptions,\n\t\toptions.tui,\n\t\tscreen,\n\t\t() => overlay.hide(),\n\t\t() => overlay.hide(),\n\t\ttrue,\n\t);\n}\n"]}
|
package/dist/startup.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Model, type ModelApi, type Provider } from "@di-code/ai";
|
|
2
|
+
import { type Locale } from "./i18n.ts";
|
|
2
3
|
export interface StartupRuntime {
|
|
3
4
|
readonly provider: Provider;
|
|
4
5
|
readonly model: Model;
|
|
@@ -15,15 +16,37 @@ export interface StartupConfiguration {
|
|
|
15
16
|
readonly environment: Environment;
|
|
16
17
|
readonly providers: readonly StartupProviderConfiguration[];
|
|
17
18
|
readonly defaults?: StartupDefaults;
|
|
19
|
+
readonly locale?: Locale;
|
|
18
20
|
}
|
|
19
21
|
export interface StartupDefaults {
|
|
20
22
|
readonly providerId?: string;
|
|
21
23
|
readonly modelId?: string;
|
|
22
24
|
}
|
|
25
|
+
export interface CustomProviderInput {
|
|
26
|
+
readonly api: Exclude<ModelApi, "faux">;
|
|
27
|
+
readonly baseUrl: string;
|
|
28
|
+
readonly apiKey: string;
|
|
29
|
+
readonly modelId: string;
|
|
30
|
+
}
|
|
23
31
|
type Environment = Readonly<Record<string, string | undefined>>;
|
|
24
32
|
export declare function resolveStartupArgs(args: readonly string[]): readonly string[];
|
|
33
|
+
/** Validates a Custom onboarding endpoint without issuing a network request. */
|
|
34
|
+
export declare function validateCustomBaseUrl(value: string): string;
|
|
35
|
+
/** Builds the single user-managed Custom provider from validated onboarding input. */
|
|
36
|
+
export declare function createCustomProviderConfiguration(input: CustomProviderInput): StartupProviderConfiguration;
|
|
37
|
+
/** Persists a user-level terminal language preference without changing project settings. */
|
|
38
|
+
export declare function saveGlobalLocale(agentDir: string, locale: Locale): Promise<void>;
|
|
25
39
|
export declare function saveGlobalProviderApiKey(agentDir: string, providerId: string, api: Exclude<ModelApi, "faux">, apiKey: string, modelId?: string): Promise<void>;
|
|
26
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Replaces the user-managed `custom` provider while retaining other global
|
|
42
|
+
* providers and preferences. The key is intentionally stored only here, never
|
|
43
|
+
* in project settings or process environment.
|
|
44
|
+
*/
|
|
45
|
+
export declare function saveGlobalCustomProvider(agentDir: string, input: CustomProviderInput): Promise<StartupProviderConfiguration>;
|
|
46
|
+
/**
|
|
47
|
+
* Removes one persisted credential and clears it as the default when applicable.
|
|
48
|
+
* Environment variables and other Provider configuration remain untouched.
|
|
49
|
+
*/
|
|
27
50
|
export declare function removeGlobalProviderApiKey(agentDir: string, providerId: string): Promise<boolean>;
|
|
28
51
|
export declare function resolveStartupRuntime(env: Environment, providers: readonly StartupProviderConfiguration[], defaults?: StartupDefaults): StartupRuntime;
|
|
29
52
|
export declare function loadStartupConfiguration(cwd: string, environment?: Environment, agentDir?: string): Promise<StartupConfiguration>;
|
package/dist/startup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../src/startup.ts"],"names":[],"mappings":"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"}
|