@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
@@ -1,4 +1,5 @@
1
1
  import type { CommandRegistry, InteractiveContextService } from "@di-code/builtins";
2
+ import type { UserInteractionInput, UserInteractionResult } from "@di-code/plugin-sdk";
2
3
  import { type TUI } from "@di-code/tui";
3
4
  import type { AgentSession, AgentSessionEvent } from "../core/session.ts";
4
5
  import { type Locale } from "../i18n.ts";
@@ -68,6 +69,7 @@ export declare class InteractiveMode {
68
69
  retryLastPrompt(): void;
69
70
  private exit;
70
71
  private handleCommand;
72
+ private togglePlanMode;
71
73
  private attachClipboardImage;
72
74
  private openThemeSelector;
73
75
  private openModelSelector;
@@ -78,6 +80,8 @@ export declare class InteractiveMode {
78
80
  private openSettingsSelector;
79
81
  private showOverlay;
80
82
  private closeOverlay;
83
+ /** Presents a structured choice for the host UserInteraction bridge. */
84
+ requestInteraction(input: UserInteractionInput, signal?: AbortSignal): Promise<UserInteractionResult>;
81
85
  private updateAutocompleteOverlay;
82
86
  private closeAutocompleteOverlay;
83
87
  private refresh;
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/modes/interactive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/modes/interactive.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ function builtinSlashCommands(locale) {
31
31
  { name: "usage", description: t("showUsage") },
32
32
  { name: "retry", description: t("retryPrompt") },
33
33
  { name: "steer", description: t("steerAgent") },
34
+ { name: "plan", description: "Enter or leave plan mode" },
34
35
  ];
35
36
  }
36
37
  function asImageAttachmentReference(pasted, cwd) {
@@ -165,6 +166,7 @@ export class InteractiveMode {
165
166
  theme: this.theme,
166
167
  locale: this.locale,
167
168
  pasteImageShortcut: PASTE_IMAGE_SHORTCUT,
169
+ planMode: this.session.planMode?.(),
168
170
  });
169
171
  this.root = new InteractiveLayout({
170
172
  header: new InteractiveHeader(readViewState),
@@ -230,6 +232,10 @@ export class InteractiveMode {
230
232
  }
231
233
  handleCommand(data) {
232
234
  this.context?.keybindings();
235
+ if (matchesKey(data, Key.alt("p"))) {
236
+ void this.togglePlanMode();
237
+ return true;
238
+ }
233
239
  if (matchesKey(data, Key.alt("s"))) {
234
240
  void this.submitSteering(this.editor.getValue());
235
241
  return true;
@@ -277,6 +283,23 @@ export class InteractiveMode {
277
283
  }
278
284
  return false;
279
285
  }
286
+ async togglePlanMode() {
287
+ const planSession = this.session;
288
+ if (!planSession.planCommand || !planSession.planMode) {
289
+ this.projection.setError("Plan mode is unavailable in this session.");
290
+ this.refresh();
291
+ return;
292
+ }
293
+ try {
294
+ const projection = planSession.planMode();
295
+ const message = await planSession.planCommand(projection?.active ? "off" : "");
296
+ this.projection.setStatus(message);
297
+ }
298
+ catch (cause) {
299
+ this.projection.setError(cause instanceof Error ? cause.message : String(cause));
300
+ }
301
+ this.refresh();
302
+ }
280
303
  async attachClipboardImage() {
281
304
  try {
282
305
  const path = await this.readClipboardImagePath(this.clipboardDirectory);
@@ -506,6 +529,33 @@ export class InteractiveMode {
506
529
  this.overlay?.hide();
507
530
  this.overlay = undefined;
508
531
  }
532
+ /** Presents a structured choice for the host UserInteraction bridge. */
533
+ async requestInteraction(input, signal) {
534
+ const options = input.options ?? [];
535
+ if (options.length === 0)
536
+ return { requestId: input.requestId, toolCallId: input.toolCallId, status: "cancelled" };
537
+ return await new Promise((resolve) => {
538
+ let settled = false;
539
+ const finish = (result) => {
540
+ if (settled)
541
+ return;
542
+ settled = true;
543
+ signal?.removeEventListener("abort", abort);
544
+ this.closeOverlay();
545
+ resolve(result);
546
+ };
547
+ const abort = () => finish({ requestId: input.requestId, toolCallId: input.toolCallId, status: "cancelled" });
548
+ const list = new SelectList(options.map((option) => ({ value: option.value, label: option.label, description: input.prompt })));
549
+ list.onSelect = (item) => finish({ requestId: input.requestId, toolCallId: input.toolCallId, status: "answered", value: item.value });
550
+ list.onCancel = abort;
551
+ if (signal?.aborted) {
552
+ abort();
553
+ return;
554
+ }
555
+ signal?.addEventListener("abort", abort, { once: true });
556
+ this.showOverlay(list, true);
557
+ });
558
+ }
509
559
  updateAutocompleteOverlay() {
510
560
  this.closeAutocompleteOverlay();
511
561
  if (!this.editor.isShowingAutocomplete()) {
@@ -801,6 +851,25 @@ export class InteractiveMode {
801
851
  else
802
852
  this.projection.setStatus(translate(this.locale, "nothingToRetry"));
803
853
  break;
854
+ case "plan":
855
+ {
856
+ const planSession = this.session;
857
+ if (!planSession.planCommand || !planSession.planMode) {
858
+ this.projection.setError("Plan mode is unavailable in this session.");
859
+ break;
860
+ }
861
+ void planSession
862
+ .planCommand(_args)
863
+ .then((message) => {
864
+ this.projection.setStatus(`${message}${planSession.planMode?.()?.active ? " [plan]" : ""}`);
865
+ this.refresh();
866
+ })
867
+ .catch((cause) => {
868
+ this.projection.setError(cause instanceof Error ? cause.message : String(cause));
869
+ this.refresh();
870
+ });
871
+ }
872
+ return 0;
804
873
  default:
805
874
  this.projection.setError(`Unknown command: /${command}`);
806
875
  }
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/modes/interactive.ts"],"names":[],"mappings":"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","sourcesContent":["import { statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { extname, join, resolve } from \"node:path\";\nimport type { CommandRegistry, InteractiveContextService } from \"@di-code/builtins\";\nimport {\n\ttype AutocompleteProvider,\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tEditor,\n\tKey,\n\tmatchesKey,\n\ttype OverlayHandle,\n\tSelectList,\n\tSettingsList,\n\ttype SlashCommand,\n\ttype TUI,\n} from \"@di-code/tui\";\nimport {\n\tcleanupStaleClipboardImages,\n\tclipboardImageDirectory,\n\tisClipboardImagePath,\n\treadClipboardImagePath,\n\tremoveClipboardImage,\n} from \"../core/clipboard-image.ts\";\nimport { extractImageAttachments } from \"../core/image-input.ts\";\nimport type { AgentSession, AgentSessionEvent } from \"../core/session.ts\";\nimport { DEFAULT_LOCALE, type Locale, translate } from \"../i18n.ts\";\nimport {\n\ttype InteractiveProviderOnboardingOptions,\n\tshowInteractiveProviderOnboarding,\n} from \"../provider-onboarding.ts\";\nimport type { SessionHostUi } from \"../runtime/session-host.ts\";\nimport {\n\tremoveGlobalProviderApiKey,\n\tsaveGlobalLocale,\n\tsaveGlobalModelSelection,\n\tsaveGlobalThinkingLevel,\n} from \"../startup.ts\";\nimport {\n\tAutocompleteMenu,\n\tInteractiveChat,\n\tInteractiveComposer,\n\tInteractiveFooter,\n\tInteractiveHeader,\n\ttype InteractiveViewState,\n} from \"./interactive-components.ts\";\nimport { InteractiveLayout } from \"./interactive-layout.ts\";\nimport { InteractiveProjection } from \"./interactive-state.ts\";\nimport { TreeSelector } from \"./tree-selector.ts\";\n\nexport type { AgentSessionEvent };\nexport type { InteractiveMessage, InteractiveProcessItem, InteractiveState } from \"./interactive-state.ts\";\nexport { InteractiveProjection } from \"./interactive-state.ts\";\n\nconst IMAGE_EXTENSIONS = new Set([\".gif\", \".jpeg\", \".jpg\", \".png\", \".webp\"]);\nconst PASTE_IMAGE_KEY = process.platform === \"win32\" ? Key.alt(\"v\") : Key.ctrl(\"v\");\nconst PASTE_IMAGE_SHORTCUT = process.platform === \"win32\" ? \"Alt+V\" : \"Ctrl+V\";\n\nfunction builtinSlashCommands(locale: Locale): readonly SlashCommand[] {\n\tconst t = (key: string) => translate(locale, key);\n\treturn [\n\t\t{ name: \"help\", description: t(\"showInteractiveCommands\") },\n\t\t{ name: \"clear\", description: t(\"clearVisibleMessages\") },\n\t\t{ name: \"model\", description: t(\"openModelSelector\") },\n\t\t{ name: \"session\", description: t(\"openSessionSelector\") },\n\t\t{ name: \"tree\", description: t(\"openTreeSelector\") },\n\t\t{ name: \"theme\", description: t(\"openThemeSelector\") },\n\t\t{ name: \"settings\", description: t(\"openSettingsSelector\") },\n\t\t{ name: \"login\", description: t(\"chooseProvider\") },\n\t\t{ name: \"logout\", description: t(\"removeProviderKey\") },\n\t\t{ name: \"compact\", description: t(\"compactContext\") },\n\t\t{ name: \"usage\", description: t(\"showUsage\") },\n\t\t{ name: \"retry\", description: t(\"retryPrompt\") },\n\t\t{ name: \"steer\", description: t(\"steerAgent\") },\n\t];\n}\n\nfunction asImageAttachmentReference(pasted: string, cwd: string): string {\n\tif (pasted.includes(\"\\n\")) return pasted;\n\tconst candidate = pasted.trim().replace(/^(?:\"([\\s\\S]*)\"|'([\\s\\S]*)')$/, \"$1$2\");\n\tif (!candidate || !IMAGE_EXTENSIONS.has(extname(candidate).toLowerCase())) return pasted;\n\ttry {\n\t\tif (!statSync(resolve(cwd, candidate)).isFile()) return pasted;\n\t} catch {\n\t\treturn pasted;\n\t}\n\treturn `@\"${candidate.replaceAll('\"', '\\\\\"')}\" `;\n}\n\nfunction normalizeDroppedImagePrompt(prompt: string, cwd: string): string {\n\tconst normalized = asImageAttachmentReference(prompt, cwd);\n\tif (normalized !== prompt) return normalized;\n\tconst prefix = /^((?:(?:[A-Za-z]:[\\\\/])|(?:\\.\\.?[\\\\/])|\\/)[\\s\\S]*?\\.(?:gif|jpe?g|png|webp))([\\s\\S]*)$/i.exec(prompt);\n\tif (!prefix) return prompt;\n\tconst imageReference = asImageAttachmentReference(prefix[1] ?? \"\", cwd);\n\treturn imageReference === prefix[1]\n\t\t? prompt\n\t\t: `${imageReference}${normalizeDroppedImagePrompt(prefix[2] ?? \"\", cwd)}`;\n}\n\nfunction steeringCommandArgument(prompt: string): string | undefined {\n\tconst match = /^\\/steer(?:\\s+([\\s\\S]*))?$/i.exec(prompt);\n\treturn match ? (match[1] ?? \"\").trim() : undefined;\n}\n\nexport interface InteractiveModeOptions {\n\treadonly session: InteractiveSessionHandle;\n\treadonly tui: TUI;\n\treadonly onExit?: () => void;\n\treadonly sessions?: readonly InteractiveSessionChoice[];\n\treadonly providerOnboarding?: Omit<InteractiveProviderOnboardingOptions, \"tui\">;\n\t/** User data directory that owns clipboard image temporaries. */\n\treadonly agentDir?: string;\n\treadonly readClipboardImagePath?: (directory?: string) => Promise<string | null>;\n\treadonly locale?: Locale;\n\t/** Command contributions are resolved through the composition registry. */\n\treadonly commandRegistry?: CommandRegistry;\n\t/** Session controls and preferences are supplied by the active Context. */\n\treadonly context?: InteractiveContextService;\n}\n\nexport interface InteractiveSessionChoice {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly description?: string;\n\topen(): InteractiveSessionHandle | Promise<InteractiveSessionHandle>;\n}\n\nexport type InteractiveSessionHandle = AgentSession | SessionHostUi;\n\ninterface ContextSessionChoice {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly description?: string;\n\treadonly open: () => unknown | Promise<unknown>;\n}\n\nfunction isContextSessionChoice(value: unknown): value is ContextSessionChoice {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"id\" in value &&\n\t\ttypeof value.id === \"string\" &&\n\t\t\"label\" in value &&\n\t\ttypeof value.label === \"string\" &&\n\t\t\"open\" in value &&\n\t\ttypeof value.open === \"function\"\n\t);\n}\n\nexport class InteractiveMode {\n\tprivate readonly projection = new InteractiveProjection();\n\tprivate readonly root: InteractiveLayout;\n\tprivate readonly editor: Editor;\n\tprivate session: InteractiveSessionHandle;\n\tprivate readonly tui: TUI;\n\tprivate readonly sessionChoices: readonly InteractiveSessionChoice[];\n\tprivate readonly providerOnboarding?: Omit<InteractiveProviderOnboardingOptions, \"tui\">;\n\tprivate readonly agentDir: string;\n\tprivate readonly readClipboardImagePath: (directory?: string) => Promise<string | null>;\n\tprivate clipboardDirectory: string;\n\tprivate readonly clipboardFiles = new Set<string>();\n\tprivate unsubscribeSession?: () => void;\n\tprivate sessionSwitching = false;\n\tprivate promptInFlight = false;\n\tprivate compactionInFlight = false;\n\tprivate activeAbort?: AbortController;\n\tprivate started = false;\n\tprivate lastFailedPrompt?: string;\n\tprivate queuedPrompts: string[] = [];\n\tprivate steeringPrompts: string[] = [];\n\tprivate readonly onExit?: () => void;\n\tprivate theme: \"dark\" | \"light\" = \"dark\";\n\tprivate overlay?: OverlayHandle;\n\tprivate autocompleteOverlay?: OverlayHandle;\n\tprivate spinnerTimer?: ReturnType<typeof setInterval>;\n\tprivate preserveClipboardFiles = false;\n\tprivate locale: Locale;\n\tprivate readonly commandRegistry?: CommandRegistry;\n\tprivate readonly context?: InteractiveContextService;\n\n\tconstructor(options: InteractiveModeOptions) {\n\t\tthis.session = options.session;\n\t\tthis.projection.configureFilePreview(this.session.allowedRoot, () => this.refresh());\n\t\tthis.tui = options.tui;\n\t\tthis.onExit = options.onExit;\n\t\tconst contextChoices = (options.context?.sessionChoices() ?? []).filter(isContextSessionChoice).map((choice) => ({\n\t\t\t...choice,\n\t\t\topen: async () => {\n\t\t\t\tconst session = await choice.open();\n\t\t\t\tif (typeof session !== \"object\" || session === null) throw new Error(`Session choice ${choice.id} is invalid`);\n\t\t\t\treturn session as InteractiveSessionHandle;\n\t\t\t},\n\t\t}));\n\t\tthis.sessionChoices = [...(options.sessions ?? contextChoices)];\n\t\tthis.providerOnboarding = options.providerOnboarding;\n\t\tthis.agentDir = resolve(options.agentDir ?? join(homedir(), \".di-code\"));\n\t\tthis.locale = options.locale ?? DEFAULT_LOCALE;\n\t\tthis.commandRegistry = options.commandRegistry;\n\t\tthis.context = options.context;\n\t\tif (this.context?.theme() === \"light\") this.theme = \"light\";\n\t\tthis.readClipboardImagePath = options.readClipboardImagePath ?? readClipboardImagePath;\n\t\tthis.clipboardDirectory = clipboardImageDirectory(this.agentDir, this.session.allowedRoot);\n\t\tconst autocomplete: AutocompleteProvider = {\n\t\t\tgetSuggestions: (context, autocompleteOptions) =>\n\t\t\t\tnew CombinedAutocompleteProvider(this.listSlashCommands(), this.session.allowedRoot).getSuggestions(\n\t\t\t\t\tcontext,\n\t\t\t\t\tautocompleteOptions,\n\t\t\t\t),\n\t\t\tapplyCompletion: (context, item, prefix) =>\n\t\t\t\tnew CombinedAutocompleteProvider(this.listSlashCommands(), this.session.allowedRoot).applyCompletion(\n\t\t\t\t\tcontext,\n\t\t\t\t\titem,\n\t\t\t\t\tprefix,\n\t\t\t\t),\n\t\t};\n\t\tthis.editor = new Editor({\n\t\t\tmaxHeight: 3,\n\t\t\tautocomplete,\n\t\t\tsubmitAutocomplete: (context) => /^\\/[^\\s/]*$/.test(context.text.slice(0, context.cursor)),\n\t\t});\n\t\tthis.editor.onSubmit = (text) => void this.submit(text);\n\t\tthis.editor.onEscape = () => {\n\t\t\tif (!this.activeAbort) {\n\t\t\t\tthis.context?.cancel();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.projection.setStatus(translate(this.locale, \"cancelled\"));\n\t\t\tthis.context?.cancel();\n\t\t\tthis.activeAbort.abort();\n\t\t\tthis.refresh();\n\t\t};\n\t\tthis.editor.onCommand = (data) => this.handleCommand(data);\n\t\tthis.editor.onInterrupt = () => this.exit();\n\t\tthis.editor.onChange = () => {\n\t\t\tif (!this.preserveClipboardFiles) {\n\t\t\t\tvoid this.cleanupUnreferencedClipboardFiles().catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tthis.editor.onAutocompleteChange = () => this.updateAutocompleteOverlay();\n\t\tconst readViewState = (): InteractiveViewState => ({\n\t\t\t...this.projection.state,\n\t\t\tmodel: `${this.session.modelId}${this.session.thinkingLevel ? `(${this.session.thinkingLevel})` : \"\"}`,\n\t\t\ttheme: this.theme,\n\t\t\tlocale: this.locale,\n\t\t\tpasteImageShortcut: PASTE_IMAGE_SHORTCUT,\n\t\t});\n\t\tthis.root = new InteractiveLayout({\n\t\t\theader: new InteractiveHeader(readViewState),\n\t\t\tchat: new InteractiveChat(readViewState),\n\t\t\tcomposer: new InteractiveComposer(readViewState),\n\t\t\teditor: this.editor,\n\t\t\tfooter: new InteractiveFooter(readViewState),\n\t\t});\n\t\tthis.tui.addChild(this.root);\n\t\tthis.tui.setFocus(this.editor);\n\t}\n\n\tstart(initialPrompt?: string): void {\n\t\tif (this.started) throw new Error(\"Interactive mode is already started\");\n\t\tthis.started = true;\n\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\tthis.projection.setUsage(this.session.usage);\n\t\tthis.subscribeToSession();\n\t\tvoid cleanupStaleClipboardImages(this.agentDir, this.session.allowedRoot).catch((cause) => {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\tthis.refresh();\n\t\t});\n\t\ttry {\n\t\t\tthis.tui.start();\n\t\t} catch (cause) {\n\t\t\tthis.started = false;\n\t\t\tthis.unsubscribeSession?.();\n\t\t\tthis.unsubscribeSession = undefined;\n\t\t\tthrow cause;\n\t\t}\n\t\tthis.startSpinnerTimer();\n\t\tif (initialPrompt?.trim()) void this.submit(initialPrompt);\n\t}\n\n\tstop(): void {\n\t\tif (!this.started && !this.unsubscribeSession) return;\n\t\tthis.started = false;\n\t\tthis.activeAbort?.abort();\n\t\tthis.activeAbort = undefined;\n\t\tthis.stopSpinnerTimer();\n\t\tthis.projection.clearTransientProcess();\n\t\tthis.closeOverlay();\n\t\tthis.closeAutocompleteOverlay();\n\t\tthis.unsubscribeSession?.();\n\t\tthis.unsubscribeSession = undefined;\n\t\tvoid this.cleanupClipboardFiles();\n\t\tthis.tui.stop({ finalLines: this.root.renderTranscript(this.tui.columns) });\n\t}\n\n\t/** Cancels the active prompt without changing Session history. */\n\tcancelActivePrompt(): void {\n\t\tthis.activeAbort?.abort();\n\t}\n\n\t/** Re-submits the last failed prompt when the mode is idle. */\n\tretryLastPrompt(): void {\n\t\tif (this.lastFailedPrompt && !this.promptInFlight) void this.submit(this.lastFailedPrompt, true);\n\t}\n\n\tprivate exit(): void {\n\t\tthis.stop();\n\t\tthis.onExit?.();\n\t}\n\n\tprivate handleCommand(data: string): boolean {\n\t\tthis.context?.keybindings();\n\t\tif (matchesKey(data, Key.alt(\"s\"))) {\n\t\t\tvoid this.submitSteering(this.editor.getValue());\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x1b[Z\") {\n\t\t\ttry {\n\t\t\t\tconst level = this.session.cycleThinkingLevel();\n\t\t\t\tthis.projection.setStatus(level ? `thinking=${level}` : \"Current model does not support thinking levels.\");\n\t\t\t\tif (level) {\n\t\t\t\t\tvoid saveGlobalThinkingLevel(this.agentDir, this.session.providerId, this.session.modelId, level).catch(\n\t\t\t\t\t\t(cause) => {\n\t\t\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (cause) {\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x14\") {\n\t\t\tthis.openThemeSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x13\") {\n\t\t\tthis.openSettingsSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x0f\") {\n\t\t\tthis.openModelSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x0c\") {\n\t\t\tthis.openSessionSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x12\" && this.lastFailedPrompt && !this.promptInFlight) {\n\t\t\tvoid this.submit(this.lastFailedPrompt, true);\n\t\t\treturn true;\n\t\t}\n\t\tif (matchesKey(data, PASTE_IMAGE_KEY)) {\n\t\t\tvoid this.attachClipboardImage();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate async attachClipboardImage(): Promise<void> {\n\t\ttry {\n\t\t\tconst path = await this.readClipboardImagePath(this.clipboardDirectory);\n\t\t\tif (!path) {\n\t\t\t\tthis.projection.setStatus(\n\t\t\t\t\tthis.locale === \"zh-CN\" ? \"剪贴板中没有受支持的图片。\" : \"Clipboard has no supported image.\",\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.editor.insertTextAtCursor(path);\n\t\t\t\tif (isClipboardImagePath(path, this.clipboardDirectory)) this.clipboardFiles.add(path);\n\t\t\t}\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate openThemeSelector(): void {\n\t\tconst t = (key: string) => translate(this.locale, key);\n\t\tconst list = new SelectList([\n\t\t\t{ value: \"dark\", label: t(\"dark\"), description: t(\"darkTheme\") },\n\t\t\t{ value: \"light\", label: t(\"light\"), description: t(\"lightTheme\") },\n\t\t]);\n\t\tlist.onSelect = (item) => {\n\t\t\tthis.theme = item.value === \"light\" ? \"light\" : \"dark\";\n\t\t\tthis.context?.setTheme(this.theme);\n\t\t\tthis.projection.setStatus(`theme=${this.theme}`);\n\t\t\tthis.closeOverlay();\n\t\t\tthis.refresh();\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate openModelSelector(): void {\n\t\tconst list = new SelectList(\n\t\t\tthis.session.availableModels.map((model) => ({\n\t\t\t\tvalue: model.id,\n\t\t\t\tlabel: model.name,\n\t\t\t\tdescription: `${model.provider} / ${model.id} / context ${model.contextWindow}`,\n\t\t\t})),\n\t\t);\n\t\tlist.onSelect = (item) => {\n\t\t\ttry {\n\t\t\t\tthis.session.setModel(item.value);\n\t\t\t\tthis.projection.setStatus(`model=${item.value}`);\n\t\t\t\tvoid saveGlobalModelSelection(this.agentDir, this.session.providerId, this.session.modelId).catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tthis.refresh();\n\t\t\t} catch (cause) {\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t}\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate openSessionSelector(): void {\n\t\tconst t = (key: string) => translate(this.locale, key);\n\t\tconst list = new SelectList([\n\t\t\t{\n\t\t\t\tvalue: \"__current__\",\n\t\t\t\tlabel: t(\"currentSession\"),\n\t\t\t\tdescription: this.session.sessionFile ?? t(\"inMemorySession\"),\n\t\t\t},\n\t\t\t...this.sessionChoices.map((choice) => ({\n\t\t\t\tvalue: choice.id,\n\t\t\t\tlabel: choice.label,\n\t\t\t\t...(choice.description ? { description: choice.description } : {}),\n\t\t\t})),\n\t\t]);\n\t\tlist.onSelect = (item) => {\n\t\t\tif (item.value === \"__current__\") {\n\t\t\t\tthis.projection.setStatus(\"session=current\");\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst choice = this.sessionChoices.find((candidate) => candidate.id === item.value);\n\t\t\tif (!choice) return;\n\t\t\tthis.closeOverlay();\n\t\t\tvoid this.switchSession(choice);\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate openTreeSelector(): void {\n\t\tif (this.promptInFlight || this.compactionInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"提示词运行时不能浏览会话树。\"\n\t\t\t\t\t: \"Cannot browse the session tree while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.sessionTree.length === 0) {\n\t\t\tthis.projection.setStatus(\n\t\t\t\tthis.locale === \"zh-CN\" ? \"当前会话还没有历史节点。\" : \"The current session has no history nodes.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst selector = new TreeSelector({\n\t\t\tnodes: this.session.sessionTree,\n\t\t\tleafId: this.session.sessionLeafId,\n\t\t\tlocale: this.locale,\n\t\t\tonContinue: (entry) => {\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tvoid this.navigateTreeEntry(entry.id);\n\t\t\t},\n\t\t\tonEdit: (entry) => {\n\t\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\") {\n\t\t\t\t\tthis.projection.setError(\n\t\t\t\t\t\tthis.locale === \"zh-CN\" ? \"只能编辑历史用户消息。\" : \"Only historical user messages can be edited.\",\n\t\t\t\t\t);\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tvoid this.navigateTreeEntry(entry.id);\n\t\t\t},\n\t\t\tonSummarize: (entry) => {\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tvoid this.summarizeTreeBranch(entry.id);\n\t\t\t},\n\t\t\tonCancel: () => this.closeOverlay(),\n\t\t});\n\t\tthis.showOverlay(selector, true, \"80%\");\n\t}\n\n\tprivate async navigateTreeEntry(entryId: string): Promise<boolean> {\n\t\ttry {\n\t\t\tconst result = await this.session.navigateTree(entryId);\n\t\t\tif (!this.started) return false;\n\t\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\t\tthis.editor.setValue(result.editorText ?? \"\");\n\t\t\tthis.projection.setStatus(\n\t\t\t\tresult.imagesOmitted\n\t\t\t\t\t? this.locale === \"zh-CN\"\n\t\t\t\t\t\t? \"已恢复文本;请重新附加图片。\"\n\t\t\t\t\t\t: \"Text restored; reattach images before sending.\"\n\t\t\t\t\t: `tree=${result.selectedEntryId}`,\n\t\t\t);\n\t\t\treturn true;\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tprivate async summarizeTreeBranch(entryId: string): Promise<void> {\n\t\tif (this.compactionInFlight || this.promptInFlight) return;\n\t\tthis.compactionInFlight = true;\n\t\tthis.projection.setStatus(this.locale === \"zh-CN\" ? \"正在为分支生成摘要。\" : \"Summarizing selected branch.\");\n\t\tthis.refresh();\n\t\ttry {\n\t\t\tif (!(await this.navigateTreeEntry(entryId))) return;\n\t\t\tawait this.session.compact();\n\t\t\tthis.editor.setValue(\"\");\n\t\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\t\tthis.projection.setStatus(this.locale === \"zh-CN\" ? \"摘要分支已创建。\" : \"Summary branch created.\");\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.compactionInFlight = false;\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tprivate openSettingsSelector(): void {\n\t\tconst t = (key: string) => translate(this.locale, key);\n\t\tconst list = new SettingsList(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tid: \"compaction\",\n\t\t\t\t\tlabel: t(\"contextCompaction\"),\n\t\t\t\t\tcurrentValue: this.session.compactionEnabled ? t(\"on\") : t(\"off\"),\n\t\t\t\t\tvalues: [t(\"on\"), t(\"off\")],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"locale\",\n\t\t\t\t\tlabel: t(\"language\"),\n\t\t\t\t\tcurrentValue: this.locale,\n\t\t\t\t\tvalues: [\"en\", \"zh-CN\"],\n\t\t\t\t},\n\t\t\t],\n\t\t\t{ title: t(\"settings\") },\n\t\t);\n\t\tlist.onChange = (id, value) => {\n\t\t\tif (id === \"locale\") {\n\t\t\t\tthis.locale = value === \"zh-CN\" ? \"zh-CN\" : \"en\";\n\t\t\t\tvoid saveGlobalLocale(this.agentDir, this.locale).catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tthis.openSettingsSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (id !== \"compaction\") return;\n\t\t\ttry {\n\t\t\t\tconst enabled = this.session.setCompactionEnabled(value === t(\"on\"));\n\t\t\t\tlist.updateValue(id, enabled ? t(\"on\") : t(\"off\"));\n\t\t\t\tthis.projection.setStatus(\n\t\t\t\t\tenabled === (value === t(\"on\")) ? `compaction=${enabled ? t(\"on\") : t(\"off\")}` : t(\"compactionUnavailable\"),\n\t\t\t\t);\n\t\t\t} catch (cause) {\n\t\t\t\tlist.updateValue(id, this.session.compactionEnabled ? t(\"on\") : t(\"off\"));\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\tthis.closeOverlay();\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate showOverlay(component: Component, preserveLastLine = false, maxHeight: \"60%\" | \"80%\" = \"60%\"): void {\n\t\tthis.editor.cancelAutocomplete();\n\t\tthis.closeAutocompleteOverlay();\n\t\tthis.closeOverlay();\n\t\tthis.overlay = this.tui.showOverlay(component, {\n\t\t\twidth: \"70%\",\n\t\t\tmaxHeight,\n\t\t\tanchor: \"center\",\n\t\t\tmargin: 1,\n\t\t\tpreserveLastLine,\n\t\t});\n\t}\n\n\tprivate closeOverlay(): void {\n\t\tthis.overlay?.hide();\n\t\tthis.overlay = undefined;\n\t}\n\n\tprivate updateAutocompleteOverlay(): void {\n\t\tthis.closeAutocompleteOverlay();\n\t\tif (!this.editor.isShowingAutocomplete()) {\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst menu = new AutocompleteMenu(() => ({\n\t\t\titems: this.editor.getAutocompleteItems(),\n\t\t\tindex: this.editor.getAutocompleteIndex(),\n\t\t}));\n\t\tconst editorBounds = this.root.getEditorBounds(this.tui.columns);\n\t\tthis.autocompleteOverlay = this.tui.showOverlay(menu, {\n\t\t\twidth: \"55%\",\n\t\t\tmaxHeight: 9,\n\t\t\tanchor: \"bottom-left\",\n\t\t\tplacement: {\n\t\t\t\tanchorRow: editorBounds.end - 1,\n\t\t\t\tavoidStartRow: editorBounds.start,\n\t\t\t\tpreferred: \"below\",\n\t\t\t},\n\t\t\tmargin: 1,\n\t\t\tpreserveLastLine: true,\n\t\t\tnonCapturing: true,\n\t\t});\n\t\tthis.refresh();\n\t}\n\n\tprivate closeAutocompleteOverlay(): void {\n\t\tthis.autocompleteOverlay?.hide();\n\t\tthis.autocompleteOverlay = undefined;\n\t}\n\n\tprivate refresh(): void {\n\t\tthis.root.invalidate();\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate startSpinnerTimer(): void {\n\t\tthis.stopSpinnerTimer();\n\t\tthis.spinnerTimer = setInterval(() => {\n\t\t\tif (this.projection.advanceSpinner()) this.refresh();\n\t\t}, 120);\n\t\tthis.spinnerTimer.unref?.();\n\t}\n\n\tprivate stopSpinnerTimer(): void {\n\t\tif (this.spinnerTimer) clearInterval(this.spinnerTimer);\n\t\tthis.spinnerTimer = undefined;\n\t}\n\n\tprivate subscribeToSession(): void {\n\t\tthis.unsubscribeSession?.();\n\t\tthis.unsubscribeSession = this.session.subscribeSession((event) => {\n\t\t\tif (!this.started) return;\n\t\t\tif (event.type === \"tree_navigated\") {\n\t\t\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"queue_update\") {\n\t\t\t\tthis.steeringPrompts = [...event.steering];\n\t\t\t\tthis.refreshQueue();\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.projection.apply(event);\n\t\t\tthis.refresh();\n\t\t});\n\t}\n\n\tprivate async switchSession(choice: InteractiveSessionChoice): Promise<void> {\n\t\tif (this.promptInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\" ? \"提示词运行时不能切换会话。\" : \"Cannot switch sessions while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.sessionSwitching = true;\n\t\tthis.projection.setStatus(`opening session=${choice.id}`);\n\t\tthis.refresh();\n\t\ttry {\n\t\t\tconst next = await choice.open();\n\t\t\tif (!this.started) return;\n\t\t\tthis.unsubscribeSession?.();\n\t\t\tthis.session = next;\n\t\t\tthis.projection.configureFilePreview(next.allowedRoot, () => this.refresh());\n\t\t\tthis.clipboardDirectory = clipboardImageDirectory(this.agentDir, next.allowedRoot);\n\t\t\tvoid cleanupStaleClipboardImages(this.agentDir, next.allowedRoot);\n\t\t\tthis.queuedPrompts = [];\n\t\t\tthis.steeringPrompts = [];\n\t\t\tthis.refreshQueue();\n\t\t\tthis.projection.replaceTranscript(next.transcript);\n\t\t\tthis.projection.setUsage(next.usage);\n\t\t\tthis.projection.setStatus(`session=${choice.id}`);\n\t\t\tthis.subscribeToSession();\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.sessionSwitching = false;\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate async submit(text: string, retry = false): Promise<void> {\n\t\tconst prompt = text.trim();\n\t\tif (prompt.length === 0 || !this.started) return;\n\t\tconst steeringArgument = steeringCommandArgument(prompt);\n\t\tif (steeringArgument !== undefined) {\n\t\t\tawait this.submitSteering(steeringArgument);\n\t\t\treturn;\n\t\t}\n\t\tif (prompt.startsWith(\"/\") && !this.isLoadedSkillCommand(prompt)) {\n\t\t\tthis.editor.setValue(\"\");\n\t\t\tthis.handleSlashCommand(prompt);\n\t\t\treturn;\n\t\t}\n\t\tif (this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"会话正在打开,请等待后再提交提示词。\"\n\t\t\t\t\t: \"A session is opening; wait before submitting a prompt.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.compactionInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"正在压缩上下文,请等待后再提交提示词。\"\n\t\t\t\t\t: \"A compaction is running; wait before submitting a prompt.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.promptInFlight) {\n\t\t\tthis.queuedPrompts.push(prompt);\n\t\t\tthis.refreshQueue();\n\t\t\tthis.root.invalidate();\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tthis.promptInFlight = true;\n\t\tthis.activeAbort = new AbortController();\n\t\tthis.projection.setRetrying(retry);\n\t\ttry {\n\t\t\tconst input = await extractImageAttachments(\n\t\t\t\tnormalizeDroppedImagePrompt(prompt, this.session.allowedRoot),\n\t\t\t\tthis.session.allowedRoot,\n\t\t\t);\n\t\t\tthis.preserveClipboardFiles = true;\n\t\t\tthis.editor.setValue(\"\");\n\t\t\tconst result =\n\t\t\t\tretry && \"retry\" in this.session\n\t\t\t\t\t? await this.session.retry(this.activeAbort.signal)\n\t\t\t\t\t: await this.session.promptWithImages(input.text, input.images, this.activeAbort.signal);\n\t\t\tif (result.stopReason === \"error\" || result.stopReason === \"aborted\") this.lastFailedPrompt = prompt;\n\t\t\telse {\n\t\t\t\tthis.lastFailedPrompt = undefined;\n\t\t\t\tawait this.cleanupClipboardFiles();\n\t\t\t}\n\t\t} catch (cause) {\n\t\t\tthis.lastFailedPrompt = prompt;\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.preserveClipboardFiles = false;\n\t\t\tthis.promptInFlight = false;\n\t\t\tthis.activeAbort = undefined;\n\t\t\tthis.projection.setRetrying(false);\n\t\t\tconst next = this.queuedPrompts.shift();\n\t\t\tthis.refreshQueue();\n\t\t\tthis.root.invalidate();\n\t\t\tthis.tui.requestRender();\n\t\t\tif (next && this.started) void this.submit(next);\n\t\t}\n\t}\n\n\tprivate async submitSteering(text: string): Promise<void> {\n\t\tconst prompt = text.trim();\n\t\tif (prompt.length === 0) {\n\t\t\tthis.projection.setError(this.locale === \"zh-CN\" ? \"引导内容不能为空。\" : \"Steering content must not be empty.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"会话正在打开,请等待后再引导 Agent。\"\n\t\t\t\t\t: \"A session is opening; wait before steering the agent.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.compactionInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"正在压缩上下文,请等待后再引导 Agent。\"\n\t\t\t\t\t: \"A compaction is running; wait before steering the agent.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.promptInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"只能在提示词运行时引导 Agent。\"\n\t\t\t\t\t: \"Steering is only available while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst input = await extractImageAttachments(\n\t\t\t\tnormalizeDroppedImagePrompt(prompt, this.session.allowedRoot),\n\t\t\t\tthis.session.allowedRoot,\n\t\t\t);\n\t\t\tawait this.session.steerWithImages(input.text, input.images);\n\t\t\tthis.editor.setValue(\"\");\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate refreshQueue(): void {\n\t\tthis.projection.setQueue([\n\t\t\t...this.steeringPrompts.map((prompt) => `steer: ${prompt}`),\n\t\t\t...this.queuedPrompts.map((prompt) => `queued: ${prompt}`),\n\t\t]);\n\t}\n\n\tprivate async cleanupUnreferencedClipboardFiles(): Promise<void> {\n\t\tconst text = this.editor.getValue();\n\t\tconst files = [...this.clipboardFiles].filter((path) => !text.includes(path));\n\t\tawait Promise.all(files.map((path) => removeClipboardImage(path, this.clipboardDirectory)));\n\t\tfor (const path of files) this.clipboardFiles.delete(path);\n\t}\n\n\tprivate async cleanupClipboardFiles(): Promise<void> {\n\t\tconst files = [...this.clipboardFiles];\n\t\tawait Promise.all(files.map((path) => removeClipboardImage(path, this.clipboardDirectory)));\n\t\tfor (const path of files) this.clipboardFiles.delete(path);\n\t}\n\n\tprivate handleSlashCommand(input: string): void {\n\t\tconst trimmed = input.slice(1).trim();\n\t\tconst [rawCommand = \"\", ...argParts] = trimmed.split(/\\s+/);\n\t\tconst command = rawCommand.toLowerCase();\n\t\tconst args = argParts.join(\" \");\n\t\tif (this.commandRegistry?.list().some((entry) => entry.name === command)) {\n\t\t\tvoid this.commandRegistry\n\t\t\t\t.execute(command, {\n\t\t\t\t\thost: { runCommand: (name: string, value: string) => this.runRegisteredCommand(name, value) },\n\t\t\t\t\targs,\n\t\t\t\t})\n\t\t\t\t.catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.runRegisteredCommand(command, args);\n\t}\n\n\tprivate runRegisteredCommand(command: string, _args: string): number {\n\t\tswitch (command) {\n\t\t\tcase \"help\":\n\t\t\t\tthis.projection.setStatus(\n\t\t\t\t\t`commands: ${this.listSlashCommands()\n\t\t\t\t\t\t.map((item) => `/${item.name}`)\n\t\t\t\t\t\t.join(\" \")}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"clear\":\n\t\t\t\tthis.projection.clearVisibleMessages();\n\t\t\t\tthis.projection.setStatus(translate(this.locale, \"visibleMessagesCleared\"));\n\t\t\t\tbreak;\n\t\t\tcase \"model\":\n\t\t\t\tthis.openModelSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"session\":\n\t\t\t\tthis.openSessionSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"tree\":\n\t\t\t\tthis.openTreeSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"theme\":\n\t\t\t\tthis.openThemeSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"settings\":\n\t\t\t\tthis.openSettingsSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"login\":\n\t\t\t\tthis.openProviderLogin();\n\t\t\t\treturn 0;\n\t\t\tcase \"logout\":\n\t\t\t\tvoid this.logoutProvider();\n\t\t\t\treturn 0;\n\t\t\tcase \"compact\":\n\t\t\t\tvoid this.runManualCompaction();\n\t\t\t\treturn 0;\n\t\t\tcase \"usage\":\n\t\t\t\tthis.projection.setStatus(this.formatUsage());\n\t\t\t\tbreak;\n\t\t\tcase \"retry\":\n\t\t\t\tif (this.lastFailedPrompt && !this.promptInFlight) {\n\t\t\t\t\tif (this.context) void this.context.retry();\n\t\t\t\t\telse void this.submit(this.lastFailedPrompt, true);\n\t\t\t\t} else this.projection.setStatus(translate(this.locale, \"nothingToRetry\"));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.projection.setError(`Unknown command: /${command}`);\n\t\t}\n\t\tthis.refresh();\n\t\treturn 0;\n\t}\n\n\tprivate openProviderLogin(): void {\n\t\tif (!this.providerOnboarding) {\n\t\t\tthis.projection.setError(\"Provider login is unavailable in this session.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.promptInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\"Cannot change Provider while a prompt is running.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.editor.cancelAutocomplete();\n\t\tthis.closeAutocompleteOverlay();\n\t\tvoid showInteractiveProviderOnboarding({\n\t\t\t...this.providerOnboarding,\n\t\t\tconfiguration: { ...this.providerOnboarding.configuration, locale: this.locale },\n\t\t\ttui: this.tui,\n\t\t})\n\t\t\t.then((runtime) => {\n\t\t\t\tif (!this.started) return;\n\t\t\t\tthis.tui.setFocus(this.editor);\n\t\t\t\tif (!runtime) {\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.session.setRuntime(runtime.provider, runtime.model);\n\t\t\t\tthis.projection.setStatus(`provider=${runtime.provider.id} model=${runtime.model.id}`);\n\t\t\t\tthis.refresh();\n\t\t\t})\n\t\t\t.catch((cause) => {\n\t\t\t\tif (this.started) this.tui.setFocus(this.editor);\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\tthis.refresh();\n\t\t\t});\n\t}\n\n\tprivate async logoutProvider(): Promise<void> {\n\t\tif (!this.providerOnboarding) {\n\t\t\tthis.projection.setError(\"Provider logout is unavailable in this session.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.promptInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\"Cannot change Provider while a prompt is running.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst providerId = this.session.providerId;\n\t\ttry {\n\t\t\tconst removed = await removeGlobalProviderApiKey(this.providerOnboarding.agentDir, providerId);\n\t\t\tif (!removed) {\n\t\t\t\tthis.projection.setStatus(`no global API key stored for provider=${providerId}`);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.projection.setStatus(\n\t\t\t\t`global API key removed for provider=${providerId}; it remains active until this session ends`,\n\t\t\t);\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate listSlashCommands(): readonly SlashCommand[] {\n\t\tconst skills = this.session.availableSkills.map((skill) => ({\n\t\t\tname: `skill:${skill.name}`,\n\t\t\tdescription: skill.description,\n\t\t}));\n\t\tconst registryCommands = this.commandRegistry?.list().map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: typeof command.description === \"function\" ? command.description(this.locale) : command.description,\n\t\t}));\n\t\treturn [...(registryCommands ?? builtinSlashCommands(this.locale)), ...skills];\n\t}\n\n\tprivate isLoadedSkillCommand(input: string): boolean {\n\t\tconst name = /^\\/skill:([a-z0-9]+(?:-[a-z0-9]+)*)(?:\\s|$)/.exec(input)?.[1];\n\t\treturn name !== undefined && this.session.availableSkills.some((skill) => skill.name === name);\n\t}\n\n\tprivate formatUsage(): string {\n\t\tconst usage = this.session.usage;\n\t\tif (this.locale === \"zh-CN\") {\n\t\t\treturn `用量:请求=${usage.requestCount} 输入=${usage.inputTokens} 输出=${usage.outputTokens} 总计=${usage.totalTokens} 费用=$${usage.cost.total.toFixed(4)} 上下文=${usage.estimatedContextTokens}/${usage.contextWindow}`;\n\t\t}\n\t\treturn `usage: requests=${usage.requestCount} input=${usage.inputTokens} output=${usage.outputTokens} total=${usage.totalTokens} cost=$${usage.cost.total.toFixed(4)} context=${usage.estimatedContextTokens}/${usage.contextWindow}`;\n\t}\n\n\tprivate async runManualCompaction(): Promise<void> {\n\t\tif (this.promptInFlight || this.compactionInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\" ? \"提示词运行时不能压缩上下文。\" : \"Cannot compact while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.compactionInFlight = true;\n\t\tthis.projection.setStatus(translate(this.locale, \"manualCompactionStarting\"));\n\t\tthis.refresh();\n\t\ttry {\n\t\t\tawait this.session.compact();\n\t\t\tthis.projection.setStatus(translate(this.locale, \"manualCompactionComplete\"));\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.compactionInFlight = false;\n\t\t\tthis.refresh();\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/modes/interactive.ts"],"names":[],"mappings":"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","sourcesContent":["import { statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { extname, join, resolve } from \"node:path\";\nimport type { CommandRegistry, InteractiveContextService } from \"@di-code/builtins\";\nimport type { UserInteractionInput, UserInteractionResult } from \"@di-code/plugin-sdk\";\nimport {\n\ttype AutocompleteProvider,\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tEditor,\n\tKey,\n\tmatchesKey,\n\ttype OverlayHandle,\n\tSelectList,\n\tSettingsList,\n\ttype SlashCommand,\n\ttype TUI,\n} from \"@di-code/tui\";\nimport {\n\tcleanupStaleClipboardImages,\n\tclipboardImageDirectory,\n\tisClipboardImagePath,\n\treadClipboardImagePath,\n\tremoveClipboardImage,\n} from \"../core/clipboard-image.ts\";\nimport { extractImageAttachments } from \"../core/image-input.ts\";\nimport type { AgentSession, AgentSessionEvent } from \"../core/session.ts\";\nimport { DEFAULT_LOCALE, type Locale, translate } from \"../i18n.ts\";\nimport {\n\ttype InteractiveProviderOnboardingOptions,\n\tshowInteractiveProviderOnboarding,\n} from \"../provider-onboarding.ts\";\nimport type { SessionHostUi } from \"../runtime/session-host.ts\";\nimport {\n\tremoveGlobalProviderApiKey,\n\tsaveGlobalLocale,\n\tsaveGlobalModelSelection,\n\tsaveGlobalThinkingLevel,\n} from \"../startup.ts\";\nimport {\n\tAutocompleteMenu,\n\tInteractiveChat,\n\tInteractiveComposer,\n\tInteractiveFooter,\n\tInteractiveHeader,\n\ttype InteractiveViewState,\n} from \"./interactive-components.ts\";\nimport { InteractiveLayout } from \"./interactive-layout.ts\";\nimport { InteractiveProjection } from \"./interactive-state.ts\";\nimport { TreeSelector } from \"./tree-selector.ts\";\n\nexport type { AgentSessionEvent };\nexport type { InteractiveMessage, InteractiveProcessItem, InteractiveState } from \"./interactive-state.ts\";\nexport { InteractiveProjection } from \"./interactive-state.ts\";\n\nconst IMAGE_EXTENSIONS = new Set([\".gif\", \".jpeg\", \".jpg\", \".png\", \".webp\"]);\nconst PASTE_IMAGE_KEY = process.platform === \"win32\" ? Key.alt(\"v\") : Key.ctrl(\"v\");\nconst PASTE_IMAGE_SHORTCUT = process.platform === \"win32\" ? \"Alt+V\" : \"Ctrl+V\";\n\nfunction builtinSlashCommands(locale: Locale): readonly SlashCommand[] {\n\tconst t = (key: string) => translate(locale, key);\n\treturn [\n\t\t{ name: \"help\", description: t(\"showInteractiveCommands\") },\n\t\t{ name: \"clear\", description: t(\"clearVisibleMessages\") },\n\t\t{ name: \"model\", description: t(\"openModelSelector\") },\n\t\t{ name: \"session\", description: t(\"openSessionSelector\") },\n\t\t{ name: \"tree\", description: t(\"openTreeSelector\") },\n\t\t{ name: \"theme\", description: t(\"openThemeSelector\") },\n\t\t{ name: \"settings\", description: t(\"openSettingsSelector\") },\n\t\t{ name: \"login\", description: t(\"chooseProvider\") },\n\t\t{ name: \"logout\", description: t(\"removeProviderKey\") },\n\t\t{ name: \"compact\", description: t(\"compactContext\") },\n\t\t{ name: \"usage\", description: t(\"showUsage\") },\n\t\t{ name: \"retry\", description: t(\"retryPrompt\") },\n\t\t{ name: \"steer\", description: t(\"steerAgent\") },\n\t\t{ name: \"plan\", description: \"Enter or leave plan mode\" },\n\t];\n}\n\nfunction asImageAttachmentReference(pasted: string, cwd: string): string {\n\tif (pasted.includes(\"\\n\")) return pasted;\n\tconst candidate = pasted.trim().replace(/^(?:\"([\\s\\S]*)\"|'([\\s\\S]*)')$/, \"$1$2\");\n\tif (!candidate || !IMAGE_EXTENSIONS.has(extname(candidate).toLowerCase())) return pasted;\n\ttry {\n\t\tif (!statSync(resolve(cwd, candidate)).isFile()) return pasted;\n\t} catch {\n\t\treturn pasted;\n\t}\n\treturn `@\"${candidate.replaceAll('\"', '\\\\\"')}\" `;\n}\n\nfunction normalizeDroppedImagePrompt(prompt: string, cwd: string): string {\n\tconst normalized = asImageAttachmentReference(prompt, cwd);\n\tif (normalized !== prompt) return normalized;\n\tconst prefix = /^((?:(?:[A-Za-z]:[\\\\/])|(?:\\.\\.?[\\\\/])|\\/)[\\s\\S]*?\\.(?:gif|jpe?g|png|webp))([\\s\\S]*)$/i.exec(prompt);\n\tif (!prefix) return prompt;\n\tconst imageReference = asImageAttachmentReference(prefix[1] ?? \"\", cwd);\n\treturn imageReference === prefix[1]\n\t\t? prompt\n\t\t: `${imageReference}${normalizeDroppedImagePrompt(prefix[2] ?? \"\", cwd)}`;\n}\n\nfunction steeringCommandArgument(prompt: string): string | undefined {\n\tconst match = /^\\/steer(?:\\s+([\\s\\S]*))?$/i.exec(prompt);\n\treturn match ? (match[1] ?? \"\").trim() : undefined;\n}\n\nexport interface InteractiveModeOptions {\n\treadonly session: InteractiveSessionHandle;\n\treadonly tui: TUI;\n\treadonly onExit?: () => void;\n\treadonly sessions?: readonly InteractiveSessionChoice[];\n\treadonly providerOnboarding?: Omit<InteractiveProviderOnboardingOptions, \"tui\">;\n\t/** User data directory that owns clipboard image temporaries. */\n\treadonly agentDir?: string;\n\treadonly readClipboardImagePath?: (directory?: string) => Promise<string | null>;\n\treadonly locale?: Locale;\n\t/** Command contributions are resolved through the composition registry. */\n\treadonly commandRegistry?: CommandRegistry;\n\t/** Session controls and preferences are supplied by the active Context. */\n\treadonly context?: InteractiveContextService;\n}\n\nexport interface InteractiveSessionChoice {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly description?: string;\n\topen(): InteractiveSessionHandle | Promise<InteractiveSessionHandle>;\n}\n\nexport type InteractiveSessionHandle = AgentSession | SessionHostUi;\ntype PlanSessionHandle = {\n\treadonly planCommand: (args: string) => Promise<string>;\n\treadonly planMode: () => { readonly active: boolean; readonly pending: boolean } | undefined;\n};\n\ninterface ContextSessionChoice {\n\treadonly id: string;\n\treadonly label: string;\n\treadonly description?: string;\n\treadonly open: () => unknown | Promise<unknown>;\n}\n\nfunction isContextSessionChoice(value: unknown): value is ContextSessionChoice {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t\"id\" in value &&\n\t\ttypeof value.id === \"string\" &&\n\t\t\"label\" in value &&\n\t\ttypeof value.label === \"string\" &&\n\t\t\"open\" in value &&\n\t\ttypeof value.open === \"function\"\n\t);\n}\n\nexport class InteractiveMode {\n\tprivate readonly projection = new InteractiveProjection();\n\tprivate readonly root: InteractiveLayout;\n\tprivate readonly editor: Editor;\n\tprivate session: InteractiveSessionHandle;\n\tprivate readonly tui: TUI;\n\tprivate readonly sessionChoices: readonly InteractiveSessionChoice[];\n\tprivate readonly providerOnboarding?: Omit<InteractiveProviderOnboardingOptions, \"tui\">;\n\tprivate readonly agentDir: string;\n\tprivate readonly readClipboardImagePath: (directory?: string) => Promise<string | null>;\n\tprivate clipboardDirectory: string;\n\tprivate readonly clipboardFiles = new Set<string>();\n\tprivate unsubscribeSession?: () => void;\n\tprivate sessionSwitching = false;\n\tprivate promptInFlight = false;\n\tprivate compactionInFlight = false;\n\tprivate activeAbort?: AbortController;\n\tprivate started = false;\n\tprivate lastFailedPrompt?: string;\n\tprivate queuedPrompts: string[] = [];\n\tprivate steeringPrompts: string[] = [];\n\tprivate readonly onExit?: () => void;\n\tprivate theme: \"dark\" | \"light\" = \"dark\";\n\tprivate overlay?: OverlayHandle;\n\tprivate autocompleteOverlay?: OverlayHandle;\n\tprivate spinnerTimer?: ReturnType<typeof setInterval>;\n\tprivate preserveClipboardFiles = false;\n\tprivate locale: Locale;\n\tprivate readonly commandRegistry?: CommandRegistry;\n\tprivate readonly context?: InteractiveContextService;\n\n\tconstructor(options: InteractiveModeOptions) {\n\t\tthis.session = options.session;\n\t\tthis.projection.configureFilePreview(this.session.allowedRoot, () => this.refresh());\n\t\tthis.tui = options.tui;\n\t\tthis.onExit = options.onExit;\n\t\tconst contextChoices = (options.context?.sessionChoices() ?? []).filter(isContextSessionChoice).map((choice) => ({\n\t\t\t...choice,\n\t\t\topen: async () => {\n\t\t\t\tconst session = await choice.open();\n\t\t\t\tif (typeof session !== \"object\" || session === null) throw new Error(`Session choice ${choice.id} is invalid`);\n\t\t\t\treturn session as InteractiveSessionHandle;\n\t\t\t},\n\t\t}));\n\t\tthis.sessionChoices = [...(options.sessions ?? contextChoices)];\n\t\tthis.providerOnboarding = options.providerOnboarding;\n\t\tthis.agentDir = resolve(options.agentDir ?? join(homedir(), \".di-code\"));\n\t\tthis.locale = options.locale ?? DEFAULT_LOCALE;\n\t\tthis.commandRegistry = options.commandRegistry;\n\t\tthis.context = options.context;\n\t\tif (this.context?.theme() === \"light\") this.theme = \"light\";\n\t\tthis.readClipboardImagePath = options.readClipboardImagePath ?? readClipboardImagePath;\n\t\tthis.clipboardDirectory = clipboardImageDirectory(this.agentDir, this.session.allowedRoot);\n\t\tconst autocomplete: AutocompleteProvider = {\n\t\t\tgetSuggestions: (context, autocompleteOptions) =>\n\t\t\t\tnew CombinedAutocompleteProvider(this.listSlashCommands(), this.session.allowedRoot).getSuggestions(\n\t\t\t\t\tcontext,\n\t\t\t\t\tautocompleteOptions,\n\t\t\t\t),\n\t\t\tapplyCompletion: (context, item, prefix) =>\n\t\t\t\tnew CombinedAutocompleteProvider(this.listSlashCommands(), this.session.allowedRoot).applyCompletion(\n\t\t\t\t\tcontext,\n\t\t\t\t\titem,\n\t\t\t\t\tprefix,\n\t\t\t\t),\n\t\t};\n\t\tthis.editor = new Editor({\n\t\t\tmaxHeight: 3,\n\t\t\tautocomplete,\n\t\t\tsubmitAutocomplete: (context) => /^\\/[^\\s/]*$/.test(context.text.slice(0, context.cursor)),\n\t\t});\n\t\tthis.editor.onSubmit = (text) => void this.submit(text);\n\t\tthis.editor.onEscape = () => {\n\t\t\tif (!this.activeAbort) {\n\t\t\t\tthis.context?.cancel();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.projection.setStatus(translate(this.locale, \"cancelled\"));\n\t\t\tthis.context?.cancel();\n\t\t\tthis.activeAbort.abort();\n\t\t\tthis.refresh();\n\t\t};\n\t\tthis.editor.onCommand = (data) => this.handleCommand(data);\n\t\tthis.editor.onInterrupt = () => this.exit();\n\t\tthis.editor.onChange = () => {\n\t\t\tif (!this.preserveClipboardFiles) {\n\t\t\t\tvoid this.cleanupUnreferencedClipboardFiles().catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tthis.editor.onAutocompleteChange = () => this.updateAutocompleteOverlay();\n\t\tconst readViewState = (): InteractiveViewState => ({\n\t\t\t...this.projection.state,\n\t\t\tmodel: `${this.session.modelId}${this.session.thinkingLevel ? `(${this.session.thinkingLevel})` : \"\"}`,\n\t\t\ttheme: this.theme,\n\t\t\tlocale: this.locale,\n\t\t\tpasteImageShortcut: PASTE_IMAGE_SHORTCUT,\n\t\t\tplanMode: (this.session as InteractiveSessionHandle & Partial<PlanSessionHandle>).planMode?.(),\n\t\t});\n\t\tthis.root = new InteractiveLayout({\n\t\t\theader: new InteractiveHeader(readViewState),\n\t\t\tchat: new InteractiveChat(readViewState),\n\t\t\tcomposer: new InteractiveComposer(readViewState),\n\t\t\teditor: this.editor,\n\t\t\tfooter: new InteractiveFooter(readViewState),\n\t\t});\n\t\tthis.tui.addChild(this.root);\n\t\tthis.tui.setFocus(this.editor);\n\t}\n\n\tstart(initialPrompt?: string): void {\n\t\tif (this.started) throw new Error(\"Interactive mode is already started\");\n\t\tthis.started = true;\n\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\tthis.projection.setUsage(this.session.usage);\n\t\tthis.subscribeToSession();\n\t\tvoid cleanupStaleClipboardImages(this.agentDir, this.session.allowedRoot).catch((cause) => {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\tthis.refresh();\n\t\t});\n\t\ttry {\n\t\t\tthis.tui.start();\n\t\t} catch (cause) {\n\t\t\tthis.started = false;\n\t\t\tthis.unsubscribeSession?.();\n\t\t\tthis.unsubscribeSession = undefined;\n\t\t\tthrow cause;\n\t\t}\n\t\tthis.startSpinnerTimer();\n\t\tif (initialPrompt?.trim()) void this.submit(initialPrompt);\n\t}\n\n\tstop(): void {\n\t\tif (!this.started && !this.unsubscribeSession) return;\n\t\tthis.started = false;\n\t\tthis.activeAbort?.abort();\n\t\tthis.activeAbort = undefined;\n\t\tthis.stopSpinnerTimer();\n\t\tthis.projection.clearTransientProcess();\n\t\tthis.closeOverlay();\n\t\tthis.closeAutocompleteOverlay();\n\t\tthis.unsubscribeSession?.();\n\t\tthis.unsubscribeSession = undefined;\n\t\tvoid this.cleanupClipboardFiles();\n\t\tthis.tui.stop({ finalLines: this.root.renderTranscript(this.tui.columns) });\n\t}\n\n\t/** Cancels the active prompt without changing Session history. */\n\tcancelActivePrompt(): void {\n\t\tthis.activeAbort?.abort();\n\t}\n\n\t/** Re-submits the last failed prompt when the mode is idle. */\n\tretryLastPrompt(): void {\n\t\tif (this.lastFailedPrompt && !this.promptInFlight) void this.submit(this.lastFailedPrompt, true);\n\t}\n\n\tprivate exit(): void {\n\t\tthis.stop();\n\t\tthis.onExit?.();\n\t}\n\n\tprivate handleCommand(data: string): boolean {\n\t\tthis.context?.keybindings();\n\t\tif (matchesKey(data, Key.alt(\"p\"))) {\n\t\t\tvoid this.togglePlanMode();\n\t\t\treturn true;\n\t\t}\n\t\tif (matchesKey(data, Key.alt(\"s\"))) {\n\t\t\tvoid this.submitSteering(this.editor.getValue());\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x1b[Z\") {\n\t\t\ttry {\n\t\t\t\tconst level = this.session.cycleThinkingLevel();\n\t\t\t\tthis.projection.setStatus(level ? `thinking=${level}` : \"Current model does not support thinking levels.\");\n\t\t\t\tif (level) {\n\t\t\t\t\tvoid saveGlobalThinkingLevel(this.agentDir, this.session.providerId, this.session.modelId, level).catch(\n\t\t\t\t\t\t(cause) => {\n\t\t\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (cause) {\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x14\") {\n\t\t\tthis.openThemeSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x13\") {\n\t\t\tthis.openSettingsSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x0f\") {\n\t\t\tthis.openModelSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x0c\") {\n\t\t\tthis.openSessionSelector();\n\t\t\treturn true;\n\t\t}\n\t\tif (data === \"\\x12\" && this.lastFailedPrompt && !this.promptInFlight) {\n\t\t\tvoid this.submit(this.lastFailedPrompt, true);\n\t\t\treturn true;\n\t\t}\n\t\tif (matchesKey(data, PASTE_IMAGE_KEY)) {\n\t\t\tvoid this.attachClipboardImage();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate async togglePlanMode(): Promise<void> {\n\t\tconst planSession = this.session as InteractiveSessionHandle & Partial<PlanSessionHandle>;\n\t\tif (!planSession.planCommand || !planSession.planMode) {\n\t\t\tthis.projection.setError(\"Plan mode is unavailable in this session.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst projection = planSession.planMode();\n\t\t\tconst message = await planSession.planCommand(projection?.active ? \"off\" : \"\");\n\t\t\tthis.projection.setStatus(message);\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate async attachClipboardImage(): Promise<void> {\n\t\ttry {\n\t\t\tconst path = await this.readClipboardImagePath(this.clipboardDirectory);\n\t\t\tif (!path) {\n\t\t\t\tthis.projection.setStatus(\n\t\t\t\t\tthis.locale === \"zh-CN\" ? \"剪贴板中没有受支持的图片。\" : \"Clipboard has no supported image.\",\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.editor.insertTextAtCursor(path);\n\t\t\t\tif (isClipboardImagePath(path, this.clipboardDirectory)) this.clipboardFiles.add(path);\n\t\t\t}\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate openThemeSelector(): void {\n\t\tconst t = (key: string) => translate(this.locale, key);\n\t\tconst list = new SelectList([\n\t\t\t{ value: \"dark\", label: t(\"dark\"), description: t(\"darkTheme\") },\n\t\t\t{ value: \"light\", label: t(\"light\"), description: t(\"lightTheme\") },\n\t\t]);\n\t\tlist.onSelect = (item) => {\n\t\t\tthis.theme = item.value === \"light\" ? \"light\" : \"dark\";\n\t\t\tthis.context?.setTheme(this.theme);\n\t\t\tthis.projection.setStatus(`theme=${this.theme}`);\n\t\t\tthis.closeOverlay();\n\t\t\tthis.refresh();\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate openModelSelector(): void {\n\t\tconst list = new SelectList(\n\t\t\tthis.session.availableModels.map((model) => ({\n\t\t\t\tvalue: model.id,\n\t\t\t\tlabel: model.name,\n\t\t\t\tdescription: `${model.provider} / ${model.id} / context ${model.contextWindow}`,\n\t\t\t})),\n\t\t);\n\t\tlist.onSelect = (item) => {\n\t\t\ttry {\n\t\t\t\tthis.session.setModel(item.value);\n\t\t\t\tthis.projection.setStatus(`model=${item.value}`);\n\t\t\t\tvoid saveGlobalModelSelection(this.agentDir, this.session.providerId, this.session.modelId).catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tthis.refresh();\n\t\t\t} catch (cause) {\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t}\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate openSessionSelector(): void {\n\t\tconst t = (key: string) => translate(this.locale, key);\n\t\tconst list = new SelectList([\n\t\t\t{\n\t\t\t\tvalue: \"__current__\",\n\t\t\t\tlabel: t(\"currentSession\"),\n\t\t\t\tdescription: this.session.sessionFile ?? t(\"inMemorySession\"),\n\t\t\t},\n\t\t\t...this.sessionChoices.map((choice) => ({\n\t\t\t\tvalue: choice.id,\n\t\t\t\tlabel: choice.label,\n\t\t\t\t...(choice.description ? { description: choice.description } : {}),\n\t\t\t})),\n\t\t]);\n\t\tlist.onSelect = (item) => {\n\t\t\tif (item.value === \"__current__\") {\n\t\t\t\tthis.projection.setStatus(\"session=current\");\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst choice = this.sessionChoices.find((candidate) => candidate.id === item.value);\n\t\t\tif (!choice) return;\n\t\t\tthis.closeOverlay();\n\t\t\tvoid this.switchSession(choice);\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate openTreeSelector(): void {\n\t\tif (this.promptInFlight || this.compactionInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"提示词运行时不能浏览会话树。\"\n\t\t\t\t\t: \"Cannot browse the session tree while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.sessionTree.length === 0) {\n\t\t\tthis.projection.setStatus(\n\t\t\t\tthis.locale === \"zh-CN\" ? \"当前会话还没有历史节点。\" : \"The current session has no history nodes.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst selector = new TreeSelector({\n\t\t\tnodes: this.session.sessionTree,\n\t\t\tleafId: this.session.sessionLeafId,\n\t\t\tlocale: this.locale,\n\t\t\tonContinue: (entry) => {\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tvoid this.navigateTreeEntry(entry.id);\n\t\t\t},\n\t\t\tonEdit: (entry) => {\n\t\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"user\") {\n\t\t\t\t\tthis.projection.setError(\n\t\t\t\t\t\tthis.locale === \"zh-CN\" ? \"只能编辑历史用户消息。\" : \"Only historical user messages can be edited.\",\n\t\t\t\t\t);\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tvoid this.navigateTreeEntry(entry.id);\n\t\t\t},\n\t\t\tonSummarize: (entry) => {\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tvoid this.summarizeTreeBranch(entry.id);\n\t\t\t},\n\t\t\tonCancel: () => this.closeOverlay(),\n\t\t});\n\t\tthis.showOverlay(selector, true, \"80%\");\n\t}\n\n\tprivate async navigateTreeEntry(entryId: string): Promise<boolean> {\n\t\ttry {\n\t\t\tconst result = await this.session.navigateTree(entryId);\n\t\t\tif (!this.started) return false;\n\t\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\t\tthis.editor.setValue(result.editorText ?? \"\");\n\t\t\tthis.projection.setStatus(\n\t\t\t\tresult.imagesOmitted\n\t\t\t\t\t? this.locale === \"zh-CN\"\n\t\t\t\t\t\t? \"已恢复文本;请重新附加图片。\"\n\t\t\t\t\t\t: \"Text restored; reattach images before sending.\"\n\t\t\t\t\t: `tree=${result.selectedEntryId}`,\n\t\t\t);\n\t\t\treturn true;\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tprivate async summarizeTreeBranch(entryId: string): Promise<void> {\n\t\tif (this.compactionInFlight || this.promptInFlight) return;\n\t\tthis.compactionInFlight = true;\n\t\tthis.projection.setStatus(this.locale === \"zh-CN\" ? \"正在为分支生成摘要。\" : \"Summarizing selected branch.\");\n\t\tthis.refresh();\n\t\ttry {\n\t\t\tif (!(await this.navigateTreeEntry(entryId))) return;\n\t\t\tawait this.session.compact();\n\t\t\tthis.editor.setValue(\"\");\n\t\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\t\tthis.projection.setStatus(this.locale === \"zh-CN\" ? \"摘要分支已创建。\" : \"Summary branch created.\");\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.compactionInFlight = false;\n\t\t\tthis.refresh();\n\t\t}\n\t}\n\n\tprivate openSettingsSelector(): void {\n\t\tconst t = (key: string) => translate(this.locale, key);\n\t\tconst list = new SettingsList(\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tid: \"compaction\",\n\t\t\t\t\tlabel: t(\"contextCompaction\"),\n\t\t\t\t\tcurrentValue: this.session.compactionEnabled ? t(\"on\") : t(\"off\"),\n\t\t\t\t\tvalues: [t(\"on\"), t(\"off\")],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"locale\",\n\t\t\t\t\tlabel: t(\"language\"),\n\t\t\t\t\tcurrentValue: this.locale,\n\t\t\t\t\tvalues: [\"en\", \"zh-CN\"],\n\t\t\t\t},\n\t\t\t],\n\t\t\t{ title: t(\"settings\") },\n\t\t);\n\t\tlist.onChange = (id, value) => {\n\t\t\tif (id === \"locale\") {\n\t\t\t\tthis.locale = value === \"zh-CN\" ? \"zh-CN\" : \"en\";\n\t\t\t\tvoid saveGlobalLocale(this.agentDir, this.locale).catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tthis.openSettingsSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (id !== \"compaction\") return;\n\t\t\ttry {\n\t\t\t\tconst enabled = this.session.setCompactionEnabled(value === t(\"on\"));\n\t\t\t\tlist.updateValue(id, enabled ? t(\"on\") : t(\"off\"));\n\t\t\t\tthis.projection.setStatus(\n\t\t\t\t\tenabled === (value === t(\"on\")) ? `compaction=${enabled ? t(\"on\") : t(\"off\")}` : t(\"compactionUnavailable\"),\n\t\t\t\t);\n\t\t\t} catch (cause) {\n\t\t\t\tlist.updateValue(id, this.session.compactionEnabled ? t(\"on\") : t(\"off\"));\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\tthis.closeOverlay();\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t};\n\t\tlist.onCancel = () => this.closeOverlay();\n\t\tthis.showOverlay(list);\n\t}\n\n\tprivate showOverlay(component: Component, preserveLastLine = false, maxHeight: \"60%\" | \"80%\" = \"60%\"): void {\n\t\tthis.editor.cancelAutocomplete();\n\t\tthis.closeAutocompleteOverlay();\n\t\tthis.closeOverlay();\n\t\tthis.overlay = this.tui.showOverlay(component, {\n\t\t\twidth: \"70%\",\n\t\t\tmaxHeight,\n\t\t\tanchor: \"center\",\n\t\t\tmargin: 1,\n\t\t\tpreserveLastLine,\n\t\t});\n\t}\n\n\tprivate closeOverlay(): void {\n\t\tthis.overlay?.hide();\n\t\tthis.overlay = undefined;\n\t}\n\n\t/** Presents a structured choice for the host UserInteraction bridge. */\n\tasync requestInteraction(input: UserInteractionInput, signal?: AbortSignal): Promise<UserInteractionResult> {\n\t\tconst options = input.options ?? [];\n\t\tif (options.length === 0) return { requestId: input.requestId, toolCallId: input.toolCallId, status: \"cancelled\" };\n\t\treturn await new Promise<UserInteractionResult>((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (result: UserInteractionResult): void => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tsignal?.removeEventListener(\"abort\", abort);\n\t\t\t\tthis.closeOverlay();\n\t\t\t\tresolve(result);\n\t\t\t};\n\t\t\tconst abort = (): void =>\n\t\t\t\tfinish({ requestId: input.requestId, toolCallId: input.toolCallId, status: \"cancelled\" });\n\t\t\tconst list = new SelectList(\n\t\t\t\toptions.map((option) => ({ value: option.value, label: option.label, description: input.prompt })),\n\t\t\t);\n\t\t\tlist.onSelect = (item) =>\n\t\t\t\tfinish({ requestId: input.requestId, toolCallId: input.toolCallId, status: \"answered\", value: item.value });\n\t\t\tlist.onCancel = abort;\n\t\t\tif (signal?.aborted) {\n\t\t\t\tabort();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsignal?.addEventListener(\"abort\", abort, { once: true });\n\t\t\tthis.showOverlay(list, true);\n\t\t});\n\t}\n\n\tprivate updateAutocompleteOverlay(): void {\n\t\tthis.closeAutocompleteOverlay();\n\t\tif (!this.editor.isShowingAutocomplete()) {\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst menu = new AutocompleteMenu(() => ({\n\t\t\titems: this.editor.getAutocompleteItems(),\n\t\t\tindex: this.editor.getAutocompleteIndex(),\n\t\t}));\n\t\tconst editorBounds = this.root.getEditorBounds(this.tui.columns);\n\t\tthis.autocompleteOverlay = this.tui.showOverlay(menu, {\n\t\t\twidth: \"55%\",\n\t\t\tmaxHeight: 9,\n\t\t\tanchor: \"bottom-left\",\n\t\t\tplacement: {\n\t\t\t\tanchorRow: editorBounds.end - 1,\n\t\t\t\tavoidStartRow: editorBounds.start,\n\t\t\t\tpreferred: \"below\",\n\t\t\t},\n\t\t\tmargin: 1,\n\t\t\tpreserveLastLine: true,\n\t\t\tnonCapturing: true,\n\t\t});\n\t\tthis.refresh();\n\t}\n\n\tprivate closeAutocompleteOverlay(): void {\n\t\tthis.autocompleteOverlay?.hide();\n\t\tthis.autocompleteOverlay = undefined;\n\t}\n\n\tprivate refresh(): void {\n\t\tthis.root.invalidate();\n\t\tthis.tui.requestRender();\n\t}\n\n\tprivate startSpinnerTimer(): void {\n\t\tthis.stopSpinnerTimer();\n\t\tthis.spinnerTimer = setInterval(() => {\n\t\t\tif (this.projection.advanceSpinner()) this.refresh();\n\t\t}, 120);\n\t\tthis.spinnerTimer.unref?.();\n\t}\n\n\tprivate stopSpinnerTimer(): void {\n\t\tif (this.spinnerTimer) clearInterval(this.spinnerTimer);\n\t\tthis.spinnerTimer = undefined;\n\t}\n\n\tprivate subscribeToSession(): void {\n\t\tthis.unsubscribeSession?.();\n\t\tthis.unsubscribeSession = this.session.subscribeSession((event) => {\n\t\t\tif (!this.started) return;\n\t\t\tif (event.type === \"tree_navigated\") {\n\t\t\t\tthis.projection.replaceTranscript(this.session.transcript);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"queue_update\") {\n\t\t\t\tthis.steeringPrompts = [...event.steering];\n\t\t\t\tthis.refreshQueue();\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.projection.apply(event);\n\t\t\tthis.refresh();\n\t\t});\n\t}\n\n\tprivate async switchSession(choice: InteractiveSessionChoice): Promise<void> {\n\t\tif (this.promptInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\" ? \"提示词运行时不能切换会话。\" : \"Cannot switch sessions while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.sessionSwitching = true;\n\t\tthis.projection.setStatus(`opening session=${choice.id}`);\n\t\tthis.refresh();\n\t\ttry {\n\t\t\tconst next = await choice.open();\n\t\t\tif (!this.started) return;\n\t\t\tthis.unsubscribeSession?.();\n\t\t\tthis.session = next;\n\t\t\tthis.projection.configureFilePreview(next.allowedRoot, () => this.refresh());\n\t\t\tthis.clipboardDirectory = clipboardImageDirectory(this.agentDir, next.allowedRoot);\n\t\t\tvoid cleanupStaleClipboardImages(this.agentDir, next.allowedRoot);\n\t\t\tthis.queuedPrompts = [];\n\t\t\tthis.steeringPrompts = [];\n\t\t\tthis.refreshQueue();\n\t\t\tthis.projection.replaceTranscript(next.transcript);\n\t\t\tthis.projection.setUsage(next.usage);\n\t\t\tthis.projection.setStatus(`session=${choice.id}`);\n\t\t\tthis.subscribeToSession();\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.sessionSwitching = false;\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate async submit(text: string, retry = false): Promise<void> {\n\t\tconst prompt = text.trim();\n\t\tif (prompt.length === 0 || !this.started) return;\n\t\tconst steeringArgument = steeringCommandArgument(prompt);\n\t\tif (steeringArgument !== undefined) {\n\t\t\tawait this.submitSteering(steeringArgument);\n\t\t\treturn;\n\t\t}\n\t\tif (prompt.startsWith(\"/\") && !this.isLoadedSkillCommand(prompt)) {\n\t\t\tthis.editor.setValue(\"\");\n\t\t\tthis.handleSlashCommand(prompt);\n\t\t\treturn;\n\t\t}\n\t\tif (this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"会话正在打开,请等待后再提交提示词。\"\n\t\t\t\t\t: \"A session is opening; wait before submitting a prompt.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.compactionInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"正在压缩上下文,请等待后再提交提示词。\"\n\t\t\t\t\t: \"A compaction is running; wait before submitting a prompt.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.promptInFlight) {\n\t\t\tthis.queuedPrompts.push(prompt);\n\t\t\tthis.refreshQueue();\n\t\t\tthis.root.invalidate();\n\t\t\tthis.tui.requestRender();\n\t\t\treturn;\n\t\t}\n\t\tthis.promptInFlight = true;\n\t\tthis.activeAbort = new AbortController();\n\t\tthis.projection.setRetrying(retry);\n\t\ttry {\n\t\t\tconst input = await extractImageAttachments(\n\t\t\t\tnormalizeDroppedImagePrompt(prompt, this.session.allowedRoot),\n\t\t\t\tthis.session.allowedRoot,\n\t\t\t);\n\t\t\tthis.preserveClipboardFiles = true;\n\t\t\tthis.editor.setValue(\"\");\n\t\t\tconst result =\n\t\t\t\tretry && \"retry\" in this.session\n\t\t\t\t\t? await this.session.retry(this.activeAbort.signal)\n\t\t\t\t\t: await this.session.promptWithImages(input.text, input.images, this.activeAbort.signal);\n\t\t\tif (result.stopReason === \"error\" || result.stopReason === \"aborted\") this.lastFailedPrompt = prompt;\n\t\t\telse {\n\t\t\t\tthis.lastFailedPrompt = undefined;\n\t\t\t\tawait this.cleanupClipboardFiles();\n\t\t\t}\n\t\t} catch (cause) {\n\t\t\tthis.lastFailedPrompt = prompt;\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.preserveClipboardFiles = false;\n\t\t\tthis.promptInFlight = false;\n\t\t\tthis.activeAbort = undefined;\n\t\t\tthis.projection.setRetrying(false);\n\t\t\tconst next = this.queuedPrompts.shift();\n\t\t\tthis.refreshQueue();\n\t\t\tthis.root.invalidate();\n\t\t\tthis.tui.requestRender();\n\t\t\tif (next && this.started) void this.submit(next);\n\t\t}\n\t}\n\n\tprivate async submitSteering(text: string): Promise<void> {\n\t\tconst prompt = text.trim();\n\t\tif (prompt.length === 0) {\n\t\t\tthis.projection.setError(this.locale === \"zh-CN\" ? \"引导内容不能为空。\" : \"Steering content must not be empty.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.sessionSwitching) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"会话正在打开,请等待后再引导 Agent。\"\n\t\t\t\t\t: \"A session is opening; wait before steering the agent.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.compactionInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"正在压缩上下文,请等待后再引导 Agent。\"\n\t\t\t\t\t: \"A compaction is running; wait before steering the agent.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (!this.promptInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\"\n\t\t\t\t\t? \"只能在提示词运行时引导 Agent。\"\n\t\t\t\t\t: \"Steering is only available while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst input = await extractImageAttachments(\n\t\t\t\tnormalizeDroppedImagePrompt(prompt, this.session.allowedRoot),\n\t\t\t\tthis.session.allowedRoot,\n\t\t\t);\n\t\t\tawait this.session.steerWithImages(input.text, input.images);\n\t\t\tthis.editor.setValue(\"\");\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate refreshQueue(): void {\n\t\tthis.projection.setQueue([\n\t\t\t...this.steeringPrompts.map((prompt) => `steer: ${prompt}`),\n\t\t\t...this.queuedPrompts.map((prompt) => `queued: ${prompt}`),\n\t\t]);\n\t}\n\n\tprivate async cleanupUnreferencedClipboardFiles(): Promise<void> {\n\t\tconst text = this.editor.getValue();\n\t\tconst files = [...this.clipboardFiles].filter((path) => !text.includes(path));\n\t\tawait Promise.all(files.map((path) => removeClipboardImage(path, this.clipboardDirectory)));\n\t\tfor (const path of files) this.clipboardFiles.delete(path);\n\t}\n\n\tprivate async cleanupClipboardFiles(): Promise<void> {\n\t\tconst files = [...this.clipboardFiles];\n\t\tawait Promise.all(files.map((path) => removeClipboardImage(path, this.clipboardDirectory)));\n\t\tfor (const path of files) this.clipboardFiles.delete(path);\n\t}\n\n\tprivate handleSlashCommand(input: string): void {\n\t\tconst trimmed = input.slice(1).trim();\n\t\tconst [rawCommand = \"\", ...argParts] = trimmed.split(/\\s+/);\n\t\tconst command = rawCommand.toLowerCase();\n\t\tconst args = argParts.join(\" \");\n\t\tif (this.commandRegistry?.list().some((entry) => entry.name === command)) {\n\t\t\tvoid this.commandRegistry\n\t\t\t\t.execute(command, {\n\t\t\t\t\thost: { runCommand: (name: string, value: string) => this.runRegisteredCommand(name, value) },\n\t\t\t\t\targs,\n\t\t\t\t})\n\t\t\t\t.catch((cause) => {\n\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\tthis.refresh();\n\t\t\t\t});\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.runRegisteredCommand(command, args);\n\t}\n\n\tprivate runRegisteredCommand(command: string, _args: string): number {\n\t\tswitch (command) {\n\t\t\tcase \"help\":\n\t\t\t\tthis.projection.setStatus(\n\t\t\t\t\t`commands: ${this.listSlashCommands()\n\t\t\t\t\t\t.map((item) => `/${item.name}`)\n\t\t\t\t\t\t.join(\" \")}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"clear\":\n\t\t\t\tthis.projection.clearVisibleMessages();\n\t\t\t\tthis.projection.setStatus(translate(this.locale, \"visibleMessagesCleared\"));\n\t\t\t\tbreak;\n\t\t\tcase \"model\":\n\t\t\t\tthis.openModelSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"session\":\n\t\t\t\tthis.openSessionSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"tree\":\n\t\t\t\tthis.openTreeSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"theme\":\n\t\t\t\tthis.openThemeSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"settings\":\n\t\t\t\tthis.openSettingsSelector();\n\t\t\t\treturn 0;\n\t\t\tcase \"login\":\n\t\t\t\tthis.openProviderLogin();\n\t\t\t\treturn 0;\n\t\t\tcase \"logout\":\n\t\t\t\tvoid this.logoutProvider();\n\t\t\t\treturn 0;\n\t\t\tcase \"compact\":\n\t\t\t\tvoid this.runManualCompaction();\n\t\t\t\treturn 0;\n\t\t\tcase \"usage\":\n\t\t\t\tthis.projection.setStatus(this.formatUsage());\n\t\t\t\tbreak;\n\t\t\tcase \"retry\":\n\t\t\t\tif (this.lastFailedPrompt && !this.promptInFlight) {\n\t\t\t\t\tif (this.context) void this.context.retry();\n\t\t\t\t\telse void this.submit(this.lastFailedPrompt, true);\n\t\t\t\t} else this.projection.setStatus(translate(this.locale, \"nothingToRetry\"));\n\t\t\t\tbreak;\n\t\t\tcase \"plan\":\n\t\t\t\t{\n\t\t\t\t\tconst planSession = this.session as InteractiveSessionHandle & Partial<PlanSessionHandle>;\n\t\t\t\t\tif (!planSession.planCommand || !planSession.planMode) {\n\t\t\t\t\t\tthis.projection.setError(\"Plan mode is unavailable in this session.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvoid planSession\n\t\t\t\t\t\t.planCommand(_args)\n\t\t\t\t\t\t.then((message) => {\n\t\t\t\t\t\t\tthis.projection.setStatus(`${message}${planSession.planMode?.()?.active ? \" [plan]\" : \"\"}`);\n\t\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((cause) => {\n\t\t\t\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\tdefault:\n\t\t\t\tthis.projection.setError(`Unknown command: /${command}`);\n\t\t}\n\t\tthis.refresh();\n\t\treturn 0;\n\t}\n\n\tprivate openProviderLogin(): void {\n\t\tif (!this.providerOnboarding) {\n\t\t\tthis.projection.setError(\"Provider login is unavailable in this session.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.promptInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\"Cannot change Provider while a prompt is running.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.editor.cancelAutocomplete();\n\t\tthis.closeAutocompleteOverlay();\n\t\tvoid showInteractiveProviderOnboarding({\n\t\t\t...this.providerOnboarding,\n\t\t\tconfiguration: { ...this.providerOnboarding.configuration, locale: this.locale },\n\t\t\ttui: this.tui,\n\t\t})\n\t\t\t.then((runtime) => {\n\t\t\t\tif (!this.started) return;\n\t\t\t\tthis.tui.setFocus(this.editor);\n\t\t\t\tif (!runtime) {\n\t\t\t\t\tthis.refresh();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.session.setRuntime(runtime.provider, runtime.model);\n\t\t\t\tthis.projection.setStatus(`provider=${runtime.provider.id} model=${runtime.model.id}`);\n\t\t\t\tthis.refresh();\n\t\t\t})\n\t\t\t.catch((cause) => {\n\t\t\t\tif (this.started) this.tui.setFocus(this.editor);\n\t\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t\t\tthis.refresh();\n\t\t\t});\n\t}\n\n\tprivate async logoutProvider(): Promise<void> {\n\t\tif (!this.providerOnboarding) {\n\t\t\tthis.projection.setError(\"Provider logout is unavailable in this session.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tif (this.promptInFlight || this.sessionSwitching) {\n\t\t\tthis.projection.setError(\"Cannot change Provider while a prompt is running.\");\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tconst providerId = this.session.providerId;\n\t\ttry {\n\t\t\tconst removed = await removeGlobalProviderApiKey(this.providerOnboarding.agentDir, providerId);\n\t\t\tif (!removed) {\n\t\t\t\tthis.projection.setStatus(`no global API key stored for provider=${providerId}`);\n\t\t\t\tthis.refresh();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.projection.setStatus(\n\t\t\t\t`global API key removed for provider=${providerId}; it remains active until this session ends`,\n\t\t\t);\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t}\n\t\tthis.refresh();\n\t}\n\n\tprivate listSlashCommands(): readonly SlashCommand[] {\n\t\tconst skills = this.session.availableSkills.map((skill) => ({\n\t\t\tname: `skill:${skill.name}`,\n\t\t\tdescription: skill.description,\n\t\t}));\n\t\tconst registryCommands = this.commandRegistry?.list().map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: typeof command.description === \"function\" ? command.description(this.locale) : command.description,\n\t\t}));\n\t\treturn [...(registryCommands ?? builtinSlashCommands(this.locale)), ...skills];\n\t}\n\n\tprivate isLoadedSkillCommand(input: string): boolean {\n\t\tconst name = /^\\/skill:([a-z0-9]+(?:-[a-z0-9]+)*)(?:\\s|$)/.exec(input)?.[1];\n\t\treturn name !== undefined && this.session.availableSkills.some((skill) => skill.name === name);\n\t}\n\n\tprivate formatUsage(): string {\n\t\tconst usage = this.session.usage;\n\t\tif (this.locale === \"zh-CN\") {\n\t\t\treturn `用量:请求=${usage.requestCount} 输入=${usage.inputTokens} 输出=${usage.outputTokens} 总计=${usage.totalTokens} 费用=$${usage.cost.total.toFixed(4)} 上下文=${usage.estimatedContextTokens}/${usage.contextWindow}`;\n\t\t}\n\t\treturn `usage: requests=${usage.requestCount} input=${usage.inputTokens} output=${usage.outputTokens} total=${usage.totalTokens} cost=$${usage.cost.total.toFixed(4)} context=${usage.estimatedContextTokens}/${usage.contextWindow}`;\n\t}\n\n\tprivate async runManualCompaction(): Promise<void> {\n\t\tif (this.promptInFlight || this.compactionInFlight) {\n\t\t\tthis.projection.setError(\n\t\t\t\tthis.locale === \"zh-CN\" ? \"提示词运行时不能压缩上下文。\" : \"Cannot compact while a prompt is running.\",\n\t\t\t);\n\t\t\tthis.refresh();\n\t\t\treturn;\n\t\t}\n\t\tthis.compactionInFlight = true;\n\t\tthis.projection.setStatus(translate(this.locale, \"manualCompactionStarting\"));\n\t\tthis.refresh();\n\t\ttry {\n\t\t\tawait this.session.compact();\n\t\t\tthis.projection.setStatus(translate(this.locale, \"manualCompactionComplete\"));\n\t\t} catch (cause) {\n\t\t\tthis.projection.setError(cause instanceof Error ? cause.message : String(cause));\n\t\t} finally {\n\t\t\tthis.compactionInFlight = false;\n\t\t\tthis.refresh();\n\t\t}\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tree-selector.d.ts","sourceRoot":"","sources":["../../src/modes/tree-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAmC,MAAM,cAAc,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,YAAY,CAAC;AAyBpD,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,IAAI,IAAI,CAAC;CAClB;AAwFD,oHAAoH;AACpH,qBAAa,YAAa,YAAW,SAAS,EAAE,SAAS;IACxD,OAAO,UAAS;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAK;gBAEd,OAAO,EAAE,mBAAmB;IAOxC,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAwB/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwB/B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,MAAM;CAOd"}
1
+ {"version":3,"file":"tree-selector.d.ts","sourceRoot":"","sources":["../../src/modes/tree-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAmC,MAAM,cAAc,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,YAAY,CAAC;AAyBpD,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACnC,WAAW,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,IAAI,IAAI,CAAC;CAClB;AAyFD,oHAAoH;AACpH,qBAAa,YAAa,YAAW,SAAS,EAAE,SAAS;IACxD,OAAO,UAAS;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAK;gBAEd,OAAO,EAAE,mBAAmB;IAOxC,UAAU,IAAI,IAAI;IAElB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAwB/B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwB/B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,MAAM;CAOd"}
@@ -22,6 +22,8 @@ function textContent(entry) {
22
22
  return singleLine(entry.summary);
23
23
  if (entry.type === "plugin")
24
24
  return singleLine(`plugin:${entry.pluginId}`);
25
+ if (entry.type === "event")
26
+ return singleLine(`event:${entry.namespace}:${entry.eventName}`);
25
27
  return singleLine(entry.message.content.map((content) => (content.type === "text" ? content.text : "")).join(" "));
26
28
  }
27
29
  function flattenTree(nodes, leafId) {
@@ -170,6 +172,8 @@ export class TreeSelector {
170
172
  return `${paint(YELLOW, "summary: ")}${text || paint(DIM, "(empty)")}`;
171
173
  if (entry.type === "plugin")
172
174
  return `${paint(DIM, "plugin: ")}${text || paint(DIM, "(empty)")}`;
175
+ if (entry.type === "event")
176
+ return `${paint(DIM, "event: ")}${text || paint(DIM, "(empty)")}`;
173
177
  if (entry.message.role === "user")
174
178
  return `${paint(CYAN, "user: ")}${text || paint(DIM, "(empty)")}`;
175
179
  if (entry.message.role === "assistant") {