@di-code/coding-agent 0.1.9 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +7 -0
  2. package/compositions/base.yml +3 -0
  3. package/dist/compositions.d.ts.map +1 -1
  4. package/dist/compositions.js +2 -0
  5. package/dist/compositions.js.map +1 -1
  6. package/dist/core/image-input.d.ts +1 -1
  7. package/dist/core/image-input.d.ts.map +1 -1
  8. package/dist/core/image-input.js +15 -4
  9. package/dist/core/image-input.js.map +1 -1
  10. package/dist/core/session/session-manager.d.ts +18 -1
  11. package/dist/core/session/session-manager.d.ts.map +1 -1
  12. package/dist/core/session/session-manager.js +90 -1
  13. package/dist/core/session/session-manager.js.map +1 -1
  14. package/dist/core/session/session-storage.d.ts +2 -0
  15. package/dist/core/session/session-storage.d.ts.map +1 -1
  16. package/dist/core/session/session-storage.js +34 -2
  17. package/dist/core/session/session-storage.js.map +1 -1
  18. package/dist/core/session/types.d.ts +16 -1
  19. package/dist/core/session/types.d.ts.map +1 -1
  20. package/dist/core/session/types.js.map +1 -1
  21. package/dist/core/session.d.ts +27 -2
  22. package/dist/core/session.d.ts.map +1 -1
  23. package/dist/core/session.js +59 -0
  24. package/dist/core/session.js.map +1 -1
  25. package/dist/entry.js +1 -1
  26. package/dist/entry.js.map +1 -1
  27. package/dist/i18n.js +4 -4
  28. package/dist/i18n.js.map +1 -1
  29. package/dist/interactive-host-entry.d.ts.map +1 -1
  30. package/dist/interactive-host-entry.js +107 -12
  31. package/dist/interactive-host-entry.js.map +1 -1
  32. package/dist/main.d.ts.map +1 -1
  33. package/dist/main.js +8 -1
  34. package/dist/main.js.map +1 -1
  35. package/dist/mcp/config.d.ts.map +1 -1
  36. package/dist/mcp/config.js +19 -0
  37. package/dist/mcp/config.js.map +1 -1
  38. package/dist/mcp-command-entry.d.ts +8 -0
  39. package/dist/mcp-command-entry.d.ts.map +1 -0
  40. package/dist/mcp-command-entry.js +56 -0
  41. package/dist/mcp-command-entry.js.map +1 -0
  42. package/dist/modes/interactive-components.d.ts +8 -0
  43. package/dist/modes/interactive-components.d.ts.map +1 -1
  44. package/dist/modes/interactive-components.js +7 -2
  45. package/dist/modes/interactive-components.js.map +1 -1
  46. package/dist/modes/interactive-state.d.ts.map +1 -1
  47. package/dist/modes/interactive-state.js +1 -4
  48. package/dist/modes/interactive-state.js.map +1 -1
  49. package/dist/modes/interactive.d.ts +4 -0
  50. package/dist/modes/interactive.d.ts.map +1 -1
  51. package/dist/modes/interactive.js +69 -0
  52. package/dist/modes/interactive.js.map +1 -1
  53. package/dist/modes/tree-selector.d.ts.map +1 -1
  54. package/dist/modes/tree-selector.js +5 -4
  55. package/dist/modes/tree-selector.js.map +1 -1
  56. package/dist/rpc/client.d.ts +2 -0
  57. package/dist/rpc/client.d.ts.map +1 -1
  58. package/dist/rpc/client.js +3 -0
  59. package/dist/rpc/client.js.map +1 -1
  60. package/dist/rpc/dispatcher.d.ts +14 -0
  61. package/dist/rpc/dispatcher.d.ts.map +1 -1
  62. package/dist/rpc/dispatcher.js +222 -7
  63. package/dist/rpc/dispatcher.js.map +1 -1
  64. package/dist/rpc/protocol.d.ts +12 -5
  65. package/dist/rpc/protocol.d.ts.map +1 -1
  66. package/dist/rpc/protocol.js +56 -0
  67. package/dist/rpc/protocol.js.map +1 -1
  68. package/dist/rpc/server.d.ts +5 -0
  69. package/dist/rpc/server.d.ts.map +1 -1
  70. package/dist/rpc/server.js +4 -0
  71. package/dist/rpc/server.js.map +1 -1
  72. package/dist/rpc-server-entry.d.ts.map +1 -1
  73. package/dist/rpc-server-entry.js +15 -1
  74. package/dist/rpc-server-entry.js.map +1 -1
  75. package/dist/runtime/product-host.d.ts +7 -0
  76. package/dist/runtime/product-host.d.ts.map +1 -1
  77. package/dist/runtime/product-host.js +29 -9
  78. package/dist/runtime/product-host.js.map +1 -1
  79. package/dist/runtime/session-factory.d.ts +18 -2
  80. package/dist/runtime/session-factory.d.ts.map +1 -1
  81. package/dist/runtime/session-factory.js +286 -23
  82. package/dist/runtime/session-factory.js.map +1 -1
  83. package/dist/runtime/session-host.d.ts +46 -1
  84. package/dist/runtime/session-host.d.ts.map +1 -1
  85. package/dist/runtime/session-host.js +38 -6
  86. package/dist/runtime/session-host.js.map +1 -1
  87. package/dist/ui-host.d.ts.map +1 -1
  88. package/dist/ui-host.js +3 -0
  89. package/dist/ui-host.js.map +1 -1
  90. package/dist/web/assets/index-C2SOU925.css +1 -0
  91. package/dist/web/assets/index-knXkInvO.js +41 -0
  92. package/dist/web/assets/index-knXkInvO.js.map +1 -0
  93. package/dist/web/index.html +2 -2
  94. package/dist/web-command.d.ts.map +1 -1
  95. package/dist/web-command.js +8 -1
  96. package/dist/web-command.js.map +1 -1
  97. package/dist/webui-entry.js +9 -1
  98. package/dist/webui-entry.js.map +1 -1
  99. package/dist/webui.d.ts +10 -0
  100. package/dist/webui.d.ts.map +1 -1
  101. package/dist/webui.js +21 -0
  102. package/dist/webui.js.map +1 -1
  103. package/package.json +11 -9
  104. package/dist/web/assets/index-BwfuGMvv.css +0 -1
  105. package/dist/web/assets/index-DPUaJqFJ.js +0 -41
  106. package/dist/web/assets/index-DPUaJqFJ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"rpc-server-entry.js","sourceRoot":"","sources":["../src/rpc-server-entry.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { modeRegistryKey, rpcMethodRegistryKey, runtimeSelectionKey, workspaceCapabilityKey } from \"@di-code/builtins\";\nimport type { PluginDefinition } from \"@di-code/plugin-runtime\";\nimport { RpcServer } from \"./rpc/server.ts\";\nimport { rpcServerKey } from \"./rpc/server-service.ts\";\nimport { createProductHost } from \"./runtime/product-host.ts\";\nimport { createSessionHost } from \"./runtime/session-host.ts\";\nimport { loadStartupConfiguration, resolveStartupRuntime } from \"./startup.ts\";\n\nexport { type RpcServerService, rpcServerKey } from \"./rpc/server-service.ts\";\n\n/** Creates the process RPC server from composition services and releases it with its owner Fiber. */\nexport const apiVersion = 1 as const;\nexport const name = \"rpc-server\";\nexport const version = \"0.1.7\";\nexport const apply: PluginDefinition[\"apply\"] = async (context, _config, fiber) => {\n\tconst selection = context.require(runtimeSelectionKey).selected();\n\tconst session = await createSessionHost(context, {\n\t\tcwd: context.require(workspaceCapabilityKey).allowedRoot,\n\t\tagentDir: join(homedir(), \".di-code\"),\n\t\tprovider: selection.provider,\n\t\tmodel: selection.model,\n\t});\n\tconst product = createProductHost({\n\t\tcontext,\n\t\tcwd: context.require(workspaceCapabilityKey).allowedRoot,\n\t\tagentDir: join(homedir(), \".di-code\"),\n\t\tprojectTrusted: context.capabilities.trustedProject,\n\t\tprovider: selection.provider,\n\t\tmodel: selection.model,\n\t\truntimeSnapshot: () => {\n\t\t\tconst ui = session.ui();\n\t\t\treturn {\n\t\t\t\tproviderId: ui.providerId,\n\t\t\t\tmodelId: ui.modelId,\n\t\t\t\t...(ui.thinkingLevel ? { thinkingLevel: ui.thinkingLevel } : {}),\n\t\t\t};\n\t\t},\n\t\treloadRuntime: async () => {\n\t\t\tconst cwd = context.require(workspaceCapabilityKey).allowedRoot;\n\t\t\tconst agentDir = join(homedir(), \".di-code\");\n\t\t\tconst configuration = await loadStartupConfiguration(cwd, process.env, agentDir);\n\t\t\tconst runtime = resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);\n\t\t\tsession.setRuntimeValue(runtime.provider, runtime.model);\n\t\t\treturn configuration;\n\t\t},\n\t\treloadConfiguration: () =>\n\t\t\tloadStartupConfiguration(\n\t\t\t\tcontext.require(workspaceCapabilityKey).allowedRoot,\n\t\t\t\tprocess.env,\n\t\t\t\tjoin(homedir(), \".di-code\"),\n\t\t\t),\n\t\trefreshResources: (projectTrusted) => session.refreshResources(projectTrusted),\n\t});\n\tif (!session.state().activeSession) await session.createSession();\n\tconst server = new RpcServer({\n\t\tsession,\n\t\tmethods: context.require(rpcMethodRegistryKey),\n\t\tproductState: { projectTrusted: context.capabilities.trustedProject },\n\t\tproductHost: product,\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t\tonError: (error) => process.stderr.write(`${error.message}\\n`),\n\t});\n\tawait context.require(modeRegistryKey).execute(\"rpc\", { run: () => server.start() });\n\tcontext.set(rpcServerKey, { shutdown: () => server.shutdown(), finished: () => server.finished() });\n\tfiber.addDisposer(async () => {\n\t\tawait server.shutdown();\n\t\tawait product.dispose();\n\t\tawait session.dispose();\n\t});\n};\n"]}
1
+ {"version":3,"file":"rpc-server-entry.js","sourceRoot":"","sources":["../src/rpc-server-entry.ts"],"names":[],"mappings":"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","sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { modeRegistryKey, rpcMethodRegistryKey, runtimeSelectionKey, workspaceCapabilityKey } from \"@di-code/builtins\";\nimport type { PluginDefinition } from \"@di-code/plugin-runtime\";\nimport { createUserInteraction } from \"@di-code/plugin-sdk\";\nimport { RpcServer } from \"./rpc/server.ts\";\nimport { rpcServerKey } from \"./rpc/server-service.ts\";\nimport { createProductHost } from \"./runtime/product-host.ts\";\nimport { createSessionHost } from \"./runtime/session-host.ts\";\nimport { loadStartupConfiguration, resolveStartupRuntime } from \"./startup.ts\";\n\nexport { type RpcServerService, rpcServerKey } from \"./rpc/server-service.ts\";\n\n/** Creates the process RPC server from composition services and releases it with its owner Fiber. */\nexport const apiVersion = 1 as const;\nexport const name = \"rpc-server\";\nexport const version = \"0.1.7\";\nexport const apply: PluginDefinition[\"apply\"] = async (context, _config, fiber) => {\n\tconst selection = context.require(runtimeSelectionKey).selected();\n\tlet server: RpcServer | undefined;\n\tconst interaction = createUserInteraction({\n\t\trequest: async (input, signal) => {\n\t\t\tif (!server) throw new Error(\"RPC server is not ready.\");\n\t\t\treturn await server.requestInteraction(input, signal);\n\t\t},\n\t});\n\tconst session = await createSessionHost(context, {\n\t\tcwd: context.require(workspaceCapabilityKey).allowedRoot,\n\t\tagentDir: join(homedir(), \".di-code\"),\n\t\tprovider: selection.provider,\n\t\tmodel: selection.model,\n\t\tplanMode: {\n\t\t\tsection: \"You are in plan mode. Explore and design before presenting the complete plan through exit_plan_mode.\",\n\t\t},\n\t\tinteraction,\n\t});\n\tconst product = createProductHost({\n\t\tcontext,\n\t\tcwd: context.require(workspaceCapabilityKey).allowedRoot,\n\t\tagentDir: join(homedir(), \".di-code\"),\n\t\tprojectTrusted: context.capabilities.trustedProject,\n\t\tprovider: selection.provider,\n\t\tmodel: selection.model,\n\t\truntimeSnapshot: () => {\n\t\t\tconst ui = session.ui();\n\t\t\treturn {\n\t\t\t\tproviderId: ui.providerId,\n\t\t\t\tmodelId: ui.modelId,\n\t\t\t\t...(ui.thinkingLevel ? { thinkingLevel: ui.thinkingLevel } : {}),\n\t\t\t};\n\t\t},\n\t\treloadRuntime: async () => {\n\t\t\tconst cwd = context.require(workspaceCapabilityKey).allowedRoot;\n\t\t\tconst agentDir = join(homedir(), \".di-code\");\n\t\t\tconst configuration = await loadStartupConfiguration(cwd, process.env, agentDir);\n\t\t\tconst runtime = resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);\n\t\t\tsession.setRuntimeValue(runtime.provider, runtime.model);\n\t\t\treturn configuration;\n\t\t},\n\t\treloadConfiguration: () =>\n\t\t\tloadStartupConfiguration(\n\t\t\t\tcontext.require(workspaceCapabilityKey).allowedRoot,\n\t\t\t\tprocess.env,\n\t\t\t\tjoin(homedir(), \".di-code\"),\n\t\t\t),\n\t\trefreshResources: (projectTrusted) => session.refreshResources(projectTrusted),\n\t});\n\tif (!session.state().activeSession) await session.createSession();\n\tserver = new RpcServer({\n\t\tsession,\n\t\tmethods: context.require(rpcMethodRegistryKey),\n\t\tproductState: { projectTrusted: context.capabilities.trustedProject },\n\t\tproductHost: product,\n\t\tinput: process.stdin,\n\t\toutput: process.stdout,\n\t\tonError: (error) => process.stderr.write(`${error.message}\\n`),\n\t});\n\tawait context.require(modeRegistryKey).execute(\"rpc\", { run: () => server.start() });\n\tcontext.set(rpcServerKey, { shutdown: () => server.shutdown(), finished: () => server.finished() });\n\tfiber.addDisposer(async () => {\n\t\tawait server.shutdown();\n\t\tawait interaction.dispose();\n\t\tawait product.dispose();\n\t\tawait session.dispose();\n\t});\n};\n"]}
@@ -26,6 +26,10 @@ export interface ProductHostOptions {
26
26
  readonly onPermissionModeChange?: (mode: "ask" | "allow" | "deny") => void;
27
27
  /** Refreshes the owning SessionHost after a trust or MCP configuration change. */
28
28
  readonly refreshResources?: (projectTrusted?: boolean, signal?: AbortSignal) => Promise<void>;
29
+ /** Loads project-local composition entries after the trust decision changes. */
30
+ readonly onProjectTrustChange?: (trusted: boolean) => Promise<void>;
31
+ /** Project composition entries belong to the primary WebUI workspace only. */
32
+ readonly includeProjectPluginInventory?: boolean;
29
33
  }
30
34
  export type ProductHostAuditAction = "login" | "logout" | "set_project_trust" | "configure_mcp_server" | "remove_mcp_server" | "reconnect_mcp_server";
31
35
  /** Redacted state-change notification for UI audit trails. */
@@ -86,6 +90,9 @@ export interface RpcPluginInfo {
86
90
  readonly enabled: boolean;
87
91
  readonly installedAt: string;
88
92
  readonly capabilities: readonly string[];
93
+ readonly source?: "managed" | "project";
94
+ readonly status?: "active" | "failed" | "skipped" | "disabled";
95
+ readonly error?: string;
89
96
  }
90
97
  export declare function createProductHost(options: ProductHostOptions): ProductHost;
91
98
  //# sourceMappingURL=product-host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"product-host.d.ts","sourceRoot":"","sources":["../../src/runtime/product-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product-host.d.ts","sourceRoot":"","sources":["../../src/runtime/product-host.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { addMcpConfig, listMcpConfig, removeMcpConfig } from "../mcp/config.js";
5
5
  import { mcpClientServiceKey, mcpConfigServiceKey } from "../mcp/entries.js";
6
6
  import { removeGlobalProviderApiKey, resolveStartupRuntime, saveGlobalCustomProvider, saveGlobalLocale, saveGlobalPermissionMode, saveGlobalProviderApiKey, saveScopedModelSelection, saveScopedThinkingLevel, } from "../startup.js";
7
7
  import { interactiveResourceServiceKey } from "./interactive-resource-service.js";
8
+ import { pluginInventoryKey } from "./plugin-inventory-service.js";
8
9
  import { pluginManagerKey } from "./plugin-manager-entry.js";
9
10
  const BUILTIN_WEB_MANIFEST = Object.freeze({
10
11
  protocolVersion: 1,
@@ -282,15 +283,33 @@ export function createProductHost(options) {
282
283
  const listPlugins = async () => {
283
284
  ensureOpen();
284
285
  const manager = options.context.get(pluginManagerKey);
285
- if (!manager)
286
- return [];
287
- return (await manager.list()).map((plugin) => ({
288
- id: plugin.id,
289
- version: plugin.manifest.version,
290
- enabled: plugin.enabled,
291
- installedAt: plugin.installedAt,
292
- capabilities: Object.keys(plugin.manifest.capabilities).sort(),
293
- }));
286
+ const managed = manager
287
+ ? (await manager.list()).map((plugin) => ({
288
+ id: plugin.id,
289
+ version: plugin.manifest.version,
290
+ enabled: plugin.enabled,
291
+ installedAt: plugin.installedAt,
292
+ capabilities: Object.keys(plugin.manifest.capabilities).sort(),
293
+ source: "managed",
294
+ status: plugin.enabled ? "active" : "disabled",
295
+ }))
296
+ : [];
297
+ const inventory = options.context.get(pluginInventoryKey)?.snapshot();
298
+ const project = options.includeProjectPluginInventory !== false
299
+ ? (inventory?.entries
300
+ .filter((record) => record.entry.projectLocal)
301
+ .map((record) => ({
302
+ id: record.entry.id,
303
+ version: "composition",
304
+ enabled: record.status === "active",
305
+ installedAt: "",
306
+ capabilities: [],
307
+ source: "project",
308
+ status: record.status === "pending" || record.status === "loading" ? "skipped" : record.status,
309
+ error: record.error?.message,
310
+ })) ?? [])
311
+ : [];
312
+ return [...managed, ...project];
294
313
  };
295
314
  const getWebContributions = async () => {
296
315
  ensureOpen();
@@ -408,6 +427,7 @@ export function createProductHost(options) {
408
427
  await trustStore.set(options.cwd, trusted);
409
428
  throwIfAborted(signal);
410
429
  projectTrusted = trusted;
430
+ await options.onProjectTrustChange?.(trusted);
411
431
  await connect(signal).catch((cause) => {
412
432
  if (signal?.aborted)
413
433
  throw cause;
@@ -1 +1 @@
1
- {"version":3,"file":"product-host.js","sourceRoot":"","sources":["../../src/runtime/product-host.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { ModelApi, Provider } from \"@di-code/ai\";\nimport { modelCatalogKey, providerRegistryKey } from \"@di-code/builtins\";\nimport type { McpManager } from \"@di-code/mcp\";\nimport { ProjectTrustStore } from \"@di-code/plugin-loader\";\nimport type { Context, WebContribution, WebManifest } from \"@di-code/plugin-runtime\";\nimport { addMcpConfig, listMcpConfig, type McpConfigScope, removeMcpConfig } from \"../mcp/config.ts\";\nimport { mcpClientServiceKey, mcpConfigServiceKey } from \"../mcp/entries.ts\";\nimport type { RpcContextFileInfo, RpcMcpServerInfo, RpcProviderSummary, RpcSettingsSnapshot } from \"../rpc/protocol.ts\";\nimport {\n\tremoveGlobalProviderApiKey,\n\tresolveStartupRuntime,\n\ttype StartupConfiguration,\n\tsaveGlobalCustomProvider,\n\tsaveGlobalLocale,\n\tsaveGlobalPermissionMode,\n\tsaveGlobalProviderApiKey,\n\tsaveScopedModelSelection,\n\tsaveScopedThinkingLevel,\n} from \"../startup.ts\";\nimport { interactiveResourceServiceKey } from \"./interactive-resource-service.ts\";\nimport { pluginManagerKey } from \"./plugin-manager-entry.ts\";\n\nexport interface ProductHostOptions {\n\treadonly context: Context;\n\treadonly cwd: string;\n\treadonly agentDir: string;\n\treadonly projectTrusted: boolean;\n\t/** Current runtime is included even when a test or embeddable host supplied it outside the registry. */\n\treadonly provider?: Provider;\n\treadonly model?: import(\"@di-code/ai\").Model;\n\treadonly runtimeSnapshot?: () => {\n\t\treadonly providerId: string;\n\t\treadonly modelId: string;\n\t\treadonly thinkingLevel?: string;\n\t};\n\t/** Startup settings used to report whether each Provider is actually configured. */\n\treadonly startupConfiguration?: StartupConfiguration;\n\t/** Re-resolves settings and swaps an idle Session runtime after a persisted runtime change. */\n\treadonly reloadRuntime?: () => Promise<StartupConfiguration | undefined>;\n\t/** Re-reads persisted settings without replacing the active Session runtime. */\n\treadonly reloadConfiguration?: () => Promise<StartupConfiguration>;\n\t/** Applies a persisted permission change to the current Session actor. */\n\treadonly onPermissionModeChange?: (mode: \"ask\" | \"allow\" | \"deny\") => void;\n\t/** Refreshes the owning SessionHost after a trust or MCP configuration change. */\n\treadonly refreshResources?: (projectTrusted?: boolean, signal?: AbortSignal) => Promise<void>;\n}\n\nexport type ProductHostAuditAction =\n\t| \"login\"\n\t| \"logout\"\n\t| \"set_project_trust\"\n\t| \"configure_mcp_server\"\n\t| \"remove_mcp_server\"\n\t| \"reconnect_mcp_server\";\n\n/** Redacted state-change notification for UI audit trails. */\nexport interface ProductHostEvent {\n\treadonly type: \"product_audit\";\n\treadonly action: ProductHostAuditAction;\n\treadonly target?: string;\n\treadonly projectTrusted?: boolean;\n}\nexport type ProductHostListener = (event: ProductHostEvent) => void | Promise<void>;\n\nexport interface ProductHost {\n\treadonly state: () => { readonly projectTrusted: boolean };\n\treadonly listProviders: () => readonly RpcProviderSummary[];\n\treadonly getSettings: () => RpcSettingsSnapshot;\n\t/** Persists a validated runtime preference for future CLI and WebUI Sessions. */\n\treadonly setRuntimePreference: (providerId: string, modelId: string) => Promise<void>;\n\t/** Persists a validated per-model thinking preference for future CLI and WebUI Sessions. */\n\treadonly setThinkingLevelPreference: (\n\t\tproviderId: string,\n\t\tmodelId: string,\n\t\tlevel: import(\"@di-code/ai\").ThinkingLevel,\n\t) => Promise<void>;\n\treadonly setDefaultProvider: (providerId: string) => Promise<void>;\n\treadonly setDefaultModel: (modelId: string) => Promise<void>;\n\treadonly setLocale: (locale: \"en\" | \"zh-CN\") => Promise<void>;\n\treadonly setPermissionMode: (mode: \"ask\" | \"allow\" | \"deny\") => Promise<void>;\n\treadonly configureCustomProvider: (\n\t\tinput: {\n\t\t\treadonly api: Exclude<ModelApi, \"faux\">;\n\t\t\treadonly baseUrl: string;\n\t\t\treadonly apiKey: string;\n\t\t\treadonly modelId: string;\n\t\t},\n\t\tsignal?: AbortSignal,\n\t) => Promise<RpcProviderSummary>;\n\treadonly login: (\n\t\tinput: {\n\t\t\treadonly providerId: string;\n\t\t\treadonly apiKey: string;\n\t\t\treadonly modelId?: string;\n\t\t\treadonly api?: string;\n\t\t},\n\t\tsignal?: AbortSignal,\n\t) => Promise<RpcProviderSummary>;\n\treadonly logout: (providerId: string, signal?: AbortSignal) => Promise<void>;\n\treadonly getProjectTrust: () => boolean;\n\treadonly setProjectTrust: (trusted: boolean, signal?: AbortSignal) => Promise<boolean>;\n\treadonly listContextFiles: (signal?: AbortSignal) => Promise<readonly RpcContextFileInfo[]>;\n\treadonly listMcpServers: (signal?: AbortSignal) => Promise<readonly RpcMcpServerInfo[]>;\n\treadonly configureMcpServer: (\n\t\tinput: {\n\t\t\treadonly serverId: string;\n\t\t\treadonly scope: McpConfigScope;\n\t\t\treadonly config: Record<string, unknown>;\n\t\t},\n\t\tsignal?: AbortSignal,\n\t) => Promise<RpcMcpServerInfo>;\n\treadonly removeMcpServer: (serverId: string, scope: McpConfigScope, signal?: AbortSignal) => Promise<void>;\n\treadonly reconnectMcpServer: (serverId: string, signal?: AbortSignal) => Promise<RpcMcpServerInfo>;\n\treadonly listPlugins: () => Promise<readonly RpcPluginInfo[]>;\n\treadonly getWebContributions: () => Promise<WebManifest>;\n\treadonly setPluginEnabled: (pluginId: string, enabled: boolean, signal?: AbortSignal) => Promise<RpcPluginInfo>;\n\treadonly subscribe: (listener: ProductHostListener) => () => void;\n\treadonly dispose: () => Promise<void>;\n}\n\nexport interface RpcPluginInfo {\n\treadonly id: string;\n\treadonly version: string;\n\treadonly enabled: boolean;\n\treadonly installedAt: string;\n\treadonly capabilities: readonly string[];\n}\n\nconst BUILTIN_WEB_MANIFEST = Object.freeze({\n\tprotocolVersion: 1,\n\tbundle: Object.freeze({ source: \"builtin\", csp: \"default-src 'self'\" }),\n\tcontributions: Object.freeze([\n\t\t{\n\t\t\tid: \"workspace-status\",\n\t\t\tslot: \"app.sidebar\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"ui\",\n\t\t\tcomponentKey: \"builtin.workspace-status\",\n\t\t\tdata: { label: \"Workspace status\" },\n\t\t},\n\t\t{\n\t\t\tid: \"session-inspector\",\n\t\t\tslot: \"session.tree\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"session.read\",\n\t\t\tcomponentKey: \"builtin.session-inspector\",\n\t\t\tdata: { label: \"Session inspector\" },\n\t\t},\n\t\t{\n\t\t\tid: \"assistant-badge\",\n\t\t\tslot: \"conversation.node\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"conversation.read\",\n\t\t\tcomponentKey: \"builtin.assistant-badge\",\n\t\t\tdata: { label: \"Agent activity\" },\n\t\t},\n\t\t{\n\t\t\tid: \"tool-audit\",\n\t\t\tslot: \"conversation.tool\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"conversation.read\",\n\t\t\tcomponentKey: \"builtin.tool-audit\",\n\t\t\tdata: { label: \"Tool audit\" },\n\t\t},\n\t\t{\n\t\t\tid: \"plugin-diagnostics\",\n\t\t\tslot: \"settings.panel\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"settings.read\",\n\t\t\tcomponentKey: \"builtin.plugin-diagnostics\",\n\t\t\tdata: { label: \"Plugin diagnostics\" },\n\t\t},\n\t] as const),\n}) satisfies WebManifest;\n\nconst API_BY_PROVIDER: Readonly<Record<string, Exclude<ModelApi, \"faux\">>> = {\n\topenai: \"openai-responses\",\n\tdeepseek: \"openai-chat-completions\",\n\tkimi: \"openai-chat-completions\",\n\tzhipu: \"openai-chat-completions\",\n\tanthropic: \"anthropic-messages\",\n};\n\nconst BUILTIN_PROVIDER_NAMES: Readonly<Record<string, string>> = {\n\topenai: \"OpenAI\",\n\tanthropic: \"Anthropic\",\n\tdeepseek: \"DeepSeek\",\n\tkimi: \"Kimi\",\n\tzhipu: \"Zhipu AI\",\n};\n\nconst API_KEY_ENV_BY_PROVIDER: Readonly<Record<string, string>> = {\n\topenai: \"OPENAI_API_KEY\",\n\tanthropic: \"ANTHROPIC_API_KEY\",\n\tdeepseek: \"DEEPSEEK_API_KEY\",\n\tkimi: \"KIMI_API_KEY\",\n\tzhipu: \"ZAI_API_KEY\",\n};\n\nexport function createProductHost(options: ProductHostOptions): ProductHost {\n\tlet projectTrusted = options.projectTrusted;\n\tlet manager: McpManager | undefined;\n\tlet connected = new Map<string, { tools: number; resources: number; prompts: number }>();\n\tlet disposed = false;\n\tlet startupConfiguration = options.startupConfiguration;\n\tconst listeners = new Set<ProductHostListener>();\n\tconst trustStore = new ProjectTrustStore(join(options.agentDir, \"trust.json\"));\n\tconst registry = options.context.require(providerRegistryKey);\n\tconst modelCatalog = options.context.require(modelCatalogKey);\n\ttype ProviderSnapshot = Pick<Provider, \"id\" | \"name\" | \"models\">;\n\tconst availableProviders = (): ProviderSnapshot[] => {\n\t\tconst providers: ProviderSnapshot[] = registry.snapshot().map(({ provider }) => provider);\n\t\tfor (const [id, name] of Object.entries(BUILTIN_PROVIDER_NAMES)) {\n\t\t\tif (providers.some((provider) => provider.id === id)) continue;\n\t\t\tconst models = modelCatalog.list(id);\n\t\t\tif (models.length) providers.push({ id, name, models });\n\t\t}\n\t\tfor (const configured of startupConfiguration?.providers ?? []) {\n\t\t\tif (!providers.some((provider) => provider.id === configured.id) && configured.models) {\n\t\t\t\tproviders.push({ id: configured.id, name: configured.name ?? configured.id, models: configured.models });\n\t\t\t}\n\t\t}\n\t\tif (options.provider && !providers.some((provider) => provider.id === options.provider?.id)) {\n\t\t\tproviders.push(options.provider);\n\t\t}\n\t\treturn providers;\n\t};\n\tconst selectRuntime = (\n\t\tproviderId: string,\n\t\tmodelId?: string,\n\t): { readonly provider: Provider; readonly model: import(\"@di-code/ai\").Model } => {\n\t\ttry {\n\t\t\treturn registry.select(providerId, modelId);\n\t\t} catch (cause) {\n\t\t\tconst provider = options.provider;\n\t\t\tconst model =\n\t\t\t\tprovider?.id === providerId\n\t\t\t\t\t? modelId === undefined\n\t\t\t\t\t\t? provider.models[0]\n\t\t\t\t\t\t: provider.models.find((candidate) => candidate.id === modelId)\n\t\t\t\t\t: undefined;\n\t\t\tif (provider && model) return { provider, model };\n\t\t\tconst configured = startupConfiguration?.providers.find((candidate) => candidate.id === providerId);\n\t\t\tif (configured) {\n\t\t\t\ttry {\n\t\t\t\t\treturn resolveStartupRuntime({}, [configured], { providerId, modelId });\n\t\t\t\t} catch {\n\t\t\t\t\t// Login supplies a credential after model selection, so an incomplete saved entry must not block it.\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst apiKeyEnvironmentVariable = API_KEY_ENV_BY_PROVIDER[providerId];\n\t\t\tif (apiKeyEnvironmentVariable) {\n\t\t\t\treturn resolveStartupRuntime(\n\t\t\t\t\t{\n\t\t\t\t\t\tDI_CODE_PROVIDER: providerId,\n\t\t\t\t\t\t...(modelId ? { DI_CODE_MODEL: modelId } : {}),\n\t\t\t\t\t\t[apiKeyEnvironmentVariable]: \"pending-web-provider-configuration\",\n\t\t\t\t\t},\n\t\t\t\t\t[],\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow cause;\n\t\t}\n\t};\n\tconst ensureOpen = (): void => {\n\t\tif (disposed) throw new Error(\"ProductHost has been disposed.\");\n\t};\n\tconst throwIfAborted = (signal: AbortSignal | undefined): void => {\n\t\tif (signal?.aborted) throw signal.reason ?? new Error(\"ProductHost operation was cancelled.\");\n\t};\n\tconst emitAudit = (event: Omit<ProductHostEvent, \"type\">): void => {\n\t\tfor (const listener of listeners)\n\t\t\tqueueMicrotask(() => {\n\t\t\t\ttry {\n\t\t\t\t\tPromise.resolve(listener({ type: \"product_audit\", ...event })).catch(() => undefined);\n\t\t\t\t} catch {\n\t\t\t\t\t// Audit observers cannot interrupt a product configuration change.\n\t\t\t\t}\n\t\t\t});\n\t};\n\tconst providerSummary = (provider: {\n\t\tid: string;\n\t\tname: string;\n\t\tmodels: readonly {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\tinput: readonly string[];\n\t\t\treasoningEfforts?: readonly (\"low\" | \"medium\" | \"high\" | \"max\")[];\n\t\t}[];\n\t}): RpcProviderSummary => ({\n\t\tid: provider.id,\n\t\tname: provider.name,\n\t\tmodels: provider.models.map((model) => ({\n\t\t\tid: model.id,\n\t\t\tname: model.name,\n\t\t\tinput: [...model.input],\n\t\t\t...(model.reasoningEfforts ? { reasoningEfforts: [...model.reasoningEfforts] } : {}),\n\t\t})),\n\t\tconfigured: isProviderConfigured(provider.id),\n\t});\n\tconst settingsSnapshot = (): RpcSettingsSnapshot => {\n\t\tconst configuration = startupConfiguration;\n\t\tconst runtime =\n\t\t\toptions.runtimeSnapshot?.() ??\n\t\t\t(options.provider\n\t\t\t\t? { providerId: options.provider.id, modelId: options.model?.id ?? options.provider.models[0]?.id ?? \"\" }\n\t\t\t\t: undefined);\n\t\tconst allProviders = availableProviders();\n\t\treturn {\n\t\t\tproviders: allProviders.map((provider) => {\n\t\t\t\tconst configured = configuration?.providers.find((item) => item.id === provider.id);\n\t\t\t\tconst key = configured?.apiKey;\n\t\t\t\tconst keySource = key?.match(/^\\$\\{?([A-Za-z_][A-Za-z0-9_]*)\\}?$/)\n\t\t\t\t\t? \"environment\"\n\t\t\t\t\t: key\n\t\t\t\t\t\t? \"settings\"\n\t\t\t\t\t\t: \"missing\";\n\t\t\t\treturn {\n\t\t\t\t\t...providerSummary(provider),\n\t\t\t\t\tapi: configured?.api ?? API_BY_PROVIDER[provider.id] ?? \"\",\n\t\t\t\t\t...(configured?.baseUrl ? { baseUrl: configured.baseUrl } : {}),\n\t\t\t\t\tapiKeySource: keySource,\n\t\t\t\t};\n\t\t\t}),\n\t\t\tdefaults: configuration?.defaults ?? {},\n\t\t\truntime: runtime ?? { providerId: \"uninitialized\", modelId: \"uninitialized\" },\n\t\t\t...(configuration?.locale ? { locale: configuration.locale } : {}),\n\t\t\tpermissionMode: configuration?.permissionMode ?? \"ask\",\n\t\t\tsources: {\n\t\t\t\tprovider: configuration?.environment.DI_CODE_PROVIDER ? \"environment\" : \"settings\",\n\t\t\t\tmodel: configuration?.environment.DI_CODE_MODEL ? \"environment\" : \"settings\",\n\t\t\t\tlocale: configuration?.environment.DI_CODE_LOCALE\n\t\t\t\t\t? \"environment\"\n\t\t\t\t\t: configuration?.locale\n\t\t\t\t\t\t? \"settings\"\n\t\t\t\t\t\t: \"default\",\n\t\t\t\tpermissionMode: configuration?.permissionMode ? \"settings\" : \"default\",\n\t\t\t\truntime: \"runtime\",\n\t\t\t},\n\t\t};\n\t};\n\tconst isProviderConfigured = (providerId: string): boolean => {\n\t\tif (providerId === \"faux\") return options.provider?.id === \"faux\";\n\t\tif (options.provider?.id === providerId) return true;\n\t\ttry {\n\t\t\tconst configuration = startupConfiguration;\n\t\t\tconst configured = configuration?.providers.find((item) => item.id === providerId);\n\t\t\tif (configuration && configured) {\n\t\t\t\tresolveStartupRuntime(configuration.environment, [configured], {\n\t\t\t\t\tproviderId,\n\t\t\t\t\tmodelId: configured.models?.[0]?.id,\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tresolveStartupRuntime(configuration?.environment ?? process.env, [], { providerId });\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t};\n\tconst connect = async (signal?: AbortSignal): Promise<void> => {\n\t\tthrowIfAborted(signal);\n\t\tconst configurations = await options.context.require(mcpConfigServiceKey).load({\n\t\t\tcwd: options.cwd,\n\t\t\tprojectTrusted,\n\t\t});\n\t\tconst service = options.context.require(mcpClientServiceKey);\n\t\tif (manager !== undefined) await service.close(manager);\n\t\tconnected = new Map();\n\t\tconst result = await service.connect(configurations, { signal });\n\t\tthrowIfAborted(signal);\n\t\tmanager = result.manager;\n\t\tfor (const server of result.servers)\n\t\t\tconnected.set(server.config.id, {\n\t\t\t\ttools: server.tools.length,\n\t\t\t\tresources: server.resources.length,\n\t\t\t\tprompts: server.prompts.length,\n\t\t\t});\n\t};\n\tconst listMcpServers = async (signal?: AbortSignal): Promise<readonly RpcMcpServerInfo[]> => {\n\t\tensureOpen();\n\t\tthrowIfAborted(signal);\n\t\tconst configured = await Promise.all(\n\t\t\t([\"user\", \"project\", \"local\"] as const).map((scope) => listMcpConfig(options.cwd, scope)),\n\t\t);\n\t\tconst seen = new Set<string>();\n\t\tconst result = configured\n\t\t\t.flat()\n\t\t\t.filter((item) => {\n\t\t\t\tif (seen.has(item.id)) return false;\n\t\t\t\tseen.add(item.id);\n\t\t\t\treturn true;\n\t\t\t})\n\t\t\t.map((item) => {\n\t\t\t\tconst stats = connected.get(item.id);\n\t\t\t\treturn {\n\t\t\t\t\tid: item.id,\n\t\t\t\t\tscope: item.scope,\n\t\t\t\t\tstate: stats ? \"connected\" : \"disconnected\",\n\t\t\t\t\ttools: stats?.tools ?? 0,\n\t\t\t\t\tresources: stats?.resources ?? 0,\n\t\t\t\t\tprompts: stats?.prompts ?? 0,\n\t\t\t\t} satisfies RpcMcpServerInfo;\n\t\t\t});\n\t\tthrowIfAborted(signal);\n\t\treturn result;\n\t};\n\tconst listPlugins = async (): Promise<readonly RpcPluginInfo[]> => {\n\t\tensureOpen();\n\t\tconst manager = options.context.get(pluginManagerKey);\n\t\tif (!manager) return [];\n\t\treturn (await manager.list()).map((plugin) => ({\n\t\t\tid: plugin.id,\n\t\t\tversion: plugin.manifest.version,\n\t\t\tenabled: plugin.enabled,\n\t\t\tinstalledAt: plugin.installedAt,\n\t\t\tcapabilities: Object.keys(plugin.manifest.capabilities).sort(),\n\t\t}));\n\t};\n\tconst getWebContributions = async (): Promise<WebManifest> => {\n\t\tensureOpen();\n\t\tconst manager = options.context.get(pluginManagerKey);\n\t\tconst contributions: WebContribution[] = [...BUILTIN_WEB_MANIFEST.contributions];\n\t\tif (manager && projectTrusted) {\n\t\t\tfor (const plugin of await manager.list()) {\n\t\t\t\tif (plugin.enabled && plugin.manifest.web) contributions.push(...plugin.manifest.web.contributions);\n\t\t\t}\n\t\t}\n\t\treturn { ...BUILTIN_WEB_MANIFEST, contributions: Object.freeze(contributions) };\n\t};\n\treturn {\n\t\tstate: () => ({ projectTrusted }),\n\t\tlistProviders: () => {\n\t\t\treturn availableProviders().map(providerSummary);\n\t\t},\n\t\tconfigureCustomProvider: async (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst configuration = await saveGlobalCustomProvider(options.agentDir, input);\n\t\t\tthrowIfAborted(signal);\n\t\t\tstartupConfiguration = (await options.reloadConfiguration?.()) ?? startupConfiguration;\n\t\t\treturn {\n\t\t\t\tid: configuration.id,\n\t\t\t\tname: configuration.name ?? configuration.id,\n\t\t\t\tmodels: (configuration.models ?? []).map((model) => ({\n\t\t\t\t\tid: model.id,\n\t\t\t\t\tname: model.name,\n\t\t\t\t\tinput: [...model.input],\n\t\t\t\t})),\n\t\t\t\tconfigured: true,\n\t\t\t};\n\t\t},\n\t\tgetSettings: settingsSnapshot,\n\t\tsetRuntimePreference: async (providerId, modelId) => {\n\t\t\tensureOpen();\n\t\t\tconst selection = selectRuntime(providerId, modelId);\n\t\t\tawait saveScopedModelSelection(options.cwd, options.agentDir, selection.provider.id, selection.model.id);\n\t\t\tconst refreshed = (await options.reloadRuntime?.()) ?? (await options.reloadConfiguration?.());\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetThinkingLevelPreference: async (providerId, modelId, level) => {\n\t\t\tensureOpen();\n\t\t\tconst selection = selectRuntime(providerId, modelId);\n\t\t\tif (!selection.model.reasoningEfforts?.includes(level))\n\t\t\t\tthrow new Error(`Thinking level \"${level}\" is not supported by model \"${selection.model.id}\".`);\n\t\t\tawait saveScopedThinkingLevel(options.cwd, options.agentDir, selection.provider.id, selection.model.id, level);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetDefaultProvider: async (providerId) => {\n\t\t\tconst currentProvider = startupConfiguration?.defaults?.providerId;\n\t\t\tconst current = currentProvider === providerId ? startupConfiguration?.defaults?.modelId : undefined;\n\t\t\tawait saveScopedModelSelection(\n\t\t\t\toptions.cwd,\n\t\t\t\toptions.agentDir,\n\t\t\t\tproviderId,\n\t\t\t\tcurrent ?? selectRuntime(providerId).model.id,\n\t\t\t);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetDefaultModel: async (modelId) => {\n\t\t\tconst providerId = startupConfiguration?.defaults?.providerId ?? options.provider?.id;\n\t\t\tif (!providerId) throw new Error(\"A default Provider is required before selecting a model.\");\n\t\t\tawait saveScopedModelSelection(options.cwd, options.agentDir, providerId, modelId);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetLocale: async (locale) => {\n\t\t\tawait saveGlobalLocale(options.agentDir, locale);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetPermissionMode: async (mode) => {\n\t\t\tawait saveGlobalPermissionMode(options.agentDir, mode);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t\toptions.onPermissionModeChange?.(mode);\n\t\t},\n\t\tlogin: async (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst selection = selectRuntime(input.providerId, input.modelId);\n\t\t\tconst api = (input.api ?? API_BY_PROVIDER[input.providerId]) as Exclude<ModelApi, \"faux\"> | undefined;\n\t\t\tif (!api) throw new Error(\"Provider login API is unavailable.\");\n\t\t\tawait saveGlobalProviderApiKey(options.agentDir, input.providerId, api, input.apiKey, selection.model.id);\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst refreshed = await options.reloadRuntime?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t\tthrowIfAborted(signal);\n\t\t\temitAudit({ action: \"login\", target: input.providerId });\n\t\t\treturn providerSummary(selection.provider);\n\t\t},\n\t\tlogout: async (providerId, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait removeGlobalProviderApiKey(options.agentDir, providerId);\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst refreshed = await options.reloadRuntime?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t\temitAudit({ action: \"logout\", target: providerId });\n\t\t},\n\t\tgetProjectTrust: () => projectTrusted,\n\t\tsetProjectTrust: async (trusted, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait trustStore.set(options.cwd, trusted);\n\t\t\tthrowIfAborted(signal);\n\t\t\tprojectTrusted = trusted;\n\t\t\tawait connect(signal).catch((cause) => {\n\t\t\t\tif (signal?.aborted) throw cause;\n\t\t\t});\n\t\t\tawait options.refreshResources?.(trusted, signal);\n\t\t\temitAudit({ action: \"set_project_trust\", projectTrusted });\n\t\t\treturn projectTrusted;\n\t\t},\n\t\tlistContextFiles: async (signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst snapshot = await options.context\n\t\t\t\t.require(interactiveResourceServiceKey)\n\t\t\t\t.load({ cwd: options.cwd, agentDir: options.agentDir, projectTrusted });\n\t\t\tconst result = snapshot.resources.contextFiles.map((file) => ({\n\t\t\t\tpath: file.path,\n\t\t\t\tscope: file.scope,\n\t\t\t\tbytes: Buffer.byteLength(file.content, \"utf8\"),\n\t\t\t}));\n\t\t\tthrowIfAborted(signal);\n\t\t\treturn result;\n\t\t},\n\t\tlistMcpServers,\n\t\tlistPlugins,\n\t\tgetWebContributions,\n\t\tsetPluginEnabled: async (pluginId, enabled, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst manager = options.context.get(pluginManagerKey);\n\t\t\tif (!manager) throw new Error(\"Plugin manager is unavailable.\");\n\t\t\tconst plugin = enabled\n\t\t\t\t? await manager.execute({\n\t\t\t\t\t\taction: \"enable\",\n\t\t\t\t\t\targument: pluginId,\n\t\t\t\t\t\tstdout: () => undefined,\n\t\t\t\t\t\tstderr: () => undefined,\n\t\t\t\t\t})\n\t\t\t\t: await manager.execute({\n\t\t\t\t\t\taction: \"disable\",\n\t\t\t\t\t\targument: pluginId,\n\t\t\t\t\t\tstdout: () => undefined,\n\t\t\t\t\t\tstderr: () => undefined,\n\t\t\t\t\t});\n\t\t\tif (plugin !== 0) throw new Error(`Unable to ${enabled ? \"enable\" : \"disable\"} plugin.`);\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst updated = (await manager.list()).find((item) => item.id === pluginId);\n\t\t\tif (!updated) throw new Error(`Unknown plugin: ${pluginId}`);\n\t\t\treturn {\n\t\t\t\tid: updated.id,\n\t\t\t\tversion: updated.manifest.version,\n\t\t\t\tenabled: updated.enabled,\n\t\t\t\tinstalledAt: updated.installedAt,\n\t\t\t\tcapabilities: Object.keys(updated.manifest.capabilities).sort(),\n\t\t\t};\n\t\t},\n\t\tconfigureMcpServer: async (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait addMcpConfig(options.cwd, input.scope, input.serverId, input.config);\n\t\t\tawait connect(signal);\n\t\t\tawait options.refreshResources?.(undefined, signal);\n\t\t\temitAudit({ action: \"configure_mcp_server\", target: input.serverId });\n\t\t\treturn (\n\t\t\t\t(await listMcpServers()).find((server) => server.id === input.serverId) ?? {\n\t\t\t\t\tid: input.serverId,\n\t\t\t\t\tscope: input.scope,\n\t\t\t\t\tstate: \"disconnected\",\n\t\t\t\t\ttools: 0,\n\t\t\t\t\tresources: 0,\n\t\t\t\t\tprompts: 0,\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tremoveMcpServer: async (serverId, scope, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait removeMcpConfig(options.cwd, scope, serverId);\n\t\t\tawait connect(signal);\n\t\t\tawait options.refreshResources?.(undefined, signal);\n\t\t\temitAudit({ action: \"remove_mcp_server\", target: serverId });\n\t\t},\n\t\treconnectMcpServer: async (serverId, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tif (!manager) await connect(signal);\n\t\t\tif (!manager) throw new Error(\"MCP manager is unavailable.\");\n\t\t\tconst server = await manager.reconnect(serverId, signal);\n\t\t\tconnected.set(serverId, {\n\t\t\t\ttools: server.tools.length,\n\t\t\t\tresources: server.resources.length,\n\t\t\t\tprompts: server.prompts.length,\n\t\t\t});\n\t\t\tawait options.refreshResources?.(undefined, signal);\n\t\t\tconst info = (await listMcpServers()).find((item) => item.id === serverId);\n\t\t\tif (!info) throw new Error(`MCP server \"${serverId}\" was not found.`);\n\t\t\temitAudit({ action: \"reconnect_mcp_server\", target: serverId });\n\t\t\treturn info;\n\t\t},\n\t\tsubscribe: (listener) => {\n\t\t\tlisteners.add(listener);\n\t\t\treturn () => listeners.delete(listener);\n\t\t},\n\t\tdispose: async () => {\n\t\t\tif (disposed) return;\n\t\t\tdisposed = true;\n\t\t\tif (manager !== undefined) await options.context.require(mcpClientServiceKey).close(manager);\n\t\t\tmanager = undefined;\n\t\t\tconnected.clear();\n\t\t\tlisteners.clear();\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"product-host.js","sourceRoot":"","sources":["../../src/runtime/product-host.ts"],"names":[],"mappings":"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","sourcesContent":["import { join } from \"node:path\";\nimport type { ModelApi, Provider } from \"@di-code/ai\";\nimport { modelCatalogKey, providerRegistryKey } from \"@di-code/builtins\";\nimport type { McpManager } from \"@di-code/mcp\";\nimport { ProjectTrustStore } from \"@di-code/plugin-loader\";\nimport type { Context, WebContribution, WebManifest } from \"@di-code/plugin-runtime\";\nimport { addMcpConfig, listMcpConfig, type McpConfigScope, removeMcpConfig } from \"../mcp/config.ts\";\nimport { mcpClientServiceKey, mcpConfigServiceKey } from \"../mcp/entries.ts\";\nimport type { RpcContextFileInfo, RpcMcpServerInfo, RpcProviderSummary, RpcSettingsSnapshot } from \"../rpc/protocol.ts\";\nimport {\n\tremoveGlobalProviderApiKey,\n\tresolveStartupRuntime,\n\ttype StartupConfiguration,\n\tsaveGlobalCustomProvider,\n\tsaveGlobalLocale,\n\tsaveGlobalPermissionMode,\n\tsaveGlobalProviderApiKey,\n\tsaveScopedModelSelection,\n\tsaveScopedThinkingLevel,\n} from \"../startup.ts\";\nimport { interactiveResourceServiceKey } from \"./interactive-resource-service.ts\";\nimport { pluginInventoryKey } from \"./plugin-inventory-service.ts\";\nimport { pluginManagerKey } from \"./plugin-manager-entry.ts\";\n\nexport interface ProductHostOptions {\n\treadonly context: Context;\n\treadonly cwd: string;\n\treadonly agentDir: string;\n\treadonly projectTrusted: boolean;\n\t/** Current runtime is included even when a test or embeddable host supplied it outside the registry. */\n\treadonly provider?: Provider;\n\treadonly model?: import(\"@di-code/ai\").Model;\n\treadonly runtimeSnapshot?: () => {\n\t\treadonly providerId: string;\n\t\treadonly modelId: string;\n\t\treadonly thinkingLevel?: string;\n\t};\n\t/** Startup settings used to report whether each Provider is actually configured. */\n\treadonly startupConfiguration?: StartupConfiguration;\n\t/** Re-resolves settings and swaps an idle Session runtime after a persisted runtime change. */\n\treadonly reloadRuntime?: () => Promise<StartupConfiguration | undefined>;\n\t/** Re-reads persisted settings without replacing the active Session runtime. */\n\treadonly reloadConfiguration?: () => Promise<StartupConfiguration>;\n\t/** Applies a persisted permission change to the current Session actor. */\n\treadonly onPermissionModeChange?: (mode: \"ask\" | \"allow\" | \"deny\") => void;\n\t/** Refreshes the owning SessionHost after a trust or MCP configuration change. */\n\treadonly refreshResources?: (projectTrusted?: boolean, signal?: AbortSignal) => Promise<void>;\n\t/** Loads project-local composition entries after the trust decision changes. */\n\treadonly onProjectTrustChange?: (trusted: boolean) => Promise<void>;\n\t/** Project composition entries belong to the primary WebUI workspace only. */\n\treadonly includeProjectPluginInventory?: boolean;\n}\n\nexport type ProductHostAuditAction =\n\t| \"login\"\n\t| \"logout\"\n\t| \"set_project_trust\"\n\t| \"configure_mcp_server\"\n\t| \"remove_mcp_server\"\n\t| \"reconnect_mcp_server\";\n\n/** Redacted state-change notification for UI audit trails. */\nexport interface ProductHostEvent {\n\treadonly type: \"product_audit\";\n\treadonly action: ProductHostAuditAction;\n\treadonly target?: string;\n\treadonly projectTrusted?: boolean;\n}\nexport type ProductHostListener = (event: ProductHostEvent) => void | Promise<void>;\n\nexport interface ProductHost {\n\treadonly state: () => { readonly projectTrusted: boolean };\n\treadonly listProviders: () => readonly RpcProviderSummary[];\n\treadonly getSettings: () => RpcSettingsSnapshot;\n\t/** Persists a validated runtime preference for future CLI and WebUI Sessions. */\n\treadonly setRuntimePreference: (providerId: string, modelId: string) => Promise<void>;\n\t/** Persists a validated per-model thinking preference for future CLI and WebUI Sessions. */\n\treadonly setThinkingLevelPreference: (\n\t\tproviderId: string,\n\t\tmodelId: string,\n\t\tlevel: import(\"@di-code/ai\").ThinkingLevel,\n\t) => Promise<void>;\n\treadonly setDefaultProvider: (providerId: string) => Promise<void>;\n\treadonly setDefaultModel: (modelId: string) => Promise<void>;\n\treadonly setLocale: (locale: \"en\" | \"zh-CN\") => Promise<void>;\n\treadonly setPermissionMode: (mode: \"ask\" | \"allow\" | \"deny\") => Promise<void>;\n\treadonly configureCustomProvider: (\n\t\tinput: {\n\t\t\treadonly api: Exclude<ModelApi, \"faux\">;\n\t\t\treadonly baseUrl: string;\n\t\t\treadonly apiKey: string;\n\t\t\treadonly modelId: string;\n\t\t},\n\t\tsignal?: AbortSignal,\n\t) => Promise<RpcProviderSummary>;\n\treadonly login: (\n\t\tinput: {\n\t\t\treadonly providerId: string;\n\t\t\treadonly apiKey: string;\n\t\t\treadonly modelId?: string;\n\t\t\treadonly api?: string;\n\t\t},\n\t\tsignal?: AbortSignal,\n\t) => Promise<RpcProviderSummary>;\n\treadonly logout: (providerId: string, signal?: AbortSignal) => Promise<void>;\n\treadonly getProjectTrust: () => boolean;\n\treadonly setProjectTrust: (trusted: boolean, signal?: AbortSignal) => Promise<boolean>;\n\treadonly listContextFiles: (signal?: AbortSignal) => Promise<readonly RpcContextFileInfo[]>;\n\treadonly listMcpServers: (signal?: AbortSignal) => Promise<readonly RpcMcpServerInfo[]>;\n\treadonly configureMcpServer: (\n\t\tinput: {\n\t\t\treadonly serverId: string;\n\t\t\treadonly scope: McpConfigScope;\n\t\t\treadonly config: Record<string, unknown>;\n\t\t},\n\t\tsignal?: AbortSignal,\n\t) => Promise<RpcMcpServerInfo>;\n\treadonly removeMcpServer: (serverId: string, scope: McpConfigScope, signal?: AbortSignal) => Promise<void>;\n\treadonly reconnectMcpServer: (serverId: string, signal?: AbortSignal) => Promise<RpcMcpServerInfo>;\n\treadonly listPlugins: () => Promise<readonly RpcPluginInfo[]>;\n\treadonly getWebContributions: () => Promise<WebManifest>;\n\treadonly setPluginEnabled: (pluginId: string, enabled: boolean, signal?: AbortSignal) => Promise<RpcPluginInfo>;\n\treadonly subscribe: (listener: ProductHostListener) => () => void;\n\treadonly dispose: () => Promise<void>;\n}\n\nexport interface RpcPluginInfo {\n\treadonly id: string;\n\treadonly version: string;\n\treadonly enabled: boolean;\n\treadonly installedAt: string;\n\treadonly capabilities: readonly string[];\n\treadonly source?: \"managed\" | \"project\";\n\treadonly status?: \"active\" | \"failed\" | \"skipped\" | \"disabled\";\n\treadonly error?: string;\n}\n\nconst BUILTIN_WEB_MANIFEST = Object.freeze({\n\tprotocolVersion: 1,\n\tbundle: Object.freeze({ source: \"builtin\", csp: \"default-src 'self'\" }),\n\tcontributions: Object.freeze([\n\t\t{\n\t\t\tid: \"workspace-status\",\n\t\t\tslot: \"app.sidebar\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"ui\",\n\t\t\tcomponentKey: \"builtin.workspace-status\",\n\t\t\tdata: { label: \"Workspace status\" },\n\t\t},\n\t\t{\n\t\t\tid: \"session-inspector\",\n\t\t\tslot: \"session.tree\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"session.read\",\n\t\t\tcomponentKey: \"builtin.session-inspector\",\n\t\t\tdata: { label: \"Session inspector\" },\n\t\t},\n\t\t{\n\t\t\tid: \"assistant-badge\",\n\t\t\tslot: \"conversation.node\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"conversation.read\",\n\t\t\tcomponentKey: \"builtin.assistant-badge\",\n\t\t\tdata: { label: \"Agent activity\" },\n\t\t},\n\t\t{\n\t\t\tid: \"tool-audit\",\n\t\t\tslot: \"conversation.tool\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"conversation.read\",\n\t\t\tcomponentKey: \"builtin.tool-audit\",\n\t\t\tdata: { label: \"Tool audit\" },\n\t\t},\n\t\t{\n\t\t\tid: \"plugin-diagnostics\",\n\t\t\tslot: \"settings.panel\",\n\t\t\tversion: 1,\n\t\t\torder: 10,\n\t\t\tcapability: \"settings.read\",\n\t\t\tcomponentKey: \"builtin.plugin-diagnostics\",\n\t\t\tdata: { label: \"Plugin diagnostics\" },\n\t\t},\n\t] as const),\n}) satisfies WebManifest;\n\nconst API_BY_PROVIDER: Readonly<Record<string, Exclude<ModelApi, \"faux\">>> = {\n\topenai: \"openai-responses\",\n\tdeepseek: \"openai-chat-completions\",\n\tkimi: \"openai-chat-completions\",\n\tzhipu: \"openai-chat-completions\",\n\tanthropic: \"anthropic-messages\",\n};\n\nconst BUILTIN_PROVIDER_NAMES: Readonly<Record<string, string>> = {\n\topenai: \"OpenAI\",\n\tanthropic: \"Anthropic\",\n\tdeepseek: \"DeepSeek\",\n\tkimi: \"Kimi\",\n\tzhipu: \"Zhipu AI\",\n};\n\nconst API_KEY_ENV_BY_PROVIDER: Readonly<Record<string, string>> = {\n\topenai: \"OPENAI_API_KEY\",\n\tanthropic: \"ANTHROPIC_API_KEY\",\n\tdeepseek: \"DEEPSEEK_API_KEY\",\n\tkimi: \"KIMI_API_KEY\",\n\tzhipu: \"ZAI_API_KEY\",\n};\n\nexport function createProductHost(options: ProductHostOptions): ProductHost {\n\tlet projectTrusted = options.projectTrusted;\n\tlet manager: McpManager | undefined;\n\tlet connected = new Map<string, { tools: number; resources: number; prompts: number }>();\n\tlet disposed = false;\n\tlet startupConfiguration = options.startupConfiguration;\n\tconst listeners = new Set<ProductHostListener>();\n\tconst trustStore = new ProjectTrustStore(join(options.agentDir, \"trust.json\"));\n\tconst registry = options.context.require(providerRegistryKey);\n\tconst modelCatalog = options.context.require(modelCatalogKey);\n\ttype ProviderSnapshot = Pick<Provider, \"id\" | \"name\" | \"models\">;\n\tconst availableProviders = (): ProviderSnapshot[] => {\n\t\tconst providers: ProviderSnapshot[] = registry.snapshot().map(({ provider }) => provider);\n\t\tfor (const [id, name] of Object.entries(BUILTIN_PROVIDER_NAMES)) {\n\t\t\tif (providers.some((provider) => provider.id === id)) continue;\n\t\t\tconst models = modelCatalog.list(id);\n\t\t\tif (models.length) providers.push({ id, name, models });\n\t\t}\n\t\tfor (const configured of startupConfiguration?.providers ?? []) {\n\t\t\tif (!providers.some((provider) => provider.id === configured.id) && configured.models) {\n\t\t\t\tproviders.push({ id: configured.id, name: configured.name ?? configured.id, models: configured.models });\n\t\t\t}\n\t\t}\n\t\tif (options.provider && !providers.some((provider) => provider.id === options.provider?.id)) {\n\t\t\tproviders.push(options.provider);\n\t\t}\n\t\treturn providers;\n\t};\n\tconst selectRuntime = (\n\t\tproviderId: string,\n\t\tmodelId?: string,\n\t): { readonly provider: Provider; readonly model: import(\"@di-code/ai\").Model } => {\n\t\ttry {\n\t\t\treturn registry.select(providerId, modelId);\n\t\t} catch (cause) {\n\t\t\tconst provider = options.provider;\n\t\t\tconst model =\n\t\t\t\tprovider?.id === providerId\n\t\t\t\t\t? modelId === undefined\n\t\t\t\t\t\t? provider.models[0]\n\t\t\t\t\t\t: provider.models.find((candidate) => candidate.id === modelId)\n\t\t\t\t\t: undefined;\n\t\t\tif (provider && model) return { provider, model };\n\t\t\tconst configured = startupConfiguration?.providers.find((candidate) => candidate.id === providerId);\n\t\t\tif (configured) {\n\t\t\t\ttry {\n\t\t\t\t\treturn resolveStartupRuntime({}, [configured], { providerId, modelId });\n\t\t\t\t} catch {\n\t\t\t\t\t// Login supplies a credential after model selection, so an incomplete saved entry must not block it.\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst apiKeyEnvironmentVariable = API_KEY_ENV_BY_PROVIDER[providerId];\n\t\t\tif (apiKeyEnvironmentVariable) {\n\t\t\t\treturn resolveStartupRuntime(\n\t\t\t\t\t{\n\t\t\t\t\t\tDI_CODE_PROVIDER: providerId,\n\t\t\t\t\t\t...(modelId ? { DI_CODE_MODEL: modelId } : {}),\n\t\t\t\t\t\t[apiKeyEnvironmentVariable]: \"pending-web-provider-configuration\",\n\t\t\t\t\t},\n\t\t\t\t\t[],\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow cause;\n\t\t}\n\t};\n\tconst ensureOpen = (): void => {\n\t\tif (disposed) throw new Error(\"ProductHost has been disposed.\");\n\t};\n\tconst throwIfAborted = (signal: AbortSignal | undefined): void => {\n\t\tif (signal?.aborted) throw signal.reason ?? new Error(\"ProductHost operation was cancelled.\");\n\t};\n\tconst emitAudit = (event: Omit<ProductHostEvent, \"type\">): void => {\n\t\tfor (const listener of listeners)\n\t\t\tqueueMicrotask(() => {\n\t\t\t\ttry {\n\t\t\t\t\tPromise.resolve(listener({ type: \"product_audit\", ...event })).catch(() => undefined);\n\t\t\t\t} catch {\n\t\t\t\t\t// Audit observers cannot interrupt a product configuration change.\n\t\t\t\t}\n\t\t\t});\n\t};\n\tconst providerSummary = (provider: {\n\t\tid: string;\n\t\tname: string;\n\t\tmodels: readonly {\n\t\t\tid: string;\n\t\t\tname: string;\n\t\t\tinput: readonly string[];\n\t\t\treasoningEfforts?: readonly (\"low\" | \"medium\" | \"high\" | \"max\")[];\n\t\t}[];\n\t}): RpcProviderSummary => ({\n\t\tid: provider.id,\n\t\tname: provider.name,\n\t\tmodels: provider.models.map((model) => ({\n\t\t\tid: model.id,\n\t\t\tname: model.name,\n\t\t\tinput: [...model.input],\n\t\t\t...(model.reasoningEfforts ? { reasoningEfforts: [...model.reasoningEfforts] } : {}),\n\t\t})),\n\t\tconfigured: isProviderConfigured(provider.id),\n\t});\n\tconst settingsSnapshot = (): RpcSettingsSnapshot => {\n\t\tconst configuration = startupConfiguration;\n\t\tconst runtime =\n\t\t\toptions.runtimeSnapshot?.() ??\n\t\t\t(options.provider\n\t\t\t\t? { providerId: options.provider.id, modelId: options.model?.id ?? options.provider.models[0]?.id ?? \"\" }\n\t\t\t\t: undefined);\n\t\tconst allProviders = availableProviders();\n\t\treturn {\n\t\t\tproviders: allProviders.map((provider) => {\n\t\t\t\tconst configured = configuration?.providers.find((item) => item.id === provider.id);\n\t\t\t\tconst key = configured?.apiKey;\n\t\t\t\tconst keySource = key?.match(/^\\$\\{?([A-Za-z_][A-Za-z0-9_]*)\\}?$/)\n\t\t\t\t\t? \"environment\"\n\t\t\t\t\t: key\n\t\t\t\t\t\t? \"settings\"\n\t\t\t\t\t\t: \"missing\";\n\t\t\t\treturn {\n\t\t\t\t\t...providerSummary(provider),\n\t\t\t\t\tapi: configured?.api ?? API_BY_PROVIDER[provider.id] ?? \"\",\n\t\t\t\t\t...(configured?.baseUrl ? { baseUrl: configured.baseUrl } : {}),\n\t\t\t\t\tapiKeySource: keySource,\n\t\t\t\t};\n\t\t\t}),\n\t\t\tdefaults: configuration?.defaults ?? {},\n\t\t\truntime: runtime ?? { providerId: \"uninitialized\", modelId: \"uninitialized\" },\n\t\t\t...(configuration?.locale ? { locale: configuration.locale } : {}),\n\t\t\tpermissionMode: configuration?.permissionMode ?? \"ask\",\n\t\t\tsources: {\n\t\t\t\tprovider: configuration?.environment.DI_CODE_PROVIDER ? \"environment\" : \"settings\",\n\t\t\t\tmodel: configuration?.environment.DI_CODE_MODEL ? \"environment\" : \"settings\",\n\t\t\t\tlocale: configuration?.environment.DI_CODE_LOCALE\n\t\t\t\t\t? \"environment\"\n\t\t\t\t\t: configuration?.locale\n\t\t\t\t\t\t? \"settings\"\n\t\t\t\t\t\t: \"default\",\n\t\t\t\tpermissionMode: configuration?.permissionMode ? \"settings\" : \"default\",\n\t\t\t\truntime: \"runtime\",\n\t\t\t},\n\t\t};\n\t};\n\tconst isProviderConfigured = (providerId: string): boolean => {\n\t\tif (providerId === \"faux\") return options.provider?.id === \"faux\";\n\t\tif (options.provider?.id === providerId) return true;\n\t\ttry {\n\t\t\tconst configuration = startupConfiguration;\n\t\t\tconst configured = configuration?.providers.find((item) => item.id === providerId);\n\t\t\tif (configuration && configured) {\n\t\t\t\tresolveStartupRuntime(configuration.environment, [configured], {\n\t\t\t\t\tproviderId,\n\t\t\t\t\tmodelId: configured.models?.[0]?.id,\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tresolveStartupRuntime(configuration?.environment ?? process.env, [], { providerId });\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t};\n\tconst connect = async (signal?: AbortSignal): Promise<void> => {\n\t\tthrowIfAborted(signal);\n\t\tconst configurations = await options.context.require(mcpConfigServiceKey).load({\n\t\t\tcwd: options.cwd,\n\t\t\tprojectTrusted,\n\t\t});\n\t\tconst service = options.context.require(mcpClientServiceKey);\n\t\tif (manager !== undefined) await service.close(manager);\n\t\tconnected = new Map();\n\t\tconst result = await service.connect(configurations, { signal });\n\t\tthrowIfAborted(signal);\n\t\tmanager = result.manager;\n\t\tfor (const server of result.servers)\n\t\t\tconnected.set(server.config.id, {\n\t\t\t\ttools: server.tools.length,\n\t\t\t\tresources: server.resources.length,\n\t\t\t\tprompts: server.prompts.length,\n\t\t\t});\n\t};\n\tconst listMcpServers = async (signal?: AbortSignal): Promise<readonly RpcMcpServerInfo[]> => {\n\t\tensureOpen();\n\t\tthrowIfAborted(signal);\n\t\tconst configured = await Promise.all(\n\t\t\t([\"user\", \"project\", \"local\"] as const).map((scope) => listMcpConfig(options.cwd, scope)),\n\t\t);\n\t\tconst seen = new Set<string>();\n\t\tconst result = configured\n\t\t\t.flat()\n\t\t\t.filter((item) => {\n\t\t\t\tif (seen.has(item.id)) return false;\n\t\t\t\tseen.add(item.id);\n\t\t\t\treturn true;\n\t\t\t})\n\t\t\t.map((item) => {\n\t\t\t\tconst stats = connected.get(item.id);\n\t\t\t\treturn {\n\t\t\t\t\tid: item.id,\n\t\t\t\t\tscope: item.scope,\n\t\t\t\t\tstate: stats ? \"connected\" : \"disconnected\",\n\t\t\t\t\ttools: stats?.tools ?? 0,\n\t\t\t\t\tresources: stats?.resources ?? 0,\n\t\t\t\t\tprompts: stats?.prompts ?? 0,\n\t\t\t\t} satisfies RpcMcpServerInfo;\n\t\t\t});\n\t\tthrowIfAborted(signal);\n\t\treturn result;\n\t};\n\tconst listPlugins = async (): Promise<readonly RpcPluginInfo[]> => {\n\t\tensureOpen();\n\t\tconst manager = options.context.get(pluginManagerKey);\n\t\tconst managed = manager\n\t\t\t? (await manager.list()).map((plugin) => ({\n\t\t\t\t\tid: plugin.id,\n\t\t\t\t\tversion: plugin.manifest.version,\n\t\t\t\t\tenabled: plugin.enabled,\n\t\t\t\t\tinstalledAt: plugin.installedAt,\n\t\t\t\t\tcapabilities: Object.keys(plugin.manifest.capabilities).sort(),\n\t\t\t\t\tsource: \"managed\" as const,\n\t\t\t\t\tstatus: plugin.enabled ? (\"active\" as const) : (\"disabled\" as const),\n\t\t\t\t}))\n\t\t\t: [];\n\t\tconst inventory = options.context.get(pluginInventoryKey)?.snapshot();\n\t\tconst project =\n\t\t\toptions.includeProjectPluginInventory !== false\n\t\t\t\t? (inventory?.entries\n\t\t\t\t\t\t.filter((record) => record.entry.projectLocal)\n\t\t\t\t\t\t.map((record) => ({\n\t\t\t\t\t\t\tid: record.entry.id,\n\t\t\t\t\t\t\tversion: \"composition\",\n\t\t\t\t\t\t\tenabled: record.status === \"active\",\n\t\t\t\t\t\t\tinstalledAt: \"\",\n\t\t\t\t\t\t\tcapabilities: [],\n\t\t\t\t\t\t\tsource: \"project\" as const,\n\t\t\t\t\t\t\tstatus: record.status === \"pending\" || record.status === \"loading\" ? (\"skipped\" as const) : record.status,\n\t\t\t\t\t\t\terror: record.error?.message,\n\t\t\t\t\t\t})) ?? [])\n\t\t\t\t: [];\n\t\treturn [...managed, ...project];\n\t};\n\tconst getWebContributions = async (): Promise<WebManifest> => {\n\t\tensureOpen();\n\t\tconst manager = options.context.get(pluginManagerKey);\n\t\tconst contributions: WebContribution[] = [...BUILTIN_WEB_MANIFEST.contributions];\n\t\tif (manager && projectTrusted) {\n\t\t\tfor (const plugin of await manager.list()) {\n\t\t\t\tif (plugin.enabled && plugin.manifest.web) contributions.push(...plugin.manifest.web.contributions);\n\t\t\t}\n\t\t}\n\t\treturn { ...BUILTIN_WEB_MANIFEST, contributions: Object.freeze(contributions) };\n\t};\n\treturn {\n\t\tstate: () => ({ projectTrusted }),\n\t\tlistProviders: () => {\n\t\t\treturn availableProviders().map(providerSummary);\n\t\t},\n\t\tconfigureCustomProvider: async (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst configuration = await saveGlobalCustomProvider(options.agentDir, input);\n\t\t\tthrowIfAborted(signal);\n\t\t\tstartupConfiguration = (await options.reloadConfiguration?.()) ?? startupConfiguration;\n\t\t\treturn {\n\t\t\t\tid: configuration.id,\n\t\t\t\tname: configuration.name ?? configuration.id,\n\t\t\t\tmodels: (configuration.models ?? []).map((model) => ({\n\t\t\t\t\tid: model.id,\n\t\t\t\t\tname: model.name,\n\t\t\t\t\tinput: [...model.input],\n\t\t\t\t})),\n\t\t\t\tconfigured: true,\n\t\t\t};\n\t\t},\n\t\tgetSettings: settingsSnapshot,\n\t\tsetRuntimePreference: async (providerId, modelId) => {\n\t\t\tensureOpen();\n\t\t\tconst selection = selectRuntime(providerId, modelId);\n\t\t\tawait saveScopedModelSelection(options.cwd, options.agentDir, selection.provider.id, selection.model.id);\n\t\t\tconst refreshed = (await options.reloadRuntime?.()) ?? (await options.reloadConfiguration?.());\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetThinkingLevelPreference: async (providerId, modelId, level) => {\n\t\t\tensureOpen();\n\t\t\tconst selection = selectRuntime(providerId, modelId);\n\t\t\tif (!selection.model.reasoningEfforts?.includes(level))\n\t\t\t\tthrow new Error(`Thinking level \"${level}\" is not supported by model \"${selection.model.id}\".`);\n\t\t\tawait saveScopedThinkingLevel(options.cwd, options.agentDir, selection.provider.id, selection.model.id, level);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetDefaultProvider: async (providerId) => {\n\t\t\tconst currentProvider = startupConfiguration?.defaults?.providerId;\n\t\t\tconst current = currentProvider === providerId ? startupConfiguration?.defaults?.modelId : undefined;\n\t\t\tawait saveScopedModelSelection(\n\t\t\t\toptions.cwd,\n\t\t\t\toptions.agentDir,\n\t\t\t\tproviderId,\n\t\t\t\tcurrent ?? selectRuntime(providerId).model.id,\n\t\t\t);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetDefaultModel: async (modelId) => {\n\t\t\tconst providerId = startupConfiguration?.defaults?.providerId ?? options.provider?.id;\n\t\t\tif (!providerId) throw new Error(\"A default Provider is required before selecting a model.\");\n\t\t\tawait saveScopedModelSelection(options.cwd, options.agentDir, providerId, modelId);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetLocale: async (locale) => {\n\t\t\tawait saveGlobalLocale(options.agentDir, locale);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t},\n\t\tsetPermissionMode: async (mode) => {\n\t\t\tawait saveGlobalPermissionMode(options.agentDir, mode);\n\t\t\tconst refreshed = await options.reloadConfiguration?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t\toptions.onPermissionModeChange?.(mode);\n\t\t},\n\t\tlogin: async (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst selection = selectRuntime(input.providerId, input.modelId);\n\t\t\tconst api = (input.api ?? API_BY_PROVIDER[input.providerId]) as Exclude<ModelApi, \"faux\"> | undefined;\n\t\t\tif (!api) throw new Error(\"Provider login API is unavailable.\");\n\t\t\tawait saveGlobalProviderApiKey(options.agentDir, input.providerId, api, input.apiKey, selection.model.id);\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst refreshed = await options.reloadRuntime?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t\tthrowIfAborted(signal);\n\t\t\temitAudit({ action: \"login\", target: input.providerId });\n\t\t\treturn providerSummary(selection.provider);\n\t\t},\n\t\tlogout: async (providerId, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait removeGlobalProviderApiKey(options.agentDir, providerId);\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst refreshed = await options.reloadRuntime?.();\n\t\t\tif (refreshed) startupConfiguration = refreshed;\n\t\t\temitAudit({ action: \"logout\", target: providerId });\n\t\t},\n\t\tgetProjectTrust: () => projectTrusted,\n\t\tsetProjectTrust: async (trusted, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait trustStore.set(options.cwd, trusted);\n\t\t\tthrowIfAborted(signal);\n\t\t\tprojectTrusted = trusted;\n\t\t\tawait options.onProjectTrustChange?.(trusted);\n\t\t\tawait connect(signal).catch((cause) => {\n\t\t\t\tif (signal?.aborted) throw cause;\n\t\t\t});\n\t\t\tawait options.refreshResources?.(trusted, signal);\n\t\t\temitAudit({ action: \"set_project_trust\", projectTrusted });\n\t\t\treturn projectTrusted;\n\t\t},\n\t\tlistContextFiles: async (signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst snapshot = await options.context\n\t\t\t\t.require(interactiveResourceServiceKey)\n\t\t\t\t.load({ cwd: options.cwd, agentDir: options.agentDir, projectTrusted });\n\t\t\tconst result = snapshot.resources.contextFiles.map((file) => ({\n\t\t\t\tpath: file.path,\n\t\t\t\tscope: file.scope,\n\t\t\t\tbytes: Buffer.byteLength(file.content, \"utf8\"),\n\t\t\t}));\n\t\t\tthrowIfAborted(signal);\n\t\t\treturn result;\n\t\t},\n\t\tlistMcpServers,\n\t\tlistPlugins,\n\t\tgetWebContributions,\n\t\tsetPluginEnabled: async (pluginId, enabled, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst manager = options.context.get(pluginManagerKey);\n\t\t\tif (!manager) throw new Error(\"Plugin manager is unavailable.\");\n\t\t\tconst plugin = enabled\n\t\t\t\t? await manager.execute({\n\t\t\t\t\t\taction: \"enable\",\n\t\t\t\t\t\targument: pluginId,\n\t\t\t\t\t\tstdout: () => undefined,\n\t\t\t\t\t\tstderr: () => undefined,\n\t\t\t\t\t})\n\t\t\t\t: await manager.execute({\n\t\t\t\t\t\taction: \"disable\",\n\t\t\t\t\t\targument: pluginId,\n\t\t\t\t\t\tstdout: () => undefined,\n\t\t\t\t\t\tstderr: () => undefined,\n\t\t\t\t\t});\n\t\t\tif (plugin !== 0) throw new Error(`Unable to ${enabled ? \"enable\" : \"disable\"} plugin.`);\n\t\t\tthrowIfAborted(signal);\n\t\t\tconst updated = (await manager.list()).find((item) => item.id === pluginId);\n\t\t\tif (!updated) throw new Error(`Unknown plugin: ${pluginId}`);\n\t\t\treturn {\n\t\t\t\tid: updated.id,\n\t\t\t\tversion: updated.manifest.version,\n\t\t\t\tenabled: updated.enabled,\n\t\t\t\tinstalledAt: updated.installedAt,\n\t\t\t\tcapabilities: Object.keys(updated.manifest.capabilities).sort(),\n\t\t\t};\n\t\t},\n\t\tconfigureMcpServer: async (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait addMcpConfig(options.cwd, input.scope, input.serverId, input.config);\n\t\t\tawait connect(signal);\n\t\t\tawait options.refreshResources?.(undefined, signal);\n\t\t\temitAudit({ action: \"configure_mcp_server\", target: input.serverId });\n\t\t\treturn (\n\t\t\t\t(await listMcpServers()).find((server) => server.id === input.serverId) ?? {\n\t\t\t\t\tid: input.serverId,\n\t\t\t\t\tscope: input.scope,\n\t\t\t\t\tstate: \"disconnected\",\n\t\t\t\t\ttools: 0,\n\t\t\t\t\tresources: 0,\n\t\t\t\t\tprompts: 0,\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\t\tremoveMcpServer: async (serverId, scope, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tawait removeMcpConfig(options.cwd, scope, serverId);\n\t\t\tawait connect(signal);\n\t\t\tawait options.refreshResources?.(undefined, signal);\n\t\t\temitAudit({ action: \"remove_mcp_server\", target: serverId });\n\t\t},\n\t\treconnectMcpServer: async (serverId, signal) => {\n\t\t\tensureOpen();\n\t\t\tthrowIfAborted(signal);\n\t\t\tif (!manager) await connect(signal);\n\t\t\tif (!manager) throw new Error(\"MCP manager is unavailable.\");\n\t\t\tconst server = await manager.reconnect(serverId, signal);\n\t\t\tconnected.set(serverId, {\n\t\t\t\ttools: server.tools.length,\n\t\t\t\tresources: server.resources.length,\n\t\t\t\tprompts: server.prompts.length,\n\t\t\t});\n\t\t\tawait options.refreshResources?.(undefined, signal);\n\t\t\tconst info = (await listMcpServers()).find((item) => item.id === serverId);\n\t\t\tif (!info) throw new Error(`MCP server \"${serverId}\" was not found.`);\n\t\t\temitAudit({ action: \"reconnect_mcp_server\", target: serverId });\n\t\t\treturn info;\n\t\t},\n\t\tsubscribe: (listener) => {\n\t\t\tlisteners.add(listener);\n\t\t\treturn () => listeners.delete(listener);\n\t\t},\n\t\tdispose: async () => {\n\t\t\tif (disposed) return;\n\t\t\tdisposed = true;\n\t\t\tif (manager !== undefined) await options.context.require(mcpClientServiceKey).close(manager);\n\t\t\tmanager = undefined;\n\t\t\tconnected.clear();\n\t\t\tlisteners.clear();\n\t\t},\n\t};\n}\n"]}
@@ -1,13 +1,29 @@
1
- import { type ToolApprovalCapability } from "@di-code/builtins";
1
+ import { type ToolApprovalCapability, type ToolPolicyCapability } from "@di-code/builtins";
2
2
  import { type Context, type Disposer } from "@di-code/plugin-runtime";
3
+ import { type SessionPluginFactory, type UserInteraction } from "@di-code/plugin-sdk";
3
4
  import type { SkillResource } from "../core/resources/types.ts";
4
5
  import { type AgentSessionOptions, type AgentSessionTool } from "../core/session.ts";
5
- export interface CompositionSessionOptions extends Omit<AgentSessionOptions, "tools" | "skills"> {
6
+ export interface CompositionSessionOptions extends Omit<AgentSessionOptions, "tools" | "skills" | "planMode"> {
6
7
  readonly skills?: readonly SkillResource[];
7
8
  /** MCP tools already adapted by the product integration layer. */
8
9
  readonly externalTools?: readonly AgentSessionTool[];
9
10
  /** Per-session approval boundary; defaults to the composition capability. */
10
11
  readonly toolApproval?: ToolApprovalCapability;
12
+ /** Optional policy override; otherwise a durable Session policy is created. */
13
+ readonly toolPolicy?: ToolPolicyCapability;
14
+ /** Read-only state supplied to the Session policy at each authorization boundary. */
15
+ readonly getToolPolicyProjection?: () => unknown;
16
+ readonly getToolPolicyPluginState?: () => unknown;
17
+ /** Optional structured interaction surface used by session-scoped tools. */
18
+ readonly interaction?: UserInteraction;
19
+ /** Session-scoped plugin factories. Each binding receives an isolated public scope. */
20
+ readonly sessionPlugins?: readonly {
21
+ readonly factory: SessionPluginFactory<unknown>;
22
+ readonly config: unknown;
23
+ }[];
24
+ readonly planMode?: {
25
+ readonly section: string;
26
+ };
11
27
  }
12
28
  /**
13
29
  * Installs the product AgentSession implementation behind the composition factory.
@@ -1 +1 @@
1
- {"version":3,"file":"session-factory.d.ts","sourceRoot":"","sources":["../../src/runtime/session-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,KAAK,sBAAsB,EAM3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAgB,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnG,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrD,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;CAC/C;AAaD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAgErE"}
1
+ {"version":3,"file":"session-factory.d.ts","sourceRoot":"","sources":["../../src/runtime/session-factory.ts"],"names":[],"mappings":"AACA,OAAO,EAWN,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAMzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,KAAK,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAMN,KAAK,oBAAoB,EAGzB,KAAK,eAAe,EACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAgB,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEnG,MAAM,WAAW,yBAA0B,SAAQ,IAAI,CAAC,mBAAmB,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC5G,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,kEAAkE;IAClE,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrD,6EAA6E;IAC7E,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAC/C,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAC3C,qFAAqF;IACrF,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,OAAO,CAAC;IACjD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,OAAO,CAAC;IAClD,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;IACvC,uFAAuF;IACvF,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IACnH,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AA+BD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAySrE"}