@di-code/coding-agent 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -68
- package/compositions/base.yml +54 -0
- package/compositions/interactive.yml +14 -0
- package/compositions/json.yml +6 -0
- package/compositions/print.yml +5 -0
- package/compositions/rpc.yml +12 -0
- package/compositions/webui.yml +9 -0
- package/dist/cli.d.ts +22 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +97 -3
- package/dist/cli.js.map +1 -1
- package/dist/composition-loader-entry.d.ts +11 -0
- package/dist/composition-loader-entry.d.ts.map +1 -0
- package/dist/composition-loader-entry.js +12 -0
- package/dist/composition-loader-entry.js.map +1 -0
- package/dist/compositions.d.ts +32 -0
- package/dist/compositions.d.ts.map +1 -0
- package/dist/compositions.js +173 -0
- package/dist/compositions.js.map +1 -0
- package/dist/core/session/session-manager.d.ts +9 -2
- package/dist/core/session/session-manager.d.ts.map +1 -1
- package/dist/core/session/session-manager.js +28 -0
- package/dist/core/session/session-manager.js.map +1 -1
- package/dist/core/session/session-storage.d.ts.map +1 -1
- package/dist/core/session/session-storage.js +20 -3
- package/dist/core/session/session-storage.js.map +1 -1
- package/dist/core/session/types.d.ts +11 -2
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/types.js.map +1 -1
- package/dist/core/session-tools.d.ts +5 -0
- package/dist/core/session-tools.d.ts.map +1 -0
- package/dist/core/session-tools.js +17 -0
- package/dist/core/session-tools.js.map +1 -0
- package/dist/core/session.d.ts +21 -7
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +77 -41
- package/dist/core/session.js.map +1 -1
- package/dist/core/tools/bash.d.ts +1 -38
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +1 -207
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +1 -24
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +1 -135
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +1 -26
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -140
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js +1 -23
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/file-search.d.ts +1 -13
- package/dist/core/tools/file-search.d.ts.map +1 -1
- package/dist/core/tools/file-search.js +1 -98
- package/dist/core/tools/file-search.js.map +1 -1
- package/dist/core/tools/glob.d.ts +1 -10
- package/dist/core/tools/glob.d.ts.map +1 -1
- package/dist/core/tools/glob.js +1 -43
- package/dist/core/tools/glob.js.map +1 -1
- package/dist/core/tools/grep.d.ts +1 -12
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -66
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/load-skill.d.ts +1 -9
- package/dist/core/tools/load-skill.d.ts.map +1 -1
- package/dist/core/tools/load-skill.js +1 -21
- package/dist/core/tools/load-skill.js.map +1 -1
- package/dist/core/tools/path-boundary.d.ts +1 -4
- package/dist/core/tools/path-boundary.d.ts.map +1 -1
- package/dist/core/tools/path-boundary.js +1 -65
- package/dist/core/tools/path-boundary.js.map +1 -1
- package/dist/core/tools/read.d.ts +1 -16
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -131
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts +1 -16
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -44
- package/dist/core/tools/write.js.map +1 -1
- package/dist/entry.js +30 -28
- package/dist/entry.js.map +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +2 -0
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/interactive/builtin.d.ts +17 -0
- package/dist/interactive/builtin.d.ts.map +1 -0
- package/dist/interactive/builtin.js +47 -0
- package/dist/interactive/builtin.js.map +1 -0
- package/dist/interactive/controller.d.ts +85 -0
- package/dist/interactive/controller.d.ts.map +1 -0
- package/dist/interactive/controller.js +211 -0
- package/dist/interactive/controller.js.map +1 -0
- package/dist/interactive/index.d.ts +3 -0
- package/dist/interactive/index.d.ts.map +1 -0
- package/dist/interactive/index.js +3 -0
- package/dist/interactive/index.js.map +1 -0
- package/dist/interactive-host-entry.d.ts +7 -0
- package/dist/interactive-host-entry.d.ts.map +1 -0
- package/dist/interactive-host-entry.js +123 -0
- package/dist/interactive-host-entry.js.map +1 -0
- package/dist/interactive-profile.d.ts +18 -0
- package/dist/interactive-profile.d.ts.map +1 -0
- package/dist/interactive-profile.js +290 -0
- package/dist/interactive-profile.js.map +1 -0
- package/dist/interactive-resources-entry.d.ts +7 -0
- package/dist/interactive-resources-entry.d.ts.map +1 -0
- package/dist/interactive-resources-entry.js +42 -0
- package/dist/interactive-resources-entry.js.map +1 -0
- package/dist/legacy-main.d.ts +39 -0
- package/dist/legacy-main.d.ts.map +1 -0
- package/dist/legacy-main.js +611 -0
- package/dist/legacy-main.js.map +1 -0
- package/dist/main.d.ts +15 -34
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +130 -513
- package/dist/main.js.map +1 -1
- package/dist/mcp/entries.d.ts +42 -0
- package/dist/mcp/entries.d.ts.map +1 -0
- package/dist/mcp/entries.js +98 -0
- package/dist/mcp/entries.js.map +1 -0
- package/dist/mcp-client-entry.d.ts +5 -0
- package/dist/mcp-client-entry.d.ts.map +1 -0
- package/dist/mcp-client-entry.js +6 -0
- package/dist/mcp-client-entry.js.map +1 -0
- package/dist/mcp-config-entry.d.ts +5 -0
- package/dist/mcp-config-entry.d.ts.map +1 -0
- package/dist/mcp-config-entry.js +6 -0
- package/dist/mcp-config-entry.js.map +1 -0
- package/dist/mcp-tools-entry.d.ts +5 -0
- package/dist/mcp-tools-entry.d.ts.map +1 -0
- package/dist/mcp-tools-entry.js +6 -0
- package/dist/mcp-tools-entry.js.map +1 -0
- package/dist/mcp-transport-entry.d.ts +5 -0
- package/dist/mcp-transport-entry.d.ts.map +1 -0
- package/dist/mcp-transport-entry.js +6 -0
- package/dist/mcp-transport-entry.js.map +1 -0
- package/dist/modes/interactive-entry.d.ts +18 -0
- package/dist/modes/interactive-entry.d.ts.map +1 -0
- package/dist/modes/interactive-entry.js +21 -0
- package/dist/modes/interactive-entry.js.map +1 -0
- package/dist/modes/interactive-state.js +1 -1
- package/dist/modes/interactive-state.js.map +1 -1
- package/dist/modes/interactive.d.ts +16 -6
- package/dist/modes/interactive.d.ts.map +1 -1
- package/dist/modes/interactive.js +99 -33
- package/dist/modes/interactive.js.map +1 -1
- package/dist/modes/json-entry.d.ts +13 -0
- package/dist/modes/json-entry.d.ts.map +1 -0
- package/dist/modes/json-entry.js +14 -0
- package/dist/modes/json-entry.js.map +1 -0
- package/dist/modes/json.d.ts +4 -1
- package/dist/modes/json.d.ts.map +1 -1
- package/dist/modes/json.js +3 -3
- package/dist/modes/json.js.map +1 -1
- package/dist/modes/print-entry.d.ts +10 -0
- package/dist/modes/print-entry.d.ts.map +1 -0
- package/dist/modes/print-entry.js +11 -0
- package/dist/modes/print-entry.js.map +1 -0
- package/dist/modes/tree-selector.d.ts.map +1 -1
- package/dist/modes/tree-selector.js +4 -0
- package/dist/modes/tree-selector.js.map +1 -1
- package/dist/plugin-dump-composition.d.ts +6 -0
- package/dist/plugin-dump-composition.d.ts.map +1 -0
- package/dist/plugin-dump-composition.js +7 -0
- package/dist/plugin-dump-composition.js.map +1 -0
- package/dist/plugin-inventory.d.ts +7 -0
- package/dist/plugin-inventory.d.ts.map +1 -0
- package/dist/plugin-inventory.js +8 -0
- package/dist/plugin-inventory.js.map +1 -0
- package/dist/plugin-manager.d.ts +6 -0
- package/dist/plugin-manager.d.ts.map +1 -0
- package/dist/plugin-manager.js +7 -0
- package/dist/plugin-manager.js.map +1 -0
- package/dist/plugin-trace.d.ts +6 -0
- package/dist/plugin-trace.d.ts.map +1 -0
- package/dist/plugin-trace.js +7 -0
- package/dist/plugin-trace.js.map +1 -0
- package/dist/plugins/dynamic-broker.d.ts +76 -0
- package/dist/plugins/dynamic-broker.d.ts.map +1 -0
- package/dist/plugins/dynamic-broker.js +852 -0
- package/dist/plugins/dynamic-broker.js.map +1 -0
- package/dist/plugins/profile.d.ts +15 -0
- package/dist/plugins/profile.d.ts.map +1 -0
- package/dist/plugins/profile.js +34 -0
- package/dist/plugins/profile.js.map +1 -0
- package/dist/plugins/runtime-host.d.ts +37 -0
- package/dist/plugins/runtime-host.d.ts.map +1 -0
- package/dist/plugins/runtime-host.js +95 -0
- package/dist/plugins/runtime-host.js.map +1 -0
- package/dist/plugins/trust.d.ts +8 -0
- package/dist/plugins/trust.d.ts.map +1 -0
- package/dist/plugins/trust.js +59 -0
- package/dist/plugins/trust.js.map +1 -0
- package/dist/project-trust-entry.d.ts +15 -0
- package/dist/project-trust-entry.d.ts.map +1 -0
- package/dist/project-trust-entry.js +15 -0
- package/dist/project-trust-entry.js.map +1 -0
- package/dist/rpc/client.d.ts +78 -6
- package/dist/rpc/client.d.ts.map +1 -1
- package/dist/rpc/client.js +172 -4
- package/dist/rpc/client.js.map +1 -1
- package/dist/rpc/dispatcher.d.ts +121 -0
- package/dist/rpc/dispatcher.d.ts.map +1 -0
- package/dist/rpc/dispatcher.js +994 -0
- package/dist/rpc/dispatcher.js.map +1 -0
- package/dist/rpc/index.d.ts +2 -0
- package/dist/rpc/index.d.ts.map +1 -1
- package/dist/rpc/index.js +2 -0
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/lifecycle.d.ts +6 -0
- package/dist/rpc/lifecycle.d.ts.map +1 -0
- package/dist/rpc/lifecycle.js +24 -0
- package/dist/rpc/lifecycle.js.map +1 -0
- package/dist/rpc/protocol.d.ts +112 -31
- package/dist/rpc/protocol.d.ts.map +1 -1
- package/dist/rpc/protocol.js +569 -117
- package/dist/rpc/protocol.js.map +1 -1
- package/dist/rpc/server-service.d.ts +7 -0
- package/dist/rpc/server-service.d.ts.map +1 -0
- package/dist/rpc/server-service.js +3 -0
- package/dist/rpc/server-service.js.map +1 -0
- package/dist/rpc/server.d.ts +16 -19
- package/dist/rpc/server.d.ts.map +1 -1
- package/dist/rpc/server.js +59 -115
- package/dist/rpc/server.js.map +1 -1
- package/dist/rpc-client-sdk-entry.d.ts +12 -0
- package/dist/rpc-client-sdk-entry.d.ts.map +1 -0
- package/dist/rpc-client-sdk-entry.js +11 -0
- package/dist/rpc-client-sdk-entry.js.map +1 -0
- package/dist/rpc-entry.js +50 -18
- package/dist/rpc-entry.js.map +1 -1
- package/dist/rpc-server-entry.d.ts +8 -0
- package/dist/rpc-server-entry.d.ts.map +1 -0
- package/dist/rpc-server-entry.js +67 -0
- package/dist/rpc-server-entry.js.map +1 -0
- package/dist/runtime/attachment-store.d.ts +13 -0
- package/dist/runtime/attachment-store.d.ts.map +1 -0
- package/dist/runtime/attachment-store.js +93 -0
- package/dist/runtime/attachment-store.js.map +1 -0
- package/dist/runtime/bootstrap.d.ts +14 -0
- package/dist/runtime/bootstrap.d.ts.map +1 -0
- package/dist/runtime/bootstrap.js +29 -0
- package/dist/runtime/bootstrap.js.map +1 -0
- package/dist/runtime/interactive-host-service.d.ts +22 -0
- package/dist/runtime/interactive-host-service.d.ts.map +1 -0
- package/dist/runtime/interactive-host-service.js +2 -0
- package/dist/runtime/interactive-host-service.js.map +1 -0
- package/dist/runtime/interactive-resource-service.d.ts +11 -0
- package/dist/runtime/interactive-resource-service.d.ts.map +1 -0
- package/dist/runtime/interactive-resource-service.js +3 -0
- package/dist/runtime/interactive-resource-service.js.map +1 -0
- package/dist/runtime/plugin-inventory-entry.d.ts +5 -0
- package/dist/runtime/plugin-inventory-entry.d.ts.map +1 -0
- package/dist/runtime/plugin-inventory-entry.js +18 -0
- package/dist/runtime/plugin-inventory-entry.js.map +1 -0
- package/dist/runtime/plugin-inventory-service.d.ts +8 -0
- package/dist/runtime/plugin-inventory-service.d.ts.map +1 -0
- package/dist/runtime/plugin-inventory-service.js +3 -0
- package/dist/runtime/plugin-inventory-service.js.map +1 -0
- package/dist/runtime/plugin-manager-entry.d.ts +20 -0
- package/dist/runtime/plugin-manager-entry.d.ts.map +1 -0
- package/dist/runtime/plugin-manager-entry.js +96 -0
- package/dist/runtime/plugin-manager-entry.js.map +1 -0
- package/dist/runtime/plugin-observability-entry.d.ts +12 -0
- package/dist/runtime/plugin-observability-entry.d.ts.map +1 -0
- package/dist/runtime/plugin-observability-entry.js +73 -0
- package/dist/runtime/plugin-observability-entry.js.map +1 -0
- package/dist/runtime/product-host.d.ts +91 -0
- package/dist/runtime/product-host.d.ts.map +1 -0
- package/dist/runtime/product-host.js +529 -0
- package/dist/runtime/product-host.js.map +1 -0
- package/dist/runtime/session-factory.d.ts +17 -0
- package/dist/runtime/session-factory.d.ts.map +1 -0
- package/dist/runtime/session-factory.js +75 -0
- package/dist/runtime/session-factory.js.map +1 -0
- package/dist/runtime/session-host.d.ts +152 -0
- package/dist/runtime/session-host.d.ts.map +1 -0
- package/dist/runtime/session-host.js +895 -0
- package/dist/runtime/session-host.js.map +1 -0
- package/dist/runtime-core-entry.d.ts +11 -0
- package/dist/runtime-core-entry.d.ts.map +1 -0
- package/dist/runtime-core-entry.js +9 -0
- package/dist/runtime-core-entry.js.map +1 -0
- package/dist/session-factory-entry.d.ts +7 -0
- package/dist/session-factory-entry.d.ts.map +1 -0
- package/dist/session-factory-entry.js +9 -0
- package/dist/session-factory-entry.js.map +1 -0
- package/dist/session-store-jsonl-entry.d.ts +7 -0
- package/dist/session-store-jsonl-entry.d.ts.map +1 -0
- package/dist/session-store-jsonl-entry.js +33 -0
- package/dist/session-store-jsonl-entry.js.map +1 -0
- package/dist/startup.d.ts +21 -1
- package/dist/startup.d.ts.map +1 -1
- package/dist/startup.js +179 -10
- package/dist/startup.js.map +1 -1
- package/dist/subagents/index.d.ts +2 -0
- package/dist/subagents/index.d.ts.map +1 -0
- package/dist/subagents/index.js +2 -0
- package/dist/subagents/index.js.map +1 -0
- package/dist/subagents/service.d.ts +50 -0
- package/dist/subagents/service.d.ts.map +1 -0
- package/dist/subagents/service.js +521 -0
- package/dist/subagents/service.js.map +1 -0
- package/dist/ui-host.d.ts +125 -0
- package/dist/ui-host.d.ts.map +1 -0
- package/dist/ui-host.js +275 -0
- package/dist/ui-host.js.map +1 -0
- package/dist/web/assets/index-BwfuGMvv.css +1 -0
- package/dist/web/assets/index-DPUaJqFJ.js +41 -0
- package/dist/web/assets/index-DPUaJqFJ.js.map +1 -0
- package/dist/web/index.html +14 -0
- package/dist/web-command.d.ts +11 -0
- package/dist/web-command.d.ts.map +1 -0
- package/dist/web-command.js +114 -0
- package/dist/web-command.js.map +1 -0
- package/dist/web-frontend.d.ts +73 -0
- package/dist/web-frontend.d.ts.map +1 -0
- package/dist/web-frontend.js +249 -0
- package/dist/web-frontend.js.map +1 -0
- package/dist/web.d.ts +254 -0
- package/dist/web.d.ts.map +1 -0
- package/dist/web.js +740 -0
- package/dist/web.js.map +1 -0
- package/dist/webui-entry.d.ts +3 -0
- package/dist/webui-entry.d.ts.map +1 -0
- package/dist/webui-entry.js +73 -0
- package/dist/webui-entry.js.map +1 -0
- package/dist/webui.d.ts +91 -0
- package/dist/webui.d.ts.map +1 -0
- package/dist/webui.js +882 -0
- package/dist/webui.js.map +1 -0
- package/package.json +89 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webui.js","sourceRoot":"","sources":["../src/webui.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile } from \"node:child_process\";\nimport { createHash, randomBytes, randomUUID, timingSafeEqual } from \"node:crypto\";\nimport { mkdir, readFile, realpath, stat, writeFile } from \"node:fs/promises\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport { basename, extname, relative, resolve, sep } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { commandRegistryKey, type ToolApprovalCapability } from \"@di-code/builtins\";\nimport type { Context } from \"@di-code/plugin-runtime\";\nimport { createProjectTrustStore } from \"./project-trust-entry.ts\";\nimport { RpcDispatcher } from \"./rpc/dispatcher.ts\";\nimport { parseRpcRequest, RPC_PROTOCOL_VERSION, type RpcRequest, type RpcServerMessage } from \"./rpc/protocol.ts\";\nimport { createManagedAttachmentStore } from \"./runtime/attachment-store.ts\";\nimport { createProductHost, type ProductHost } from \"./runtime/product-host.ts\";\nimport { HostManager, type SessionActor, type SessionHostBootstrapOptions } from \"./runtime/session-host.ts\";\nimport {\n\tloadStartupConfiguration,\n\tresolveStartupRuntime,\n\ttype StartupConfiguration,\n\ttype StartupRuntime,\n} from \"./startup.ts\";\n\nexport interface WebUiServerOptions extends Omit<SessionHostBootstrapOptions, \"cwd\" | \"principal\" | \"toolApproval\"> {\n\treadonly context: Context;\n\treadonly allowedRoot: string;\n\t/** User-level directory shared by WebUI restarts for workspace registrations. */\n\treadonly workspaceRegistryDir?: string;\n\t/** Additional workspace roots explicitly authorized by the launcher. */\n\treadonly allowedWorkspaces?: readonly string[];\n\treadonly host?: string;\n\treadonly port?: number;\n\treadonly token?: string;\n\treadonly allowRemote?: boolean;\n\treadonly origins?: readonly string[];\n\treadonly maxBodyBytes?: number;\n\treadonly rateLimit?: { readonly windowMs: number; readonly maxRequests: number };\n\t/** Maximum simultaneous SSE subscriptions for one authenticated client. */\n\treadonly maxSseConnectionsPerClient?: number;\n\t/** Maximum simultaneous SSE subscriptions across the server. */\n\treadonly maxSseConnections?: number;\n\t/** Lifetime of a reconnect credential; defaults to ten minutes. */\n\treadonly resumeTokenTtlMs?: number;\n\t/** Optional SPA asset directory. API routes remain isolated under `/api`. */\n\treadonly staticRoot?: string;\n\t/** Additional same-origin development origin accepted by the API. */\n\treadonly developmentOrigin?: string;\n}\n\ninterface Connection {\n\treadonly queue: Array<RpcServerMessage | { readonly keepalive: true }>;\n\treadonly waiters: Array<() => void>;\n\treadonly maxQueue: number;\n\treadonly closeResponse: () => void;\n\treadonly release: () => void;\n\tclosed: boolean;\n}\n\ninterface ClientState {\n\treadonly id: string;\n\treadonly principal: string;\n\tresumeToken: string;\n\tresumeTokenExpiresAt: number;\n\treadonly dispatchers: Map<string, RpcDispatcher>;\n\treadonly productHosts: Map<string, ProductHost>;\n\treadonly connections: Set<Connection>;\n\treadonly requestTimes: number[];\n}\n\ninterface WebWorkspace {\n\treadonly id: string;\n\treadonly name: string;\n\treadonly root: string;\n}\n\nfunction json(res: ServerResponse, status: number, value: unknown): void {\n\tconst body = JSON.stringify(value);\n\tres.writeHead(status, { \"content-type\": \"application/json; charset=utf-8\", \"cache-control\": \"no-store\" });\n\tres.end(body);\n}\n\nfunction tokenFrom(req: IncomingMessage): string | undefined {\n\tconst authorization = req.headers.authorization;\n\tif (authorization?.startsWith(\"Bearer \")) return authorization.slice(\"Bearer \".length).trim();\n\tconst header = req.headers[\"x-di-code-token\"];\n\treturn typeof header === \"string\" ? header : undefined;\n}\n\nfunction cookieToken(req: IncomingMessage): string | undefined {\n\tconst cookies = req.headers.cookie;\n\tif (!cookies) return undefined;\n\tfor (const part of cookies.split(\";\")) {\n\t\tconst [name, value] = part.trim().split(\"=\", 2);\n\t\tif (name === \"di_code_web\") return value;\n\t}\n\treturn undefined;\n}\n\nconst MIME_TYPES: Readonly<Record<string, string>> = {\n\t\".css\": \"text/css; charset=utf-8\",\n\t\".html\": \"text/html; charset=utf-8\",\n\t\".ico\": \"image/x-icon\",\n\t\".js\": \"text/javascript; charset=utf-8\",\n\t\".json\": \"application/json; charset=utf-8\",\n\t\".map\": \"application/json; charset=utf-8\",\n\t\".svg\": \"image/svg+xml\",\n\t\".woff2\": \"font/woff2\",\n};\nconst execFileAsync = promisify(execFile);\n\nasync function body(req: IncomingMessage, maxBytes: number): Promise<string> {\n\tconst chunks: Buffer[] = [];\n\tlet size = 0;\n\tfor await (const chunk of req) {\n\t\tconst data = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n\t\tsize += data.byteLength;\n\t\tif (size > maxBytes) throw new Error(\"Request body exceeds the permitted size.\");\n\t\tchunks.push(data);\n\t}\n\treturn Buffer.concat(chunks).toString(\"utf8\");\n}\n\nfunction requestFromValue(value: unknown): RpcRequest {\n\tconst line = JSON.stringify(value);\n\tif (!line) throw new Error(\"RPC body must be a JSON object.\");\n\treturn parseRpcRequest(line);\n}\n\n/** Local-first HTTP/SSE adapter. It authenticates and queues transport messages; Agent work remains in RpcDispatcher. */\nexport class WebUiServer {\n\tprivate readonly options: WebUiServerOptions;\n\tprivate readonly hostManager: HostManager;\n\tprivate readonly clients = new Map<string, ClientState>();\n\tprivate readonly clientsByResumeToken = new Map<string, ClientState>();\n\tprivate readonly server: Server;\n\tprivate readonly addedWorkspaceRoots = new Set<string>();\n\tprivate readonly removedWorkspaceRoots = new Set<string>();\n\tprivate workspaceRegistryLoaded = false;\n\tprivate readonly workspaceNames = new Map<string, string>();\n\tprivate tokenValue: string;\n\tprivate sseConnections = 0;\n\tprivate disposed = false;\n\n\tconstructor(options: WebUiServerOptions) {\n\t\tif (options.token === undefined || options.token.length < 32)\n\t\t\tthrow new Error(\"WebUI requires a token of at least 32 characters.\");\n\t\tif (\n\t\t\toptions.resumeTokenTtlMs !== undefined &&\n\t\t\t(!Number.isSafeInteger(options.resumeTokenTtlMs) || options.resumeTokenTtlMs <= 0)\n\t\t)\n\t\t\tthrow new Error(\"WebUI resume token TTL must be a positive integer.\");\n\t\tif (\n\t\t\t(options.maxSseConnectionsPerClient !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(options.maxSseConnectionsPerClient) || options.maxSseConnectionsPerClient <= 0)) ||\n\t\t\t(options.maxSseConnections !== undefined &&\n\t\t\t\t(!Number.isSafeInteger(options.maxSseConnections) || options.maxSseConnections <= 0))\n\t\t)\n\t\t\tthrow new Error(\"WebUI SSE connection limits must be positive integers.\");\n\t\tthis.options = options;\n\t\tthis.tokenValue = options.token;\n\t\tthis.hostManager = new HostManager(options.context);\n\t\tthis.server = createServer((req, res) => void this.handle(req, res));\n\t}\n\n\tget token(): string {\n\t\treturn this.tokenValue;\n\t}\n\trotateToken(): string {\n\t\tthis.tokenValue = randomBytes(32).toString(\"base64url\");\n\t\tfor (const client of this.clients.values()) this.closeClient(client);\n\t\tthis.clients.clear();\n\t\tthis.clientsByResumeToken.clear();\n\t\treturn this.tokenValue;\n\t}\n\trevokeToken(): void {\n\t\tthis.tokenValue = randomBytes(32).toString(\"base64url\");\n\t\tfor (const client of this.clients.values()) this.closeClient(client);\n\t\tthis.clients.clear();\n\t\tthis.clientsByResumeToken.clear();\n\t}\n\tlisten(): Promise<{ readonly host: string; readonly port: number }> {\n\t\tconst host = this.options.host ?? \"127.0.0.1\";\n\t\tif (host !== \"127.0.0.1\" && host !== \"::1\" && !this.options.allowRemote)\n\t\t\treturn Promise.reject(new Error(\"Remote WebUI binding requires explicit allowRemote.\"));\n\t\treturn new Promise((resolvePromise, reject) => {\n\t\t\tthis.server.once(\"error\", reject);\n\t\t\tthis.server.listen(this.options.port ?? 0, host, () => {\n\t\t\t\tconst address = this.server.address();\n\t\t\t\tif (!address || typeof address === \"string\") return reject(new Error(\"WebUI did not expose a TCP address.\"));\n\t\t\t\tresolvePromise({ host, port: address.port });\n\t\t\t});\n\t\t});\n\t}\n\tasync close(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tfor (const client of this.clients.values()) this.closeClient(client);\n\t\tawait this.hostManager.dispose();\n\t\tawait new Promise<void>((resolvePromise) => this.server.close(() => resolvePromise()));\n\t}\n\n\tprivate async handle(req: IncomingMessage, res: ServerResponse): Promise<void> {\n\t\ttry {\n\t\t\tif (this.disposed) return json(res, 503, { error: \"WebUI is shutting down.\" });\n\t\t\tif (!this.hostAllowed(req)) return json(res, 403, { error: \"Host is not allowed.\" });\n\t\t\tif (!this.originAllowed(req)) return json(res, 403, { error: \"Origin is not allowed.\" });\n\t\t\tconst url = new URL(req.url ?? \"/\", \"http://127.0.0.1\");\n\t\t\tif (req.method === \"GET\" && url.pathname === \"/healthz\") return json(res, 200, { status: \"ok\" });\n\t\t\tif (this.options.staticRoot && !isApiRoute(url.pathname)) {\n\t\t\t\tif (await this.staticAsset(req, res, url)) return;\n\t\t\t}\n\t\t\tthis.setCors(req, res);\n\t\t\tif (req.method === \"OPTIONS\") {\n\t\t\t\tres.writeHead(204).end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (req.method === \"GET\" && url.pathname === \"/api/session\" && this.isDevelopmentSessionRequest(req)) {\n\t\t\t\tthis.setWebCookie(res);\n\t\t\t\tres.writeHead(204).end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst client = this.authenticate(req, res, url.pathname.startsWith(\"/api/\"));\n\t\t\tif (!client) return;\n\t\t\tif (!this.rateAllowed(client)) return json(res, 429, { error: \"Rate limit exceeded.\" });\n\t\t\tif (req.method === \"GET\" && url.pathname === \"/api/boot\") return await this.boot(res, client, url);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/api/workspaces\") return await this.addWorkspaceRoute(req, res);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/api/workspaces/rename\")\n\t\t\t\treturn await this.renameWorkspaceRoute(req, res);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/api/workspaces/delete\")\n\t\t\t\treturn await this.deleteWorkspaceRoute(req, res);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/api/workspaces/pick\") return await this.pickWorkspaceRoute(res);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/api/rpc\") return await this.rpc(req, res, client, url);\n\t\t\tif (req.method === \"GET\" && url.pathname === \"/api/events\") return await this.events(req, res, client, url);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/api/attachments\")\n\t\t\t\treturn await this.attachments(req, res, client, url);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/rpc\") return await this.rpc(req, res, client, url);\n\t\t\tif (req.method === \"GET\" && url.pathname === \"/events\") return await this.events(req, res, client, url);\n\t\t\tif (req.method === \"POST\" && url.pathname === \"/attachments\")\n\t\t\t\treturn await this.attachments(req, res, client, url);\n\t\t\tjson(res, 404, { error: \"Not found.\" });\n\t\t} catch {\n\t\t\tjson(res, 400, { error: \"Request rejected.\" });\n\t\t}\n\t}\n\n\tprivate authenticate(req: IncomingMessage, res: ServerResponse, allowCookie: boolean): ClientState | undefined {\n\t\tconst token = tokenFrom(req) ?? (allowCookie ? cookieToken(req) : undefined);\n\t\tif (!token || !constantEquals(token, this.tokenValue)) {\n\t\t\tjson(res, 401, { error: \"Unauthorized.\" });\n\t\t\treturn undefined;\n\t\t}\n\t\tconst requestedResumeToken = req.headers[\"x-di-code-resume-token\"];\n\t\tif (typeof requestedResumeToken === \"string\") {\n\t\t\tconst resumed = this.clientsByResumeToken.get(requestedResumeToken);\n\t\t\tif (resumed && resumed.resumeTokenExpiresAt > Date.now()) {\n\t\t\t\tthis.rotateResumeToken(resumed);\n\t\t\t\tres.setHeader(\"x-di-code-client-id\", resumed.id);\n\t\t\t\treturn resumed;\n\t\t\t}\n\t\t\tif (resumed) this.revokeResumeToken(resumed);\n\t\t\tjson(res, 401, { error: \"Resume credential is invalid or expired.\" });\n\t\t\treturn undefined;\n\t\t}\n\t\tconst requestedId = req.headers[\"x-di-code-client-id\"];\n\t\tconst id =\n\t\t\ttypeof requestedId === \"string\" && /^[A-Za-z0-9_-]{16,128}$/.test(requestedId)\n\t\t\t\t? requestedId\n\t\t\t\t: randomBytes(18).toString(\"base64url\");\n\t\tres.setHeader(\"x-di-code-client-id\", id);\n\t\tlet client = this.clients.get(id);\n\t\tif (!client) {\n\t\t\tclient = {\n\t\t\t\tid,\n\t\t\t\tprincipal: `webui:${id}`,\n\t\t\t\tresumeToken: randomBytes(24).toString(\"base64url\"),\n\t\t\t\tresumeTokenExpiresAt: Date.now() + (this.options.resumeTokenTtlMs ?? 10 * 60 * 1000),\n\t\t\t\tdispatchers: new Map(),\n\t\t\t\tproductHosts: new Map(),\n\t\t\t\tconnections: new Set(),\n\t\t\t\trequestTimes: [],\n\t\t\t};\n\t\t\tthis.clients.set(id, client);\n\t\t\tthis.clientsByResumeToken.set(client.resumeToken, client);\n\t\t}\n\t\treturn client;\n\t}\n\tprivate rotateResumeToken(client: ClientState): void {\n\t\tthis.clientsByResumeToken.delete(client.resumeToken);\n\t\tclient.resumeToken = randomBytes(24).toString(\"base64url\");\n\t\tclient.resumeTokenExpiresAt = Date.now() + (this.options.resumeTokenTtlMs ?? 10 * 60 * 1000);\n\t\tthis.clientsByResumeToken.set(client.resumeToken, client);\n\t}\n\tprivate revokeResumeToken(client: ClientState): void {\n\t\tthis.clientsByResumeToken.delete(client.resumeToken);\n\t\tclient.resumeTokenExpiresAt = 0;\n\t}\n\tprivate hostAllowed(req: IncomingMessage): boolean {\n\t\tconst host = req.headers.host;\n\t\tif (!host) return false;\n\t\ttry {\n\t\t\tconst expected = this.options.host ?? \"127.0.0.1\";\n\t\t\treturn new URL(`http://${host}`).hostname === expected;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\tprivate originAllowed(req: IncomingMessage): boolean {\n\t\tconst origin = req.headers.origin;\n\t\tif (origin === undefined) return true;\n\t\tconst allowed = this.options.origins;\n\t\tif (allowed) return allowed.includes(origin) || origin === this.options.developmentOrigin;\n\t\tif (origin === this.options.developmentOrigin) return true;\n\t\tif (origin === `http://${req.headers.host}`) return true;\n\t\ttry {\n\t\t\tconst parsed = new URL(origin);\n\t\t\treturn parsed.protocol === \"http:\" && parsed.hostname === (this.options.host ?? \"127.0.0.1\");\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\tprivate setCors(req: IncomingMessage, res: ServerResponse): void {\n\t\tconst origin = req.headers.origin;\n\t\tif (origin && this.originAllowed(req)) {\n\t\t\tres.setHeader(\"access-control-allow-origin\", origin);\n\t\t\tres.setHeader(\n\t\t\t\t\"access-control-allow-headers\",\n\t\t\t\t\"authorization, content-type, x-di-code-token, x-di-code-client-id, x-di-code-resume-token, last-event-id\",\n\t\t\t);\n\t\t\tres.setHeader(\"access-control-allow-methods\", \"GET, POST, OPTIONS\");\n\t\t\tres.setHeader(\"vary\", \"Origin\");\n\t\t}\n\t}\n\tprivate rateAllowed(client: ClientState): boolean {\n\t\tconst now = Date.now();\n\t\tconst config = this.options.rateLimit ?? { windowMs: 10_000, maxRequests: 60 };\n\t\twhile (client.requestTimes[0] !== undefined && client.requestTimes[0] < now - config.windowMs)\n\t\t\tclient.requestTimes.shift();\n\t\tif (client.requestTimes.length >= config.maxRequests) return false;\n\t\tclient.requestTimes.push(now);\n\t\treturn true;\n\t}\n\tprivate async staticAsset(req: IncomingMessage, res: ServerResponse, url: URL): Promise<boolean> {\n\t\tif (req.method !== \"GET\" && req.method !== \"HEAD\") return false;\n\t\tconst configuredRoot = this.options.staticRoot;\n\t\tif (!configuredRoot) return false;\n\t\tconst staticRoot = await realpath(configuredRoot);\n\t\tlet pathname: string;\n\t\ttry {\n\t\t\tpathname = decodeURIComponent(url.pathname);\n\t\t} catch {\n\t\t\tjson(res, 400, { error: \"Invalid URL path.\" });\n\t\t\treturn true;\n\t\t}\n\t\tif (pathname.includes(\"\\0\")) {\n\t\t\tjson(res, 400, { error: \"Invalid URL path.\" });\n\t\t\treturn true;\n\t\t}\n\t\tconst requested = resolve(staticRoot, `.${pathname}`);\n\t\tconst pathIsInsideRoot = relative(staticRoot, requested);\n\t\tif (pathIsInsideRoot.startsWith(\"..\") || pathIsInsideRoot.startsWith(`..${sep}`)) {\n\t\t\tjson(res, 403, { error: \"Static path is not allowed.\" });\n\t\t\treturn true;\n\t\t}\n\t\tconst candidate = await this.fileOrFallback(\n\t\t\trequested === staticRoot ? resolve(staticRoot, \"index.html\") : requested,\n\t\t\tresolve(staticRoot, \"index.html\"),\n\t\t);\n\t\tif (!candidate) return false;\n\t\tconst realCandidate = await realpath(candidate);\n\t\tconst candidatePath = relative(staticRoot, realCandidate);\n\t\tif (candidatePath.startsWith(\"..\") || candidatePath.startsWith(`..${sep}`)) {\n\t\t\tjson(res, 403, { error: \"Static path is not allowed.\" });\n\t\t\treturn true;\n\t\t}\n\t\tthis.setWebCookie(res);\n\t\tconst asset = await readFile(realCandidate);\n\t\tconst cacheControl = realCandidate.endsWith(\"index.html\")\n\t\t\t? \"no-cache\"\n\t\t\t: realCandidate.includes(`${sep}assets${sep}`)\n\t\t\t\t? \"public, max-age=31536000, immutable\"\n\t\t\t\t: \"public, max-age=3600\";\n\t\tres.writeHead(200, {\n\t\t\t\"content-type\": MIME_TYPES[extname(realCandidate)] ?? \"application/octet-stream\",\n\t\t\t\"cache-control\": cacheControl,\n\t\t});\n\t\tif (req.method === \"GET\") res.end(asset);\n\t\telse res.end();\n\t\treturn true;\n\t}\n\tprivate async fileOrFallback(path: string, fallback: string): Promise<string | undefined> {\n\t\ttry {\n\t\t\tif ((await stat(path)).isFile()) return path;\n\t\t} catch {}\n\t\ttry {\n\t\t\tif ((await stat(fallback)).isFile()) return fallback;\n\t\t} catch {}\n\t\treturn undefined;\n\t}\n\tprivate setWebCookie(res: ServerResponse): void {\n\t\tres.setHeader(\"set-cookie\", `di_code_web=${this.tokenValue}; HttpOnly; SameSite=Strict; Path=/`);\n\t}\n\tprivate isDevelopmentSessionRequest(req: IncomingMessage): boolean {\n\t\treturn this.options.developmentOrigin !== undefined && req.headers.origin === this.options.developmentOrigin;\n\t}\n\tprivate async boot(res: ServerResponse, client: ClientState, url: URL): Promise<void> {\n\t\tconst { actor, dispatcher } = await this.actor(client, url);\n\t\tconst workspace = await this.resolveWorkspace(url);\n\t\tconst [capabilities, state, runtime] = await Promise.all([\n\t\t\tdispatcher.dispatch({\n\t\t\t\tversion: RPC_PROTOCOL_VERSION,\n\t\t\t\tkind: \"request\",\n\t\t\t\tid: `boot-capabilities:${randomUUID()}`,\n\t\t\t\tmethod: \"get_capabilities\",\n\t\t\t\tparams: { events: [] },\n\t\t\t}),\n\t\t\tdispatcher.dispatch({\n\t\t\t\tversion: RPC_PROTOCOL_VERSION,\n\t\t\t\tkind: \"request\",\n\t\t\t\tid: `boot-state:${randomUUID()}`,\n\t\t\t\tmethod: \"get_state\",\n\t\t\t\tparams: {},\n\t\t\t}),\n\t\t\tdispatcher.dispatch({\n\t\t\t\tversion: RPC_PROTOCOL_VERSION,\n\t\t\t\tkind: \"request\",\n\t\t\t\tid: `boot-runtime:${randomUUID()}`,\n\t\t\t\tmethod: \"get_runtime\",\n\t\t\t\tparams: {},\n\t\t\t}),\n\t\t]);\n\t\tjson(res, 200, {\n\t\t\tprotocolVersion: RPC_PROTOCOL_VERSION,\n\t\t\tcapabilities: capabilities.ok ? capabilities.result : undefined,\n\t\t\tstate: state.ok ? state.result.state : actor.state(),\n\t\t\truntime: runtime.ok ? runtime.result : undefined,\n\t\t\tworkspaceId: workspace.id,\n\t\t\tworkspaces: (await this.authorizedWorkspaces()).map(({ id, name }) => ({ id, name })),\n\t\t});\n\t}\n\tprivate async actor(client: ClientState, url: URL): Promise<{ actor: SessionActor; dispatcher: RpcDispatcher }> {\n\t\tconst allowed = (await this.resolveWorkspace(url)).root;\n\t\tlet dispatcher = client.dispatchers.get(allowed);\n\t\tif (!dispatcher) {\n\t\t\tconst primary = await realpath(resolve(this.options.allowedRoot));\n\t\t\tconst projectTrusted =\n\t\t\t\tallowed.toLowerCase() === primary.toLowerCase()\n\t\t\t\t\t? (this.options.projectTrusted ?? false)\n\t\t\t\t\t: (await createProjectTrustStore(resolve(this.options.agentDir, \"trust.json\")).get(allowed)) === true;\n\t\t\tconst startupConfiguration = await loadStartupConfiguration(allowed, process.env, this.options.agentDir);\n\t\t\tconst hostOptions = this.hostOptions(\n\t\t\t\tclient.principal,\n\t\t\t\tallowed,\n\t\t\t\tthis.resolveActorRuntime(startupConfiguration),\n\t\t\t\tprojectTrusted,\n\t\t\t);\n\t\t\tlet permissionMode = startupConfiguration.permissionMode ?? \"ask\";\n\t\t\tlet requestApproval:\n\t\t\t\t| ((toolName: string, parameters: unknown, signal?: AbortSignal) => Promise<boolean>)\n\t\t\t\t| undefined;\n\t\t\tconst toolApproval: ToolApprovalCapability = {\n\t\t\t\trequest: async (toolName, parameters, signal) => {\n\t\t\t\t\tif (permissionMode === \"allow\") return;\n\t\t\t\t\tif (permissionMode === \"deny\") throw new Error(\"Tool approval denied.\");\n\t\t\t\t\tif (!requestApproval) throw new Error(\"Tool approval is unavailable.\");\n\t\t\t\t\tif (!(await requestApproval(toolName, parameters, signal))) throw new Error(\"Tool approval denied.\");\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst actor = await this.hostManager.get({\n\t\t\t\t...hostOptions,\n\t\t\t\tprincipal: client.principal,\n\t\t\t\tcwd: allowed,\n\t\t\t\t...(toolApproval ? { toolApproval } : {}),\n\t\t\t});\n\t\t\tif (!actor.state().activeSession) await actor.createSession();\n\t\t\tconst product = createProductHost({\n\t\t\t\tcontext: this.options.context,\n\t\t\t\tcwd: allowed,\n\t\t\t\tagentDir: hostOptions.agentDir,\n\t\t\t\tprojectTrusted,\n\t\t\t\tprovider: hostOptions.provider,\n\t\t\t\tmodel: hostOptions.model,\n\t\t\t\truntimeSnapshot: () => {\n\t\t\t\t\tconst ui = actor.ui();\n\t\t\t\t\treturn {\n\t\t\t\t\t\tproviderId: ui.providerId,\n\t\t\t\t\t\tmodelId: ui.modelId,\n\t\t\t\t\t\t...(ui.thinkingLevel ? { thinkingLevel: ui.thinkingLevel } : {}),\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tstartupConfiguration,\n\t\t\t\treloadRuntime: async () => {\n\t\t\t\t\tconst refreshed = await loadStartupConfiguration(allowed, process.env, this.options.agentDir);\n\t\t\t\t\tlet runtime: StartupRuntime;\n\t\t\t\t\ttry {\n\t\t\t\t\t\truntime = resolveStartupRuntime(refreshed.environment, refreshed.providers, refreshed.defaults);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\truntime = resolveStartupRuntime({ DI_CODE_PROVIDER: \"faux\" }, []);\n\t\t\t\t\t}\n\t\t\t\t\tactor.setRuntimeValue(runtime.provider, runtime.model);\n\t\t\t\t\treturn refreshed;\n\t\t\t\t},\n\t\t\t\treloadConfiguration: () => loadStartupConfiguration(allowed, process.env, this.options.agentDir),\n\t\t\t\tonPermissionModeChange: (mode) => {\n\t\t\t\t\tpermissionMode = mode;\n\t\t\t\t},\n\t\t\t\trefreshResources: (projectTrusted) => actor.refreshResources(projectTrusted),\n\t\t\t});\n\t\t\tconst attachments = await createManagedAttachmentStore({\n\t\t\t\tdirectory: resolve(this.clientTempRoot(client), \"attachments\"),\n\t\t\t});\n\t\t\tdispatcher = new RpcDispatcher({\n\t\t\t\tsession: actor,\n\t\t\t\tcommandRegistry: this.options.context.get(commandRegistryKey),\n\t\t\t\tproductState: { projectTrusted },\n\t\t\t\tproductHost: product,\n\t\t\t\tattachmentStore: attachments,\n\t\t\t});\n\t\t\tconst actorDispatcher = dispatcher;\n\t\t\trequestApproval = (toolName, parameters, signal) =>\n\t\t\t\tactorDispatcher.requestToolApproval(toolName, parameters, signal);\n\t\t\tawait actorDispatcher.dispatch({\n\t\t\t\tversion: RPC_PROTOCOL_VERSION,\n\t\t\t\tkind: \"request\",\n\t\t\t\tid: `webui-capabilities:${randomUUID()}`,\n\t\t\t\tmethod: \"get_capabilities\",\n\t\t\t\tparams: {\n\t\t\t\t\tevents: [\n\t\t\t\t\t\t\"sequence\",\n\t\t\t\t\t\t\"operation_update\",\n\t\t\t\t\t\t\"snapshot_required\",\n\t\t\t\t\t\t\"session_changed\",\n\t\t\t\t\t\t\"tool_approval\",\n\t\t\t\t\t\t\"product_audit\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t});\n\t\t\tclient.productHosts.set(allowed, product);\n\t\t\tclient.dispatchers.set(allowed, dispatcher);\n\t\t}\n\t\tconst actor = await this.hostManager.get({\n\t\t\t...this.hostOptions(client.principal, allowed),\n\t\t\tprincipal: client.principal,\n\t\t\tcwd: allowed,\n\t\t});\n\t\treturn { actor, dispatcher };\n\t}\n\tprivate async authorizedWorkspaces(): Promise<readonly WebWorkspace[]> {\n\t\tawait this.loadWorkspaceRegistry();\n\t\tconst primary = await realpath(resolve(this.options.allowedRoot));\n\t\tconst candidates = [\n\t\t\tthis.options.allowedRoot,\n\t\t\t...(this.options.allowedWorkspaces ?? []),\n\t\t\t...this.addedWorkspaceRoots,\n\t\t];\n\t\tconst seen = new Set<string>();\n\t\tconst result: WebWorkspace[] = [];\n\t\tfor (const candidate of candidates) {\n\t\t\tlet root: string;\n\t\t\ttry {\n\t\t\t\troot = await realpath(resolve(candidate));\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst key = root.toLowerCase();\n\t\t\tif (this.removedWorkspaceRoots.has(key)) continue;\n\t\t\tif (seen.has(key)) continue;\n\t\t\tseen.add(key);\n\t\t\tif (key !== primary.toLowerCase()) {\n\t\t\t\tconst trusted = await createProjectTrustStore(resolve(this.options.agentDir, \"trust.json\")).get(root);\n\t\t\t\tif (!trusted) continue;\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\tid: createHash(\"sha256\").update(root).digest(\"hex\").slice(0, 24),\n\t\t\t\tname: this.workspaceNames.get(key) ?? (basename(root) || \"Workspace\"),\n\t\t\t\troot,\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t}\n\tprivate async addWorkspaceRoute(req: IncomingMessage, res: ServerResponse): Promise<void> {\n\t\tconst value: unknown = JSON.parse(await body(req, 64 * 1024));\n\t\tif (typeof value !== \"object\" || value === null || typeof (value as { readonly path?: unknown }).path !== \"string\")\n\t\t\tthrow new Error(\"Workspace path is required.\");\n\t\tconst workspace = await this.addWorkspace((value as { readonly path: string }).path);\n\t\tjson(res, 200, { workspace });\n\t}\n\tprivate async renameWorkspaceRoute(req: IncomingMessage, res: ServerResponse): Promise<void> {\n\t\tconst value: unknown = JSON.parse(await body(req, 64 * 1024));\n\t\tif (typeof value !== \"object\" || value === null) throw new Error(\"Workspace details are required.\");\n\t\tconst input = value as { readonly workspaceId?: unknown; readonly name?: unknown };\n\t\tif (typeof input.workspaceId !== \"string\" || typeof input.name !== \"string\")\n\t\t\tthrow new Error(\"Workspace details are invalid.\");\n\t\tconst workspace = await this.workspaceById(input.workspaceId);\n\t\tconst name = input.name.trim();\n\t\tif (!name || name.length > 120) throw new Error(\"Workspace name is invalid.\");\n\t\tthis.workspaceNames.set(workspace.root.toLowerCase(), name);\n\t\tawait this.saveWorkspaceRegistry();\n\t\tjson(res, 200, { workspace: { id: workspace.id, name } });\n\t}\n\tprivate async deleteWorkspaceRoute(req: IncomingMessage, res: ServerResponse): Promise<void> {\n\t\tconst value: unknown = JSON.parse(await body(req, 64 * 1024));\n\t\tif (\n\t\t\ttypeof value !== \"object\" ||\n\t\t\tvalue === null ||\n\t\t\ttypeof (value as { readonly workspaceId?: unknown }).workspaceId !== \"string\"\n\t\t)\n\t\t\tthrow new Error(\"Workspace ID is required.\");\n\t\tconst workspace = await this.workspaceById((value as { readonly workspaceId: string }).workspaceId);\n\t\tconst primary = await realpath(resolve(this.options.allowedRoot));\n\t\tif (workspace.root.toLowerCase() === primary.toLowerCase())\n\t\t\tthrow new Error(\"The startup workspace cannot be deleted.\");\n\t\tthis.addedWorkspaceRoots.delete(workspace.root);\n\t\tthis.removedWorkspaceRoots.add(workspace.root.toLowerCase());\n\t\tthis.workspaceNames.delete(workspace.root.toLowerCase());\n\t\tawait this.saveWorkspaceRegistry();\n\t\tjson(res, 200, { deleted: true, workspaceId: workspace.id });\n\t}\n\tprivate async workspaceById(id: string): Promise<WebWorkspace> {\n\t\tconst workspace = (await this.authorizedWorkspaces()).find((item) => item.id === id);\n\t\tif (!workspace) throw new Error(\"Workspace is not authorized for this WebUI token.\");\n\t\treturn workspace;\n\t}\n\tprivate async pickWorkspaceRoute(res: ServerResponse): Promise<void> {\n\t\tconst requestedPath = await this.pickWorkspacePath();\n\t\tif (!requestedPath) return json(res, 200, { cancelled: true });\n\t\tconst workspace = await this.addWorkspace(requestedPath);\n\t\tjson(res, 200, { cancelled: false, workspace });\n\t}\n\tprivate async pickWorkspacePath(): Promise<string | undefined> {\n\t\tif (process.platform === \"win32\") {\n\t\t\tconst script =\n\t\t\t\t\"[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Add-Type -AssemblyName System.Windows.Forms; $dialog = New-Object System.Windows.Forms.FolderBrowserDialog; if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) { [Console]::Out.Write($dialog.SelectedPath) }\";\n\t\t\tconst result = await this.runWorkspacePicker(\"powershell.exe\", [\"-NoProfile\", \"-STA\", \"-Command\", script], {\n\t\t\t\twindowsHide: true,\n\t\t\t});\n\t\t\treturn result.stdout.trim() || undefined;\n\t\t}\n\t\tif (process.platform === \"darwin\") {\n\t\t\tconst result = await this.runWorkspacePicker(\"osascript\", [\n\t\t\t\t\"-e\",\n\t\t\t\t'POSIX path of (choose folder with prompt \"Choose a workspace\")',\n\t\t\t]);\n\t\t\treturn result.stdout.trim() || undefined;\n\t\t}\n\t\tconst result = await this.runWorkspacePicker(\"zenity\", [\n\t\t\t\"--file-selection\",\n\t\t\t\"--directory\",\n\t\t\t\"--title=Choose a workspace\",\n\t\t]);\n\t\treturn result.stdout.trim() || undefined;\n\t}\n\tprivate async runWorkspacePicker(\n\t\tcommand: string,\n\t\targs: readonly string[],\n\t\toptions: { readonly windowsHide?: boolean } = {},\n\t): Promise<{ readonly stdout: string }> {\n\t\ttry {\n\t\t\tconst result = await execFileAsync(command, [...args], {\n\t\t\t\t...options,\n\t\t\t\ttimeout: 5 * 60 * 1000,\n\t\t\t\tmaxBuffer: 64 * 1024,\n\t\t\t});\n\t\t\treturn { stdout: result.stdout };\n\t\t} catch (cause) {\n\t\t\tconst error = cause as { readonly code?: number | string; readonly stderr?: string };\n\t\t\t// osascript and zenity use non-zero exit codes for an explicit cancel.\n\t\t\tif (error.code === 1 || error.code === 255 || error.code === -128) return { stdout: \"\" };\n\t\t\tif (typeof error.code === \"string\" && error.code === \"ENOENT\")\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unable to open the ${command} directory picker. Install ${command} or choose a workspace another way.`,\n\t\t\t\t);\n\t\t\tthrow new Error(`Workspace directory picker failed.${error.stderr?.trim() ? ` ${error.stderr.trim()}` : \"\"}`);\n\t\t}\n\t}\n\t/** Adds a validated local directory to this server's explicitly authorized workspace set. */\n\tprivate async addWorkspace(requestedPath: string): Promise<Pick<WebWorkspace, \"id\" | \"name\">> {\n\t\tif (!requestedPath.trim() || requestedPath.includes(\"\\0\")) throw new Error(\"Workspace path is invalid.\");\n\t\tconst root = await realpath(resolve(requestedPath));\n\t\tif (!(await stat(root)).isDirectory()) throw new Error(\"Workspace path is not a directory.\");\n\t\tconst primary = await realpath(resolve(this.options.allowedRoot));\n\t\tif (root.toLowerCase() !== primary.toLowerCase()) {\n\t\t\tawait createProjectTrustStore(resolve(this.options.agentDir, \"trust.json\")).set(root, true);\n\t\t}\n\t\tthis.addedWorkspaceRoots.add(root);\n\t\tthis.removedWorkspaceRoots.delete(root.toLowerCase());\n\t\tawait this.saveWorkspaceRegistry();\n\t\tconst id = createHash(\"sha256\").update(root).digest(\"hex\").slice(0, 24);\n\t\treturn { id, name: this.workspaceNames.get(root.toLowerCase()) ?? (basename(root) || \"Workspace\") };\n\t}\n\tprivate workspaceRegistryPath(): string {\n\t\treturn resolve(this.options.workspaceRegistryDir ?? this.options.agentDir, \"webui\", \"workspaces.json\");\n\t}\n\tprivate async loadWorkspaceRegistry(): Promise<void> {\n\t\tif (this.workspaceRegistryLoaded) return;\n\t\tthis.workspaceRegistryLoaded = true;\n\t\ttry {\n\t\t\tconst value = JSON.parse(await readFile(this.workspaceRegistryPath(), \"utf8\")) as {\n\t\t\t\treadonly roots?: unknown;\n\t\t\t\treadonly removed?: unknown;\n\t\t\t\treadonly names?: unknown;\n\t\t\t};\n\t\t\tif (Array.isArray(value.roots))\n\t\t\t\tfor (const root of value.roots) if (typeof root === \"string\") this.addedWorkspaceRoots.add(root);\n\t\t\tif (Array.isArray(value.removed))\n\t\t\t\tfor (const root of value.removed) if (typeof root === \"string\") this.removedWorkspaceRoots.add(root);\n\t\t\tif (value.names && typeof value.names === \"object\")\n\t\t\t\tfor (const [root, name] of Object.entries(value.names as Record<string, unknown>))\n\t\t\t\t\tif (typeof name === \"string\") this.workspaceNames.set(root, name);\n\t\t} catch {}\n\t}\n\tprivate async saveWorkspaceRegistry(): Promise<void> {\n\t\tawait mkdir(resolve(this.options.workspaceRegistryDir ?? this.options.agentDir, \"webui\"), {\n\t\t\trecursive: true,\n\t\t});\n\t\tawait writeFile(\n\t\t\tthis.workspaceRegistryPath(),\n\t\t\tJSON.stringify({\n\t\t\t\troots: [...this.addedWorkspaceRoots],\n\t\t\t\tremoved: [...this.removedWorkspaceRoots],\n\t\t\t\tnames: Object.fromEntries(this.workspaceNames.entries()),\n\t\t\t}),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n\tprivate async resolveWorkspace(url: URL): Promise<WebWorkspace> {\n\t\tconst workspaces = await this.authorizedWorkspaces();\n\t\tconst id = url.searchParams.get(\"workspaceId\");\n\t\tif (id) {\n\t\t\tconst selected = workspaces.find((workspace) => workspace.id === id);\n\t\t\tif (selected) return selected;\n\t\t\tthrow new Error(\"Workspace is not authorized for this WebUI token.\");\n\t\t}\n\t\t// Preserve the embedding transport's existing path query while the SPA uses opaque workspace IDs.\n\t\tconst legacy = url.searchParams.get(\"workspace\");\n\t\tif (legacy) {\n\t\t\tconst requested = await realpath(resolve(legacy));\n\t\t\tconst selected = workspaces.find((workspace) => workspace.root.toLowerCase() === requested.toLowerCase());\n\t\t\tif (selected) return selected;\n\t\t\tthrow new Error(\"Workspace is not authorized for this WebUI token.\");\n\t\t}\n\t\tconst primary = workspaces[0];\n\t\tif (!primary) throw new Error(\"No trusted Workspace is available for this WebUI token.\");\n\t\treturn primary;\n\t}\n\tprivate resolveActorRuntime(configuration: StartupConfiguration): StartupRuntime {\n\t\tconst initialProvider = this.options.provider;\n\t\tconst initialModel = this.options.model;\n\t\tconst providerId = configuration.environment.DI_CODE_PROVIDER?.trim() || configuration.defaults?.providerId;\n\t\tconst modelId =\n\t\t\tconfiguration.environment.DI_CODE_MODEL?.trim() ||\n\t\t\t(configuration.defaults?.providerId === providerId ? configuration.defaults?.modelId : undefined);\n\t\tif (initialProvider && providerId === initialProvider.id && modelId) {\n\t\t\tconst model = initialProvider.models.find((candidate) => candidate.id === modelId);\n\t\t\tif (model) return { provider: initialProvider, model };\n\t\t}\n\t\ttry {\n\t\t\treturn resolveStartupRuntime(configuration.environment, configuration.providers, configuration.defaults);\n\t\t} catch {\n\t\t\t// Embedders may inject a runtime without a corresponding settings file.\n\t\t\tif (initialProvider && initialModel) return { provider: initialProvider, model: initialModel };\n\t\t\tthrow new Error(\"Provider is not configured.\");\n\t\t}\n\t}\n\tprivate hostOptions(\n\t\t_principal: string,\n\t\tcwd: string,\n\t\truntime?: StartupRuntime,\n\t\tprojectTrusted = this.options.projectTrusted,\n\t): SessionHostBootstrapOptions {\n\t\treturn {\n\t\t\tcwd,\n\t\t\t// SessionHost uses the same durable root as TUI. Browser identity only\n\t\t\t// scopes transport state and must never become a settings root.\n\t\t\tagentDir: resolve(this.options.agentDir),\n\t\t\tprojectTrusted,\n\t\t\tnoSkills: this.options.noSkills,\n\t\t\tnoContextFiles: this.options.noContextFiles,\n\t\t\tskillPaths: this.options.skillPaths,\n\t\t\tprovider: runtime?.provider ?? this.options.provider,\n\t\t\tmodel: runtime?.model ?? this.options.model,\n\t\t\tsignal: this.options.signal,\n\t\t\tcompaction: this.options.compaction,\n\t\t};\n\t}\n\tprivate clientTempRoot(client: ClientState): string {\n\t\tconst id = createHash(\"sha256\").update(client.principal).digest(\"hex\");\n\t\treturn resolve(this.options.agentDir, \"webui\", \"actors\", id);\n\t}\n\tprivate async rpc(req: IncomingMessage, res: ServerResponse, client: ClientState, url: URL): Promise<void> {\n\t\tconst request = requestFromValue(JSON.parse(await body(req, this.options.maxBodyBytes ?? 2 * 1024 * 1024)));\n\t\tconst { dispatcher } = await this.actor(client, url);\n\t\tconst response = await dispatcher.dispatch(request);\n\t\tjson(res, 200, response);\n\t}\n\tprivate async attachments(req: IncomingMessage, res: ServerResponse, client: ClientState, url: URL): Promise<void> {\n\t\t// A 5 MiB binary attachment expands to nearly 7 MiB in base64 before JSON framing.\n\t\tconst value = JSON.parse(await body(req, this.options.maxBodyBytes ?? 10 * 1024 * 1024));\n\t\tif (typeof value !== \"object\" || value === null) throw new Error(\"Attachment body must be an object.\");\n\t\tconst request = requestFromValue({\n\t\t\tversion: RPC_PROTOCOL_VERSION,\n\t\t\tkind: \"request\",\n\t\t\tid: randomUUID(),\n\t\t\tmethod: \"create_attachment\",\n\t\t\tparams: value,\n\t\t});\n\t\tconst { dispatcher } = await this.actor(client, url);\n\t\tjson(res, 200, await dispatcher.dispatch(request));\n\t}\n\tprivate async events(req: IncomingMessage, res: ServerResponse, client: ClientState, url: URL): Promise<void> {\n\t\tif (typeof req.headers[\"x-di-code-resume-token\"] === \"string\") this.closeConnections(client);\n\t\tconst perClientLimit = this.options.maxSseConnectionsPerClient ?? 8;\n\t\tconst globalLimit = this.options.maxSseConnections ?? 64;\n\t\tif (client.connections.size >= perClientLimit || this.sseConnections >= globalLimit) {\n\t\t\tjson(res, 429, { error: \"SSE connection limit exceeded.\" });\n\t\t\treturn;\n\t\t}\n\t\tconst { dispatcher } = await this.actor(client, url);\n\t\tlet released = false;\n\t\tconst connection: Connection = {\n\t\t\tqueue: [],\n\t\t\twaiters: [],\n\t\t\tmaxQueue: 128,\n\t\t\tclosed: false,\n\t\t\tcloseResponse: () => res.end(),\n\t\t\trelease: () => {\n\t\t\t\tif (released) return;\n\t\t\t\treleased = true;\n\t\t\t\tconnection.closed = true;\n\t\t\t\tconnection.waiters.splice(0).forEach((wake) => void wake());\n\t\t\t\tclient.connections.delete(connection);\n\t\t\t\tthis.sseConnections = Math.max(0, this.sseConnections - 1);\n\t\t\t},\n\t\t};\n\t\tclient.connections.add(connection);\n\t\tthis.sseConnections += 1;\n\t\treq.once(\"close\", () => {\n\t\t\tconnection.release();\n\t\t});\n\t\tconst unsubscribe = dispatcher.subscribe((message) => {\n\t\t\tif (connection.closed) return;\n\t\t\tif (connection.queue.length >= connection.maxQueue) {\n\t\t\t\tconnection.queue.shift();\n\t\t\t\tconnection.queue.push({ version: 1, kind: \"event\", requestId: \"webui\", event: { type: \"snapshot_required\" } });\n\t\t\t} else connection.queue.push(message);\n\t\t\tconnection.waiters.splice(0).forEach((wake) => void wake());\n\t\t});\n\t\tconst keepalive = setInterval(() => {\n\t\t\tif (connection.closed) return;\n\t\t\tif (connection.queue.length >= connection.maxQueue) connection.queue.shift();\n\t\t\tconnection.queue.push({ keepalive: true });\n\t\t\tconnection.waiters.splice(0).forEach((wake) => void wake());\n\t\t}, 15_000);\n\t\tres.writeHead(200, { \"content-type\": \"text/event-stream\", \"cache-control\": \"no-cache\", connection: \"keep-alive\" });\n\t\tres.write(`event: ready\\ndata: ${JSON.stringify({ resumeToken: client.resumeToken })}\\n\\n`);\n\t\tconst last = Number(req.headers[\"last-event-id\"] ?? \"0\");\n\t\tif (Number.isSafeInteger(last) && last >= 0)\n\t\t\tawait dispatcher.dispatch({\n\t\t\t\tversion: 1,\n\t\t\t\tkind: \"request\",\n\t\t\t\tid: `resume:${randomUUID()}`,\n\t\t\t\tmethod: \"resume_events\",\n\t\t\t\tparams: { lastSequence: last },\n\t\t\t});\n\t\ttry {\n\t\t\twhile (!connection.closed) {\n\t\t\t\tconst next = connection.queue.shift();\n\t\t\t\tif (!next) await new Promise<void>((resolvePromise) => connection.waiters.push(resolvePromise));\n\t\t\t\telse {\n\t\t\t\t\tconst payload =\n\t\t\t\t\t\t\"keepalive\" in next\n\t\t\t\t\t\t\t? \": keepalive\\n\\n\"\n\t\t\t\t\t\t\t: `${next.kind === \"event\" && next.sequence !== undefined ? `id: ${next.sequence}\\n` : \"\"}data: ${JSON.stringify(next)}\\n\\n`;\n\t\t\t\t\tif (!res.write(payload)) await new Promise<void>((resolvePromise) => res.once(\"drain\", resolvePromise));\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tclearInterval(keepalive);\n\t\t\tunsubscribe();\n\t\t\tconnection.release();\n\t\t}\n\t}\n\tprivate closeConnections(client: ClientState): void {\n\t\tfor (const connection of client.connections) {\n\t\t\tconnection.release();\n\t\t\tconnection.closeResponse();\n\t\t}\n\t}\n\tprivate closeClient(client: ClientState): void {\n\t\tthis.closeConnections(client);\n\t\tfor (const dispatcher of client.dispatchers.values()) void dispatcher.dispose();\n\t\tfor (const product of client.productHosts.values()) void product.dispose();\n\t\tclient.dispatchers.clear();\n\t\tclient.productHosts.clear();\n\t\tthis.clientsByResumeToken.delete(client.resumeToken);\n\t}\n}\n\nfunction constantEquals(left: string, right: string): boolean {\n\tconst leftBytes = Buffer.from(left);\n\tconst rightBytes = Buffer.from(right);\n\treturn leftBytes.byteLength === rightBytes.byteLength && timingSafeEqual(leftBytes, rightBytes);\n}\n\nfunction isApiRoute(pathname: string): boolean {\n\treturn (\n\t\tpathname === \"/rpc\" ||\n\t\tpathname === \"/events\" ||\n\t\tpathname === \"/attachments\" ||\n\t\tpathname === \"/healthz\" ||\n\t\tpathname.startsWith(\"/api/\")\n\t);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@di-code/coding-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Coding agent product layer for di-code",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-coding-agent",
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"types": "./dist/index.d.ts",
|
|
19
19
|
"bin": {
|
|
20
20
|
"di-code": "./dist/entry.js",
|
|
21
|
-
"di-code-rpc": "./dist/rpc-entry.js"
|
|
21
|
+
"di-code-rpc": "./dist/rpc-entry.js",
|
|
22
|
+
"di-code-webui": "./dist/webui-entry.js"
|
|
22
23
|
},
|
|
23
24
|
"exports": {
|
|
24
25
|
".": {
|
|
@@ -28,10 +29,87 @@
|
|
|
28
29
|
"./rpc": {
|
|
29
30
|
"types": "./dist/rpc/index.d.ts",
|
|
30
31
|
"import": "./dist/rpc/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./ui-host": {
|
|
34
|
+
"types": "./dist/ui-host.d.ts",
|
|
35
|
+
"import": "./dist/ui-host.js"
|
|
36
|
+
},
|
|
37
|
+
"./webui": {
|
|
38
|
+
"types": "./dist/webui.d.ts",
|
|
39
|
+
"import": "./dist/webui.js"
|
|
40
|
+
},
|
|
41
|
+
"./plugin-manager": {
|
|
42
|
+
"types": "./dist/plugin-manager.d.ts",
|
|
43
|
+
"import": "./dist/plugin-manager.js"
|
|
44
|
+
},
|
|
45
|
+
"./plugin-inventory": {
|
|
46
|
+
"types": "./dist/plugin-inventory.d.ts",
|
|
47
|
+
"import": "./dist/plugin-inventory.js"
|
|
48
|
+
},
|
|
49
|
+
"./plugin-trace": {
|
|
50
|
+
"types": "./dist/plugin-trace.d.ts",
|
|
51
|
+
"import": "./dist/plugin-trace.js"
|
|
52
|
+
},
|
|
53
|
+
"./plugin-dump-composition": {
|
|
54
|
+
"types": "./dist/plugin-dump-composition.d.ts",
|
|
55
|
+
"import": "./dist/plugin-dump-composition.js"
|
|
56
|
+
},
|
|
57
|
+
"./mcp-config-entry": {
|
|
58
|
+
"types": "./dist/mcp-config-entry.d.ts",
|
|
59
|
+
"import": "./dist/mcp-config-entry.js"
|
|
60
|
+
},
|
|
61
|
+
"./mcp-client-entry": {
|
|
62
|
+
"types": "./dist/mcp-client-entry.d.ts",
|
|
63
|
+
"import": "./dist/mcp-client-entry.js"
|
|
64
|
+
},
|
|
65
|
+
"./mcp-transport-entry": {
|
|
66
|
+
"types": "./dist/mcp-transport-entry.d.ts",
|
|
67
|
+
"import": "./dist/mcp-transport-entry.js"
|
|
68
|
+
},
|
|
69
|
+
"./mcp-tools-entry": {
|
|
70
|
+
"types": "./dist/mcp-tools-entry.d.ts",
|
|
71
|
+
"import": "./dist/mcp-tools-entry.js"
|
|
72
|
+
},
|
|
73
|
+
"./session-factory-entry": {
|
|
74
|
+
"types": "./dist/session-factory-entry.d.ts",
|
|
75
|
+
"import": "./dist/session-factory-entry.js"
|
|
76
|
+
},
|
|
77
|
+
"./session-store-jsonl-entry": {
|
|
78
|
+
"types": "./dist/session-store-jsonl-entry.d.ts",
|
|
79
|
+
"import": "./dist/session-store-jsonl-entry.js"
|
|
80
|
+
},
|
|
81
|
+
"./rpc-server-entry": {
|
|
82
|
+
"types": "./dist/rpc-server-entry.d.ts",
|
|
83
|
+
"import": "./dist/rpc-server-entry.js"
|
|
84
|
+
},
|
|
85
|
+
"./interactive-resources-entry": {
|
|
86
|
+
"types": "./dist/interactive-resources-entry.d.ts",
|
|
87
|
+
"import": "./dist/interactive-resources-entry.js"
|
|
88
|
+
},
|
|
89
|
+
"./interactive-host-entry": {
|
|
90
|
+
"types": "./dist/interactive-host-entry.d.ts",
|
|
91
|
+
"import": "./dist/interactive-host-entry.js"
|
|
92
|
+
},
|
|
93
|
+
"./rpc-client-sdk": {
|
|
94
|
+
"types": "./dist/rpc-client-sdk-entry.d.ts",
|
|
95
|
+
"import": "./dist/rpc-client-sdk-entry.js"
|
|
96
|
+
},
|
|
97
|
+
"./runtime-core": {
|
|
98
|
+
"types": "./dist/runtime-core-entry.d.ts",
|
|
99
|
+
"import": "./dist/runtime-core-entry.js"
|
|
100
|
+
},
|
|
101
|
+
"./composition-loader": {
|
|
102
|
+
"types": "./dist/composition-loader-entry.d.ts",
|
|
103
|
+
"import": "./dist/composition-loader-entry.js"
|
|
104
|
+
},
|
|
105
|
+
"./project-trust": {
|
|
106
|
+
"types": "./dist/project-trust-entry.d.ts",
|
|
107
|
+
"import": "./dist/project-trust-entry.js"
|
|
31
108
|
}
|
|
32
109
|
},
|
|
33
110
|
"files": [
|
|
34
|
-
"dist"
|
|
111
|
+
"dist",
|
|
112
|
+
"compositions"
|
|
35
113
|
],
|
|
36
114
|
"license": "MIT",
|
|
37
115
|
"repository": {
|
|
@@ -52,11 +130,14 @@
|
|
|
52
130
|
"test": "vitest run --passWithNoTests"
|
|
53
131
|
},
|
|
54
132
|
"dependencies": {
|
|
55
|
-
"@di-code/agent": "0.1.
|
|
56
|
-
"@di-code/ai": "0.1.
|
|
57
|
-
"@di-code/
|
|
58
|
-
"@di-code/
|
|
59
|
-
"@di-code/
|
|
133
|
+
"@di-code/agent": "0.1.8",
|
|
134
|
+
"@di-code/ai": "0.1.8",
|
|
135
|
+
"@di-code/builtins": "0.1.8",
|
|
136
|
+
"@di-code/mcp": "0.1.8",
|
|
137
|
+
"@di-code/plugin-loader": "0.1.8",
|
|
138
|
+
"@di-code/plugin-runtime": "0.1.8",
|
|
139
|
+
"@di-code/skills": "0.1.8",
|
|
140
|
+
"@di-code/tui": "0.1.8",
|
|
60
141
|
"diff": "8.0.4",
|
|
61
142
|
"highlight.js": "^10.7.3",
|
|
62
143
|
"jiti": "^2.5.1"
|