@di-code/coding-agent 0.2.1 → 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 (88) hide show
  1. package/README.md +5 -0
  2. package/dist/core/session/session-manager.d.ts +18 -1
  3. package/dist/core/session/session-manager.d.ts.map +1 -1
  4. package/dist/core/session/session-manager.js +90 -1
  5. package/dist/core/session/session-manager.js.map +1 -1
  6. package/dist/core/session/session-storage.d.ts +2 -0
  7. package/dist/core/session/session-storage.d.ts.map +1 -1
  8. package/dist/core/session/session-storage.js +22 -1
  9. package/dist/core/session/session-storage.js.map +1 -1
  10. package/dist/core/session/types.d.ts +16 -1
  11. package/dist/core/session/types.d.ts.map +1 -1
  12. package/dist/core/session/types.js.map +1 -1
  13. package/dist/core/session.d.ts +27 -2
  14. package/dist/core/session.d.ts.map +1 -1
  15. package/dist/core/session.js +59 -0
  16. package/dist/core/session.js.map +1 -1
  17. package/dist/entry.js +1 -1
  18. package/dist/entry.js.map +1 -1
  19. package/dist/i18n.js +4 -4
  20. package/dist/i18n.js.map +1 -1
  21. package/dist/interactive-host-entry.d.ts.map +1 -1
  22. package/dist/interactive-host-entry.js +107 -12
  23. package/dist/interactive-host-entry.js.map +1 -1
  24. package/dist/main.d.ts.map +1 -1
  25. package/dist/main.js +3 -0
  26. package/dist/main.js.map +1 -1
  27. package/dist/modes/interactive-components.d.ts +8 -0
  28. package/dist/modes/interactive-components.d.ts.map +1 -1
  29. package/dist/modes/interactive-components.js +7 -2
  30. package/dist/modes/interactive-components.js.map +1 -1
  31. package/dist/modes/interactive.d.ts +4 -0
  32. package/dist/modes/interactive.d.ts.map +1 -1
  33. package/dist/modes/interactive.js +69 -0
  34. package/dist/modes/interactive.js.map +1 -1
  35. package/dist/modes/tree-selector.d.ts.map +1 -1
  36. package/dist/modes/tree-selector.js +4 -0
  37. package/dist/modes/tree-selector.js.map +1 -1
  38. package/dist/rpc/client.d.ts +2 -0
  39. package/dist/rpc/client.d.ts.map +1 -1
  40. package/dist/rpc/client.js +3 -0
  41. package/dist/rpc/client.js.map +1 -1
  42. package/dist/rpc/dispatcher.d.ts +14 -0
  43. package/dist/rpc/dispatcher.d.ts.map +1 -1
  44. package/dist/rpc/dispatcher.js +222 -7
  45. package/dist/rpc/dispatcher.js.map +1 -1
  46. package/dist/rpc/protocol.d.ts +12 -5
  47. package/dist/rpc/protocol.d.ts.map +1 -1
  48. package/dist/rpc/protocol.js +34 -0
  49. package/dist/rpc/protocol.js.map +1 -1
  50. package/dist/rpc/server.d.ts +5 -0
  51. package/dist/rpc/server.d.ts.map +1 -1
  52. package/dist/rpc/server.js +4 -0
  53. package/dist/rpc/server.js.map +1 -1
  54. package/dist/rpc-server-entry.d.ts.map +1 -1
  55. package/dist/rpc-server-entry.js +15 -1
  56. package/dist/rpc-server-entry.js.map +1 -1
  57. package/dist/runtime/product-host.d.ts +7 -0
  58. package/dist/runtime/product-host.d.ts.map +1 -1
  59. package/dist/runtime/product-host.js +29 -9
  60. package/dist/runtime/product-host.js.map +1 -1
  61. package/dist/runtime/session-factory.d.ts +18 -2
  62. package/dist/runtime/session-factory.d.ts.map +1 -1
  63. package/dist/runtime/session-factory.js +286 -24
  64. package/dist/runtime/session-factory.js.map +1 -1
  65. package/dist/runtime/session-host.d.ts +46 -1
  66. package/dist/runtime/session-host.d.ts.map +1 -1
  67. package/dist/runtime/session-host.js +38 -6
  68. package/dist/runtime/session-host.js.map +1 -1
  69. package/dist/ui-host.d.ts.map +1 -1
  70. package/dist/ui-host.js +3 -0
  71. package/dist/ui-host.js.map +1 -1
  72. package/dist/web/assets/index-C2SOU925.css +1 -0
  73. package/dist/web/assets/index-knXkInvO.js +41 -0
  74. package/dist/web/assets/index-knXkInvO.js.map +1 -0
  75. package/dist/web/index.html +2 -2
  76. package/dist/web-command.d.ts.map +1 -1
  77. package/dist/web-command.js +8 -1
  78. package/dist/web-command.js.map +1 -1
  79. package/dist/webui-entry.js +9 -1
  80. package/dist/webui-entry.js.map +1 -1
  81. package/dist/webui.d.ts +10 -0
  82. package/dist/webui.d.ts.map +1 -1
  83. package/dist/webui.js +21 -0
  84. package/dist/webui.js.map +1 -1
  85. package/package.json +11 -9
  86. package/dist/web/assets/index-C-NyCPxd.css +0 -1
  87. package/dist/web/assets/index-DgyxuNNG.js +0 -41
  88. package/dist/web/assets/index-DgyxuNNG.js.map +0 -1
@@ -205,6 +205,17 @@ async function createBootstrap(context, options) {
205
205
  systemPrompt: resources.systemPrompt,
206
206
  externalTools,
207
207
  closeMcp: () => mcpClient.close(mcp.manager),
208
+ startupStatus: {
209
+ skills: resources.resources.skills.map((skill) => ({ name: skill.name, scope: skill.scope })),
210
+ resourceDiagnostics: resources.resources.diagnostics,
211
+ mcpServers: mcp.servers.map((server) => ({
212
+ id: server.config.id,
213
+ tools: server.tools.length,
214
+ resources: server.resources.length,
215
+ prompts: server.prompts.length,
216
+ })),
217
+ mcpDiagnostics: mcp.diagnostics,
218
+ },
208
219
  };
209
220
  }
210
221
  export async function createSessionHost(context, options) {
@@ -232,6 +243,7 @@ export async function createSessionHost(context, options) {
232
243
  if (disposed)
233
244
  throw new SessionHostError("DISPOSED", "SessionHost has been disposed.");
234
245
  };
246
+ const startupStatus = () => bootstrap.startupStatus;
235
247
  const current = () => {
236
248
  if (!activeId)
237
249
  throw new SessionHostError("NOT_FOUND", "No Session is open.");
@@ -307,6 +319,9 @@ export async function createSessionHost(context, options) {
307
319
  externalTools: resources.externalTools,
308
320
  compaction: options.compaction,
309
321
  toolApproval: options.toolApproval,
322
+ toolPolicy: options.toolPolicy,
323
+ interaction: options.interaction,
324
+ planMode: options.planMode,
310
325
  });
311
326
  if (!(created instanceof AgentSession))
312
327
  throw new SessionHostError("INTERNAL", "SessionFactory returned an incompatible session.");
@@ -421,6 +436,7 @@ export async function createSessionHost(context, options) {
421
436
  busy: operations.size > 0,
422
437
  operations: [...operations].map(([requestId, op]) => ({ requestId, kind: op.kind })),
423
438
  }),
439
+ startupStatus,
424
440
  listSessions: async () => {
425
441
  ensureOpen();
426
442
  let entries = [];
@@ -510,6 +526,7 @@ export async function createSessionHost(context, options) {
510
526
  tree: manager.getTree(),
511
527
  stats: statsFor(manager),
512
528
  readOnly: true,
529
+ events: manager.events,
513
530
  };
514
531
  },
515
532
  renameSession: async (id, label) => {
@@ -577,12 +594,17 @@ export async function createSessionHost(context, options) {
577
594
  const selected = entryId ? source.getEntry(entryId) : undefined;
578
595
  if (entryId && !selected)
579
596
  throw new SessionHostError("NOT_FOUND", "Session tree entry was not found.");
580
- const messages = source
581
- .getBranch(entryId ?? source.leafId)
582
- .filter((entry) => entry.type === "message")
583
- .map((entry) => entry.message);
584
- for (const message of messages)
585
- await branch.appendMessage(message);
597
+ for (const entry of source.getBranch(entryId ?? source.leafId)) {
598
+ if (entry.type === "message")
599
+ await branch.appendMessage(entry.message);
600
+ else if (entry.type === "event")
601
+ await branch.appendEvent({
602
+ namespace: entry.namespace,
603
+ eventName: entry.eventName,
604
+ schemaVersion: entry.schemaVersion,
605
+ payload: entry.payload,
606
+ });
607
+ }
586
608
  return await openManager(branch);
587
609
  },
588
610
  closeSession: async () => {
@@ -773,6 +795,12 @@ export async function createSessionHost(context, options) {
773
795
  });
774
796
  },
775
797
  usage: () => current().session.usage,
798
+ toolPolicy: () => current().session.toolPolicySnapshot,
799
+ setToolPolicyMode: (mode, signal) => current().session.setToolPolicyMode(mode, signal),
800
+ planMode: () => current().session.planModeProjection,
801
+ projections: () => current().session.projections(),
802
+ extensions: () => current().session.extensions(),
803
+ planCommand: (args) => current().session.planModeCommand(args),
776
804
  ui: () => {
777
805
  const session = current().session;
778
806
  return {
@@ -825,6 +853,10 @@ export async function createSessionHost(context, options) {
825
853
  setCompactionEnabled: api.setCompactionEnabled,
826
854
  navigateTree: api.navigateTree,
827
855
  compact: api.compact,
856
+ planMode: api.planMode,
857
+ projections: api.projections,
858
+ extensions: api.extensions,
859
+ planCommand: api.planCommand,
828
860
  };
829
861
  },
830
862
  subscribe: (listener) => {
@@ -1 +1 @@
1
- {"version":3,"file":"session-host.js","sourceRoot":"","sources":["../../src/runtime/session-host.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { constants as fsConstants } from \"node:fs\";\nimport { access, lstat, mkdir, open, readdir, readFile, realpath, rename, unlink } from \"node:fs/promises\";\nimport { basename, dirname, extname, join, resolve } from \"node:path\";\nimport type { AssistantMessage, ImageContent, Message, Model, Provider, ThinkingLevel } from \"@di-code/ai\";\nimport {\n\tagentSessionKey,\n\tproviderRegistryKey,\n\truntimeSelectionKey,\n\tsessionStoreRegistryKey,\n\ttype ToolApprovalCapability,\n} from \"@di-code/builtins\";\nimport type { Context } from \"@di-code/plugin-runtime\";\nimport { SessionManager } from \"../core/session/session-manager.ts\";\nimport type { SessionTreeNode } from \"../core/session/types.ts\";\nimport {\n\tAgentSession,\n\ttype AgentSessionCompactionOptions,\n\ttype AgentSessionEvent,\n\ttype AgentSessionTool,\n\ttype SessionUsage,\n\ttype TreeNavigationResult,\n} from \"../core/session.ts\";\nimport { workspaceStorageKey } from \"../core/user-data.ts\";\nimport { mcpClientServiceKey, mcpConfigServiceKey, mcpToolServiceKey } from \"../mcp/entries.ts\";\nimport { interactiveResourceServiceKey } from \"./interactive-resource-service.ts\";\n\nexport type SessionId = string & { readonly __sessionId: unique symbol };\nexport type RequestId = string & { readonly __requestId: unique symbol };\n\nexport interface SessionInfo {\n\treadonly id: SessionId;\n\treadonly displayId?: string;\n\treadonly cwd: string;\n\treadonly label: string;\n\treadonly modifiedAt?: number;\n\treadonly stats?: SessionStats;\n}\n\nexport interface SessionStats {\n\treadonly entryCount: number;\n\treadonly messageCount: number;\n\treadonly branchCount: number;\n}\n\nexport interface SessionSnapshot {\n\treadonly session: SessionInfo;\n\treadonly transcript: readonly Message[];\n\treadonly tree: readonly SessionTreeNode[];\n\treadonly stats: SessionStats;\n\treadonly readOnly: true;\n}\n\nexport interface SessionHostState {\n\treadonly disposed: boolean;\n\treadonly workspace: string;\n\treadonly activeSession?: SessionInfo;\n\treadonly busy: boolean;\n\treadonly operations: readonly { readonly requestId: RequestId; readonly kind: SessionOperationKind }[];\n}\n\nexport type SessionOperationKind = \"prompt\" | \"steer\" | \"retry\" | \"compact\" | \"tree\" | \"session\";\nexport type SessionHostEvent = AgentSessionEvent | { readonly type: \"session_changed\"; readonly session?: SessionInfo };\nexport type SessionHostListener = (event: SessionHostEvent) => void | Promise<void>;\n\nexport interface PromptInput {\n\treadonly text: string;\n\treadonly requestId?: string;\n}\n\nexport interface RetryInput {\n\treadonly targetRequestId: string;\n}\n\nexport interface SessionHostBootstrapOptions {\n\treadonly cwd: string;\n\treadonly agentDir: string;\n\treadonly projectTrusted?: boolean;\n\treadonly noSkills?: boolean;\n\treadonly noContextFiles?: boolean;\n\treadonly skillPaths?: readonly string[];\n\treadonly provider?: Provider;\n\treadonly model?: Model;\n\treadonly signal?: AbortSignal;\n\treadonly compaction?: AgentSessionCompactionOptions;\n\t/** Per-host approval boundary captured by each created AgentSession. */\n\treadonly toolApproval?: ToolApprovalCapability;\n\t/** Optional managed JSONL file to open before the host is returned. */\n\treadonly initialSessionPath?: string;\n}\n\nexport interface SessionHost {\n\treadonly state: () => SessionHostState;\n\treadonly listSessions: () => Promise<readonly SessionInfo[]>;\n\treadonly createSession: () => Promise<SessionInfo>;\n\treadonly openSession: (sessionId: string) => Promise<SessionInfo>;\n\treadonly inspectSession: (sessionId: string) => Promise<SessionSnapshot>;\n\treadonly renameSession: (sessionId: string, label: string) => Promise<SessionInfo>;\n\treadonly deleteSession: (sessionId: string, confirmation: string) => Promise<void>;\n\treadonly branchSession: (sessionId?: string, entryId?: string) => Promise<SessionInfo>;\n\treadonly closeSession: () => Promise<void>;\n\treadonly prompt: (input: PromptInput | string, signal?: AbortSignal) => Promise<AssistantMessage>;\n\treadonly promptWithImages: (\n\t\ttext: string,\n\t\timages: readonly ImageContent[],\n\t\tsignal?: AbortSignal,\n\t) => Promise<AssistantMessage>;\n\treadonly steer: (input: PromptInput | string, signal?: AbortSignal) => Promise<void>;\n\treadonly steerWithImages: (text: string, images: readonly ImageContent[], signal?: AbortSignal) => Promise<void>;\n\treadonly retry: (input?: RetryInput | AbortSignal, signal?: AbortSignal) => Promise<AssistantMessage>;\n\treadonly cancel: (requestId: string) => boolean;\n\treadonly transcript: () => readonly import(\"@di-code/ai\").Message[];\n\treadonly tree: () => readonly SessionTreeNode[];\n\treadonly navigateTree: (entryId: string) => Promise<TreeNavigationResult>;\n\treadonly setModel: (modelId: string) => Model;\n\treadonly setRuntime: (providerId: string, modelId: string) => Model;\n\t/** Applies an already-resolved runtime without requiring it in the registry. */\n\treadonly setRuntimeValue: (provider: Provider, model: Model) => Model;\n\treadonly setThinkingLevel: (level: ThinkingLevel) => ThinkingLevel;\n\treadonly cycleThinkingLevel: () => ThinkingLevel | undefined;\n\treadonly compact: (signal?: AbortSignal) => Promise<void>;\n\treadonly setCompactionEnabled: (enabled: boolean) => boolean;\n\t/** Reloads Skills, context and MCP tools after an explicit product-configuration change. */\n\treadonly refreshResources: (projectTrusted?: boolean, signal?: AbortSignal) => Promise<void>;\n\treadonly usage: () => SessionUsage;\n\treadonly ui: () => SessionHostUi;\n\treadonly subscribe: (listener: SessionHostListener) => () => void;\n\treadonly dispose: () => Promise<void>;\n}\n\nconst RETRY_PLUGIN_ID = \"di-code.retry\";\nconst RETRY_PLUGIN_VERSION = \"1\";\nconst RETRY_PLUGIN_SCHEMA_VERSION = 1;\ninterface FailedPrompt {\n\treadonly requestId: string;\n\treadonly text: string;\n}\n\n/** Internal presentation facade. It exposes snapshots and host-owned operations, never Session internals. */\nexport interface SessionHostUi {\n\treadonly allowedRoot: string;\n\treadonly modelId: string;\n\treadonly providerId: string;\n\treadonly thinkingLevel?: ThinkingLevel;\n\treadonly availableModels: readonly Model[];\n\treadonly availableSkills: readonly import(\"../core/resources/types.ts\").SkillResource[];\n\treadonly compactionEnabled: boolean;\n\treadonly sessionFile?: string;\n\treadonly sessionTree: readonly SessionTreeNode[];\n\treadonly sessionLeafId?: string;\n\treadonly transcript: readonly Message[];\n\treadonly usage: SessionUsage;\n\treadonly promptWithImages: SessionHost[\"promptWithImages\"];\n\treadonly retry: SessionHost[\"retry\"];\n\treadonly steerWithImages: SessionHost[\"steerWithImages\"];\n\treadonly subscribeSession: (listener: (event: AgentSessionEvent) => void | Promise<void>) => () => void;\n\treadonly setModel: SessionHost[\"setModel\"];\n\treadonly setRuntime: (provider: Provider, model: Model) => Model;\n\treadonly cycleThinkingLevel: SessionHost[\"cycleThinkingLevel\"];\n\treadonly setCompactionEnabled: SessionHost[\"setCompactionEnabled\"];\n\treadonly navigateTree: SessionHost[\"navigateTree\"];\n\treadonly compact: SessionHost[\"compact\"];\n}\n\nexport class SessionHostError extends Error {\n\treadonly code:\n\t\t| \"INVALID_WORKSPACE\"\n\t\t| \"NOT_FOUND\"\n\t\t| \"BUSY\"\n\t\t| \"SESSION_IN_USE\"\n\t\t| \"DISPOSED\"\n\t\t| \"INVALID_INPUT\"\n\t\t| \"INTERNAL\";\n\tconstructor(code: SessionHostError[\"code\"], message: string, options?: { readonly cause?: unknown }) {\n\t\tsuper(message, { cause: options?.cause });\n\t\tthis.name = \"SessionHostError\";\n\t\tthis.code = code;\n\t}\n}\n\ninterface Operation {\n\treadonly controller: AbortController;\n\treadonly kind: SessionOperationKind;\n\tpromise?: Promise<unknown>;\n}\n\ninterface HostInternals {\n\treadonly workspace: string;\n\treadonly sessionDirectory: string;\n\treadonly provider: Provider;\n\treadonly model: Model;\n\treadonly skills: readonly import(\"../core/resources/types.ts\").SkillResource[];\n\treadonly systemPrompt: string;\n\treadonly externalTools: readonly AgentSessionTool[];\n\treadonly closeMcp: () => Promise<void>;\n}\n\nasync function validateDataRoot(path: string): Promise<string> {\n\tconst requested = resolve(path);\n\tawait mkdir(requested, { recursive: true });\n\tconst stats = await lstat(requested);\n\tif (!stats.isDirectory() || stats.isSymbolicLink()) {\n\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Agent data root must be a real directory: \"${requested}\".`);\n\t}\n\tconst root = await realpath(requested);\n\tawait access(root, fsConstants.R_OK | fsConstants.W_OK | fsConstants.X_OK);\n\treturn root;\n}\n\nasync function ensureRealChildDirectory(parent: string, name: string): Promise<string> {\n\tconst path = join(parent, name);\n\ttry {\n\t\tconst stats = await lstat(path);\n\t\tif (!stats.isDirectory() || stats.isSymbolicLink()) {\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Managed data path must be a real directory: \"${path}\".`);\n\t\t}\n\t} catch (cause) {\n\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) throw cause;\n\t\tawait mkdir(path);\n\t}\n\tconst real = await realpath(path);\n\tif (dirname(real) !== parent)\n\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Managed data path escaped its parent: \"${path}\".`);\n\treturn real;\n}\n\nfunction asId(value: string): SessionId {\n\treturn value as SessionId;\n}\n\nfunction asRequestId(value: string): RequestId {\n\treturn value as RequestId;\n}\n\nfunction messageText(message: import(\"@di-code/ai\").Message): string {\n\tif (message.role !== \"user\") return \"\";\n\treturn message.content\n\t\t.filter((item) => item.type === \"text\")\n\t\t.map((item) => item.text)\n\t\t.join(\" \")\n\t\t.trim();\n}\n\nfunction sessionLabel(manager: SessionManager): string {\n\tfor (const entry of [...manager.entries].reverse()) {\n\t\tif (entry.type !== \"plugin\" || entry.pluginId !== \"di-code.session-label\") continue;\n\t\tconst data = entry.data;\n\t\tif (\n\t\t\ttypeof data === \"object\" &&\n\t\t\tdata !== null &&\n\t\t\t!Array.isArray(data) &&\n\t\t\ttypeof (data as Record<string, unknown>).label === \"string\"\n\t\t) {\n\t\t\tconst label = (data as Record<string, unknown>).label as string;\n\t\t\tif (label.trim()) return label;\n\t\t}\n\t}\n\tconst first = manager.entries.find((entry) => entry.type === \"message\" && entry.message.role === \"user\");\n\treturn first?.type === \"message\"\n\t\t? messageText(first.message) || basename(manager.filePath, extname(manager.filePath))\n\t\t: basename(manager.filePath, extname(manager.filePath));\n}\n\nasync function validateWorkspace(cwd: string): Promise<string> {\n\tconst requested = resolve(cwd);\n\tlet root: string;\n\ttry {\n\t\tconst stats = await lstat(requested);\n\t\tif (!stats.isDirectory() || stats.isSymbolicLink()) throw new Error(\"Workspace must be a real directory.\");\n\t\troot = await realpath(requested);\n\t\tawait access(root, fsConstants.R_OK | fsConstants.W_OK | fsConstants.X_OK);\n\t} catch (cause) {\n\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Workspace is not an accessible real directory: \"${requested}\".`, {\n\t\t\tcause,\n\t\t});\n\t}\n\treturn root;\n}\n\nasync function lockSession(filePath: string): Promise<() => Promise<void>> {\n\tconst lockPath = `${filePath}.host.lock`;\n\tconst token = `${process.pid}:${randomUUID()}`;\n\ttry {\n\t\tconst handle = await open(lockPath, \"wx\");\n\t\tawait handle.writeFile(token, \"utf8\");\n\t\treturn async () => {\n\t\t\tlet releaseError: unknown;\n\t\t\ttry {\n\t\t\t\tconst owner = await readFile(lockPath, \"utf8\");\n\t\t\t\tif (owner !== token) releaseError = new Error(`Session lock ownership changed: \"${lockPath}\".`);\n\t\t\t} catch (cause) {\n\t\t\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) releaseError = cause;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait handle.close();\n\t\t\t} catch (cause) {\n\t\t\t\treleaseError = cause;\n\t\t\t}\n\t\t\tif (releaseError === undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tawait unlink(lockPath);\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) releaseError = cause;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (releaseError !== undefined) throw releaseError;\n\t\t};\n\t} catch (cause) {\n\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"EEXIST\") {\n\t\t\ttry {\n\t\t\t\tconst owner = await readFile(lockPath, \"utf8\");\n\t\t\t\tconst ownerPid = Number.parseInt(owner.split(\":\", 1)[0] ?? \"\", 10);\n\t\t\t\tif (Number.isSafeInteger(ownerPid) && ownerPid > 0) process.kill(ownerPid, 0);\n\t\t\t} catch (ownerCause) {\n\t\t\t\tif (ownerCause instanceof Error && \"code\" in ownerCause && ownerCause.code === \"ESRCH\") {\n\t\t\t\t\tconst stalePath = `${lockPath}.stale-${randomUUID()}`;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait rename(lockPath, stalePath);\n\t\t\t\t\t\tawait unlink(stalePath);\n\t\t\t\t\t\treturn await lockSession(filePath);\n\t\t\t\t\t} catch (reclaimCause) {\n\t\t\t\t\t\tif (reclaimCause instanceof Error && \"code\" in reclaimCause && reclaimCause.code === \"ENOENT\")\n\t\t\t\t\t\t\treturn await lockSession(filePath);\n\t\t\t\t\t\tthrow new SessionHostError(\"INTERNAL\", `Unable to reclaim stale Session lock: \"${filePath}\".`, {\n\t\t\t\t\t\t\tcause: reclaimCause,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new SessionHostError(\"SESSION_IN_USE\", `Session is already open: \"${filePath}\".`, { cause });\n\t\t}\n\t\tthrow new SessionHostError(\"INTERNAL\", `Unable to lock session: \"${filePath}\".`, { cause });\n\t}\n}\n\nasync function createBootstrap(context: Context, options: SessionHostBootstrapOptions): Promise<HostInternals> {\n\tconst workspace = await validateWorkspace(options.cwd);\n\tconst agentDir = await validateDataRoot(options.agentDir);\n\tconst sessionsRoot = await ensureRealChildDirectory(agentDir, \"sessions\");\n\t// Preserve the CLI's historical workspace hash (which uses the user-supplied path casing/alias).\n\tconst sessionDirectory = await ensureRealChildDirectory(sessionsRoot, workspaceStorageKey(options.cwd));\n\tconst resources = await context.require(interactiveResourceServiceKey).load({\n\t\tcwd: workspace,\n\t\tagentDir,\n\t\tprojectTrusted: options.projectTrusted ?? false,\n\t\tnoSkills: options.noSkills,\n\t\tnoContextFiles: options.noContextFiles,\n\t\tskillPaths: options.skillPaths,\n\t});\n\tconst runtime =\n\t\toptions.provider && options.model\n\t\t\t? { provider: options.provider, model: options.model }\n\t\t\t: context.require(runtimeSelectionKey).selected();\n\tconst mcpConfig = context.require(mcpConfigServiceKey);\n\tconst mcpClient = context.require(mcpClientServiceKey);\n\tconst configurations = await mcpConfig.load({ cwd: workspace, projectTrusted: options.projectTrusted ?? false });\n\tconst mcp = await mcpClient.connect(configurations, { signal: options.signal });\n\tlet externalTools: readonly AgentSessionTool[];\n\ttry {\n\t\texternalTools = context\n\t\t\t.require(mcpToolServiceKey)\n\t\t\t.create(mcp.servers, [\"read\", \"write\", \"edit\", \"glob\", \"grep\", \"bash\", \"load_skill\"]);\n\t} catch (cause) {\n\t\tawait mcpClient.close(mcp.manager);\n\t\tthrow cause;\n\t}\n\treturn {\n\t\tworkspace,\n\t\tsessionDirectory,\n\t\tprovider: runtime.provider,\n\t\tmodel: runtime.model,\n\t\tskills: resources.resources.skills,\n\t\tsystemPrompt: resources.systemPrompt,\n\t\texternalTools,\n\t\tcloseMcp: () => mcpClient.close(mcp.manager),\n\t};\n}\n\nexport async function createSessionHost(context: Context, options: SessionHostBootstrapOptions): Promise<SessionHost> {\n\tlet bootstrap = await createBootstrap(context, options);\n\ttry {\n\t\tawait mkdir(bootstrap.sessionDirectory, { recursive: true });\n\t} catch (cause) {\n\t\tawait bootstrap.closeMcp();\n\t\tthrow cause;\n\t}\n\tconst store = context.require(sessionStoreRegistryKey).get(\"jsonl\");\n\tif (!store) {\n\t\tawait bootstrap.closeMcp();\n\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore is unavailable.\");\n\t}\n\tconst sessions = new Map<\n\t\tSessionId,\n\t\t{\n\t\t\treadonly manager: SessionManager;\n\t\t\treadonly session: AgentSession;\n\t\t\treadonly unsubscribe: () => void;\n\t\t\treadonly unlock: () => Promise<void>;\n\t\t\treadonly info: SessionInfo;\n\t\t}\n\t>();\n\tconst operations = new Map<RequestId, Operation>();\n\tconst listeners = new Set<SessionHostListener>();\n\tlet activeId: SessionId | undefined;\n\tconst failedPrompts = new Map<SessionId, FailedPrompt | undefined>();\n\tlet resourceProjectTrusted = options.projectTrusted;\n\tlet disposed = false;\n\n\tconst ensureOpen = (): void => {\n\t\tif (disposed) throw new SessionHostError(\"DISPOSED\", \"SessionHost has been disposed.\");\n\t};\n\tconst current = () => {\n\t\tif (!activeId) throw new SessionHostError(\"NOT_FOUND\", \"No Session is open.\");\n\t\tconst value = sessions.get(activeId);\n\t\tif (!value) throw new SessionHostError(\"NOT_FOUND\", \"No Session is open.\");\n\t\treturn value;\n\t};\n\tconst emit = (event: SessionHostEvent): 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(structuredClone(event))).catch(() => undefined);\n\t\t\t\t} catch {\n\t\t\t\t\t// Observers cannot fail the Agent loop or persistence path.\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\tconst infoFor = (manager: SessionManager): SessionInfo => ({\n\t\tid: asId(manager.header.id),\n\t\tdisplayId: basename(manager.filePath, extname(manager.filePath)),\n\t\tcwd: manager.header.cwd,\n\t\tlabel: sessionLabel(manager),\n\t\tmodifiedAt: Date.parse(manager.header.timestamp),\n\t\tstats: statsFor(manager),\n\t});\n\tconst statsFor = (manager: SessionManager): SessionStats => {\n\t\tconst entries = manager.entries;\n\t\tconst parentIds = new Set(entries.map((entry) => entry.parentId));\n\t\treturn {\n\t\t\tentryCount: entries.length,\n\t\t\tmessageCount: entries.filter((entry) => entry.type === \"message\").length,\n\t\t\tbranchCount: [...parentIds].filter((parent) => entries.filter((entry) => entry.parentId === parent).length > 1)\n\t\t\t\t.length,\n\t\t};\n\t};\n\tconst retryState = (manager: SessionManager): FailedPrompt | undefined => {\n\t\tfor (const entry of [...manager.getBranch()].reverse()) {\n\t\t\tif (\n\t\t\t\tentry.type !== \"plugin\" ||\n\t\t\t\tentry.pluginId !== RETRY_PLUGIN_ID ||\n\t\t\t\tentry.schemaVersion !== RETRY_PLUGIN_SCHEMA_VERSION\n\t\t\t)\n\t\t\t\tcontinue;\n\t\t\tconst data = entry.data;\n\t\t\tif (typeof data !== \"object\" || data === null || Array.isArray(data)) return undefined;\n\t\t\tconst value = data as Record<string, unknown>;\n\t\t\tif (value.active !== true || typeof value.text !== \"string\" || typeof value.requestId !== \"string\")\n\t\t\t\treturn undefined;\n\t\t\treturn { requestId: value.requestId, text: value.text };\n\t\t}\n\t\treturn undefined;\n\t};\n\tconst persistRetryState = async (manager: SessionManager, state: FailedPrompt | undefined): Promise<void> => {\n\t\tawait manager.appendPlugin({\n\t\t\tpluginId: RETRY_PLUGIN_ID,\n\t\t\tpluginVersion: RETRY_PLUGIN_VERSION,\n\t\t\tschemaVersion: RETRY_PLUGIN_SCHEMA_VERSION,\n\t\t\tdata: state ? { active: true, requestId: state.requestId, text: state.text } : { active: false },\n\t\t});\n\t};\n\tconst createAgent = async (manager: SessionManager, resources = bootstrap): Promise<AgentSession> => {\n\t\tconst created = await context.require(agentSessionKey).create({\n\t\t\t// The host owns the workspace boundary. Reading the root from the shared\n\t\t\t// composition context would pin every WebUI actor to the startup folder.\n\t\t\tallowedRoot: resources.workspace,\n\t\t\tprovider: resources.provider,\n\t\t\tmodel: resources.model,\n\t\t\tsystemPrompt: resources.systemPrompt,\n\t\t\tskills: resources.skills,\n\t\t\tsessionManager: manager,\n\t\t\texternalTools: resources.externalTools,\n\t\t\tcompaction: options.compaction,\n\t\t\ttoolApproval: options.toolApproval,\n\t\t});\n\t\tif (!(created instanceof AgentSession))\n\t\t\tthrow new SessionHostError(\"INTERNAL\", \"SessionFactory returned an incompatible session.\");\n\t\treturn created;\n\t};\n\tconst assertIdle = (kind: string): void => {\n\t\tif (operations.size > 0)\n\t\t\tthrow new SessionHostError(\"BUSY\", `Cannot ${kind} while another Session operation is running.`);\n\t};\n\tconst withOperation = async <T>(\n\t\tkind: SessionOperationKind,\n\t\trequestId: string | undefined,\n\t\tsignal: AbortSignal | undefined,\n\t\taction: (signal: AbortSignal) => Promise<T>,\n\t): Promise<T> => {\n\t\tensureOpen();\n\t\tconst id = asRequestId(requestId?.trim() || randomUUID());\n\t\tif (operations.has(id)) throw new SessionHostError(\"BUSY\", `Request ID is already active: \"${id}\".`);\n\t\tconst controller = new AbortController();\n\t\tconst abort = () => controller.abort(signal?.reason);\n\t\tif (signal?.aborted) abort();\n\t\telse signal?.addEventListener(\"abort\", abort, { once: true });\n\t\tconst operation: Operation = { controller, kind };\n\t\toperations.set(id, operation);\n\t\tconst promise = (async () => {\n\t\t\ttry {\n\t\t\t\treturn await action(controller.signal);\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof SessionHostError) throw cause;\n\t\t\t\tif (cause instanceof Error && (cause.name === \"AbortError\" || controller.signal.aborted)) throw cause;\n\t\t\t\tthrow new SessionHostError(\"INTERNAL\", cause instanceof Error ? cause.message : String(cause), { cause });\n\t\t\t} finally {\n\t\t\t\toperations.delete(id);\n\t\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\t}\n\t\t})();\n\t\toperation.promise = promise;\n\t\treturn await promise;\n\t};\n\tconst openManager = async (manager: SessionManager): Promise<SessionInfo> => {\n\t\tlet sessionWorkspace: string;\n\t\ttry {\n\t\t\tsessionWorkspace = await realpath(manager.header.cwd);\n\t\t} catch (cause) {\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session workspace is unavailable.\", { cause });\n\t\t}\n\t\tif (sessionWorkspace !== bootstrap.workspace)\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session workspace does not match the Host workspace.\");\n\t\tconst id = asId(manager.header.id);\n\t\tconst unlock = await lockSession(manager.filePath);\n\t\ttry {\n\t\t\tconst session = await createAgent(manager);\n\t\t\tconst info = infoFor(manager);\n\t\t\tconst previous = activeId;\n\t\t\tif (previous !== undefined) {\n\t\t\t\tconst old = sessions.get(previous);\n\t\t\t\tif (old) {\n\t\t\t\t\told.unsubscribe();\n\t\t\t\t\tawait old.session.dispose();\n\t\t\t\t\tawait old.unlock();\n\t\t\t\t}\n\t\t\t\tsessions.delete(previous);\n\t\t\t}\n\t\t\tconst unsubscribe = session.subscribeSession(emit);\n\t\t\tsessions.set(id, { manager, session, unsubscribe, unlock, info });\n\t\t\tfailedPrompts.set(id, retryState(manager));\n\t\t\tactiveId = id;\n\t\t\temit({ type: \"session_changed\", session: info });\n\t\t\treturn info;\n\t\t} catch (cause) {\n\t\t\tawait unlock();\n\t\t\tthrow cause;\n\t\t}\n\t};\n\tconst findSessionPath = async (id: string): Promise<string> => {\n\t\tlet entries: readonly import(\"node:fs\").Dirent<string>[];\n\t\ttry {\n\t\t\tentries = await readdir(bootstrap.sessionDirectory, { withFileTypes: true, encoding: \"utf8\" });\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")\n\t\t\t\tthrow new SessionHostError(\"NOT_FOUND\", `Session not found: \"${id}\".`);\n\t\t\tthrow cause;\n\t\t}\n\t\tconst managedDirectory = await realpath(bootstrap.sessionDirectory);\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.isFile() || extname(entry.name) !== \".jsonl\") continue;\n\t\t\tconst path = join(bootstrap.sessionDirectory, entry.name);\n\t\t\tif (dirname(await realpath(path)) !== managedDirectory) continue;\n\t\t\ttry {\n\t\t\t\tconst manager = await store.open(path);\n\t\t\t\tif (manager instanceof SessionManager && manager.header.id === id) return path;\n\t\t\t} catch {\n\t\t\t\t// Damaged sessions remain listable only through their file diagnostics; they cannot match an opaque ID.\n\t\t\t}\n\t\t}\n\t\tthrow new SessionHostError(\"NOT_FOUND\", `Session not found: \"${id}\".`);\n\t};\n\tconst api: SessionHost = {\n\t\tstate: () => ({\n\t\t\tdisposed,\n\t\t\tworkspace: bootstrap.workspace,\n\t\t\tactiveSession: activeId ? sessions.get(activeId)?.info : undefined,\n\t\t\tbusy: operations.size > 0,\n\t\t\toperations: [...operations].map(([requestId, op]) => ({ requestId, kind: op.kind })),\n\t\t}),\n\t\tlistSessions: async () => {\n\t\t\tensureOpen();\n\t\t\tlet entries: readonly import(\"node:fs\").Dirent<string>[] = [];\n\t\t\ttry {\n\t\t\t\tentries = await readdir(bootstrap.sessionDirectory, { withFileTypes: true, encoding: \"utf8\" });\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\") return [];\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t\tconst result: SessionInfo[] = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (!entry.isFile() || extname(entry.name) !== \".jsonl\") continue;\n\t\t\t\tconst path = join(bootstrap.sessionDirectory, entry.name);\n\t\t\t\tconst real = await realpath(path);\n\t\t\t\tif (dirname(real) !== (await realpath(bootstrap.sessionDirectory)))\n\t\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session path escaped its managed directory.\");\n\t\t\t\tconst manager = await store.open(path);\n\t\t\t\tif (!(manager instanceof SessionManager)) continue;\n\t\t\t\tlet managerWorkspace: string;\n\t\t\t\ttry {\n\t\t\t\t\tmanagerWorkspace = await realpath(manager.header.cwd);\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (managerWorkspace.toLowerCase() !== bootstrap.workspace.toLowerCase()) continue;\n\t\t\t\tresult.push(infoFor(manager));\n\t\t\t}\n\t\t\treturn result.sort((left, right) => {\n\t\t\t\tconst rightModified = right.modifiedAt ?? 0;\n\t\t\t\tconst leftModified = left.modifiedAt ?? 0;\n\t\t\t\treturn rightModified - leftModified || right.id.localeCompare(left.id);\n\t\t\t});\n\t\t},\n\t\tcreateSession: async () => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"create a Session\");\n\t\t\tconst manager = await store.create({\n\t\t\t\tfilePath: join(\n\t\t\t\t\tbootstrap.sessionDirectory,\n\t\t\t\t\t`${new Date().toISOString().replaceAll(/[:.]/g, \"-\")}-${randomUUID()}.jsonl`,\n\t\t\t\t),\n\t\t\t\tcwd: bootstrap.workspace,\n\t\t\t\tdeferCreate: true,\n\t\t\t});\n\t\t\tif (!(manager instanceof SessionManager))\n\t\t\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore returned an incompatible SessionManager.\");\n\t\t\treturn await openManager(manager);\n\t\t},\n\t\topenSession: async (id) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"open a Session\");\n\t\t\tif (!/^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/.test(id))\n\t\t\t\tthrow new SessionHostError(\"INVALID_INPUT\", \"Session ID is invalid.\");\n\t\t\tif (activeId === id) return current().info;\n\t\t\tconst path = await findSessionPath(id);\n\t\t\ttry {\n\t\t\t\tif ((await lstat(path)).isSymbolicLink()) throw new Error(\"symlink\");\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")\n\t\t\t\t\tthrow new SessionHostError(\"NOT_FOUND\", `Session not found: \"${id}\".`);\n\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session path is not a regular file.\", { cause });\n\t\t\t}\n\t\t\tconst managedDirectory = await realpath(bootstrap.sessionDirectory);\n\t\t\tif (dirname(await realpath(path)) !== managedDirectory)\n\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session path escaped its managed directory.\");\n\t\t\tconst manager = await store.open(path);\n\t\t\tif (!(manager instanceof SessionManager))\n\t\t\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore returned an incompatible SessionManager.\");\n\t\t\treturn await openManager(manager);\n\t\t},\n\t\tinspectSession: async (id) => {\n\t\t\tensureOpen();\n\t\t\tconst path = await findSessionPath(id);\n\t\t\tconst manager = await store.open(path);\n\t\t\tif (!(manager instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst info = infoFor(manager);\n\t\t\treturn {\n\t\t\t\tsession: info,\n\t\t\t\ttranscript: manager.messages,\n\t\t\t\ttree: manager.getTree(),\n\t\t\t\tstats: statsFor(manager),\n\t\t\t\treadOnly: true,\n\t\t\t};\n\t\t},\n\t\trenameSession: async (id, label) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"rename a Session\");\n\t\t\tif (!label.trim() || label.length > 200) throw new SessionHostError(\"INVALID_INPUT\", \"Session label is invalid.\");\n\t\t\tconst path = await findSessionPath(id);\n\t\t\tconst manager = await store.open(path);\n\t\t\tif (!(manager instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst active = sessions.get(asId(id));\n\t\t\tconst unlock = active ? undefined : await lockSession(path);\n\t\t\ttry {\n\t\t\t\tawait manager.appendPlugin({\n\t\t\t\t\tpluginId: \"di-code.session-label\",\n\t\t\t\t\tpluginVersion: \"1\",\n\t\t\t\t\tschemaVersion: 1,\n\t\t\t\t\tdata: { label: label.trim() },\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tif (unlock) await unlock();\n\t\t\t}\n\t\t\tconst info = infoFor(manager);\n\t\t\tconst existing = sessions.get(asId(id));\n\t\t\tif (existing) sessions.set(asId(id), { ...existing, info });\n\t\t\treturn info;\n\t\t},\n\t\tdeleteSession: async (id, confirmation) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"delete a Session\");\n\t\t\tif (confirmation !== id) throw new SessionHostError(\"INVALID_INPUT\", \"Session deletion requires confirmation.\");\n\t\t\tif (activeId === id) await api.closeSession();\n\t\t\tconst path = await findSessionPath(id);\n\t\t\tconst unlock = await lockSession(path);\n\t\t\ttry {\n\t\t\t\tawait unlink(path);\n\t\t\t} finally {\n\t\t\t\tawait unlock();\n\t\t\t}\n\t\t},\n\t\tbranchSession: async (id, entryId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"branch a Session\");\n\t\t\tconst sourceId = id ?? activeId;\n\t\t\tif (!sourceId) throw new SessionHostError(\"NOT_FOUND\", \"No Session is open.\");\n\t\t\tconst sourcePath = await findSessionPath(sourceId);\n\t\t\tconst source = await store.open(sourcePath);\n\t\t\tif (!(source instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst branch = await store.create({\n\t\t\t\tfilePath: join(\n\t\t\t\t\tbootstrap.sessionDirectory,\n\t\t\t\t\t`${new Date().toISOString().replaceAll(/[:.]/g, \"-\")}-${randomUUID()}.jsonl`,\n\t\t\t\t),\n\t\t\t\tcwd: bootstrap.workspace,\n\t\t\t\tdeferCreate: true,\n\t\t\t});\n\t\t\tif (!(branch instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst selected = entryId ? source.getEntry(entryId) : undefined;\n\t\t\tif (entryId && !selected) throw new SessionHostError(\"NOT_FOUND\", \"Session tree entry was not found.\");\n\t\t\tconst messages = source\n\t\t\t\t.getBranch(entryId ?? source.leafId)\n\t\t\t\t.filter((entry) => entry.type === \"message\")\n\t\t\t\t.map((entry) => entry.message);\n\t\t\tfor (const message of messages) await branch.appendMessage(message);\n\t\t\treturn await openManager(branch);\n\t\t},\n\t\tcloseSession: async () => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"close the Session\");\n\t\t\tif (!activeId) return;\n\t\t\tconst value = current();\n\t\t\tsessions.delete(activeId);\n\t\t\tactiveId = undefined;\n\t\t\tvalue.unsubscribe();\n\t\t\tawait value.session.dispose();\n\t\t\tawait value.unlock();\n\t\t\temit({ type: \"session_changed\" });\n\t\t},\n\t\tprompt: (input, signal) => {\n\t\t\tconst parsed = typeof input === \"string\" ? { text: input } : input;\n\t\t\tif (!parsed.text?.trim())\n\t\t\t\treturn Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"Prompt text must not be empty.\"));\n\t\t\tassertIdle(\"start a prompt\");\n\t\t\treturn withOperation(\"prompt\", parsed.requestId, signal, async (operationSignal) => {\n\t\t\t\tconst value = current();\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await value.session.prompt(parsed.text, operationSignal);\n\t\t\t\t\tconst failed = result.stopReason === \"error\" || result.stopReason === \"aborted\";\n\t\t\t\t\tfailedPrompts.set(\n\t\t\t\t\t\tvalue.info.id,\n\t\t\t\t\t\tfailed ? { requestId: parsed.requestId ?? \"\", text: parsed.text } : undefined,\n\t\t\t\t\t);\n\t\t\t\t\tawait persistRetryState(value.manager, failed ? failedPrompts.get(value.info.id) : undefined);\n\t\t\t\t\treturn result;\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tconst failed = { requestId: parsed.requestId ?? \"\", text: parsed.text };\n\t\t\t\t\tfailedPrompts.set(value.info.id, failed);\n\t\t\t\t\tawait persistRetryState(value.manager, failed).catch(() => undefined);\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tpromptWithImages: (text, images, signal) => {\n\t\t\tif (!text?.trim()) return Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"Prompt text must not be empty.\"));\n\t\t\tassertIdle(\"start a prompt\");\n\t\t\treturn withOperation(\"prompt\", undefined, signal, async (operationSignal) => {\n\t\t\t\tconst value = current();\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await value.session.promptWithImages(text, images, operationSignal);\n\t\t\t\t\tconst failed = result.stopReason === \"error\" || result.stopReason === \"aborted\";\n\t\t\t\t\tconst state = failed ? { requestId: randomUUID(), text } : undefined;\n\t\t\t\t\tfailedPrompts.set(value.info.id, state);\n\t\t\t\t\tawait persistRetryState(value.manager, state);\n\t\t\t\t\treturn result;\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tconst failed = { requestId: randomUUID(), text };\n\t\t\t\t\tfailedPrompts.set(value.info.id, failed);\n\t\t\t\t\tawait persistRetryState(value.manager, failed).catch(() => undefined);\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tsteer: (input, signal) => {\n\t\t\tconst parsed = typeof input === \"string\" ? { text: input } : input;\n\t\t\tif (!parsed.text?.trim())\n\t\t\t\treturn Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"Steering text must not be empty.\"));\n\t\t\treturn withOperation(\"steer\", parsed.requestId, signal, async (operationSignal) => {\n\t\t\t\tawait current().session.steer(parsed.text, operationSignal);\n\t\t\t});\n\t\t},\n\t\tsteerWithImages: (text, images, signal) =>\n\t\t\twithOperation(\"steer\", undefined, signal, async (operationSignal) => {\n\t\t\t\tawait current().session.steerWithImages(text, images, operationSignal);\n\t\t\t}),\n\t\tretry: (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"retry\");\n\t\t\tconst target =\n\t\t\t\ttypeof input === \"object\" && input !== null && !(input instanceof AbortSignal)\n\t\t\t\t\t? input.targetRequestId\n\t\t\t\t\t: undefined;\n\t\t\tconst operationSignal = input instanceof AbortSignal ? input : signal;\n\t\t\tconst value = current();\n\t\t\tconst retry = failedPrompts.get(value.info.id);\n\t\t\tif (!retry || (target !== undefined && target !== retry.requestId))\n\t\t\t\treturn Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"No failed prompt is available to retry.\"));\n\t\t\treturn withOperation(\"retry\", target, operationSignal, async (operationSignal) => {\n\t\t\t\tconst result = await value.session.prompt(retry.text, operationSignal);\n\t\t\t\tif (result.stopReason === \"error\" || result.stopReason === \"aborted\") {\n\t\t\t\t\tawait persistRetryState(value.manager, retry);\n\t\t\t\t} else {\n\t\t\t\t\tfailedPrompts.set(value.info.id, undefined);\n\t\t\t\t\tawait persistRetryState(value.manager, undefined);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t},\n\t\tcancel: (id) => {\n\t\t\tconst operation = operations.get(asRequestId(id));\n\t\t\tif (!operation) return false;\n\t\t\toperation.controller.abort();\n\t\t\treturn true;\n\t\t},\n\t\ttranscript: () => structuredClone(current().session.transcript),\n\t\ttree: () => structuredClone(current().session.sessionTree),\n\t\tnavigateTree: (entryId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"navigate the Session tree\");\n\t\t\treturn withOperation(\"tree\", undefined, undefined, async () => current().session.navigateTree(entryId));\n\t\t},\n\t\tsetModel: (modelId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change model\");\n\t\t\treturn current().session.setModel(modelId);\n\t\t},\n\t\tsetRuntime: (providerId, modelId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change runtime\");\n\t\t\ttry {\n\t\t\t\tconst selection = context.require(providerRegistryKey).select(providerId, modelId);\n\t\t\t\treturn api.setRuntimeValue(selection.provider, selection.model);\n\t\t\t} catch (cause) {\n\t\t\t\tconst provider = bootstrap.provider;\n\t\t\t\tconst model =\n\t\t\t\t\tprovider.id === providerId ? provider.models.find((candidate) => candidate.id === modelId) : undefined;\n\t\t\t\tif (model) return api.setRuntimeValue(provider, model);\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t},\n\t\tsetRuntimeValue: (provider, model) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change runtime\");\n\t\t\treturn current().session.setRuntime(provider, model);\n\t\t},\n\t\tsetThinkingLevel: (level) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change thinking level\");\n\t\t\treturn current().session.setThinkingLevel(level);\n\t\t},\n\t\tcycleThinkingLevel: () => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change thinking level\");\n\t\t\treturn current().session.cycleThinkingLevel();\n\t\t},\n\t\tcompact: (signal) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"compact the Session\");\n\t\t\treturn withOperation(\"compact\", undefined, signal, async (operationSignal) =>\n\t\t\t\tcurrent().session.compact(operationSignal),\n\t\t\t);\n\t\t},\n\t\tsetCompactionEnabled: (enabled) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change compaction\");\n\t\t\treturn current().session.setCompactionEnabled(enabled);\n\t\t},\n\t\trefreshResources: (projectTrusted, signal) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"refresh product resources\");\n\t\t\treturn withOperation(\"session\", undefined, signal, async () => {\n\t\t\t\tconst next = await createBootstrap(context, {\n\t\t\t\t\t...options,\n\t\t\t\t\tprojectTrusted: projectTrusted ?? resourceProjectTrusted,\n\t\t\t\t});\n\t\t\t\tif (next.workspace !== bootstrap.workspace) {\n\t\t\t\t\tawait next.closeMcp();\n\t\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Product resources changed the Host workspace.\");\n\t\t\t\t}\n\t\t\t\tconst active = activeId === undefined ? undefined : current();\n\t\t\t\tif (!active) {\n\t\t\t\t\tconst previous = bootstrap;\n\t\t\t\t\tbootstrap = next;\n\t\t\t\t\tresourceProjectTrusted = projectTrusted ?? resourceProjectTrusted;\n\t\t\t\t\tawait previous.closeMcp();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst session = await createAgent(active.manager, next);\n\t\t\t\t\tconst unsubscribe = session.subscribeSession(emit);\n\t\t\t\t\tconst previous = bootstrap;\n\t\t\t\t\tbootstrap = next;\n\t\t\t\t\tresourceProjectTrusted = projectTrusted ?? resourceProjectTrusted;\n\t\t\t\t\tsessions.set(active.info.id, { ...active, session, unsubscribe });\n\t\t\t\t\tactive.unsubscribe();\n\t\t\t\t\tawait active.session.dispose();\n\t\t\t\t\tawait previous.closeMcp();\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tawait next.closeMcp();\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tusage: () => current().session.usage,\n\t\tui: () => {\n\t\t\tconst session = current().session;\n\t\t\treturn {\n\t\t\t\tget allowedRoot() {\n\t\t\t\t\treturn session.allowedRoot;\n\t\t\t\t},\n\t\t\t\tget modelId() {\n\t\t\t\t\treturn session.modelId;\n\t\t\t\t},\n\t\t\t\tget providerId() {\n\t\t\t\t\treturn session.providerId;\n\t\t\t\t},\n\t\t\t\tget thinkingLevel() {\n\t\t\t\t\treturn session.thinkingLevel;\n\t\t\t\t},\n\t\t\t\tget availableModels() {\n\t\t\t\t\treturn session.availableModels;\n\t\t\t\t},\n\t\t\t\tget availableSkills() {\n\t\t\t\t\treturn session.availableSkills;\n\t\t\t\t},\n\t\t\t\tget compactionEnabled() {\n\t\t\t\t\treturn session.compactionEnabled;\n\t\t\t\t},\n\t\t\t\tget sessionFile() {\n\t\t\t\t\treturn session.sessionFile;\n\t\t\t\t},\n\t\t\t\tget sessionTree() {\n\t\t\t\t\treturn session.sessionTree;\n\t\t\t\t},\n\t\t\t\tget sessionLeafId() {\n\t\t\t\t\treturn session.sessionLeafId;\n\t\t\t\t},\n\t\t\t\tget transcript() {\n\t\t\t\t\treturn session.transcript;\n\t\t\t\t},\n\t\t\t\tget usage() {\n\t\t\t\t\treturn session.usage;\n\t\t\t\t},\n\t\t\t\tpromptWithImages: api.promptWithImages,\n\t\t\t\tretry: api.retry,\n\t\t\t\tsteerWithImages: api.steerWithImages,\n\t\t\t\tsubscribeSession: (listener) =>\n\t\t\t\t\tapi.subscribe((event) => {\n\t\t\t\t\t\tif (event.type !== \"session_changed\") return listener(event);\n\t\t\t\t\t}),\n\t\t\t\tsetModel: api.setModel,\n\t\t\t\tsetRuntime: (provider, model) => api.setRuntime(provider.id, model.id),\n\t\t\t\tcycleThinkingLevel: api.cycleThinkingLevel,\n\t\t\t\tsetCompactionEnabled: api.setCompactionEnabled,\n\t\t\t\tnavigateTree: api.navigateTree,\n\t\t\t\tcompact: api.compact,\n\t\t\t} satisfies SessionHostUi;\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\tconst pending = [...operations.values()]\n\t\t\t\t.map((operation) => operation.promise)\n\t\t\t\t.filter((promise): promise is Promise<unknown> => promise !== undefined);\n\t\t\tfor (const operation of operations.values()) operation.controller.abort();\n\t\t\tawait Promise.allSettled(pending);\n\t\t\tfor (const value of sessions.values()) {\n\t\t\t\tvalue.unsubscribe();\n\t\t\t\tawait value.session.dispose();\n\t\t\t\tawait value.unlock();\n\t\t\t}\n\t\t\tsessions.clear();\n\t\t\tfailedPrompts.clear();\n\t\t\tactiveId = undefined;\n\t\t\tlisteners.clear();\n\t\t\tawait bootstrap.closeMcp();\n\t\t},\n\t};\n\tif (options.initialSessionPath !== undefined) {\n\t\tconst initialPath = resolve(options.initialSessionPath);\n\t\tif (dirname(await realpath(initialPath)) !== (await realpath(bootstrap.sessionDirectory)))\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Initial Session path escaped its managed directory.\");\n\t\tconst initial = await store.open(initialPath);\n\t\tif (!(initial instanceof SessionManager))\n\t\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore returned an incompatible SessionManager.\");\n\t\tawait openManager(initial);\n\t}\n\treturn api;\n}\n\nexport interface SessionActor extends SessionHost {\n\treadonly principal: string;\n\treadonly workspace: string;\n}\nexport interface HostManagerOptions extends SessionHostBootstrapOptions {\n\treadonly principal: string;\n}\n\nexport class HostManager {\n\tprivate readonly actors = new Map<string, SessionActor>();\n\tprivate disposed = false;\n\tprivate readonly context: Context;\n\tconstructor(context: Context) {\n\t\tthis.context = context;\n\t}\n\tasync get(options: HostManagerOptions): Promise<SessionActor> {\n\t\tif (this.disposed) throw new SessionHostError(\"DISPOSED\", \"HostManager has been disposed.\");\n\t\tconst workspace = await validateWorkspace(options.cwd);\n\t\tconst key = `${options.principal}\\n${workspace}`;\n\t\tconst existing = this.actors.get(key);\n\t\tif (existing) return existing;\n\t\tconst host = await createSessionHost(this.context, { ...options, cwd: workspace });\n\t\tconst actor = Object.assign(host, { principal: options.principal, workspace });\n\t\tthis.actors.set(key, actor);\n\t\treturn actor;\n\t}\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tawait Promise.all([...this.actors.values()].map((actor) => actor.dispose()));\n\t\tthis.actors.clear();\n\t}\n}\n"]}
1
+ {"version":3,"file":"session-host.js","sourceRoot":"","sources":["../../src/runtime/session-host.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { constants as fsConstants } from \"node:fs\";\nimport { access, lstat, mkdir, open, readdir, readFile, realpath, rename, unlink } from \"node:fs/promises\";\nimport { basename, dirname, extname, join, resolve } from \"node:path\";\nimport type { AssistantMessage, ImageContent, Message, Model, Provider, ThinkingLevel } from \"@di-code/ai\";\nimport {\n\tagentSessionKey,\n\tproviderRegistryKey,\n\truntimeSelectionKey,\n\tsessionStoreRegistryKey,\n\ttype ToolApprovalCapability,\n\ttype ToolPolicyMode,\n\ttype ToolPolicySnapshot,\n} from \"@di-code/builtins\";\nimport type { Context } from \"@di-code/plugin-runtime\";\nimport type { UserInteraction } from \"@di-code/plugin-sdk\";\nimport { SessionManager } from \"../core/session/session-manager.ts\";\nimport type { SessionTreeNode } from \"../core/session/types.ts\";\nimport {\n\tAgentSession,\n\ttype AgentSessionCompactionOptions,\n\ttype AgentSessionEvent,\n\ttype AgentSessionTool,\n\ttype SessionUsage,\n\ttype TreeNavigationResult,\n} from \"../core/session.ts\";\nimport { workspaceStorageKey } from \"../core/user-data.ts\";\nimport { mcpClientServiceKey, mcpConfigServiceKey, mcpToolServiceKey } from \"../mcp/entries.ts\";\nimport { interactiveResourceServiceKey } from \"./interactive-resource-service.ts\";\n\nexport type SessionId = string & { readonly __sessionId: unique symbol };\nexport type RequestId = string & { readonly __requestId: unique symbol };\n\nexport interface SessionInfo {\n\treadonly id: SessionId;\n\treadonly displayId?: string;\n\treadonly cwd: string;\n\treadonly label: string;\n\treadonly modifiedAt?: number;\n\treadonly stats?: SessionStats;\n}\n\nexport interface SessionStats {\n\treadonly entryCount: number;\n\treadonly messageCount: number;\n\treadonly branchCount: number;\n}\n\nexport interface SessionSnapshot {\n\treadonly session: SessionInfo;\n\treadonly transcript: readonly Message[];\n\treadonly tree: readonly SessionTreeNode[];\n\treadonly stats: SessionStats;\n\treadonly readOnly: true;\n\treadonly events?: readonly import(\"../core/session/types.ts\").SessionEventEntry[];\n}\n\nexport interface SessionHostState {\n\treadonly disposed: boolean;\n\treadonly workspace: string;\n\treadonly activeSession?: SessionInfo;\n\treadonly busy: boolean;\n\treadonly operations: readonly { readonly requestId: RequestId; readonly kind: SessionOperationKind }[];\n}\n\n/** Read-only diagnostics captured while the SessionHost loads Skills and MCP resources. */\nexport interface SessionStartupStatus {\n\treadonly skills: readonly { readonly name: string; readonly scope: string }[];\n\treadonly resourceDiagnostics: readonly {\n\t\treadonly path: string;\n\t\treadonly kind: string;\n\t\treadonly stage: string;\n\t\treadonly severity: string;\n\t\treadonly message: string;\n\t}[];\n\treadonly mcpServers: readonly {\n\t\treadonly id: string;\n\t\treadonly tools: number;\n\t\treadonly resources: number;\n\t\treadonly prompts: number;\n\t}[];\n\treadonly mcpDiagnostics: readonly { readonly serverId: string; readonly stage: string; readonly message: string }[];\n}\n\nexport type SessionOperationKind = \"prompt\" | \"steer\" | \"retry\" | \"compact\" | \"tree\" | \"session\";\nexport type SessionHostEvent = AgentSessionEvent | { readonly type: \"session_changed\"; readonly session?: SessionInfo };\nexport type SessionHostListener = (event: SessionHostEvent) => void | Promise<void>;\n\nexport interface PromptInput {\n\treadonly text: string;\n\treadonly requestId?: string;\n}\n\nexport interface RetryInput {\n\treadonly targetRequestId: string;\n}\n\nexport interface SessionHostBootstrapOptions {\n\treadonly cwd: string;\n\treadonly agentDir: string;\n\treadonly projectTrusted?: boolean;\n\treadonly noSkills?: boolean;\n\treadonly noContextFiles?: boolean;\n\treadonly skillPaths?: readonly string[];\n\treadonly provider?: Provider;\n\treadonly model?: Model;\n\treadonly signal?: AbortSignal;\n\treadonly compaction?: AgentSessionCompactionOptions;\n\t/** Per-host approval boundary captured by each created AgentSession. */\n\treadonly toolApproval?: ToolApprovalCapability;\n\treadonly toolPolicy?: import(\"@di-code/builtins\").ToolPolicyCapability;\n\t/** Structured user interaction boundary for session-scoped tools. */\n\treadonly interaction?: UserInteraction;\n\treadonly planMode?: { readonly section: string };\n\t/** Optional managed JSONL file to open before the host is returned. */\n\treadonly initialSessionPath?: string;\n}\n\nexport interface SessionHost {\n\treadonly state: () => SessionHostState;\n\t/** Returns the resource snapshot captured during host bootstrap. */\n\treadonly startupStatus: () => SessionStartupStatus;\n\treadonly listSessions: () => Promise<readonly SessionInfo[]>;\n\treadonly createSession: () => Promise<SessionInfo>;\n\treadonly openSession: (sessionId: string) => Promise<SessionInfo>;\n\treadonly inspectSession: (sessionId: string) => Promise<SessionSnapshot>;\n\treadonly renameSession: (sessionId: string, label: string) => Promise<SessionInfo>;\n\treadonly deleteSession: (sessionId: string, confirmation: string) => Promise<void>;\n\treadonly branchSession: (sessionId?: string, entryId?: string) => Promise<SessionInfo>;\n\treadonly closeSession: () => Promise<void>;\n\treadonly prompt: (input: PromptInput | string, signal?: AbortSignal) => Promise<AssistantMessage>;\n\treadonly promptWithImages: (\n\t\ttext: string,\n\t\timages: readonly ImageContent[],\n\t\tsignal?: AbortSignal,\n\t) => Promise<AssistantMessage>;\n\treadonly steer: (input: PromptInput | string, signal?: AbortSignal) => Promise<void>;\n\treadonly steerWithImages: (text: string, images: readonly ImageContent[], signal?: AbortSignal) => Promise<void>;\n\treadonly retry: (input?: RetryInput | AbortSignal, signal?: AbortSignal) => Promise<AssistantMessage>;\n\treadonly cancel: (requestId: string) => boolean;\n\treadonly transcript: () => readonly import(\"@di-code/ai\").Message[];\n\treadonly tree: () => readonly SessionTreeNode[];\n\treadonly navigateTree: (entryId: string) => Promise<TreeNavigationResult>;\n\treadonly setModel: (modelId: string) => Model;\n\treadonly setRuntime: (providerId: string, modelId: string) => Model;\n\t/** Applies an already-resolved runtime without requiring it in the registry. */\n\treadonly setRuntimeValue: (provider: Provider, model: Model) => Model;\n\treadonly setThinkingLevel: (level: ThinkingLevel) => ThinkingLevel;\n\treadonly cycleThinkingLevel: () => ThinkingLevel | undefined;\n\treadonly compact: (signal?: AbortSignal) => Promise<void>;\n\treadonly setCompactionEnabled: (enabled: boolean) => boolean;\n\t/** Reloads Skills, context and MCP tools after an explicit product-configuration change. */\n\treadonly refreshResources: (projectTrusted?: boolean, signal?: AbortSignal) => Promise<void>;\n\treadonly usage: () => SessionUsage;\n\treadonly toolPolicy: () => ToolPolicySnapshot | undefined;\n\treadonly setToolPolicyMode: (mode: ToolPolicyMode, signal?: AbortSignal) => Promise<ToolPolicySnapshot>;\n\treadonly planMode: () => import(\"@di-code/plan-mode\").PlanModeProjection | undefined;\n\treadonly projections: () => readonly import(\"@di-code/plugin-sdk\").SessionProjectionSnapshot[];\n\treadonly extensions: () => import(\"@di-code/plugin-sdk\").SessionExtensionFacade | undefined;\n\treadonly planCommand: (args: string) => Promise<string>;\n\treadonly ui: () => SessionHostUi;\n\treadonly subscribe: (listener: SessionHostListener) => () => void;\n\treadonly dispose: () => Promise<void>;\n}\n\nconst RETRY_PLUGIN_ID = \"di-code.retry\";\nconst RETRY_PLUGIN_VERSION = \"1\";\nconst RETRY_PLUGIN_SCHEMA_VERSION = 1;\ninterface FailedPrompt {\n\treadonly requestId: string;\n\treadonly text: string;\n}\n\n/** Internal presentation facade. It exposes snapshots and host-owned operations, never Session internals. */\nexport interface SessionHostUi {\n\treadonly allowedRoot: string;\n\treadonly modelId: string;\n\treadonly providerId: string;\n\treadonly thinkingLevel?: ThinkingLevel;\n\treadonly availableModels: readonly Model[];\n\treadonly availableSkills: readonly import(\"../core/resources/types.ts\").SkillResource[];\n\treadonly compactionEnabled: boolean;\n\treadonly sessionFile?: string;\n\treadonly sessionTree: readonly SessionTreeNode[];\n\treadonly sessionLeafId?: string;\n\treadonly transcript: readonly Message[];\n\treadonly usage: SessionUsage;\n\treadonly promptWithImages: SessionHost[\"promptWithImages\"];\n\treadonly retry: SessionHost[\"retry\"];\n\treadonly steerWithImages: SessionHost[\"steerWithImages\"];\n\treadonly subscribeSession: (listener: (event: AgentSessionEvent) => void | Promise<void>) => () => void;\n\treadonly setModel: SessionHost[\"setModel\"];\n\treadonly setRuntime: (provider: Provider, model: Model) => Model;\n\treadonly cycleThinkingLevel: SessionHost[\"cycleThinkingLevel\"];\n\treadonly setCompactionEnabled: SessionHost[\"setCompactionEnabled\"];\n\treadonly navigateTree: SessionHost[\"navigateTree\"];\n\treadonly compact: SessionHost[\"compact\"];\n\treadonly planMode: SessionHost[\"planMode\"];\n\treadonly projections: SessionHost[\"projections\"];\n\treadonly extensions: SessionHost[\"extensions\"];\n\treadonly planCommand: SessionHost[\"planCommand\"];\n}\n\nexport class SessionHostError extends Error {\n\treadonly code:\n\t\t| \"INVALID_WORKSPACE\"\n\t\t| \"NOT_FOUND\"\n\t\t| \"BUSY\"\n\t\t| \"SESSION_IN_USE\"\n\t\t| \"DISPOSED\"\n\t\t| \"INVALID_INPUT\"\n\t\t| \"INTERNAL\";\n\tconstructor(code: SessionHostError[\"code\"], message: string, options?: { readonly cause?: unknown }) {\n\t\tsuper(message, { cause: options?.cause });\n\t\tthis.name = \"SessionHostError\";\n\t\tthis.code = code;\n\t}\n}\n\ninterface Operation {\n\treadonly controller: AbortController;\n\treadonly kind: SessionOperationKind;\n\tpromise?: Promise<unknown>;\n}\n\ninterface HostInternals {\n\treadonly workspace: string;\n\treadonly sessionDirectory: string;\n\treadonly provider: Provider;\n\treadonly model: Model;\n\treadonly skills: readonly import(\"../core/resources/types.ts\").SkillResource[];\n\treadonly systemPrompt: string;\n\treadonly externalTools: readonly AgentSessionTool[];\n\treadonly closeMcp: () => Promise<void>;\n\treadonly startupStatus: SessionStartupStatus;\n}\n\nasync function validateDataRoot(path: string): Promise<string> {\n\tconst requested = resolve(path);\n\tawait mkdir(requested, { recursive: true });\n\tconst stats = await lstat(requested);\n\tif (!stats.isDirectory() || stats.isSymbolicLink()) {\n\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Agent data root must be a real directory: \"${requested}\".`);\n\t}\n\tconst root = await realpath(requested);\n\tawait access(root, fsConstants.R_OK | fsConstants.W_OK | fsConstants.X_OK);\n\treturn root;\n}\n\nasync function ensureRealChildDirectory(parent: string, name: string): Promise<string> {\n\tconst path = join(parent, name);\n\ttry {\n\t\tconst stats = await lstat(path);\n\t\tif (!stats.isDirectory() || stats.isSymbolicLink()) {\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Managed data path must be a real directory: \"${path}\".`);\n\t\t}\n\t} catch (cause) {\n\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) throw cause;\n\t\tawait mkdir(path);\n\t}\n\tconst real = await realpath(path);\n\tif (dirname(real) !== parent)\n\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Managed data path escaped its parent: \"${path}\".`);\n\treturn real;\n}\n\nfunction asId(value: string): SessionId {\n\treturn value as SessionId;\n}\n\nfunction asRequestId(value: string): RequestId {\n\treturn value as RequestId;\n}\n\nfunction messageText(message: import(\"@di-code/ai\").Message): string {\n\tif (message.role !== \"user\") return \"\";\n\treturn message.content\n\t\t.filter((item) => item.type === \"text\")\n\t\t.map((item) => item.text)\n\t\t.join(\" \")\n\t\t.trim();\n}\n\nfunction sessionLabel(manager: SessionManager): string {\n\tfor (const entry of [...manager.entries].reverse()) {\n\t\tif (entry.type !== \"plugin\" || entry.pluginId !== \"di-code.session-label\") continue;\n\t\tconst data = entry.data;\n\t\tif (\n\t\t\ttypeof data === \"object\" &&\n\t\t\tdata !== null &&\n\t\t\t!Array.isArray(data) &&\n\t\t\ttypeof (data as Record<string, unknown>).label === \"string\"\n\t\t) {\n\t\t\tconst label = (data as Record<string, unknown>).label as string;\n\t\t\tif (label.trim()) return label;\n\t\t}\n\t}\n\tconst first = manager.entries.find((entry) => entry.type === \"message\" && entry.message.role === \"user\");\n\treturn first?.type === \"message\"\n\t\t? messageText(first.message) || basename(manager.filePath, extname(manager.filePath))\n\t\t: basename(manager.filePath, extname(manager.filePath));\n}\n\nasync function validateWorkspace(cwd: string): Promise<string> {\n\tconst requested = resolve(cwd);\n\tlet root: string;\n\ttry {\n\t\tconst stats = await lstat(requested);\n\t\tif (!stats.isDirectory() || stats.isSymbolicLink()) throw new Error(\"Workspace must be a real directory.\");\n\t\troot = await realpath(requested);\n\t\tawait access(root, fsConstants.R_OK | fsConstants.W_OK | fsConstants.X_OK);\n\t} catch (cause) {\n\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", `Workspace is not an accessible real directory: \"${requested}\".`, {\n\t\t\tcause,\n\t\t});\n\t}\n\treturn root;\n}\n\nasync function lockSession(filePath: string): Promise<() => Promise<void>> {\n\tconst lockPath = `${filePath}.host.lock`;\n\tconst token = `${process.pid}:${randomUUID()}`;\n\ttry {\n\t\tconst handle = await open(lockPath, \"wx\");\n\t\tawait handle.writeFile(token, \"utf8\");\n\t\treturn async () => {\n\t\t\tlet releaseError: unknown;\n\t\t\ttry {\n\t\t\t\tconst owner = await readFile(lockPath, \"utf8\");\n\t\t\t\tif (owner !== token) releaseError = new Error(`Session lock ownership changed: \"${lockPath}\".`);\n\t\t\t} catch (cause) {\n\t\t\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) releaseError = cause;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait handle.close();\n\t\t\t} catch (cause) {\n\t\t\t\treleaseError = cause;\n\t\t\t}\n\t\t\tif (releaseError === undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tawait unlink(lockPath);\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tif (!(cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")) releaseError = cause;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (releaseError !== undefined) throw releaseError;\n\t\t};\n\t} catch (cause) {\n\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"EEXIST\") {\n\t\t\ttry {\n\t\t\t\tconst owner = await readFile(lockPath, \"utf8\");\n\t\t\t\tconst ownerPid = Number.parseInt(owner.split(\":\", 1)[0] ?? \"\", 10);\n\t\t\t\tif (Number.isSafeInteger(ownerPid) && ownerPid > 0) process.kill(ownerPid, 0);\n\t\t\t} catch (ownerCause) {\n\t\t\t\tif (ownerCause instanceof Error && \"code\" in ownerCause && ownerCause.code === \"ESRCH\") {\n\t\t\t\t\tconst stalePath = `${lockPath}.stale-${randomUUID()}`;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait rename(lockPath, stalePath);\n\t\t\t\t\t\tawait unlink(stalePath);\n\t\t\t\t\t\treturn await lockSession(filePath);\n\t\t\t\t\t} catch (reclaimCause) {\n\t\t\t\t\t\tif (reclaimCause instanceof Error && \"code\" in reclaimCause && reclaimCause.code === \"ENOENT\")\n\t\t\t\t\t\t\treturn await lockSession(filePath);\n\t\t\t\t\t\tthrow new SessionHostError(\"INTERNAL\", `Unable to reclaim stale Session lock: \"${filePath}\".`, {\n\t\t\t\t\t\t\tcause: reclaimCause,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new SessionHostError(\"SESSION_IN_USE\", `Session is already open: \"${filePath}\".`, { cause });\n\t\t}\n\t\tthrow new SessionHostError(\"INTERNAL\", `Unable to lock session: \"${filePath}\".`, { cause });\n\t}\n}\n\nasync function createBootstrap(context: Context, options: SessionHostBootstrapOptions): Promise<HostInternals> {\n\tconst workspace = await validateWorkspace(options.cwd);\n\tconst agentDir = await validateDataRoot(options.agentDir);\n\tconst sessionsRoot = await ensureRealChildDirectory(agentDir, \"sessions\");\n\t// Preserve the CLI's historical workspace hash (which uses the user-supplied path casing/alias).\n\tconst sessionDirectory = await ensureRealChildDirectory(sessionsRoot, workspaceStorageKey(options.cwd));\n\tconst resources = await context.require(interactiveResourceServiceKey).load({\n\t\tcwd: workspace,\n\t\tagentDir,\n\t\tprojectTrusted: options.projectTrusted ?? false,\n\t\tnoSkills: options.noSkills,\n\t\tnoContextFiles: options.noContextFiles,\n\t\tskillPaths: options.skillPaths,\n\t});\n\tconst runtime =\n\t\toptions.provider && options.model\n\t\t\t? { provider: options.provider, model: options.model }\n\t\t\t: context.require(runtimeSelectionKey).selected();\n\tconst mcpConfig = context.require(mcpConfigServiceKey);\n\tconst mcpClient = context.require(mcpClientServiceKey);\n\tconst configurations = await mcpConfig.load({ cwd: workspace, projectTrusted: options.projectTrusted ?? false });\n\tconst mcp = await mcpClient.connect(configurations, { signal: options.signal });\n\tlet externalTools: readonly AgentSessionTool[];\n\ttry {\n\t\texternalTools = context\n\t\t\t.require(mcpToolServiceKey)\n\t\t\t.create(mcp.servers, [\"read\", \"write\", \"edit\", \"glob\", \"grep\", \"bash\", \"load_skill\"]);\n\t} catch (cause) {\n\t\tawait mcpClient.close(mcp.manager);\n\t\tthrow cause;\n\t}\n\treturn {\n\t\tworkspace,\n\t\tsessionDirectory,\n\t\tprovider: runtime.provider,\n\t\tmodel: runtime.model,\n\t\tskills: resources.resources.skills,\n\t\tsystemPrompt: resources.systemPrompt,\n\t\texternalTools,\n\t\tcloseMcp: () => mcpClient.close(mcp.manager),\n\t\tstartupStatus: {\n\t\t\tskills: resources.resources.skills.map((skill) => ({ name: skill.name, scope: skill.scope })),\n\t\t\tresourceDiagnostics: resources.resources.diagnostics,\n\t\t\tmcpServers: mcp.servers.map((server) => ({\n\t\t\t\tid: 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\t\tmcpDiagnostics: mcp.diagnostics,\n\t\t},\n\t};\n}\n\nexport async function createSessionHost(context: Context, options: SessionHostBootstrapOptions): Promise<SessionHost> {\n\tlet bootstrap = await createBootstrap(context, options);\n\ttry {\n\t\tawait mkdir(bootstrap.sessionDirectory, { recursive: true });\n\t} catch (cause) {\n\t\tawait bootstrap.closeMcp();\n\t\tthrow cause;\n\t}\n\tconst store = context.require(sessionStoreRegistryKey).get(\"jsonl\");\n\tif (!store) {\n\t\tawait bootstrap.closeMcp();\n\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore is unavailable.\");\n\t}\n\tconst sessions = new Map<\n\t\tSessionId,\n\t\t{\n\t\t\treadonly manager: SessionManager;\n\t\t\treadonly session: AgentSession;\n\t\t\treadonly unsubscribe: () => void;\n\t\t\treadonly unlock: () => Promise<void>;\n\t\t\treadonly info: SessionInfo;\n\t\t}\n\t>();\n\tconst operations = new Map<RequestId, Operation>();\n\tconst listeners = new Set<SessionHostListener>();\n\tlet activeId: SessionId | undefined;\n\tconst failedPrompts = new Map<SessionId, FailedPrompt | undefined>();\n\tlet resourceProjectTrusted = options.projectTrusted;\n\tlet disposed = false;\n\n\tconst ensureOpen = (): void => {\n\t\tif (disposed) throw new SessionHostError(\"DISPOSED\", \"SessionHost has been disposed.\");\n\t};\n\tconst startupStatus = (): SessionStartupStatus => bootstrap.startupStatus;\n\tconst current = () => {\n\t\tif (!activeId) throw new SessionHostError(\"NOT_FOUND\", \"No Session is open.\");\n\t\tconst value = sessions.get(activeId);\n\t\tif (!value) throw new SessionHostError(\"NOT_FOUND\", \"No Session is open.\");\n\t\treturn value;\n\t};\n\tconst emit = (event: SessionHostEvent): 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(structuredClone(event))).catch(() => undefined);\n\t\t\t\t} catch {\n\t\t\t\t\t// Observers cannot fail the Agent loop or persistence path.\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\tconst infoFor = (manager: SessionManager): SessionInfo => ({\n\t\tid: asId(manager.header.id),\n\t\tdisplayId: basename(manager.filePath, extname(manager.filePath)),\n\t\tcwd: manager.header.cwd,\n\t\tlabel: sessionLabel(manager),\n\t\tmodifiedAt: Date.parse(manager.header.timestamp),\n\t\tstats: statsFor(manager),\n\t});\n\tconst statsFor = (manager: SessionManager): SessionStats => {\n\t\tconst entries = manager.entries;\n\t\tconst parentIds = new Set(entries.map((entry) => entry.parentId));\n\t\treturn {\n\t\t\tentryCount: entries.length,\n\t\t\tmessageCount: entries.filter((entry) => entry.type === \"message\").length,\n\t\t\tbranchCount: [...parentIds].filter((parent) => entries.filter((entry) => entry.parentId === parent).length > 1)\n\t\t\t\t.length,\n\t\t};\n\t};\n\tconst retryState = (manager: SessionManager): FailedPrompt | undefined => {\n\t\tfor (const entry of [...manager.getBranch()].reverse()) {\n\t\t\tif (\n\t\t\t\tentry.type !== \"plugin\" ||\n\t\t\t\tentry.pluginId !== RETRY_PLUGIN_ID ||\n\t\t\t\tentry.schemaVersion !== RETRY_PLUGIN_SCHEMA_VERSION\n\t\t\t)\n\t\t\t\tcontinue;\n\t\t\tconst data = entry.data;\n\t\t\tif (typeof data !== \"object\" || data === null || Array.isArray(data)) return undefined;\n\t\t\tconst value = data as Record<string, unknown>;\n\t\t\tif (value.active !== true || typeof value.text !== \"string\" || typeof value.requestId !== \"string\")\n\t\t\t\treturn undefined;\n\t\t\treturn { requestId: value.requestId, text: value.text };\n\t\t}\n\t\treturn undefined;\n\t};\n\tconst persistRetryState = async (manager: SessionManager, state: FailedPrompt | undefined): Promise<void> => {\n\t\tawait manager.appendPlugin({\n\t\t\tpluginId: RETRY_PLUGIN_ID,\n\t\t\tpluginVersion: RETRY_PLUGIN_VERSION,\n\t\t\tschemaVersion: RETRY_PLUGIN_SCHEMA_VERSION,\n\t\t\tdata: state ? { active: true, requestId: state.requestId, text: state.text } : { active: false },\n\t\t});\n\t};\n\tconst createAgent = async (manager: SessionManager, resources = bootstrap): Promise<AgentSession> => {\n\t\tconst created = await context.require(agentSessionKey).create({\n\t\t\t// The host owns the workspace boundary. Reading the root from the shared\n\t\t\t// composition context would pin every WebUI actor to the startup folder.\n\t\t\tallowedRoot: resources.workspace,\n\t\t\tprovider: resources.provider,\n\t\t\tmodel: resources.model,\n\t\t\tsystemPrompt: resources.systemPrompt,\n\t\t\tskills: resources.skills,\n\t\t\tsessionManager: manager,\n\t\t\texternalTools: resources.externalTools,\n\t\t\tcompaction: options.compaction,\n\t\t\ttoolApproval: options.toolApproval,\n\t\t\ttoolPolicy: options.toolPolicy,\n\t\t\tinteraction: options.interaction,\n\t\t\tplanMode: options.planMode,\n\t\t});\n\t\tif (!(created instanceof AgentSession))\n\t\t\tthrow new SessionHostError(\"INTERNAL\", \"SessionFactory returned an incompatible session.\");\n\t\treturn created;\n\t};\n\tconst assertIdle = (kind: string): void => {\n\t\tif (operations.size > 0)\n\t\t\tthrow new SessionHostError(\"BUSY\", `Cannot ${kind} while another Session operation is running.`);\n\t};\n\tconst withOperation = async <T>(\n\t\tkind: SessionOperationKind,\n\t\trequestId: string | undefined,\n\t\tsignal: AbortSignal | undefined,\n\t\taction: (signal: AbortSignal) => Promise<T>,\n\t): Promise<T> => {\n\t\tensureOpen();\n\t\tconst id = asRequestId(requestId?.trim() || randomUUID());\n\t\tif (operations.has(id)) throw new SessionHostError(\"BUSY\", `Request ID is already active: \"${id}\".`);\n\t\tconst controller = new AbortController();\n\t\tconst abort = () => controller.abort(signal?.reason);\n\t\tif (signal?.aborted) abort();\n\t\telse signal?.addEventListener(\"abort\", abort, { once: true });\n\t\tconst operation: Operation = { controller, kind };\n\t\toperations.set(id, operation);\n\t\tconst promise = (async () => {\n\t\t\ttry {\n\t\t\t\treturn await action(controller.signal);\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof SessionHostError) throw cause;\n\t\t\t\tif (cause instanceof Error && (cause.name === \"AbortError\" || controller.signal.aborted)) throw cause;\n\t\t\t\tthrow new SessionHostError(\"INTERNAL\", cause instanceof Error ? cause.message : String(cause), { cause });\n\t\t\t} finally {\n\t\t\t\toperations.delete(id);\n\t\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\t}\n\t\t})();\n\t\toperation.promise = promise;\n\t\treturn await promise;\n\t};\n\tconst openManager = async (manager: SessionManager): Promise<SessionInfo> => {\n\t\tlet sessionWorkspace: string;\n\t\ttry {\n\t\t\tsessionWorkspace = await realpath(manager.header.cwd);\n\t\t} catch (cause) {\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session workspace is unavailable.\", { cause });\n\t\t}\n\t\tif (sessionWorkspace !== bootstrap.workspace)\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session workspace does not match the Host workspace.\");\n\t\tconst id = asId(manager.header.id);\n\t\tconst unlock = await lockSession(manager.filePath);\n\t\ttry {\n\t\t\tconst session = await createAgent(manager);\n\t\t\tconst info = infoFor(manager);\n\t\t\tconst previous = activeId;\n\t\t\tif (previous !== undefined) {\n\t\t\t\tconst old = sessions.get(previous);\n\t\t\t\tif (old) {\n\t\t\t\t\told.unsubscribe();\n\t\t\t\t\tawait old.session.dispose();\n\t\t\t\t\tawait old.unlock();\n\t\t\t\t}\n\t\t\t\tsessions.delete(previous);\n\t\t\t}\n\t\t\tconst unsubscribe = session.subscribeSession(emit);\n\t\t\tsessions.set(id, { manager, session, unsubscribe, unlock, info });\n\t\t\tfailedPrompts.set(id, retryState(manager));\n\t\t\tactiveId = id;\n\t\t\temit({ type: \"session_changed\", session: info });\n\t\t\treturn info;\n\t\t} catch (cause) {\n\t\t\tawait unlock();\n\t\t\tthrow cause;\n\t\t}\n\t};\n\tconst findSessionPath = async (id: string): Promise<string> => {\n\t\tlet entries: readonly import(\"node:fs\").Dirent<string>[];\n\t\ttry {\n\t\t\tentries = await readdir(bootstrap.sessionDirectory, { withFileTypes: true, encoding: \"utf8\" });\n\t\t} catch (cause) {\n\t\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")\n\t\t\t\tthrow new SessionHostError(\"NOT_FOUND\", `Session not found: \"${id}\".`);\n\t\t\tthrow cause;\n\t\t}\n\t\tconst managedDirectory = await realpath(bootstrap.sessionDirectory);\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.isFile() || extname(entry.name) !== \".jsonl\") continue;\n\t\t\tconst path = join(bootstrap.sessionDirectory, entry.name);\n\t\t\tif (dirname(await realpath(path)) !== managedDirectory) continue;\n\t\t\ttry {\n\t\t\t\tconst manager = await store.open(path);\n\t\t\t\tif (manager instanceof SessionManager && manager.header.id === id) return path;\n\t\t\t} catch {\n\t\t\t\t// Damaged sessions remain listable only through their file diagnostics; they cannot match an opaque ID.\n\t\t\t}\n\t\t}\n\t\tthrow new SessionHostError(\"NOT_FOUND\", `Session not found: \"${id}\".`);\n\t};\n\tconst api: SessionHost = {\n\t\tstate: () => ({\n\t\t\tdisposed,\n\t\t\tworkspace: bootstrap.workspace,\n\t\t\tactiveSession: activeId ? sessions.get(activeId)?.info : undefined,\n\t\t\tbusy: operations.size > 0,\n\t\t\toperations: [...operations].map(([requestId, op]) => ({ requestId, kind: op.kind })),\n\t\t}),\n\t\tstartupStatus,\n\t\tlistSessions: async () => {\n\t\t\tensureOpen();\n\t\t\tlet entries: readonly import(\"node:fs\").Dirent<string>[] = [];\n\t\t\ttry {\n\t\t\t\tentries = await readdir(bootstrap.sessionDirectory, { withFileTypes: true, encoding: \"utf8\" });\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\") return [];\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t\tconst result: SessionInfo[] = [];\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (!entry.isFile() || extname(entry.name) !== \".jsonl\") continue;\n\t\t\t\tconst path = join(bootstrap.sessionDirectory, entry.name);\n\t\t\t\tconst real = await realpath(path);\n\t\t\t\tif (dirname(real) !== (await realpath(bootstrap.sessionDirectory)))\n\t\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session path escaped its managed directory.\");\n\t\t\t\tconst manager = await store.open(path);\n\t\t\t\tif (!(manager instanceof SessionManager)) continue;\n\t\t\t\tlet managerWorkspace: string;\n\t\t\t\ttry {\n\t\t\t\t\tmanagerWorkspace = await realpath(manager.header.cwd);\n\t\t\t\t} catch {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (managerWorkspace.toLowerCase() !== bootstrap.workspace.toLowerCase()) continue;\n\t\t\t\tresult.push(infoFor(manager));\n\t\t\t}\n\t\t\treturn result.sort((left, right) => {\n\t\t\t\tconst rightModified = right.modifiedAt ?? 0;\n\t\t\t\tconst leftModified = left.modifiedAt ?? 0;\n\t\t\t\treturn rightModified - leftModified || right.id.localeCompare(left.id);\n\t\t\t});\n\t\t},\n\t\tcreateSession: async () => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"create a Session\");\n\t\t\tconst manager = await store.create({\n\t\t\t\tfilePath: join(\n\t\t\t\t\tbootstrap.sessionDirectory,\n\t\t\t\t\t`${new Date().toISOString().replaceAll(/[:.]/g, \"-\")}-${randomUUID()}.jsonl`,\n\t\t\t\t),\n\t\t\t\tcwd: bootstrap.workspace,\n\t\t\t\tdeferCreate: true,\n\t\t\t});\n\t\t\tif (!(manager instanceof SessionManager))\n\t\t\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore returned an incompatible SessionManager.\");\n\t\t\treturn await openManager(manager);\n\t\t},\n\t\topenSession: async (id) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"open a Session\");\n\t\t\tif (!/^[A-Za-z0-9](?:[A-Za-z0-9._-]*[A-Za-z0-9])?$/.test(id))\n\t\t\t\tthrow new SessionHostError(\"INVALID_INPUT\", \"Session ID is invalid.\");\n\t\t\tif (activeId === id) return current().info;\n\t\t\tconst path = await findSessionPath(id);\n\t\t\ttry {\n\t\t\t\tif ((await lstat(path)).isSymbolicLink()) throw new Error(\"symlink\");\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof Error && \"code\" in cause && cause.code === \"ENOENT\")\n\t\t\t\t\tthrow new SessionHostError(\"NOT_FOUND\", `Session not found: \"${id}\".`);\n\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session path is not a regular file.\", { cause });\n\t\t\t}\n\t\t\tconst managedDirectory = await realpath(bootstrap.sessionDirectory);\n\t\t\tif (dirname(await realpath(path)) !== managedDirectory)\n\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Session path escaped its managed directory.\");\n\t\t\tconst manager = await store.open(path);\n\t\t\tif (!(manager instanceof SessionManager))\n\t\t\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore returned an incompatible SessionManager.\");\n\t\t\treturn await openManager(manager);\n\t\t},\n\t\tinspectSession: async (id) => {\n\t\t\tensureOpen();\n\t\t\tconst path = await findSessionPath(id);\n\t\t\tconst manager = await store.open(path);\n\t\t\tif (!(manager instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst info = infoFor(manager);\n\t\t\treturn {\n\t\t\t\tsession: info,\n\t\t\t\ttranscript: manager.messages,\n\t\t\t\ttree: manager.getTree(),\n\t\t\t\tstats: statsFor(manager),\n\t\t\t\treadOnly: true,\n\t\t\t\tevents: manager.events,\n\t\t\t};\n\t\t},\n\t\trenameSession: async (id, label) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"rename a Session\");\n\t\t\tif (!label.trim() || label.length > 200) throw new SessionHostError(\"INVALID_INPUT\", \"Session label is invalid.\");\n\t\t\tconst path = await findSessionPath(id);\n\t\t\tconst manager = await store.open(path);\n\t\t\tif (!(manager instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst active = sessions.get(asId(id));\n\t\t\tconst unlock = active ? undefined : await lockSession(path);\n\t\t\ttry {\n\t\t\t\tawait manager.appendPlugin({\n\t\t\t\t\tpluginId: \"di-code.session-label\",\n\t\t\t\t\tpluginVersion: \"1\",\n\t\t\t\t\tschemaVersion: 1,\n\t\t\t\t\tdata: { label: label.trim() },\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tif (unlock) await unlock();\n\t\t\t}\n\t\t\tconst info = infoFor(manager);\n\t\t\tconst existing = sessions.get(asId(id));\n\t\t\tif (existing) sessions.set(asId(id), { ...existing, info });\n\t\t\treturn info;\n\t\t},\n\t\tdeleteSession: async (id, confirmation) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"delete a Session\");\n\t\t\tif (confirmation !== id) throw new SessionHostError(\"INVALID_INPUT\", \"Session deletion requires confirmation.\");\n\t\t\tif (activeId === id) await api.closeSession();\n\t\t\tconst path = await findSessionPath(id);\n\t\t\tconst unlock = await lockSession(path);\n\t\t\ttry {\n\t\t\t\tawait unlink(path);\n\t\t\t} finally {\n\t\t\t\tawait unlock();\n\t\t\t}\n\t\t},\n\t\tbranchSession: async (id, entryId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"branch a Session\");\n\t\t\tconst sourceId = id ?? activeId;\n\t\t\tif (!sourceId) throw new SessionHostError(\"NOT_FOUND\", \"No Session is open.\");\n\t\t\tconst sourcePath = await findSessionPath(sourceId);\n\t\t\tconst source = await store.open(sourcePath);\n\t\t\tif (!(source instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst branch = await store.create({\n\t\t\t\tfilePath: join(\n\t\t\t\t\tbootstrap.sessionDirectory,\n\t\t\t\t\t`${new Date().toISOString().replaceAll(/[:.]/g, \"-\")}-${randomUUID()}.jsonl`,\n\t\t\t\t),\n\t\t\t\tcwd: bootstrap.workspace,\n\t\t\t\tdeferCreate: true,\n\t\t\t});\n\t\t\tif (!(branch instanceof SessionManager)) throw new SessionHostError(\"INTERNAL\", \"Invalid SessionManager.\");\n\t\t\tconst selected = entryId ? source.getEntry(entryId) : undefined;\n\t\t\tif (entryId && !selected) throw new SessionHostError(\"NOT_FOUND\", \"Session tree entry was not found.\");\n\t\t\tfor (const entry of source.getBranch(entryId ?? source.leafId)) {\n\t\t\t\tif (entry.type === \"message\") await branch.appendMessage(entry.message);\n\t\t\t\telse if (entry.type === \"event\")\n\t\t\t\t\tawait branch.appendEvent({\n\t\t\t\t\t\tnamespace: entry.namespace,\n\t\t\t\t\t\teventName: entry.eventName,\n\t\t\t\t\t\tschemaVersion: entry.schemaVersion,\n\t\t\t\t\t\tpayload: entry.payload,\n\t\t\t\t\t});\n\t\t\t}\n\t\t\treturn await openManager(branch);\n\t\t},\n\t\tcloseSession: async () => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"close the Session\");\n\t\t\tif (!activeId) return;\n\t\t\tconst value = current();\n\t\t\tsessions.delete(activeId);\n\t\t\tactiveId = undefined;\n\t\t\tvalue.unsubscribe();\n\t\t\tawait value.session.dispose();\n\t\t\tawait value.unlock();\n\t\t\temit({ type: \"session_changed\" });\n\t\t},\n\t\tprompt: (input, signal) => {\n\t\t\tconst parsed = typeof input === \"string\" ? { text: input } : input;\n\t\t\tif (!parsed.text?.trim())\n\t\t\t\treturn Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"Prompt text must not be empty.\"));\n\t\t\tassertIdle(\"start a prompt\");\n\t\t\treturn withOperation(\"prompt\", parsed.requestId, signal, async (operationSignal) => {\n\t\t\t\tconst value = current();\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await value.session.prompt(parsed.text, operationSignal);\n\t\t\t\t\tconst failed = result.stopReason === \"error\" || result.stopReason === \"aborted\";\n\t\t\t\t\tfailedPrompts.set(\n\t\t\t\t\t\tvalue.info.id,\n\t\t\t\t\t\tfailed ? { requestId: parsed.requestId ?? \"\", text: parsed.text } : undefined,\n\t\t\t\t\t);\n\t\t\t\t\tawait persistRetryState(value.manager, failed ? failedPrompts.get(value.info.id) : undefined);\n\t\t\t\t\treturn result;\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tconst failed = { requestId: parsed.requestId ?? \"\", text: parsed.text };\n\t\t\t\t\tfailedPrompts.set(value.info.id, failed);\n\t\t\t\t\tawait persistRetryState(value.manager, failed).catch(() => undefined);\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tpromptWithImages: (text, images, signal) => {\n\t\t\tif (!text?.trim()) return Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"Prompt text must not be empty.\"));\n\t\t\tassertIdle(\"start a prompt\");\n\t\t\treturn withOperation(\"prompt\", undefined, signal, async (operationSignal) => {\n\t\t\t\tconst value = current();\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await value.session.promptWithImages(text, images, operationSignal);\n\t\t\t\t\tconst failed = result.stopReason === \"error\" || result.stopReason === \"aborted\";\n\t\t\t\t\tconst state = failed ? { requestId: randomUUID(), text } : undefined;\n\t\t\t\t\tfailedPrompts.set(value.info.id, state);\n\t\t\t\t\tawait persistRetryState(value.manager, state);\n\t\t\t\t\treturn result;\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tconst failed = { requestId: randomUUID(), text };\n\t\t\t\t\tfailedPrompts.set(value.info.id, failed);\n\t\t\t\t\tawait persistRetryState(value.manager, failed).catch(() => undefined);\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tsteer: (input, signal) => {\n\t\t\tconst parsed = typeof input === \"string\" ? { text: input } : input;\n\t\t\tif (!parsed.text?.trim())\n\t\t\t\treturn Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"Steering text must not be empty.\"));\n\t\t\treturn withOperation(\"steer\", parsed.requestId, signal, async (operationSignal) => {\n\t\t\t\tawait current().session.steer(parsed.text, operationSignal);\n\t\t\t});\n\t\t},\n\t\tsteerWithImages: (text, images, signal) =>\n\t\t\twithOperation(\"steer\", undefined, signal, async (operationSignal) => {\n\t\t\t\tawait current().session.steerWithImages(text, images, operationSignal);\n\t\t\t}),\n\t\tretry: (input, signal) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"retry\");\n\t\t\tconst target =\n\t\t\t\ttypeof input === \"object\" && input !== null && !(input instanceof AbortSignal)\n\t\t\t\t\t? input.targetRequestId\n\t\t\t\t\t: undefined;\n\t\t\tconst operationSignal = input instanceof AbortSignal ? input : signal;\n\t\t\tconst value = current();\n\t\t\tconst retry = failedPrompts.get(value.info.id);\n\t\t\tif (!retry || (target !== undefined && target !== retry.requestId))\n\t\t\t\treturn Promise.reject(new SessionHostError(\"INVALID_INPUT\", \"No failed prompt is available to retry.\"));\n\t\t\treturn withOperation(\"retry\", target, operationSignal, async (operationSignal) => {\n\t\t\t\tconst result = await value.session.prompt(retry.text, operationSignal);\n\t\t\t\tif (result.stopReason === \"error\" || result.stopReason === \"aborted\") {\n\t\t\t\t\tawait persistRetryState(value.manager, retry);\n\t\t\t\t} else {\n\t\t\t\t\tfailedPrompts.set(value.info.id, undefined);\n\t\t\t\t\tawait persistRetryState(value.manager, undefined);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t});\n\t\t},\n\t\tcancel: (id) => {\n\t\t\tconst operation = operations.get(asRequestId(id));\n\t\t\tif (!operation) return false;\n\t\t\toperation.controller.abort();\n\t\t\treturn true;\n\t\t},\n\t\ttranscript: () => structuredClone(current().session.transcript),\n\t\ttree: () => structuredClone(current().session.sessionTree),\n\t\tnavigateTree: (entryId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"navigate the Session tree\");\n\t\t\treturn withOperation(\"tree\", undefined, undefined, async () => current().session.navigateTree(entryId));\n\t\t},\n\t\tsetModel: (modelId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change model\");\n\t\t\treturn current().session.setModel(modelId);\n\t\t},\n\t\tsetRuntime: (providerId, modelId) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change runtime\");\n\t\t\ttry {\n\t\t\t\tconst selection = context.require(providerRegistryKey).select(providerId, modelId);\n\t\t\t\treturn api.setRuntimeValue(selection.provider, selection.model);\n\t\t\t} catch (cause) {\n\t\t\t\tconst provider = bootstrap.provider;\n\t\t\t\tconst model =\n\t\t\t\t\tprovider.id === providerId ? provider.models.find((candidate) => candidate.id === modelId) : undefined;\n\t\t\t\tif (model) return api.setRuntimeValue(provider, model);\n\t\t\t\tthrow cause;\n\t\t\t}\n\t\t},\n\t\tsetRuntimeValue: (provider, model) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change runtime\");\n\t\t\treturn current().session.setRuntime(provider, model);\n\t\t},\n\t\tsetThinkingLevel: (level) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change thinking level\");\n\t\t\treturn current().session.setThinkingLevel(level);\n\t\t},\n\t\tcycleThinkingLevel: () => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change thinking level\");\n\t\t\treturn current().session.cycleThinkingLevel();\n\t\t},\n\t\tcompact: (signal) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"compact the Session\");\n\t\t\treturn withOperation(\"compact\", undefined, signal, async (operationSignal) =>\n\t\t\t\tcurrent().session.compact(operationSignal),\n\t\t\t);\n\t\t},\n\t\tsetCompactionEnabled: (enabled) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"change compaction\");\n\t\t\treturn current().session.setCompactionEnabled(enabled);\n\t\t},\n\t\trefreshResources: (projectTrusted, signal) => {\n\t\t\tensureOpen();\n\t\t\tassertIdle(\"refresh product resources\");\n\t\t\treturn withOperation(\"session\", undefined, signal, async () => {\n\t\t\t\tconst next = await createBootstrap(context, {\n\t\t\t\t\t...options,\n\t\t\t\t\tprojectTrusted: projectTrusted ?? resourceProjectTrusted,\n\t\t\t\t});\n\t\t\t\tif (next.workspace !== bootstrap.workspace) {\n\t\t\t\t\tawait next.closeMcp();\n\t\t\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Product resources changed the Host workspace.\");\n\t\t\t\t}\n\t\t\t\tconst active = activeId === undefined ? undefined : current();\n\t\t\t\tif (!active) {\n\t\t\t\t\tconst previous = bootstrap;\n\t\t\t\t\tbootstrap = next;\n\t\t\t\t\tresourceProjectTrusted = projectTrusted ?? resourceProjectTrusted;\n\t\t\t\t\tawait previous.closeMcp();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst session = await createAgent(active.manager, next);\n\t\t\t\t\tconst unsubscribe = session.subscribeSession(emit);\n\t\t\t\t\tconst previous = bootstrap;\n\t\t\t\t\tbootstrap = next;\n\t\t\t\t\tresourceProjectTrusted = projectTrusted ?? resourceProjectTrusted;\n\t\t\t\t\tsessions.set(active.info.id, { ...active, session, unsubscribe });\n\t\t\t\t\tactive.unsubscribe();\n\t\t\t\t\tawait active.session.dispose();\n\t\t\t\t\tawait previous.closeMcp();\n\t\t\t\t} catch (cause) {\n\t\t\t\t\tawait next.closeMcp();\n\t\t\t\t\tthrow cause;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tusage: () => current().session.usage,\n\t\ttoolPolicy: () => current().session.toolPolicySnapshot,\n\t\tsetToolPolicyMode: (mode, signal) => current().session.setToolPolicyMode(mode, signal),\n\t\tplanMode: () => current().session.planModeProjection,\n\t\tprojections: () => current().session.projections(),\n\t\textensions: () => current().session.extensions(),\n\t\tplanCommand: (args) => current().session.planModeCommand(args),\n\t\tui: () => {\n\t\t\tconst session = current().session;\n\t\t\treturn {\n\t\t\t\tget allowedRoot() {\n\t\t\t\t\treturn session.allowedRoot;\n\t\t\t\t},\n\t\t\t\tget modelId() {\n\t\t\t\t\treturn session.modelId;\n\t\t\t\t},\n\t\t\t\tget providerId() {\n\t\t\t\t\treturn session.providerId;\n\t\t\t\t},\n\t\t\t\tget thinkingLevel() {\n\t\t\t\t\treturn session.thinkingLevel;\n\t\t\t\t},\n\t\t\t\tget availableModels() {\n\t\t\t\t\treturn session.availableModels;\n\t\t\t\t},\n\t\t\t\tget availableSkills() {\n\t\t\t\t\treturn session.availableSkills;\n\t\t\t\t},\n\t\t\t\tget compactionEnabled() {\n\t\t\t\t\treturn session.compactionEnabled;\n\t\t\t\t},\n\t\t\t\tget sessionFile() {\n\t\t\t\t\treturn session.sessionFile;\n\t\t\t\t},\n\t\t\t\tget sessionTree() {\n\t\t\t\t\treturn session.sessionTree;\n\t\t\t\t},\n\t\t\t\tget sessionLeafId() {\n\t\t\t\t\treturn session.sessionLeafId;\n\t\t\t\t},\n\t\t\t\tget transcript() {\n\t\t\t\t\treturn session.transcript;\n\t\t\t\t},\n\t\t\t\tget usage() {\n\t\t\t\t\treturn session.usage;\n\t\t\t\t},\n\t\t\t\tpromptWithImages: api.promptWithImages,\n\t\t\t\tretry: api.retry,\n\t\t\t\tsteerWithImages: api.steerWithImages,\n\t\t\t\tsubscribeSession: (listener) =>\n\t\t\t\t\tapi.subscribe((event) => {\n\t\t\t\t\t\tif (event.type !== \"session_changed\") return listener(event);\n\t\t\t\t\t}),\n\t\t\t\tsetModel: api.setModel,\n\t\t\t\tsetRuntime: (provider, model) => api.setRuntime(provider.id, model.id),\n\t\t\t\tcycleThinkingLevel: api.cycleThinkingLevel,\n\t\t\t\tsetCompactionEnabled: api.setCompactionEnabled,\n\t\t\t\tnavigateTree: api.navigateTree,\n\t\t\t\tcompact: api.compact,\n\t\t\t\tplanMode: api.planMode,\n\t\t\t\tprojections: api.projections,\n\t\t\t\textensions: api.extensions,\n\t\t\t\tplanCommand: api.planCommand,\n\t\t\t} satisfies SessionHostUi;\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\tconst pending = [...operations.values()]\n\t\t\t\t.map((operation) => operation.promise)\n\t\t\t\t.filter((promise): promise is Promise<unknown> => promise !== undefined);\n\t\t\tfor (const operation of operations.values()) operation.controller.abort();\n\t\t\tawait Promise.allSettled(pending);\n\t\t\tfor (const value of sessions.values()) {\n\t\t\t\tvalue.unsubscribe();\n\t\t\t\tawait value.session.dispose();\n\t\t\t\tawait value.unlock();\n\t\t\t}\n\t\t\tsessions.clear();\n\t\t\tfailedPrompts.clear();\n\t\t\tactiveId = undefined;\n\t\t\tlisteners.clear();\n\t\t\tawait bootstrap.closeMcp();\n\t\t},\n\t};\n\tif (options.initialSessionPath !== undefined) {\n\t\tconst initialPath = resolve(options.initialSessionPath);\n\t\tif (dirname(await realpath(initialPath)) !== (await realpath(bootstrap.sessionDirectory)))\n\t\t\tthrow new SessionHostError(\"INVALID_WORKSPACE\", \"Initial Session path escaped its managed directory.\");\n\t\tconst initial = await store.open(initialPath);\n\t\tif (!(initial instanceof SessionManager))\n\t\t\tthrow new SessionHostError(\"INTERNAL\", \"JSONL SessionStore returned an incompatible SessionManager.\");\n\t\tawait openManager(initial);\n\t}\n\treturn api;\n}\n\nexport interface SessionActor extends SessionHost {\n\treadonly principal: string;\n\treadonly workspace: string;\n}\nexport interface HostManagerOptions extends SessionHostBootstrapOptions {\n\treadonly principal: string;\n}\n\nexport class HostManager {\n\tprivate readonly actors = new Map<string, SessionActor>();\n\tprivate disposed = false;\n\tprivate readonly context: Context;\n\tconstructor(context: Context) {\n\t\tthis.context = context;\n\t}\n\tasync get(options: HostManagerOptions): Promise<SessionActor> {\n\t\tif (this.disposed) throw new SessionHostError(\"DISPOSED\", \"HostManager has been disposed.\");\n\t\tconst workspace = await validateWorkspace(options.cwd);\n\t\tconst key = `${options.principal}\\n${workspace}`;\n\t\tconst existing = this.actors.get(key);\n\t\tif (existing) return existing;\n\t\tconst host = await createSessionHost(this.context, { ...options, cwd: workspace });\n\t\tconst actor = Object.assign(host, { principal: options.principal, workspace });\n\t\tthis.actors.set(key, actor);\n\t\treturn actor;\n\t}\n\tasync dispose(): Promise<void> {\n\t\tif (this.disposed) return;\n\t\tthis.disposed = true;\n\t\tawait Promise.all([...this.actors.values()].map((actor) => actor.dispose()));\n\t\tthis.actors.clear();\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ui-host.d.ts","sourceRoot":"","sources":["../src/ui-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-host.d.ts","sourceRoot":"","sources":["../src/ui-host.ts"],"names":[],"mappings":"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"}
package/dist/ui-host.js CHANGED
@@ -225,6 +225,9 @@ async function runUiHost(context, input, start, signal) {
225
225
  provider: runtime.provider,
226
226
  model: runtime.model,
227
227
  signal,
228
+ planMode: {
229
+ section: "You are in plan mode. Explore and design before presenting the complete plan through exit_plan_mode.",
230
+ },
228
231
  ...(request.command.sessionPath ? { initialSessionPath: resolve(request.cwd, request.command.sessionPath) } : {}),
229
232
  });
230
233
  if (!host.state().activeSession)