iosm-cli 0.1.2 → 0.2.0

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 (103) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/README.md +37 -3
  3. package/dist/cli/args.d.ts.map +1 -1
  4. package/dist/cli/args.js +4 -2
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/core/agent-profiles.d.ts.map +1 -1
  7. package/dist/core/agent-profiles.js +1 -0
  8. package/dist/core/agent-profiles.js.map +1 -1
  9. package/dist/core/agent-session.d.ts.map +1 -1
  10. package/dist/core/agent-session.js +3 -0
  11. package/dist/core/agent-session.js.map +1 -1
  12. package/dist/core/blast.d.ts +62 -0
  13. package/dist/core/blast.d.ts.map +1 -0
  14. package/dist/core/blast.js +448 -0
  15. package/dist/core/blast.js.map +1 -0
  16. package/dist/core/contract.d.ts +54 -0
  17. package/dist/core/contract.d.ts.map +1 -0
  18. package/dist/core/contract.js +300 -0
  19. package/dist/core/contract.js.map +1 -0
  20. package/dist/core/sdk.d.ts +3 -3
  21. package/dist/core/sdk.d.ts.map +1 -1
  22. package/dist/core/sdk.js +11 -19
  23. package/dist/core/sdk.js.map +1 -1
  24. package/dist/core/semantic/chunking.d.ts +10 -0
  25. package/dist/core/semantic/chunking.d.ts.map +1 -0
  26. package/dist/core/semantic/chunking.js +82 -0
  27. package/dist/core/semantic/chunking.js.map +1 -0
  28. package/dist/core/semantic/cli.d.ts +23 -0
  29. package/dist/core/semantic/cli.d.ts.map +1 -0
  30. package/dist/core/semantic/cli.js +86 -0
  31. package/dist/core/semantic/cli.js.map +1 -0
  32. package/dist/core/semantic/config.d.ts +8 -0
  33. package/dist/core/semantic/config.d.ts.map +1 -0
  34. package/dist/core/semantic/config.js +266 -0
  35. package/dist/core/semantic/config.js.map +1 -0
  36. package/dist/core/semantic/index-store.d.ts +21 -0
  37. package/dist/core/semantic/index-store.d.ts.map +1 -0
  38. package/dist/core/semantic/index-store.js +73 -0
  39. package/dist/core/semantic/index-store.js.map +1 -0
  40. package/dist/core/semantic/index.d.ts +8 -0
  41. package/dist/core/semantic/index.d.ts.map +1 -0
  42. package/dist/core/semantic/index.js +7 -0
  43. package/dist/core/semantic/index.js.map +1 -0
  44. package/dist/core/semantic/providers.d.ts +22 -0
  45. package/dist/core/semantic/providers.d.ts.map +1 -0
  46. package/dist/core/semantic/providers.js +317 -0
  47. package/dist/core/semantic/providers.js.map +1 -0
  48. package/dist/core/semantic/runtime.d.ts +32 -0
  49. package/dist/core/semantic/runtime.d.ts.map +1 -0
  50. package/dist/core/semantic/runtime.js +510 -0
  51. package/dist/core/semantic/runtime.js.map +1 -0
  52. package/dist/core/semantic/types.d.ts +157 -0
  53. package/dist/core/semantic/types.d.ts.map +1 -0
  54. package/dist/core/semantic/types.js +23 -0
  55. package/dist/core/semantic/types.js.map +1 -0
  56. package/dist/core/shadow-guard.d.ts +30 -0
  57. package/dist/core/shadow-guard.d.ts.map +1 -0
  58. package/dist/core/shadow-guard.js +81 -0
  59. package/dist/core/shadow-guard.js.map +1 -0
  60. package/dist/core/singular.d.ts +73 -0
  61. package/dist/core/singular.d.ts.map +1 -0
  62. package/dist/core/singular.js +413 -0
  63. package/dist/core/singular.js.map +1 -0
  64. package/dist/core/slash-commands.d.ts.map +1 -1
  65. package/dist/core/slash-commands.js +12 -0
  66. package/dist/core/slash-commands.js.map +1 -1
  67. package/dist/core/system-prompt.d.ts.map +1 -1
  68. package/dist/core/system-prompt.js +21 -3
  69. package/dist/core/system-prompt.js.map +1 -1
  70. package/dist/core/tools/ast-grep.js +1 -1
  71. package/dist/core/tools/ast-grep.js.map +1 -1
  72. package/dist/core/tools/comby.js +1 -1
  73. package/dist/core/tools/comby.js.map +1 -1
  74. package/dist/core/tools/index.d.ts +9 -0
  75. package/dist/core/tools/index.d.ts.map +1 -1
  76. package/dist/core/tools/index.js +6 -0
  77. package/dist/core/tools/index.js.map +1 -1
  78. package/dist/core/tools/rg.js +1 -1
  79. package/dist/core/tools/rg.js.map +1 -1
  80. package/dist/core/tools/semantic-search.d.ts +21 -0
  81. package/dist/core/tools/semantic-search.d.ts.map +1 -0
  82. package/dist/core/tools/semantic-search.js +123 -0
  83. package/dist/core/tools/semantic-search.js.map +1 -0
  84. package/dist/index.d.ts +4 -2
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +3 -2
  87. package/dist/index.js.map +1 -1
  88. package/dist/main.d.ts.map +1 -1
  89. package/dist/main.js +124 -0
  90. package/dist/main.js.map +1 -1
  91. package/dist/modes/interactive/components/custom-editor.d.ts +8 -0
  92. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/custom-editor.js +70 -1
  94. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  95. package/dist/modes/interactive/interactive-mode.d.ts +58 -0
  96. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  97. package/dist/modes/interactive/interactive-mode.js +2067 -104
  98. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  99. package/docs/cli-reference.md +36 -1
  100. package/docs/configuration.md +79 -2
  101. package/docs/getting-started.md +1 -0
  102. package/docs/interactive-mode.md +135 -1
  103. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Interactive mode for the coding agent.\n * Handles TUI rendering and user interaction, delegating business logic to AgentSession.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@mariozechner/pi-agent-core\";\nimport type { AssistantMessage, ImageContent, Message, Model, OAuthProviderId } from \"@mariozechner/pi-ai\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorAction,\n\tEditorComponent,\n\tEditorTheme,\n\tKeyId,\n\tMarkdownTheme,\n\tOverlayHandle,\n\tOverlayOptions,\n\tSlashCommand,\n} from \"@mariozechner/pi-tui\";\nimport {\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tLoader,\n\tMarkdown,\n\tmatchesKey,\n\tProcessTerminal,\n\tSpacer,\n\tText,\n\tTruncatedText,\n\tTUI,\n\tvisibleWidth,\n} from \"@mariozechner/pi-tui\";\nimport { spawn, spawnSync } from \"child_process\";\nimport {\n\tAPP_NAME,\n\tCHANGELOG_URL,\n\tENV_SESSION_TRACE,\n\tENV_OFFLINE,\n\tENV_SKIP_VERSION_CHECK,\n\tgetAgentDir,\n\tgetAuthPath,\n\tgetDebugLogPath,\n\tgetModelsPath,\n\tgetSessionTracePath,\n\tgetShareViewerUrl,\n\tgetUpdateInstruction,\n\tisSessionTraceEnabled,\n\tPACKAGE_NAME,\n\tVERSION,\n} from \"../../config.js\";\nimport { AuthStorage } from \"../../core/auth-storage.js\";\nimport {\n\tgetAgentProfile,\n\tgetMainProfileNames,\n\tgetProfileNames,\n\tisValidProfileName,\n\ttype AgentProfileName,\n} from \"../../core/agent-profiles.js\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.js\";\nimport type { CompactionResult } from \"../../core/compaction/index.js\";\nimport type {\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.js\";\nimport { FooterDataProvider, type ReadonlyFooterDataProvider } from \"../../core/footer-data-provider.js\";\nimport { type AppAction, KeybindingsManager } from \"../../core/keybindings.js\";\nimport {\n\tcreateCompactionSummaryMessage,\n\tINTERNAL_UI_META_CUSTOM_TYPE,\n\tisInternalUiMetaDetails,\n} from \"../../core/messages.js\";\nimport { ModelRegistry } from \"../../core/model-registry.js\";\nimport { resolveModelScope } from \"../../core/model-resolver.js\";\nimport {\n\tgetMcpCommandHelp,\n\tparseMcpAddCommand,\n\tparseMcpTargetCommand,\n\ttype McpServerConfig,\n\ttype McpRuntime,\n\ttype McpScope,\n} from \"../../core/mcp/index.js\";\nimport {\n\taddMemoryEntry,\n\tgetMemoryFilePath,\n\treadMemoryEntries,\n\tremoveMemoryEntry,\n\tupdateMemoryEntry,\n\ttype MemoryScope,\n} from \"../../core/memory.js\";\nimport { DefaultResourceLoader } from \"../../core/resource-loader.js\";\nimport { createAgentSession } from \"../../core/sdk.js\";\nimport { createTeamRun, getTeamRun, listTeamRuns } from \"../../core/agent-teams.js\";\nimport {\n\tloadCustomSubagents,\n\tresolveCustomSubagentReference,\n\ttype CustomSubagentEntry,\n} from \"../../core/subagents.js\";\nimport { getSubagentRun, listSubagentRuns } from \"../../core/subagent-runs.js\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.js\";\nimport { type SessionContext, SessionManager } from \"../../core/session-manager.js\";\nimport { SettingsManager } from \"../../core/settings-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.js\";\nimport type { ToolPermissionRequest } from \"../../core/tools/index.js\";\nimport { isTaskPlanSnapshot, TASK_PLAN_CUSTOM_TYPE } from \"../../core/task-plan.js\";\nimport type { TruncationResult } from \"../../core/tools/truncate.js\";\nimport {\n\tbuildIosmAutomationPrompt,\n\tbuildIosmAgentVerificationPrompt,\n\tbuildIosmGuideAuthoringPrompt,\n\tbuildIosmPriorityChecklist,\n\tcreateMetricSnapshot,\n\textractAssistantText,\n\tevaluateIosmAutomationProgress,\n\tformatMetricSnapshot,\n\thasReachedIosmTarget,\n\tgetIosmGuidePath,\n\tinitIosmWorkspace,\n\tinspectIosmCycle,\n\tlistIosmCycles,\n\tloadIosmConfig,\n\tplanIosmCycle,\n\treadIosmCycleReport,\n\trecordIosmCycleHistory,\n\tresolveIosmAutomationSettings,\n\tsummarizeMetricDelta,\n\tnormalizeIosmGuideMarkdown,\n\twriteIosmGuideDocument,\n\ttype IosmInitResult,\n\ttype IosmDecision,\n\ttype IosmMetricSnapshot,\n} from \"../../iosm/index.js\";\nimport { getChangelogPath, getNewEntries, parseChangelog } from \"../../utils/changelog.js\";\nimport { copyToClipboard } from \"../../utils/clipboard.js\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.js\";\nimport { ensureTool, getToolPath } from \"../../utils/tools-manager.js\";\nimport { ArminComponent } from \"./components/armin.js\";\nimport { AsciiLogoComponent } from \"./components/ascii-logo.js\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.js\";\nimport { DecryptLoader } from \"./components/decrypt-loader.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BorderedLoader } from \"./components/bordered-loader.js\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.js\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.js\";\nimport { CustomEditor } from \"./components/custom-editor.js\";\nimport { CustomMessageComponent } from \"./components/custom-message.js\";\nimport { DaxnutsComponent } from \"./components/daxnuts.js\";\nimport { DynamicBorder } from \"./components/dynamic-border.js\";\nimport { ExtensionEditorComponent } from \"./components/extension-editor.js\";\nimport { ExtensionInputComponent } from \"./components/extension-input.js\";\nimport { ExtensionSelectorComponent } from \"./components/extension-selector.js\";\nimport { FooterComponent } from \"./components/footer.js\";\nimport { appKey, appKeyHint, editorKey } from \"./components/keybinding-hints.js\";\nimport { LoginDialogComponent } from \"./components/login-dialog.js\";\nimport { McpSelectorComponent } from \"./components/mcp-selector.js\";\nimport { ModelSelectorComponent } from \"./components/model-selector.js\";\nimport { OAuthSelectorComponent } from \"./components/oauth-selector.js\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.js\";\nimport { SessionSelectorComponent } from \"./components/session-selector.js\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.js\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.js\";\nimport {\n\tSubagentMessageComponent,\n\ttype SubagentDelegateItem,\n\ttype SubagentInfo,\n\ttype SubagentPhaseState,\n} from \"./components/subagent-message.js\";\nimport { TaskPlanMessageComponent } from \"./components/task-plan-message.js\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.js\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.js\";\nimport { UserMessageComponent } from \"./components/user-message.js\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.js\";\nimport {\n\tgetAvailableThemes,\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tgetThemeByName,\n\tinitTheme,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tsetTheme,\n\tsetThemeInstance,\n\tTheme,\n\ttype ThemeColor,\n\ttheme,\n} from \"./theme/theme.js\";\n\n/** Interface for components that can be expanded/collapsed */\ninterface Expandable {\n\tsetExpanded(expanded: boolean): void;\n}\n\nfunction isExpandable(obj: unknown): obj is Expandable {\n\treturn typeof obj === \"object\" && obj !== null && \"setExpanded\" in obj && typeof obj.setExpanded === \"function\";\n}\n\ntype CompactionQueuedMessage = {\n\ttext: string;\n\tmode: \"steer\" | \"followUp\" | \"meta\";\n};\n\ntype IosmInitVerificationSummary = {\n\tcompleted: boolean;\n\tcancelled?: boolean;\n\tskippedReason?: string;\n\terror?: string;\n\tcurrent?: IosmMetricSnapshot;\n\thistoryPath?: string;\n\ttracePath?: string;\n\tguidePath?: string;\n\ttoolCalls?: number;\n\tactivityLog?: string[];\n};\n\ntype IosmAutomationLoopStatus = \"stabilized\" | \"threshold_reached\" | \"max_iterations\" | \"cancelled\" | \"failed\";\n\nconst IOSM_PROFILE_ONLY_COMMANDS = new Set([\"iosm\", \"cycle-list\", \"cycle-plan\", \"cycle-status\", \"cycle-report\"]);\nconst CHECKPOINT_LABEL_PREFIX = \"checkpoint:\";\n\ntype IosmAutomationRunState = {\n\tcancelRequested: boolean;\n\ttargetIndex?: number;\n\tmaxIterations?: number;\n\titerationsCompleted: number;\n};\n\ntype IosmAutomationRefreshResult = {\n\tinitResult: IosmInitResult;\n\tverification?: IosmInitVerificationSummary;\n\tsnapshot: IosmMetricSnapshot;\n\tguidePath: string;\n\tcycleDecision?: IosmDecision;\n};\n\ntype SessionCheckpoint = {\n\tname: string;\n\ttargetId: string;\n\tlabelEntryId: string;\n\ttimestamp: string;\n};\n\ntype DoctorCheckLevel = \"ok\" | \"warn\" | \"fail\";\n\ntype DoctorCheckItem = {\n\tlevel: DoctorCheckLevel;\n\tlabel: string;\n\tdetail: string;\n\tfix?: string;\n};\n\ntype DoctorCliToolStatus = {\n\ttool: string;\n\tavailable: boolean;\n\tsource: \"managed\" | \"system\" | \"missing\";\n\tcommand?: string;\n\thint?: string;\n};\n\ntype DoctorCliToolSpec = {\n\ttool: string;\n\tcandidates: string[];\n\tmanaged?: \"fd\" | \"rg\";\n\thint: string;\n};\n\nconst DOCTOR_CLI_TOOL_SPECS: DoctorCliToolSpec[] = [\n\t{\n\t\ttool: \"rg\",\n\t\tcandidates: [\"rg\"],\n\t\tmanaged: \"rg\",\n\t\thint: \"Install ripgrep (rg) or allow iosm-cli to download managed binaries.\",\n\t},\n\t{\n\t\ttool: \"fd\",\n\t\tcandidates: [\"fd\"],\n\t\tmanaged: \"fd\",\n\t\thint: \"Install fd or allow iosm-cli to download managed binaries.\",\n\t},\n\t{\n\t\ttool: \"ast_grep\",\n\t\tcandidates: [\"ast-grep\", \"sg\"],\n\t\thint: \"Install ast-grep (brew install ast-grep or npm i -g @ast-grep/cli).\",\n\t},\n\t{\n\t\ttool: \"comby\",\n\t\tcandidates: [\"comby\"],\n\t\thint: \"Install comby (brew install comby).\",\n\t},\n\t{\n\t\ttool: \"jq\",\n\t\tcandidates: [\"jq\"],\n\t\thint: \"Install jq (brew install jq).\",\n\t},\n\t{\n\t\ttool: \"yq\",\n\t\tcandidates: [\"yq\"],\n\t\thint: \"Install yq (brew install yq).\",\n\t},\n\t{\n\t\ttool: \"semgrep\",\n\t\tcandidates: [\"semgrep\"],\n\t\thint: \"Install semgrep (pipx install semgrep or pip install semgrep).\",\n\t},\n\t{\n\t\ttool: \"sed\",\n\t\tcandidates: [\"sed\"],\n\t\thint: \"Install sed or GNU sed if unavailable (brew install gnu-sed).\",\n\t},\n];\n\nfunction commandCandidateExists(candidates: string[]): string | undefined {\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst locator = os.platform() === \"win32\" ? \"where\" : \"which\";\n\t\t\tconst located = spawnSync(locator, [candidate], { stdio: \"pipe\" });\n\t\t\tif ((located.status ?? 1) === 0 && !located.error) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue trying fallback check\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = spawnSync(candidate, [\"--version\"], { stdio: \"pipe\" });\n\t\t\tconst err = result.error as NodeJS.ErrnoException | undefined;\n\t\t\tif (!err || err.code !== \"ENOENT\") {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue trying other candidates\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveDoctorCliToolStatuses(): DoctorCliToolStatus[] {\n\treturn DOCTOR_CLI_TOOL_SPECS.map((spec) => {\n\t\tif (spec.managed) {\n\t\t\tconst toolPath = getToolPath(spec.managed);\n\t\t\tif (toolPath) {\n\t\t\t\tconst isManagedPath = path.isAbsolute(toolPath);\n\t\t\t\treturn {\n\t\t\t\t\ttool: spec.tool,\n\t\t\t\t\tavailable: true,\n\t\t\t\t\tsource: isManagedPath ? \"managed\" : \"system\",\n\t\t\t\t\tcommand: toolPath,\n\t\t\t\t\thint: spec.hint,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttool: spec.tool,\n\t\t\t\tavailable: false,\n\t\t\t\tsource: \"missing\",\n\t\t\t\thint: spec.hint,\n\t\t\t};\n\t\t}\n\n\t\tconst resolvedCommand = commandCandidateExists(spec.candidates);\n\t\tif (resolvedCommand) {\n\t\t\treturn {\n\t\t\t\ttool: spec.tool,\n\t\t\t\tavailable: true,\n\t\t\t\tsource: \"system\",\n\t\t\t\tcommand: resolvedCommand,\n\t\t\t\thint: spec.hint,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttool: spec.tool,\n\t\t\tavailable: false,\n\t\t\tsource: \"missing\",\n\t\t\thint: spec.hint,\n\t\t};\n\t});\n}\n\nconst OPENROUTER_PROVIDER_ID = \"openrouter\";\n\ntype OrchestrationMode = \"parallel\" | \"sequential\";\n\ntype ParsedOrchestrateCommand = {\n\tmode: OrchestrationMode;\n\tagents: number;\n\tmaxParallel?: number;\n\tprofile?: AgentProfileName;\n\tprofiles?: AgentProfileName[];\n\tcwds?: string[];\n\tlocks?: string[];\n\tisolation?: \"none\" | \"worktree\";\n\tdependencies?: Array<{ agent: number; dependsOn: number[] }>;\n\ttask: string;\n};\n\nfunction isAbortLikeMessage(message: string): boolean {\n\tconst normalized = message.trim().toLowerCase();\n\treturn normalized.includes(\"aborted\") || normalized.includes(\"cancelled\");\n}\n\nconst SUBAGENT_PHASE_STATES = new Set<SubagentPhaseState>([\"queued\", \"starting\", \"running\", \"responding\"]);\nconst SUBAGENT_DELEGATE_STATUSES = new Set<SubagentDelegateItem[\"status\"]>([\"pending\", \"running\", \"done\", \"failed\"]);\n\nfunction isSubagentPhaseState(value: unknown): value is SubagentPhaseState {\n\treturn typeof value === \"string\" && SUBAGENT_PHASE_STATES.has(value as SubagentPhaseState);\n}\n\nfunction isSubagentDelegateStatus(value: unknown): value is SubagentDelegateItem[\"status\"] {\n\treturn typeof value === \"string\" && SUBAGENT_DELEGATE_STATUSES.has(value as SubagentDelegateItem[\"status\"]);\n}\n\nfunction parseSubagentDelegateItems(value: unknown): SubagentDelegateItem[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst parsed: SubagentDelegateItem[] = [];\n\tfor (const raw of value) {\n\t\tif (!raw || typeof raw !== \"object\") continue;\n\t\tconst candidate = raw as Record<string, unknown>;\n\t\tconst indexRaw = candidate.index;\n\t\tconst index =\n\t\t\ttypeof indexRaw === \"number\" && Number.isFinite(indexRaw) && indexRaw > 0 ? Math.floor(indexRaw) : undefined;\n\t\tconst description =\n\t\t\ttypeof candidate.description === \"string\" && candidate.description.trim().length > 0\n\t\t\t\t? candidate.description.trim()\n\t\t\t\t: undefined;\n\t\tconst profile =\n\t\t\ttypeof candidate.profile === \"string\" && candidate.profile.trim().length > 0\n\t\t\t\t? candidate.profile.trim()\n\t\t\t\t: undefined;\n\t\tconst status = isSubagentDelegateStatus(candidate.status) ? candidate.status : undefined;\n\t\tif (!index || !description || !profile || !status) continue;\n\t\tparsed.push({ index, description, profile, status });\n\t\tif (parsed.length >= 20) break;\n\t}\n\treturn parsed;\n}\n\nfunction hasDependencyCycle(\n\tagents: number,\n\tdependencies: Array<{ agent: number; dependsOn: number[] }>,\n): boolean {\n\tconst graph = new Map<number, number[]>();\n\tfor (let agent = 1; agent <= agents; agent++) {\n\t\tgraph.set(agent, []);\n\t}\n\tfor (const dep of dependencies) {\n\t\tgraph.set(dep.agent, [...dep.dependsOn]);\n\t}\n\n\tconst visiting = new Set<number>();\n\tconst visited = new Set<number>();\n\n\tconst dfs = (node: number): boolean => {\n\t\tif (visiting.has(node)) return true;\n\t\tif (visited.has(node)) return false;\n\n\t\tvisiting.add(node);\n\t\tfor (const next of graph.get(node) ?? []) {\n\t\t\tif (dfs(next)) return true;\n\t\t}\n\t\tvisiting.delete(node);\n\t\tvisited.add(node);\n\t\treturn false;\n\t};\n\n\tfor (let agent = 1; agent <= agents; agent++) {\n\t\tif (dfs(agent)) return true;\n\t}\n\treturn false;\n}\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n\t/** Providers that were migrated to auth.json (shows warning) */\n\tmigratedProviders?: string[];\n\t/** Warning message if session model couldn't be restored */\n\tmodelFallbackMessage?: string;\n\t/** Initial message to send on startup (can include @file content) */\n\tinitialMessage?: string;\n\t/** Images to attach to the initial message */\n\tinitialImages?: ImageContent[];\n\t/** Additional messages to send after the initial message */\n\tinitialMessages?: string[];\n\t/** Force verbose startup (overrides quietStartup setting) */\n\tverbose?: boolean;\n\t/** Whether the session was started in plan mode (shows [PLAN] badge in footer) */\n\tplanMode?: boolean;\n\t/** Active agent profile name (shows profile badge in footer when not \"full\") */\n\tprofile?: string;\n\t/** MCP runtime for /mcp command and dynamic MCP tool updates */\n\tmcpRuntime?: McpRuntime;\n}\n\nexport class InteractiveMode {\n\tprivate session: AgentSession;\n\tprivate ui: TUI;\n\tprivate chatContainer: Container;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\tprivate defaultEditor: CustomEditor;\n\tprivate editor: EditorComponent;\n\tprivate autocompleteProvider: AutocompleteProvider | undefined;\n\tprivate fdPath: string | undefined;\n\tprivate editorContainer: Container;\n\tprivate footer: FooterComponent;\n\tprivate footerDataProvider: FooterDataProvider;\n\tprivate keybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate loadingAnimation: DecryptLoader | undefined = undefined;\n\tprivate pendingWorkingMessage: string | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = \"Working...\";\n\tprivate activeProfileName: AgentProfileName = \"full\";\n\tprivate permissionMode: \"ask\" | \"auto\" | \"yolo\" = \"ask\";\n\tprivate permissionAllowRules: string[] = [];\n\tprivate permissionDenyRules: string[] = [];\n\tprivate permissionPromptLock: Promise<void> = Promise.resolve();\n\tprivate sessionAllowedToolSignatures = new Set<string>();\n\n\tprivate lastSigintTime = 0;\n\tprivate lastEscapeTime = 0;\n\tprivate changelogMarkdown: string | undefined = undefined;\n\n\t// Status line tracking (for mutating immediately-sequential status updates)\n\tprivate lastStatusSpacer: Spacer | undefined = undefined;\n\tprivate lastStatusText: Text | undefined = undefined;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// Subagent execution tracking with live progress/metadata for task tool calls.\n\tprivate subagentComponents = new Map<\n\t\tstring,\n\t\t{\n\t\t\tcomponent: SubagentMessageComponent;\n\t\t\tstartTime: number;\n\t\t\tprofile: string;\n\t\t\tdescription: string;\n\t\t\tcwd?: string;\n\t\t\tagent?: string;\n\t\t\tlockKey?: string;\n\t\t\tisolation?: \"none\" | \"worktree\";\n\t\t\tphase?: string;\n\t\t\tphaseState?: SubagentPhaseState;\n\t\t\tactiveTool?: string;\n\t\t\ttoolCallsStarted: number;\n\t\t\ttoolCallsCompleted: number;\n\t\t\tassistantMessages: number;\n\t\t\tdelegatedTasks?: number;\n\t\t\tdelegatedSucceeded?: number;\n\t\t\tdelegatedFailed?: number;\n\t\t\tdelegateIndex?: number;\n\t\t\tdelegateTotal?: number;\n\t\t\tdelegateDescription?: string;\n\t\t\tdelegateProfile?: string;\n\t\t\tdelegateItems?: SubagentDelegateItem[];\n\t\t}\n\t>();\n\n\t// Internal UI metadata emitted by runtime for orchestration rendering.\n\tprivate pendingInternalUserDisplayAliases: Array<{ rawPrompt: string; displayText: string }> = [];\n\tprivate pendingAssistantOrchestrationContexts = 0;\n\tprivate activeAssistantOrchestrationContext = false;\n\n\t// Tool output expansion state\n\tprivate toolOutputExpanded = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\n\t// Skill commands: command name -> skill file path\n\tprivate skillCommands = new Map<string, string>();\n\tprivate mcpRuntime?: McpRuntime;\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => void;\n\n\t// Track if editor is in bash mode (text starts with !)\n\tprivate isBashMode = false;\n\n\t// Track current bash execution component\n\tprivate bashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\tprivate pendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\tprivate autoCompactionLoader: Loader | undefined = undefined;\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryLoader: Loader | undefined = undefined;\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\tprivate compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// IOSM automation state\n\tprivate iosmAutomationRun: IosmAutomationRunState | undefined = undefined;\n\tprivate iosmVerificationSession: AgentSession | undefined = undefined;\n\n\t// Extension UI state\n\tprivate extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\tprivate extensionInput: ExtensionInputComponent | undefined = undefined;\n\tprivate extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate extensionWidgetsAbove = new Map<string, Component & { dispose?(): void }>();\n\tprivate extensionWidgetsBelow = new Map<string, Component & { dispose?(): void }>();\n\tprivate widgetContainerAbove!: Container;\n\tprivate widgetContainerBelow!: Container;\n\n\t// Custom footer from extension (undefined = use built-in footer)\n\tprivate customFooter: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Header container that holds the built-in or custom header\n\tprivate headerContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tprivate builtInHeader: Text | undefined = undefined;\n\n\t// ASCII logo component for startup screen\n\tprivate asciiLogo: AsciiLogoComponent | undefined = undefined;\n\n\t// Custom header from extension (undefined = use built-in header)\n\tprivate customHeader: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Convenience accessors\n\tprivate get agent() {\n\t\treturn this.session.agent;\n\t}\n\tprivate get sessionManager() {\n\t\treturn this.session.sessionManager;\n\t}\n\tprivate get settingsManager() {\n\t\treturn this.session.settingsManager;\n\t}\n\n\tconstructor(\n\t\tsession: AgentSession,\n\t\tprivate options: InteractiveModeOptions = {},\n\t) {\n\t\tthis.session = session;\n\t\tthis.version = VERSION;\n\t\tthis.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\tthis.widgetContainerBelow = new Container();\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor = new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {\n\t\t\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider();\n\t\tthis.footer = new FooterComponent(session, this.footerDataProvider);\n\t\tthis.footer.setAutoCompactEnabled(session.autoCompactionEnabled);\n\t\tthis.activeProfileName = getAgentProfile(options.profile).name;\n\t\tthis.mcpRuntime = options.mcpRuntime;\n\n\t\t// Apply plan mode and profile badges immediately if set\n\t\tif (options.planMode || this.activeProfileName === \"plan\") {\n\t\t\tthis.footer.setPlanMode(true);\n\t\t}\n\t\tthis.footer.setActiveProfile(this.activeProfileName);\n\t\tthis.session.setIosmAutopilotEnabled(this.activeProfileName === \"iosm\");\n\t\tthis.permissionMode = this.settingsManager.getPermissionMode();\n\t\tthis.permissionAllowRules = this.settingsManager.getPermissionAllowRules();\n\t\tthis.permissionDenyRules = this.settingsManager.getPermissionDenyRules();\n\t\tthis.session.setToolPermissionHandler((request) => this.requestToolPermission(request));\n\t\tthis.mcpRuntime?.setPermissionGuard((request) => this.requestToolPermission(request));\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tinitTheme(this.settingsManager.getTheme(), true);\n\t}\n\n\tprivate getToolPermissionSignature(request: ToolPermissionRequest): string {\n\t\tconst summary = request.summary.trim().replace(/\\s+/g, \" \");\n\t\treturn `${request.toolName}:${summary}`;\n\t}\n\n\tprivate matchesPermissionRule(rule: string, request: ToolPermissionRequest): boolean {\n\t\tconst [ruleToolRaw, ...rest] = rule.split(\":\");\n\t\tconst ruleTool = (ruleToolRaw ?? \"\").trim();\n\t\tconst ruleNeedle = rest.join(\":\").trim().toLowerCase();\n\t\tconst toolMatches = !ruleTool || ruleTool === \"*\" || ruleTool === request.toolName;\n\t\tif (!toolMatches) return false;\n\t\treturn !ruleNeedle || request.summary.toLowerCase().includes(ruleNeedle);\n\t}\n\n\tprivate async withPermissionDialogLock<T>(fn: () => Promise<T>): Promise<T> {\n\t\tconst previous = this.permissionPromptLock;\n\t\tlet release: (() => void) | undefined;\n\t\tthis.permissionPromptLock = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tawait previous;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\trelease?.();\n\t\t}\n\t}\n\n\tprivate async requestToolPermission(request: ToolPermissionRequest): Promise<boolean> {\n\t\tfor (const rule of this.permissionDenyRules) {\n\t\t\tif (this.matchesPermissionRule(rule, request)) {\n\t\t\t\tthis.showWarning(`Denied by rule: ${rule}`);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const rule of this.permissionAllowRules) {\n\t\t\tif (this.matchesPermissionRule(rule, request)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (this.permissionMode === \"yolo\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.permissionMode === \"auto\") {\n\t\t\t// Auto mode mirrors \"accept edits\": allow edit/write without prompts,\n\t\t\t// still ask for shell execution.\n\t\t\tif (request.toolName === \"edit\" || request.toolName === \"write\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tconst signature = this.getToolPermissionSignature(request);\n\t\tif (this.sessionAllowedToolSignatures.has(signature)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.withPermissionDialogLock(async () => {\n\t\t\tif (this.permissionMode === \"yolo\") return true;\n\t\t\tif (this.sessionAllowedToolSignatures.has(signature)) return true;\n\n\t\t\tconst label = `${request.toolName}: ${request.summary}`;\n\t\t\tconst choice = await this.showExtensionSelector(\"Permission required\", [\n\t\t\t\t\"Allow once\",\n\t\t\t\t\"Deny\",\n\t\t\t\t\"Always allow this command (session)\",\n\t\t\t]);\n\t\t\tif (!choice || choice === \"Deny\") {\n\t\t\t\tthis.showWarning(`Permission denied: ${label}`);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (choice === \"Always allow this command (session)\") {\n\t\t\t\tthis.sessionAllowedToolSignatures.add(signature);\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tprivate getHookPolicySummary():\n\t\t| {\n\t\t\tsources: string[];\n\t\t\tuserPromptSubmit: number;\n\t\t\tpreToolUse: number;\n\t\t\tpostToolUse: number;\n\t\t\tstop: number;\n\t\t}\n\t\t| undefined {\n\t\tconst hooks = this.session.resourceLoader.getHooks?.();\n\t\tif (!hooks) return undefined;\n\t\treturn {\n\t\t\tsources: hooks.sources,\n\t\t\tuserPromptSubmit: hooks.userPromptSubmit.length,\n\t\t\tpreToolUse: hooks.preToolUse.length,\n\t\t\tpostToolUse: hooks.postToolUse.length,\n\t\t\tstop: hooks.stop.length,\n\t\t};\n\t}\n\n\tprivate handleYoloCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst value = args[0]?.toLowerCase();\n\t\tif (!value) {\n\t\t\tthis.permissionMode = this.permissionMode === \"yolo\" ? \"ask\" : \"yolo\";\n\t\t\tthis.settingsManager.setPermissionMode(this.permissionMode);\n\t\t\tthis.showStatus(`YOLO mode: ${this.permissionMode === \"yolo\" ? \"ON\" : \"OFF\"}`);\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"status\") {\n\t\t\tthis.showStatus(`YOLO mode: ${this.permissionMode === \"yolo\" ? \"ON\" : \"OFF\"}`);\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"on\") {\n\t\t\tthis.permissionMode = \"yolo\";\n\t\t\tthis.settingsManager.setPermissionMode(\"yolo\");\n\t\t\tthis.showStatus(\"YOLO mode: ON (tool confirmations disabled)\");\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"off\") {\n\t\t\tthis.permissionMode = \"ask\";\n\t\t\tthis.settingsManager.setPermissionMode(\"ask\");\n\t\t\tthis.showStatus(\"YOLO mode: OFF (tool confirmations enabled)\");\n\t\t\treturn;\n\t\t}\n\t\tthis.showWarning(\"Usage: /yolo [on|off|status]\");\n\t}\n\n\tprivate getPermissionsStatusText(): string {\n\t\tconst hookSummary = this.getHookPolicySummary();\n\t\tconst hookSegment = hookSummary\n\t\t\t? ` · hooks: U${hookSummary.userPromptSubmit}/P${hookSummary.preToolUse}/T${hookSummary.postToolUse}/S${hookSummary.stop}`\n\t\t\t: \"\";\n\t\treturn `Permissions: ${this.permissionMode}${this.permissionAllowRules.length > 0 ? ` · allow rules: ${this.permissionAllowRules.length}` : \"\"}${this.permissionDenyRules.length > 0 ? ` · deny rules: ${this.permissionDenyRules.length}` : \"\"}${hookSegment}`;\n\t}\n\n\tprivate async runPermissionRulesMenu(kind: \"allow\" | \"deny\"): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst isAllow = kind === \"allow\";\n\t\t\tconst rules = isAllow ? this.permissionAllowRules : this.permissionDenyRules;\n\t\t\tconst selected = await this.showExtensionSelector(`/permissions ${kind} (${rules.length} rule${rules.length === 1 ? \"\" : \"s\"})`, [\n\t\t\t\t\"Add rule\",\n\t\t\t\t\"Remove rule\",\n\t\t\t\t\"Show rules\",\n\t\t\t\t\"Back\",\n\t\t\t]);\n\t\t\tif (!selected || selected === \"Back\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === \"Show rules\") {\n\t\t\t\tif (rules.length === 0) {\n\t\t\t\t\tthis.showStatus(`Permissions ${kind} rules: (empty)`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t`Permissions ${isAllow ? \"Allow\" : \"Deny\"} Rules`,\n\t\t\t\t\trules.map((rule) => `- ${rule}`).join(\"\\n\"),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Add rule\") {\n\t\t\t\tconst input = await this.showExtensionInput(\n\t\t\t\t\t`/permissions ${kind} add`,\n\t\t\t\t\t\"tool:match (example: bash:git *, edit:*.env)\",\n\t\t\t\t);\n\t\t\t\tif (input === undefined) continue;\n\t\t\t\tconst rawRule = input.trim();\n\t\t\t\tif (!rawRule || !rawRule.includes(\":\")) {\n\t\t\t\t\tthis.showWarning(`Invalid rule \"${rawRule || \"(empty)\"}\". Expected <tool:match>.`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (isAllow) {\n\t\t\t\t\tif (!this.permissionAllowRules.includes(rawRule)) {\n\t\t\t\t\t\tthis.permissionAllowRules.push(rawRule);\n\t\t\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.permissionDenyRules.includes(rawRule)) {\n\t\t\t\t\t\tthis.permissionDenyRules.push(rawRule);\n\t\t\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Added ${kind} rule: ${rawRule}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Remove rule\") {\n\t\t\t\tif (rules.length === 0) {\n\t\t\t\t\tthis.showStatus(`No ${kind} rules to remove.`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst pickedRule = await this.showExtensionSelector(\n\t\t\t\t\t`/permissions ${kind}: remove rule`,\n\t\t\t\t\trules.map((rule) => rule),\n\t\t\t\t);\n\t\t\t\tif (!pickedRule) continue;\n\n\t\t\t\tif (isAllow) {\n\t\t\t\t\tthis.permissionAllowRules = this.permissionAllowRules.filter((rule) => rule !== pickedRule);\n\t\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\t} else {\n\t\t\t\t\tthis.permissionDenyRules = this.permissionDenyRules.filter((rule) => rule !== pickedRule);\n\t\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Removed ${kind} rule: ${pickedRule}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async runPermissionsInteractiveMenu(): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst selected = await this.showExtensionSelector(\"/permissions\", [\n\t\t\t\t`Mode (${this.permissionMode})`,\n\t\t\t\t`Allow Rules (${this.permissionAllowRules.length})`,\n\t\t\t\t`Deny Rules (${this.permissionDenyRules.length})`,\n\t\t\t\t\"Hooks Summary\",\n\t\t\t\t\"Show Status\",\n\t\t\t\t\"Close\",\n\t\t\t]);\n\t\t\tif (!selected || selected === \"Close\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Mode\")) {\n\t\t\t\tconst modeChoice = await this.showExtensionSelector(\"/permissions: mode\", [\n\t\t\t\t\t\"ask (Recommended)\",\n\t\t\t\t\t\"auto\",\n\t\t\t\t\t\"yolo\",\n\t\t\t\t]);\n\t\t\t\tif (!modeChoice) continue;\n\t\t\t\tconst nextMode = modeChoice.startsWith(\"ask\")\n\t\t\t\t\t? \"ask\"\n\t\t\t\t\t: modeChoice.startsWith(\"auto\")\n\t\t\t\t\t\t? \"auto\"\n\t\t\t\t\t\t: \"yolo\";\n\t\t\t\tthis.permissionMode = nextMode;\n\t\t\t\tthis.settingsManager.setPermissionMode(nextMode);\n\t\t\t\tthis.showStatus(`Permissions: ${nextMode}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Allow Rules\")) {\n\t\t\t\tawait this.runPermissionRulesMenu(\"allow\");\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Deny Rules\")) {\n\t\t\t\tawait this.runPermissionRulesMenu(\"deny\");\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Hooks Summary\") {\n\t\t\t\tconst summary = this.getHookPolicySummary();\n\t\t\t\tif (!summary) {\n\t\t\t\t\tthis.showWarning(\"Hooks policy is unavailable in current session.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst sourceLines =\n\t\t\t\t\tsummary.sources.length > 0 ? summary.sources.map((source) => `- ${source}`) : [\"- (none loaded)\"];\n\t\t\t\tconst lines = [\n\t\t\t\t\t`UserPromptSubmit: ${summary.userPromptSubmit}`,\n\t\t\t\t\t`PreToolUse: ${summary.preToolUse}`,\n\t\t\t\t\t`PostToolUse: ${summary.postToolUse}`,\n\t\t\t\t\t`Stop: ${summary.stop}`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Sources:\",\n\t\t\t\t\t...sourceLines,\n\t\t\t\t];\n\t\t\t\tthis.showCommandTextBlock(\"Hook Policies\", lines.join(\"\\n\"));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Show Status\") {\n\t\t\t\tthis.showStatus(this.getPermissionsStatusText());\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handlePermissionsCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst value = args[0]?.toLowerCase();\n\t\tif (!value) {\n\t\t\tawait this.runPermissionsInteractiveMenu();\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"hooks\") {\n\t\t\tconst mode = args[1]?.toLowerCase();\n\t\t\tconst summary = this.getHookPolicySummary();\n\t\t\tif (!summary) {\n\t\t\t\tthis.showWarning(\"Hooks policy is unavailable in current session.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (mode === \"json\") {\n\t\t\t\tthis.showCommandJsonBlock(\"Hook Policies\", summary);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst sourceLines =\n\t\t\t\tsummary.sources.length > 0 ? summary.sources.map((source) => `- ${source}`) : [\"- (none loaded)\"];\n\t\t\tconst lines = [\n\t\t\t\t`UserPromptSubmit: ${summary.userPromptSubmit}`,\n\t\t\t\t`PreToolUse: ${summary.preToolUse}`,\n\t\t\t\t`PostToolUse: ${summary.postToolUse}`,\n\t\t\t\t`Stop: ${summary.stop}`,\n\t\t\t\t\"\",\n\t\t\t\t\"Sources:\",\n\t\t\t\t...sourceLines,\n\t\t\t];\n\t\t\tthis.showCommandTextBlock(\"Hook Policies\", lines.join(\"\\n\"));\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"allow\") {\n\t\t\tconst action = args[1]?.toLowerCase();\n\t\t\tif (action === \"list\") {\n\t\t\t\tif (this.permissionAllowRules.length === 0) {\n\t\t\t\t\tthis.showStatus(\"Permissions allow rules: (empty)\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showCommandTextBlock(\"Permissions Allow Rules\", this.permissionAllowRules.map((r) => `- ${r}`).join(\"\\n\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"add\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule || !rawRule.includes(\":\")) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions allow add <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!this.permissionAllowRules.includes(rawRule)) {\n\t\t\t\t\tthis.permissionAllowRules.push(rawRule);\n\t\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Added allow rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"remove\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions allow remove <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.permissionAllowRules = this.permissionAllowRules.filter((r) => r !== rawRule);\n\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\tthis.showStatus(`Removed allow rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showWarning(\"Usage: /permissions allow [list|add|remove]\");\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"deny\") {\n\t\t\tconst action = args[1]?.toLowerCase();\n\t\t\tif (action === \"list\") {\n\t\t\t\tif (this.permissionDenyRules.length === 0) {\n\t\t\t\t\tthis.showStatus(\"Permissions deny rules: (empty)\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showCommandTextBlock(\"Permissions Deny Rules\", this.permissionDenyRules.map((r) => `- ${r}`).join(\"\\n\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"add\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule || !rawRule.includes(\":\")) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions deny add <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!this.permissionDenyRules.includes(rawRule)) {\n\t\t\t\t\tthis.permissionDenyRules.push(rawRule);\n\t\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Added deny rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"remove\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions deny remove <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.permissionDenyRules = this.permissionDenyRules.filter((r) => r !== rawRule);\n\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\tthis.showStatus(`Removed deny rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showWarning(\"Usage: /permissions deny [list|add|remove]\");\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"status\") {\n\t\t\tthis.showStatus(this.getPermissionsStatusText());\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"ask\" || value === \"auto\" || value === \"yolo\") {\n\t\t\tthis.permissionMode = value;\n\t\t\tthis.settingsManager.setPermissionMode(value);\n\t\t\tthis.showStatus(`Permissions: ${value}`);\n\t\t\treturn;\n\t\t}\n\t\tthis.showWarning(\"Usage: /permissions [ask|auto|yolo|status|allow|deny|hooks]\");\n\t}\n\n\tprivate getMcpArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\t\tconst mcpSubcommands = [\"list\", \"status\", \"add\", \"get\", \"tools\", \"test\", \"enable\", \"disable\", \"remove\", \"help\"];\n\t\tconst servers = this.mcpRuntime?.getServers() ?? [];\n\t\tconst hasTrailingSpace = /\\\\s$/.test(prefix);\n\t\tconst tokens = this.parseSlashArgs(prefix);\n\t\tconst first = tokens[0]?.toLowerCase();\n\n\t\tif (!first || (tokens.length === 1 && !hasTrailingSpace)) {\n\t\t\tconst query = first ?? \"\";\n\t\t\tconst candidates = mcpSubcommands.filter((subcommand) => subcommand.includes(query));\n\t\t\treturn candidates.map((subcommand) => ({ value: subcommand, label: subcommand }));\n\t\t}\n\n\t\tif ([\"get\", \"remove\", \"enable\", \"disable\", \"test\", \"tools\"].includes(first)) {\n\t\t\tconst query = hasTrailingSpace ? \"\" : (tokens[1] ?? \"\");\n\t\t\tconst filtered = query\n\t\t\t\t? fuzzyFilter(servers, query, (server) => `${server.name} ${server.scope}`)\n\t\t\t\t: servers;\n\t\t\treturn filtered.map((server) => ({\n\t\t\t\tvalue: server.name,\n\t\t\t\tlabel: server.name,\n\t\t\t\tdescription: `${server.scope}/${server.transport} · ${server.state}`,\n\t\t\t}));\n\t\t}\n\n\t\tif (first === \"add\" && tokens.length === 2 && !hasTrailingSpace) {\n\t\t\treturn [{ value: tokens[1], label: tokens[1], description: \"server name\" }];\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getMemoryArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\t\tconst subcommands = [\"list\", \"add\", \"edit\", \"rm\", \"remove\", \"path\", \"ui\", \"help\"];\n\t\tconst scopeFlags = [\"--scope\", \"--project\", \"--user\"];\n\t\tconst scopeValues = [\"project\", \"user\"];\n\t\tconst hasTrailingSpace = /\\\\s$/.test(prefix);\n\t\tconst tokens = this.parseSlashArgs(prefix);\n\t\tconst first = tokens[0]?.toLowerCase();\n\n\t\tconst scopeFlagIndex = tokens.findIndex((token) => token === \"--scope\");\n\t\tif (scopeFlagIndex >= 0) {\n\t\t\tconst needsScopeValue = scopeFlagIndex + 1 >= tokens.length;\n\t\t\tif (needsScopeValue) {\n\t\t\t\treturn scopeValues.map((value) => ({ value, label: value }));\n\t\t\t}\n\t\t\tconst currentScopeValue = tokens[scopeFlagIndex + 1] ?? \"\";\n\t\t\tif (currentScopeValue.length > 0 && !scopeValues.includes(currentScopeValue)) {\n\t\t\t\treturn scopeValues\n\t\t\t\t\t.filter((value) => value.startsWith(currentScopeValue))\n\t\t\t\t\t.map((value) => ({ value, label: value }));\n\t\t\t}\n\t\t}\n\n\t\tif (!first || (tokens.length === 1 && !hasTrailingSpace)) {\n\t\t\tconst query = first ?? \"\";\n\t\t\tconst candidates = [...subcommands, ...scopeFlags].filter((item) => item.includes(query));\n\t\t\treturn candidates.map((item) => ({ value: item, label: item }));\n\t\t}\n\n\t\tconst query = hasTrailingSpace ? \"\" : (tokens[tokens.length - 1] ?? \"\");\n\t\tif (query.startsWith(\"--\")) {\n\t\t\treturn scopeFlags\n\t\t\t\t.filter((flag) => flag.includes(query))\n\t\t\t\t.map((flag) => ({ value: flag, label: flag }));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate setupAutocomplete(fdPath: string | undefined): void {\n\t\t// Define commands for autocomplete\n\t\tconst builtinCommands = BUILTIN_SLASH_COMMANDS.filter(\n\t\t\t(command) => this.activeProfileName === \"iosm\" || !IOSM_PROFILE_ONLY_COMMANDS.has(command.name),\n\t\t);\n\t\tconst slashCommands: SlashCommand[] = builtinCommands.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\t// Get available models (scoped or from registry)\n\t\t\t\tconst models =\n\t\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t\t: this.session.modelRegistry.getAvailable();\n\n\t\t\t\tif (models.length === 0) return null;\n\n\t\t\t\t// Create items with provider/id format\n\t\t\t\tconst items = models.map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tprovider: m.provider,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\t// Fuzzy filter by model ID + provider (allows \"opus anthropic\" to match)\n\t\t\t\tconst filtered = fuzzyFilter(items, prefix, (item) => `${item.id} ${item.provider}`);\n\n\t\t\t\tif (filtered.length === 0) return null;\n\n\t\t\t\treturn filtered.map((item) => ({\n\t\t\t\t\tvalue: item.label,\n\t\t\t\t\tlabel: item.id,\n\t\t\t\t\tdescription: item.provider,\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\tconst mcpCommand = slashCommands.find((command) => command.name === \"mcp\");\n\t\tif (mcpCommand) {\n\t\t\tmcpCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null =>\n\t\t\t\tthis.getMcpArgumentCompletions(prefix);\n\t\t}\n\n\t\tconst memoryCommand = slashCommands.find((command) => command.name === \"memory\");\n\t\tif (memoryCommand) {\n\t\t\tmemoryCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null =>\n\t\t\t\tthis.getMemoryArgumentCompletions(prefix);\n\t\t}\n\n\t\t// Convert prompt templates to SlashCommand format for autocomplete\n\t\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: cmd.description,\n\t\t}));\n\n\t\t// Convert extension commands to SlashCommand format\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst extensionCommands: SlashCommand[] = (\n\t\t\tthis.session.extensionRunner?.getRegisteredCommands(builtinCommandNames) ?? []\n\t\t).map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: cmd.description ?? \"(extension command)\",\n\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t}));\n\n\t\t// Build skill commands from session.skills (if enabled)\n\t\tthis.skillCommands.clear();\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\t\tfor (const skill of this.session.resourceLoader.getSkills().skills) {\n\t\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\t\tthis.skillCommands.set(commandName, skill.filePath);\n\t\t\t\tskillCommandList.push({ name: commandName, description: skill.description });\n\t\t\t}\n\t\t}\n\n\t\tconst customAgentMentionItems = (() => {\n\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\t\treturn loaded.agents.map((agent) => ({\n\t\t\t\tname: agent.name,\n\t\t\t\tvalue: `@${agent.name} `,\n\t\t\t\tlabel: `@${agent.name}`,\n\t\t\t\tdescription: `${agent.description} · profile=${agent.profile ?? \"full\"}`,\n\t\t\t}));\n\t\t})();\n\n\t\t// Setup autocomplete\n\t\tconst baseAutocompleteProvider = new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...extensionCommands, ...skillCommandList],\n\t\t\tprocess.cwd(),\n\t\t\tfdPath,\n\t\t);\n\n\t\tthis.autocompleteProvider = {\n\t\t\tgetSuggestions: (lines, cursorLine, cursorCol) => {\n\t\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\t\t\tconst mentionMatch = textBeforeCursor.match(/(?:^|\\s)(@[^\\s@]*)$/);\n\t\t\t\tconst mentionPrefix = mentionMatch?.[1] ?? null;\n\t\t\t\tconst fallback = baseAutocompleteProvider.getSuggestions(lines, cursorLine, cursorCol);\n\t\t\t\tif (!mentionPrefix || customAgentMentionItems.length === 0) {\n\t\t\t\t\treturn fallback;\n\t\t\t\t}\n\n\t\t\t\tconst rawQuery = mentionPrefix.slice(1).trim();\n\t\t\t\tconst normalizedQuery = rawQuery.replace(/\\\\/g, \"/\");\n\t\t\t\tconst queryTail = normalizedQuery.split(\"/\").filter(Boolean).pop() ?? normalizedQuery;\n\t\t\t\tconst query = queryTail.replace(/\\.md$/i, \"\");\n\t\t\t\tconst filtered = query\n\t\t\t\t\t? fuzzyFilter(customAgentMentionItems, query, (item) => `${item.name} ${item.description ?? \"\"}`)\n\t\t\t\t\t: customAgentMentionItems;\n\t\t\t\tif (filtered.length === 0) {\n\t\t\t\t\treturn fallback;\n\t\t\t\t}\n\n\t\t\t\tconst mergedItems: AutocompleteItem[] = filtered.map((item) => ({\n\t\t\t\t\tvalue: item.value,\n\t\t\t\t\tlabel: item.label,\n\t\t\t\t\tdescription: item.description,\n\t\t\t\t}));\n\t\t\t\tconst seen = new Set(mergedItems.map((item) => item.value));\n\t\t\t\tif (fallback && fallback.prefix === mentionPrefix) {\n\t\t\t\t\tfor (const item of fallback.items) {\n\t\t\t\t\t\tif (seen.has(item.value)) continue;\n\t\t\t\t\t\tmergedItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { items: mergedItems, prefix: mentionPrefix };\n\t\t\t},\n\t\t\tapplyCompletion: (lines, cursorLine, cursorCol, item, prefix) => {\n\t\t\t\tif (prefix.startsWith(\"@\")) {\n\t\t\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\t\t\tconst replaceStart = Math.max(0, cursorCol - prefix.length);\n\t\t\t\t\tconst beforePrefix = currentLine.slice(0, replaceStart);\n\t\t\t\t\tconst afterCursor = currentLine.slice(cursorCol);\n\t\t\t\t\tconst nextLines = [...lines];\n\t\t\t\t\tnextLines[cursorLine] = `${beforePrefix}${item.value}${afterCursor}`;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlines: nextLines,\n\t\t\t\t\t\tcursorLine,\n\t\t\t\t\t\tcursorCol: beforePrefix.length + item.value.length,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn baseAutocompleteProvider.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t},\n\t\t};\n\n\t\tthis.defaultEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setAutocompleteProvider?.(this.autocompleteProvider);\n\t\t}\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this.isInitialized) return;\n\n\t\t// Load changelog (only show new entries, skip for resumed sessions)\n\t\tthis.changelogMarkdown = this.getChangelogForDisplay();\n\n\t\t// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir)\n\t\t// Both are needed: fd for autocomplete, rg for grep tool and bash commands\n\t\tconst [fdPath] = await Promise.all([ensureTool(\"fd\"), ensureTool(\"rg\")]);\n\t\tthis.fdPath = fdPath;\n\n\t\t// Add header container as first child\n\t\tthis.ui.addChild(this.headerContainer);\n\n\t\t// Add header with keybindings from config (unless silenced)\n\t\tif (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n\t\t\tthis.builtInHeader = new Text(this.buildStartupHeaderContent(), 1, 0);\n\t\t\tthis.asciiLogo = new AsciiLogoComponent();\n\n\t\t\t// Setup UI layout with logo + dashboard\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.asciiLogo);\n\t\t\tthis.headerContainer.addChild(new DynamicBorder((text) => theme.fg(\"borderAccent\", text)));\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(new DynamicBorder((text) => theme.fg(\"borderMuted\", text)));\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\n\t\t\t// Add changelog if provided\n\t\t\tif (this.changelogMarkdown) {\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\n\t\t\t\tif (this.settingsManager.getCollapseChangelog()) {\n\t\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\n\t\t\t\t} else {\n\t\t\t\t\tthis.headerContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.headerContainer.addChild(\n\t\t\t\t\t\tnew Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()),\n\t\t\t\t\t);\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\t}\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\n\t\t\t}\n\t\t} else {\n\t\t\t// Minimal header when silenced\n\t\t\tthis.builtInHeader = new Text(\"\", 0, 0);\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tif (this.changelogMarkdown) {\n\t\t\t\t// Still show changelog notification even in silent mode\n\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.addChild(this.chatContainer);\n\t\tthis.ui.addChild(this.pendingMessagesContainer);\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.renderWidgets(); // Initialize with default spacer\n\t\tthis.ui.addChild(this.widgetContainerAbove);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.widgetContainerBelow);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.setFocus(this.editor);\n\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\n\t\t// Initialize extensions first so resources are shown before messages\n\t\tawait this.initExtensions();\n\n\t\t// Render initial messages AFTER showing loaded resources\n\t\tthis.renderInitialMessages();\n\n\t\t// Start the UI\n\t\tthis.ui.start();\n\t\tthis.isInitialized = true;\n\n\t\t// Set terminal title\n\t\tthis.updateTerminalTitle();\n\n\t\t// Subscribe to agent events\n\t\tthis.subscribeToAgent();\n\n\t\t// Set up theme file watcher\n\t\tonThemeChange(() => {\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Set up git branch watcher (uses provider instead of footer)\n\t\tthis.footerDataProvider.onBranchChange(() => {\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Initialize available provider count for footer display\n\t\tawait this.updateAvailableProviderCount();\n\t}\n\n\tprivate buildStartupHeaderContent(): string {\n\t\tconst kb = this.keybindings;\n\t\tconst hasWorkspace = this.hasIosmWorkspace();\n\t\tconst iosmMode = this.activeProfileName === \"iosm\";\n\t\tconst activeModel = this.session.model;\n\t\tconst activeModelText = activeModel ? `${activeModel.provider}/${activeModel.id}` : \"not configured\";\n\t\tconst modelValue = activeModelText.length > 40 ? `${activeModelText.slice(0, 37)}...` : activeModelText;\n\t\tconst availableModels = this.session.modelRegistry.getAvailable();\n\t\tconst authProviders = this.session.modelRegistry.authStorage.list().length;\n\t\tconst mcpStatuses = this.mcpRuntime?.getServers() ?? [];\n\t\tconst mcpEnabled = mcpStatuses.filter((status) => status.enabled).length;\n\t\tconst mcpConnected = mcpStatuses.filter((status) => status.state === \"connected\").length;\n\t\tconst projectMemoryCount = this.getMemoryEntryCount(\"project\");\n\t\tconst userMemoryCount = this.getMemoryEntryCount(\"user\");\n\n\t\t// Status indicator with colored dot\n\t\tconst indicator = (ok: boolean): string =>\n\t\t\tok ? theme.fg(\"success\", \"●\") : theme.fg(\"warning\", \"○\");\n\n\t\t// Title line: version + profile\n\t\tconst titleLine =\n\t\t\ttheme.bold(theme.fg(\"accent\", `IOSM CLI`)) +\n\t\t\ttheme.fg(\"dim\", ` v${this.version}`) +\n\t\t\ttheme.fg(\"dim\", \" │ \") +\n\t\t\ttheme.fg(\"muted\", \"profile \") +\n\t\t\ttheme.fg(iosmMode ? \"accent\" : \"muted\", this.activeProfileName);\n\n\t\t// Status rows with colored dot indicators\n\t\tconst modeLabel = iosmMode ? (hasWorkspace ? \"iosm\" : \"iosm (no workspace)\") : \"standard\";\n\t\tconst modeOk = iosmMode ? hasWorkspace : true;\n\n\t\tconst modelOk = !!activeModel;\n\t\tconst authOk = authProviders > 0;\n\t\tconst readyOk = availableModels.length > 0;\n\n\t\tlet mcpText = \"none\";\n\t\tlet mcpOk = true;\n\t\tif (mcpStatuses.length > 0) {\n\t\t\tmcpText = mcpEnabled === 0\n\t\t\t\t? `0/${mcpStatuses.length} enabled`\n\t\t\t\t: `${mcpConnected}/${mcpEnabled} connected`;\n\t\t\tmcpOk = mcpEnabled > 0 && mcpConnected === mcpEnabled;\n\t\t}\n\n\t\tlet memoryText: string;\n\t\tlet memoryOk: boolean;\n\t\tif (projectMemoryCount !== undefined && userMemoryCount !== undefined) {\n\t\t\tconst total = projectMemoryCount + userMemoryCount;\n\t\t\tmemoryText = `project ${projectMemoryCount}, user ${userMemoryCount}`;\n\t\t\tmemoryOk = total > 0;\n\t\t} else {\n\t\t\tmemoryText = `project ${projectMemoryCount ?? \"?\"}, user ${userMemoryCount ?? \"?\"}`;\n\t\t\tmemoryOk = false;\n\t\t}\n\n\t\tconst pad = \" \";\n\t\tconst statusRows = [\n\t\t\t`${pad}${indicator(modeOk)} ${theme.fg(\"muted\", \"Mode\")} ${theme.fg(modeOk ? \"text\" : \"warning\", modeLabel)}`,\n\t\t\t`${pad}${indicator(modelOk)} ${theme.fg(\"muted\", \"Model\")} ${theme.fg(modelOk ? \"text\" : \"warning\", modelValue)}`,\n\t\t\t`${pad}${indicator(authOk)} ${theme.fg(\"muted\", \"Auth\")} ${theme.fg(authOk ? \"text\" : \"warning\", `${authProviders} provider${authProviders !== 1 ? \"s\" : \"\"}`)}`,\n\t\t\t`${pad}${indicator(readyOk)} ${theme.fg(\"muted\", \"Ready\")} ${theme.fg(readyOk ? \"text\" : \"warning\", `${availableModels.length} model${availableModels.length !== 1 ? \"s\" : \"\"}`)}`,\n\t\t\t`${pad}${indicator(mcpOk)} ${theme.fg(\"muted\", \"MCP\")} ${theme.fg(mcpOk ? \"text\" : \"warning\", mcpText)}`,\n\t\t\t`${pad}${indicator(memoryOk)} ${theme.fg(\"muted\", \"Memory\")} ${theme.fg(memoryOk ? \"text\" : \"warning\", memoryText)}`,\n\t\t];\n\n\t\t// Contextual guidance\n\t\tlet guidanceLine: string;\n\t\tif (!activeModel && availableModels.length === 0) {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Get started: ${theme.fg(\"accent\", \"/login\")} ${theme.fg(\"dim\", \"→\")} ${theme.fg(\"accent\", \"/model\")} ${theme.fg(\"dim\", \"→\")} ${theme.fg(\"accent\", \"/doctor\")}`;\n\t\t} else if (!activeModel) {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Select a model: ${theme.fg(\"accent\", \"/model\")}`;\n\t\t} else if (iosmMode && !hasWorkspace) {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Initialize workspace: ${theme.fg(\"accent\", \"/init\")} or ${theme.fg(\"accent\", \"/iosm\")}`;\n\t\t} else {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Ready. Type a task or use ${theme.fg(\"accent\", \"/help\")} for commands`;\n\t\t}\n\n\t\t// Commands and keys\n\t\tconst commandsLine =\n\t\t\t`${pad}${theme.fg(\"dim\", \"cmds\")} ` +\n\t\t\t[\"model\", \"login\", \"mcp\", \"memory\", \"doctor\", \"new\"].map((c) => theme.fg(\"accent\", `/${c}`)).join(theme.fg(\"dim\", \" \"));\n\n\t\tconst keysLine =\n\t\t\t`${pad}${theme.fg(\"dim\", \"keys\")} ` +\n\t\t\tappKeyHint(kb, \"interrupt\", \"stop\") +\n\t\t\ttheme.fg(\"dim\", \" \") +\n\t\t\tappKeyHint(kb, \"selectModel\", \"model\") +\n\t\t\ttheme.fg(\"dim\", \" \") +\n\t\t\tappKeyHint(kb, \"cycleModelForward\", \"next-model\") +\n\t\t\ttheme.fg(\"dim\", \" \") +\n\t\t\tappKeyHint(kb, \"cycleProfile\", \"profile\");\n\n\t\treturn [\n\t\t\ttitleLine,\n\t\t\t\"\",\n\t\t\t...statusRows,\n\t\t\t\"\",\n\t\t\tguidanceLine,\n\t\t\t\"\",\n\t\t\tcommandsLine,\n\t\t\tkeysLine,\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate getMemoryEntryCount(scope: MemoryScope): number | undefined {\n\t\ttry {\n\t\t\treturn readMemoryEntries(this.resolveMemoryPath(scope)).entries.length;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate refreshBuiltInHeader(): void {\n\t\tif (!this.builtInHeader || this.customHeader || this.settingsManager.getQuietStartup()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.builtInHeader.setText(this.buildStartupHeaderContent());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate hasIosmWorkspace(): boolean {\n\t\treturn fs.existsSync(path.join(this.sessionManager.getCwd(), \".iosm\"));\n\t}\n\n\tprivate requireIosmMode(commandName: string): boolean {\n\t\tif (this.activeProfileName === \"iosm\") return true;\n\t\tthis.showWarning(`\\`${commandName}\\` is available only in IOSM profile. Switch profile to \\`iosm\\` (Shift+Tab).`);\n\t\treturn false;\n\t}\n\n\t/**\n\t * Update terminal title with session name and cwd.\n\t */\n\tprivate updateTerminalTitle(): void {\n\t\tconst cwdBasename = path.basename(process.cwd());\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\t\tif (sessionName) {\n\t\t\tthis.ui.terminal.setTitle(`${APP_NAME} - ${sessionName} - ${cwdBasename}`);\n\t\t} else {\n\t\t\tthis.ui.terminal.setTitle(`${APP_NAME} - ${cwdBasename}`);\n\t\t}\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Start version check asynchronously\n\t\tthis.checkForNewVersion().then((newVersion) => {\n\t\t\tif (newVersion) {\n\t\t\t\tthis.showNewVersionNotification(newVersion);\n\t\t\t}\n\t\t});\n\n\t\t// Show startup warnings\n\t\tconst { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(`Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`);\n\t\t}\n\n\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\t\tif (!this.session.model) {\n\t\t\tthis.showWarning(\"No model selected. Choose a model to start.\");\n\t\t\tawait this.showModelProviderSelector();\n\t\t}\n\n\t\t// Process initial messages\n\t\tif (initialMessage && this.session.model) {\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t} else if (initialMessage && !this.session.model) {\n\t\t\tthis.showWarning(\"Initial message not sent: select a model first.\");\n\t\t}\n\n\t\tif (initialMessages && this.session.model) {\n\t\t\tfor (const message of initialMessages) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\tthis.showError(errorMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (initialMessages && initialMessages.length > 0 && !this.session.model) {\n\t\t\tthis.showWarning(\"Initial messages not sent: select a model first.\");\n\t\t}\n\n\t\t// Main interactive loop\n\t\twhile (true) {\n\t\t\tconst userInput = await this.getUserInput();\n\t\t\ttry {\n\t\t\t\tawait this.promptWithTaskFallback(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check npm registry for a newer version.\n\t */\n\tprivate async checkForNewVersion(): Promise<string | undefined> {\n\t\tif (\n\t\t\tprocess.env[ENV_SKIP_VERSION_CHECK] ||\n\t\t\tprocess.env.PI_SKIP_VERSION_CHECK ||\n\t\t\tprocess.env[ENV_OFFLINE] ||\n\t\t\tprocess.env.PI_OFFLINE\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {\n\t\t\t\tsignal: AbortSignal.timeout(10000),\n\t\t\t});\n\t\t\tif (!response.ok) return undefined;\n\n\t\t\tconst data = (await response.json()) as { version?: string };\n\t\t\tconst latestVersion = data.version;\n\n\t\t\tif (latestVersion && latestVersion !== this.version) {\n\t\t\t\treturn latestVersion;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Get changelog entries to display on startup.\n\t * Only shows new entries since last seen version, skips for resumed sessions.\n\t */\n\tprivate getChangelogForDisplay(): string | undefined {\n\t\t// Skip changelog for resumed/continued sessions (already have messages)\n\t\tif (this.session.state.messages.length > 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lastVersion = this.settingsManager.getLastChangelogVersion();\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst entries = parseChangelog(changelogPath);\n\n\t\tif (!lastVersion) {\n\t\t\t// Fresh install - just record the version, don't show changelog\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst newEntries = getNewEntries(entries, lastVersion);\n\t\t\tif (newEntries.length > 0) {\n\t\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\t\treturn newEntries.map((e) => e.content).join(\"\\n\\n\");\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate getMarkdownThemeWithSettings(): MarkdownTheme {\n\t\treturn {\n\t\t\t...getMarkdownTheme(),\n\t\t\tcodeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n\t\t};\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tprivate formatDisplayPath(p: string): string {\n\t\tconst home = os.homedir();\n\t\tlet result = p;\n\n\t\t// Replace home directory with ~\n\t\tif (result.startsWith(home)) {\n\t\t\tresult = `~${result.slice(home.length)}`;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get a short path relative to the package root for display.\n\t */\n\tprivate getShortPath(fullPath: string, source: string): string {\n\t\t// For npm packages, show path relative to node_modules/pkg/\n\t\tconst npmMatch = fullPath.match(/node_modules\\/(@?[^/]+(?:\\/[^/]+)?)\\/(.*)/);\n\t\tif (npmMatch && source.startsWith(\"npm:\")) {\n\t\t\treturn npmMatch[2];\n\t\t}\n\n\t\t// For git packages, show path relative to repo root\n\t\tconst gitMatch = fullPath.match(/git\\/[^/]+\\/[^/]+\\/(.*)/);\n\t\tif (gitMatch && source.startsWith(\"git:\")) {\n\t\t\treturn gitMatch[1];\n\t\t}\n\n\t\t// For local/auto, just use formatDisplayPath\n\t\treturn this.formatDisplayPath(fullPath);\n\t}\n\n\tprivate getDisplaySourceInfo(\n\t\tsource: string,\n\t\tscope: string,\n\t): { label: string; scopeLabel?: string; color: \"accent\" | \"muted\" } {\n\t\tif (source === \"local\") {\n\t\t\tif (scope === \"user\") {\n\t\t\t\treturn { label: \"user\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"project\") {\n\t\t\t\treturn { label: \"project\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"temporary\") {\n\t\t\t\treturn { label: \"path\", scopeLabel: \"temp\", color: \"muted\" };\n\t\t\t}\n\t\t\treturn { label: \"path\", color: \"muted\" };\n\t\t}\n\n\t\tif (source === \"cli\") {\n\t\t\treturn { label: \"path\", scopeLabel: scope === \"temporary\" ? \"temp\" : undefined, color: \"muted\" };\n\t\t}\n\n\t\tconst scopeLabel =\n\t\t\tscope === \"user\" ? \"user\" : scope === \"project\" ? \"project\" : scope === \"temporary\" ? \"temp\" : undefined;\n\t\treturn { label: source, scopeLabel, color: \"accent\" };\n\t}\n\n\tprivate getScopeGroup(source: string, scope: string): \"user\" | \"project\" | \"path\" {\n\t\tif (source === \"cli\" || scope === \"temporary\") return \"path\";\n\t\tif (scope === \"user\") return \"user\";\n\t\tif (scope === \"project\") return \"project\";\n\t\treturn \"path\";\n\t}\n\n\tprivate isPackageSource(source: string): boolean {\n\t\treturn source.startsWith(\"npm:\") || source.startsWith(\"git:\");\n\t}\n\n\tprivate buildScopeGroups(\n\t\tpaths: string[],\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }> {\n\t\tconst groups: Record<\n\t\t\t\"user\" | \"project\" | \"path\",\n\t\t\t{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }\n\t\t> = {\n\t\t\tuser: { scope: \"user\", paths: [], packages: new Map() },\n\t\t\tproject: { scope: \"project\", paths: [], packages: new Map() },\n\t\t\tpath: { scope: \"path\", paths: [], packages: new Map() },\n\t\t};\n\n\t\tfor (const p of paths) {\n\t\t\tconst meta = this.findMetadata(p, metadata);\n\t\t\tconst source = meta?.source ?? \"local\";\n\t\t\tconst scope = meta?.scope ?? \"project\";\n\t\t\tconst groupKey = this.getScopeGroup(source, scope);\n\t\t\tconst group = groups[groupKey];\n\n\t\t\tif (this.isPackageSource(source)) {\n\t\t\t\tconst list = group.packages.get(source) ?? [];\n\t\t\t\tlist.push(p);\n\t\t\t\tgroup.packages.set(source, list);\n\t\t\t} else {\n\t\t\t\tgroup.paths.push(p);\n\t\t\t}\n\t\t}\n\n\t\treturn [groups.project, groups.user, groups.path].filter(\n\t\t\t(group) => group.paths.length > 0 || group.packages.size > 0,\n\t\t);\n\t}\n\n\tprivate formatScopeGroups(\n\t\tgroups: Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }>,\n\t\toptions: {\n\t\t\tformatPath: (p: string) => string;\n\t\t\tformatPackagePath: (p: string, source: string) => string;\n\t\t},\n\t): string {\n\t\tconst lines: string[] = [];\n\n\t\tfor (const group of groups) {\n\t\t\tlines.push(` ${theme.fg(\"accent\", group.scope)}`);\n\n\t\t\tconst sortedPaths = [...group.paths].sort((a, b) => a.localeCompare(b));\n\t\t\tfor (const p of sortedPaths) {\n\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPath(p)}`));\n\t\t\t}\n\n\t\t\tconst sortedPackages = Array.from(group.packages.entries()).sort(([a], [b]) => a.localeCompare(b));\n\t\t\tfor (const [source, paths] of sortedPackages) {\n\t\t\t\tlines.push(` ${theme.fg(\"mdLink\", source)}`);\n\t\t\t\tconst sortedPackagePaths = [...paths].sort((a, b) => a.localeCompare(b));\n\t\t\t\tfor (const p of sortedPackagePaths) {\n\t\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPackagePath(p, source)}`));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\t/**\n\t * Find metadata for a path, checking parent directories if exact match fails.\n\t * Package manager stores metadata for directories, but we display file paths.\n\t */\n\tprivate findMetadata(\n\t\tp: string,\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): { source: string; scope: string; origin: string } | undefined {\n\t\t// Try exact match first\n\t\tconst exact = metadata.get(p);\n\t\tif (exact) return exact;\n\n\t\t// Try parent directories (package manager stores directory paths)\n\t\tlet current = p;\n\t\twhile (current.includes(\"/\")) {\n\t\t\tcurrent = current.substring(0, current.lastIndexOf(\"/\"));\n\t\t\tconst parent = metadata.get(current);\n\t\t\tif (parent) return parent;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Format a path with its source/scope info from metadata.\n\t */\n\tprivate formatPathWithSource(\n\t\tp: string,\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): string {\n\t\tconst meta = this.findMetadata(p, metadata);\n\t\tif (meta) {\n\t\t\tconst shortPath = this.getShortPath(p, meta.source);\n\t\t\tconst { label, scopeLabel } = this.getDisplaySourceInfo(meta.source, meta.scope);\n\t\t\tconst labelText = scopeLabel ? `${label} (${scopeLabel})` : label;\n\t\t\treturn `${labelText} ${shortPath}`;\n\t\t}\n\t\treturn this.formatDisplayPath(p);\n\t}\n\n\t/**\n\t * Format resource diagnostics with nice collision display using metadata.\n\t */\n\tprivate formatDiagnostics(\n\t\tdiagnostics: readonly ResourceDiagnostic[],\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): string {\n\t\tconst lines: string[] = [];\n\n\t\t// Group collision diagnostics by name\n\t\tconst collisions = new Map<string, ResourceDiagnostic[]>();\n\t\tconst otherDiagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const d of diagnostics) {\n\t\t\tif (d.type === \"collision\" && d.collision) {\n\t\t\t\tconst list = collisions.get(d.collision.name) ?? [];\n\t\t\t\tlist.push(d);\n\t\t\t\tcollisions.set(d.collision.name, list);\n\t\t\t} else {\n\t\t\t\totherDiagnostics.push(d);\n\t\t\t}\n\t\t}\n\n\t\t// Format collision diagnostics grouped by name\n\t\tfor (const [name, collisionList] of collisions) {\n\t\t\tconst first = collisionList[0]?.collision;\n\t\t\tif (!first) continue;\n\t\t\tlines.push(theme.fg(\"warning\", ` \"${name}\" collision:`));\n\t\t\t// Show winner\n\t\t\tlines.push(\n\t\t\t\ttheme.fg(\"dim\", ` ${theme.fg(\"success\", \"✓\")} ${this.formatPathWithSource(first.winnerPath, metadata)}`),\n\t\t\t);\n\t\t\t// Show all losers\n\t\t\tfor (const d of collisionList) {\n\t\t\t\tif (d.collision) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t` ${theme.fg(\"warning\", \"✗\")} ${this.formatPathWithSource(d.collision.loserPath, metadata)} (skipped)`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Format other diagnostics (skill name collisions, parse errors, etc.)\n\t\tfor (const d of otherDiagnostics) {\n\t\t\tif (d.path) {\n\t\t\t\t// Use metadata-aware formatting for paths\n\t\t\t\tconst sourceInfo = this.formatPathWithSource(d.path, metadata);\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${sourceInfo}`));\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t} else {\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate showLoadedResources(options?: {\n\t\textensionPaths?: string[];\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t}): void {\n\t\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\n\t\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\t\tif (!showListing && !showDiagnostics) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst metadata = this.session.resourceLoader.getPathMetadata();\n\t\tconst sectionHeader = (name: string, color: ThemeColor = \"mdHeading\") => theme.fg(color, `[${name}]`);\n\n\t\tconst skillsResult = this.session.resourceLoader.getSkills();\n\t\tconst promptsResult = this.session.resourceLoader.getPrompts();\n\t\tconst themesResult = this.session.resourceLoader.getThemes();\n\t\tconst contextFiles = this.session.resourceLoader.getAgentsFiles().agentsFiles.filter((file) => {\n\t\t\tconst normalized = file.path.replace(/\\\\/g, \"/\");\n\t\t\tconst isIosmPlaybook = normalized.endsWith(\"/IOSM.md\");\n\t\t\tconst isAgentsPlaybook = normalized.endsWith(\"/AGENTS.md\");\n\t\t\tif (!isIosmPlaybook && !isAgentsPlaybook) return true;\n\t\t\treturn this.activeProfileName === \"iosm\" ? isIosmPlaybook : isAgentsPlaybook;\n\t\t});\n\t\tconst loadedThemes = themesResult.themes;\n\t\tconst customThemes = loadedThemes.filter((t) => t.sourcePath);\n\t\tconst extensionPaths = options?.extensionPaths ?? [];\n\n\t\tif (showListing) {\n\t\t\tconst summaryParts = [];\n\t\t\tif (contextFiles.length > 0) summaryParts.push(theme.fg(\"accent\", `${contextFiles.length} context`));\n\t\t\tif (skillsResult.skills.length > 0) summaryParts.push(theme.fg(\"accent\", `${skillsResult.skills.length} skills`));\n\t\t\tif (this.session.promptTemplates.length > 0) {\n\t\t\t\tsummaryParts.push(theme.fg(\"accent\", `${this.session.promptTemplates.length} prompts`));\n\t\t\t}\n\t\t\tif (extensionPaths.length > 0) summaryParts.push(theme.fg(\"accent\", `${extensionPaths.length} extensions`));\n\t\t\tif (customThemes.length > 0) summaryParts.push(theme.fg(\"accent\", `${customThemes.length} themes`));\n\t\t\tif (summaryParts.length > 0) {\n\t\t\t\t// Build compact resource block: summary + inline items\n\t\t\t\tconst lines: string[] = [];\n\t\t\t\tlines.push(\n\t\t\t\t\t`${theme.fg(\"dim\", \"resources\")} ${summaryParts.join(theme.fg(\"dim\", \" · \"))}`,\n\t\t\t\t);\n\n\t\t\t\t// Context: show file basenames inline\n\t\t\t\tif (contextFiles.length > 0) {\n\t\t\t\t\tconst names = contextFiles.map((f) => theme.fg(\"dim\", this.formatDisplayPath(f.path)));\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"ctx\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\t// Skills: show file basenames inline\n\t\t\t\tif (skillsResult.skills.length > 0) {\n\t\t\t\t\tconst names = skillsResult.skills.map((s) => {\n\t\t\t\t\t\tconst parts = s.filePath.replace(/\\\\/g, \"/\").split(\"/\");\n\t\t\t\t\t\t// Use the parent directory name as skill name (directory before SKILL.md)\n\t\t\t\t\t\tconst skillDir = parts[parts.length - 2] || parts[parts.length - 1];\n\t\t\t\t\t\treturn theme.fg(\"dim\", skillDir);\n\t\t\t\t\t});\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"ski\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\t// Prompts: show command names inline\n\t\t\t\tif (this.session.promptTemplates.length > 0) {\n\t\t\t\t\tconst names = this.session.promptTemplates.map((t) => theme.fg(\"dim\", `/${t.name}`));\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"cmd\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\t// Extensions: show basenames inline\n\t\t\t\tif (extensionPaths.length > 0) {\n\t\t\t\t\tconst names = extensionPaths.map((p) => theme.fg(\"dim\", this.formatDisplayPath(p)));\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"ext\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(new Text(lines.join(\"\\n\"), 0, 0));\n\t\t\t}\n\t\t}\n\n\t\tif (showDiagnostics) {\n\t\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\t\tif (skillDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Skill conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\t\tif (promptDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Prompt conflicts]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\n\t\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\n\t\t\tif (extensionErrors.length > 0) {\n\t\t\t\tfor (const error of extensionErrors) {\n\t\t\t\t\textensionDiagnostics.push({ type: \"error\", message: error.error, path: error.path });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst commandDiagnostics = this.session.extensionRunner?.getCommandDiagnostics() ?? [];\n\t\t\textensionDiagnostics.push(...commandDiagnostics);\n\n\t\t\tconst shortcutDiagnostics = this.session.extensionRunner?.getShortcutDiagnostics() ?? [];\n\t\t\textensionDiagnostics.push(...shortcutDiagnostics);\n\n\t\t\tif (extensionDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(extensionDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Extension issues]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\t\tif (themeDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Theme conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the extension system with TUI-based UI context.\n\t */\n\tprivate async initExtensions(): Promise<void> {\n\t\tconst uiContext = this.createExtensionUIContext();\n\t\tawait this.session.bindExtensions({\n\t\t\tuiContext,\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => this.session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => {\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\n\t\t\t\t\t// Delegate to AgentSession (handles setup + agent state sync)\n\t\t\t\t\tconst success = await this.session.newSession(options);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clear UI state\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.pendingMessagesContainer.clear();\n\t\t\t\t\tthis.compactionQueuedMessages = [];\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.pendingTools.clear();\n\n\t\t\t\t\t// Render any messages added via setup, or show empty session\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.ui.requestRender();\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tfork: async (entryId) => {\n\t\t\t\t\tconst result = await this.session.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.editor.setText(result.selectedText);\n\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await this.session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath) => {\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t\tif (!this.session.isStreaming) {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tthis.showExtensionError(error.extensionPath, error.error, error.stack);\n\t\t\t},\n\t\t});\n\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tthis.setupAutocomplete(this.fdPath);\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (!extensionRunner) {\n\t\t\tthis.showLoadedResources({ extensionPaths: [], force: false });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setupExtensionShortcuts(extensionRunner);\n\t\tthis.showLoadedResources({ extensionPaths: extensionRunner.getExtensionPaths(), force: false });\n\t}\n\n\t/**\n\t * Get a registered tool definition by name (for custom rendering).\n\t */\n\tprivate getRegisteredToolDefinition(toolName: string) {\n\t\tconst tools = this.session.extensionRunner?.getAllRegisteredTools() ?? [];\n\t\tconst registeredTool = tools.find((t) => t.definition.name === toolName);\n\t\treturn registeredTool?.definition;\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tprivate setupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tcwd: process.cwd(),\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tabort: () => this.session.abort(),\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.executeCompaction(options?.customInstructions, false);\n\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set an extension widget (string array or custom component).\n\t */\n\tprivate setExtensionWidget(\n\t\tkey: string,\n\t\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void {\n\t\tconst placement = options?.placement ?? \"aboveEditor\";\n\t\tconst removeExisting = (map: Map<string, Component & { dispose?(): void }>) => {\n\t\t\tconst existing = map.get(key);\n\t\t\tif (existing?.dispose) existing.dispose();\n\t\t\tmap.delete(key);\n\t\t};\n\n\t\tremoveExisting(this.extensionWidgetsAbove);\n\t\tremoveExisting(this.extensionWidgetsBelow);\n\n\t\tif (content === undefined) {\n\t\t\tthis.renderWidgets();\n\t\t\treturn;\n\t\t}\n\n\t\tlet component: Component & { dispose?(): void };\n\n\t\tif (Array.isArray(content)) {\n\t\t\t// Wrap string array in a Container with Text components\n\t\t\tconst container = new Container();\n\t\t\tfor (const line of content.slice(0, InteractiveMode.MAX_WIDGET_LINES)) {\n\t\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t\t}\n\t\t\tif (content.length > InteractiveMode.MAX_WIDGET_LINES) {\n\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t\t}\n\t\t\tcomponent = container;\n\t\t} else {\n\t\t\t// Factory function - create component\n\t\t\tcomponent = content(this.ui, theme);\n\t\t}\n\n\t\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\t\ttargetMap.set(key, component);\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate clearExtensionWidgets(): void {\n\t\tfor (const widget of this.extensionWidgetsAbove.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tfor (const widget of this.extensionWidgetsBelow.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tthis.extensionWidgetsAbove.clear();\n\t\tthis.extensionWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate resetExtensionUI(): void {\n\t\tif (this.extensionSelector) {\n\t\t\tthis.hideExtensionSelector();\n\t\t}\n\t\tif (this.extensionInput) {\n\t\t\tthis.hideExtensionInput();\n\t\t}\n\t\tif (this.extensionEditor) {\n\t\t\tthis.hideExtensionEditor();\n\t\t}\n\t\tthis.ui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.setExtensionFooter(undefined);\n\t\tthis.setExtensionHeader(undefined);\n\t\tthis.clearExtensionWidgets();\n\t\tthis.footerDataProvider.clearExtensionStatuses();\n\t\tthis.footer.invalidate();\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.updateTerminalTitle();\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.setMessage(\n\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Maximum total widget lines to prevent viewport overflow\n\tprivate static readonly MAX_WIDGET_LINES = 10;\n\n\t/**\n\t * Render all extension widgets to the widget container.\n\t */\n\tprivate renderWidgets(): void {\n\t\tif (!this.widgetContainerAbove || !this.widgetContainerBelow) return;\n\t\tthis.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);\n\t\tthis.renderWidgetContainer(this.widgetContainerBelow, this.extensionWidgetsBelow, false, false);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate renderWidgetContainer(\n\t\tcontainer: Container,\n\t\twidgets: Map<string, Component & { dispose?(): void }>,\n\t\tspacerWhenEmpty: boolean,\n\t\tleadingSpacer: boolean,\n\t): void {\n\t\tcontainer.clear();\n\n\t\tif (widgets.size === 0) {\n\t\t\tif (spacerWhenEmpty) {\n\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (leadingSpacer) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tfor (const component of widgets.values()) {\n\t\t\tcontainer.addChild(component);\n\t\t}\n\t}\n\n\t/**\n\t * Set a custom footer component, or restore the built-in footer.\n\t */\n\tprivate setExtensionFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void {\n\t\t// Dispose existing custom footer\n\t\tif (this.customFooter?.dispose) {\n\t\t\tthis.customFooter.dispose();\n\t\t}\n\n\t\t// Remove current footer from UI\n\t\tif (this.customFooter) {\n\t\t\tthis.ui.removeChild(this.customFooter);\n\t\t} else {\n\t\t\tthis.ui.removeChild(this.footer);\n\t\t}\n\n\t\tif (factory) {\n\t\t\t// Create and add custom footer, passing the data provider\n\t\t\tthis.customFooter = factory(this.ui, theme, this.footerDataProvider);\n\t\t\tthis.ui.addChild(this.customFooter);\n\t\t} else {\n\t\t\t// Restore built-in footer\n\t\t\tthis.customFooter = undefined;\n\t\t\tthis.ui.addChild(this.footer);\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom header component, or restore the built-in header.\n\t */\n\tprivate setExtensionHeader(factory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined): void {\n\t\t// Header may not be initialized yet if called during early initialization\n\t\tif (!this.builtInHeader) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Dispose existing custom header\n\t\tif (this.customHeader?.dispose) {\n\t\t\tthis.customHeader.dispose();\n\t\t}\n\n\t\t// Find the index of the current header in the header container\n\t\tconst currentHeader = this.customHeader || this.builtInHeader;\n\t\tconst index = this.headerContainer.children.indexOf(currentHeader);\n\n\t\tif (factory) {\n\t\t\t// Create and add custom header\n\t\t\tthis.customHeader = factory(this.ui, theme);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.customHeader;\n\t\t\t} else {\n\t\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\t\tthis.headerContainer.children.unshift(this.customHeader);\n\t\t\t}\n\t\t} else {\n\t\t\t// Restore built-in header\n\t\t\tthis.customHeader = undefined;\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.builtInHeader;\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tprivate clearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tprivate createExtensionUIContext(): ExtensionUIContext {\n\t\treturn {\n\t\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetWorkingMessage: (message) => this.setWorkingMessage(message),\n\t\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\t\tgetEditorText: () => this.editor.getText(),\n\t\t\teditor: (title, prefill) => this.showExtensionEditor(title, prefill),\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tprivate showExtensionSelector(\n\t\ttitle: string,\n\t\toptions: string[],\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionSelector = new ExtensionSelectorComponent(\n\t\t\t\ttitle,\n\t\t\t\toptions,\n\t\t\t\t(option) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(option);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionSelector);\n\t\t\tthis.ui.setFocus(this.extensionSelector);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\tprivate hideExtensionSelector(): void {\n\t\tthis.extensionSelector?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionSelector = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tprivate async showExtensionConfirm(\n\t\ttitle: string,\n\t\tmessage: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<boolean> {\n\t\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts);\n\t\treturn result === \"Yes\";\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tprivate showExtensionInput(\n\t\ttitle: string,\n\t\tplaceholder?: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionInput();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionInput = new ExtensionInputComponent(\n\t\t\t\ttitle,\n\t\t\t\tplaceholder,\n\t\t\t\t(value) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionInput);\n\t\t\tthis.ui.setFocus(this.extensionInput);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\tprivate hideExtensionInput(): void {\n\t\tthis.extensionInput?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionInput = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tprivate showExtensionEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.extensionEditor = new ExtensionEditorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.keybindings,\n\t\t\t\ttitle,\n\t\t\t\tprefill,\n\t\t\t\t(value) => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionEditor);\n\t\t\tthis.ui.setFocus(this.extensionEditor);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\tprivate hideExtensionEditor(): void {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionEditor = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(\n\t\tfactory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent) | undefined,\n\t): void {\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.editor.getText();\n\n\t\tthis.editorContainer.clear();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.editor = newEditor;\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.defaultEditor.setText(currentText);\n\t\t\tthis.editor = this.defaultEditor;\n\t\t}\n\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.ui.setFocus(this.editor as Component);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.showWarning(message);\n\t\t} else {\n\t\t\tthis.showStatus(message);\n\t\t}\n\t}\n\n\t/** Show a custom component with keyboard focus. Overlay mode renders on top of existing content. */\n\tprivate async showExtensionCustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: {\n\t\t\toverlay?: boolean;\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t},\n\t): Promise<T> {\n\t\tconst savedText = this.editor.getText();\n\t\tconst isOverlay = options?.overlay ?? false;\n\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.editor.setText(savedText);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet component: Component & { dispose?(): void };\n\t\t\tlet closed = false;\n\n\t\t\tconst close = (result: T) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tif (isOverlay) this.ui.hideOverlay();\n\t\t\t\telse restoreEditor();\n\t\t\t\t// Note: both branches above already call requestRender\n\t\t\t\tresolve(result);\n\t\t\t\ttry {\n\t\t\t\t\tcomponent?.dispose?.();\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tPromise.resolve(factory(this.ui, theme, this.keybindings, close))\n\t\t\t\t.then((c) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tcomponent = c;\n\t\t\t\t\tif (isOverlay) {\n\t\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\t\tconst w = (component as { width?: number }).width;\n\t\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst handle = this.ui.showOverlay(component, resolveOptions());\n\t\t\t\t\t\t// Expose handle to caller for visibility control\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\t\tthis.editorContainer.addChild(component);\n\t\t\t\t\t\tthis.ui.setFocus(component);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tif (!isOverlay) restoreEditor();\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tprivate showExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Key Handlers\n\t// =========================================================================\n\n\tprivate setupKeyHandlers(): void {\n\t\t// Set up handlers on defaultEditor - they use this.editor for text access\n\t\t// so they work correctly regardless of which editor is active\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tconst queuedMessages = this.getAllQueuedMessages();\n\t\t\tconst queuedMeta = queuedMessages.meta ?? [];\n\t\t\tconst hasInterruptibleWork =\n\t\t\t\tthis.session.isStreaming ||\n\t\t\t\tthis.session.isBashRunning ||\n\t\t\t\tthis.session.isCompacting ||\n\t\t\t\tthis.session.isRetrying ||\n\t\t\t\tthis.iosmAutomationRun !== undefined ||\n\t\t\t\tthis.iosmVerificationSession !== undefined ||\n\t\t\t\tqueuedMessages.steering.length > 0 ||\n\t\t\t\tqueuedMessages.followUp.length > 0 ||\n\t\t\t\tqueuedMeta.length > 0;\n\n\t\t\tif (hasInterruptibleWork) {\n\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t} else if (this.isBashMode) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t} else if (!this.editor.getText().trim()) {\n\t\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action !== \"none\") {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - this.lastEscapeTime < 500) {\n\t\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.lastEscapeTime = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastEscapeTime = now;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Register app action handlers\n\t\tthis.defaultEditor.onAction(\"clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onAction(\"suspend\", () => this.handleCtrlZ());\n\t\tthis.defaultEditor.onAction(\"cycleProfile\", () => this.cycleProfile(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"cycleThinkingLevel\", () => this.cycleThinkingLevel());\n\t\tthis.defaultEditor.onAction(\"cycleModelForward\", () => this.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"cycleModelBackward\", () => this.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.handleDebugCommand();\n\t\tthis.defaultEditor.onAction(\"selectModel\", () => {\n\t\t\tvoid this.showModelProviderSelector();\n\t\t});\n\t\tthis.defaultEditor.onAction(\"expandTools\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"toggleThinking\", () => this.toggleThinkingBlockVisibility());\n\t\tthis.defaultEditor.onAction(\"externalEditor\", () => this.openExternalEditor());\n\t\tthis.defaultEditor.onAction(\"steer\", () => this.handleSteer());\n\t\tthis.defaultEditor.onAction(\"followUp\", () => this.handleFollowUp());\n\t\tthis.defaultEditor.onAction(\"dequeue\", () => this.handleDequeue());\n\t\tthis.defaultEditor.onAction(\"newSession\", () => this.handleClearCommand());\n\t\tthis.defaultEditor.onAction(\"tree\", () => this.showTreeSelector());\n\t\tthis.defaultEditor.onAction(\"fork\", () => this.showUserMessageSelector());\n\t\tthis.defaultEditor.onAction(\"resume\", () => this.showSessionSelector());\n\n\t\tthis.defaultEditor.onChange = (text: string) => {\n\t\t\tconst wasBashMode = this.isBashMode;\n\t\t\tthis.isBashMode = text.trimStart().startsWith(\"!\");\n\t\t\tif (wasBashMode !== this.isBashMode) {\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t}\n\t\t};\n\n\t\t// Handle clipboard image paste (triggered on Ctrl+V)\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tthis.handleClipboardImagePaste();\n\t\t};\n\t}\n\n\tprivate async handleClipboardImagePaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (!image) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write to temp file\n\t\t\tconst tmpDir = os.tmpdir();\n\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\tconst fileName = `iosm-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t// Insert file path directly\n\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\tthis.ui.requestRender();\n\t\t} catch {\n\t\t\t// Silently ignore clipboard errors (may not have permission, etc.)\n\t\t}\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tthis.defaultEditor.onSubmit = async (text: string) => {\n\t\t\ttext = text.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle commands\n\t\t\tif (text === \"/init\" || text.startsWith(\"/init \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmInitSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/iosm\" || text.startsWith(\"/iosm \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmAutomationSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/orchestrate\" || text.startsWith(\"/orchestrate \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleOrchestrateSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/agents\" || text.startsWith(\"/agents \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleAgentsSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/subagent-runs\" || text.startsWith(\"/subagent-runs \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleSubagentRunsSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/subagent-resume\" || text.startsWith(\"/subagent-resume \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleSubagentResumeSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/team-runs\" || text.startsWith(\"/team-runs \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleTeamRunsSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/team-status\" || text.startsWith(\"/team-status \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleTeamStatusSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-list\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleIosmCycleListSlashCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-plan\" || text.startsWith(\"/cycle-plan \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmCyclePlanSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-report\" || text.startsWith(\"/cycle-report \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmCycleReportSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-status\" || text.startsWith(\"/cycle-status \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmCycleStatusSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/mcp\" || text.startsWith(\"/mcp \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleMcpSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/memory\" || text.startsWith(\"/memory \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleMemoryCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/settings\") {\n\t\t\t\tthis.showSettingsSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/permissions\" || text.startsWith(\"/permissions \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handlePermissionsCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/yolo\" || text.startsWith(\"/yolo \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleYoloCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/scoped-models\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.showModelsSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/model\" || text.startsWith(\"/model \")) {\n\t\t\t\tconst searchTerm = text.startsWith(\"/model \") ? text.slice(7).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleModelCommand(searchTerm);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text.startsWith(\"/export\")) {\n\t\t\t\tawait this.handleExportCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/share\") {\n\t\t\t\tawait this.handleShareCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/copy\") {\n\t\t\t\tthis.handleCopyCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/name\" || text.startsWith(\"/name \")) {\n\t\t\t\tthis.handleNameCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/session\") {\n\t\t\t\tthis.handleSessionCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/doctor\" || text.startsWith(\"/doctor \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleDoctorCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/checkpoint\" || text.startsWith(\"/checkpoint \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleCheckpointCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/rollback\" || text.startsWith(\"/rollback \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleRollbackCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/changelog\") {\n\t\t\t\tthis.handleChangelogCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/hotkeys\") {\n\t\t\t\tthis.handleHotkeysCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/fork\") {\n\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/tree\") {\n\t\t\t\tthis.showTreeSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/login\" || text === \"/auth\" || text.startsWith(\"/auth \")) {\n\t\t\t\tthis.showOAuthSelector(\"login\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/logout\") {\n\t\t\t\tthis.showOAuthSelector(\"logout\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/new\" || text === \"/clear\" || text.startsWith(\"/clear \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleClearCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/compact\" || text.startsWith(\"/compact \")) {\n\t\t\t\tconst customInstructions = text.startsWith(\"/compact \") ? text.slice(9).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleCompactCommand(customInstructions);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/reload\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/debug\") {\n\t\t\t\tthis.handleDebugCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/arminsayshi\") {\n\t\t\t\tthis.handleArminSaysHi();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/resume\") {\n\t\t\t\tthis.showSessionSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/quit\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.shutdown();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Soft first-run gate: require model selection before normal chat/bash input.\n\t\t\t// Slash commands remain available so the user can run /model, /login, /init, etc.\n\t\t\tif (!this.session.model && !text.startsWith(\"/\")) {\n\t\t\t\tthis.showWarning(\"Select a model first with /model (or configure auth with /login).\");\n\t\t\t\tawait this.showModelProviderSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\t\tif (text.startsWith(\"!\")) {\n\t\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\t\tif (command) {\n\t\t\t\t\tif (this.session.isBashRunning) {\n\t\t\t\t\t\tthis.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tawait this.handleBashCommand(command, isExcluded);\n\t\t\t\t\tthis.isBashMode = false;\n\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Queue input during compaction (extension commands execute immediately)\n\t\t\tif (this.session.isCompacting) {\n\t\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\t\tawait this.session.prompt(text);\n\t\t\t\t} else {\n\t\t\t\t\tthis.queueCompactionMessage(text, this.session.streamInputMode);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If streaming, use configured stream input mode (meta/followUp/steer)\n\t\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text, { streamingBehavior: this.session.streamInputMode });\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normal message submission\n\t\t\t// First, move any pending bash components to chat\n\t\t\tthis.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\n\t}\n\n\tprivate async handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\tif (!this.isInitialized) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tthis.footer.invalidate();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t}\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tthis.loadingAnimation = new DecryptLoader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tthis.defaultWorkingMessage,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t// Apply any pending working message queued before loader existed\n\t\t\t\tif (this.pendingWorkingMessage !== undefined) {\n\t\t\t\t\tif (this.pendingWorkingMessage) {\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(this.pendingWorkingMessage);\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingWorkingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_start\":\n\t\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\t\tthis.activeAssistantOrchestrationContext = this.pendingAssistantOrchestrationContexts > 0;\n\t\t\t\t\tif (this.activeAssistantOrchestrationContext) {\n\t\t\t\t\t\tthis.pendingAssistantOrchestrationContexts -= 1;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_update\":\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\n\t\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\t\tif (content.name === \"task\") {\n\t\t\t\t\t\t\t\tconst staleTaskComponent = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (staleTaskComponent) {\n\t\t\t\t\t\t\t\t\tthis.chatContainer.removeChild(staleTaskComponent);\n\t\t\t\t\t\t\t\t\tthis.pendingTools.delete(content.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_end\":\n\t\t\t\tif (event.message.role === \"user\") break;\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.activeAssistantOrchestrationContext = false;\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"tool_execution_start\": {\n\t\t\t\tif (event.toolName === \"task\" && !this.subagentComponents.has(event.toolCallId)) {\n\t\t\t\t\tconst staleTaskComponent = this.pendingTools.get(event.toolCallId);\n\t\t\t\t\tif (staleTaskComponent) {\n\t\t\t\t\t\tthis.chatContainer.removeChild(staleTaskComponent);\n\t\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\t}\n\t\t\t\t\tconst args = event.args as {\n\t\t\t\t\t\tdescription?: string;\n\t\t\t\t\t\tprofile?: string;\n\t\t\t\t\t\tprompt?: string;\n\t\t\t\t\t\tcwd?: string;\n\t\t\t\t\t\tlock_key?: string;\n\t\t\t\t\t\tagent?: string;\n\t\t\t\t\t\tisolation?: \"none\" | \"worktree\";\n\t\t\t\t\t};\n\t\t\t\t\tconst description = args.description ?? \"Running subtask\";\n\t\t\t\t\tconst info: SubagentInfo = {\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tprofile: args.profile ?? \"explore\",\n\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\tphase: \"starting subagent\",\n\t\t\t\t\t\tphaseState: \"starting\",\n\t\t\t\t\t\tcwd: args.cwd,\n\t\t\t\t\t\tagent: args.agent,\n\t\t\t\t\t\tlockKey: args.lock_key,\n\t\t\t\t\t\tisolation: args.isolation,\n\t\t\t\t\t\ttoolCallsStarted: 0,\n\t\t\t\t\t\ttoolCallsCompleted: 0,\n\t\t\t\t\t\tassistantMessages: 0,\n\t\t\t\t\t};\n\t\t\t\t\tconst component = new SubagentMessageComponent(info);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\tthis.subagentComponents.set(event.toolCallId, {\n\t\t\t\t\t\tcomponent,\n\t\t\t\t\t\tstartTime: Date.now(),\n\t\t\t\t\t\tprofile: info.profile,\n\t\t\t\t\t\tdescription: info.description,\n\t\t\t\t\t\tcwd: info.cwd,\n\t\t\t\t\t\tagent: info.agent,\n\t\t\t\t\t\tlockKey: info.lockKey,\n\t\t\t\t\t\tisolation: info.isolation,\n\t\t\t\t\t\tphase: info.phase,\n\t\t\t\t\t\tphaseState: info.phaseState,\n\t\t\t\t\t\tactiveTool: info.activeTool,\n\t\t\t\t\t\ttoolCallsStarted: info.toolCallsStarted ?? 0,\n\t\t\t\t\t\ttoolCallsCompleted: info.toolCallsCompleted ?? 0,\n\t\t\t\t\t\tassistantMessages: info.assistantMessages ?? 0,\n\t\t\t\t\t\tdelegatedTasks: info.delegatedTasks,\n\t\t\t\t\t\tdelegatedSucceeded: info.delegatedSucceeded,\n\t\t\t\t\t\tdelegatedFailed: info.delegatedFailed,\n\t\t\t\t\t\tdelegateIndex: info.delegateIndex,\n\t\t\t\t\t\tdelegateTotal: info.delegateTotal,\n\t\t\t\t\t\tdelegateDescription: info.delegateDescription,\n\t\t\t\t\t\tdelegateProfile: info.delegateProfile,\n\t\t\t\t\t\tdelegateItems: info.delegateItems,\n\t\t\t\t\t});\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.toolName !== \"task\" && !this.pendingTools.has(event.toolCallId)) {\n\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst subagent = this.subagentComponents.get(event.toolCallId);\n\t\t\t\tif (subagent) {\n\t\t\t\t\tconst partialResult = event.partialResult as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\tdetails?: Record<string, unknown>;\n\t\t\t\t\t\t\tcontent?: Array<{ type?: string; text?: string }>;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst progressCandidate = partialResult?.details?.progress;\n\t\t\t\t\tconst progress =\n\t\t\t\t\t\tprogressCandidate && typeof progressCandidate === \"object\"\n\t\t\t\t\t\t\t? (progressCandidate as Record<string, unknown>)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tif (progress) {\n\t\t\t\t\t\tconst phaseText = typeof progress.message === \"string\" ? progress.message.trim() : undefined;\n\t\t\t\t\t\tconst phaseState = isSubagentPhaseState(progress.phase) ? progress.phase : undefined;\n\t\t\t\t\t\tif (phaseText && phaseText.length > 0) {\n\t\t\t\t\t\t\tsubagent.phase = phaseText;\n\t\t\t\t\t\t} else if (phaseState) {\n\t\t\t\t\t\t\tsubagent.phase = phaseState;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (phaseState) {\n\t\t\t\t\t\t\tsubagent.phaseState = phaseState;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.cwd === \"string\") {\n\t\t\t\t\t\t\tsubagent.cwd = progress.cwd;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"activeTool\" in progress) {\n\t\t\t\t\t\t\tsubagent.activeTool =\n\t\t\t\t\t\t\t\ttypeof progress.activeTool === \"string\" && progress.activeTool.trim().length > 0\n\t\t\t\t\t\t\t\t\t? progress.activeTool\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.toolCallsStarted === \"number\") {\n\t\t\t\t\t\t\tsubagent.toolCallsStarted = progress.toolCallsStarted;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.toolCallsCompleted === \"number\") {\n\t\t\t\t\t\t\tsubagent.toolCallsCompleted = progress.toolCallsCompleted;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.assistantMessages === \"number\") {\n\t\t\t\t\t\t\tsubagent.assistantMessages = progress.assistantMessages;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateIndex\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateIndex =\n\t\t\t\t\t\t\t\ttypeof progress.delegateIndex === \"number\" && progress.delegateIndex > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateIndex\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateTotal\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateTotal =\n\t\t\t\t\t\t\t\ttypeof progress.delegateTotal === \"number\" && progress.delegateTotal > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateTotal\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateDescription\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateDescription =\n\t\t\t\t\t\t\t\ttypeof progress.delegateDescription === \"string\" && progress.delegateDescription.trim().length > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateDescription.trim()\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateProfile\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateProfile =\n\t\t\t\t\t\t\t\ttypeof progress.delegateProfile === \"string\" && progress.delegateProfile.trim().length > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateProfile.trim()\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateItems\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateItems = parseSubagentDelegateItems(progress.delegateItems);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst text = partialResult?.content?.find((item) => item.type === \"text\")?.text;\n\t\t\t\t\t\tif (typeof text === \"string\" && text.trim().length > 0) {\n\t\t\t\t\t\t\tsubagent.phase = text.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsubagent.component.update({\n\t\t\t\t\t\tdescription: subagent.description,\n\t\t\t\t\t\tprofile: subagent.profile,\n\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\tphase: subagent.phase ?? \"running\",\n\t\t\t\t\t\tphaseState: subagent.phaseState,\n\t\t\t\t\t\tcwd: subagent.cwd,\n\t\t\t\t\t\tagent: subagent.agent,\n\t\t\t\t\t\tlockKey: subagent.lockKey,\n\t\t\t\t\t\tisolation: subagent.isolation,\n\t\t\t\t\t\tactiveTool: subagent.activeTool,\n\t\t\t\t\t\ttoolCallsStarted: subagent.toolCallsStarted,\n\t\t\t\t\t\ttoolCallsCompleted: subagent.toolCallsCompleted,\n\t\t\t\t\t\tassistantMessages: subagent.assistantMessages,\n\t\t\t\t\t\tdelegatedTasks: subagent.delegatedTasks,\n\t\t\t\t\t\tdelegatedSucceeded: subagent.delegatedSucceeded,\n\t\t\t\t\t\tdelegatedFailed: subagent.delegatedFailed,\n\t\t\t\t\t\tdelegateIndex: subagent.delegateIndex,\n\t\t\t\t\t\tdelegateTotal: subagent.delegateTotal,\n\t\t\t\t\t\tdelegateDescription: subagent.delegateDescription,\n\t\t\t\t\t\tdelegateProfile: subagent.delegateProfile,\n\t\t\t\t\t\tdelegateItems: subagent.delegateItems,\n\t\t\t\t\t});\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\t// Handle subagent (task tool) completion\n\t\t\t\tconst subagent = this.subagentComponents.get(event.toolCallId);\n\t\t\t\tif (subagent) {\n\t\t\t\t\tconst durationMs = Date.now() - subagent.startTime;\n\t\t\t\t\tconst details = event.result?.details as Record<string, unknown> | undefined;\n\t\t\t\t\tconst outputLength = typeof details?.outputLength === \"number\" ? details.outputLength : undefined;\n\t\t\t\t\tconst waitMs = typeof details?.waitMs === \"number\" ? details.waitMs : undefined;\n\t\t\t\t\tconst toolCallsStarted =\n\t\t\t\t\t\ttypeof details?.toolCallsStarted === \"number\"\n\t\t\t\t\t\t\t? details.toolCallsStarted\n\t\t\t\t\t\t\t: subagent.toolCallsStarted;\n\t\t\t\t\tconst toolCallsCompleted =\n\t\t\t\t\t\ttypeof details?.toolCallsCompleted === \"number\"\n\t\t\t\t\t\t\t? details.toolCallsCompleted\n\t\t\t\t\t\t\t: subagent.toolCallsCompleted;\n\t\t\t\t\tconst assistantMessages =\n\t\t\t\t\t\ttypeof details?.assistantMessages === \"number\"\n\t\t\t\t\t\t\t? details.assistantMessages\n\t\t\t\t\t\t\t: subagent.assistantMessages;\n\t\t\t\t\tconst delegatedTasks =\n\t\t\t\t\t\ttypeof details?.delegatedTasks === \"number\" ? details.delegatedTasks : subagent.delegatedTasks;\n\t\t\t\t\tconst delegatedSucceeded =\n\t\t\t\t\t\ttypeof details?.delegatedSucceeded === \"number\"\n\t\t\t\t\t\t\t? details.delegatedSucceeded\n\t\t\t\t\t\t\t: subagent.delegatedSucceeded;\n\t\t\t\t\tconst delegatedFailed =\n\t\t\t\t\t\ttypeof details?.delegatedFailed === \"number\" ? details.delegatedFailed : subagent.delegatedFailed;\n\t\t\t\t\tsubagent.delegatedTasks = delegatedTasks;\n\t\t\t\t\tsubagent.delegatedSucceeded = delegatedSucceeded;\n\t\t\t\t\tsubagent.delegatedFailed = delegatedFailed;\n\t\t\t\t\tsubagent.component.update({\n\t\t\t\t\t\tdescription: subagent.description,\n\t\t\t\t\t\tprofile: subagent.profile,\n\t\t\t\t\t\tstatus: event.isError ? \"error\" : \"done\",\n\t\t\t\t\t\toutputLength,\n\t\t\t\t\t\tdurationMs,\n\t\t\t\t\t\twaitMs,\n\t\t\t\t\t\tphaseState: subagent.phaseState,\n\t\t\t\t\t\tcwd: subagent.cwd,\n\t\t\t\t\t\tagent: subagent.agent,\n\t\t\t\t\t\tlockKey: subagent.lockKey,\n\t\t\t\t\t\tisolation: subagent.isolation,\n\t\t\t\t\t\ttoolCallsStarted,\n\t\t\t\t\t\ttoolCallsCompleted,\n\t\t\t\t\t\tassistantMessages,\n\t\t\t\t\t\tdelegatedTasks,\n\t\t\t\t\t\tdelegatedSucceeded,\n\t\t\t\t\t\tdelegatedFailed,\n\t\t\t\t\t\terrorMessage: event.isError\n\t\t\t\t\t\t\t? (event.result?.content?.[0] as { text?: string } | undefined)?.text ?? \"error\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tconst staleTaskComponent = this.pendingTools.get(event.toolCallId);\n\t\t\t\t\tif (staleTaskComponent) {\n\t\t\t\t\t\tthis.chatContainer.removeChild(staleTaskComponent);\n\t\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\t}\n\t\t\t\t\tthis.subagentComponents.delete(event.toolCallId);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"agent_end\":\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.pendingTools.clear();\n\t\t\t\tthis.subagentComponents.clear();\n\n\t\t\t\tawait this.checkShutdownRequested();\n\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"auto_compaction_start\": {\n\t\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t\t// Set up escape to abort auto-compaction\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t\t};\n\t\t\t\t// Show compacting indicator with reason\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst reasonText = event.reason === \"overflow\" ? \"Context overflow detected, \" : \"\";\n\t\t\t\tthis.autoCompactionLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t`${reasonText}Auto-compacting... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_compaction_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.autoCompactionEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Handle result\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\t// Rebuild chat to show compacted state\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\t\t\tthis.addMessageToChat({\n\t\t\t\t\t\trole: \"compactionSummary\",\n\t\t\t\t\t\ttokensBefore: event.result.tokensBefore,\n\t\t\t\t\t\tsummary: event.result.summary,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t});\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t} else if (event.errorMessage) {\n\t\t\t\t\t// Compaction failed (e.g., quota exceeded, API error)\n\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t}\n\t\t\t\tvoid this.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_start\": {\n\t\t\t\t// Set up escape to abort retry\n\t\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t\t};\n\t\t\t\t// Show retry indicator\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst delaySeconds = Math.round(event.delayMs / 1000);\n\t\t\t\tthis.retryLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${delaySeconds}s... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\t\tif (!event.success) {\n\t\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Extract text content from a user message */\n\tprivate getUserMessageText(message: Message): string {\n\t\tif (message.role !== \"user\") return \"\";\n\t\tconst textBlocks =\n\t\t\ttypeof message.content === \"string\"\n\t\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\t\tconst joined = textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n\t\tconst aliases = Array.isArray(this.pendingInternalUserDisplayAliases) ? this.pendingInternalUserDisplayAliases : [];\n\t\tconst aliasIndex = aliases.findIndex((item) => item.rawPrompt === joined);\n\t\tif (aliasIndex !== -1) {\n\t\t\tconst [alias] = aliases.splice(aliasIndex, 1);\n\t\t\treturn alias?.displayText ?? joined;\n\t\t}\n\t\treturn joined;\n\t}\n\n\tprivate handleInternalUiMetaMessage(message: AgentMessage): void {\n\t\tif (message.role !== \"custom\") return;\n\t\tif (message.customType !== INTERNAL_UI_META_CUSTOM_TYPE) return;\n\t\tif (!isInternalUiMetaDetails(message.details)) return;\n\t\tif (message.details.kind !== \"orchestration_context\") return;\n\n\t\tthis.pendingAssistantOrchestrationContexts += 1;\n\t\tif (message.details.rawPrompt && message.details.displayText) {\n\t\t\tthis.pendingInternalUserDisplayAliases.push({\n\t\t\t\trawPrompt: message.details.rawPrompt,\n\t\t\t\tdisplayText: message.details.displayText,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Show a status message in the chat.\n\t *\n\t * If multiple status messages are emitted back-to-back (without anything else being added to the chat),\n\t * we update the previous status line instead of appending new ones to avoid log spam.\n\t */\n\tprivate showStatus(message: string): void {\n\t\tconst children = this.chatContainer.children;\n\t\tconst last = children.length > 0 ? children[children.length - 1] : undefined;\n\t\tconst secondLast = children.length > 1 ? children[children.length - 2] : undefined;\n\n\t\tif (last && secondLast && last === this.lastStatusText && secondLast === this.lastStatusSpacer) {\n\t\t\tthis.lastStatusText.setText(theme.fg(\"dim\", message));\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tconst spacer = new Spacer(1);\n\t\tconst text = new Text(theme.fg(\"dim\", message), 1, 0);\n\t\tthis.chatContainer.addChild(spacer);\n\t\tthis.chatContainer.addChild(text);\n\t\tthis.lastStatusSpacer = spacer;\n\t\tthis.lastStatusText = text;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showProgressLine(message: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setWorkingMessage(message?: string): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tif (message) {\n\t\t\t\tthis.loadingAnimation.setMessage(message);\n\t\t\t} else {\n\t\t\t\tthis.loadingAnimation.setMessage(\n\t\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.pendingWorkingMessage = message;\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\tswitch (message.role) {\n\t\t\tcase \"bashExecution\": {\n\t\t\t\tconst component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);\n\t\t\t\tif (message.output) {\n\t\t\t\t\tcomponent.appendOutput(message.output);\n\t\t\t\t}\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessage.exitCode,\n\t\t\t\t\tmessage.cancelled,\n\t\t\t\t\tmessage.truncated ? ({ truncated: true } as TruncationResult) : undefined,\n\t\t\t\t\tmessage.fullOutputPath,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tthis.handleInternalUiMetaMessage(message);\n\t\t\t\tif (message.display) {\n\t\t\t\t\tif (message.customType === TASK_PLAN_CUSTOM_TYPE && isTaskPlanSnapshot(message.details)) {\n\t\t\t\t\t\tconst component = new TaskPlanMessageComponent(message.details);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst renderer = this.session.extensionRunner?.getMessageRenderer(message.customType);\n\t\t\t\t\t\tconst component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compactionSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branchSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst textContent = this.getUserMessageText(message);\n\t\t\t\tif (textContent) {\n\t\t\t\t\tconst skillBlock = parseSkillBlock(textContent);\n\t\t\t\t\tif (skillBlock) {\n\t\t\t\t\t\t// Render skill block (collapsible)\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tconst component = new SkillInvocationMessageComponent(\n\t\t\t\t\t\t\tskillBlock,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t// Render user message separately if present\n\t\t\t\t\t\tif (skillBlock.userMessage) {\n\t\t\t\t\t\t\tconst userComponent = new UserMessageComponent(\n\t\t\t\t\t\t\t\tskillBlock.userMessage,\n\t\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.populateHistory) {\n\t\t\t\t\t\tthis.editor.addToHistory?.(textContent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst hasOrchestrationContext = this.pendingAssistantOrchestrationContexts > 0;\n\t\t\t\tif (hasOrchestrationContext) {\n\t\t\t\t\tthis.pendingAssistantOrchestrationContexts -= 1;\n\t\t\t\t}\n\t\t\t\tconst previousOrchestrationContext = this.activeAssistantOrchestrationContext;\n\t\t\t\tthis.activeAssistantOrchestrationContext = hasOrchestrationContext;\n\t\t\t\tconst displayMessage = this.sanitizeAssistantDisplayMessage(message);\n\t\t\t\tthis.activeAssistantOrchestrationContext = previousOrchestrationContext;\n\t\t\t\tconst assistantComponent = new AssistantMessageComponent(\n\t\t\t\t\tdisplayMessage,\n\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(assistantComponent);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\t// Tool results are rendered inline with tool calls, handled separately\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render session context to chat. Used for initial load and rebuild after compaction.\n\t * @param sessionContext Session context to render\n\t * @param options.updateFooter Update footer state\n\t * @param options.populateHistory Add user messages to editor history\n\t */\n\tprivate renderSessionContext(\n\t\tsessionContext: SessionContext,\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\t\tthis.pendingInternalUserDisplayAliases = [];\n\t\tthis.pendingAssistantOrchestrationContexts = 0;\n\t\tthis.activeAssistantOrchestrationContext = false;\n\t\tconst pendingSubagentHistory = new Map<string, SubagentMessageComponent>();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tfor (const message of sessionContext.messages) {\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tthis.addMessageToChat(message);\n\t\t\t\t// Render tool call components\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tif (content.name === \"task\") {\n\t\t\t\t\t\t\tconst args = content.arguments as {\n\t\t\t\t\t\t\t\tdescription?: string;\n\t\t\t\t\t\t\t\tprofile?: string;\n\t\t\t\t\t\t\t\tcwd?: string;\n\t\t\t\t\t\t\t\tagent?: string;\n\t\t\t\t\t\t\t\tlock_key?: string;\n\t\t\t\t\t\t\t\tisolation?: \"none\" | \"worktree\";\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst subagent = new SubagentMessageComponent({\n\t\t\t\t\t\t\t\tdescription: args.description ?? \"Running subtask\",\n\t\t\t\t\t\t\t\tprofile: args.profile ?? \"explore\",\n\t\t\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\t\t\tcwd: args.cwd,\n\t\t\t\t\t\t\t\tagent: args.agent,\n\t\t\t\t\t\t\t\tlockKey: args.lock_key,\n\t\t\t\t\t\t\t\tisolation: args.isolation,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis.chatContainer.addChild(subagent);\n\t\t\t\t\t\t\tpendingSubagentHistory.set(content.id, subagent);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\n\t\t\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\t\t\tlet errorMessage: string;\n\t\t\t\t\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\terrorMessage = message.errorMessage || \"Error\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcomponent.updateResult({ content: [{ type: \"text\", text: errorMessage }], isError: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (message.role === \"toolResult\") {\n\t\t\t\tconst subagent = pendingSubagentHistory.get(message.toolCallId);\n\t\t\t\tif (subagent) {\n\t\t\t\t\tconst details = message.details as Record<string, unknown> | undefined;\n\t\t\t\t\tsubagent.update({\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\ttypeof details?.description === \"string\" ? details.description : \"Running subtask\",\n\t\t\t\t\t\tprofile: typeof details?.profile === \"string\" ? details.profile : \"explore\",\n\t\t\t\t\t\tstatus: message.isError ? \"error\" : \"done\",\n\t\t\t\t\t\toutputLength: typeof details?.outputLength === \"number\" ? details.outputLength : undefined,\n\t\t\t\t\t\twaitMs: typeof details?.waitMs === \"number\" ? details.waitMs : undefined,\n\t\t\t\t\t\ttoolCallsStarted: typeof details?.toolCallsStarted === \"number\" ? details.toolCallsStarted : undefined,\n\t\t\t\t\t\ttoolCallsCompleted:\n\t\t\t\t\t\t\ttypeof details?.toolCallsCompleted === \"number\" ? details.toolCallsCompleted : undefined,\n\t\t\t\t\t\tassistantMessages:\n\t\t\t\t\t\t\ttypeof details?.assistantMessages === \"number\" ? details.assistantMessages : undefined,\n\t\t\t\t\t\tdelegatedTasks: typeof details?.delegatedTasks === \"number\" ? details.delegatedTasks : undefined,\n\t\t\t\t\t\tdelegatedSucceeded:\n\t\t\t\t\t\t\ttypeof details?.delegatedSucceeded === \"number\" ? details.delegatedSucceeded : undefined,\n\t\t\t\t\t\tdelegatedFailed: typeof details?.delegatedFailed === \"number\" ? details.delegatedFailed : undefined,\n\t\t\t\t\t\terrorMessage: message.isError\n\t\t\t\t\t\t\t? (message.content?.[0] as { text?: string } | undefined)?.text ?? \"error\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tpendingSubagentHistory.delete(message.toolCallId);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Match tool results to pending tool components\n\t\t\t\tconst component = this.pendingTools.get(message.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult(message);\n\t\t\t\t\tthis.pendingTools.delete(message.toolCallId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// All other messages use standard rendering\n\t\t\t\tthis.addMessageToChat(message, options);\n\t\t\t}\n\t\t}\n\n\t\tthis.pendingTools.clear();\n\t\tthis.ui.requestRender();\n\t}\n\n\trenderInitialMessages(): void {\n\t\t// Get aligned messages and entries from session context\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.sessionManager.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tconst times = compactionCount === 1 ? \"1 time\" : `${compactionCount} times`;\n\t\t\tthis.showStatus(`Session compacted ${times}`);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.onInputCallback = (text: string) => {\n\t\t\t\tthis.onInputCallback = undefined;\n\t\t\t\tresolve(text);\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate rebuildChatFromMessages(): void {\n\t\tthis.chatContainer.clear();\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context);\n\t}\n\n\t// =========================================================================\n\t// Key handlers\n\t// =========================================================================\n\n\tprivate handleCtrlC(): void {\n\t\tconst now = Date.now();\n\t\tif (this.iosmAutomationRun) {\n\t\t\tif (this.iosmAutomationRun.cancelRequested && now - this.lastSigintTime < 500) {\n\t\t\t\tvoid this.shutdown();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.lastSigintTime = now;\n\t\t\tvoid this.interruptCurrentWork();\n\t\t\treturn;\n\t\t}\n\t\tif (now - this.lastSigintTime < 500) {\n\t\t\tvoid this.shutdown();\n\t\t} else {\n\t\t\tthis.clearEditor();\n\t\t\tthis.lastSigintTime = now;\n\t\t}\n\t}\n\n\tprivate handleCtrlD(): void {\n\t\t// Only called when editor is empty (enforced by CustomEditor)\n\t\tvoid this.shutdown();\n\t}\n\n\t/**\n\t * Gracefully shutdown the agent.\n\t * Emits shutdown event to extensions, then exits.\n\t */\n\tprivate isShuttingDown = false;\n\n\tprivate async shutdown(): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\n\t\t// Emit shutdown event to extensions\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (extensionRunner?.hasHandlers(\"session_shutdown\")) {\n\t\t\tawait extensionRunner.emit({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t});\n\t\t}\n\n\t\t// Wait for any pending renders to complete\n\t\t// requestRender() uses process.nextTick(), so we wait one tick\n\t\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\t\t// Drain any in-flight Kitty key release events before stopping.\n\t\t// This prevents escape sequences from leaking to the parent shell over slow SSH.\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.stop();\n\t\tprocess.exit(0);\n\t}\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t */\n\tprivate async checkShutdownRequested(): Promise<void> {\n\t\tif (!this.shutdownRequested) return;\n\t\tawait this.shutdown();\n\t}\n\n\tprivate handleCtrlZ(): void {\n\t\t// Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n\t\t// kill the backgrounded process. The handler is removed on resume.\n\t\tconst ignoreSigint = () => { };\n\t\tprocess.on(\"SIGINT\", ignoreSigint);\n\n\t\t// Set up handler to restore TUI when resumed\n\t\tprocess.once(\"SIGCONT\", () => {\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthis.ui.start();\n\t\t\tthis.ui.requestRender(true);\n\t\t});\n\n\t\t// Stop the TUI (restore terminal to normal mode)\n\t\tthis.ui.stop();\n\n\t\t// Send SIGTSTP to process group (pid=0 means all processes in group)\n\t\tprocess.kill(0, \"SIGTSTP\");\n\t}\n\n\tprivate async handleSteer(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.queueCompactionMessage(text, \"steer\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Dedicated steer shortcut always sends as steer while streaming\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, steer behaves like regular submit\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate async handleFollowUp(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.queueCompactionMessage(text, \"followUp\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Alt+Enter queues a follow-up message (waits until agent finishes)\n\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(\"No queued messages to restore\");\n\t\t} else {\n\t\t\tthis.showStatus(`Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`);\n\t\t}\n\t}\n\n\tprivate updateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.session.thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.session.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(\"Current model does not support thinking\");\n\t\t} else {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.showStatus(`Thinking level: ${newLevel}`);\n\t\t}\n\t}\n\n\tprivate applyProfile(profileName: AgentProfileName): void {\n\t\tconst profile = getAgentProfile(profileName);\n\t\tconst availableTools = new Set(this.session.getAllTools().map((tool) => tool.name));\n\t\tconst nextActiveTools = [...profile.tools];\n\t\tif (availableTools.has(\"task\")) nextActiveTools.push(\"task\");\n\t\tif (availableTools.has(\"todo_write\")) nextActiveTools.push(\"todo_write\");\n\t\tif (availableTools.has(\"todo_read\")) nextActiveTools.push(\"todo_read\");\n\t\tif (availableTools.has(\"ask_user\")) nextActiveTools.push(\"ask_user\");\n\n\t\tthis.session.setActiveToolsByName([...new Set(nextActiveTools)]);\n\t\tthis.session.setThinkingLevel(profile.thinkingLevel);\n\t\tthis.session.setSystemPromptSuffix(profile.systemPromptAppend || undefined);\n\t\tthis.session.setIosmAutopilotEnabled(profile.name === \"iosm\");\n\n\t\tthis.activeProfileName = profile.name;\n\t\tthis.footer.setActiveProfile(profile.name);\n\t\tthis.footer.setPlanMode(profile.name === \"plan\");\n\t\tthis.setupAutocomplete(this.fdPath);\n\t\tthis.footer.invalidate();\n\t\tthis.updateEditorBorderColor();\n\t\tthis.refreshBuiltInHeader();\n\t\tthis.showStatus(`Profile: ${profile.name}`);\n\t}\n\n\tprivate cycleProfile(direction: \"forward\" | \"backward\"): void {\n\t\tif (this.session.isStreaming || this.session.isCompacting || this.iosmAutomationRun || this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Wait for current work to finish before switching profile.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst names = getMainProfileNames();\n\t\tconst currentIndex = Math.max(0, names.indexOf(this.activeProfileName));\n\t\tconst delta = direction === \"forward\" ? 1 : -1;\n\t\tconst nextIndex = (currentIndex + delta + names.length) % names.length;\n\t\tthis.applyProfile(names[nextIndex]);\n\t}\n\n\tprivate async cycleModel(direction: \"forward\" | \"backward\"): Promise<void> {\n\t\ttry {\n\t\t\tconst result = await this.session.cycleModel(direction);\n\t\t\tif (result === undefined) {\n\t\t\t\tconst msg = this.session.scopedModels.length > 0 ? \"Only one model in scope\" : \"Only one model available\";\n\t\t\t\tthis.showStatus(msg);\n\t\t\t} else {\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.refreshBuiltInHeader();\n\t\t\t\tconst thinkingStr =\n\t\t\t\t\tresult.model.reasoning && result.thinkingLevel !== \"off\" ? ` (thinking: ${result.thinkingLevel})` : \"\";\n\t\t\t\tthis.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate toggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\tprivate setToolsExpanded(expanded: boolean): void {\n\t\tthis.toolOutputExpanded = expanded;\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (isExpandable(child)) {\n\t\t\t\tchild.setExpanded(expanded);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\n\t\t// Rebuild chat from session messages\n\t\tthis.chatContainer.clear();\n\t\tthis.rebuildChatFromMessages();\n\n\t\t// If streaming, re-add the streaming component with updated visibility and re-render\n\t\tif (this.streamingComponent && this.streamingMessage) {\n\t\t\tthis.streamingComponent.setHideThinkingBlock(this.hideThinkingBlock);\n\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t}\n\n\t\tthis.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? \"hidden\" : \"visible\"}`);\n\t}\n\n\tprivate openExternalEditor(): void {\n\t\t// Determine editor (respect $VISUAL, then $EDITOR)\n\t\tconst editorCmd = process.env.VISUAL || process.env.EDITOR;\n\t\tif (!editorCmd) {\n\t\t\tthis.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentText = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tconst tmpFile = path.join(os.tmpdir(), `${APP_NAME}-editor-${Date.now()}.${APP_NAME}.md`);\n\n\t\ttry {\n\t\t\t// Write current content to temp file\n\t\t\tfs.writeFileSync(tmpFile, currentText, \"utf-8\");\n\n\t\t\t// Stop TUI to release terminal\n\t\t\tthis.ui.stop();\n\n\t\t\t// Split by space to support editor arguments (e.g., \"code --wait\")\n\t\t\tconst [editor, ...editorArgs] = editorCmd.split(\" \");\n\n\t\t\t// Spawn editor synchronously with inherited stdio for interactive editing\n\t\t\tconst result = spawnSync(editor, [...editorArgs, tmpFile], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t});\n\n\t\t\t// On successful exit (status 0), replace editor content\n\t\t\tif (result.status === 0) {\n\t\t\t\tconst newContent = fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\");\n\t\t\t\tthis.editor.setText(newContent);\n\t\t\t}\n\t\t\t// On non-zero exit, keep original text (no action needed)\n\t\t} finally {\n\t\t\t// Clean up temp file\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\n\t\t\t// Restart TUI\n\t\t\tthis.ui.start();\n\t\t\t// Force full re-render since external editor uses alternate screen\n\t\t\tthis.ui.requestRender(true);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// UI helpers\n\t// =========================================================================\n\n\tclearEditor(): void {\n\t\tthis.editor.setText(\"\");\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowError(errorMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", `Error: ${errorMessage}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"warning\", `Warning: ${warningMessage}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowNewVersionNotification(newVersion: string): void {\n\t\tconst action = theme.fg(\"accent\", getUpdateInstruction(PACKAGE_NAME));\n\t\tconst updateInstruction = theme.fg(\"muted\", `New version ${newVersion} is available. `) + action;\n\t\tconst changelogLine = CHANGELOG_URL\n\t\t\t? theme.fg(\"muted\", \"Changelog: \") + theme.fg(\"accent\", CHANGELOG_URL)\n\t\t\t: theme.fg(\"muted\", \"Changelog: CHANGELOG.md\");\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Update Available\"))}\\n${updateInstruction}\\n${changelogLine}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Get all queued messages (read-only).\n\t * Combines session queue and compaction queue.\n\t */\n\tprivate getAllQueuedMessages(): { steering: string[]; followUp: string[]; meta: string[] } {\n\t\treturn {\n\t\t\tsteering: [\n\t\t\t\t...this.session.getSteeringMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"steer\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tfollowUp: [\n\t\t\t\t...this.session.getFollowUpMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"followUp\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tmeta: [\n\t\t\t\t...this.session.getMetaMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"meta\").map((msg) => msg.text),\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[]; meta: string[] } {\n\t\tconst { steering, followUp, meta } = this.session.clearQueue();\n\t\tconst compactionSteering = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"steer\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionFollowUp = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"followUp\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionMeta = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"meta\")\n\t\t\t.map((msg) => msg.text);\n\t\tthis.compactionQueuedMessages = [];\n\t\treturn {\n\t\t\tsteering: [...steering, ...compactionSteering],\n\t\t\tfollowUp: [...followUp, ...compactionFollowUp],\n\t\t\tmeta: [...meta, ...compactionMeta],\n\t\t};\n\t}\n\n\tprivate updatePendingMessagesDisplay(): void {\n\t\tconst bashComponents = [...this.pendingBashComponents];\n\t\tthis.pendingMessagesContainer.clear();\n\t\tconst {\n\t\t\tsteering: steeringMessages,\n\t\t\tfollowUp: followUpMessages,\n\t\t\tmeta: rawMetaMessages,\n\t\t} = this.getAllQueuedMessages();\n\t\tconst metaMessages = rawMetaMessages ?? [];\n\t\tconst totalQueued = steeringMessages.length + followUpMessages.length + metaMessages.length;\n\t\tif (totalQueued > 0 || bashComponents.length > 0) {\n\t\t\tthis.pendingMessagesContainer.addChild(new Spacer(1));\n\t\t\tif (totalQueued > 0) {\n\t\t\t\tconst summaryParts = [theme.bold(theme.fg(\"accent\", `Queue ${totalQueued}`))];\n\t\t\t\tif (metaMessages.length > 0) {\n\t\t\t\t\tsummaryParts.push(theme.fg(\"accent\", `${metaMessages.length} meta`));\n\t\t\t\t}\n\t\t\t\tif (steeringMessages.length > 0) {\n\t\t\t\t\tsummaryParts.push(theme.fg(\"accent\", `${steeringMessages.length} steer`));\n\t\t\t\t}\n\t\t\t\tif (followUpMessages.length > 0) {\n\t\t\t\t\tsummaryParts.push(theme.fg(\"warning\", `${followUpMessages.length} follow-up`));\n\t\t\t\t}\n\t\t\t\tthis.pendingMessagesContainer.addChild(\n\t\t\t\t\tnew TruncatedText(summaryParts.join(theme.fg(\"dim\", \" • \")), 1, 0),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfor (const message of steeringMessages) {\n\t\t\t\tconst text =\n\t\t\t\t\ttheme.fg(\"accent\", \"steer\") +\n\t\t\t\t\ttheme.fg(\"dim\", \" → \") +\n\t\t\t\t\tthis.previewPendingMessage(message);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of followUpMessages) {\n\t\t\t\tconst text =\n\t\t\t\t\ttheme.fg(\"warning\", \"follow-up\") +\n\t\t\t\t\ttheme.fg(\"dim\", \" → \") +\n\t\t\t\t\tthis.previewPendingMessage(message);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of metaMessages) {\n\t\t\t\tconst text =\n\t\t\t\t\ttheme.fg(\"accent\", \"meta\") +\n\t\t\t\t\ttheme.fg(\"dim\", \" → \") +\n\t\t\t\t\tthis.previewPendingMessage(message);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tconst metaAppliedStep = this.session?.metaAppliedStep ?? 0;\n\t\t\tif (metaAppliedStep > 0) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(\n\t\t\t\t\tnew TruncatedText(theme.fg(\"dim\", `meta applied at step ${metaAppliedStep}`), 1, 0),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (totalQueued > 0) {\n\t\t\t\tconst dequeueHint = this.getAppKeyDisplay(\"dequeue\");\n\t\t\t\tconst hintText = theme.fg(\"dim\", `↳ ${dequeueHint} to edit or restore the queued draft`);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n\t\t\t}\n\t\t\tif (bashComponents.length > 0) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(\n\t\t\t\t\tnew TruncatedText(theme.fg(\"muted\", `Pending bash ${bashComponents.length}`), 1, 0),\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const component of bashComponents) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(component);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate previewPendingMessage(message: string): string {\n\t\treturn theme.fg(\"muted\", message.replace(/\\s+/g, \" \").trim());\n\t}\n\n\tprivate async interruptCurrentWork(): Promise<boolean> {\n\t\tconst queuedMessages = this.getAllQueuedMessages();\n\t\tconst queuedMeta = queuedMessages.meta ?? [];\n\t\tconst hasPendingQueuedMessages =\n\t\t\tqueuedMessages.steering.length > 0 || queuedMessages.followUp.length > 0 || queuedMeta.length > 0;\n\t\tconst hasAutomationWork = this.iosmAutomationRun !== undefined;\n\t\tconst verificationSession = this.iosmVerificationSession;\n\t\tconst hasVerificationWork = verificationSession !== undefined;\n\t\tconst hasMainStreaming = this.session.isStreaming;\n\t\tconst hasRetryWork = this.session.isRetrying;\n\t\tconst hasCompactionWork = this.session.isCompacting;\n\t\tconst hasBashWork = this.session.isBashRunning;\n\n\t\tif (\n\t\t\t!hasPendingQueuedMessages &&\n\t\t\t!hasAutomationWork &&\n\t\t\t!hasVerificationWork &&\n\t\t\t!hasMainStreaming &&\n\t\t\t!hasRetryWork &&\n\t\t\t!hasCompactionWork &&\n\t\t\t!hasBashWork\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!hasMainStreaming && (hasBashWork || hasRetryWork || hasCompactionWork || hasPendingQueuedMessages)) {\n\t\t\tawait this.session.notifyStopHooks?.(\"interrupt\");\n\t\t}\n\n\t\tif (this.iosmAutomationRun) {\n\t\t\tthis.iosmAutomationRun.cancelRequested = true;\n\t\t}\n\t\tif (hasPendingQueuedMessages) {\n\t\t\tthis.restoreQueuedMessagesToEditor();\n\t\t} else {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t}\n\t\tif (hasBashWork) {\n\t\t\tthis.session.abortBash();\n\t\t}\n\t\tif (hasRetryWork) {\n\t\t\tthis.session.abortRetry();\n\t\t}\n\t\tif (hasCompactionWork) {\n\t\t\tthis.session.abortCompaction();\n\t\t\tthis.session.abortBranchSummary();\n\t\t}\n\n\t\tthis.showStatus(\n\t\t\thasAutomationWork\n\t\t\t\t? \"Stopping IOSM automation...\"\n\t\t\t\t: hasVerificationWork\n\t\t\t\t\t? \"Stopping IOSM verification...\"\n\t\t\t\t\t: \"Stopping current run...\",\n\t\t);\n\n\t\tconst abortPromises: Promise<unknown>[] = [];\n\t\tif (hasMainStreaming) {\n\t\t\tabortPromises.push(this.session.abort());\n\t\t}\n\t\tif (verificationSession) {\n\t\t\tabortPromises.push(verificationSession.abort());\n\t\t}\n\t\tif (abortPromises.length > 0) {\n\t\t\tawait Promise.allSettled(abortPromises);\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate restoreQueuedMessagesToEditor(options?: { abort?: boolean; currentText?: string }): number {\n\t\tconst { steering, followUp, meta } = this.clearAllQueues();\n\t\tconst allQueued = [...meta, ...steering, ...followUp];\n\t\tif (allQueued.length === 0) {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tif (options?.abort) {\n\t\t\t\tthis.agent.abort();\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tconst queuedText = allQueued.join(\"\\n\\n\");\n\t\tconst currentText = options?.currentText ?? this.editor.getText();\n\t\tconst combinedText = [queuedText, currentText].filter((t) => t.trim()).join(\"\\n\\n\");\n\t\tthis.editor.setText(combinedText);\n\t\tthis.updatePendingMessagesDisplay();\n\t\tif (options?.abort) {\n\t\t\tthis.agent.abort();\n\t\t}\n\t\treturn allQueued.length;\n\t}\n\n\tprivate queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\" | \"meta\"): void {\n\t\tthis.compactionQueuedMessages.push({ text, mode });\n\t\tthis.editor.addToHistory?.(text);\n\t\tthis.editor.setText(\"\");\n\t\tthis.updatePendingMessagesDisplay();\n\t\tthis.showStatus(\"Queued message for after compaction\");\n\t}\n\n\tprivate isExtensionCommand(text: string): boolean {\n\t\tif (!text.startsWith(\"/\")) return false;\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (!extensionRunner) return false;\n\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n\t\treturn !!extensionRunner.getCommand(commandName);\n\t}\n\n\tprivate async flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\tif (this.compactionQueuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queuedMessages = [...this.compactionQueuedMessages];\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.updatePendingMessagesDisplay();\n\n\t\tconst restoreQueue = (error: unknown) => {\n\t\t\tthis.session.clearQueue();\n\t\t\tthis.compactionQueuedMessages = queuedMessages;\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.showError(\n\t\t\t\t`Failed to send queued message${queuedMessages.length > 1 ? \"s\" : \"\"}: ${error instanceof Error ? error.message : String(error)\n\t\t\t\t}`,\n\t\t\t);\n\t\t};\n\n\t\ttry {\n\t\t\tif (options?.willRetry) {\n\t\t\t\t// When retry is pending, queue messages for the retry turn\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t\t} else if (message.mode === \"meta\") {\n\t\t\t\t\t\tawait this.session.meta(message.text);\n\t\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Find first non-extension-command message to use as prompt\n\t\t\tconst firstPromptIndex = queuedMessages.findIndex((message) => !this.isExtensionCommand(message.text));\n\t\t\tif (firstPromptIndex === -1) {\n\t\t\t\t// All extension commands - execute them all\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Execute any extension commands before the first prompt\n\t\t\tconst preCommands = queuedMessages.slice(0, firstPromptIndex);\n\t\t\tconst firstPrompt = queuedMessages[firstPromptIndex];\n\t\t\tconst rest = queuedMessages.slice(firstPromptIndex + 1);\n\n\t\t\tfor (const message of preCommands) {\n\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t}\n\n\t\t\t// Send first prompt (starts streaming)\n\t\t\tconst promptPromise = this.session.prompt(firstPrompt.text).catch((error) => {\n\t\t\t\trestoreQueue(error);\n\t\t\t});\n\n\t\t\t// Queue remaining messages\n\t\t\tfor (const message of rest) {\n\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t} else if (message.mode === \"meta\") {\n\t\t\t\t\tawait this.session.meta(message.text);\n\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tvoid promptPromise;\n\t\t} catch (error) {\n\t\t\trestoreQueue(error);\n\t\t}\n\t}\n\n\t/** Move pending bash components from pending area to chat */\n\tprivate flushPendingBashComponents(): void {\n\t\tfor (const component of this.pendingBashComponents) {\n\t\t\tthis.pendingMessagesContainer.removeChild(component);\n\t\t\tthis.chatContainer.addChild(component);\n\t\t}\n\t\tthis.pendingBashComponents = [];\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// =========================================================================\n\n\t/**\n\t * Shows a selector component in place of the editor.\n\t * @param create Factory that receives a `done` callback and returns the component and focus target\n\t */\n\tprivate showSelector(create: (done: () => void) => { component: Component; focus: Component }): void {\n\t\tconst done = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t};\n\t\tconst { component, focus } = create(done);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate syncMcpToolsWithSession(): void {\n\t\tif (!this.mcpRuntime) return;\n\t\tthis.session.setCustomTools(this.mcpRuntime.getToolDefinitions());\n\t\tthis.setupAutocomplete(this.fdPath);\n\t\tthis.refreshBuiltInHeader();\n\t}\n\n\tprivate async refreshMcpRuntimeAndSession(): Promise<void> {\n\t\tif (!this.mcpRuntime) return;\n\t\tawait this.mcpRuntime.refresh();\n\t\tthis.syncMcpToolsWithSession();\n\t\tconst errors = this.mcpRuntime.getErrors();\n\t\tif (errors.length > 0) {\n\t\t\tthis.showWarning(`MCP config warning: ${errors[0]}${errors.length > 1 ? ` (+${errors.length - 1} more)` : \"\"}`);\n\t\t}\n\t}\n\n\tprivate buildMcpStatusReport(statuses: ReturnType<McpRuntime[\"getServers\"]>): string {\n\t\tif (statuses.length === 0) {\n\t\t\treturn \"No MCP servers configured.\";\n\t\t}\n\t\tconst lines: string[] = [];\n\t\tfor (const status of statuses) {\n\t\t\tlines.push(\n\t\t\t\t`${status.name} · ${status.scope}/${status.transport} · ${status.enabled ? \"enabled\" : \"disabled\"} · state=${status.state} · tools=${status.toolCount}`,\n\t\t\t);\n\t\t\tif (status.error) {\n\t\t\t\tlines.push(` error: ${status.error}`);\n\t\t\t}\n\t\t\tfor (const tool of status.tools.slice(0, 8)) {\n\t\t\t\tconst alias = tool.name === tool.exposedName ? \"\" : ` -> ${tool.exposedName}`;\n\t\t\t\tlines.push(` - ${tool.name}${alias}`);\n\t\t\t}\n\t\t\tif (status.tools.length > 8) {\n\t\t\t\tlines.push(` ... ${status.tools.length - 8} more`);\n\t\t\t}\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate parseMcpKeyValueMapInput(raw: string): { value?: Record<string, string>; error?: string } {\n\t\tconst trimmed = raw.trim();\n\t\tif (!trimmed) {\n\t\t\treturn { value: undefined };\n\t\t}\n\t\tconst pairs = trimmed\n\t\t\t.split(\",\")\n\t\t\t.map((part) => part.trim())\n\t\t\t.filter((part) => part.length > 0);\n\n\t\tconst value: Record<string, string> = {};\n\t\tfor (const pair of pairs) {\n\t\t\tconst eqIndex = pair.indexOf(\"=\");\n\t\t\tif (eqIndex <= 0) {\n\t\t\t\treturn { error: `Invalid pair \"${pair}\". Use KEY=VALUE,KEY2=VALUE2` };\n\t\t\t}\n\t\t\tconst key = pair.slice(0, eqIndex).trim();\n\t\t\tconst entryValue = pair.slice(eqIndex + 1).trim();\n\t\t\tif (!key) {\n\t\t\t\treturn { error: `Invalid pair \"${pair}\". Key must not be empty.` };\n\t\t\t}\n\t\t\tvalue[key] = entryValue;\n\t\t}\n\t\treturn { value: Object.keys(value).length > 0 ? value : undefined };\n\t}\n\n\tprivate parseMcpCsvListInput(raw: string): string[] | undefined {\n\t\tconst trimmed = raw.trim();\n\t\tif (!trimmed) return undefined;\n\t\tconst items = trimmed\n\t\t\t.split(\",\")\n\t\t\t.map((item) => item.trim())\n\t\t\t.filter((item) => item.length > 0);\n\t\treturn items.length > 0 ? [...new Set(items)] : undefined;\n\t}\n\n\tprivate async runMcpAddWizard(initialName?: string): Promise<void> {\n\t\tif (!this.mcpRuntime) {\n\t\t\tthis.showWarning(\"MCP runtime is unavailable in this session.\");\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.refreshMcpRuntimeAndSession();\n\n\t\tlet name = initialName?.trim();\n\t\twhile (!name || !/^[a-zA-Z0-9._-]+$/.test(name)) {\n\t\t\tconst enteredName = await this.showExtensionInput(\"MCP Add: server name\", \"filesystem\");\n\t\t\tif (enteredName === undefined) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tname = enteredName.trim();\n\t\t\tif (!name) {\n\t\t\t\tthis.showWarning(\"Server name cannot be empty.\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!/^[a-zA-Z0-9._-]+$/.test(name)) {\n\t\t\t\tthis.showWarning('Use only letters, numbers, \".\", \"_\" or \"-\".');\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst existing = this.mcpRuntime.getServer(name);\n\t\tif (existing) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\n\t\t\t\t\"MCP Add\",\n\t\t\t\t`Server \"${name}\" already exists (${existing.scope}). Overwrite it?`,\n\t\t\t);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst scopeChoice = await this.showExtensionSelector(\"MCP Add: scope\", [\"project (Recommended)\", \"user\"]);\n\t\tif (!scopeChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconst scope: McpScope = scopeChoice.startsWith(\"user\") ? \"user\" : \"project\";\n\n\t\tconst transportChoice = await this.showExtensionSelector(\"MCP Add: transport\", [\n\t\t\t\"stdio (Recommended)\",\n\t\t\t\"http\",\n\t\t\t\"sse\",\n\t\t]);\n\t\tif (!transportChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconst transport = transportChoice.startsWith(\"http\")\n\t\t\t? \"http\"\n\t\t\t: transportChoice.startsWith(\"sse\")\n\t\t\t\t? \"sse\"\n\t\t\t\t: \"stdio\";\n\n\t\tconst config: McpServerConfig = {\n\t\t\ttransport,\n\t\t\tenabled: true,\n\t\t\ttrust: false,\n\t\t};\n\n\t\tif (transport === \"stdio\") {\n\t\t\twhile (!config.command) {\n\t\t\t\tconst commandLine = await this.showExtensionInput(\n\t\t\t\t\t\"MCP Add: stdio command\",\n\t\t\t\t\t\"npx -y @modelcontextprotocol/server-filesystem .\",\n\t\t\t\t);\n\t\t\t\tif (commandLine === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst tokens = this.parseSlashArgs(commandLine.trim());\n\t\t\t\tif (tokens.length === 0) {\n\t\t\t\t\tthis.showWarning(\"Command cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.command = tokens[0];\n\t\t\t\tconfig.args = tokens.slice(1);\n\t\t\t}\n\n\t\t\tconst cwdInput = await this.showExtensionInput(\n\t\t\t\t\"MCP Add: working directory (optional)\",\n\t\t\t\t\"leave blank to use current project\",\n\t\t\t);\n\t\t\tif (cwdInput === undefined) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cwdInput.trim()) {\n\t\t\t\tconfig.cwd = cwdInput.trim();\n\t\t\t}\n\n\t\t\twhile (true) {\n\t\t\t\tconst envInput = await this.showExtensionInput(\n\t\t\t\t\t\"MCP Add: env vars (optional)\",\n\t\t\t\t\t\"KEY=VALUE,API_TOKEN=${API_TOKEN}\",\n\t\t\t\t);\n\t\t\t\tif (envInput === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst parsed = this.parseMcpKeyValueMapInput(envInput);\n\t\t\t\tif (parsed.error) {\n\t\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.env = parsed.value;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\twhile (!config.url) {\n\t\t\t\tconst urlInput = await this.showExtensionInput(\n\t\t\t\t\t`MCP Add: ${transport.toUpperCase()} URL`,\n\t\t\t\t\ttransport === \"http\" ? \"https://example.com/mcp\" : \"https://example.com/sse\",\n\t\t\t\t);\n\t\t\t\tif (urlInput === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst candidate = urlInput.trim();\n\t\t\t\tif (!candidate) {\n\t\t\t\t\tthis.showWarning(\"URL cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.url = candidate;\n\t\t\t}\n\n\t\t\twhile (true) {\n\t\t\t\tconst headersInput = await this.showExtensionInput(\n\t\t\t\t\t\"MCP Add: headers (optional)\",\n\t\t\t\t\t\"Authorization=Bearer ${TOKEN}\",\n\t\t\t\t);\n\t\t\t\tif (headersInput === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst parsed = this.parseMcpKeyValueMapInput(headersInput);\n\t\t\t\tif (parsed.error) {\n\t\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.headers = parsed.value;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\twhile (true) {\n\t\t\tconst timeoutInput = await this.showExtensionInput(\"MCP Add: timeout ms (optional)\", \"30000\");\n\t\t\tif (timeoutInput === undefined) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst trimmed = timeoutInput.trim();\n\t\t\tif (!trimmed) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst timeoutMs = Number.parseInt(trimmed, 10);\n\t\t\tif (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n\t\t\t\tthis.showWarning(\"Timeout must be a positive integer (milliseconds).\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconfig.timeoutMs = timeoutMs;\n\t\t\tbreak;\n\t\t}\n\n\t\tconst includeToolsInput = await this.showExtensionInput(\n\t\t\t\"MCP Add: include tools (optional, CSV)\",\n\t\t\t\"toolA,toolB\",\n\t\t);\n\t\tif (includeToolsInput === undefined) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.includeTools = this.parseMcpCsvListInput(includeToolsInput);\n\n\t\tconst excludeToolsInput = await this.showExtensionInput(\n\t\t\t\"MCP Add: exclude tools (optional, CSV)\",\n\t\t\t\"dangerousTool\",\n\t\t);\n\t\tif (excludeToolsInput === undefined) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.excludeTools = this.parseMcpCsvListInput(excludeToolsInput);\n\n\t\tconst trustChoice = await this.showExtensionSelector(\"MCP Add: trust this server?\", [\n\t\t\t\"No (Recommended)\",\n\t\t\t\"Yes\",\n\t\t]);\n\t\tif (!trustChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.trust = trustChoice.startsWith(\"Yes\");\n\n\t\tconst enableChoice = await this.showExtensionSelector(\"MCP Add: enable now?\", [\"Yes (Recommended)\", \"No\"]);\n\t\tif (!enableChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.enabled = enableChoice.startsWith(\"Yes\");\n\n\t\tconst path = await this.mcpRuntime.addServer(name, scope, config);\n\t\tthis.syncMcpToolsWithSession();\n\t\tconst status = this.mcpRuntime.getServer(name);\n\t\tthis.showStatus(`Added MCP server ${name} (${scope})`);\n\n\t\tconst details: string[] = [`Config: ${path}`];\n\t\tif (status?.state === \"connected\") {\n\t\t\tdetails.push(`Connected tools: ${status.toolCount}`);\n\t\t} else if (status?.state === \"error\") {\n\t\t\tdetails.push(`Connection warning: ${status.error ?? \"unknown error\"}`);\n\t\t}\n\t\tthis.showCommandTextBlock(\"MCP Add\", details.join(\"\\n\"));\n\t}\n\n\tprivate async handleMcpSlashCommand(text: string): Promise<void> {\n\t\tif (!this.mcpRuntime) {\n\t\t\tthis.showWarning(\"MCP runtime is unavailable in this session.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.length === 0) {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tthis.showMcpSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\tconst rest = args.slice(1);\n\n\t\tif (!subcommand || subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"list\" || subcommand === \"status\") {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tthis.showCommandTextBlock(\"MCP Servers\", this.buildMcpStatusReport(this.mcpRuntime.getServers()));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"add\") {\n\t\t\tif (\n\t\t\t\trest.length === 0 ||\n\t\t\t\t(rest.length === 1 && !rest[0]!.startsWith(\"-\")) ||\n\t\t\t\t(rest.length > 0 && rest.includes(\"--wizard\"))\n\t\t\t) {\n\t\t\t\tconst prefilledName = rest.find((token) => !token.startsWith(\"-\"));\n\t\t\t\tawait this.runMcpAddWizard(prefilledName);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst parsed = parseMcpAddCommand(rest);\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst path = await this.mcpRuntime.addServer(parsed.value.name, parsed.value.scope, parsed.value.config);\n\t\t\tthis.syncMcpToolsWithSession();\n\t\t\tconst status = this.mcpRuntime.getServer(parsed.value.name);\n\t\t\tthis.showStatus(`Added MCP server ${parsed.value.name} (${parsed.value.scope})`);\n\t\t\tconst extraLines = [`Config: ${path}`];\n\t\t\tif (status?.state === \"connected\") {\n\t\t\t\textraLines.push(`Connected tools: ${status.toolCount}`);\n\t\t\t} else if (status?.state === \"error\") {\n\t\t\t\textraLines.push(`Connection warning: ${status.error ?? \"unknown error\"}`);\n\t\t\t}\n\t\t\tthis.showCommandTextBlock(\"MCP Add\", extraLines.join(\"\\n\"));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"remove\") {\n\t\t\tconst parsed = parseMcpTargetCommand(rest, \"all\");\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst removed = await this.mcpRuntime.removeServer(parsed.value.name, parsed.value.scope);\n\t\t\tif (removed.length === 0) {\n\t\t\t\tthis.showWarning(`MCP server \"${parsed.value.name}\" not found.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.syncMcpToolsWithSession();\n\t\t\tthis.showStatus(`Removed MCP server ${parsed.value.name} from ${removed.join(\", \")}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"enable\" || subcommand === \"disable\") {\n\t\t\tconst parsed = parseMcpTargetCommand(rest, \"all\");\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst enabled = subcommand === \"enable\";\n\t\t\tlet updatedScope: McpScope | undefined;\n\t\t\tif (parsed.value.scope === \"all\") {\n\t\t\t\tupdatedScope =\n\t\t\t\t\t(await this.mcpRuntime.setServerEnabled(parsed.value.name, enabled, \"project\")) ??\n\t\t\t\t\t(await this.mcpRuntime.setServerEnabled(parsed.value.name, enabled, \"user\"));\n\t\t\t} else {\n\t\t\t\tupdatedScope = await this.mcpRuntime.setServerEnabled(parsed.value.name, enabled, parsed.value.scope);\n\t\t\t}\n\t\t\tif (!updatedScope) {\n\t\t\t\tthis.showWarning(`MCP server \"${parsed.value.name}\" not found.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.syncMcpToolsWithSession();\n\t\t\tthis.showStatus(`${enabled ? \"Enabled\" : \"Disabled\"} MCP server ${parsed.value.name} (${updatedScope})`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"reconnect\" || subcommand === \"refresh\") {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"tools\") {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tconst serverName = rest[0];\n\t\t\tconst statuses = this.mcpRuntime.getServers();\n\t\t\tconst filtered = serverName ? statuses.filter((status) => status.name === serverName) : statuses;\n\t\t\tif (filtered.length === 0) {\n\t\t\t\tthis.showWarning(serverName ? `MCP server \"${serverName}\" not found.` : \"No MCP servers configured.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showCommandTextBlock(\"MCP Tools\", this.buildMcpStatusReport(filtered));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"test\") {\n\t\t\tconst parsed = parseMcpTargetCommand(rest, \"all\");\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tconst status = this.mcpRuntime.getServer(parsed.value.name);\n\t\t\tif (!status) {\n\t\t\t\tthis.showWarning(`MCP server \"${parsed.value.name}\" not found.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (status.state !== \"connected\") {\n\t\t\t\tthis.showError(`MCP server \"${parsed.value.name}\" failed: ${status.error ?? \"unknown error\"}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(`MCP server \"${parsed.value.name}\" connected (${status.toolCount} tools)`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showWarning(`Unknown /mcp subcommand \"${subcommand}\". Use /mcp help.`);\n\t}\n\n\tprivate showMcpSelector(): void {\n\t\tif (!this.mcpRuntime) {\n\t\t\tthis.showWarning(\"MCP runtime is unavailable in this session.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new McpSelectorComponent(this.ui, this.mcpRuntime!.getServers(), {\n\t\t\t\tonClose: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonToggleEnabled: async (server) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst targetEnabled = !server.enabled;\n\t\t\t\t\t\tconst updated = await this.mcpRuntime!.setServerEnabled(server.name, targetEnabled, server.scope);\n\t\t\t\t\t\tif (!updated) {\n\t\t\t\t\t\t\tthis.showWarning(`MCP server \"${server.name}\" not found.`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.syncMcpToolsWithSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(`${targetEnabled ? \"Enabled\" : \"Disabled\"} ${server.name} (${updated})`);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonReconnect: async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonRemove: async (server) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst removed = await this.mcpRuntime!.removeServer(server.name, server.scope);\n\t\t\t\t\t\tif (removed.length === 0) {\n\t\t\t\t\t\t\tthis.showWarning(`MCP server \"${server.name}\" not found.`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.syncMcpToolsWithSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(`Removed ${server.name} (${removed.join(\", \")})`);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonRefresh: async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonInsertAddCommand: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.editor.setText(\"/mcp add \");\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tautoCompact: this.session.autoCompactionEnabled,\n\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\tautoResizeImages: this.settingsManager.getImageAutoResize(),\n\t\t\t\t\tblockImages: this.settingsManager.getBlockImages(),\n\t\t\t\t\tenableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n\t\t\t\t\tsteeringMode: this.session.steeringMode,\n\t\t\t\t\tfollowUpMode: this.session.followUpMode,\n\t\t\t\t\tstreamInputMode: this.session.streamInputMode,\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\tthinkingLevel: this.session.thinkingLevel,\n\t\t\t\t\tavailableThinkingLevels: this.session.getAvailableThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.settingsManager.getTheme() || \"dark\",\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\tautocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\t\tquietStartup: this.settingsManager.getQuietStartup(),\n\t\t\t\t\tclearOnShrink: this.settingsManager.getClearOnShrink(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\t\tthis.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\t\tthis.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowImages(enabled);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\t\tthis.settingsManager.setBlockImages(blocked);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\t\tthis.setupAutocomplete(this.fdPath);\n\t\t\t\t\t},\n\t\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setFollowUpMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonStreamInputModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setStreamInputMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\t\tthis.settingsManager.setTransport(transport);\n\t\t\t\t\t\tthis.session.agent.setTransport(transport);\n\t\t\t\t\t},\n\t\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\t\tthis.session.setThinkingLevel(level);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeName);\n\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\t\tthis.hideThinkingBlock = hidden;\n\t\t\t\t\t\tthis.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\t\tchild.setHideThinkingBlock(hidden);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t},\n\t\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\t\tthis.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t\t},\n\t\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setQuietStartup(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\t\tthis.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t\t},\n\t\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\t\tthis.ui.setShowHardwareCursor(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\t\tthis.defaultEditor.setPaddingX(padding);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setPaddingX(padding);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\t\tthis.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\t\tthis.ui.setClearOnShrink(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t\t});\n\t}\n\n\tprivate async handleModelCommand(searchTerm?: string): Promise<void> {\n\t\tif (!searchTerm) {\n\t\t\tawait this.showModelProviderSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = await this.findExactModelMatch(searchTerm);\n\t\tif (model) {\n\t\t\ttry {\n\t\t\t\tawait this.session.setModel(model);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.refreshBuiltInHeader();\n\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showModelSelector(searchTerm);\n\t}\n\n\tprivate async showModelProviderSelector(preferredProvider?: string): Promise<void> {\n\t\tthis.session.modelRegistry.refresh();\n\t\tlet models: Model<any>[] = [];\n\t\ttry {\n\t\t\tmodels = await this.session.modelRegistry.getAvailable();\n\t\t} catch {\n\t\t\tmodels = [];\n\t\t}\n\t\tif (models.length === 0) {\n\t\t\tif (preferredProvider) {\n\t\t\t\t// Fallback for transient registry/load errors: still open model selector\n\t\t\t\t// with a provider hint so login flow can continue.\n\t\t\t\tthis.showModelSelector(preferredProvider);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(\"No models available\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst providerCounts = new Map<string, number>();\n\t\tfor (const model of models) {\n\t\t\tproviderCounts.set(model.provider, (providerCounts.get(model.provider) ?? 0) + 1);\n\t\t}\n\t\tconst providers = Array.from(providerCounts.entries()).sort(([a], [b]) => a.localeCompare(b));\n\t\tif (providers.length === 0) {\n\t\t\tthis.showStatus(\"No providers available\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (preferredProvider) {\n\t\t\tconst preferred = providers.find(([provider]) => provider.toLowerCase() === preferredProvider.toLowerCase());\n\t\t\tif (preferred) {\n\t\t\t\tthis.showModelSelector(undefined, preferred[0]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (providers.length === 1) {\n\t\t\tthis.showModelSelector(undefined, providers[0]?.[0]);\n\t\t\treturn;\n\t\t}\n\n\t\tconst optionMap = new Map<string, string>();\n\t\tconst options = [\"All providers\"];\n\t\tfor (const [provider, count] of providers) {\n\t\t\tconst optionLabel = `${provider} (${count})`;\n\t\t\toptionMap.set(optionLabel, provider);\n\t\t\toptions.push(optionLabel);\n\t\t}\n\n\t\tconst selected = await this.showExtensionSelector(\"/model: choose provider\", options);\n\t\tif (!selected) return;\n\t\tif (selected === \"All providers\") {\n\t\t\tthis.showModelSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst provider = optionMap.get(selected);\n\t\tif (!provider) {\n\t\t\tthis.showWarning(\"Provider selection is no longer available.\");\n\t\t\treturn;\n\t\t}\n\t\tthis.showModelSelector(undefined, provider);\n\t}\n\n\tprivate async findExactModelMatch(searchTerm: string): Promise<Model<any> | undefined> {\n\t\tconst term = searchTerm.trim();\n\t\tif (!term) return undefined;\n\n\t\tlet targetProvider: string | undefined;\n\t\tlet targetModelId = \"\";\n\n\t\tif (term.includes(\"/\")) {\n\t\t\tconst parts = term.split(\"/\", 2);\n\t\t\ttargetProvider = parts[0]?.trim().toLowerCase();\n\t\t\ttargetModelId = parts[1]?.trim().toLowerCase() ?? \"\";\n\t\t} else {\n\t\t\ttargetModelId = term.toLowerCase();\n\t\t}\n\n\t\tif (!targetModelId) return undefined;\n\n\t\tconst models = await this.getModelCandidates();\n\t\tconst exactMatches = models.filter((item) => {\n\t\t\tconst idMatch = item.id.toLowerCase() === targetModelId;\n\t\t\tconst providerMatch = !targetProvider || item.provider.toLowerCase() === targetProvider;\n\t\t\treturn idMatch && providerMatch;\n\t\t});\n\n\t\treturn exactMatches.length === 1 ? exactMatches[0] : undefined;\n\t}\n\n\tprivate async getModelCandidates(): Promise<Model<any>[]> {\n\t\tif (this.session.scopedModels.length > 0) {\n\t\t\treturn this.session.scopedModels.map((scoped) => scoped.model);\n\t\t}\n\n\t\tthis.session.modelRegistry.refresh();\n\t\ttry {\n\t\t\treturn await this.session.modelRegistry.getAvailable();\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/** Update the footer's available provider count from current model candidates */\n\tprivate async updateAvailableProviderCount(): Promise<void> {\n\t\tconst models = await this.getModelCandidates();\n\t\tconst uniqueProviders = new Set(models.map((m) => m.provider));\n\t\tthis.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n\t\tthis.refreshBuiltInHeader();\n\t}\n\n\tprivate showModelSelector(initialSearchInput?: string, providerFilter?: string): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ModelSelectorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.session.model,\n\t\t\t\tthis.settingsManager,\n\t\t\t\tthis.session.modelRegistry,\n\t\t\t\tthis.session.scopedModels,\n\t\t\t\tasync (model) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.session.setModel(model);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\tthis.refreshBuiltInHeader();\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSearchInput,\n\t\t\t\tproviderFilter,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async showModelsSelector(): Promise<void> {\n\t\t// Get all available models\n\t\tthis.session.modelRegistry.refresh();\n\t\tconst allModels = this.session.modelRegistry.getAvailable();\n\n\t\tif (allModels.length === 0) {\n\t\t\tthis.showStatus(\"No models available\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if session has scoped models (from previous session-only changes or CLI --models)\n\t\tconst sessionScopedModels = this.session.scopedModels;\n\t\tconst hasSessionScope = sessionScopedModels.length > 0;\n\n\t\t// Build enabled model IDs from session state or settings\n\t\tconst enabledModelIds = new Set<string>();\n\t\tlet hasFilter = false;\n\n\t\tif (hasSessionScope) {\n\t\t\t// Use current session's scoped models\n\t\t\tfor (const sm of sessionScopedModels) {\n\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\n\t\t\t}\n\t\t\thasFilter = true;\n\t\t} else {\n\t\t\t// Fall back to settings\n\t\t\tconst patterns = this.settingsManager.getEnabledModels();\n\t\t\tif (patterns !== undefined && patterns.length > 0) {\n\t\t\t\thasFilter = true;\n\t\t\t\tconst scopedModels = await resolveModelScope(patterns, this.session.modelRegistry);\n\t\t\t\tfor (const sm of scopedModels) {\n\t\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Track current enabled state (session-only until persisted)\n\t\tconst currentEnabledIds = new Set(enabledModelIds);\n\t\tlet currentHasFilter = hasFilter;\n\n\t\t// Helper to update session's scoped models (session-only, no persist)\n\t\tconst updateSessionModels = async (enabledIds: Set<string>) => {\n\t\t\tif (enabledIds.size > 0 && enabledIds.size < allModels.length) {\n\t\t\t\tconst newScopedModels = await resolveModelScope(Array.from(enabledIds), this.session.modelRegistry);\n\t\t\t\tthis.session.setScopedModels(\n\t\t\t\t\tnewScopedModels.map((sm) => ({\n\t\t\t\t\t\tmodel: sm.model,\n\t\t\t\t\t\tthinkingLevel: sm.thinkingLevel,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// All enabled or none enabled = no filter\n\t\t\t\tthis.session.setScopedModels([]);\n\t\t\t}\n\t\t\tawait this.updateAvailableProviderCount();\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tallModels,\n\t\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t\t\thasEnabledModelsFilter: currentHasFilter,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonModelToggle: async (modelId, enabled) => {\n\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\tcurrentEnabledIds.add(modelId);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentEnabledIds.delete(modelId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableAll: async (allModelIds) => {\n\t\t\t\t\t\tcurrentEnabledIds.clear();\n\t\t\t\t\t\tfor (const id of allModelIds) {\n\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = false;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonClearAll: async () => {\n\t\t\t\t\t\tcurrentEnabledIds.clear();\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonToggleProvider: async (_provider, modelIds, enabled) => {\n\t\t\t\t\t\tfor (const id of modelIds) {\n\t\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcurrentEnabledIds.delete(id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\t\t// Persist to settings\n\t\t\t\t\t\tconst newPatterns =\n\t\t\t\t\t\t\tenabledIds.length === allModels.length\n\t\t\t\t\t\t\t\t? undefined // All enabled = clear filter\n\t\t\t\t\t\t\t\t: enabledIds;\n\t\t\t\t\t\tthis.settingsManager.setEnabledModels(newPatterns);\n\t\t\t\t\t\tthis.showStatus(\"Model selection saved to settings\");\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showUserMessageSelector(): void {\n\t\tconst userMessages = this.session.getUserMessagesForForking();\n\n\t\tif (userMessages.length === 0) {\n\t\t\tthis.showStatus(\"No messages to fork from\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\tconst result = await this.session.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t// Extension cancelled the fork\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.editor.setText(result.selectedText);\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.showStatus(\"Branched to new session\");\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getMessageList() };\n\t\t});\n\t}\n\n\tprivate showTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.sessionManager.getTree();\n\t\tconst realLeafId = this.sessionManager.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(\"No entries in session\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new TreeSelectorComponent(\n\t\t\t\ttree,\n\t\t\t\trealLeafId,\n\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Already at this point\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ask about summarization\n\t\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\t\tlet wantsSummary = false;\n\t\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\t\tif (!this.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst summaryChoice = await this.showExtensionSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t\t]);\n\n\t\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.showExtensionEditor(\"Custom summarization instructions\");\n\t\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\n\t\t\t\t\tif (wantsSummary) {\n\t\t\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\t`Summarizing branch... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.statusContainer.addChild(summaryLoader);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.navigateTree(entryId, {\n\t\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\t\tthis.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tthis.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update UI\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t(entryId, label) => {\n\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t\tinitialFilterMode,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress) =>\n\t\t\t\t\tSessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),\n\t\t\t\tSessionManager.listAll,\n\t\t\t\tasync (sessionPath) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t},\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{\n\t\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\t\tif (!next) return;\n\t\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\n\t\t\t\t\t\tmgr.appendSessionInfo(next);\n\t\t\t\t\t},\n\t\t\t\t\tshowRenameHint: true,\n\t\t\t\t\tkeybindings: this.keybindings,\n\t\t\t\t},\n\n\t\t\t\tthis.sessionManager.getSessionFile(),\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async handleResumeSession(sessionPath: string): Promise<void> {\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// Clear UI state\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\n\t\t// Switch session via AgentSession (emits extension session events)\n\t\tawait this.session.switchSession(sessionPath);\n\n\t\t// Clear and re-render the chat\n\t\tthis.chatContainer.clear();\n\t\tthis.renderInitialMessages();\n\t\tthis.refreshBuiltInHeader();\n\t\tthis.showStatus(\"Resumed session\");\n\t}\n\n\tprivate async showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void> {\n\t\tif (mode === \"logout\") {\n\t\t\tconst providers = this.session.modelRegistry.authStorage.list();\n\t\t\tconst loggedInProviders = providers.filter((provider) => {\n\t\t\t\tconst credential = this.session.modelRegistry.authStorage.get(provider);\n\t\t\t\treturn credential?.type === \"oauth\" || credential?.type === \"api_key\";\n\t\t\t});\n\t\t\tif (loggedInProviders.length === 0) {\n\t\t\t\tthis.showStatus(\"No saved provider credentials. Use /login first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new OAuthSelectorComponent(\n\t\t\t\tmode,\n\t\t\t\tthis.session.modelRegistry.authStorage,\n\t\t\t\tasync (providerId: string) => {\n\t\t\t\t\tdone();\n\n\t\t\t\t\tif (mode === \"login\") {\n\t\t\t\t\t\tif (providerId === OPENROUTER_PROVIDER_ID) {\n\t\t\t\t\t\t\tawait this.handleOpenRouterApiKeyLogin();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait this.showLoginDialog(providerId);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Logout flow\n\t\t\t\t\t\tconst providerName = this.getProviderDisplayName(providerId);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis.session.modelRegistry.authStorage.logout(providerId);\n\t\t\t\t\t\t\tthis.session.modelRegistry.refresh();\n\t\t\t\t\t\t\tawait this.updateAvailableProviderCount();\n\t\t\t\t\t\t\tthis.showStatus(`Logged out of ${providerName}`);\n\t\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\t\tthis.showError(`Logout failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate getProviderDisplayName(providerId: string): string {\n\t\tif (providerId === OPENROUTER_PROVIDER_ID) {\n\t\t\treturn \"OpenRouter\";\n\t\t}\n\t\tconst providerInfo = this.session.modelRegistry.authStorage.getOAuthProviders().find((p) => p.id === providerId);\n\t\treturn providerInfo?.name || providerId;\n\t}\n\n\tprivate async handleOpenRouterApiKeyLogin(): Promise<void> {\n\t\tconst providerName = this.getProviderDisplayName(OPENROUTER_PROVIDER_ID);\n\t\tconst existingCredential = this.session.modelRegistry.authStorage.get(OPENROUTER_PROVIDER_ID);\n\t\tif (existingCredential) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\n\t\t\t\t`${providerName}: replace existing credentials?`,\n\t\t\t\t`Stored at ${getAuthPath()}`,\n\t\t\t);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(`${providerName} login cancelled.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst keyInput = await this.showExtensionInput(\n\t\t\t`${providerName} API key\\nCreate key: https://openrouter.ai/keys`,\n\t\t\t\"sk-or-v1-...\",\n\t\t);\n\t\tif (keyInput === undefined) {\n\t\t\tthis.showStatus(`${providerName} login cancelled.`);\n\t\t\treturn;\n\t\t}\n\t\tconst apiKey = keyInput.trim();\n\t\tif (!apiKey) {\n\t\t\tthis.showWarning(`${providerName} API key cannot be empty.`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.session.modelRegistry.authStorage.set(OPENROUTER_PROVIDER_ID, { type: \"api_key\", key: apiKey });\n\t\tawait this.updateAvailableProviderCount();\n\t\tthis.showStatus(`${providerName} API key saved to ${getAuthPath()}`);\n\t\tawait this.showModelProviderSelector(OPENROUTER_PROVIDER_ID);\n\t}\n\n\tprivate async showLoginDialog(providerId: string): Promise<void> {\n\t\tconst providerInfo = this.session.modelRegistry.authStorage.getOAuthProviders().find((p) => p.id === providerId);\n\t\tconst providerName = this.getProviderDisplayName(providerId);\n\n\t\t// Providers that use callback servers (can paste redirect URL)\n\t\tconst usesCallbackServer = providerInfo?.usesCallbackServer ?? false;\n\n\t\t// Create login dialog component\n\t\tconst dialog = new LoginDialogComponent(this.ui, providerId, (_success, _message) => {\n\t\t\t// Completion handled below\n\t\t});\n\n\t\t// Show dialog in editor container\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(dialog);\n\t\tthis.ui.setFocus(dialog);\n\t\tthis.ui.requestRender();\n\n\t\t// Promise for manual code input (racing with callback server)\n\t\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\t\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\t\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\t\tmanualCodeResolve = resolve;\n\t\t\tmanualCodeReject = reject;\n\t\t});\n\n\t\t// Restore editor helper\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.modelRegistry.authStorage.login(providerId as OAuthProviderId, {\n\t\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\t\tdialog.showAuth(info.url, info.instructions);\n\n\t\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\t\tdialog\n\t\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else if (providerId === \"github-copilot\") {\n\t\t\t\t\t\t// GitHub Copilot polls after onAuth\n\t\t\t\t\t\tdialog.showWaiting(\"Waiting for browser authentication...\");\n\t\t\t\t\t}\n\t\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t\t},\n\n\t\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\t\treturn dialog.showPrompt(prompt.message, prompt.placeholder);\n\t\t\t\t},\n\n\t\t\t\tonProgress: (message: string) => {\n\t\t\t\t\tdialog.showProgress(message);\n\t\t\t\t},\n\n\t\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\t\tsignal: dialog.signal,\n\t\t\t});\n\n\t\t\t// Success\n\t\t\trestoreEditor();\n\t\t\tawait this.updateAvailableProviderCount();\n\t\t\tthis.showStatus(`Logged in to ${providerName}. Credentials saved to ${getAuthPath()}`);\n\t\t\tawait this.showModelProviderSelector(providerId);\n\t\t} catch (error: unknown) {\n\t\t\trestoreEditor();\n\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\tif (errorMsg !== \"Login cancelled\") {\n\t\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tprivate parseSlashArgs(input: string): string[] {\n\t\tconst args: string[] = [];\n\t\tlet current = \"\";\n\t\tlet quote: '\"' | \"'\" | undefined;\n\t\tlet escape = false;\n\n\t\tfor (const ch of input.trim()) {\n\t\t\tif (escape) {\n\t\t\t\tcurrent += ch;\n\t\t\t\tescape = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"\\\\\") {\n\t\t\t\tescape = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (quote) {\n\t\t\t\tif (ch === quote) {\n\t\t\t\t\tquote = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tcurrent += ch;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\t\tquote = ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (/\\s/.test(ch)) {\n\t\t\t\tif (current) {\n\t\t\t\t\targs.push(current);\n\t\t\t\t\tcurrent = \"\";\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcurrent += ch;\n\t\t}\n\n\t\tif (escape) {\n\t\t\tcurrent += \"\\\\\";\n\t\t}\n\t\tif (current) {\n\t\t\targs.push(current);\n\t\t}\n\n\t\treturn args;\n\t}\n\n\tprivate parseMemoryScopeOptions(args: string[]): { scope: MemoryScope; rest: string[]; error?: string } {\n\t\tlet scope: MemoryScope = \"project\";\n\t\tconst rest: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst token = args[index] ?? \"\";\n\t\t\tconst normalized = token.toLowerCase();\n\n\t\t\tif (normalized === \"--project\") {\n\t\t\t\tscope = \"project\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (normalized === \"--user\") {\n\t\t\t\tscope = \"user\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (normalized === \"--scope\") {\n\t\t\t\tconst value = (args[index + 1] ?? \"\").toLowerCase();\n\t\t\t\tif (!value) {\n\t\t\t\t\treturn { scope, rest, error: \"Usage: /memory ... --scope <project|user>\" };\n\t\t\t\t}\n\t\t\t\tif (value !== \"project\" && value !== \"user\") {\n\t\t\t\t\treturn { scope, rest, error: `Invalid memory scope \"${value}\". Use project or user.` };\n\t\t\t\t}\n\t\t\t\tscope = value;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trest.push(token);\n\t\t}\n\n\t\treturn { scope, rest };\n\t}\n\n\tprivate resolveMemoryPath(scope: MemoryScope): string {\n\t\treturn getMemoryFilePath(scope, this.sessionManager.getCwd(), getAgentDir());\n\t}\n\n\tprivate formatMemoryEntriesReport(\n\t\tscope: MemoryScope,\n\t\tfilePath: string,\n\t\tentries: Array<{ text: string; timestamp?: string }>,\n\t\tfileExists: boolean,\n\t\thasManagedBlock: boolean,\n\t): string {\n\t\tconst lines = [`Scope: ${scope}`, `File: ${filePath}`, \"\"];\n\t\tif (entries.length === 0) {\n\t\t\tif (!fileExists) {\n\t\t\t\tlines.push(\"Memory file does not exist yet.\");\n\t\t\t} else if (!hasManagedBlock) {\n\t\t\t\tlines.push(\"Managed memory block not found in file.\");\n\t\t\t} else {\n\t\t\t\tlines.push(\"No memory entries yet.\");\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let index = 0; index < entries.length; index++) {\n\t\t\t\tconst entry = entries[index]!;\n\t\t\t\tconst prefix = entry.timestamp ? `[${entry.timestamp}] ` : \"\";\n\t\t\t\tlines.push(`${index + 1}. ${prefix}${entry.text}`);\n\t\t\t}\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"Usage:\");\n\t\tlines.push(\" /memory # interactive manager\");\n\t\tlines.push(\" /memory <text>\");\n\t\tlines.push(\" /memory add <text> [--scope project|user]\");\n\t\tlines.push(\" /memory edit <index> <text> [--scope project|user]\");\n\t\tlines.push(\" /memory list [--scope project|user]\");\n\t\tlines.push(\" /memory rm <index> [--scope project|user]\");\n\t\tlines.push(\" /memory path [--scope project|user]\");\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate formatMemoryEntryOption(index: number, entry: { text: string; timestamp?: string }): string {\n\t\tconst timestamp = entry.timestamp ? `[${entry.timestamp}] ` : \"\";\n\t\tconst preview = entry.text.length > 90 ? `${entry.text.slice(0, 87)}...` : entry.text;\n\t\treturn `${index}. ${timestamp}${preview}`;\n\t}\n\n\tprivate async selectMemoryEntry(\n\t\tscope: MemoryScope,\n\t\taction: string,\n\t\tentries: Array<{ text: string; timestamp?: string }>,\n\t): Promise<{ index: number; entry: { text: string; timestamp?: string } } | undefined> {\n\t\tif (entries.length === 0) {\n\t\t\tthis.showStatus(`No memory entries in ${scope} scope.`);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = entries.map((entry, index) => this.formatMemoryEntryOption(index + 1, entry));\n\t\tconst picked = await this.showExtensionSelector(`/memory: ${action} (${scope})`, options);\n\t\tif (!picked) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst selectedIndex = options.indexOf(picked);\n\t\tif (selectedIndex < 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst entry = entries[selectedIndex];\n\t\tif (!entry) return undefined;\n\t\treturn { index: selectedIndex + 1, entry };\n\t}\n\n\tprivate async reloadAfterMemoryMutation(successMessage: string, reloadFailurePrefix: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tthis.showStatus(successMessage);\n\t\t} catch (reloadError) {\n\t\t\tconst message = reloadError instanceof Error ? reloadError.message : String(reloadError);\n\t\t\tthis.showWarning(`${reloadFailurePrefix}: ${message}`);\n\t\t}\n\t\tthis.refreshBuiltInHeader();\n\t}\n\n\tprivate async addMemoryViaCommand(scope: MemoryScope, memoryPath: string, rawText: string): Promise<void> {\n\t\tconst saved = addMemoryEntry(memoryPath, rawText);\n\t\tconst preview = saved.entry.text.length > 80 ? `${saved.entry.text.slice(0, 77)}...` : saved.entry.text;\n\t\tawait this.reloadAfterMemoryMutation(\n\t\t\t`Memory saved (${scope}) #${saved.count}: ${preview}`,\n\t\t\t\"Memory saved but context reload failed\",\n\t\t);\n\t}\n\n\tprivate async updateMemoryViaCommand(\n\t\tscope: MemoryScope,\n\t\tmemoryPath: string,\n\t\tindex: number,\n\t\trawText: string,\n\t): Promise<void> {\n\t\tconst updated = updateMemoryEntry(memoryPath, index, rawText);\n\t\tconst preview = updated.entry.text.length > 80 ? `${updated.entry.text.slice(0, 77)}...` : updated.entry.text;\n\t\tawait this.reloadAfterMemoryMutation(\n\t\t\t`Updated memory #${index} (${scope}): ${preview}`,\n\t\t\t\"Memory updated but context reload failed\",\n\t\t);\n\t}\n\n\tprivate async removeMemoryViaCommand(scope: MemoryScope, memoryPath: string, index: number): Promise<void> {\n\t\tconst removed = removeMemoryEntry(memoryPath, index);\n\t\tawait this.reloadAfterMemoryMutation(\n\t\t\t`Removed memory #${index} (${scope}). Remaining: ${removed.count}`,\n\t\t\t\"Memory removed but context reload failed\",\n\t\t);\n\t}\n\n\tprivate async runMemoryInteractiveMenu(initialScope: MemoryScope): Promise<void> {\n\t\tlet scope: MemoryScope = initialScope;\n\n\t\twhile (true) {\n\t\t\tconst memoryPath = this.resolveMemoryPath(scope);\n\t\t\tlet summary;\n\t\t\ttry {\n\t\t\t\tsummary = readMemoryEntries(memoryPath);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst fileExists = fs.existsSync(memoryPath);\n\t\t\tconst entries = summary.entries;\n\n\t\t\tconst optionAdd = \"Add entry\";\n\t\t\tconst optionEdit = entries.length > 0 ? \"Edit entry\" : \"Edit entry (no entries)\";\n\t\t\tconst optionRemove = entries.length > 0 ? \"Remove entry\" : \"Remove entry (no entries)\";\n\t\t\tconst optionShow = \"Show entries\";\n\t\t\tconst optionPath = \"Show file path\";\n\t\t\tconst optionSwitchScope = `Switch scope (${scope === \"project\" ? \"to user\" : \"to project\"})`;\n\t\t\tconst optionClose = \"Close\";\n\t\t\tconst options = [optionAdd, optionEdit, optionRemove, optionShow, optionPath, optionSwitchScope, optionClose];\n\n\t\t\tconst selected = await this.showExtensionSelector(\n\t\t\t\t`/memory manager (${scope})\\n${memoryPath}\\nentries: ${entries.length}${fileExists ? \"\" : \" (file missing)\"}`,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\tif (!selected || selected === optionClose) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === optionAdd) {\n\t\t\t\tconst rawText = await this.showExtensionInput(`/memory add (${scope})`, \"project starts via PM2\");\n\t\t\t\tif (rawText === undefined) continue;\n\t\t\t\tif (!rawText.trim()) {\n\t\t\t\t\tthis.showWarning(\"Memory text cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.addMemoryViaCommand(scope, memoryPath, rawText);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionEdit) {\n\t\t\t\tconst chosen = await this.selectMemoryEntry(scope, \"edit\", entries);\n\t\t\t\tif (!chosen) continue;\n\t\t\t\tconst edited = await this.showExtensionEditor(\n\t\t\t\t\t`Edit memory #${chosen.index} (${scope})`,\n\t\t\t\t\tchosen.entry.text,\n\t\t\t\t);\n\t\t\t\tif (edited === undefined) continue;\n\t\t\t\tif (!edited.trim()) {\n\t\t\t\t\tthis.showWarning(\"Memory text cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.updateMemoryViaCommand(scope, memoryPath, chosen.index, edited);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionRemove) {\n\t\t\t\tconst chosen = await this.selectMemoryEntry(scope, \"remove\", entries);\n\t\t\t\tif (!chosen) continue;\n\t\t\t\tconst confirmed = await this.showExtensionConfirm(\n\t\t\t\t\t\"Remove memory entry?\",\n\t\t\t\t\t`${this.formatMemoryEntryOption(chosen.index, chosen.entry)}\\n${memoryPath}`,\n\t\t\t\t);\n\t\t\t\tif (!confirmed) {\n\t\t\t\t\tthis.showStatus(\"Memory remove cancelled.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.removeMemoryViaCommand(scope, memoryPath, chosen.index);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionShow) {\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t\"Memory\",\n\t\t\t\t\tthis.formatMemoryEntriesReport(scope, memoryPath, entries, fileExists, summary.hasManagedBlock),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionPath) {\n\t\t\t\tthis.showCommandTextBlock(\"Memory Path\", `Scope: ${scope}\\nFile: ${memoryPath}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionSwitchScope) {\n\t\t\t\tscope = scope === \"project\" ? \"user\" : \"project\";\n\t\t\t\tthis.showStatus(`Memory manager switched to ${scope} scope.`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleMemoryCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst parsedScope = this.parseMemoryScopeOptions(args);\n\t\tif (parsedScope.error) {\n\t\t\tthis.showWarning(parsedScope.error);\n\t\t\treturn;\n\t\t}\n\n\t\tconst { scope, rest } = parsedScope;\n\t\tconst subcommand = rest[0]?.toLowerCase();\n\n\t\tif (!subcommand || subcommand === \"ui\") {\n\t\t\tawait this.runMemoryInteractiveMenu(scope);\n\t\t\treturn;\n\t\t}\n\n\t\tconst memoryPath = this.resolveMemoryPath(scope);\n\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\ttry {\n\t\t\t\tconst summary = readMemoryEntries(memoryPath);\n\t\t\t\tconst fileExists = fs.existsSync(memoryPath);\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t\"Memory\",\n\t\t\t\t\tthis.formatMemoryEntriesReport(scope, memoryPath, summary.entries, fileExists, summary.hasManagedBlock),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Memory Help\",\n\t\t\t\t[\n\t\t\t\t\t\"Usage:\",\n\t\t\t\t\t\" /memory [--scope project|user]\",\n\t\t\t\t\t\" /memory ui [--scope project|user]\",\n\t\t\t\t\t\" /memory <text> [--scope project|user]\",\n\t\t\t\t\t\" /memory add <text> [--scope project|user]\",\n\t\t\t\t\t\" /memory edit <index> <text> [--scope project|user]\",\n\t\t\t\t\t\" /memory list [--scope project|user]\",\n\t\t\t\t\t\" /memory rm <index> [--scope project|user]\",\n\t\t\t\t\t\" /memory path [--scope project|user]\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Examples:\",\n\t\t\t\t\t\" /memory\",\n\t\t\t\t\t\" /memory project starts via PM2\",\n\t\t\t\t\t\" /memory add deploy via npm run deploy --scope project\",\n\t\t\t\t\t\" /memory edit 1 deploy via pnpm run deploy\",\n\t\t\t\t\t\" /memory rm 2\",\n\t\t\t\t\t\" /memory list --scope user\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"path\") {\n\t\t\tconst lines = [`Scope: ${scope}`, `File: ${memoryPath}`];\n\t\t\tthis.showCommandTextBlock(\"Memory Path\", lines.join(\"\\n\"));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"edit\" || subcommand === \"update\") {\n\t\t\tconst rawIndex = (rest[1] ?? \"\").trim();\n\t\t\tif (!rawIndex) {\n\t\t\t\tthis.showWarning(\"Usage: /memory edit <index> <text> [--scope project|user]\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = Number.parseInt(rawIndex, 10);\n\t\t\tif (!Number.isFinite(index) || `${index}` !== rawIndex || index < 1) {\n\t\t\t\tthis.showWarning(`Invalid memory index \"${rawIndex}\". Use a positive integer.`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet rawText = rest.slice(2).join(\" \").trim();\n\t\t\tif (!rawText) {\n\t\t\t\ttry {\n\t\t\t\t\tconst summary = readMemoryEntries(memoryPath);\n\t\t\t\t\tconst target = summary.entries[index - 1];\n\t\t\t\t\tif (!target) {\n\t\t\t\t\t\tthis.showWarning(`Memory entry #${index} not found.`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst edited = await this.showExtensionEditor(`Edit memory #${index} (${scope})`, target.text);\n\t\t\t\t\tif (edited === undefined) {\n\t\t\t\t\t\tthis.showStatus(\"Memory edit cancelled.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\trawText = edited;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.updateMemoryViaCommand(scope, memoryPath, index, rawText);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"rm\" || subcommand === \"remove\" || subcommand === \"delete\") {\n\t\t\tconst rawIndex = (rest[1] ?? \"\").trim();\n\t\t\tif (!rawIndex) {\n\t\t\t\tthis.showWarning(\"Usage: /memory rm <index> [--scope project|user]\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = Number.parseInt(rawIndex, 10);\n\t\t\tif (!Number.isFinite(index) || `${index}` !== rawIndex || index < 1) {\n\t\t\t\tthis.showWarning(`Invalid memory index \"${rawIndex}\". Use a positive integer.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.removeMemoryViaCommand(scope, memoryPath, index);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.showWarning(message);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst rawText = subcommand === \"add\" ? rest.slice(1).join(\" \").trim() : rest.join(\" \").trim();\n\t\tif (!rawText) {\n\t\t\tthis.showWarning(\"Usage: /memory <text> [--scope project|user]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.addMemoryViaCommand(scope, memoryPath, rawText);\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate parseCheckpointNameFromLabel(label: string | undefined): string | undefined {\n\t\tif (!label) return undefined;\n\t\tif (!label.startsWith(CHECKPOINT_LABEL_PREFIX)) return undefined;\n\t\tconst name = label.slice(CHECKPOINT_LABEL_PREFIX.length).trim();\n\t\treturn name.length > 0 ? name : undefined;\n\t}\n\n\tprivate buildCheckpointLabel(name: string): string {\n\t\treturn `${CHECKPOINT_LABEL_PREFIX}${name}`;\n\t}\n\n\tprivate normalizeCheckpointName(raw: string): string | undefined {\n\t\tconst normalized = raw.replace(/\\s+/g, \" \").trim();\n\t\tif (!normalized) return undefined;\n\t\tif (normalized.length > 80) return undefined;\n\t\treturn normalized;\n\t}\n\n\tprivate getSessionCheckpoints(): SessionCheckpoint[] {\n\t\tconst active = new Map<string, SessionCheckpoint>();\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (entry.type !== \"label\") continue;\n\t\t\tconst name = this.parseCheckpointNameFromLabel(entry.label);\n\t\t\tif (!name) {\n\t\t\t\tactive.delete(entry.targetId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tactive.set(entry.targetId, {\n\t\t\t\tname,\n\t\t\t\ttargetId: entry.targetId,\n\t\t\t\tlabelEntryId: entry.id,\n\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t});\n\t\t}\n\t\treturn [...active.values()].sort(\n\t\t\t(a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime(),\n\t\t);\n\t}\n\n\tprivate buildDefaultCheckpointName(checkpoints: SessionCheckpoint[]): string {\n\t\tconst used = new Set(checkpoints.map((checkpoint) => checkpoint.name.toLowerCase()));\n\t\tlet index = 1;\n\t\twhile (used.has(`cp-${index}`)) {\n\t\t\tindex += 1;\n\t\t}\n\t\treturn `cp-${index}`;\n\t}\n\n\tprivate formatCheckpointList(checkpoints: SessionCheckpoint[]): string {\n\t\tif (checkpoints.length === 0) {\n\t\t\treturn \"No checkpoints yet.\\nCreate one with: /checkpoint [name]\";\n\t\t}\n\t\tconst newestFirst = [...checkpoints].reverse();\n\t\tconst lines = newestFirst.map((checkpoint, index) => {\n\t\t\tconst target = this.sessionManager.getEntry(checkpoint.targetId);\n\t\t\tconst type = target?.type ?? \"missing\";\n\t\t\treturn `${index + 1}. ${checkpoint.name} -> ${checkpoint.targetId} (${type}) @ ${checkpoint.timestamp}`;\n\t\t});\n\t\tlines.push(\"\");\n\t\tlines.push(\"Usage: /rollback [name|index]\");\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate formatCheckpointOption(index: number, checkpoint: SessionCheckpoint): string {\n\t\tconst target = this.sessionManager.getEntry(checkpoint.targetId);\n\t\tconst type = target?.type ?? \"missing\";\n\t\treturn `${index}. ${checkpoint.name} -> ${checkpoint.targetId} (${type}) @ ${checkpoint.timestamp}`;\n\t}\n\n\tprivate handleCheckpointCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\tconst checkpoints = this.getSessionCheckpoints();\n\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\tthis.showCommandTextBlock(\"Checkpoints\", this.formatCheckpointList(checkpoints));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Checkpoint Help\",\n\t\t\t\t[\"Usage:\", \" /checkpoint [name]\", \" /checkpoint list\", \"\", \"Examples:\", \" /checkpoint\", \" /checkpoint before-refactor\"].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst leafId = this.sessionManager.getLeafId();\n\t\tif (!leafId) {\n\t\t\tthis.showWarning(\"Cannot create checkpoint yet (session has no entries).\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst requestedName = args.join(\" \");\n\t\tconst name = requestedName ? this.normalizeCheckpointName(requestedName) : this.buildDefaultCheckpointName(checkpoints);\n\t\tif (!name) {\n\t\t\tthis.showWarning(\"Invalid checkpoint name. Use 1-80 visible characters.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sessionManager.appendLabelChange(leafId, this.buildCheckpointLabel(name));\n\t\tthis.showStatus(`Checkpoint saved: ${name} (${leafId})`);\n\t}\n\n\tprivate async handleRollbackCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\tconst checkpoints = this.getSessionCheckpoints();\n\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\tthis.showCommandTextBlock(\"Checkpoints\", this.formatCheckpointList(checkpoints));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Rollback Help\",\n\t\t\t\t[\n\t\t\t\t\t\"Usage:\",\n\t\t\t\t\t\" /rollback\",\n\t\t\t\t\t\" /rollback <name>\",\n\t\t\t\t\t\" /rollback <index>\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Examples:\",\n\t\t\t\t\t\" /rollback\",\n\t\t\t\t\t\" /rollback before-refactor\",\n\t\t\t\t\t\" /rollback 2\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (checkpoints.length === 0) {\n\t\t\tthis.showWarning(\"No checkpoints available. Create one with /checkpoint.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst newestFirst = [...checkpoints].reverse();\n\t\tconst selector = args.join(\" \").trim();\n\t\tlet target: SessionCheckpoint | undefined = newestFirst[0];\n\n\t\tif (selector) {\n\t\t\tconst numeric = Number.parseInt(selector, 10);\n\t\t\tif (Number.isFinite(numeric) && `${numeric}` === selector) {\n\t\t\t\ttarget = newestFirst[numeric - 1];\n\t\t\t\tif (!target) {\n\t\t\t\t\tthis.showWarning(`Checkpoint index ${numeric} is out of range.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttarget = newestFirst.find((checkpoint) => checkpoint.name === selector);\n\t\t\t\tif (!target) {\n\t\t\t\t\tthis.showWarning(`Checkpoint \"${selector}\" not found.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\t\tif (canShowInteractiveSelector) {\n\t\t\t\tconst options = newestFirst.map((checkpoint, index) => this.formatCheckpointOption(index + 1, checkpoint));\n\t\t\t\tconst picked = await this.showExtensionSelector(\"/rollback: choose checkpoint\", options);\n\t\t\t\tif (!picked) {\n\t\t\t\t\tthis.showStatus(\"Rollback cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst selectedIndex = options.indexOf(picked);\n\t\t\t\tif (selectedIndex >= 0) {\n\t\t\t\t\ttarget = newestFirst[selectedIndex];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!target) {\n\t\t\tthis.showWarning(\"No rollback target selected.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.session.navigateTree(target.targetId, { summarize: false });\n\t\t\tif (result.cancelled || result.aborted) {\n\t\t\t\tthis.showStatus(\"Rollback cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.chatContainer.clear();\n\t\t\tthis.renderInitialMessages();\n\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t}\n\t\t\tthis.showStatus(`Rolled back to checkpoint: ${target.name}`);\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate async runDoctorInteractiveFixes(checks: DoctorCheckItem[]): Promise<void> {\n\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\tif (!canShowInteractiveSelector) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasModelIssues = checks.some(\n\t\t\t(check) =>\n\t\t\t\t(check.label === \"Active model\" || check.label === \"Active model auth\" || check.label === \"Available models\") &&\n\t\t\t\tcheck.level === \"fail\",\n\t\t);\n\t\tconst hasMcpIssues = checks.some((check) => check.label === \"MCP servers\" && check.level !== \"ok\");\n\t\tconst hasResourceIssues = checks.some((check) => check.label === \"Resources\" && check.level !== \"ok\");\n\n\t\twhile (true) {\n\t\t\tconst options: string[] = [];\n\t\t\tif (hasModelIssues) {\n\t\t\t\toptions.push(\"Open model selector\");\n\t\t\t\toptions.push(\"Login provider\");\n\t\t\t}\n\t\t\tif (this.mcpRuntime) {\n\t\t\t\tif (hasMcpIssues) {\n\t\t\t\t\toptions.push(\"Open MCP manager\");\n\t\t\t\t}\n\t\t\t\toptions.push(\"Refresh MCP runtime\");\n\t\t\t}\n\t\t\tif (this.permissionMode === \"yolo\") {\n\t\t\t\toptions.push(\"Set permissions mode to ask\");\n\t\t\t}\n\t\t\tif (hasResourceIssues) {\n\t\t\t\toptions.push(\"Reload resources\");\n\t\t\t}\n\t\t\toptions.push(\"Show auth/models paths\");\n\t\t\toptions.push(\"Close\");\n\n\t\t\tconst selected = await this.showExtensionSelector(\"/doctor fixes\", options);\n\t\t\tif (!selected || selected === \"Close\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === \"Open model selector\") {\n\t\t\t\tawait this.showModelProviderSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Login provider\") {\n\t\t\t\tawait this.showOAuthSelector(\"login\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Open MCP manager\") {\n\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\tthis.showMcpSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Refresh MCP runtime\") {\n\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Set permissions mode to ask\") {\n\t\t\t\tthis.permissionMode = \"ask\";\n\t\t\t\tthis.settingsManager.setPermissionMode(\"ask\");\n\t\t\t\tthis.showStatus(\"Permissions: ask\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Reload resources\") {\n\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Show auth/models paths\") {\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t\"Runtime Paths\",\n\t\t\t\t\t[`auth.json: ${getAuthPath()}`, `models.json: ${getModelsPath()}`].join(\"\\n\"),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleDoctorCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst outputJson = args.includes(\"--json\");\n\t\tconst hooks = this.getHookPolicySummary();\n\t\tconst model = this.session.model;\n\t\tconst modelRegistry = this.session.modelRegistry;\n\t\tconst allModels = modelRegistry.getAll();\n\t\tconst availableModels = modelRegistry.getAvailable();\n\t\tconst modelLoadError = modelRegistry.getError();\n\t\tconst authProviders = modelRegistry.authStorage.list();\n\t\tconst hasModelAuth = model ? modelRegistry.authStorage.hasAuth(model.provider) : false;\n\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors.length;\n\t\tconst skillDiagnostics = this.session.resourceLoader.getSkills().diagnostics.length;\n\t\tconst promptDiagnostics = this.session.resourceLoader.getPrompts().diagnostics.length;\n\t\tconst themeDiagnostics = this.session.resourceLoader.getThemes().diagnostics.length;\n\n\t\tconst mcpStatuses = this.mcpRuntime?.getServers() ?? [];\n\t\tconst mcpConfigErrors = this.mcpRuntime?.getErrors() ?? [];\n\t\tconst mcpConnected = mcpStatuses.filter((status) => status.state === \"connected\").length;\n\t\tconst mcpErrored = mcpStatuses.filter((status) => status.state === \"error\").length;\n\t\tconst mcpDisabled = mcpStatuses.filter((status) => !status.enabled).length;\n\t\tconst cliToolStatuses = resolveDoctorCliToolStatuses();\n\t\tconst missingCliTools = cliToolStatuses.filter((status) => !status.available).map((status) => status.tool);\n\n\t\tconst checks: DoctorCheckItem[] = [];\n\t\tconst addCheck = (\n\t\t\tlevel: DoctorCheckLevel,\n\t\t\tlabel: string,\n\t\t\tdetail: string,\n\t\t\tfix?: string,\n\t\t) => checks.push({ level, label, detail, fix });\n\n\t\tif (!model) {\n\t\t\taddCheck(\"fail\", \"Active model\", \"No active model selected\", \"Run /model and pick a model.\");\n\t\t} else if (!hasModelAuth) {\n\t\t\taddCheck(\n\t\t\t\t\"fail\",\n\t\t\t\t\"Active model auth\",\n\t\t\t\t`Model ${model.provider}/${model.id} has no auth configured`,\n\t\t\t\t`Run /login ${model.provider} or set API key env vars.`,\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"Active model\", `${model.provider}/${model.id}`);\n\t\t}\n\n\t\tif (availableModels.length === 0) {\n\t\t\taddCheck(\"fail\", \"Available models\", \"No models currently have valid auth\", \"Run /login or configure API keys.\");\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"Available models\", `${availableModels.length}/${allModels.length} ready`);\n\t\t}\n\n\t\tif (modelLoadError) {\n\t\t\taddCheck(\"warn\", \"models.json\", modelLoadError.split(\"\\n\")[0] ?? modelLoadError, `Inspect ${getModelsPath()}.`);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"models.json\", \"Loaded without schema/runtime errors\");\n\t\t}\n\n\t\tif (!fs.existsSync(getAuthPath())) {\n\t\t\taddCheck(\"warn\", \"auth.json\", `Missing ${getAuthPath()}`, \"Run /login to create credentials.\");\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"auth.json\", `${authProviders.length} provider credential(s) stored`);\n\t\t}\n\n\t\tif (!this.mcpRuntime) {\n\t\t\taddCheck(\"warn\", \"MCP runtime\", \"Unavailable in this session\");\n\t\t} else if (mcpStatuses.length === 0) {\n\t\t\taddCheck(\"warn\", \"MCP servers\", \"No MCP servers configured\", \"Use /mcp add or iosm mcp add ...\");\n\t\t} else if (mcpErrored > 0 || mcpConfigErrors.length > 0) {\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"MCP servers\",\n\t\t\t\t`${mcpConnected} connected, ${mcpErrored} error, ${mcpDisabled} disabled`,\n\t\t\t\t\"Open /mcp to reconnect or inspect server errors.\",\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"MCP servers\", `${mcpConnected} connected, ${mcpDisabled} disabled`);\n\t\t}\n\n\t\tif (missingCliTools.length > 0) {\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"CLI toolchain\",\n\t\t\t\t`${cliToolStatuses.length - missingCliTools.length}/${cliToolStatuses.length} available (missing: ${missingCliTools.join(\", \")})`,\n\t\t\t\t`Install missing CLI tools: ${missingCliTools.join(\", \")}.`,\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"CLI toolchain\", `${cliToolStatuses.length}/${cliToolStatuses.length} available`);\n\t\t}\n\n\t\tif (extensionErrors > 0 || skillDiagnostics > 0 || promptDiagnostics > 0 || themeDiagnostics > 0) {\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"Resources\",\n\t\t\t\t`extensions:${extensionErrors} skills:${skillDiagnostics} prompts:${promptDiagnostics} themes:${themeDiagnostics}`,\n\t\t\t\t\"Run /reload and inspect warnings shown in the chat.\",\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"Resources\", \"No extension/skill/prompt/theme diagnostics\");\n\t\t}\n\n\t\taddCheck(\n\t\t\tthis.permissionMode === \"yolo\" ? \"warn\" : \"ok\",\n\t\t\t\"Permissions\",\n\t\t\t`mode=${this.permissionMode}, allowRules=${this.permissionAllowRules.length}, denyRules=${this.permissionDenyRules.length}`,\n\t\t\tthis.permissionMode === \"yolo\" ? \"Switch to /permissions ask for safer execution.\" : undefined,\n\t\t);\n\n\t\taddCheck(\n\t\t\tprocess.env[ENV_OFFLINE] ? \"warn\" : \"ok\",\n\t\t\t\"Environment\",\n\t\t\t`offline=${process.env[ENV_OFFLINE] ? \"on\" : \"off\"}, sessionTrace=${isSessionTraceEnabled() ? \"on\" : \"off\"}`,\n\t\t\tprocess.env[ENV_OFFLINE] ? \"Unset IOSM_OFFLINE/PI_OFFLINE when network access is required.\" : undefined,\n\t\t);\n\n\t\taddCheck(\n\t\t\t\"ok\",\n\t\t\t\"Hooks\",\n\t\t\thooks\n\t\t\t\t? `U${hooks.userPromptSubmit}/P${hooks.preToolUse}/T${hooks.postToolUse}/S${hooks.stop}`\n\t\t\t\t: \"No hooks loaded\",\n\t\t);\n\n\t\tconst recommendations = [...new Set(checks.map((check) => check.fix).filter((fix): fix is string => !!fix))];\n\n\t\tif (outputJson) {\n\t\t\tthis.showCommandJsonBlock(\"Doctor Report\", {\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\t\tsessionFile: this.sessionManager.getSessionFile() ?? null,\n\t\t\t\tactiveProfile: this.activeProfileName,\n\t\t\t\texternalCliTools: cliToolStatuses,\n\t\t\t\tchecks,\n\t\t\t\trecommendations,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst lines: string[] = [];\n\t\tlines.push(`Timestamp: ${new Date().toISOString()}`);\n\t\tlines.push(`CWD: ${this.sessionManager.getCwd()}`);\n\t\tlines.push(`Session: ${this.sessionManager.getSessionFile() ?? \"in-memory\"}`);\n\t\tlines.push(`Profile: ${this.activeProfileName}`);\n\t\tlines.push(\"\");\n\t\tfor (const check of checks) {\n\t\t\tconst prefix = check.level === \"ok\" ? \"[OK]\" : check.level === \"warn\" ? \"[WARN]\" : \"[FAIL]\";\n\t\t\tlines.push(`${prefix} ${check.label}: ${check.detail}`);\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"External CLI tools:\");\n\t\tfor (const status of cliToolStatuses) {\n\t\t\tconst prefix = status.available ? \"[OK]\" : \"[WARN]\";\n\t\t\tconst sourceLabel =\n\t\t\t\tstatus.source === \"missing\"\n\t\t\t\t\t? \"missing\"\n\t\t\t\t\t: `${status.source}${status.command ? ` (${status.command})` : \"\"}`;\n\t\t\tlines.push(`${prefix} ${status.tool}: ${sourceLabel}`);\n\t\t\tif (!status.available && status.hint) {\n\t\t\t\tlines.push(` fix: ${status.hint}`);\n\t\t\t}\n\t\t}\n\t\tif (recommendations.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"Recommended actions:\");\n\t\t\tfor (const recommendation of recommendations) {\n\t\t\t\tlines.push(`- ${recommendation}`);\n\t\t\t}\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"Tip: /doctor --json\");\n\t\tthis.showCommandTextBlock(\"Doctor Report\", lines.join(\"\\n\"));\n\n\t\tconst wantsInteractiveFixes = !args.includes(\"--no-fix\");\n\t\tif (wantsInteractiveFixes) {\n\t\t\tawait this.runDoctorInteractiveFixes(checks);\n\t\t}\n\t}\n\n\tprivate showCommandTextBlock(title: string, body: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(body, 1, 0));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showCommandJsonBlock(title: string, value: unknown): void {\n\t\tconst json = JSON.stringify(value, null, 2);\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(`\\`\\`\\`json\\n${json}\\n\\`\\`\\``, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async runIosmInitAgentVerification(\n\t\tresult: IosmInitResult,\n\t\ttargetDir: string,\n\t\tonEvent?: (event: AgentSessionEvent) => void,\n\t): Promise<IosmInitVerificationSummary> {\n\t\tif (!result.cycle) {\n\t\t\treturn {\n\t\t\t\tcompleted: false,\n\t\t\t\tskippedReason: \"No cycle scaffold was available for verification.\",\n\t\t\t};\n\t\t}\n\n\t\tconst cycleId = result.cycle.cycleId;\n\t\tprocess.env[ENV_SESSION_TRACE] = \"1\";\n\t\tprocess.env.PI_SESSION_TRACE = \"1\";\n\n\t\tconst agentDir = getAgentDir();\n\t\tconst settingsManager = SettingsManager.create(targetDir, agentDir);\n\t\tconst settingsErrors = settingsManager.drainErrors();\n\t\tfor (const { scope, error } of settingsErrors) {\n\t\t\tthis.showWarning(`Init verify warning (${scope} settings): ${error.message}`);\n\t\t}\n\n\t\tconst authStorage = AuthStorage.create();\n\t\tconst modelRegistry = new ModelRegistry(authStorage, getModelsPath());\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd: targetDir,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tnoExtensions: true,\n\t\t});\n\t\tawait resourceLoader.reload();\n\n\t\tconst { session, modelFallbackMessage } = await createAgentSession({\n\t\t\tcwd: targetDir,\n\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t\tsettingsManager,\n\t\t\tauthStorage,\n\t\t\tmodelRegistry,\n\t\t\tresourceLoader,\n\t\t});\n\t\tlet toolExecutions = 0;\n\t\tconst activityLog: string[] = [];\n\t\tconst pushActivity = (line: string, persist = false): void => {\n\t\t\tactivityLog.push(line);\n\t\t\tif (activityLog.length > 30) {\n\t\t\t\tactivityLog.shift();\n\t\t\t}\n\t\t\tif (persist) {\n\t\t\t\tthis.showProgressLine(`IOSM init verify: ${line}`);\n\t\t\t}\n\t\t};\n\t\tconst setVerifyLiveStatus = (message: string): void => {\n\t\t\tthis.setWorkingMessage(`${message} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`);\n\t\t};\n\t\tconst unsubscribe = session.subscribe((event) => {\n\t\t\tonEvent?.(event);\n\t\t\tif (event.type === \"turn_start\") {\n\t\t\t\tpushActivity(\"agent turn started\");\n\t\t\t\tsetVerifyLiveStatus(\"Verifying workspace...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type !== \"tool_execution_start\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttoolExecutions += 1;\n\t\t\tif (event.toolName === \"bash\") {\n\t\t\t\tconst commandRaw =\n\t\t\t\t\tevent.args && typeof event.args === \"object\" && \"command\" in event.args\n\t\t\t\t\t\t? String((event.args as { command?: unknown }).command ?? \"\")\n\t\t\t\t\t\t: \"\";\n\t\t\t\tconst preview = commandRaw.replace(/\\s+/g, \" \").trim().slice(0, 68);\n\t\t\t\tconst line = `bash #${toolExecutions}${preview ? ` ${preview}${commandRaw.length > 68 ? \"...\" : \"\"}` : \"\"}`;\n\t\t\t\tpushActivity(line);\n\t\t\t\tsetVerifyLiveStatus(`Verifying workspace · ${line}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst line = `${event.toolName} #${toolExecutions}`;\n\t\t\tpushActivity(line);\n\t\t\tsetVerifyLiveStatus(`Verifying workspace · ${line}`);\n\t\t});\n\t\tthis.iosmVerificationSession = session;\n\n\t\ttry {\n\t\t\tif (!session.model) {\n\t\t\t\treturn {\n\t\t\t\t\tcompleted: false,\n\t\t\t\t\tskippedReason:\n\t\t\t\t\t\tmodelFallbackMessage ??\n\t\t\t\t\t\t\"No model available for agent verification. Configure /login or an API key, then re-run /init.\",\n\t\t\t\t\tactivityLog,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst timeoutMs = 180_000;\n\t\t\tconst startedAt = Date.now();\n\t\t\tconst heartbeatMs = 10_000;\n\t\t\tlet nextPersistentHeartbeatSec = 30;\n\t\t\tlet timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\t\t\tlet heartbeatHandle: ReturnType<typeof setInterval> | undefined;\n\t\t\ttry {\n\t\t\t\tpushActivity(\"waiting for model response...\", true);\n\t\t\t\tsetVerifyLiveStatus(\"Waiting for model response...\");\n\t\t\t\theartbeatHandle = setInterval(() => {\n\t\t\t\t\tconst elapsedSec = Math.round((Date.now() - startedAt) / 1000);\n\t\t\t\t\tif (toolExecutions === 0 && elapsedSec >= nextPersistentHeartbeatSec) {\n\t\t\t\t\t\tpushActivity(`still waiting for model response (${elapsedSec}s)`, true);\n\t\t\t\t\t\tnextPersistentHeartbeatSec += 30;\n\t\t\t\t\t}\n\t\t\t\t\tsetVerifyLiveStatus(\n\t\t\t\t\t\ttoolExecutions === 0\n\t\t\t\t\t\t\t? `Waiting for model response... ${elapsedSec}s`\n\t\t\t\t\t\t\t: `Verifying workspace... ${elapsedSec}s · tool calls=${toolExecutions}`,\n\t\t\t\t\t);\n\t\t\t\t}, heartbeatMs);\n\t\t\t\tawait Promise.race([\n\t\t\t\t\tsession.prompt(buildIosmAgentVerificationPrompt(result), {\n\t\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t\t}),\n\t\t\t\t\tnew Promise<never>((_resolve, reject) => {\n\t\t\t\t\t\ttimeoutHandle = setTimeout(() => {\n\t\t\t\t\t\t\treject(new Error(`Verifier timeout after ${Math.round(timeoutMs / 1000)}s.`));\n\t\t\t\t\t\t}, timeoutMs);\n\t\t\t\t\t}),\n\t\t\t\t]);\n\t\t\t} finally {\n\t\t\t\tif (timeoutHandle) {\n\t\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t\t}\n\t\t\t\tif (heartbeatHandle) {\n\t\t\t\t\tclearInterval(heartbeatHandle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst messages = session.state.messages;\n\t\t\tlet lastAssistant: AssistantMessage | undefined;\n\t\t\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\t\t\tconst message = messages[index];\n\t\t\t\tif (message.role === \"assistant\") {\n\t\t\t\t\tlastAssistant = message as AssistantMessage;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tlastAssistant &&\n\t\t\t\t(lastAssistant.stopReason === \"error\" || lastAssistant.stopReason === \"aborted\")\n\t\t\t) {\n\t\t\t\tpushActivity(`agent finished with ${lastAssistant.stopReason}`);\n\t\t\t\tif (lastAssistant.stopReason === \"aborted\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcompleted: false,\n\t\t\t\t\t\tcancelled: true,\n\t\t\t\t\t\tskippedReason: \"Cancelled by user.\",\n\t\t\t\t\t\ttracePath:\n\t\t\t\t\t\t\tsession.sessionTracePath ??\n\t\t\t\t\t\t\t(isSessionTraceEnabled() ? getSessionTracePath(session.sessionManager.getSessionId()) : undefined),\n\t\t\t\t\t\tactivityLog,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcompleted: false,\n\t\t\t\t\terror: lastAssistant.errorMessage ?? `Verifier finished with ${lastAssistant.stopReason}.`,\n\t\t\t\t\ttracePath:\n\t\t\t\t\t\tsession.sessionTracePath ??\n\t\t\t\t\t\t(isSessionTraceEnabled() ? getSessionTracePath(session.sessionManager.getSessionId()) : undefined),\n\t\t\t\t\tactivityLog,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet authoredGuide: string | undefined;\n\t\t\ttry {\n\t\t\t\tpushActivity(\"authoring IOSM.md from repository evidence...\");\n\t\t\t\tsetVerifyLiveStatus(\"Authoring IOSM.md...\");\n\t\t\t\tawait session.prompt(buildIosmGuideAuthoringPrompt(result), {\n\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t});\n\t\t\t\tconst guideAssistant = (() => {\n\t\t\t\t\tconst messages = session.state.messages;\n\t\t\t\t\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\t\t\t\t\tconst message = messages[index];\n\t\t\t\t\t\tif (message.role === \"assistant\") {\n\t\t\t\t\t\t\treturn message as AssistantMessage;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t})();\n\t\t\t\tconst guideText = extractAssistantText(guideAssistant);\n\t\t\t\tconst normalizedGuide = normalizeIosmGuideMarkdown(guideText);\n\t\t\t\tif (normalizedGuide.trim().length > 0) {\n\t\t\t\t\tauthoredGuide = normalizedGuide;\n\t\t\t\t\tpushActivity(\"IOSM.md authored by agent\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tpushActivity(\"agent IOSM.md authoring failed; using structured fallback\");\n\t\t\t}\n\n\t\t\tlet current: IosmMetricSnapshot | undefined;\n\t\t\tlet guidePath: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst report = readIosmCycleReport(result.rootDir, cycleId);\n\t\t\t\tcurrent = createMetricSnapshot(report);\n\t\t\t\tif (authoredGuide) {\n\t\t\t\t\tguidePath = getIosmGuidePath(targetDir);\n\t\t\t\t\tfs.writeFileSync(guidePath, authoredGuide, \"utf8\");\n\t\t\t\t} else {\n\t\t\t\t\tguidePath = writeIosmGuideDocument(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trootDir: targetDir,\n\t\t\t\t\t\t\tcycleId,\n\t\t\t\t\t\t\tassessmentSource: \"verified\",\n\t\t\t\t\t\t\tmetrics: report.metrics,\n\t\t\t\t\t\t\tiosmIndex: report.iosm_index,\n\t\t\t\t\t\t\tdecisionConfidence: report.decision_confidence,\n\t\t\t\t\t\t\tgoals: report.goals,\n\t\t\t\t\t\t\tfilesAnalyzed: result.analysis.files_analyzed,\n\t\t\t\t\t\t\tsourceFileCount: result.analysis.source_file_count,\n\t\t\t\t\t\t\ttestFileCount: result.analysis.test_file_count,\n\t\t\t\t\t\t\tdocFileCount: result.analysis.doc_file_count,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t).path;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tcurrent = undefined;\n\t\t\t\tguidePath = undefined;\n\t\t\t}\n\n\t\t\tlet historyPath: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst history = recordIosmCycleHistory(result.rootDir, cycleId);\n\t\t\t\thistoryPath = history.historyPath;\n\t\t\t} catch {\n\t\t\t\thistoryPath = undefined;\n\t\t\t}\n\n\t\t\tpushActivity(`completed (${toolExecutions} tool calls)`, true);\n\t\t\treturn {\n\t\t\t\tcompleted: true,\n\t\t\t\tcurrent,\n\t\t\t\thistoryPath,\n\t\t\t\tguidePath,\n\t\t\t\ttoolCalls: toolExecutions,\n\t\t\t\ttracePath:\n\t\t\t\t\tsession.sessionTracePath ??\n\t\t\t\t\t(isSessionTraceEnabled() ? getSessionTracePath(session.sessionManager.getSessionId()) : undefined),\n\t\t\t\tactivityLog,\n\t\t\t};\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (isAbortLikeMessage(message)) {\n\t\t\t\tpushActivity(\"cancelled by user\", true);\n\t\t\t\treturn {\n\t\t\t\t\tcompleted: false,\n\t\t\t\t\tcancelled: true,\n\t\t\t\t\tskippedReason: \"Cancelled by user.\",\n\t\t\t\t\tactivityLog,\n\t\t\t\t};\n\t\t\t}\n\t\t\tpushActivity(`failed (${message})`);\n\t\t\tthis.showWarning(`IOSM init verify: failed (${message})`);\n\t\t\treturn {\n\t\t\t\tcompleted: false,\n\t\t\t\terror: message,\n\t\t\t\tactivityLog,\n\t\t\t};\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (session.isStreaming) {\n\t\t\t\t\tawait session.abort();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Best-effort shutdown to avoid a stuck verification loader.\n\t\t\t}\n\t\t\tif (this.iosmVerificationSession === session) {\n\t\t\t\tthis.iosmVerificationSession = undefined;\n\t\t\t}\n\t\t\tunsubscribe();\n\t\t\tsession.dispose();\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t}\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.pendingWorkingMessage = undefined;\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t}\n\n\tprivate getLastAssistantMessage(): AssistantMessage | undefined {\n\t\treturn this.session.messages\n\t\t\t.slice()\n\t\t\t.reverse()\n\t\t\t.find((message): message is AssistantMessage => {\n\t\t\t\tif (message.role !== \"assistant\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn !(message.stopReason === \"aborted\" && message.content.length === 0);\n\t\t\t});\n\t}\n\n\tprivate sanitizeAssistantDisplayMessage(message: AssistantMessage): AssistantMessage {\n\t\tconst hideAllTextForOrchestration = this.activeAssistantOrchestrationContext;\n\t\tlet changed = false;\n\t\tconst nextContent = message.content.map((content) => {\n\t\t\tif (content.type !== \"text\") return content;\n\t\t\tif (hideAllTextForOrchestration) {\n\t\t\t\tif (content.text !== \"\") {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\treturn { ...content, text: \"\" };\n\t\t\t}\n\t\t\treturn content;\n\t\t});\n\n\t\treturn changed ? { ...message, content: nextContent } : message;\n\t}\n\n\tprivate resolveMentionedAgent(text: string): string | undefined {\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\tif (loaded.agents.length === 0) return undefined;\n\t\tconst matches = text.matchAll(/(?:^|\\s)@([^\\s]+)/g);\n\t\tfor (const match of matches) {\n\t\t\tconst candidate = (match[1] ?? \"\").trim();\n\t\t\tconst resolved = resolveCustomSubagentReference(candidate, loaded.agents);\n\t\t\tif (resolved) {\n\t\t\t\treturn resolved;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate isCapabilityQuery(text: string): boolean {\n\t\tconst normalized = text.toLowerCase().trim();\n\t\tif (!normalized) return true;\n\t\treturn (\n\t\t\tnormalized === \"?\" ||\n\t\t\tnormalized === \"help\" ||\n\t\t\tnormalized === \"--help\" ||\n\t\t\tnormalized === \"/help\" ||\n\t\t\tnormalized === \"/capabilities\" ||\n\t\t\tnormalized === \"capabilities\"\n\t\t);\n\t}\n\n\tprivate async promptWithTaskFallback(userInput: string): Promise<void> {\n\t\tconst mentionedAgent = this.resolveMentionedAgent(userInput);\n\t\tif (mentionedAgent) {\n\t\t\tconst cleaned = userInput.replace(/(?:^|\\s)@[^\\s]+/g, \" \").trim();\n\t\t\tif (this.isCapabilityQuery(cleaned)) {\n\t\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\t\t\tconst agent = loaded.agents.find((item) => item.name === mentionedAgent);\n\t\t\t\tif (agent) {\n\t\t\t\t\tconst capabilityPrompt = [\n\t\t\t\t\t\t\"<agent_capability_query>\",\n\t\t\t\t\t\t`agent_name: ${agent.name}`,\n\t\t\t\t\t\t`description: ${agent.description}`,\n\t\t\t\t\t\t`profile: ${agent.profile ?? \"full\"}`,\n\t\t\t\t\t\t`model: ${agent.model ?? \"default\"}`,\n\t\t\t\t\t\t`background: ${agent.background ? \"true\" : \"false\"}`,\n\t\t\t\t\t\t`tools: ${agent.tools?.join(\", \") ?? \"default profile tools\"}`,\n\t\t\t\t\t\t`disallowed_tools: ${agent.disallowedTools?.join(\", \") ?? \"none\"}`,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"agent_instructions:\",\n\t\t\t\t\t\tagent.instructions,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t`user_question: ${cleaned || \"what can you do?\"}`,\n\t\t\t\t\t\t\"Answer normally and concisely in plain language. Do not run task tool for this query.\",\n\t\t\t\t\t\t\"</agent_capability_query>\",\n\t\t\t\t\t].join(\"\\n\");\n\t\t\t\t\tawait this.session.prompt(capabilityPrompt, {\n\t\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst mentionPrompt = [\n\t\t\t\t\"<orchestrate mode=\\\"sequential\\\" agents=\\\"1\\\">\",\n\t\t\t\t`- agent 1: profile=${this.activeProfileName} cwd=${this.sessionManager.getCwd()} agent=${mentionedAgent}`,\n\t\t\t\t`task: ${cleaned.length > 0 ? cleaned : userInput}`,\n\t\t\t\t\"constraints:\",\n\t\t\t\t\"- user selected a concrete custom agent via @mention\",\n\t\t\t\t`- MUST call task tool with agent=\"${mentionedAgent}\"`,\n\t\t\t\t\"</orchestrate>\",\n\t\t\t].join(\"\\n\");\n\t\t\tawait this.session.prompt(mentionPrompt, {\n\t\t\t\texpandPromptTemplates: false,\n\t\t\t\tsource: \"interactive\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait this.session.prompt(userInput);\n\t}\n\n\tprivate createIosmVerificationEventBridge(options?: { loaderMessage?: string }): (event: AgentSessionEvent) => void {\n\t\tconst loaderMessage =\n\t\t\toptions?.loaderMessage ?? `Verifying workspace... (${appKey(this.keybindings, \"interrupt\")} to interrupt)`;\n\t\tlet verifyStreamingComponent: AssistantMessageComponent | undefined;\n\t\tlet verifyStreamingMessage: AssistantMessage | undefined;\n\t\tconst verifyPendingTools = new Map<string, ToolExecutionComponent>();\n\n\t\treturn (event: AgentSessionEvent): void => {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"agent_start\":\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\tthis.loadingAnimation = new DecryptLoader(\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t(s) => theme.fg(\"accent\", s),\n\t\t\t\t\t\t(t) => theme.fg(\"muted\", t),\n\t\t\t\t\t\tloaderMessage,\n\t\t\t\t\t);\n\t\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"message_start\":\n\t\t\t\t\tif (event.message.role === \"assistant\") {\n\t\t\t\t\t\tverifyStreamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tverifyStreamingMessage = event.message as AssistantMessage;\n\t\t\t\t\t\tthis.chatContainer.addChild(verifyStreamingComponent);\n\t\t\t\t\t\tverifyStreamingComponent.updateContent(verifyStreamingMessage);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"message_update\":\n\t\t\t\t\tif (verifyStreamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\t\tverifyStreamingMessage = event.message as AssistantMessage;\n\t\t\t\t\t\tverifyStreamingComponent.updateContent(verifyStreamingMessage);\n\t\t\t\t\t\tfor (const content of verifyStreamingMessage.content) {\n\t\t\t\t\t\t\tif (content.type === \"toolCall\" && !verifyPendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\t\tverifyPendingTools.set(content.id, component);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"message_end\":\n\t\t\t\t\tif (verifyStreamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\t\tverifyStreamingMessage = event.message as AssistantMessage;\n\t\t\t\t\t\tverifyStreamingComponent.updateContent(verifyStreamingMessage);\n\t\t\t\t\t\tverifyStreamingComponent = undefined;\n\t\t\t\t\t\tverifyStreamingMessage = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"tool_execution_start\":\n\t\t\t\t\tif (!verifyPendingTools.has(event.toolCallId)) {\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\tverifyPendingTools.set(event.toolCallId, component);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"tool_execution_update\": {\n\t\t\t\t\tconst component = verifyPendingTools.get(event.toolCallId);\n\t\t\t\t\tif (component) {\n\t\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"tool_execution_end\": {\n\t\t\t\t\tconst component = verifyPendingTools.get(event.toolCallId);\n\t\t\t\t\tif (component) {\n\t\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\t\tverifyPendingTools.delete(event.toolCallId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"agent_end\":\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t}\n\t\t\t\t\tverifyPendingTools.clear();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.ui.requestRender();\n\t\t};\n\t}\n\n\tprivate resolveIosmSnapshot(\n\t\tresult: IosmInitResult,\n\t\tverification: IosmInitVerificationSummary | undefined,\n\t): IosmMetricSnapshot {\n\t\tlet snapshot: IosmMetricSnapshot | undefined = verification?.current;\n\t\tif (!snapshot && result.cycle) {\n\t\t\ttry {\n\t\t\t\tsnapshot = createMetricSnapshot(readIosmCycleReport(result.rootDir, result.cycle.cycleId));\n\t\t\t} catch {\n\t\t\t\tsnapshot = undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\tsnapshot ?? {\n\t\t\t\tmetrics: result.analysis.metrics,\n\t\t\t\tiosm_index: null,\n\t\t\t\tdecision_confidence: null,\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate async runIosmRefreshPass(options: {\n\t\tcwd: string;\n\t\tforce: boolean;\n\t\tagentVerify: boolean;\n\t}): Promise<IosmAutomationRefreshResult> {\n\t\tconst initResult = await initIosmWorkspace({ cwd: options.cwd, force: options.force });\n\t\tlet verification: IosmInitVerificationSummary | undefined;\n\t\tif (options.agentVerify) {\n\t\t\tverification = await this.runIosmInitAgentVerification(\n\t\t\t\tinitResult,\n\t\t\t\toptions.cwd,\n\t\t\t\tthis.createIosmVerificationEventBridge(),\n\t\t\t);\n\t\t}\n\n\t\tlet cycleDecision: IosmDecision | undefined;\n\t\tif (initResult.cycle) {\n\t\t\ttry {\n\t\t\t\tcycleDecision = inspectIosmCycle(initResult.rootDir, initResult.cycle.cycleId).decision;\n\t\t\t} catch {\n\t\t\t\tcycleDecision = undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tinitResult,\n\t\t\tverification,\n\t\t\tsnapshot: this.resolveIosmSnapshot(initResult, verification),\n\t\t\tguidePath: verification?.guidePath ?? getIosmGuidePath(initResult.rootDir),\n\t\t\tcycleDecision,\n\t\t};\n\t}\n\n\tprivate parseIosmAutomationSlashCommand(\n\t\ttext: string,\n\t): { targetIndex?: number; maxIterations?: number; forceInit: boolean } | undefined {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet targetIndex: number | undefined;\n\t\tlet maxIterations: number | undefined;\n\t\tlet forceInit = false;\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst arg = args[index];\n\t\t\tif (arg === \"--force-init\" || arg === \"--force\") {\n\t\t\t\tforceInit = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--max-iterations\") {\n\t\t\t\tconst nextValue = args[index + 1];\n\t\t\t\tconst parsed = nextValue ? Number.parseInt(nextValue, 10) : Number.NaN;\n\t\t\t\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\t\t\t\tthis.showWarning('Usage: /iosm [target-index] [--max-iterations N] [--force-init]');\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tmaxIterations = parsed;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /iosm: ${arg}`);\n\t\t\t\tthis.showWarning('Usage: /iosm [target-index] [--max-iterations N] [--force-init]');\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (targetIndex !== undefined) {\n\t\t\t\tthis.showWarning(`Unexpected argument for /iosm: ${arg}`);\n\t\t\t\tthis.showWarning('Usage: /iosm [target-index] [--max-iterations N] [--force-init]');\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst parsed = Number.parseFloat(arg);\n\t\t\tif (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {\n\t\t\t\tthis.showWarning(`Invalid target index for /iosm: ${arg}`);\n\t\t\t\tthis.showWarning(\"Target index must be a number in the range 0.0 to 1.0.\");\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\ttargetIndex = parsed;\n\t\t}\n\n\t\treturn { targetIndex, maxIterations, forceInit };\n\t}\n\n\tprivate parseOrchestrateSlashCommand(text: string): ParsedOrchestrateCommand | undefined {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet mode: OrchestrationMode | undefined;\n\t\tlet agents: number | undefined;\n\t\tlet maxParallel: number | undefined;\n\t\tlet profile: AgentProfileName | undefined;\n\t\tlet profiles: AgentProfileName[] | undefined;\n\t\tlet cwds: string[] | undefined;\n\t\tlet locks: string[] | undefined;\n\t\tlet isolation: \"none\" | \"worktree\" | undefined;\n\t\tlet dependencies: Array<{ agent: number; dependsOn: number[] }> | undefined;\n\t\tconst taskParts: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst arg = args[index];\n\t\t\tif (arg === \"--parallel\") {\n\t\t\t\tmode = \"parallel\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--sequential\") {\n\t\t\t\tmode = \"sequential\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--agents\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tconst parsed = value ? Number.parseInt(value, 10) : Number.NaN;\n\t\t\t\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > 20) {\n\t\t\t\t\tthis.showWarning(\"Invalid --agents value (expected 1..20).\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tagents = parsed;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--max-parallel\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tconst parsed = value ? Number.parseInt(value, 10) : Number.NaN;\n\t\t\t\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > 20) {\n\t\t\t\t\tthis.showWarning(\"Invalid --max-parallel value (expected 1..20).\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tmaxParallel = parsed;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--profile\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value || !isValidProfileName(value)) {\n\t\t\t\t\tthis.showWarning(`Invalid --profile value: ${value ?? \"(missing)\"}`);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tprofile = value;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--profiles\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --profiles.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tconst parsedProfiles = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tif (parsedProfiles.length === 0 || parsedProfiles.some((item) => !isValidProfileName(item))) {\n\t\t\t\t\tthis.showWarning(`Invalid --profiles value: ${value}`);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tprofiles = parsedProfiles as AgentProfileName[];\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--cwd\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --cwd.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tcwds = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--locks\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --locks.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tlocks = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--worktree\") {\n\t\t\t\tisolation = \"worktree\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--depends\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --depends.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tconst parsedDeps: Array<{ agent: number; dependsOn: number[] }> = [];\n\t\t\t\tconst edges = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tfor (const edge of edges) {\n\t\t\t\t\tconst [left, right] = edge.split(\">\");\n\t\t\t\t\tconst agent = Number.parseInt((left ?? \"\").trim(), 10);\n\t\t\t\t\tconst dependency = Number.parseInt((right ?? \"\").trim(), 10);\n\t\t\t\t\tif (!Number.isInteger(agent) || !Number.isInteger(dependency) || agent < 1 || dependency < 1) {\n\t\t\t\t\t\tthis.showWarning(`Invalid dependency edge: ${edge}. Expected format like 2>1,3>2`);\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst existing = parsedDeps.find((entry) => entry.agent === agent);\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\texisting.dependsOn.push(dependency);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparsedDeps.push({ agent, dependsOn: [dependency] });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdependencies = parsedDeps.map((entry) => ({\n\t\t\t\t\tagent: entry.agent,\n\t\t\t\t\tdependsOn: [...new Set(entry.dependsOn)].sort((a, b) => a - b),\n\t\t\t\t}));\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /orchestrate: ${arg}`);\n\t\t\t\tthis.showWarning(\n\t\t\t\t\t\"Usage: /orchestrate (--parallel|--sequential) --agents N [--max-parallel N] [--profile <name>|--profiles p1,p2] [--cwd p1,p2] [--locks l1,l2] [--worktree] [--depends 2>1,3>2] <task>\",\n\t\t\t\t);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\ttaskParts.push(arg);\n\t\t}\n\n\t\tconst task = taskParts.join(\" \").trim();\n\t\tif (!mode || !agents || !task) {\n\t\t\tthis.showWarning(\n\t\t\t\t\"Usage: /orchestrate (--parallel|--sequential) --agents N [--max-parallel N] [--profile <name>|--profiles p1,p2] [--cwd p1,p2] [--locks l1,l2] [--worktree] [--depends 2>1,3>2] <task>\",\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tif (profile && profiles) {\n\t\t\tthis.showWarning(\"Use either --profile or --profiles, not both.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (mode === \"sequential\" && maxParallel !== undefined) {\n\t\t\tthis.showWarning(\"--max-parallel is only valid with --parallel mode.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (maxParallel !== undefined && maxParallel > agents) {\n\t\t\tmaxParallel = agents;\n\t\t}\n\t\tif (profiles && profiles.length < agents) {\n\t\t\tthis.showWarning(\"--profiles count must be >= --agents or omitted.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (cwds && cwds.length < agents) {\n\t\t\tthis.showWarning(\"--cwd list count must be >= --agents or omitted.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (locks && locks.length < agents) {\n\t\t\tthis.showWarning(\"--locks list count must be >= --agents or omitted.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (dependencies) {\n\t\t\tfor (const dep of dependencies) {\n\t\t\t\tif (dep.agent > agents || dep.dependsOn.some((target) => target > agents || target === dep.agent)) {\n\t\t\t\t\tthis.showWarning(\"Dependency graph references invalid agent indexes.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasDependencyCycle(agents, dependencies)) {\n\t\t\t\tthis.showWarning(\"Dependency graph contains a cycle. Use a DAG for --depends.\");\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmode,\n\t\t\tagents,\n\t\t\tmaxParallel,\n\t\t\tprofile,\n\t\t\tprofiles,\n\t\t\tcwds,\n\t\t\tlocks,\n\t\t\tisolation,\n\t\t\tdependencies,\n\t\t\ttask,\n\t\t};\n\t}\n\n\tprivate async handleOrchestrateSlashCommand(text: string): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Cannot run /orchestrate while the agent is processing a request.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Cannot run /orchestrate while compaction is running.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst parsed = this.parseOrchestrateSlashCommand(text);\n\t\tif (!parsed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentCwd = this.sessionManager.getCwd();\n\t\tconst assignments: string[] = [];\n\t\tconst assignmentRecords: Array<{ profile: string; cwd: string; lockKey?: string; dependsOn: number[] }> = [];\n\t\tfor (let index = 0; index < parsed.agents; index++) {\n\t\t\tconst assignmentProfile =\n\t\t\t\tparsed.profiles?.[index] ?? parsed.profile ?? (this.activeProfileName || \"full\");\n\t\t\tconst assignmentCwd = parsed.cwds?.[index] ?? \".\";\n\t\t\tconst assignmentLock = parsed.locks?.[index];\n\t\t\tconst dependsOn = parsed.dependencies?.find((entry) => entry.agent === index + 1)?.dependsOn ?? [];\n\t\t\tconst resolvedCwd = path.resolve(currentCwd, assignmentCwd);\n\t\t\tassignmentRecords.push({\n\t\t\t\tprofile: assignmentProfile,\n\t\t\t\tcwd: resolvedCwd,\n\t\t\t\tlockKey: assignmentLock,\n\t\t\t\tdependsOn,\n\t\t\t});\n\t\t\tassignments.push(\n\t\t\t\t`- agent ${index + 1}: profile=${assignmentProfile} cwd=${resolvedCwd}${assignmentLock ? ` lock_key=${assignmentLock}` : \"\"\n\t\t\t\t}${parsed.isolation === \"worktree\" ? \" isolation=worktree\" : \"\"}${dependsOn.length > 0 ? ` depends_on=${dependsOn.join(\"|\")}` : \"\"\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\t\tconst teamRun = createTeamRun({\n\t\t\tcwd: currentCwd,\n\t\t\tmode: parsed.mode,\n\t\t\tagents: parsed.agents,\n\t\t\tmaxParallel: parsed.maxParallel,\n\t\t\ttask: parsed.task,\n\t\t\tassignments: assignmentRecords,\n\t\t});\n\t\tconst runAssignments = teamRun.tasks.map(\n\t\t\t(task, index) => `${assignments[index]} run_id=${teamRun.runId} task_id=${task.id}`,\n\t\t);\n\t\tconst taskCallHints = teamRun.tasks.map((task, index) => {\n\t\t\tconst assignment = assignmentRecords[index];\n\t\t\treturn `- task_call_${index + 1}: description=\"agent ${index + 1} execution\" profile=\"${assignment.profile}\" cwd=\"${assignment.cwd}\" run_id=\"${teamRun.runId}\" task_id=\"${task.id}\"${assignment.lockKey ? ` lock_key=\"${assignment.lockKey}\"` : \"\"\n\t\t\t\t}${parsed.isolation === \"worktree\" ? ' isolation=\"worktree\"' : \"\"}`;\n\t\t});\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.bold(theme.fg(\"accent\", \"◆ \")) + theme.bold(\"/orchestrate\") + theme.fg(\"muted\", ` ${currentCwd}`),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.ui.requestRender();\n\n\t\tconst payload = [\n\t\t\t`<orchestrate run_id=\"${teamRun.runId}\" mode=\"${parsed.mode}\" agents=\"${parsed.agents}\"${parsed.maxParallel ? ` max_parallel=\"${parsed.maxParallel}\"` : \"\"\n\t\t\t}>`,\n\t\t\t...runAssignments,\n\t\t\t\"required_task_calls:\",\n\t\t\t...taskCallHints,\n\t\t\t`task: ${parsed.task}`,\n\t\t\t\"constraints:\",\n\t\t\t\"- use task tool for every agent assignment\",\n\t\t\t\"- for parallel mode, emit all independent task calls in one assistant response\",\n\t\t\t\"- in parallel mode, use parallel tool-call style (<use_parallel_tool_calls>)\",\n\t\t\t\"- keep required orchestration task calls in foreground; do not set background=true unless user explicitly requested detached async runs\",\n\t\t\t\"- do not poll .iosm/subagents/background via bash/read during orchestration; wait for task results and then synthesize\",\n\t\t\t\"- include run_id and task_id from each assignment in the task tool arguments\",\n\t\t\t\"- keep each agent in its assigned cwd\",\n\t\t\t\"- avoid edit collisions; if two write-capable agents target same area, serialize those writes\",\n\t\t\t\"- aggregate outputs into one concise final synthesis\",\n\t\t\t\"</orchestrate>\",\n\t\t].join(\"\\n\");\n\n\t\tawait this.session.prompt(payload, {\n\t\t\texpandPromptTemplates: false,\n\t\t\tsource: \"interactive\",\n\t\t});\n\t}\n\n\tprivate async handleAgentsSlashCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst asJson = args.includes(\"--json\");\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\tconst profiles = getProfileNames().map((name) => getAgentProfile(name));\n\n\t\tif (asJson) {\n\t\t\tthis.showCommandJsonBlock(\"Agents\", {\n\t\t\t\tprofiles: profiles.map((profile) => ({\n\t\t\t\t\tname: profile.name,\n\t\t\t\t\tdescription: profile.description,\n\t\t\t\t\ttools: profile.tools,\n\t\t\t\t\tthinkingLevel: profile.thinkingLevel,\n\t\t\t\t})),\n\t\t\t\tcustomAgents: loaded.agents.map((agent) => ({\n\t\t\t\t\tname: agent.name,\n\t\t\t\t\tdescription: agent.description,\n\t\t\t\t\tprofile: agent.profile,\n\t\t\t\t\ttools: agent.tools,\n\t\t\t\t\tdisallowedTools: agent.disallowedTools,\n\t\t\t\t\tbackground: agent.background,\n\t\t\t\t\tcwd: agent.cwd,\n\t\t\t\t\tsourcePath: agent.sourcePath,\n\t\t\t\t\tsourceScope: agent.sourceScope,\n\t\t\t\t})),\n\t\t\t\tallCustomAgents: loaded.allAgents.map((agent) => ({\n\t\t\t\t\tname: agent.name,\n\t\t\t\t\tdescription: agent.description,\n\t\t\t\t\tprofile: agent.profile,\n\t\t\t\t\ttools: agent.tools,\n\t\t\t\t\tdisallowedTools: agent.disallowedTools,\n\t\t\t\t\tbackground: agent.background,\n\t\t\t\t\tcwd: agent.cwd,\n\t\t\t\t\tsourcePath: agent.sourcePath,\n\t\t\t\t\tsourceScope: agent.sourceScope,\n\t\t\t\t\teffective: agent.effective,\n\t\t\t\t\toverriddenByPath: agent.overriddenByPath,\n\t\t\t\t})),\n\t\t\t\toverrides: loaded.overrides,\n\t\t\t\tdiagnostics: loaded.diagnostics,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst options = [\n\t\t\t\"Browse existing agents\",\n\t\t\t\"Use agent via @mention\",\n\t\t\t\"Create new agent with AI\",\n\t\t\t\"Edit existing agent file\",\n\t\t\t\"Delete agent file\",\n\t\t\t\"Show source precedence\",\n\t\t\t\"Show agents as text\",\n\t\t];\n\t\tconst selected = await this.showExtensionSelector(\"/agents\", options);\n\t\tif (!selected) return;\n\n\t\tif (selected === \"Show agents as text\") {\n\t\t\tthis.showCommandTextBlock(\"Agents\", this.buildAgentsTextReport(profiles, loaded));\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Create new agent with AI\") {\n\t\t\tawait this.createAgentWithAi();\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Show source precedence\") {\n\t\t\tthis.showCommandTextBlock(\"Agent Source Precedence\", this.buildAgentPrecedenceReport(loaded));\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Use agent via @mention\") {\n\t\t\tconst chosen = await this.selectAgentRecord(\n\t\t\t\tloaded,\n\t\t\t\t\"/agents: use @mention\",\n\t\t\t\tloaded.agents,\n\t\t\t\t(agent) => this.formatAgentChoice(agent),\n\t\t\t);\n\t\t\tif (!chosen) return;\n\t\t\tthis.insertAgentMention(chosen.name);\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Edit existing agent file\") {\n\t\t\tconst editableAgents = loaded.allAgents.filter((agent) => agent.sourceScope !== \"builtin\");\n\t\t\tif (editableAgents.length === 0) {\n\t\t\t\tthis.showStatus(\"No editable custom agent files found. Built-in system agents are read-only.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst chosen = await this.selectAgentRecord(\n\t\t\t\tloaded,\n\t\t\t\t\"/agents: edit file\",\n\t\t\t\teditableAgents,\n\t\t\t\t(agent) => this.formatAgentChoice(agent, { includeScope: true, includeStatus: true }),\n\t\t\t);\n\t\t\tif (!chosen) return;\n\t\t\tawait this.editAgentFile(chosen);\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Delete agent file\") {\n\t\t\tconst deletableAgents = loaded.allAgents.filter((agent) => agent.sourceScope !== \"builtin\");\n\t\t\tif (deletableAgents.length === 0) {\n\t\t\t\tthis.showStatus(\"No deletable custom agent files found. Built-in system agents are read-only.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst chosen = await this.selectAgentRecord(\n\t\t\t\tloaded,\n\t\t\t\t\"/agents: delete file\",\n\t\t\t\tdeletableAgents,\n\t\t\t\t(agent) => this.formatAgentChoice(agent, { includeScope: true, includeStatus: true }),\n\t\t\t);\n\t\t\tif (!chosen) return;\n\t\t\tawait this.deleteAgentFile(chosen);\n\t\t\treturn;\n\t\t}\n\n\t\tconst chosen = await this.selectAgentRecord(\n\t\t\tloaded,\n\t\t\t\"/agents: details\",\n\t\t\tloaded.agents,\n\t\t\t(agent) => this.formatAgentChoice(agent, { includeScope: true }),\n\t\t);\n\t\tif (!chosen) return;\n\t\tthis.showCommandTextBlock(\"Agent Details\", this.buildAgentDetailReport(chosen, loaded));\n\t}\n\n\tprivate formatAgentChoice(\n\t\tagent: CustomSubagentEntry,\n\t\toptions?: { includeScope?: boolean; includeStatus?: boolean },\n\t): string {\n\t\tconst suffixParts: string[] = [];\n\t\tif (options?.includeScope) {\n\t\t\tsuffixParts.push(agent.sourceScope);\n\t\t}\n\t\tif (options?.includeStatus) {\n\t\t\tsuffixParts.push(agent.effective ? \"active\" : \"shadowed\");\n\t\t}\n\t\tconst suffix = suffixParts.length > 0 ? ` [${suffixParts.join(\", \")}]` : \"\";\n\t\treturn `${agent.name} — ${agent.description}${suffix}`;\n\t}\n\n\tprivate async selectAgentRecord(\n\t\tloaded: ReturnType<typeof loadCustomSubagents>,\n\t\ttitle: string,\n\t\tcandidates: CustomSubagentEntry[],\n\t\tlabelBuilder: (agent: CustomSubagentEntry) => string,\n\t): Promise<CustomSubagentEntry | undefined> {\n\t\tif (candidates.length === 0) {\n\t\t\tthis.showStatus(\"No custom agents found in .iosm/agents or global agents directory.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = candidates.map((agent, index) => `${index + 1}. ${labelBuilder(agent)}`);\n\t\tconst picked = await this.showExtensionSelector(title, options);\n\t\tif (!picked) return undefined;\n\t\tconst index = options.indexOf(picked);\n\t\treturn index >= 0 ? candidates[index] : undefined;\n\t}\n\n\tprivate insertAgentMention(name: string): void {\n\t\tconst current = this.editor.getText().trim();\n\t\tthis.editor.setText(current ? `${current} @${name} ` : `@${name} `);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t\tthis.showStatus(`Inserted @${name} into editor.`);\n\t}\n\n\tprivate buildAgentsTextReport(\n\t\tprofiles: Array<ReturnType<typeof getAgentProfile>>,\n\t\tloaded: ReturnType<typeof loadCustomSubagents>,\n\t): string {\n\t\tconst lines: string[] = [];\n\t\tlines.push(\"Built-in Profiles:\");\n\t\tfor (const profile of profiles) {\n\t\t\tlines.push(\n\t\t\t\t`- ${profile.name}: ${profile.description} · thinking=${profile.thinkingLevel} · tools=${profile.tools.join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(`Active Agents (${loaded.agents.length}):`);\n\t\tif (loaded.agents.length === 0) {\n\t\t\tlines.push(\"- none\");\n\t\t} else {\n\t\t\tfor (const agent of loaded.agents) {\n\t\t\t\tlines.push(\n\t\t\t\t\t`- ${agent.name}: ${agent.description} · profile=${agent.profile ?? \"-\"} · background=${agent.background ? \"true\" : \"false\"} · source=${agent.sourceScope}`,\n\t\t\t\t);\n\t\t\t\tlines.push(\n\t\t\t\t\t` tools=${agent.tools?.join(\", \") ?? \"-\"} · disallowed=${agent.disallowedTools?.join(\", \") ?? \"-\"} · cwd=${agent.cwd ?? \"-\"} · path=${agent.sourcePath}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (loaded.overrides.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"Overrides:\");\n\t\t\tfor (const override of loaded.overrides) {\n\t\t\t\tlines.push(\n\t\t\t\t\t`- ${override.name}: ${override.winnerScope} (${override.winnerPath}) overrides ${override.overriddenScope} (${override.overriddenPath})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (loaded.diagnostics.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"Diagnostics:\");\n\t\t\tfor (const item of loaded.diagnostics) {\n\t\t\t\tlines.push(`- ${item.path}: ${item.message}`);\n\t\t\t}\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate buildAgentPrecedenceReport(loaded: ReturnType<typeof loadCustomSubagents>): string {\n\t\tconst lines: string[] = [];\n\t\tlines.push(`Active definitions: ${loaded.agents.length}`);\n\t\tlines.push(`All discovered definitions: ${loaded.allAgents.length}`);\n\t\tlines.push(\"\");\n\t\tlines.push(\"Resolution order:\");\n\t\tlines.push(\"- project (.iosm/agents) overrides global (~/.iosm/agent/agents)\");\n\t\tlines.push(\"- global overrides built-in system agents shipped with CLI\");\n\t\tlines.push(\"- within the same scope, later file path wins deterministically\");\n\t\tlines.push(\"\");\n\t\tif (loaded.overrides.length === 0) {\n\t\t\tlines.push(\"Overrides:\");\n\t\t\tlines.push(\"- none\");\n\t\t} else {\n\t\t\tlines.push(\"Overrides:\");\n\t\t\tfor (const override of loaded.overrides) {\n\t\t\t\tlines.push(\n\t\t\t\t\t`- ${override.name}: ${override.winnerScope} winner=${override.winnerPath} shadowed=${override.overriddenPath}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"All definitions:\");\n\t\tfor (const agent of loaded.allAgents) {\n\t\t\tlines.push(\n\t\t\t\t`- ${agent.name} [${agent.sourceScope}] ${agent.effective ? \"active\" : `shadowed by ${agent.overriddenByPath ?? \"unknown\"}`}`,\n\t\t\t);\n\t\t\tlines.push(` ${agent.sourcePath}`);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate buildAgentDetailReport(\n\t\tagent: CustomSubagentEntry,\n\t\tloaded: ReturnType<typeof loadCustomSubagents>,\n\t): string {\n\t\tconst overridden = loaded.allAgents.filter(\n\t\t\t(item) => item.name === agent.name && item.sourcePath !== agent.sourcePath,\n\t\t);\n\t\tconst detailLines = [\n\t\t\t`${agent.name}: ${agent.description}`,\n\t\t\t`profile=${agent.profile ?? \"-\"}`,\n\t\t\t`background=${agent.background ? \"true\" : \"false\"}`,\n\t\t\t`source_scope=${agent.sourceScope}`,\n\t\t\t`status=${agent.effective ? \"active\" : \"shadowed\"}`,\n\t\t\t`tools=${agent.tools?.join(\", \") ?? \"-\"}`,\n\t\t\t`disallowed=${agent.disallowedTools?.join(\", \") ?? \"-\"}`,\n\t\t\t`cwd=${agent.cwd ?? \"-\"}`,\n\t\t\t`path=${agent.sourcePath}`,\n\t\t];\n\t\tif (agent.overriddenByPath) {\n\t\t\tdetailLines.push(`overridden_by=${agent.overriddenByPath}`);\n\t\t}\n\t\tif (overridden.length > 0) {\n\t\t\tdetailLines.push(\"\", \"Alternative definitions:\");\n\t\t\tfor (const entry of overridden) {\n\t\t\t\tdetailLines.push(\n\t\t\t\t\t`- ${entry.sourceScope}: ${entry.sourcePath}${entry.effective ? \" (active)\" : \" (shadowed)\"}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tdetailLines.push(\"\", \"Usage: @agent_name <task>\");\n\t\treturn detailLines.join(\"\\n\");\n\t}\n\n\tprivate async editAgentFile(agent: CustomSubagentEntry): Promise<void> {\n\t\tif (!fs.existsSync(agent.sourcePath)) {\n\t\t\tthis.showWarning(`Agent file not found: ${agent.sourcePath}`);\n\t\t\treturn;\n\t\t}\n\t\tconst current = fs.readFileSync(agent.sourcePath, \"utf8\");\n\t\tconst edited = await this.showExtensionEditor(\n\t\t\t`Edit agent file: ${agent.name} (${agent.sourceScope})`,\n\t\t\tcurrent,\n\t\t);\n\t\tif (edited === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst normalized = edited.replace(/\\r\\n/g, \"\\n\").trim();\n\t\tif (!normalized) {\n\t\t\tthis.showWarning(\"Agent file cannot be empty.\");\n\t\t\treturn;\n\t\t}\n\t\tfs.writeFileSync(agent.sourcePath, `${normalized}\\n`, \"utf8\");\n\t\tthis.showStatus(`Updated agent: ${agent.sourcePath}`);\n\t}\n\n\tprivate async deleteAgentFile(agent: CustomSubagentEntry): Promise<void> {\n\t\tif (!fs.existsSync(agent.sourcePath)) {\n\t\t\tthis.showWarning(`Agent file not found: ${agent.sourcePath}`);\n\t\t\treturn;\n\t\t}\n\t\tconst confirmed = await this.showExtensionConfirm(\n\t\t\t\"Delete agent file?\",\n\t\t\t`${agent.name} (${agent.sourceScope})\\n${agent.sourcePath}`,\n\t\t);\n\t\tif (!confirmed) {\n\t\t\tthis.showStatus(\"Agent deletion cancelled.\");\n\t\t\treturn;\n\t\t}\n\t\tfs.rmSync(agent.sourcePath, { force: true });\n\t\tthis.showStatus(`Deleted agent file: ${agent.sourcePath}`);\n\t}\n\n\tprivate extractAssistantText(message: AssistantMessage): string {\n\t\tconst parts: string[] = [];\n\t\tfor (const content of message.content) {\n\t\t\tif (content.type === \"text\" && content.text.trim()) {\n\t\t\t\tparts.push(content.text.trim());\n\t\t\t}\n\t\t}\n\t\treturn parts.join(\"\\n\\n\").trim();\n\t}\n\n\tprivate extractFirstJsonObject(text: string): string | undefined {\n\t\tconst fenced = text.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/i);\n\t\tif (fenced?.[1]) {\n\t\t\treturn fenced[1].trim();\n\t\t}\n\t\tconst start = text.indexOf(\"{\");\n\t\tconst end = text.lastIndexOf(\"}\");\n\t\tif (start >= 0 && end > start) {\n\t\t\treturn text.slice(start, end + 1);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate sanitizeAgentFileName(name: string): string {\n\t\treturn name\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9._-]+/g, \"-\")\n\t\t\t.replace(/^-+/, \"\")\n\t\t\t.replace(/-+$/, \"\")\n\t\t\t.slice(0, 80);\n\t}\n\n\tprivate async createAgentWithAi(): Promise<void> {\n\t\tif (this.session.isStreaming || this.session.isCompacting || this.iosmAutomationRun || this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Cannot create agent while another run is active.\");\n\t\t\treturn;\n\t\t}\n\t\tconst userSpec = await this.showExtensionInput(\n\t\t\t\"Describe what the new agent should do\",\n\t\t\t\"e.g. agent that reviews migrations and proposes rollback-safe SQL\",\n\t\t);\n\t\tif (!userSpec || !userSpec.trim()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst generationPrompt = [\n\t\t\t\"You are generating a custom IOSM subagent specification.\",\n\t\t\t\"Return ONLY a single JSON object and no additional text.\",\n\t\t\t'Allowed JSON keys: name, description, profile, tools, disallowed_tools, system_prompt, cwd, background, instructions.',\n\t\t\t'profile must be one of: full, plan, iosm, explore, iosm_analyst, iosm_verifier, cycle_planner.',\n\t\t\t\"name must be short snake/kebab case, suitable for @mention.\",\n\t\t\t\"tools/disallowed_tools must be arrays of tool names when present.\",\n\t\t\t\"instructions must be a concise markdown body for the agent file.\",\n\t\t\t\"Follow prompt best practices:\",\n\t\t\t\"- Define explicit Role and Goal.\",\n\t\t\t\"- Define Scope boundaries (in-scope and out-of-scope).\",\n\t\t\t\"- Define required Workflow/Checklist steps.\",\n\t\t\t\"- Define strict Output format/sections.\",\n\t\t\t\"- Define uncertainty policy: ask for missing critical data instead of guessing.\",\n\t\t\t\"- Keep instructions concrete and testable; avoid vague phrasing.\",\n\t\t\t\"Prefer composition over broad power: default to read-oriented profiles unless write access is required.\",\n\t\t\t\"Built-in system agents already exist and can be extended by user agents:\",\n\t\t\t\"- codebase_auditor\",\n\t\t\t\"- system_error_analyst\",\n\t\t\t\"- iosm_change_executor\",\n\t\t\t\"- iosm_postchange_verifier\",\n\t\t\t\"- qa_test_engineer\",\n\t\t\t\"- test_failure_triager\",\n\t\t\t\"- meta_orchestrator\",\n\t\t\t\"\",\n\t\t\t`User request: ${userSpec.trim()}`,\n\t\t].join(\"\\n\");\n\n\t\tawait this.session.prompt(generationPrompt, {\n\t\t\texpandPromptTemplates: false,\n\t\t\tskipIosmAutopilot: true,\n\t\t\tskipOrchestrationDirective: true,\n\t\t\tsource: \"interactive\",\n\t\t});\n\n\t\tconst assistant = this.getLastAssistantMessage();\n\t\tif (!assistant || assistant.stopReason === \"aborted\" || assistant.stopReason === \"error\") {\n\t\t\tthis.showWarning(\"Agent generation did not complete.\");\n\t\t\treturn;\n\t\t}\n\t\tconst rawText = this.extractAssistantText(assistant);\n\t\tconst jsonCandidate = this.extractFirstJsonObject(rawText);\n\t\tif (!jsonCandidate) {\n\t\t\tthis.showWarning(\"Could not parse generated agent JSON.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttype GeneratedAgentSpec = {\n\t\t\tname?: unknown;\n\t\t\tdescription?: unknown;\n\t\t\tprofile?: unknown;\n\t\t\ttools?: unknown;\n\t\t\tdisallowed_tools?: unknown;\n\t\t\tsystem_prompt?: unknown;\n\t\t\tcwd?: unknown;\n\t\t\tbackground?: unknown;\n\t\t\tinstructions?: unknown;\n\t\t};\n\n\t\tlet parsed: GeneratedAgentSpec;\n\t\ttry {\n\t\t\tparsed = JSON.parse(jsonCandidate) as GeneratedAgentSpec;\n\t\t} catch {\n\t\t\tthis.showWarning(\"Generated JSON is invalid.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst nameRaw = typeof parsed.name === \"string\" ? parsed.name.trim() : \"\";\n\t\tconst fileName = this.sanitizeAgentFileName(nameRaw || \"agent\");\n\t\tif (!fileName) {\n\t\t\tthis.showWarning(\"Generated agent name is empty.\");\n\t\t\treturn;\n\t\t}\n\t\tconst description = typeof parsed.description === \"string\" ? parsed.description.trim() : `Custom agent ${fileName}`;\n\t\tconst profile =\n\t\t\ttypeof parsed.profile === \"string\" && isValidProfileName(parsed.profile) ? parsed.profile : \"explore\";\n\t\tconst tools = Array.isArray(parsed.tools)\n\t\t\t? parsed.tools.map((item) => String(item).trim()).filter(Boolean)\n\t\t\t: undefined;\n\t\tconst disallowedTools = Array.isArray(parsed.disallowed_tools)\n\t\t\t? parsed.disallowed_tools.map((item) => String(item).trim()).filter(Boolean)\n\t\t\t: undefined;\n\t\tconst systemPrompt = typeof parsed.system_prompt === \"string\" ? parsed.system_prompt.trim() : undefined;\n\t\tconst cwdField = typeof parsed.cwd === \"string\" ? parsed.cwd.trim() : undefined;\n\t\tconst background = parsed.background === true;\n\t\tconst instructions =\n\t\t\ttypeof parsed.instructions === \"string\" && parsed.instructions.trim().length > 0\n\t\t\t\t? parsed.instructions.trim()\n\t\t\t\t: `Follow user instructions for ${description}.`;\n\n\t\tconst frontmatter: string[] = [\n\t\t\t\"---\",\n\t\t\t`name: ${JSON.stringify(fileName)}`,\n\t\t\t`description: ${JSON.stringify(description)}`,\n\t\t\t`profile: ${profile}`,\n\t\t];\n\t\tif (tools && tools.length > 0) {\n\t\t\tfrontmatter.push(`tools: [${tools.map((item) => JSON.stringify(item)).join(\", \")}]`);\n\t\t}\n\t\tif (disallowedTools && disallowedTools.length > 0) {\n\t\t\tfrontmatter.push(`disallowed_tools: [${disallowedTools.map((item) => JSON.stringify(item)).join(\", \")}]`);\n\t\t}\n\t\tif (systemPrompt) {\n\t\t\tfrontmatter.push(`system_prompt: ${JSON.stringify(systemPrompt)}`);\n\t\t}\n\t\tif (cwdField) {\n\t\t\tfrontmatter.push(`cwd: ${JSON.stringify(cwdField)}`);\n\t\t}\n\t\tif (background) {\n\t\t\tfrontmatter.push(\"background: true\");\n\t\t}\n\t\tfrontmatter.push(\"---\", \"\", instructions, \"\");\n\n\t\tconst agentsDir = path.join(this.sessionManager.getCwd(), \".iosm\", \"agents\");\n\t\tfs.mkdirSync(agentsDir, { recursive: true });\n\t\tconst targetPath = path.join(agentsDir, `${fileName}.md`);\n\t\tif (fs.existsSync(targetPath)) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\n\t\t\t\t\"Overwrite existing agent?\",\n\t\t\t\t`${targetPath} already exists.`,\n\t\t\t);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(\"Agent creation cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tfs.writeFileSync(targetPath, frontmatter.join(\"\\n\"), \"utf8\");\n\t\t// Refresh autocomplete so the newly-created agent is immediately available in @ suggestions.\n\t\tthis.setupAutocomplete(this.fdPath);\n\t\tthis.showStatus(`Created agent: ${targetPath}`);\n\n\t\tconst insertMention = await this.showExtensionConfirm(\n\t\t\t\"Insert mention?\",\n\t\t\t`Insert @${fileName} into the editor now?`,\n\t\t);\n\t\tif (insertMention) {\n\t\t\tconst current = this.editor.getText().trim();\n\t\t\tthis.editor.setText(current ? `${current} @${fileName} ` : `@${fileName} `);\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t}\n\n\tprivate handleSubagentRunsSlashCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst limitRaw = args[0];\n\t\tconst limit = limitRaw ? Number.parseInt(limitRaw, 10) : 20;\n\t\tif (!Number.isInteger(limit) || limit < 1 || limit > 200) {\n\t\t\tthis.showWarning(\"Usage: /subagent-runs [limit: 1..200]\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst runs = listSubagentRuns(cwd, limit);\n\t\tif (runs.length === 0) {\n\t\t\tthis.showStatus(\"No subagent runs found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst lines = runs.map((run, index) => {\n\t\t\tconst created = run.createdAt ? ` · ${run.createdAt}` : \"\";\n\t\t\tconst profile = run.profile ? ` · ${run.profile}` : \"\";\n\t\t\tconst agent = run.agent ? ` · agent=${run.agent}` : \"\";\n\t\t\tconst cwdPart = run.cwd ? ` · cwd=${run.cwd}` : \"\";\n\t\t\tconst desc = run.description ? `\\n ${run.description}` : \"\";\n\t\t\treturn `${index + 1}. ${run.runId}${profile}${agent}${cwdPart}${created}${desc}`;\n\t\t});\n\t\tthis.showCommandTextBlock(\"Subagent Runs\", lines.join(\"\\n\"));\n\t}\n\n\tprivate async handleSubagentResumeSlashCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tlet runId = args[0];\n\t\tlet extraInstructions = args.slice(1).join(\" \").trim();\n\n\t\tif (!runId) {\n\t\t\tconst runs = listSubagentRuns(cwd, 20);\n\t\t\tif (runs.length === 0) {\n\t\t\t\tthis.showStatus(\"No subagent runs found.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst options = runs.map((run, index) => {\n\t\t\t\tconst created = run.createdAt ? ` · ${run.createdAt}` : \"\";\n\t\t\t\tconst profile = run.profile ? ` · ${run.profile}` : \"\";\n\t\t\t\tconst agent = run.agent ? ` · agent=${run.agent}` : \"\";\n\t\t\t\tconst desc = run.description ? ` · ${run.description}` : \"\";\n\t\t\t\treturn `${index + 1}. ${run.runId}${profile}${agent}${created}${desc}`;\n\t\t\t});\n\t\t\tconst picked = await this.showExtensionSelector(\"/subagent-resume: select run\", options);\n\t\t\tif (!picked) {\n\t\t\t\tthis.showStatus(\"Subagent resume cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst selectedIndex = options.indexOf(picked);\n\t\t\tconst selectedRun = selectedIndex >= 0 ? runs[selectedIndex] : undefined;\n\t\t\tif (!selectedRun) {\n\t\t\t\tthis.showWarning(\"Selected subagent run is no longer available.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trunId = selectedRun.runId;\n\n\t\t\tconst enteredInstructions = await this.showExtensionInput(\n\t\t\t\t\"/subagent-resume: extra instructions (optional)\",\n\t\t\t\t\"leave blank to continue as-is\",\n\t\t\t);\n\t\t\tif (enteredInstructions === undefined) {\n\t\t\t\tthis.showStatus(\"Subagent resume cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\textraInstructions = enteredInstructions.trim();\n\t\t}\n\n\t\tconst run = getSubagentRun(cwd, runId);\n\t\tif (!run) {\n\t\t\tthis.showWarning(`Subagent run not found: ${runId}`);\n\t\t\treturn;\n\t\t}\n\t\tconst outputTail = (run.output ?? \"\").slice(-6000);\n\t\tconst resumePrompt = [\n\t\t\t\"<resume_subagent_run>\",\n\t\t\t`run_id: ${run.runId}`,\n\t\t\t`profile: ${run.profile ?? \"full\"}`,\n\t\t\t`agent: ${run.agent ?? \"\"}`,\n\t\t\t`cwd: ${run.cwd ?? cwd}`,\n\t\t\t`lock_key: ${run.lockKey ?? \"\"}`,\n\t\t\t\"Use the task tool to continue this workstream from the previous output context.\",\n\t\t\t\"\",\n\t\t\t\"Previous output (tail):\",\n\t\t\toutputTail || \"(empty)\",\n\t\t\t\"\",\n\t\t\textraInstructions ? `Additional instructions:\\n${extraInstructions}\\n` : \"\",\n\t\t\t\"</resume_subagent_run>\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\");\n\n\t\tawait this.session.prompt(resumePrompt, {\n\t\t\texpandPromptTemplates: false,\n\t\t\tsource: \"interactive\",\n\t\t});\n\t}\n\n\tprivate handleTeamRunsSlashCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst limitRaw = args[0];\n\t\tconst limit = limitRaw ? Number.parseInt(limitRaw, 10) : 20;\n\t\tif (!Number.isInteger(limit) || limit < 1 || limit > 200) {\n\t\t\tthis.showWarning(\"Usage: /team-runs [limit: 1..200]\");\n\t\t\treturn;\n\t\t}\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst runs = listTeamRuns(cwd, limit);\n\t\tif (runs.length === 0) {\n\t\t\tthis.showStatus(\"No team runs found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst lines = runs.map((run, index) => {\n\t\t\tconst done = run.tasks.filter((task) => task.status === \"done\").length;\n\t\t\tconst errored = run.tasks.filter((task) => task.status === \"error\").length;\n\t\t\treturn `${index + 1}. ${run.runId} · ${run.mode} · ${done}/${run.tasks.length} done · ${errored} error · ${run.createdAt}`;\n\t\t});\n\t\tthis.showCommandTextBlock(\"Team Runs\", lines.join(\"\\n\"));\n\t}\n\n\tprivate async handleTeamStatusSlashCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tlet runId = args[0];\n\n\t\tif (!runId) {\n\t\t\tconst runs = listTeamRuns(cwd, 20);\n\t\t\tif (runs.length === 0) {\n\t\t\t\tthis.showStatus(\"No team runs found.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\t\tif (canShowInteractiveSelector) {\n\t\t\t\tconst options = runs.map((run, index) => {\n\t\t\t\t\tconst done = run.tasks.filter((task) => task.status === \"done\").length;\n\t\t\t\t\tconst errored = run.tasks.filter((task) => task.status === \"error\").length;\n\t\t\t\t\treturn `${index + 1}. ${run.runId} · ${run.mode} · ${done}/${run.tasks.length} done · ${errored} error · ${run.createdAt}`;\n\t\t\t\t});\n\t\t\t\tconst selection = await this.showExtensionSelector(\"/team-status: select run\", options);\n\t\t\t\tif (!selection) {\n\t\t\t\t\tthis.showStatus(\"Team status cancelled.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst selectedIndex = options.indexOf(selection);\n\t\t\t\tconst selectedRun = selectedIndex >= 0 ? runs[selectedIndex] : undefined;\n\t\t\t\tif (!selectedRun) {\n\t\t\t\t\tthis.showWarning(\"Selected team run is no longer available.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trunId = selectedRun.runId;\n\t\t\t} else {\n\t\t\t\trunId = runs[0]?.runId;\n\t\t\t}\n\t\t}\n\t\tif (!runId) {\n\t\t\tthis.showWarning(\"No team run selected.\");\n\t\t\treturn;\n\t\t}\n\t\tconst run = getTeamRun(cwd, runId);\n\t\tif (!run) {\n\t\t\tthis.showWarning(`Team run not found: ${runId}`);\n\t\t\treturn;\n\t\t}\n\t\tconst lines = [\n\t\t\t`Run: ${run.runId}`,\n\t\t\t`Created: ${run.createdAt}`,\n\t\t\t`Mode: ${run.mode}`,\n\t\t\t`Agents: ${run.agents}`,\n\t\t\t`Max parallel: ${run.maxParallel ?? \"n/a\"}`,\n\t\t\t`Task: ${run.task}`,\n\t\t\t\"\",\n\t\t\t\"Assignments:\",\n\t\t\t...run.tasks.map((task) => {\n\t\t\t\tconst deps = task.dependsOn.length > 0 ? task.dependsOn.join(\"|\") : \"-\";\n\t\t\t\treturn `- ${task.id}: status=${task.status} profile=${task.profile} cwd=${task.cwd}${task.lockKey ? ` lock=${task.lockKey}` : \"\"\n\t\t\t\t\t} depends_on=${deps}`;\n\t\t\t}),\n\t\t];\n\t\tthis.showCommandTextBlock(\"Team Status\", lines.join(\"\\n\"));\n\t}\n\n\tprivate showIosmAutomationSummaryCard(input: {\n\t\tstatus: IosmAutomationLoopStatus;\n\t\ttargetIndex: number;\n\t\tmaxIterations: number;\n\t\titerationsCompleted: number;\n\t\tinitialSnapshot: IosmMetricSnapshot;\n\t\tfinalSnapshot: IosmMetricSnapshot;\n\t\tcycleId?: string;\n\t\tcycleDecision?: IosmDecision;\n\t\terror?: string;\n\t\tguidePath?: string;\n\t}): void {\n\t\tconst resultLabel =\n\t\t\tinput.status === \"stabilized\"\n\t\t\t\t? \"stabilized\"\n\t\t\t\t: input.status === \"threshold_reached\"\n\t\t\t\t\t? \"requested threshold reached\"\n\t\t\t\t\t: input.status === \"cancelled\"\n\t\t\t\t\t\t? \"cancelled by user\"\n\t\t\t\t\t\t: input.status === \"max_iterations\"\n\t\t\t\t\t\t\t? \"iteration budget exhausted\"\n\t\t\t\t\t\t\t: \"failed\";\n\t\tconst deltaLines = summarizeMetricDelta(input.initialSnapshot, input.finalSnapshot);\n\t\tconst remainingPriorities = buildIosmPriorityChecklist(input.finalSnapshot.metrics, 3)\n\t\t\t.map(\n\t\t\t\t(item, index) =>\n\t\t\t\t\t`${index + 1}. ${item.metric}=${item.value === null ? \"n/a\" : item.value.toFixed(3)} — ${item.action}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\n\t\tconst lines = [\n\t\t\t`Result: ${resultLabel}`,\n\t\t\t`Target index: ${input.targetIndex.toFixed(3)}`,\n\t\t\t`Iterations completed: ${input.iterationsCompleted}/${input.maxIterations}`,\n\t\t\t`Cycle: ${input.cycleId ?? \"unknown\"}`,\n\t\t\t`Decision: ${input.cycleDecision ?? \"unknown\"}`,\n\t\t\t\"\",\n\t\t\t`Before: ${formatMetricSnapshot(input.initialSnapshot)}`,\n\t\t\t`After: ${formatMetricSnapshot(input.finalSnapshot)}`,\n\t\t\t\"\",\n\t\t\t\"Metric delta:\",\n\t\t\t...(deltaLines.length > 0 ? deltaLines.map((line) => `- ${line}`) : [\"- no metric movement detected\"]),\n\t\t\t\"\",\n\t\t\t\"Remaining priorities:\",\n\t\t\tremainingPriorities,\n\t\t];\n\n\t\tif (input.guidePath) {\n\t\t\tlines.push(\"\", `Guide: ${input.guidePath}`);\n\t\t}\n\n\t\tif (input.error) {\n\t\t\tlines.push(\"\", `Error: ${input.error}`);\n\t\t}\n\n\t\tthis.showCommandTextBlock(\"IOSM Automation\", lines.join(\"\\n\"));\n\t}\n\n\tprivate async handleIosmAutomationSlashCommand(text: string): Promise<void> {\n\t\tif (this.activeProfileName !== \"iosm\") {\n\t\t\tthis.showWarning(\"`/iosm` is available only in IOSM profile. Switch profile to `iosm` (Shift+Tab).\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Cannot run /iosm while the agent is processing a request.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Cannot run /iosm while compaction is running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmAutomationRun) {\n\t\t\tthis.showWarning(\"IOSM automation is already running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Cannot run /iosm while IOSM verification is running.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst parsed = this.parseIosmAutomationSlashCommand(text);\n\t\tif (!parsed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst explicitTarget = parsed.targetIndex !== undefined;\n\t\ttry {\n\t\t\tconst { config: existingConfig } = loadIosmConfig(cwd);\n\t\t\tif (!existingConfig.iosm.automation.allow_agents) {\n\t\t\t\tthis.showWarning(\"IOSM automation is disabled by iosm.automation.allow_agents=false.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Uninitialized workspaces are allowed; /iosm will bootstrap them first.\n\t\t}\n\t\tlet targetIndex = parsed.targetIndex;\n\t\tlet maxIterations = parsed.maxIterations;\n\t\tlet initialSnapshot: IosmMetricSnapshot | undefined;\n\t\tlet finalSnapshot: IosmMetricSnapshot | undefined;\n\t\tlet cycleId: string | undefined;\n\t\tlet cycleDecision: IosmDecision | undefined;\n\t\tlet guidePath: string | undefined;\n\t\tlet currentGoals: string[] = [];\n\t\tlet criticalityProfile: ReturnType<typeof loadIosmConfig>[\"config\"][\"iosm\"][\"metadata\"][\"criticality_profile\"] | undefined;\n\t\tlet approvalRequirements: string[] = [];\n\t\tlet errorMessage: string | undefined;\n\t\tlet status: IosmAutomationLoopStatus = \"failed\";\n\n\t\tthis.iosmAutomationRun = {\n\t\t\tcancelRequested: false,\n\t\t\ttargetIndex,\n\t\t\tmaxIterations,\n\t\t\titerationsCompleted: 0,\n\t\t};\n\t\tconst automationRun = this.iosmAutomationRun;\n\n\t\ttry {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Text(theme.bold(theme.fg(\"accent\", \"◆ \")) + theme.bold(\"/iosm\") + theme.fg(\"muted\", ` ${cwd}`), 1, 0),\n\t\t\t);\n\t\t\tthis.ui.requestRender();\n\n\t\t\tconst initialRefresh = await this.runIosmRefreshPass({\n\t\t\t\tcwd,\n\t\t\t\tforce: parsed.forceInit,\n\t\t\t\tagentVerify: true,\n\t\t\t});\n\t\t\tconst { config } = loadIosmConfig(cwd);\n\t\t\tconst settings = resolveIosmAutomationSettings(config, {\n\t\t\t\ttargetIndex: parsed.targetIndex,\n\t\t\t\tmaxIterations: parsed.maxIterations,\n\t\t\t});\n\t\t\tif (!config.iosm.automation.allow_agents) {\n\t\t\t\terrorMessage = \"IOSM automation is disabled by iosm.automation.allow_agents=false.\";\n\t\t\t\tstatus = \"failed\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttargetIndex = settings.targetIndex;\n\t\t\tmaxIterations = settings.maxIterations;\n\t\t\tautomationRun.targetIndex = targetIndex;\n\t\t\tautomationRun.maxIterations = maxIterations;\n\t\t\tcriticalityProfile = config.iosm.metadata.criticality_profile;\n\t\t\tapprovalRequirements = config.iosm.automation.human_approval_required_for;\n\n\t\t\tinitialSnapshot = initialRefresh.snapshot;\n\t\t\tfinalSnapshot = initialRefresh.snapshot;\n\t\t\tcycleId = initialRefresh.initResult.cycle?.cycleId;\n\t\t\tcycleDecision = initialRefresh.cycleDecision;\n\t\t\tguidePath = initialRefresh.guidePath;\n\t\t\tcurrentGoals = initialRefresh.initResult.analysis.goals;\n\n\t\t\tthis.showProgressLine(\n\t\t\t\t` Target IOSM index: ${targetIndex.toFixed(3)} · iteration budget: ${maxIterations}`,\n\t\t\t);\n\t\t\tthis.showProgressLine(` Current snapshot: ${formatMetricSnapshot(initialSnapshot)}`);\n\n\t\t\tif (!initialRefresh.verification?.completed) {\n\t\t\t\tif (initialRefresh.verification?.cancelled || automationRun.cancelRequested) {\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\terrorMessage =\n\t\t\t\t\tinitialRefresh.verification?.error ??\n\t\t\t\t\tinitialRefresh.verification?.skippedReason ??\n\t\t\t\t\t\"IOSM verification did not complete.\";\n\t\t\t\tstatus = \"failed\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst initialProgress = evaluateIosmAutomationProgress({\n\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\ttargetIndex,\n\t\t\t\tcycleDecision,\n\t\t\t\texplicitTarget,\n\t\t\t});\n\t\t\tif (initialProgress.failed) {\n\t\t\t\terrorMessage = \"IOSM verifier marked the current cycle as FAIL.\";\n\t\t\t\tstatus = \"failed\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ((!explicitTarget && initialProgress.stabilized) || initialProgress.targetSatisfied) {\n\t\t\t\tstatus = initialProgress.stabilized ? \"stabilized\" : \"threshold_reached\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let iteration = 1; iteration <= maxIterations; iteration++) {\n\t\t\t\tif (automationRun.cancelRequested) {\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (explicitTarget && cycleDecision === \"STOP\" && !hasReachedIosmTarget(finalSnapshot, targetIndex)) {\n\t\t\t\t\tconst previousCycleId = cycleId;\n\t\t\t\t\tthis.showProgressLine(\" Current cycle stabilized below the requested threshold; opening a fresh cycle.\");\n\t\t\t\t\tconst rollover = await this.runIosmRefreshPass({\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tforce: false,\n\t\t\t\t\t\tagentVerify: true,\n\t\t\t\t\t});\n\t\t\t\t\tfinalSnapshot = rollover.snapshot;\n\t\t\t\t\tcycleId = rollover.initResult.cycle?.cycleId ?? cycleId;\n\t\t\t\t\tcycleDecision = rollover.cycleDecision;\n\t\t\t\t\tguidePath = rollover.guidePath;\n\t\t\t\t\tcurrentGoals = rollover.initResult.analysis.goals;\n\n\t\t\t\t\tif (!rollover.verification?.completed) {\n\t\t\t\t\t\tif (rollover.verification?.cancelled || automationRun.cancelRequested) {\n\t\t\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\trollover.verification?.error ??\n\t\t\t\t\t\t\trollover.verification?.skippedReason ??\n\t\t\t\t\t\t\t\"IOSM verification did not complete.\";\n\t\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rolloverProgress = evaluateIosmAutomationProgress({\n\t\t\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\t\t\ttargetIndex,\n\t\t\t\t\t\tcycleDecision,\n\t\t\t\t\t\texplicitTarget,\n\t\t\t\t\t});\n\t\t\t\t\tif (rolloverProgress.failed) {\n\t\t\t\t\t\terrorMessage = \"IOSM verifier marked the new cycle as FAIL.\";\n\t\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (rolloverProgress.targetSatisfied) {\n\t\t\t\t\t\tstatus = rolloverProgress.stabilized ? \"stabilized\" : \"threshold_reached\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (previousCycleId === cycleId && rolloverProgress.stabilized) {\n\t\t\t\t\t\terrorMessage = \"IOSM automation could not advance to a fresh cycle after stabilization.\";\n\t\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst priorities = buildIosmPriorityChecklist(finalSnapshot.metrics, 3);\n\t\t\t\tthis.showProgressLine(\n\t\t\t\t\t` Iteration ${iteration}/${maxIterations}: improving from ${finalSnapshot.iosm_index === null ? \"n/a\" : finalSnapshot.iosm_index.toFixed(3)} toward ${targetIndex.toFixed(3)}`,\n\t\t\t\t);\n\t\t\t\tconst iterationPromptTimeoutMs = 300_000;\n\t\t\t\tlet iterationTimeout: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tawait Promise.race([\n\t\t\t\t\t\tthis.session.prompt(\n\t\t\t\t\t\t\tbuildIosmAutomationPrompt({\n\t\t\t\t\t\t\t\trootDir: cwd,\n\t\t\t\t\t\t\t\tcycleId,\n\t\t\t\t\t\t\t\ttargetIndex,\n\t\t\t\t\t\t\t\titeration,\n\t\t\t\t\t\t\t\tmaxIterations,\n\t\t\t\t\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\t\t\t\t\tgoals: currentGoals,\n\t\t\t\t\t\t\t\tpriorities,\n\t\t\t\t\t\t\t\tcurrentDecision: cycleDecision,\n\t\t\t\t\t\t\t\tcriticalityProfile,\n\t\t\t\t\t\t\t\tapprovalRequirements,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\tnew Promise<never>((_resolve, reject) => {\n\t\t\t\t\t\t\titerationTimeout = setTimeout(() => {\n\t\t\t\t\t\t\t\treject(\n\t\t\t\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t\t\t\t`/iosm iteration ${iteration} timed out after ${Math.round(iterationPromptTimeoutMs / 1000)}s.`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}, iterationPromptTimeoutMs);\n\t\t\t\t\t\t}),\n\t\t\t\t\t]);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tif (message.includes(\"timed out\")) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (this.session.isStreaming) {\n\t\t\t\t\t\t\t\tawait this.session.abort();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// best effort\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tif (iterationTimeout) {\n\t\t\t\t\t\tclearTimeout(iterationTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst lastAssistant = this.getLastAssistantMessage();\n\t\t\t\tif (lastAssistant?.stopReason === \"aborted\") {\n\t\t\t\t\tautomationRun.cancelRequested = true;\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (lastAssistant?.stopReason === \"error\") {\n\t\t\t\t\terrorMessage = lastAssistant.errorMessage ?? \"IOSM improvement turn failed.\";\n\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (automationRun.cancelRequested) {\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst refreshed = await this.runIosmRefreshPass({\n\t\t\t\t\tcwd,\n\t\t\t\t\tforce: false,\n\t\t\t\t\tagentVerify: true,\n\t\t\t\t});\n\t\t\t\tfinalSnapshot = refreshed.snapshot;\n\t\t\t\tcycleId = refreshed.initResult.cycle?.cycleId ?? cycleId;\n\t\t\t\tcycleDecision = refreshed.cycleDecision;\n\t\t\t\tguidePath = refreshed.guidePath;\n\t\t\t\tcurrentGoals = refreshed.initResult.analysis.goals;\n\n\t\t\t\tif (!refreshed.verification?.completed) {\n\t\t\t\t\tif (refreshed.verification?.cancelled || automationRun.cancelRequested) {\n\t\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\terrorMessage =\n\t\t\t\t\t\trefreshed.verification?.error ??\n\t\t\t\t\t\trefreshed.verification?.skippedReason ??\n\t\t\t\t\t\t\"IOSM verification did not complete.\";\n\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tautomationRun.iterationsCompleted = iteration;\n\t\t\t\tthis.showProgressLine(` Verified snapshot: ${formatMetricSnapshot(finalSnapshot)}`);\n\n\t\t\t\tconst progress = evaluateIosmAutomationProgress({\n\t\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\t\ttargetIndex,\n\t\t\t\t\tcycleDecision,\n\t\t\t\t\texplicitTarget,\n\t\t\t\t});\n\t\t\t\tif (progress.failed) {\n\t\t\t\t\terrorMessage = \"IOSM verifier marked the cycle as FAIL.\";\n\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ((!explicitTarget && progress.stabilized) || progress.targetSatisfied) {\n\t\t\t\t\tstatus = progress.stabilized ? \"stabilized\" : \"threshold_reached\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (iteration === maxIterations) {\n\t\t\t\t\tstatus = \"max_iterations\";\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error: unknown) {\n\t\t\terrorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tstatus = automationRun.cancelRequested ? \"cancelled\" : \"failed\";\n\t\t} finally {\n\t\t\tconst iterationsCompleted = automationRun.iterationsCompleted;\n\t\t\tconst resolvedTargetIndex = targetIndex;\n\t\t\tconst resolvedMaxIterations = maxIterations;\n\t\t\tthis.iosmAutomationRun = undefined;\n\n\t\t\tif (\n\t\t\t\tinitialSnapshot &&\n\t\t\t\tfinalSnapshot &&\n\t\t\t\tresolvedTargetIndex !== undefined &&\n\t\t\t\tresolvedMaxIterations !== undefined\n\t\t\t) {\n\t\t\t\tthis.showIosmAutomationSummaryCard({\n\t\t\t\t\tstatus,\n\t\t\t\t\ttargetIndex: resolvedTargetIndex,\n\t\t\t\t\tmaxIterations: resolvedMaxIterations,\n\t\t\t\t\titerationsCompleted,\n\t\t\t\t\tinitialSnapshot,\n\t\t\t\t\tfinalSnapshot,\n\t\t\t\t\tcycleId,\n\t\t\t\t\tcycleDecision,\n\t\t\t\t\terror: errorMessage,\n\t\t\t\t\tguidePath,\n\t\t\t\t});\n\t\t\t} else if (errorMessage) {\n\t\t\t\tthis.showError(`IOSM automation failed: ${errorMessage}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildStandardInitPlaybook(cwd: string, generatedBody?: string): string {\n\t\tif (generatedBody && generatedBody.trim().length > 0) {\n\t\t\tconst trimmed = generatedBody.trim();\n\t\t\treturn trimmed.startsWith(\"# AGENTS.md\") ? trimmed : `# AGENTS.md\\n\\n${trimmed}`;\n\t\t}\n\n\t\tconst packageJsonPath = path.join(cwd, \"package.json\");\n\t\tlet packageName: string | undefined;\n\t\tlet scriptsSection = \"\";\n\t\ttry {\n\t\t\tif (fs.existsSync(packageJsonPath)) {\n\t\t\t\tconst raw = fs.readFileSync(packageJsonPath, \"utf8\");\n\t\t\t\tconst parsed = JSON.parse(raw) as { name?: string; scripts?: Record<string, string> };\n\t\t\t\tif (typeof parsed.name === \"string\" && parsed.name.trim().length > 0) {\n\t\t\t\t\tpackageName = parsed.name.trim();\n\t\t\t\t}\n\t\t\t\tif (parsed.scripts && typeof parsed.scripts === \"object\") {\n\t\t\t\t\tconst entries = Object.entries(parsed.scripts).slice(0, 8);\n\t\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\t\tscriptsSection = entries.map(([name, cmd]) => ` - \\`npm run ${name}\\`: \\`${cmd}\\``).join(\"\\n\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Keep template generation resilient even if package.json is malformed.\n\t\t}\n\n\t\tconst keyFiles = [\"README.md\", \"package.json\", \"tsconfig.json\", \".env.example\", \"docker-compose.yml\"]\n\t\t\t.filter((name) => fs.existsSync(path.join(cwd, name)))\n\t\t\t.map((name) => `- \\`${name}\\``)\n\t\t\t.join(\"\\n\");\n\n\t\treturn [\n\t\t\t\"# AGENTS.md\",\n\t\t\t\"\",\n\t\t\t\"This workspace is initialized in standard (non-IOSM) mode.\",\n\t\t\tpackageName ? `\\n## Project\\n- Name: \\`${packageName}\\`` : \"\",\n\t\t\t\"\",\n\t\t\t\"## Role\",\n\t\t\t\"- Act as a pragmatic engineering agent.\",\n\t\t\t\"- Inspect relevant files first, then implement changes with minimal blast radius.\",\n\t\t\t\"- Verify changes with targeted checks/tests.\",\n\t\t\t\"\",\n\t\t\t\"## Project Startup\",\n\t\t\tscriptsSection.length > 0\n\t\t\t\t? \"- Use these project scripts first:\\n\" + scriptsSection\n\t\t\t\t: \"- Define and document run/test/build commands here after initial setup.\",\n\t\t\t\"\",\n\t\t\t\"## Key Files\",\n\t\t\tkeyFiles.length > 0 ? keyFiles : \"- Add key entrypoints and config files for quick onboarding.\",\n\t\t\t\"\",\n\t\t\t\"## Working Rules\",\n\t\t\t\"- Keep responses concise and concrete.\",\n\t\t\t\"- Prefer explicit file references and commands.\",\n\t\t\t\"- Use subagents when user explicitly requests delegation or parallelization.\",\n\t\t\t\"\",\n\t\t\t\"## Custom Agents\",\n\t\t\t\"- Put custom agent specs under `.iosm/agents/*.md`.\",\n\t\t\t\"- Use `@agent_name` in chat to target a custom agent explicitly.\",\n\t\t\t\"\",\n\t\t\t\"## Notes\",\n\t\t\t\"- Switch to profile `iosm` to enable IOSM methodology, `/iosm`, and IOSM artifact lifecycle.\",\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate async generateStandardAgentsGuideWithAgent(\n\t\tcwd: string,\n\t\tonEvent?: (event: AgentSessionEvent) => void,\n\t): Promise<{\n\t\tcontent: string;\n\t\ttoolCallsStarted: number;\n\t\ttoolCallsCompleted: number;\n\t\tassistantMessages: number;\n\t\tattempts: number;\n\t}> {\n\t\tconst model = this.session.model;\n\t\tif (!model) {\n\t\t\tthrow new Error(\"No model selected. Use /model first.\");\n\t\t}\n\n\t\tconst agentDir = getAgentDir();\n\t\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\t\tconst authStorage = AuthStorage.create(getAuthPath());\n\t\tconst modelRegistry = new ModelRegistry(authStorage, getModelsPath());\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tnoExtensions: true,\n\t\t\tnoSkills: true,\n\t\t\tnoPromptTemplates: true,\n\t\t});\n\t\tawait resourceLoader.reload();\n\n\t\tconst { session } = await createAgentSession({\n\t\t\tcwd,\n\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t\tsettingsManager,\n\t\t\tauthStorage,\n\t\t\tmodelRegistry,\n\t\t\tresourceLoader,\n\t\t\tmodel,\n\t\t\tprofile: \"plan\",\n\t\t\tenableTaskTool: false,\n\t\t});\n\n\t\tconst existingAgentsPath = path.join(cwd, \"AGENTS.md\");\n\t\tconst existingAgentsRaw = fs.existsSync(existingAgentsPath) ? fs.readFileSync(existingAgentsPath, \"utf8\") : \"\";\n\t\tconst maxExistingChars = 12_000;\n\t\tconst existingAgentsSnippet =\n\t\t\texistingAgentsRaw.length > maxExistingChars\n\t\t\t\t? `${existingAgentsRaw.slice(0, maxExistingChars)}\\n\\n<!-- truncated: ${existingAgentsRaw.length - maxExistingChars} chars omitted -->`\n\t\t\t\t: existingAgentsRaw;\n\n\t\tconst chunks: string[] = [];\n\t\tlet toolCallsStarted = 0;\n\t\tlet toolCallsCompleted = 0;\n\t\tlet assistantMessages = 0;\n\t\tconst unsubscribe = session.subscribe((event) => {\n\t\t\tonEvent?.(event);\n\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\ttoolCallsStarted += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\ttoolCallsCompleted += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"message_end\" && event.message.role === \"assistant\") {\n\t\t\t\tassistantMessages += 1;\n\t\t\t\tfor (const part of event.message.content) {\n\t\t\t\t\tif (part.type === \"text\" && part.text.trim()) {\n\t\t\t\t\t\tchunks.push(part.text.trim());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst prompt = [\n\t\t\t\"Create AGENTS.md for this repository after inspecting the real project files.\",\n\t\t\texistingAgentsSnippet.trim().length > 0\n\t\t\t\t? \"An AGENTS.md already exists: preserve useful guidance, fill missing sections, and update stale parts.\"\n\t\t\t\t: \"No AGENTS.md exists yet: create a complete first version.\",\n\t\t\t\"\",\n\t\t\t\"Requirements:\",\n\t\t\t\"- Explore repository structure and key files before writing.\",\n\t\t\t\"- You MUST call repository-inspection tools (ls/find/read/grep/bash) before final output.\",\n\t\t\t\"- Output ONLY final AGENTS.md content in markdown (no code fences, no commentary).\",\n\t\t\t\"- Include practical sections:\",\n\t\t\t\" 1) Project Overview\",\n\t\t\t\" 2) Stack and Runtime\",\n\t\t\t\" 3) Setup / Run / Test commands\",\n\t\t\t\" 4) Repository Map (important directories/files)\",\n\t\t\t\" 5) Development Workflow and Conventions\",\n\t\t\t\" 6) Troubleshooting / Pitfalls\",\n\t\t\t\" 7) Quick Task Playbooks (common tasks and where to edit)\",\n\t\t\t\"- Keep it concise but actionable.\",\n\t\t\t\"- Use concrete commands and file paths from this repository.\",\n\t\t\t\"- If information is unknown, say 'Unknown' instead of guessing.\",\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"\" : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"Existing AGENTS.md:\" : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"<existing_agents_md>\" : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? existingAgentsSnippet : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"</existing_agents_md>\" : undefined,\n\t\t].join(\"\\n\");\n\n\t\tconst strictRetryPrompt = [\n\t\t\t\"Retry with strict validation:\",\n\t\t\t\"- First, inspect the repository using tools (ls/find/read/grep/bash).\",\n\t\t\t\"- Then output ONLY final AGENTS.md markdown.\",\n\t\t\t\"- Do not include commentary, plans, or fences.\",\n\t\t].join(\"\\n\");\n\n\t\ttry {\n\t\t\tlet attempts = 0;\n\t\t\tlet latestText = \"\";\n\t\t\tlet latestAttemptToolCalls = 0;\n\n\t\t\tconst runAttempt = async (attemptPrompt: string): Promise<{ text: string; toolCalls: number }> => {\n\t\t\t\tconst chunkStart = chunks.length;\n\t\t\t\tconst toolStart = toolCallsStarted;\n\t\t\t\tawait session.prompt(attemptPrompt, { skipIosmAutopilot: true });\n\t\t\t\tconst text = chunks.slice(chunkStart).join(\"\\n\\n\").trim();\n\t\t\t\treturn {\n\t\t\t\t\ttext,\n\t\t\t\t\ttoolCalls: Math.max(0, toolCallsStarted - toolStart),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tattempts += 1;\n\t\t\tconst firstAttempt = await runAttempt(prompt);\n\t\t\tlatestText = firstAttempt.text;\n\t\t\tlatestAttemptToolCalls = firstAttempt.toolCalls;\n\n\t\t\tif (!latestText || latestAttemptToolCalls === 0) {\n\t\t\t\tattempts += 1;\n\t\t\t\tconst secondAttempt = await runAttempt(strictRetryPrompt);\n\t\t\t\tlatestText = secondAttempt.text;\n\t\t\t\tlatestAttemptToolCalls = secondAttempt.toolCalls;\n\t\t\t}\n\n\t\t\tif (!latestText) {\n\t\t\t\tthrow new Error(\"Agent returned empty AGENTS.md draft.\");\n\t\t\t}\n\t\t\tif (latestAttemptToolCalls === 0) {\n\t\t\t\tthrow new Error(\"Agent did not inspect repository files (0 tool calls).\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcontent: latestText,\n\t\t\t\ttoolCallsStarted,\n\t\t\t\ttoolCallsCompleted,\n\t\t\t\tassistantMessages,\n\t\t\t\tattempts,\n\t\t\t};\n\t\t} finally {\n\t\t\tunsubscribe();\n\t\t\tsession.dispose();\n\t\t}\n\t}\n\n\tprivate async handleStandardInitSlashCommand(options: {\n\t\tcwd: string;\n\t\tforce: boolean;\n\t\tagentVerify: boolean;\n\t}): Promise<void> {\n\t\tconst playbookPath = path.join(options.cwd, \"AGENTS.md\");\n\t\tconst agentsDir = path.join(options.cwd, \".iosm\", \"agents\");\n\t\tfs.mkdirSync(agentsDir, { recursive: true });\n\n\t\tconst existed = fs.existsSync(playbookPath);\n\t\tthis.showProgressLine(\n\t\t\texisted\n\t\t\t\t? \" Scanning repository and updating existing AGENTS.md with agent...\"\n\t\t\t\t: \" Scanning repository and generating AGENTS.md with agent...\",\n\t\t);\n\t\tconst generated = await this.generateStandardAgentsGuideWithAgent(\n\t\t\toptions.cwd,\n\t\t\tthis.createIosmVerificationEventBridge({\n\t\t\t\tloaderMessage: `Initializing workspace... (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t}),\n\t\t);\n\t\tfs.writeFileSync(playbookPath, this.buildStandardInitPlaybook(options.cwd, generated.content), \"utf8\");\n\t\tthis.showCommandTextBlock(\n\t\t\t\"Init (Standard Mode)\",\n\t\t\t[\n\t\t\t\t`Profile: ${this.activeProfileName}`,\n\t\t\t\t`AGENTS.md: ${existed ? \"updated\" : \"created\"}`,\n\t\t\t\t`Generator: agent-driven repository scan (${generated.toolCallsStarted} tool calls, ${generated.assistantMessages} assistant messages, ${generated.attempts} attempt${generated.attempts > 1 ? \"s\" : \"\"})`,\n\t\t\t\toptions.force && existed\n\t\t\t\t\t? \"Mode: force overwrite requested.\"\n\t\t\t\t\t: \"Mode: standard overwrite (existing guidance merged by agent when applicable).\",\n\t\t\t\t`.iosm/agents: ready`,\n\t\t\t\toptions.agentVerify\n\t\t\t\t\t? \"Agent verification skipped in standard mode (available in profile `iosm`).\"\n\t\t\t\t\t: \"Verification: disabled.\",\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tprivate async handleIosmInitSlashCommand(text: string): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Cannot run /init while the agent is processing a request.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Cannot run /init while compaction is running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmAutomationRun) {\n\t\t\tthis.showWarning(\"Cannot run /init while IOSM automation is running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Cannot run /init while IOSM verification is already running.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet force = false;\n\t\tlet agentVerify = true;\n\t\tlet targetDir: string | undefined;\n\n\t\tfor (const arg of args) {\n\t\t\tif (arg === \"-f\" || arg === \"--force\") {\n\t\t\t\tforce = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--agent-verify\") {\n\t\t\t\tagentVerify = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--no-agent-verify\" || arg === \"--static-only\") {\n\t\t\t\tagentVerify = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /init: ${arg}`);\n\t\t\t\tthis.showWarning(\"Usage: /init [path] [--force] [--no-agent-verify]\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!targetDir) {\n\t\t\t\ttargetDir = arg;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.showWarning(`Unexpected argument for /init: ${arg}`);\n\t\t\tthis.showWarning(\"Usage: /init [path] [--force] [--no-agent-verify]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst cwd = path.resolve(this.sessionManager.getCwd(), targetDir ?? \".\");\n\t\t\tif (this.activeProfileName !== \"iosm\") {\n\t\t\t\tawait this.handleStandardInitSlashCommand({\n\t\t\t\t\tcwd,\n\t\t\t\t\tforce,\n\t\t\t\t\tagentVerify,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Show init header in chat\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\ttheme.bold(theme.fg(\"accent\", \"◆ \")) + theme.bold(\"/init\") + theme.fg(\"muted\", ` ${cwd}`),\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t\tthis.ui.requestRender();\n\n\t\t\tconst result = await initIosmWorkspace({ cwd, force });\n\n\t\t\tif (result.cycle?.reusedExistingCycle) {\n\t\t\t\tthis.showProgressLine(` Reusing existing cycle: ${result.cycle.cycleId}`);\n\t\t\t} else if (result.cycle) {\n\t\t\t\tthis.showProgressLine(\n\t\t\t\t\t` Analyzed ${result.analysis.files_analyzed} files (${result.analysis.source_file_count} src · ${result.analysis.test_file_count} tests · ${result.analysis.doc_file_count} docs)`,\n\t\t\t\t);\n\t\t\t\tthis.showProgressLine(` Created cycle: ${result.cycle.cycleId}`);\n\t\t\t}\n\n\t\t\tlet verification: IosmInitVerificationSummary | undefined;\n\t\t\tif (agentVerify) {\n\t\t\t\tverification = await this.runIosmInitAgentVerification(\n\t\t\t\t\tresult,\n\t\t\t\t\tcwd,\n\t\t\t\t\tthis.createIosmVerificationEventBridge(),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst currentSnapshot = this.resolveIosmSnapshot(result, verification);\n\n\t\t\tconst checklist = buildIosmPriorityChecklist(currentSnapshot.metrics, 3);\n\t\t\tconst guidePath = verification?.guidePath ?? getIosmGuidePath(result.rootDir);\n\n\t\t\t// Render rich summary card\n\t\t\tthis.showIosmInitSummaryCard(result, currentSnapshot, checklist, guidePath, verification, agentVerify);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(\n\t\t\t\t`Failed to initialize IOSM workspace: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate showIosmInitSummaryCard(\n\t\tresult: IosmInitResult,\n\t\tsnapshot: IosmMetricSnapshot,\n\t\tchecklist: ReturnType<typeof buildIosmPriorityChecklist>,\n\t\tguidePath: string,\n\t\tverification: IosmInitVerificationSummary | undefined,\n\t\tagentVerify: boolean,\n\t): void {\n\t\tconst source = verification?.completed ? \"verified\" : \"heuristic\";\n\t\tconst cycleId = result.cycle?.cycleId ?? \"—\";\n\t\tconst home = process.env.HOME ?? \"\";\n\n\t\tconst shortPath = (p: string): string =>\n\t\t\thome && p.startsWith(home) ? `~${p.slice(home.length)}` : p;\n\n\t\tconst metricBar = (value: number | null): string => {\n\t\t\tif (value === null) return \"n/a \";\n\t\t\tconst filled = Math.round(value * 8);\n\t\t\treturn \"█\".repeat(filled) + \"░\".repeat(8 - filled) + ` ${value.toFixed(2)}`;\n\t\t};\n\n\t\tconst statusIcon = (value: number | null): string => {\n\t\t\tif (value === null) return \"?\";\n\t\t\tif (value < 0.55) return \"⚠\";\n\t\t\tif (value < 0.75) return \"~\";\n\t\t\treturn \"✓\";\n\t\t};\n\n\t\tconst metrics = snapshot.metrics;\n\t\tconst metricOrder: Array<keyof typeof metrics> = [\n\t\t\t\"semantic\",\n\t\t\t\"logic\",\n\t\t\t\"performance\",\n\t\t\t\"simplicity\",\n\t\t\t\"modularity\",\n\t\t\t\"flow\",\n\t\t];\n\n\t\tconst metricRows = metricOrder\n\t\t\t.map((m) => {\n\t\t\t\tconst v = metrics[m];\n\t\t\t\tconst icon = statusIcon(v);\n\t\t\t\tconst bar = metricBar(v);\n\t\t\t\treturn `| ${icon} | ${m.padEnd(11)} | ${bar} |`;\n\t\t\t})\n\t\t\t.join(\"\\n\");\n\n\t\tconst iosmIdx =\n\t\t\tsnapshot.iosm_index !== null && snapshot.iosm_index !== undefined\n\t\t\t\t? snapshot.iosm_index.toFixed(3)\n\t\t\t\t: \"n/a\";\n\t\tconst conf =\n\t\t\tsnapshot.decision_confidence !== null && snapshot.decision_confidence !== undefined\n\t\t\t\t? snapshot.decision_confidence.toFixed(2)\n\t\t\t\t: \"n/a\";\n\n\t\tconst priorityLines = checklist\n\t\t\t.map(\n\t\t\t\t(item, i) =>\n\t\t\t\t\t`${i + 1}. **${item.metric}** \\`${item.value === null ? \"n/a\" : item.value.toFixed(2)}\\` — ${item.action}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\n\t\tconst goals =\n\t\t\tresult.analysis.goals.length > 0 ? result.analysis.goals.map((g) => `- ${g}`).join(\"\\n\") : \"- (none detected)\";\n\n\t\tconst fileStats = `${result.analysis.files_analyzed} total · ${result.analysis.source_file_count} src · ${result.analysis.test_file_count} tests · ${result.analysis.doc_file_count} docs`;\n\n\t\tconst verifyStatus = !agentVerify\n\t\t\t? \"_skipped (--no-agent-verify)_\"\n\t\t\t: verification?.completed\n\t\t\t\t? `✓ completed (${verification.toolCalls ?? 0} tool calls)`\n\t\t\t\t: verification?.cancelled\n\t\t\t\t\t? \"⚠ cancelled by user\"\n\t\t\t\t\t: verification?.skippedReason\n\t\t\t\t\t\t? `⚠ skipped: ${verification.skippedReason}`\n\t\t\t\t\t\t: verification?.error\n\t\t\t\t\t\t\t? `✗ failed: ${verification.error}`\n\t\t\t\t\t\t\t: \"_not run_\";\n\n\t\tconst md = `## IOSM workspace initialized\n\n**Project:** \\`${shortPath(result.rootDir)}\\`\n**Files:** ${fileStats}\n**Cycle:** \\`${cycleId}\\`\n**Assessment:** ${source} **Verification:** ${verifyStatus}\n\n### Detected goals\n${goals}\n\n### Metric scores\n\n| | Metric | Score |\n|---|-------------|------------------|\n${metricRows}\n\n**IOSM-Index:** \\`${iosmIdx}\\` **Confidence:** \\`${conf}\\`\n\n### Top priorities this cycle\n\n${priorityLines}\n\n### Key workspace files\n\n- \\`IOSM.md\\` — agent playbook (auto-loaded as context each session)\n- \\`iosm.yaml\\` — cycle configuration${result.cycle ? `\\n- \\`.iosm/cycles/${cycleId}/cycle-report.json\\`` : \"\"}\n- \\`${shortPath(guidePath)}\\`\n\n### Next steps\n\nRe-read \\`IOSM.md\\`, then start a session describing which priority to tackle first.\nThe agent will automatically receive IOSM context on every turn.`;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(md, 1, 0, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleIosmCycleListSlashCommand(): void {\n\t\tif (!this.requireIosmMode(\"/cycle-list\")) return;\n\t\ttry {\n\t\t\tconst cycles = listIosmCycles(this.sessionManager.getCwd());\n\t\t\tif (cycles.length === 0) {\n\t\t\t\tthis.showStatus(\"No IOSM cycles found.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lines: string[] = [];\n\t\t\tfor (const cycle of cycles) {\n\t\t\t\tconst goals = cycle.goals.length > 0 ? cycle.goals.join(\"; \") : \"no goals recorded\";\n\t\t\t\tlines.push(`${cycle.cycleId} ${cycle.status} ${cycle.decision}`);\n\t\t\t\tlines.push(` ${goals}`);\n\t\t\t}\n\t\t\tthis.showCommandTextBlock(\"IOSM Cycles\", lines.join(\"\\n\"));\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to list IOSM cycles: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleIosmCyclePlanSlashCommand(text: string): Promise<void> {\n\t\tif (!this.requireIosmMode(\"/cycle-plan\")) return;\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet force = false;\n\t\tlet cycleId: string | undefined;\n\t\tconst goals: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst arg = args[index];\n\t\t\tif (arg === \"-f\" || arg === \"--force\") {\n\t\t\t\tforce = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--id\") {\n\t\t\t\tif (index + 1 >= args.length) {\n\t\t\t\t\tthis.showWarning('Missing value for \"--id\".');\n\t\t\t\t\tthis.showWarning('Usage: /cycle-plan [--id <cycle-id>] [--force] \"goal one\" \"goal two\"');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcycleId = args[index + 1];\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /cycle-plan: ${arg}`);\n\t\t\t\tthis.showWarning('Usage: /cycle-plan [--id <cycle-id>] [--force] \"goal one\" \"goal two\"');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgoals.push(arg);\n\t\t}\n\n\t\tif (goals.length === 0) {\n\t\t\tthis.showWarning('Usage: /cycle-plan [--id <cycle-id>] [--force] \"goal one\" \"goal two\"');\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst planned = planIosmCycle({\n\t\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\t\tgoals,\n\t\t\t\tforce,\n\t\t\t\tcycleId,\n\t\t\t});\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"IOSM Cycle Plan\",\n\t\t\t\t[\n\t\t\t\t\t`Planned IOSM cycle ${planned.cycleId}`,\n\t\t\t\t\t` ${planned.cycleDir}`,\n\t\t\t\t\t` baseline: ${planned.baselineReportPath}`,\n\t\t\t\t\t` hypotheses: ${planned.hypothesesPath}`,\n\t\t\t\t\t` report: ${planned.reportPath}`,\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to plan IOSM cycle: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate formatIosmCycleSelectionOption(index: number, cycle: ReturnType<typeof listIosmCycles>[number]): string {\n\t\tconst goals = cycle.goals.length > 0 ? cycle.goals.join(\"; \") : \"no goals recorded\";\n\t\treturn `${index}. ${cycle.cycleId} · ${cycle.status} · ${cycle.decision} · ${goals}`;\n\t}\n\n\tprivate async selectIosmCycleId(commandName: \"/cycle-report\" | \"/cycle-status\"): Promise<string | undefined> {\n\t\tconst cycles = listIosmCycles(this.sessionManager.getCwd());\n\t\tif (cycles.length === 0) {\n\t\t\tthis.showStatus(\"No IOSM cycles found.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\tif (!canShowInteractiveSelector) {\n\t\t\treturn cycles[0]?.cycleId;\n\t\t}\n\t\tconst options = cycles.map((cycle, index) => this.formatIosmCycleSelectionOption(index + 1, cycle));\n\t\tconst selected = await this.showExtensionSelector(`${commandName}: select cycle`, options);\n\t\tif (!selected) {\n\t\t\tthis.showStatus(`${commandName} cancelled.`);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst selectedIndex = options.indexOf(selected);\n\t\tconst cycle = selectedIndex >= 0 ? cycles[selectedIndex] : undefined;\n\t\tif (!cycle) {\n\t\t\tthis.showWarning(\"Selected cycle is no longer available.\");\n\t\t\treturn undefined;\n\t\t}\n\t\treturn cycle.cycleId;\n\t}\n\n\tprivate async handleIosmCycleReportSlashCommand(text: string): Promise<void> {\n\t\tif (!this.requireIosmMode(\"/cycle-report\")) return;\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.some((arg) => arg.startsWith(\"-\"))) {\n\t\t\tthis.showWarning(\"Usage: /cycle-report [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\t\tif (args.length > 1) {\n\t\t\tthis.showWarning(\"Usage: /cycle-report [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tlet cycleId: string | undefined = args[0];\n\t\t\tif (!cycleId) {\n\t\t\t\tcycleId = await this.selectIosmCycleId(\"/cycle-report\");\n\t\t\t\tif (!cycleId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst report = readIosmCycleReport(this.sessionManager.getCwd(), cycleId);\n\t\t\tthis.showCommandJsonBlock(\"IOSM Cycle Report\", report);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to read IOSM cycle report: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleIosmCycleStatusSlashCommand(text: string): Promise<void> {\n\t\tif (!this.requireIosmMode(\"/cycle-status\")) return;\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.some((arg) => arg.startsWith(\"-\"))) {\n\t\t\tthis.showWarning(\"Usage: /cycle-status [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\t\tif (args.length > 1) {\n\t\t\tthis.showWarning(\"Usage: /cycle-status [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tlet cycleId: string | undefined = args[0];\n\t\t\tif (!cycleId) {\n\t\t\t\tcycleId = await this.selectIosmCycleId(\"/cycle-status\");\n\t\t\t\tif (!cycleId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = inspectIosmCycle(this.sessionManager.getCwd(), cycleId);\n\t\t\tconst guardrails =\n\t\t\t\tstatus.guardrailsPass === null ? \"pending\" : status.guardrailsPass ? \"pass\" : \"fail\";\n\t\t\tconst lines: string[] = [\n\t\t\t\t`Cycle: ${status.cycleId}`,\n\t\t\t\t`Status: ${status.status}`,\n\t\t\t\t`Decision: ${status.decision}`,\n\t\t\t\t`Report: ${status.reportPath}`,\n\t\t\t\t`Capacity: ${status.capacityPass ? \"pass\" : \"fail\"}`,\n\t\t\t\t`Guardrails: ${guardrails}`,\n\t\t\t\t`Report Complete: ${status.reportComplete ? \"yes\" : \"no\"}`,\n\t\t\t\t`Learning Closed: ${status.learningClosed ? \"yes\" : \"no\"}`,\n\t\t\t\t`History Recorded: ${status.historyRecorded ? \"yes\" : \"no\"}`,\n\t\t\t];\n\n\t\t\tif (status.blockingIssues.length > 0) {\n\t\t\t\tlines.push(\"\", \"Blocking Issues:\");\n\t\t\t\tfor (const issue of status.blockingIssues) {\n\t\t\t\t\tlines.push(` - ${issue}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (status.warnings.length > 0) {\n\t\t\t\tlines.push(\"\", \"Warnings:\");\n\t\t\t\tfor (const warning of status.warnings) {\n\t\t\t\t\tlines.push(` - ${warning}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.showCommandTextBlock(\"IOSM Cycle Status\", lines.join(\"\\n\"));\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to inspect IOSM cycle: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleReloadCommand(): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetExtensionUI();\n\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Reloading extensions, skills, prompts, themes...\", {\n\t\t\tcancellable: false,\n\t\t});\n\t\tconst previousEditor = this.editor;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst dismissLoader = (editor: Component) => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(editor);\n\t\t\tthis.ui.setFocus(editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tif (this.mcpRuntime) {\n\t\t\t\tawait this.mcpRuntime.refresh();\n\t\t\t\tthis.syncMcpToolsWithSession();\n\t\t\t\tconst mcpErrors = this.mcpRuntime.getErrors();\n\t\t\t\tif (mcpErrors.length > 0) {\n\t\t\t\t\tthis.showWarning(\n\t\t\t\t\t\t`MCP config warning: ${mcpErrors[0]}${mcpErrors.length > 1 ? ` (+${mcpErrors.length - 1} more)` : \"\"}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = this.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\tif (!themeResult.success) {\n\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\t\tthis.setupAutocomplete(this.fdPath);\n\t\t\tconst runner = this.session.extensionRunner;\n\t\t\tif (runner) {\n\t\t\t\tthis.setupExtensionShortcuts(runner);\n\t\t\t}\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tdismissLoader(this.editor as Component);\n\t\t\tthis.showLoadedResources({\n\t\t\t\textensionPaths: runner?.getExtensionPaths() ?? [],\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\tthis.showStatus(\"Reloaded extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissLoader(previousEditor as Component);\n\t\t\tthis.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleExportCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.length > 1) {\n\t\t\tthis.showWarning(\"Usage: /export [output-path]\");\n\t\t\treturn;\n\t\t}\n\t\tlet outputPath: string | undefined = args[0];\n\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\tif (!outputPath && canShowInteractiveSelector) {\n\t\t\tconst enteredPath = await this.showExtensionInput(\n\t\t\t\t\"/export: output path (optional)\",\n\t\t\t\t\"Leave empty for default export file name\",\n\t\t\t);\n\t\t\tif (enteredPath === undefined) {\n\t\t\t\tthis.showStatus(\"Export cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst normalized = enteredPath.trim();\n\t\t\toutputPath = normalized.length > 0 ? normalized : undefined;\n\t\t}\n\n\t\tif (outputPath && fs.existsSync(outputPath) && canShowInteractiveSelector) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\"Overwrite existing export file?\", outputPath);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(\"Export cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst filePath = await this.session.exportToHtml(outputPath);\n\t\t\tthis.showStatus(`Session exported to: ${filePath}`);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\t}\n\n\tprivate async handleShareCommand(): Promise<void> {\n\t\t// Check if gh is available and logged in\n\t\ttry {\n\t\t\tconst authResult = spawnSync(\"gh\", [\"auth\", \"status\"], { encoding: \"utf-8\" });\n\t\t\tif (authResult.status !== 0) {\n\t\t\t\tthis.showError(\"GitHub CLI is not logged in. Run 'gh auth login' first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\tthis.showError(\"GitHub CLI (gh) is not installed. Install it from https://cli.github.com/\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Export to a temp file\n\t\tconst tmpFile = path.join(os.tmpdir(), \"session.html\");\n\t\ttry {\n\t\t\tawait this.session.exportToHtml(tmpFile);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\treturn;\n\t\t}\n\n\t\t// Show cancellable loader, replacing the editor\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Creating gist...\");\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst restoreEditor = () => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t};\n\n\t\t// Create a secret gist asynchronously\n\t\tlet proc: ReturnType<typeof spawn> | null = null;\n\n\t\tloader.onAbort = () => {\n\t\t\tproc?.kill();\n\t\t\trestoreEditor();\n\t\t\tthis.showStatus(\"Share cancelled\");\n\t\t};\n\n\t\ttry {\n\t\t\tconst result = await new Promise<{ stdout: string; stderr: string; code: number | null }>((resolve) => {\n\t\t\t\tproc = spawn(\"gh\", [\"gist\", \"create\", \"--public=false\", tmpFile]);\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tlet stderr = \"\";\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\t\t\tstderr += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => resolve({ stdout, stderr, code }));\n\t\t\t});\n\n\t\t\tif (loader.signal.aborted) return;\n\n\t\t\trestoreEditor();\n\n\t\t\tif (result.code !== 0) {\n\t\t\t\tconst errorMsg = result.stderr?.trim() || \"Unknown error\";\n\t\t\t\tthis.showError(`Failed to create gist: ${errorMsg}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Extract gist ID from the URL returned by gh\n\t\t\t// gh returns something like: https://gist.github.com/username/GIST_ID\n\t\t\tconst gistUrl = result.stdout?.trim();\n\t\t\tconst gistId = gistUrl?.split(\"/\").pop();\n\t\t\tif (!gistId) {\n\t\t\t\tthis.showError(\"Failed to parse gist ID from gh output\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create the preview URL\n\t\t\tconst previewUrl = getShareViewerUrl(gistId);\n\t\t\tthis.showStatus(`Share URL: ${previewUrl}\\nGist: ${gistUrl}`);\n\t\t} catch (error: unknown) {\n\t\t\tif (!loader.signal.aborted) {\n\t\t\t\trestoreEditor();\n\t\t\t\tthis.showError(`Failed to create gist: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleCopyCommand(): void {\n\t\tconst text = this.session.getLastAssistantText();\n\t\tif (!text) {\n\t\t\tthis.showError(\"No agent messages to copy yet.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tcopyToClipboard(text);\n\t\t\tthis.showStatus(\"Copied last agent message to clipboard\");\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate handleNameCommand(text: string): void {\n\t\tconst name = text.replace(/^\\/name\\s*/, \"\").trim();\n\t\tif (!name) {\n\t\t\tconst currentName = this.sessionManager.getSessionName();\n\t\t\tif (currentName) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name: ${currentName}`), 1, 0));\n\t\t\t} else {\n\t\t\t\tthis.showWarning(\"Usage: /name <name>\");\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sessionManager.appendSessionInfo(name);\n\t\tthis.updateTerminalTitle();\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name set: ${name}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleSessionCommand(): void {\n\t\tconst stats = this.session.getSessionStats();\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\n\t\tlet info = `${theme.bold(\"Session Info\")}\\n\\n`;\n\t\tif (sessionName) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Name:\")} ${sessionName}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"File:\")} ${stats.sessionFile ?? \"In-memory\"}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"ID:\")} ${stats.sessionId}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Messages\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"User:\")} ${stats.userMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Assistant:\")} ${stats.assistantMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Calls:\")} ${stats.toolCalls}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Results:\")} ${stats.toolResults}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.totalMessages}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Tokens\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Input:\")} ${stats.tokens.input.toLocaleString()}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Output:\")} ${stats.tokens.output.toLocaleString()}\\n`;\n\t\tif (stats.tokens.cacheRead > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Read:\")} ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t\t}\n\t\tif (stats.tokens.cacheWrite > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Write:\")} ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\t\tif (stats.cost > 0) {\n\t\t\tinfo += `\\n${theme.bold(\"Cost\")}\\n`;\n\t\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.cost.toFixed(4)}`;\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(info, 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleChangelogCommand(): void {\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst allEntries = parseChangelog(changelogPath);\n\n\t\tconst changelogMarkdown =\n\t\t\tallEntries.length > 0\n\t\t\t\t? allEntries\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.map((e) => e.content)\n\t\t\t\t\t.join(\"\\n\\n\")\n\t\t\t\t: \"No changelog entries found.\";\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Capitalize keybinding for display (e.g., \"ctrl+c\" -> \"Ctrl+C\").\n\t */\n\tprivate capitalizeKey(key: string): string {\n\t\treturn key\n\t\t\t.split(\"/\")\n\t\t\t.map((k) =>\n\t\t\t\tk\n\t\t\t\t\t.split(\"+\")\n\t\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t\t\t\t.join(\"+\"),\n\t\t\t)\n\t\t\t.join(\"/\");\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t */\n\tprivate getAppKeyDisplay(action: AppAction): string {\n\t\treturn this.capitalizeKey(appKey(this.keybindings, action));\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\tprivate getEditorKeyDisplay(action: EditorAction): string {\n\t\treturn this.capitalizeKey(editorKey(action));\n\t}\n\n\tprivate handleHotkeysCommand(): void {\n\t\t// Navigation keybindings\n\t\tconst cursorWordLeft = this.getEditorKeyDisplay(\"cursorWordLeft\");\n\t\tconst cursorWordRight = this.getEditorKeyDisplay(\"cursorWordRight\");\n\t\tconst cursorLineStart = this.getEditorKeyDisplay(\"cursorLineStart\");\n\t\tconst cursorLineEnd = this.getEditorKeyDisplay(\"cursorLineEnd\");\n\t\tconst jumpForward = this.getEditorKeyDisplay(\"jumpForward\");\n\t\tconst jumpBackward = this.getEditorKeyDisplay(\"jumpBackward\");\n\t\tconst pageUp = this.getEditorKeyDisplay(\"pageUp\");\n\t\tconst pageDown = this.getEditorKeyDisplay(\"pageDown\");\n\n\t\t// Editing keybindings\n\t\tconst submit = this.getEditorKeyDisplay(\"submit\");\n\t\tconst newLine = this.getEditorKeyDisplay(\"newLine\");\n\t\tconst deleteWordBackward = this.getEditorKeyDisplay(\"deleteWordBackward\");\n\t\tconst deleteWordForward = this.getEditorKeyDisplay(\"deleteWordForward\");\n\t\tconst deleteToLineStart = this.getEditorKeyDisplay(\"deleteToLineStart\");\n\t\tconst deleteToLineEnd = this.getEditorKeyDisplay(\"deleteToLineEnd\");\n\t\tconst yank = this.getEditorKeyDisplay(\"yank\");\n\t\tconst yankPop = this.getEditorKeyDisplay(\"yankPop\");\n\t\tconst undo = this.getEditorKeyDisplay(\"undo\");\n\t\tconst tab = this.getEditorKeyDisplay(\"tab\");\n\n\t\t// App keybindings\n\t\tconst interrupt = this.getAppKeyDisplay(\"interrupt\");\n\t\tconst clear = this.getAppKeyDisplay(\"clear\");\n\t\tconst exit = this.getAppKeyDisplay(\"exit\");\n\t\tconst suspend = this.getAppKeyDisplay(\"suspend\");\n\t\tconst cycleProfile = this.getAppKeyDisplay(\"cycleProfile\");\n\t\tconst cycleThinkingLevel = this.getAppKeyDisplay(\"cycleThinkingLevel\");\n\t\tconst cycleModelForward = this.getAppKeyDisplay(\"cycleModelForward\");\n\t\tconst selectModel = this.getAppKeyDisplay(\"selectModel\");\n\t\tconst expandTools = this.getAppKeyDisplay(\"expandTools\");\n\t\tconst toggleThinking = this.getAppKeyDisplay(\"toggleThinking\");\n\t\tconst externalEditor = this.getAppKeyDisplay(\"externalEditor\");\n\t\tconst steer = this.getAppKeyDisplay(\"steer\");\n\t\tconst followUp = this.getAppKeyDisplay(\"followUp\");\n\t\tconst dequeue = this.getAppKeyDisplay(\"dequeue\");\n\n\t\tlet hotkeys = `\n**Navigation**\n| Key | Action |\n|-----|--------|\n| \\`Arrow keys\\` | Move cursor / browse history (Up when empty) |\n| \\`${cursorWordLeft}\\` / \\`${cursorWordRight}\\` | Move by word |\n| \\`${cursorLineStart}\\` | Start of line |\n| \\`${cursorLineEnd}\\` | End of line |\n| \\`${jumpForward}\\` | Jump forward to character |\n| \\`${jumpBackward}\\` | Jump backward to character |\n| \\`${pageUp}\\` / \\`${pageDown}\\` | Scroll by page |\n\n**Editing**\n| Key | Action |\n|-----|--------|\n| \\`${submit}\\` | Send message |\n| \\`${newLine}\\` | New line${process.platform === \"win32\" ? \" (Ctrl+Enter on Windows Terminal)\" : \"\"} |\n| \\`${deleteWordBackward}\\` | Delete word backwards |\n| \\`${deleteWordForward}\\` | Delete word forwards |\n| \\`${deleteToLineStart}\\` | Delete to start of line |\n| \\`${deleteToLineEnd}\\` | Delete to end of line |\n| \\`${yank}\\` | Paste the most-recently-deleted text |\n| \\`${yankPop}\\` | Cycle through the deleted text after pasting |\n| \\`${undo}\\` | Undo |\n\n**Other**\n| Key | Action |\n|-----|--------|\n| \\`${tab}\\` | Path completion / accept autocomplete |\n| \\`${interrupt}\\` | Cancel autocomplete / abort streaming |\n| \\`${clear}\\` | Clear editor (first) / exit (second) |\n| \\`${exit}\\` | Exit (when editor is empty) |\n| \\`${suspend}\\` | Suspend to background |\n| \\`${cycleProfile}\\` | Cycle agent profile |\n| \\`${cycleThinkingLevel}\\` | Cycle thinking level |\n| \\`${cycleModelForward}\\` | Cycle models |\n| \\`${selectModel}\\` | Open model selector |\n| \\`${expandTools}\\` | Toggle tool output expansion |\n| \\`${toggleThinking}\\` | Toggle thinking block visibility |\n| \\`${externalEditor}\\` | Edit message in external editor |\n| \\`${steer}\\` | Queue steer message |\n| \\`${followUp}\\` | Queue follow-up message |\n| \\`${dequeue}\\` | Restore queued messages |\n| \\`Ctrl+V\\` | Paste image from clipboard |\n| \\`/\\` | Slash commands |\n| \\`!\\` | Run bash command |\n| \\`!!\\` | Run bash command (excluded from context) |\n`;\n\n\t\t// Add extension-registered shortcuts\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (extensionRunner) {\n\t\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\t\tif (shortcuts.size > 0) {\n\t\t\t\thotkeys += `\n**Extensions**\n| Key | Action |\n|-----|--------|\n`;\n\t\t\t\tfor (const [key, shortcut] of shortcuts) {\n\t\t\t\t\tconst description = shortcut.description ?? shortcut.extensionPath;\n\t\t\t\t\tconst keyDisplay = key.replace(/\\b\\w/g, (c) => c.toUpperCase());\n\t\t\t\t\thotkeys += `| \\`${keyDisplay}\\` | ${description} |\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"Keyboard Shortcuts\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleClearCommand(): Promise<void> {\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// New session via session (emits extension session events)\n\t\tawait this.session.newSession();\n\n\t\t// Clear UI state\n\t\tthis.chatContainer.clear();\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"accent\", \"✓ New session started\")}`, 1, 1));\n\t\tthis.refreshBuiltInHeader();\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDebugCommand(): void {\n\t\tconst width = this.ui.terminal.columns;\n\t\tconst height = this.ui.terminal.rows;\n\t\tconst allLines = this.ui.render(width);\n\n\t\tconst debugLogPath = getDebugLogPath();\n\t\tconst debugData = [\n\t\t\t`Debug output at ${new Date().toISOString()}`,\n\t\t\t`Terminal: ${width}x${height}`,\n\t\t\t`Total lines: ${allLines.length}`,\n\t\t\t\"\",\n\t\t\t\"=== All rendered lines with visible widths ===\",\n\t\t\t...allLines.map((line, idx) => {\n\t\t\t\tconst vw = visibleWidth(line);\n\t\t\t\tconst escaped = JSON.stringify(line);\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t\t}),\n\t\t\t\"\",\n\t\t\t\"=== Agent messages (JSONL) ===\",\n\t\t\t...this.session.messages.map((msg) => JSON.stringify(msg)),\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\t\tfs.writeFileSync(debugLogPath, debugData);\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(`${theme.fg(\"accent\", \"✓ Debug log written\")}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleArminSaysHi(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new ArminComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDaxnuts(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DaxnutsComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate checkDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\tthis.handleDaxnuts();\n\t\t}\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\tconst extensionRunner = this.session.extensionRunner;\n\n\t\t// Emit user_bash event to let extensions intercept\n\t\tconst eventResult = extensionRunner\n\t\t\t? await extensionRunner.emitUserBash({\n\t\t\t\ttype: \"user_bash\",\n\t\t\t\tcommand,\n\t\t\t\texcludeFromContext,\n\t\t\t\tcwd: process.cwd(),\n\t\t\t})\n\t\t\t: undefined;\n\n\t\t// If extension returned a full result, use it directly\n\t\tif (eventResult?.result) {\n\t\t\tconst result = eventResult.result;\n\n\t\t\t// Create UI component for display\n\t\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t\t} else {\n\t\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t\t}\n\n\t\t\t// Show output and complete\n\t\t\tif (result.output) {\n\t\t\t\tthis.bashComponent.appendOutput(result.output);\n\t\t\t}\n\t\t\tthis.bashComponent.setComplete(\n\t\t\t\tresult.exitCode,\n\t\t\t\tresult.cancelled,\n\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\tresult.fullOutputPath,\n\t\t\t);\n\n\t\t\t// Record the result in session\n\t\t\tthis.session.recordBashResult(command, result, { excludeFromContext });\n\t\t\tthis.bashComponent = undefined;\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\t// Normal execution path (possibly with custom operations)\n\t\tconst isDeferred = this.session.isStreaming;\n\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t}\n\t\tthis.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await this.session.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (this.bashComponent) {\n\t\t\t\t\t\tthis.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext, operations: eventResult?.operations },\n\t\t\t);\n\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\tthis.showError(`Bash command failed: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\n\t\tthis.bashComponent = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\tconst entries = this.sessionManager.getEntries();\n\t\tconst messageCount = entries.filter((e) => e.type === \"message\").length;\n\n\t\tif (messageCount < 2) {\n\t\t\tthis.showWarning(\"Nothing to compact (no messages yet)\");\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.executeCompaction(customInstructions, false);\n\t}\n\n\tprivate async executeCompaction(customInstructions?: string, isAuto = false): Promise<CompactionResult | undefined> {\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// Set up escape handler during compaction\n\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tvoid this.interruptCurrentWork();\n\t\t};\n\n\t\t// Show compacting status\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tconst cancelHint = `(${appKey(this.keybindings, \"interrupt\")} to cancel)`;\n\t\tconst label = isAuto ? `Auto-compacting context... ${cancelHint}` : `Compacting context... ${cancelHint}`;\n\t\tconst compactingLoader = new Loader(\n\t\t\tthis.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tlabel,\n\t\t);\n\t\tthis.statusContainer.addChild(compactingLoader);\n\t\tthis.ui.requestRender();\n\n\t\tlet result: CompactionResult | undefined;\n\n\t\ttry {\n\t\t\tresult = await this.session.compact(customInstructions);\n\n\t\t\t// Rebuild UI\n\t\t\tthis.rebuildChatFromMessages();\n\n\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\tconst msg = createCompactionSummaryMessage(result.summary, result.tokensBefore, new Date().toISOString());\n\t\t\tthis.addMessageToChat(msg);\n\n\t\t\tthis.footer.invalidate();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\")) {\n\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t} else {\n\t\t\t\tthis.showError(`Compaction failed: ${message}`);\n\t\t\t}\n\t\t} finally {\n\t\t\tcompactingLoader.stop();\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t}\n\t\tvoid this.flushCompactionQueue({ willRetry: false });\n\t\treturn result;\n\t}\n\n\tstop(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.ui.stop();\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"interactive-mode.js","sourceRoot":"","sources":["../../../src/modes/interactive/interactive-mode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Interactive mode for the coding agent.\n * Handles TUI rendering and user interaction, delegating business logic to AgentSession.\n */\n\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport type { AgentMessage } from \"@mariozechner/pi-agent-core\";\nimport type { AssistantMessage, ImageContent, Message, Model, OAuthProviderId } from \"@mariozechner/pi-ai\";\nimport type {\n\tAutocompleteItem,\n\tAutocompleteProvider,\n\tEditorAction,\n\tEditorComponent,\n\tEditorTheme,\n\tKeyId,\n\tMarkdownTheme,\n\tOverlayHandle,\n\tOverlayOptions,\n\tSlashCommand,\n} from \"@mariozechner/pi-tui\";\nimport {\n\tCombinedAutocompleteProvider,\n\ttype Component,\n\tContainer,\n\tfuzzyFilter,\n\tLoader,\n\tMarkdown,\n\tmatchesKey,\n\tProcessTerminal,\n\tSpacer,\n\tText,\n\ttruncateToWidth,\n\tTruncatedText,\n\tTUI,\n\tvisibleWidth,\n} from \"@mariozechner/pi-tui\";\nimport { spawn, spawnSync } from \"child_process\";\nimport {\n\tAPP_NAME,\n\tCHANGELOG_URL,\n\tENV_SESSION_TRACE,\n\tENV_OFFLINE,\n\tENV_SKIP_VERSION_CHECK,\n\tgetAgentDir,\n\tgetAuthPath,\n\tgetDebugLogPath,\n\tgetModelsPath,\n\tgetSessionTracePath,\n\tgetShareViewerUrl,\n\tgetUpdateInstruction,\n\tisSessionTraceEnabled,\n\tPACKAGE_NAME,\n\tVERSION,\n} from \"../../config.js\";\nimport { AuthStorage } from \"../../core/auth-storage.js\";\nimport {\n\tgetAgentProfile,\n\tgetMainProfileNames,\n\tgetProfileNames,\n\tisValidProfileName,\n\ttype AgentProfileName,\n} from \"../../core/agent-profiles.js\";\nimport { type AgentSession, type AgentSessionEvent, parseSkillBlock } from \"../../core/agent-session.js\";\nimport type { CompactionResult } from \"../../core/compaction/index.js\";\nimport type {\n\tExtensionContext,\n\tExtensionRunner,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n} from \"../../core/extensions/index.js\";\nimport { FooterDataProvider, type ReadonlyFooterDataProvider } from \"../../core/footer-data-provider.js\";\nimport { type AppAction, KeybindingsManager } from \"../../core/keybindings.js\";\nimport {\n\tcreateCompactionSummaryMessage,\n\tINTERNAL_UI_META_CUSTOM_TYPE,\n\tisInternalUiMetaDetails,\n} from \"../../core/messages.js\";\nimport { ModelRegistry } from \"../../core/model-registry.js\";\nimport { resolveModelScope } from \"../../core/model-resolver.js\";\nimport {\n\tgetMcpCommandHelp,\n\tparseMcpAddCommand,\n\tparseMcpTargetCommand,\n\ttype McpServerConfig,\n\ttype McpRuntime,\n\ttype McpScope,\n} from \"../../core/mcp/index.js\";\nimport {\n\taddMemoryEntry,\n\tgetMemoryFilePath,\n\treadMemoryEntries,\n\tremoveMemoryEntry,\n\tupdateMemoryEntry,\n\ttype MemoryScope,\n} from \"../../core/memory.js\";\nimport {\n\tContractService,\n\tnormalizeEngineeringContract,\n\ttype ContractScope,\n\ttype ContractState,\n\ttype EngineeringContract,\n} from \"../../core/contract.js\";\nimport {\n\tSingularService,\n\ttype SingularAnalysisResult,\n\ttype SingularBlastRadius,\n\ttype SingularComplexity,\n\ttype SingularImpactAnalysis,\n\ttype SingularOption,\n\ttype SingularRecommendation,\n\ttype SingularStageFit,\n} from \"../../core/singular.js\";\nimport {\n\tgetDefaultSemanticSearchConfig,\n\tgetSemanticConfigPath,\n\tgetSemanticIndexDir,\n\tisLikelyEmbeddingModelId,\n\tlistOllamaLocalModels,\n\tlistOpenRouterEmbeddingModels,\n\tloadMergedSemanticConfig,\n\treadScopedSemanticConfig,\n\tSemanticConfigMissingError,\n\tSemanticIndexRequiredError,\n\tSemanticRebuildRequiredError,\n\tSemanticSearchRuntime,\n\tupsertScopedSemanticSearchConfig,\n\ttype SemanticIndexOperationResult,\n\ttype SemanticProviderConfig,\n\ttype SemanticProviderType,\n\ttype SemanticQueryResult,\n\ttype SemanticScope,\n\ttype SemanticSearchConfig,\n\ttype SemanticStatusResult,\n} from \"../../core/semantic/index.js\";\nimport { DefaultResourceLoader } from \"../../core/resource-loader.js\";\nimport { createAgentSession } from \"../../core/sdk.js\";\nimport { createTeamRun, getTeamRun, listTeamRuns } from \"../../core/agent-teams.js\";\nimport {\n\tloadCustomSubagents,\n\tresolveCustomSubagentReference,\n\ttype CustomSubagentEntry,\n} from \"../../core/subagents.js\";\nimport { getSubagentRun, listSubagentRuns } from \"../../core/subagent-runs.js\";\nimport type { ResourceDiagnostic } from \"../../core/resource-loader.js\";\nimport { type SessionContext, SessionManager } from \"../../core/session-manager.js\";\nimport { SettingsManager } from \"../../core/settings-manager.js\";\nimport { BUILTIN_SLASH_COMMANDS } from \"../../core/slash-commands.js\";\nimport type { ToolPermissionRequest } from \"../../core/tools/index.js\";\nimport { isTaskPlanSnapshot, TASK_PLAN_CUSTOM_TYPE } from \"../../core/task-plan.js\";\nimport type { TruncationResult } from \"../../core/tools/truncate.js\";\nimport {\n\tbuildIosmAutomationPrompt,\n\tbuildIosmAgentVerificationPrompt,\n\tbuildIosmGuideAuthoringPrompt,\n\tbuildIosmPriorityChecklist,\n\tcreateMetricSnapshot,\n\textractAssistantText,\n\tevaluateIosmAutomationProgress,\n\tformatMetricSnapshot,\n\thasReachedIosmTarget,\n\tgetIosmGuidePath,\n\tinitIosmWorkspace,\n\tinspectIosmCycle,\n\tlistIosmCycles,\n\tloadIosmConfig,\n\tplanIosmCycle,\n\treadIosmCycleReport,\n\trecordIosmCycleHistory,\n\tresolveIosmAutomationSettings,\n\tsummarizeMetricDelta,\n\tnormalizeIosmGuideMarkdown,\n\twriteIosmGuideDocument,\n\ttype IosmInitResult,\n\ttype IosmDecision,\n\ttype IosmMetricSnapshot,\n} from \"../../iosm/index.js\";\nimport { getChangelogPath, getNewEntries, parseChangelog } from \"../../utils/changelog.js\";\nimport { copyToClipboard } from \"../../utils/clipboard.js\";\nimport { extensionForImageMimeType, readClipboardImage } from \"../../utils/clipboard-image.js\";\nimport { ensureTool, getToolPath } from \"../../utils/tools-manager.js\";\nimport { ArminComponent } from \"./components/armin.js\";\nimport { AsciiLogoComponent } from \"./components/ascii-logo.js\";\nimport { AssistantMessageComponent } from \"./components/assistant-message.js\";\nimport { DecryptLoader } from \"./components/decrypt-loader.js\";\nimport { BashExecutionComponent } from \"./components/bash-execution.js\";\nimport { BorderedLoader } from \"./components/bordered-loader.js\";\nimport { BranchSummaryMessageComponent } from \"./components/branch-summary-message.js\";\nimport { CompactionSummaryMessageComponent } from \"./components/compaction-summary-message.js\";\nimport { CustomEditor } from \"./components/custom-editor.js\";\nimport { CustomMessageComponent } from \"./components/custom-message.js\";\nimport { DaxnutsComponent } from \"./components/daxnuts.js\";\nimport { DynamicBorder } from \"./components/dynamic-border.js\";\nimport { ExtensionEditorComponent } from \"./components/extension-editor.js\";\nimport { ExtensionInputComponent } from \"./components/extension-input.js\";\nimport { ExtensionSelectorComponent } from \"./components/extension-selector.js\";\nimport { FooterComponent } from \"./components/footer.js\";\nimport { appKey, appKeyHint, editorKey } from \"./components/keybinding-hints.js\";\nimport { LoginDialogComponent } from \"./components/login-dialog.js\";\nimport { McpSelectorComponent } from \"./components/mcp-selector.js\";\nimport { ModelSelectorComponent } from \"./components/model-selector.js\";\nimport { OAuthSelectorComponent } from \"./components/oauth-selector.js\";\nimport { ScopedModelsSelectorComponent } from \"./components/scoped-models-selector.js\";\nimport { SessionSelectorComponent } from \"./components/session-selector.js\";\nimport { SettingsSelectorComponent } from \"./components/settings-selector.js\";\nimport { SkillInvocationMessageComponent } from \"./components/skill-invocation-message.js\";\nimport {\n\tSubagentMessageComponent,\n\ttype SubagentDelegateItem,\n\ttype SubagentInfo,\n\ttype SubagentPhaseState,\n} from \"./components/subagent-message.js\";\nimport { TaskPlanMessageComponent } from \"./components/task-plan-message.js\";\nimport { ToolExecutionComponent } from \"./components/tool-execution.js\";\nimport { TreeSelectorComponent } from \"./components/tree-selector.js\";\nimport { UserMessageComponent } from \"./components/user-message.js\";\nimport { UserMessageSelectorComponent } from \"./components/user-message-selector.js\";\nimport {\n\tgetAvailableThemes,\n\tgetAvailableThemesWithPaths,\n\tgetEditorTheme,\n\tgetMarkdownTheme,\n\tgetThemeByName,\n\tinitTheme,\n\tonThemeChange,\n\tsetRegisteredThemes,\n\tsetTheme,\n\tsetThemeInstance,\n\tTheme,\n\ttype ThemeColor,\n\ttheme,\n} from \"./theme/theme.js\";\n\n/** Interface for components that can be expanded/collapsed */\ninterface Expandable {\n\tsetExpanded(expanded: boolean): void;\n}\n\nfunction isExpandable(obj: unknown): obj is Expandable {\n\treturn typeof obj === \"object\" && obj !== null && \"setExpanded\" in obj && typeof obj.setExpanded === \"function\";\n}\n\ntype CompactionQueuedMessage = {\n\ttext: string;\n\tmode: \"steer\" | \"followUp\" | \"meta\";\n};\n\ntype IosmInitVerificationSummary = {\n\tcompleted: boolean;\n\tcancelled?: boolean;\n\tskippedReason?: string;\n\terror?: string;\n\tcurrent?: IosmMetricSnapshot;\n\thistoryPath?: string;\n\ttracePath?: string;\n\tguidePath?: string;\n\ttoolCalls?: number;\n\tactivityLog?: string[];\n};\n\ntype IosmAutomationLoopStatus = \"stabilized\" | \"threshold_reached\" | \"max_iterations\" | \"cancelled\" | \"failed\";\n\nconst IOSM_PROFILE_ONLY_COMMANDS = new Set([\"iosm\", \"cycle-list\", \"cycle-plan\", \"cycle-status\", \"cycle-report\"]);\nconst CHECKPOINT_LABEL_PREFIX = \"checkpoint:\";\nconst INTERRUPT_ABORT_TIMEOUT_MS = 8_000;\n\ntype IosmAutomationRunState = {\n\tcancelRequested: boolean;\n\ttargetIndex?: number;\n\tmaxIterations?: number;\n\titerationsCompleted: number;\n};\n\ntype IosmAutomationRefreshResult = {\n\tinitResult: IosmInitResult;\n\tverification?: IosmInitVerificationSummary;\n\tsnapshot: IosmMetricSnapshot;\n\tguidePath: string;\n\tcycleDecision?: IosmDecision;\n};\n\ntype SessionCheckpoint = {\n\tname: string;\n\ttargetId: string;\n\tlabelEntryId: string;\n\ttimestamp: string;\n};\n\ntype DoctorCheckLevel = \"ok\" | \"warn\" | \"fail\";\n\ntype DoctorCheckItem = {\n\tlevel: DoctorCheckLevel;\n\tlabel: string;\n\tdetail: string;\n\tfix?: string;\n};\n\ntype ContractScopeParseResult = {\n\tscope: ContractScope | undefined;\n\trest: string[];\n\terror?: string;\n};\n\ntype ContractFieldKind = \"text\" | \"list\";\ntype ContractFieldKey = keyof EngineeringContract;\n\ntype ContractFieldDefinition = {\n\tkey: ContractFieldKey;\n\tkind: ContractFieldKind;\n\tplaceholder: string;\n\thelp: string;\n};\n\nconst CONTRACT_FIELD_DEFINITIONS: ContractFieldDefinition[] = [\n\t{ key: \"goal\", kind: \"text\", placeholder: \"Ship X with measurable impact\", help: \"Single primary objective.\" },\n\t{\n\t\tkey: \"scope_include\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"auth/*\",\n\t\thelp: \"What is explicitly in scope.\",\n\t},\n\t{\n\t\tkey: \"scope_exclude\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"billing/*\",\n\t\thelp: \"What must remain untouched for this change.\",\n\t},\n\t{\n\t\tkey: \"constraints\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"no breaking API changes\",\n\t\thelp: \"Hard constraints that cannot be violated.\",\n\t},\n\t{\n\t\tkey: \"quality_gates\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"tests pass\",\n\t\thelp: \"Objective quality checks before merge.\",\n\t},\n\t{\n\t\tkey: \"definition_of_done\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"docs updated\",\n\t\thelp: \"Completion criteria.\",\n\t},\n\t{\n\t\tkey: \"assumptions\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"API v2 stays backward compatible\",\n\t\thelp: \"Assumptions the plan depends on.\",\n\t},\n\t{\n\t\tkey: \"non_goals\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"no redesign in this cycle\",\n\t\thelp: \"Intentional exclusions.\",\n\t},\n\t{\n\t\tkey: \"risks\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"migration may affect legacy clients\",\n\t\thelp: \"Known delivery risks.\",\n\t},\n\t{\n\t\tkey: \"deliverables\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"CLI command + tests + docs\",\n\t\thelp: \"Expected artifacts.\",\n\t},\n\t{\n\t\tkey: \"success_metrics\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"p95 latency < 250ms\",\n\t\thelp: \"Measurable target outcomes.\",\n\t},\n\t{\n\t\tkey: \"stakeholders\",\n\t\tkind: \"list\",\n\t\tplaceholder: \"backend team, QA\",\n\t\thelp: \"Who should review/accept the result.\",\n\t},\n\t{\n\t\tkey: \"owner\",\n\t\tkind: \"text\",\n\t\tplaceholder: \"team/platform\",\n\t\thelp: \"Owner accountable for delivery.\",\n\t},\n\t{\n\t\tkey: \"timebox\",\n\t\tkind: \"text\",\n\t\tplaceholder: \"this sprint\",\n\t\thelp: \"Deadline or delivery window.\",\n\t},\n\t{\n\t\tkey: \"notes\",\n\t\tkind: \"text\",\n\t\tplaceholder: \"additional context\",\n\t\thelp: \"Free-form context for this contract.\",\n\t},\n];\n\ntype DoctorCliToolStatus = {\n\ttool: string;\n\tavailable: boolean;\n\tsource: \"managed\" | \"system\" | \"missing\";\n\tcommand?: string;\n\thint?: string;\n};\n\ntype DoctorCliToolSpec = {\n\ttool: string;\n\tcandidates: string[];\n\tmanaged?: \"fd\" | \"rg\";\n\thint: string;\n};\n\nconst DOCTOR_CLI_TOOL_SPECS: DoctorCliToolSpec[] = [\n\t{\n\t\ttool: \"rg\",\n\t\tcandidates: [\"rg\"],\n\t\tmanaged: \"rg\",\n\t\thint: \"Install ripgrep (rg) or allow iosm-cli to download managed binaries.\",\n\t},\n\t{\n\t\ttool: \"fd\",\n\t\tcandidates: [\"fd\"],\n\t\tmanaged: \"fd\",\n\t\thint: \"Install fd or allow iosm-cli to download managed binaries.\",\n\t},\n\t{\n\t\ttool: \"ast_grep\",\n\t\tcandidates: [\"ast-grep\", \"sg\"],\n\t\thint: \"Install ast-grep (brew install ast-grep or npm i -g @ast-grep/cli).\",\n\t},\n\t{\n\t\ttool: \"comby\",\n\t\tcandidates: [\"comby\"],\n\t\thint: \"Install comby (brew install comby).\",\n\t},\n\t{\n\t\ttool: \"jq\",\n\t\tcandidates: [\"jq\"],\n\t\thint: \"Install jq (brew install jq).\",\n\t},\n\t{\n\t\ttool: \"yq\",\n\t\tcandidates: [\"yq\"],\n\t\thint: \"Install yq (brew install yq).\",\n\t},\n\t{\n\t\ttool: \"semgrep\",\n\t\tcandidates: [\"semgrep\"],\n\t\thint: \"Install semgrep (pipx install semgrep or pip install semgrep).\",\n\t},\n\t{\n\t\ttool: \"sed\",\n\t\tcandidates: [\"sed\"],\n\t\thint: \"Install sed or GNU sed if unavailable (brew install gnu-sed).\",\n\t},\n];\n\nfunction commandCandidateExists(candidates: string[]): string | undefined {\n\tfor (const candidate of candidates) {\n\t\ttry {\n\t\t\tconst locator = os.platform() === \"win32\" ? \"where\" : \"which\";\n\t\t\tconst located = spawnSync(locator, [candidate], { stdio: \"pipe\" });\n\t\t\tif ((located.status ?? 1) === 0 && !located.error) {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue trying fallback check\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = spawnSync(candidate, [\"--version\"], { stdio: \"pipe\" });\n\t\t\tconst err = result.error as NodeJS.ErrnoException | undefined;\n\t\t\tif (!err || err.code !== \"ENOENT\") {\n\t\t\t\treturn candidate;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Continue trying other candidates\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveDoctorCliToolStatuses(): DoctorCliToolStatus[] {\n\treturn DOCTOR_CLI_TOOL_SPECS.map((spec) => {\n\t\tif (spec.managed) {\n\t\t\tconst toolPath = getToolPath(spec.managed);\n\t\t\tif (toolPath) {\n\t\t\t\tconst isManagedPath = path.isAbsolute(toolPath);\n\t\t\t\treturn {\n\t\t\t\t\ttool: spec.tool,\n\t\t\t\t\tavailable: true,\n\t\t\t\t\tsource: isManagedPath ? \"managed\" : \"system\",\n\t\t\t\t\tcommand: toolPath,\n\t\t\t\t\thint: spec.hint,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttool: spec.tool,\n\t\t\t\tavailable: false,\n\t\t\t\tsource: \"missing\",\n\t\t\t\thint: spec.hint,\n\t\t\t};\n\t\t}\n\n\t\tconst resolvedCommand = commandCandidateExists(spec.candidates);\n\t\tif (resolvedCommand) {\n\t\t\treturn {\n\t\t\t\ttool: spec.tool,\n\t\t\t\tavailable: true,\n\t\t\t\tsource: \"system\",\n\t\t\t\tcommand: resolvedCommand,\n\t\t\t\thint: spec.hint,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttool: spec.tool,\n\t\t\tavailable: false,\n\t\t\tsource: \"missing\",\n\t\t\thint: spec.hint,\n\t\t};\n\t});\n}\n\nconst OPENROUTER_PROVIDER_ID = \"openrouter\";\n\ntype OrchestrationMode = \"parallel\" | \"sequential\";\n\ntype ParsedOrchestrateCommand = {\n\tmode: OrchestrationMode;\n\tagents: number;\n\tmaxParallel?: number;\n\tprofile?: AgentProfileName;\n\tprofiles?: AgentProfileName[];\n\tcwds?: string[];\n\tlocks?: string[];\n\tisolation?: \"none\" | \"worktree\";\n\tdependencies?: Array<{ agent: number; dependsOn: number[] }>;\n\ttask: string;\n};\n\nfunction isAbortLikeMessage(message: string): boolean {\n\tconst normalized = message.trim().toLowerCase();\n\treturn normalized.includes(\"aborted\") || normalized.includes(\"cancelled\");\n}\n\nconst SUBAGENT_PHASE_STATES = new Set<SubagentPhaseState>([\"queued\", \"starting\", \"running\", \"responding\"]);\nconst SUBAGENT_DELEGATE_STATUSES = new Set<SubagentDelegateItem[\"status\"]>([\"pending\", \"running\", \"done\", \"failed\"]);\n\nfunction isSubagentPhaseState(value: unknown): value is SubagentPhaseState {\n\treturn typeof value === \"string\" && SUBAGENT_PHASE_STATES.has(value as SubagentPhaseState);\n}\n\nfunction isSubagentDelegateStatus(value: unknown): value is SubagentDelegateItem[\"status\"] {\n\treturn typeof value === \"string\" && SUBAGENT_DELEGATE_STATUSES.has(value as SubagentDelegateItem[\"status\"]);\n}\n\nfunction parseSubagentDelegateItems(value: unknown): SubagentDelegateItem[] | undefined {\n\tif (!Array.isArray(value)) return undefined;\n\tconst parsed: SubagentDelegateItem[] = [];\n\tfor (const raw of value) {\n\t\tif (!raw || typeof raw !== \"object\") continue;\n\t\tconst candidate = raw as Record<string, unknown>;\n\t\tconst indexRaw = candidate.index;\n\t\tconst index =\n\t\t\ttypeof indexRaw === \"number\" && Number.isFinite(indexRaw) && indexRaw > 0 ? Math.floor(indexRaw) : undefined;\n\t\tconst description =\n\t\t\ttypeof candidate.description === \"string\" && candidate.description.trim().length > 0\n\t\t\t\t? candidate.description.trim()\n\t\t\t\t: undefined;\n\t\tconst profile =\n\t\t\ttypeof candidate.profile === \"string\" && candidate.profile.trim().length > 0\n\t\t\t\t? candidate.profile.trim()\n\t\t\t\t: undefined;\n\t\tconst status = isSubagentDelegateStatus(candidate.status) ? candidate.status : undefined;\n\t\tif (!index || !description || !profile || !status) continue;\n\t\tparsed.push({ index, description, profile, status });\n\t\tif (parsed.length >= 20) break;\n\t}\n\treturn parsed;\n}\n\nfunction hasDependencyCycle(\n\tagents: number,\n\tdependencies: Array<{ agent: number; dependsOn: number[] }>,\n): boolean {\n\tconst graph = new Map<number, number[]>();\n\tfor (let agent = 1; agent <= agents; agent++) {\n\t\tgraph.set(agent, []);\n\t}\n\tfor (const dep of dependencies) {\n\t\tgraph.set(dep.agent, [...dep.dependsOn]);\n\t}\n\n\tconst visiting = new Set<number>();\n\tconst visited = new Set<number>();\n\n\tconst dfs = (node: number): boolean => {\n\t\tif (visiting.has(node)) return true;\n\t\tif (visited.has(node)) return false;\n\n\t\tvisiting.add(node);\n\t\tfor (const next of graph.get(node) ?? []) {\n\t\t\tif (dfs(next)) return true;\n\t\t}\n\t\tvisiting.delete(node);\n\t\tvisited.add(node);\n\t\treturn false;\n\t};\n\n\tfor (let agent = 1; agent <= agents; agent++) {\n\t\tif (dfs(agent)) return true;\n\t}\n\treturn false;\n}\n\n/**\n * Options for InteractiveMode initialization.\n */\nexport interface InteractiveModeOptions {\n\t/** Providers that were migrated to auth.json (shows warning) */\n\tmigratedProviders?: string[];\n\t/** Warning message if session model couldn't be restored */\n\tmodelFallbackMessage?: string;\n\t/** Initial message to send on startup (can include @file content) */\n\tinitialMessage?: string;\n\t/** Images to attach to the initial message */\n\tinitialImages?: ImageContent[];\n\t/** Additional messages to send after the initial message */\n\tinitialMessages?: string[];\n\t/** Force verbose startup (overrides quietStartup setting) */\n\tverbose?: boolean;\n\t/** Whether the session was started in plan mode (shows [PLAN] badge in footer) */\n\tplanMode?: boolean;\n\t/** Active agent profile name (shows profile badge in footer when not \"full\") */\n\tprofile?: string;\n\t/** MCP runtime for /mcp command and dynamic MCP tool updates */\n\tmcpRuntime?: McpRuntime;\n}\n\nexport class InteractiveMode {\n\tprivate session: AgentSession;\n\tprivate ui: TUI;\n\tprivate chatContainer: Container;\n\tprivate pendingMessagesContainer: Container;\n\tprivate statusContainer: Container;\n\tprivate defaultEditor: CustomEditor;\n\tprivate editor: EditorComponent;\n\tprivate autocompleteProvider: AutocompleteProvider | undefined;\n\tprivate fdPath: string | undefined;\n\tprivate editorContainer: Container;\n\tprivate footer: FooterComponent;\n\tprivate footerDataProvider: FooterDataProvider;\n\tprivate keybindings: KeybindingsManager;\n\tprivate version: string;\n\tprivate isInitialized = false;\n\tprivate onInputCallback?: (text: string) => void;\n\tprivate loadingAnimation: DecryptLoader | undefined = undefined;\n\tprivate pendingWorkingMessage: string | undefined = undefined;\n\tprivate readonly defaultWorkingMessage = \"Working...\";\n\tprivate activeProfileName: AgentProfileName = \"full\";\n\tprivate profilePromptSuffix: string | undefined = undefined;\n\tprivate permissionMode: \"ask\" | \"auto\" | \"yolo\" = \"ask\";\n\tprivate permissionAllowRules: string[] = [];\n\tprivate permissionDenyRules: string[] = [];\n\tprivate permissionPromptLock: Promise<void> = Promise.resolve();\n\tprivate sessionAllowedToolSignatures = new Set<string>();\n\tprivate contractService: ContractService;\n\tprivate singularService: SingularService;\n\tprivate singularLastEffectiveContract: EngineeringContract = {};\n\n\tprivate lastSigintTime = 0;\n\tprivate lastEscapeTime = 0;\n\tprivate changelogMarkdown: string | undefined = undefined;\n\n\t// Status line tracking (for mutating immediately-sequential status updates)\n\tprivate lastStatusSpacer: Spacer | undefined = undefined;\n\tprivate lastStatusText: Text | undefined = undefined;\n\n\t// Streaming message tracking\n\tprivate streamingComponent: AssistantMessageComponent | undefined = undefined;\n\tprivate streamingMessage: AssistantMessage | undefined = undefined;\n\n\t// Tool execution tracking: toolCallId -> component\n\tprivate pendingTools = new Map<string, ToolExecutionComponent>();\n\n\t// Subagent execution tracking with live progress/metadata for task tool calls.\n\tprivate subagentComponents = new Map<\n\t\tstring,\n\t\t{\n\t\t\tcomponent: SubagentMessageComponent;\n\t\t\tstartTime: number;\n\t\t\tprofile: string;\n\t\t\tdescription: string;\n\t\t\tcwd?: string;\n\t\t\tagent?: string;\n\t\t\tlockKey?: string;\n\t\t\tisolation?: \"none\" | \"worktree\";\n\t\t\tphase?: string;\n\t\t\tphaseState?: SubagentPhaseState;\n\t\t\tactiveTool?: string;\n\t\t\ttoolCallsStarted: number;\n\t\t\ttoolCallsCompleted: number;\n\t\t\tassistantMessages: number;\n\t\t\tdelegatedTasks?: number;\n\t\t\tdelegatedSucceeded?: number;\n\t\t\tdelegatedFailed?: number;\n\t\t\tdelegateIndex?: number;\n\t\t\tdelegateTotal?: number;\n\t\t\tdelegateDescription?: string;\n\t\t\tdelegateProfile?: string;\n\t\t\tdelegateItems?: SubagentDelegateItem[];\n\t\t}\n\t>();\n\n\t// Internal UI metadata emitted by runtime for orchestration rendering.\n\tprivate pendingInternalUserDisplayAliases: Array<{ rawPrompt: string; displayText: string }> = [];\n\tprivate pendingAssistantOrchestrationContexts = 0;\n\tprivate activeAssistantOrchestrationContext = false;\n\n\t// Tool output expansion state\n\tprivate toolOutputExpanded = false;\n\n\t// Thinking block visibility state\n\tprivate hideThinkingBlock = false;\n\n\t// Skill commands: command name -> skill file path\n\tprivate skillCommands = new Map<string, string>();\n\tprivate mcpRuntime?: McpRuntime;\n\n\t// Agent subscription unsubscribe function\n\tprivate unsubscribe?: () => void;\n\n\t// Track if editor is in bash mode (text starts with !)\n\tprivate isBashMode = false;\n\n\t// Track current bash execution component\n\tprivate bashComponent: BashExecutionComponent | undefined = undefined;\n\n\t// Track pending bash components (shown in pending area, moved to chat on submit)\n\tprivate pendingBashComponents: BashExecutionComponent[] = [];\n\n\t// Auto-compaction state\n\tprivate autoCompactionLoader: Loader | undefined = undefined;\n\tprivate autoCompactionEscapeHandler?: () => void;\n\n\t// Auto-retry state\n\tprivate retryLoader: Loader | undefined = undefined;\n\tprivate retryEscapeHandler?: () => void;\n\n\t// Messages queued while compaction is running\n\tprivate compactionQueuedMessages: CompactionQueuedMessage[] = [];\n\n\t// Shutdown state\n\tprivate shutdownRequested = false;\n\n\t// IOSM automation state\n\tprivate iosmAutomationRun: IosmAutomationRunState | undefined = undefined;\n\tprivate iosmVerificationSession: AgentSession | undefined = undefined;\n\tprivate singularAnalysisSession: AgentSession | undefined = undefined;\n\n\t// Extension UI state\n\tprivate extensionSelector: ExtensionSelectorComponent | undefined = undefined;\n\tprivate extensionInput: ExtensionInputComponent | undefined = undefined;\n\tprivate extensionEditor: ExtensionEditorComponent | undefined = undefined;\n\tprivate extensionTerminalInputUnsubscribers = new Set<() => void>();\n\n\t// Extension widgets (components rendered above/below the editor)\n\tprivate extensionWidgetsAbove = new Map<string, Component & { dispose?(): void }>();\n\tprivate extensionWidgetsBelow = new Map<string, Component & { dispose?(): void }>();\n\tprivate widgetContainerAbove!: Container;\n\tprivate widgetContainerBelow!: Container;\n\n\t// Custom footer from extension (undefined = use built-in footer)\n\tprivate customFooter: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Header container that holds the built-in or custom header\n\tprivate headerContainer: Container;\n\n\t// Built-in header (logo + keybinding hints + changelog)\n\tprivate builtInHeader: Text | undefined = undefined;\n\n\t// ASCII logo component for startup screen\n\tprivate asciiLogo: AsciiLogoComponent | undefined = undefined;\n\n\t// Custom header from extension (undefined = use built-in header)\n\tprivate customHeader: (Component & { dispose?(): void }) | undefined = undefined;\n\n\t// Convenience accessors\n\tprivate get agent() {\n\t\treturn this.session.agent;\n\t}\n\tprivate get sessionManager() {\n\t\treturn this.session.sessionManager;\n\t}\n\tprivate get settingsManager() {\n\t\treturn this.session.settingsManager;\n\t}\n\n\tconstructor(\n\t\tsession: AgentSession,\n\t\tprivate options: InteractiveModeOptions = {},\n\t) {\n\t\tthis.session = session;\n\t\tthis.version = VERSION;\n\t\tthis.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());\n\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\tthis.headerContainer = new Container();\n\t\tthis.chatContainer = new Container();\n\t\tthis.pendingMessagesContainer = new Container();\n\t\tthis.statusContainer = new Container();\n\t\tthis.widgetContainerAbove = new Container();\n\t\tthis.widgetContainerBelow = new Container();\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\tthis.defaultEditor = new CustomEditor(this.ui, getEditorTheme(), this.keybindings, {\n\t\t\tpaddingX: editorPaddingX,\n\t\t\tautocompleteMaxVisible,\n\t\t});\n\t\tthis.editor = this.defaultEditor;\n\t\tthis.editorContainer = new Container();\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.footerDataProvider = new FooterDataProvider();\n\t\tthis.footer = new FooterComponent(session, this.footerDataProvider);\n\t\tthis.footer.setAutoCompactEnabled(session.autoCompactionEnabled);\n\t\tconst profile = getAgentProfile(options.profile);\n\t\tthis.activeProfileName = profile.name;\n\t\tthis.profilePromptSuffix = profile.systemPromptAppend || undefined;\n\t\tthis.mcpRuntime = options.mcpRuntime;\n\t\tthis.contractService = new ContractService({ cwd: this.sessionManager.getCwd() });\n\t\tthis.singularService = new SingularService({ cwd: this.sessionManager.getCwd() });\n\n\t\t// Apply plan mode and profile badges immediately if set\n\t\tif (options.planMode || this.activeProfileName === \"plan\") {\n\t\t\tthis.footer.setPlanMode(true);\n\t\t}\n\t\tthis.footer.setActiveProfile(this.activeProfileName);\n\t\tthis.session.setIosmAutopilotEnabled(this.activeProfileName === \"iosm\");\n\t\tthis.syncRuntimePromptSuffix();\n\t\tthis.permissionMode = this.settingsManager.getPermissionMode();\n\t\tthis.permissionAllowRules = this.settingsManager.getPermissionAllowRules();\n\t\tthis.permissionDenyRules = this.settingsManager.getPermissionDenyRules();\n\t\tthis.session.setToolPermissionHandler((request) => this.requestToolPermission(request));\n\t\tthis.mcpRuntime?.setPermissionGuard((request) => this.requestToolPermission(request));\n\n\t\t// Load hide thinking block setting\n\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\n\t\t// Register themes from resource loader and initialize\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tinitTheme(this.settingsManager.getTheme(), true);\n\t}\n\n\tprivate syncRuntimePromptSuffix(): void {\n\t\tlet contractSuffix: string | undefined;\n\t\ttry {\n\t\t\tcontractSuffix = this.contractService.buildPromptContext();\n\t\t} catch {\n\t\t\tcontractSuffix = undefined;\n\t\t}\n\t\tconst suffix = [this.profilePromptSuffix, contractSuffix]\n\t\t\t.map((entry) => entry?.trim())\n\t\t\t.filter((entry): entry is string => !!entry && entry.length > 0)\n\t\t\t.join(\"\\n\\n\");\n\t\tthis.session.setSystemPromptSuffix(suffix || undefined);\n\t}\n\n\tprivate getContractStateSafe(): ContractState | undefined {\n\t\ttry {\n\t\t\treturn this.contractService.getState();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.showWarning(`Contract load failed: ${message}`);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate getProfileToolNames(profileName: AgentProfileName): string[] {\n\t\tconst profile = getAgentProfile(profileName);\n\t\tconst availableTools = new Set(this.session.getAllTools().map((tool) => tool.name));\n\t\tconst nextActiveTools = [...profile.tools];\n\t\tif (availableTools.has(\"task\")) nextActiveTools.push(\"task\");\n\t\tif (availableTools.has(\"todo_write\")) nextActiveTools.push(\"todo_write\");\n\t\tif (availableTools.has(\"todo_read\")) nextActiveTools.push(\"todo_read\");\n\t\tif (availableTools.has(\"ask_user\")) nextActiveTools.push(\"ask_user\");\n\t\treturn [...new Set(nextActiveTools)];\n\t}\n\n\tprivate getToolPermissionSignature(request: ToolPermissionRequest): string {\n\t\tconst summary = request.summary.trim().replace(/\\s+/g, \" \");\n\t\treturn `${request.toolName}:${summary}`;\n\t}\n\n\tprivate matchesPermissionRule(rule: string, request: ToolPermissionRequest): boolean {\n\t\tconst [ruleToolRaw, ...rest] = rule.split(\":\");\n\t\tconst ruleTool = (ruleToolRaw ?? \"\").trim();\n\t\tconst ruleNeedle = rest.join(\":\").trim().toLowerCase();\n\t\tconst toolMatches = !ruleTool || ruleTool === \"*\" || ruleTool === request.toolName;\n\t\tif (!toolMatches) return false;\n\t\treturn !ruleNeedle || request.summary.toLowerCase().includes(ruleNeedle);\n\t}\n\n\tprivate async withPermissionDialogLock<T>(fn: () => Promise<T>): Promise<T> {\n\t\tconst previous = this.permissionPromptLock;\n\t\tlet release: (() => void) | undefined;\n\t\tthis.permissionPromptLock = new Promise<void>((resolve) => {\n\t\t\trelease = resolve;\n\t\t});\n\t\tawait previous;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\trelease?.();\n\t\t}\n\t}\n\n\tprivate async requestToolPermission(request: ToolPermissionRequest): Promise<boolean> {\n\t\tfor (const rule of this.permissionDenyRules) {\n\t\t\tif (this.matchesPermissionRule(rule, request)) {\n\t\t\t\tthis.showWarning(`Denied by rule: ${rule}`);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const rule of this.permissionAllowRules) {\n\t\t\tif (this.matchesPermissionRule(rule, request)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (this.permissionMode === \"yolo\") {\n\t\t\treturn true;\n\t\t}\n\t\tif (this.permissionMode === \"auto\") {\n\t\t\t// Auto mode mirrors \"accept edits\": allow edit/write without prompts,\n\t\t\t// still ask for shell execution.\n\t\t\tif (request.toolName === \"edit\" || request.toolName === \"write\") {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tconst signature = this.getToolPermissionSignature(request);\n\t\tif (this.sessionAllowedToolSignatures.has(signature)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.withPermissionDialogLock(async () => {\n\t\t\tif (this.permissionMode === \"yolo\") return true;\n\t\t\tif (this.sessionAllowedToolSignatures.has(signature)) return true;\n\n\t\t\tconst label = `${request.toolName}: ${request.summary}`;\n\t\t\tconst choice = await this.showExtensionSelector(\"Permission required\", [\n\t\t\t\t\"Allow once\",\n\t\t\t\t\"Deny\",\n\t\t\t\t\"Always allow this command (session)\",\n\t\t\t]);\n\t\t\tif (!choice || choice === \"Deny\") {\n\t\t\t\tthis.showWarning(`Permission denied: ${label}`);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (choice === \"Always allow this command (session)\") {\n\t\t\t\tthis.sessionAllowedToolSignatures.add(signature);\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tprivate getHookPolicySummary():\n\t\t| {\n\t\t\tsources: string[];\n\t\t\tuserPromptSubmit: number;\n\t\t\tpreToolUse: number;\n\t\t\tpostToolUse: number;\n\t\t\tstop: number;\n\t\t}\n\t\t| undefined {\n\t\tconst hooks = this.session.resourceLoader.getHooks?.();\n\t\tif (!hooks) return undefined;\n\t\treturn {\n\t\t\tsources: hooks.sources,\n\t\t\tuserPromptSubmit: hooks.userPromptSubmit.length,\n\t\t\tpreToolUse: hooks.preToolUse.length,\n\t\t\tpostToolUse: hooks.postToolUse.length,\n\t\t\tstop: hooks.stop.length,\n\t\t};\n\t}\n\n\tprivate handleYoloCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst value = args[0]?.toLowerCase();\n\t\tif (!value) {\n\t\t\tthis.permissionMode = this.permissionMode === \"yolo\" ? \"ask\" : \"yolo\";\n\t\t\tthis.settingsManager.setPermissionMode(this.permissionMode);\n\t\t\tthis.showStatus(`YOLO mode: ${this.permissionMode === \"yolo\" ? \"ON\" : \"OFF\"}`);\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"status\") {\n\t\t\tthis.showStatus(`YOLO mode: ${this.permissionMode === \"yolo\" ? \"ON\" : \"OFF\"}`);\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"on\") {\n\t\t\tthis.permissionMode = \"yolo\";\n\t\t\tthis.settingsManager.setPermissionMode(\"yolo\");\n\t\t\tthis.showStatus(\"YOLO mode: ON (tool confirmations disabled)\");\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"off\") {\n\t\t\tthis.permissionMode = \"ask\";\n\t\t\tthis.settingsManager.setPermissionMode(\"ask\");\n\t\t\tthis.showStatus(\"YOLO mode: OFF (tool confirmations enabled)\");\n\t\t\treturn;\n\t\t}\n\t\tthis.showWarning(\"Usage: /yolo [on|off|status]\");\n\t}\n\n\tprivate getPermissionsStatusText(): string {\n\t\tconst hookSummary = this.getHookPolicySummary();\n\t\tconst hookSegment = hookSummary\n\t\t\t? ` · hooks: U${hookSummary.userPromptSubmit}/P${hookSummary.preToolUse}/T${hookSummary.postToolUse}/S${hookSummary.stop}`\n\t\t\t: \"\";\n\t\treturn `Permissions: ${this.permissionMode}${this.permissionAllowRules.length > 0 ? ` · allow rules: ${this.permissionAllowRules.length}` : \"\"}${this.permissionDenyRules.length > 0 ? ` · deny rules: ${this.permissionDenyRules.length}` : \"\"}${hookSegment}`;\n\t}\n\n\tprivate async runPermissionRulesMenu(kind: \"allow\" | \"deny\"): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst isAllow = kind === \"allow\";\n\t\t\tconst rules = isAllow ? this.permissionAllowRules : this.permissionDenyRules;\n\t\t\tconst selected = await this.showExtensionSelector(`/permissions ${kind} (${rules.length} rule${rules.length === 1 ? \"\" : \"s\"})`, [\n\t\t\t\t\"Add rule\",\n\t\t\t\t\"Remove rule\",\n\t\t\t\t\"Show rules\",\n\t\t\t\t\"Back\",\n\t\t\t]);\n\t\t\tif (!selected || selected === \"Back\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === \"Show rules\") {\n\t\t\t\tif (rules.length === 0) {\n\t\t\t\t\tthis.showStatus(`Permissions ${kind} rules: (empty)`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t`Permissions ${isAllow ? \"Allow\" : \"Deny\"} Rules`,\n\t\t\t\t\trules.map((rule) => `- ${rule}`).join(\"\\n\"),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Add rule\") {\n\t\t\t\tconst input = await this.showExtensionInput(\n\t\t\t\t\t`/permissions ${kind} add`,\n\t\t\t\t\t\"tool:match (example: bash:git *, edit:*.env)\",\n\t\t\t\t);\n\t\t\t\tif (input === undefined) continue;\n\t\t\t\tconst rawRule = input.trim();\n\t\t\t\tif (!rawRule || !rawRule.includes(\":\")) {\n\t\t\t\t\tthis.showWarning(`Invalid rule \"${rawRule || \"(empty)\"}\". Expected <tool:match>.`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (isAllow) {\n\t\t\t\t\tif (!this.permissionAllowRules.includes(rawRule)) {\n\t\t\t\t\t\tthis.permissionAllowRules.push(rawRule);\n\t\t\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.permissionDenyRules.includes(rawRule)) {\n\t\t\t\t\t\tthis.permissionDenyRules.push(rawRule);\n\t\t\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Added ${kind} rule: ${rawRule}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Remove rule\") {\n\t\t\t\tif (rules.length === 0) {\n\t\t\t\t\tthis.showStatus(`No ${kind} rules to remove.`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst pickedRule = await this.showExtensionSelector(\n\t\t\t\t\t`/permissions ${kind}: remove rule`,\n\t\t\t\t\trules.map((rule) => rule),\n\t\t\t\t);\n\t\t\t\tif (!pickedRule) continue;\n\n\t\t\t\tif (isAllow) {\n\t\t\t\t\tthis.permissionAllowRules = this.permissionAllowRules.filter((rule) => rule !== pickedRule);\n\t\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\t} else {\n\t\t\t\t\tthis.permissionDenyRules = this.permissionDenyRules.filter((rule) => rule !== pickedRule);\n\t\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Removed ${kind} rule: ${pickedRule}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async runPermissionsInteractiveMenu(): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst selected = await this.showExtensionSelector(\"/permissions\", [\n\t\t\t\t`Mode (${this.permissionMode})`,\n\t\t\t\t`Allow Rules (${this.permissionAllowRules.length})`,\n\t\t\t\t`Deny Rules (${this.permissionDenyRules.length})`,\n\t\t\t\t\"Hooks Summary\",\n\t\t\t\t\"Show Status\",\n\t\t\t\t\"Close\",\n\t\t\t]);\n\t\t\tif (!selected || selected === \"Close\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Mode\")) {\n\t\t\t\tconst modeChoice = await this.showExtensionSelector(\"/permissions: mode\", [\n\t\t\t\t\t\"ask (Recommended)\",\n\t\t\t\t\t\"auto\",\n\t\t\t\t\t\"yolo\",\n\t\t\t\t]);\n\t\t\t\tif (!modeChoice) continue;\n\t\t\t\tconst nextMode = modeChoice.startsWith(\"ask\")\n\t\t\t\t\t? \"ask\"\n\t\t\t\t\t: modeChoice.startsWith(\"auto\")\n\t\t\t\t\t\t? \"auto\"\n\t\t\t\t\t\t: \"yolo\";\n\t\t\t\tthis.permissionMode = nextMode;\n\t\t\t\tthis.settingsManager.setPermissionMode(nextMode);\n\t\t\t\tthis.showStatus(`Permissions: ${nextMode}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Allow Rules\")) {\n\t\t\t\tawait this.runPermissionRulesMenu(\"allow\");\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Deny Rules\")) {\n\t\t\t\tawait this.runPermissionRulesMenu(\"deny\");\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Hooks Summary\") {\n\t\t\t\tconst summary = this.getHookPolicySummary();\n\t\t\t\tif (!summary) {\n\t\t\t\t\tthis.showWarning(\"Hooks policy is unavailable in current session.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst sourceLines =\n\t\t\t\t\tsummary.sources.length > 0 ? summary.sources.map((source) => `- ${source}`) : [\"- (none loaded)\"];\n\t\t\t\tconst lines = [\n\t\t\t\t\t`UserPromptSubmit: ${summary.userPromptSubmit}`,\n\t\t\t\t\t`PreToolUse: ${summary.preToolUse}`,\n\t\t\t\t\t`PostToolUse: ${summary.postToolUse}`,\n\t\t\t\t\t`Stop: ${summary.stop}`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Sources:\",\n\t\t\t\t\t...sourceLines,\n\t\t\t\t];\n\t\t\t\tthis.showCommandTextBlock(\"Hook Policies\", lines.join(\"\\n\"));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === \"Show Status\") {\n\t\t\t\tthis.showStatus(this.getPermissionsStatusText());\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handlePermissionsCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst value = args[0]?.toLowerCase();\n\t\tif (!value) {\n\t\t\tawait this.runPermissionsInteractiveMenu();\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"hooks\") {\n\t\t\tconst mode = args[1]?.toLowerCase();\n\t\t\tconst summary = this.getHookPolicySummary();\n\t\t\tif (!summary) {\n\t\t\t\tthis.showWarning(\"Hooks policy is unavailable in current session.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (mode === \"json\") {\n\t\t\t\tthis.showCommandJsonBlock(\"Hook Policies\", summary);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst sourceLines =\n\t\t\t\tsummary.sources.length > 0 ? summary.sources.map((source) => `- ${source}`) : [\"- (none loaded)\"];\n\t\t\tconst lines = [\n\t\t\t\t`UserPromptSubmit: ${summary.userPromptSubmit}`,\n\t\t\t\t`PreToolUse: ${summary.preToolUse}`,\n\t\t\t\t`PostToolUse: ${summary.postToolUse}`,\n\t\t\t\t`Stop: ${summary.stop}`,\n\t\t\t\t\"\",\n\t\t\t\t\"Sources:\",\n\t\t\t\t...sourceLines,\n\t\t\t];\n\t\t\tthis.showCommandTextBlock(\"Hook Policies\", lines.join(\"\\n\"));\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"allow\") {\n\t\t\tconst action = args[1]?.toLowerCase();\n\t\t\tif (action === \"list\") {\n\t\t\t\tif (this.permissionAllowRules.length === 0) {\n\t\t\t\t\tthis.showStatus(\"Permissions allow rules: (empty)\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showCommandTextBlock(\"Permissions Allow Rules\", this.permissionAllowRules.map((r) => `- ${r}`).join(\"\\n\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"add\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule || !rawRule.includes(\":\")) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions allow add <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!this.permissionAllowRules.includes(rawRule)) {\n\t\t\t\t\tthis.permissionAllowRules.push(rawRule);\n\t\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Added allow rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"remove\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions allow remove <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.permissionAllowRules = this.permissionAllowRules.filter((r) => r !== rawRule);\n\t\t\t\tthis.settingsManager.setPermissionAllowRules(this.permissionAllowRules);\n\t\t\t\tthis.showStatus(`Removed allow rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showWarning(\"Usage: /permissions allow [list|add|remove]\");\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"deny\") {\n\t\t\tconst action = args[1]?.toLowerCase();\n\t\t\tif (action === \"list\") {\n\t\t\t\tif (this.permissionDenyRules.length === 0) {\n\t\t\t\t\tthis.showStatus(\"Permissions deny rules: (empty)\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showCommandTextBlock(\"Permissions Deny Rules\", this.permissionDenyRules.map((r) => `- ${r}`).join(\"\\n\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"add\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule || !rawRule.includes(\":\")) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions deny add <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!this.permissionDenyRules.includes(rawRule)) {\n\t\t\t\t\tthis.permissionDenyRules.push(rawRule);\n\t\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\t}\n\t\t\t\tthis.showStatus(`Added deny rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (action === \"remove\") {\n\t\t\t\tconst rawRule = args.slice(2).join(\" \").trim();\n\t\t\t\tif (!rawRule) {\n\t\t\t\t\tthis.showWarning(\"Usage: /permissions deny remove <tool:match>\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.permissionDenyRules = this.permissionDenyRules.filter((r) => r !== rawRule);\n\t\t\t\tthis.settingsManager.setPermissionDenyRules(this.permissionDenyRules);\n\t\t\t\tthis.showStatus(`Removed deny rule: ${rawRule}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showWarning(\"Usage: /permissions deny [list|add|remove]\");\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"status\") {\n\t\t\tthis.showStatus(this.getPermissionsStatusText());\n\t\t\treturn;\n\t\t}\n\t\tif (value === \"ask\" || value === \"auto\" || value === \"yolo\") {\n\t\t\tthis.permissionMode = value;\n\t\t\tthis.settingsManager.setPermissionMode(value);\n\t\t\tthis.showStatus(`Permissions: ${value}`);\n\t\t\treturn;\n\t\t}\n\t\tthis.showWarning(\"Usage: /permissions [ask|auto|yolo|status|allow|deny|hooks]\");\n\t}\n\n\tprivate getMcpArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\t\tconst mcpSubcommands = [\"list\", \"status\", \"add\", \"get\", \"tools\", \"test\", \"enable\", \"disable\", \"remove\", \"help\"];\n\t\tconst servers = this.mcpRuntime?.getServers() ?? [];\n\t\tconst hasTrailingSpace = /\\\\s$/.test(prefix);\n\t\tconst tokens = this.parseSlashArgs(prefix);\n\t\tconst first = tokens[0]?.toLowerCase();\n\n\t\tif (!first || (tokens.length === 1 && !hasTrailingSpace)) {\n\t\t\tconst query = first ?? \"\";\n\t\t\tconst candidates = mcpSubcommands.filter((subcommand) => subcommand.includes(query));\n\t\t\treturn candidates.map((subcommand) => ({ value: subcommand, label: subcommand }));\n\t\t}\n\n\t\tif ([\"get\", \"remove\", \"enable\", \"disable\", \"test\", \"tools\"].includes(first)) {\n\t\t\tconst query = hasTrailingSpace ? \"\" : (tokens[1] ?? \"\");\n\t\t\tconst filtered = query\n\t\t\t\t? fuzzyFilter(servers, query, (server) => `${server.name} ${server.scope}`)\n\t\t\t\t: servers;\n\t\t\treturn filtered.map((server) => ({\n\t\t\t\tvalue: server.name,\n\t\t\t\tlabel: server.name,\n\t\t\t\tdescription: `${server.scope}/${server.transport} · ${server.state}`,\n\t\t\t}));\n\t\t}\n\n\t\tif (first === \"add\" && tokens.length === 2 && !hasTrailingSpace) {\n\t\t\treturn [{ value: tokens[1], label: tokens[1], description: \"server name\" }];\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getMemoryArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\t\tconst subcommands = [\"list\", \"add\", \"edit\", \"rm\", \"remove\", \"path\", \"ui\", \"help\"];\n\t\tconst scopeFlags = [\"--scope\", \"--project\", \"--user\"];\n\t\tconst scopeValues = [\"project\", \"user\"];\n\t\tconst hasTrailingSpace = /\\\\s$/.test(prefix);\n\t\tconst tokens = this.parseSlashArgs(prefix);\n\t\tconst first = tokens[0]?.toLowerCase();\n\n\t\tconst scopeFlagIndex = tokens.findIndex((token) => token === \"--scope\");\n\t\tif (scopeFlagIndex >= 0) {\n\t\t\tconst needsScopeValue = scopeFlagIndex + 1 >= tokens.length;\n\t\t\tif (needsScopeValue) {\n\t\t\t\treturn scopeValues.map((value) => ({ value, label: value }));\n\t\t\t}\n\t\t\tconst currentScopeValue = tokens[scopeFlagIndex + 1] ?? \"\";\n\t\t\tif (currentScopeValue.length > 0 && !scopeValues.includes(currentScopeValue)) {\n\t\t\t\treturn scopeValues\n\t\t\t\t\t.filter((value) => value.startsWith(currentScopeValue))\n\t\t\t\t\t.map((value) => ({ value, label: value }));\n\t\t\t}\n\t\t}\n\n\t\tif (!first || (tokens.length === 1 && !hasTrailingSpace)) {\n\t\t\tconst query = first ?? \"\";\n\t\t\tconst candidates = [...subcommands, ...scopeFlags].filter((item) => item.includes(query));\n\t\t\treturn candidates.map((item) => ({ value: item, label: item }));\n\t\t}\n\n\t\tconst query = hasTrailingSpace ? \"\" : (tokens[tokens.length - 1] ?? \"\");\n\t\tif (query.startsWith(\"--\")) {\n\t\t\treturn scopeFlags\n\t\t\t\t.filter((flag) => flag.includes(query))\n\t\t\t\t.map((flag) => ({ value: flag, label: flag }));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getSemanticArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\t\tconst subcommands = [\"ui\", \"setup\", \"status\", \"index\", \"rebuild\", \"query\", \"help\"];\n\t\tconst queryFlags = [\"--top-k\"];\n\t\tconst topKValues = [\"5\", \"8\", \"10\", \"20\"];\n\t\tconst hasTrailingSpace = /\\\\s$/.test(prefix);\n\t\tconst tokens = this.parseSlashArgs(prefix);\n\t\tconst first = tokens[0]?.toLowerCase();\n\n\t\tif (!first || (tokens.length === 1 && !hasTrailingSpace)) {\n\t\t\tconst query = first ?? \"\";\n\t\t\tconst candidates = subcommands.filter((item) => item.includes(query));\n\t\t\treturn candidates.map((item) => ({ value: item, label: item }));\n\t\t}\n\n\t\tif (first !== \"query\") {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst topKIndex = tokens.findIndex((token) => token === \"--top-k\");\n\t\tif (topKIndex >= 0) {\n\t\t\tconst currentValue = tokens[topKIndex + 1];\n\t\t\tif (!currentValue) {\n\t\t\t\treturn topKValues.map((value) => ({ value, label: value }));\n\t\t\t}\n\t\t\treturn topKValues\n\t\t\t\t.filter((value) => value.startsWith(currentValue))\n\t\t\t\t.map((value) => ({ value, label: value }));\n\t\t}\n\n\t\tconst query = hasTrailingSpace ? \"\" : (tokens[tokens.length - 1] ?? \"\");\n\t\tif (query.startsWith(\"--\")) {\n\t\t\treturn queryFlags\n\t\t\t\t.filter((flag) => flag.includes(query))\n\t\t\t\t.map((flag) => ({ value: flag, label: flag }));\n\t\t}\n\n\t\tif (hasTrailingSpace) {\n\t\t\treturn queryFlags.map((flag) => ({ value: flag, label: flag }));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getContractArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\t\tconst subcommands = [\"ui\", \"show\", \"edit\", \"clear\", \"help\"];\n\t\tconst scopeFlags = [\"--scope\"];\n\t\tconst scopeValues = [\"project\", \"session\"];\n\t\tconst hasTrailingSpace = /\\\\s$/.test(prefix);\n\t\tconst tokens = this.parseSlashArgs(prefix);\n\t\tconst first = tokens[0]?.toLowerCase();\n\n\t\tif (!first || (tokens.length === 1 && !hasTrailingSpace)) {\n\t\t\tconst query = first ?? \"\";\n\t\t\treturn [...subcommands, ...scopeFlags]\n\t\t\t\t.filter((item) => item.includes(query))\n\t\t\t\t.map((item) => ({ value: item, label: item }));\n\t\t}\n\n\t\tconst scopeIndex = tokens.findIndex((token) => token === \"--scope\");\n\t\tif (scopeIndex >= 0) {\n\t\t\tconst currentValue = tokens[scopeIndex + 1];\n\t\t\tif (!currentValue) {\n\t\t\t\treturn scopeValues.map((value) => ({ value, label: value }));\n\t\t\t}\n\t\t\treturn scopeValues\n\t\t\t\t.filter((value) => value.startsWith(currentValue))\n\t\t\t\t.map((value) => ({ value, label: value }));\n\t\t}\n\n\t\tconst query = hasTrailingSpace ? \"\" : (tokens[tokens.length - 1] ?? \"\");\n\t\tif (query.startsWith(\"--\")) {\n\t\t\treturn scopeFlags.filter((flag) => flag.includes(query)).map((flag) => ({ value: flag, label: flag }));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate getSingularArgumentCompletions(prefix: string): AutocompleteItem[] | null {\n\t\tconst subcommands = [\"help\", \"last\"];\n\t\tconst hasTrailingSpace = /\\\\s$/.test(prefix);\n\t\tconst tokens = this.parseSlashArgs(prefix);\n\t\tconst first = tokens[0]?.toLowerCase();\n\n\t\tif (!first || (tokens.length === 1 && !hasTrailingSpace)) {\n\t\t\tconst query = first ?? \"\";\n\t\t\treturn subcommands.filter((item) => item.includes(query)).map((item) => ({ value: item, label: item }));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate setupAutocomplete(fdPath: string | undefined): void {\n\t\t// Define commands for autocomplete\n\t\tconst builtinCommands = BUILTIN_SLASH_COMMANDS.filter(\n\t\t\t(command) => this.activeProfileName === \"iosm\" || !IOSM_PROFILE_ONLY_COMMANDS.has(command.name),\n\t\t);\n\t\tconst slashCommands: SlashCommand[] = builtinCommands.map((command) => ({\n\t\t\tname: command.name,\n\t\t\tdescription: command.description,\n\t\t}));\n\n\t\tconst modelCommand = slashCommands.find((command) => command.name === \"model\");\n\t\tif (modelCommand) {\n\t\t\tmodelCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null => {\n\t\t\t\t// Get available models (scoped or from registry)\n\t\t\t\tconst models =\n\t\t\t\t\tthis.session.scopedModels.length > 0\n\t\t\t\t\t\t? this.session.scopedModels.map((s) => s.model)\n\t\t\t\t\t\t: this.session.modelRegistry.getAvailable();\n\n\t\t\t\tif (models.length === 0) return null;\n\n\t\t\t\t// Create items with provider/id format\n\t\t\t\tconst items = models.map((m) => ({\n\t\t\t\t\tid: m.id,\n\t\t\t\t\tprovider: m.provider,\n\t\t\t\t\tlabel: `${m.provider}/${m.id}`,\n\t\t\t\t}));\n\n\t\t\t\t// Fuzzy filter by model ID + provider (allows \"opus anthropic\" to match)\n\t\t\t\tconst filtered = fuzzyFilter(items, prefix, (item) => `${item.id} ${item.provider}`);\n\n\t\t\t\tif (filtered.length === 0) return null;\n\n\t\t\t\treturn filtered.map((item) => ({\n\t\t\t\t\tvalue: item.label,\n\t\t\t\t\tlabel: item.id,\n\t\t\t\t\tdescription: item.provider,\n\t\t\t\t}));\n\t\t\t};\n\t\t}\n\n\t\tconst mcpCommand = slashCommands.find((command) => command.name === \"mcp\");\n\t\tif (mcpCommand) {\n\t\t\tmcpCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null =>\n\t\t\t\tthis.getMcpArgumentCompletions(prefix);\n\t\t}\n\n\t\tconst memoryCommand = slashCommands.find((command) => command.name === \"memory\");\n\t\tif (memoryCommand) {\n\t\t\tmemoryCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null =>\n\t\t\t\tthis.getMemoryArgumentCompletions(prefix);\n\t\t}\n\n\t\tconst semanticCommand = slashCommands.find((command) => command.name === \"semantic\");\n\t\tif (semanticCommand) {\n\t\t\tsemanticCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null =>\n\t\t\t\tthis.getSemanticArgumentCompletions(prefix);\n\t\t}\n\n\t\tconst contractCommand = slashCommands.find((command) => command.name === \"contract\");\n\t\tif (contractCommand) {\n\t\t\tcontractCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null =>\n\t\t\t\tthis.getContractArgumentCompletions(prefix);\n\t\t}\n\n\t\tconst singularCommand = slashCommands.find((command) => command.name === \"singular\");\n\t\tif (singularCommand) {\n\t\t\tsingularCommand.getArgumentCompletions = (prefix: string): AutocompleteItem[] | null =>\n\t\t\t\tthis.getSingularArgumentCompletions(prefix);\n\t\t}\n\n\t\t// Convert prompt templates to SlashCommand format for autocomplete\n\t\tconst templateCommands: SlashCommand[] = this.session.promptTemplates.map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: cmd.description,\n\t\t}));\n\n\t\t// Convert extension commands to SlashCommand format\n\t\tconst builtinCommandNames = new Set(slashCommands.map((c) => c.name));\n\t\tconst extensionCommands: SlashCommand[] = (\n\t\t\tthis.session.extensionRunner?.getRegisteredCommands(builtinCommandNames) ?? []\n\t\t).map((cmd) => ({\n\t\t\tname: cmd.name,\n\t\t\tdescription: cmd.description ?? \"(extension command)\",\n\t\t\tgetArgumentCompletions: cmd.getArgumentCompletions,\n\t\t}));\n\n\t\t// Build skill commands from session.skills (if enabled)\n\t\tthis.skillCommands.clear();\n\t\tconst skillCommandList: SlashCommand[] = [];\n\t\tif (this.settingsManager.getEnableSkillCommands()) {\n\t\t\tfor (const skill of this.session.resourceLoader.getSkills().skills) {\n\t\t\t\tconst commandName = `skill:${skill.name}`;\n\t\t\t\tthis.skillCommands.set(commandName, skill.filePath);\n\t\t\t\tskillCommandList.push({ name: commandName, description: skill.description });\n\t\t\t}\n\t\t}\n\n\t\tconst customAgentMentionItems = (() => {\n\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\t\treturn loaded.agents.map((agent) => ({\n\t\t\t\tname: agent.name,\n\t\t\t\tvalue: `@${agent.name} `,\n\t\t\t\tlabel: `@${agent.name}`,\n\t\t\t\tdescription: `${agent.description} · profile=${agent.profile ?? \"full\"}`,\n\t\t\t}));\n\t\t})();\n\n\t\t// Setup autocomplete\n\t\tconst baseAutocompleteProvider = new CombinedAutocompleteProvider(\n\t\t\t[...slashCommands, ...templateCommands, ...extensionCommands, ...skillCommandList],\n\t\t\tprocess.cwd(),\n\t\t\tfdPath,\n\t\t);\n\n\t\tthis.autocompleteProvider = {\n\t\t\tgetSuggestions: (lines, cursorLine, cursorCol) => {\n\t\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\t\tconst textBeforeCursor = currentLine.slice(0, cursorCol);\n\t\t\t\tconst mentionMatch = textBeforeCursor.match(/(?:^|\\s)(@[^\\s@]*)$/);\n\t\t\t\tconst mentionPrefix = mentionMatch?.[1] ?? null;\n\t\t\t\tconst fallback = baseAutocompleteProvider.getSuggestions(lines, cursorLine, cursorCol);\n\t\t\t\tif (!mentionPrefix || customAgentMentionItems.length === 0) {\n\t\t\t\t\treturn fallback;\n\t\t\t\t}\n\n\t\t\t\tconst rawQuery = mentionPrefix.slice(1).trim();\n\t\t\t\tconst normalizedQuery = rawQuery.replace(/\\\\/g, \"/\");\n\t\t\t\tconst queryTail = normalizedQuery.split(\"/\").filter(Boolean).pop() ?? normalizedQuery;\n\t\t\t\tconst query = queryTail.replace(/\\.md$/i, \"\");\n\t\t\t\tconst filtered = query\n\t\t\t\t\t? fuzzyFilter(customAgentMentionItems, query, (item) => `${item.name} ${item.description ?? \"\"}`)\n\t\t\t\t\t: customAgentMentionItems;\n\t\t\t\tif (filtered.length === 0) {\n\t\t\t\t\treturn fallback;\n\t\t\t\t}\n\n\t\t\t\tconst mergedItems: AutocompleteItem[] = filtered.map((item) => ({\n\t\t\t\t\tvalue: item.value,\n\t\t\t\t\tlabel: item.label,\n\t\t\t\t\tdescription: item.description,\n\t\t\t\t}));\n\t\t\t\tconst seen = new Set(mergedItems.map((item) => item.value));\n\t\t\t\tif (fallback && fallback.prefix === mentionPrefix) {\n\t\t\t\t\tfor (const item of fallback.items) {\n\t\t\t\t\t\tif (seen.has(item.value)) continue;\n\t\t\t\t\t\tmergedItems.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { items: mergedItems, prefix: mentionPrefix };\n\t\t\t},\n\t\t\tapplyCompletion: (lines, cursorLine, cursorCol, item, prefix) => {\n\t\t\t\tif (prefix.startsWith(\"@\")) {\n\t\t\t\t\tconst currentLine = lines[cursorLine] || \"\";\n\t\t\t\t\tconst replaceStart = Math.max(0, cursorCol - prefix.length);\n\t\t\t\t\tconst beforePrefix = currentLine.slice(0, replaceStart);\n\t\t\t\t\tconst afterCursor = currentLine.slice(cursorCol);\n\t\t\t\t\tconst nextLines = [...lines];\n\t\t\t\t\tnextLines[cursorLine] = `${beforePrefix}${item.value}${afterCursor}`;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlines: nextLines,\n\t\t\t\t\t\tcursorLine,\n\t\t\t\t\t\tcursorCol: beforePrefix.length + item.value.length,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn baseAutocompleteProvider.applyCompletion(lines, cursorLine, cursorCol, item, prefix);\n\t\t\t},\n\t\t};\n\n\t\tthis.defaultEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\tif (this.editor !== this.defaultEditor) {\n\t\t\tthis.editor.setAutocompleteProvider?.(this.autocompleteProvider);\n\t\t}\n\t}\n\n\tasync init(): Promise<void> {\n\t\tif (this.isInitialized) return;\n\n\t\t// Load changelog (only show new entries, skip for resumed sessions)\n\t\tthis.changelogMarkdown = this.getChangelogForDisplay();\n\n\t\t// Ensure fd and rg are available (downloads if missing, adds to PATH via getBinDir)\n\t\t// Both are needed: fd for autocomplete, rg for grep tool and bash commands\n\t\tconst [fdPath] = await Promise.all([ensureTool(\"fd\"), ensureTool(\"rg\")]);\n\t\tthis.fdPath = fdPath;\n\n\t\t// Add header container as first child\n\t\tthis.ui.addChild(this.headerContainer);\n\n\t\t// Add header with keybindings from config (unless silenced)\n\t\tif (this.options.verbose || !this.settingsManager.getQuietStartup()) {\n\t\t\tthis.builtInHeader = new Text(this.buildStartupHeaderContent(), 1, 0);\n\t\t\tthis.asciiLogo = new AsciiLogoComponent();\n\n\t\t\t// Setup UI layout with logo + dashboard\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.asciiLogo);\n\t\t\tthis.headerContainer.addChild(new DynamicBorder((text) => theme.fg(\"borderAccent\", text)));\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\tthis.headerContainer.addChild(new DynamicBorder((text) => theme.fg(\"borderMuted\", text)));\n\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\n\t\t\t// Add changelog if provided\n\t\t\tif (this.changelogMarkdown) {\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\n\t\t\t\tif (this.settingsManager.getCollapseChangelog()) {\n\t\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\n\t\t\t\t} else {\n\t\t\t\t\tthis.headerContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.headerContainer.addChild(\n\t\t\t\t\t\tnew Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()),\n\t\t\t\t\t);\n\t\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\t}\n\t\t\t\tthis.headerContainer.addChild(new DynamicBorder());\n\t\t\t}\n\t\t} else {\n\t\t\t// Minimal header when silenced\n\t\t\tthis.builtInHeader = new Text(\"\", 0, 0);\n\t\t\tthis.headerContainer.addChild(this.builtInHeader);\n\t\t\tif (this.changelogMarkdown) {\n\t\t\t\t// Still show changelog notification even in silent mode\n\t\t\t\tthis.headerContainer.addChild(new Spacer(1));\n\t\t\t\tconst versionMatch = this.changelogMarkdown.match(/##\\s+\\[?(\\d+\\.\\d+\\.\\d+)\\]?/);\n\t\t\t\tconst latestVersion = versionMatch ? versionMatch[1] : this.version;\n\t\t\t\tconst condensedText = `Updated to v${latestVersion}. Use ${theme.bold(\"/changelog\")} to view full changelog.`;\n\t\t\t\tthis.headerContainer.addChild(new Text(condensedText, 1, 0));\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.addChild(this.chatContainer);\n\t\tthis.ui.addChild(this.pendingMessagesContainer);\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.renderWidgets(); // Initialize with default spacer\n\t\tthis.ui.addChild(this.widgetContainerAbove);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.widgetContainerBelow);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.setFocus(this.editor);\n\n\t\tthis.setupKeyHandlers();\n\t\tthis.setupEditorSubmitHandler();\n\n\t\t// Initialize extensions first so resources are shown before messages\n\t\tawait this.initExtensions();\n\n\t\t// Render initial messages AFTER showing loaded resources\n\t\tthis.renderInitialMessages();\n\n\t\t// Start the UI\n\t\tthis.ui.start();\n\t\tthis.isInitialized = true;\n\n\t\t// Set terminal title\n\t\tthis.updateTerminalTitle();\n\n\t\t// Subscribe to agent events\n\t\tthis.subscribeToAgent();\n\n\t\t// Set up theme file watcher\n\t\tonThemeChange(() => {\n\t\t\tthis.ui.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Set up git branch watcher (uses provider instead of footer)\n\t\tthis.footerDataProvider.onBranchChange(() => {\n\t\t\tthis.ui.requestRender();\n\t\t});\n\n\t\t// Initialize available provider count for footer display\n\t\tawait this.updateAvailableProviderCount();\n\t}\n\n\tprivate buildStartupHeaderContent(): string {\n\t\tconst kb = this.keybindings;\n\t\tconst hasWorkspace = this.hasIosmWorkspace();\n\t\tconst iosmMode = this.activeProfileName === \"iosm\";\n\t\tconst activeModel = this.session.model;\n\t\tconst activeModelText = activeModel ? `${activeModel.provider}/${activeModel.id}` : \"not configured\";\n\t\tconst modelValue = activeModelText.length > 40 ? `${activeModelText.slice(0, 37)}...` : activeModelText;\n\t\tconst availableModels = this.session.modelRegistry.getAvailable();\n\t\tconst authProviders = this.session.modelRegistry.authStorage.list().length;\n\t\tconst mcpStatuses = this.mcpRuntime?.getServers() ?? [];\n\t\tconst mcpEnabled = mcpStatuses.filter((status) => status.enabled).length;\n\t\tconst mcpConnected = mcpStatuses.filter((status) => status.state === \"connected\").length;\n\t\tconst projectMemoryCount = this.getMemoryEntryCount(\"project\");\n\t\tconst userMemoryCount = this.getMemoryEntryCount(\"user\");\n\n\t\t// Status indicator with colored dot\n\t\tconst indicator = (ok: boolean): string =>\n\t\t\tok ? theme.fg(\"success\", \"●\") : theme.fg(\"warning\", \"○\");\n\n\t\t// Title line: version + profile\n\t\tconst titleLine =\n\t\t\ttheme.bold(theme.fg(\"accent\", `IOSM CLI`)) +\n\t\t\ttheme.fg(\"dim\", ` v${this.version}`) +\n\t\t\ttheme.fg(\"dim\", \" │ \") +\n\t\t\ttheme.fg(\"muted\", \"profile \") +\n\t\t\ttheme.fg(iosmMode ? \"accent\" : \"muted\", this.activeProfileName);\n\n\t\t// Status rows with colored dot indicators\n\t\tconst modeLabel = iosmMode ? (hasWorkspace ? \"iosm\" : \"iosm (no workspace)\") : \"standard\";\n\t\tconst modeOk = iosmMode ? hasWorkspace : true;\n\n\t\tconst modelOk = !!activeModel;\n\t\tconst authOk = authProviders > 0;\n\t\tconst readyOk = availableModels.length > 0;\n\n\t\tlet mcpText = \"none\";\n\t\tlet mcpOk = true;\n\t\tif (mcpStatuses.length > 0) {\n\t\t\tmcpText = mcpEnabled === 0\n\t\t\t\t? `0/${mcpStatuses.length} enabled`\n\t\t\t\t: `${mcpConnected}/${mcpEnabled} connected`;\n\t\t\tmcpOk = mcpEnabled > 0 && mcpConnected === mcpEnabled;\n\t\t}\n\n\t\tlet memoryText: string;\n\t\tlet memoryOk: boolean;\n\t\tif (projectMemoryCount !== undefined && userMemoryCount !== undefined) {\n\t\t\tconst total = projectMemoryCount + userMemoryCount;\n\t\t\tmemoryText = `project ${projectMemoryCount}, user ${userMemoryCount}`;\n\t\t\tmemoryOk = total > 0;\n\t\t} else {\n\t\t\tmemoryText = `project ${projectMemoryCount ?? \"?\"}, user ${userMemoryCount ?? \"?\"}`;\n\t\t\tmemoryOk = false;\n\t\t}\n\n\t\tconst pad = \" \";\n\t\tconst statusRows = [\n\t\t\t`${pad}${indicator(modeOk)} ${theme.fg(\"muted\", \"Mode\")} ${theme.fg(modeOk ? \"text\" : \"warning\", modeLabel)}`,\n\t\t\t`${pad}${indicator(modelOk)} ${theme.fg(\"muted\", \"Model\")} ${theme.fg(modelOk ? \"text\" : \"warning\", modelValue)}`,\n\t\t\t`${pad}${indicator(authOk)} ${theme.fg(\"muted\", \"Auth\")} ${theme.fg(authOk ? \"text\" : \"warning\", `${authProviders} provider${authProviders !== 1 ? \"s\" : \"\"}`)}`,\n\t\t\t`${pad}${indicator(readyOk)} ${theme.fg(\"muted\", \"Ready\")} ${theme.fg(readyOk ? \"text\" : \"warning\", `${availableModels.length} model${availableModels.length !== 1 ? \"s\" : \"\"}`)}`,\n\t\t\t`${pad}${indicator(mcpOk)} ${theme.fg(\"muted\", \"MCP\")} ${theme.fg(mcpOk ? \"text\" : \"warning\", mcpText)}`,\n\t\t\t`${pad}${indicator(memoryOk)} ${theme.fg(\"muted\", \"Memory\")} ${theme.fg(memoryOk ? \"text\" : \"warning\", memoryText)}`,\n\t\t];\n\n\t\t// Contextual guidance\n\t\tlet guidanceLine: string;\n\t\tif (!activeModel && availableModels.length === 0) {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Get started: ${theme.fg(\"accent\", \"/login\")} ${theme.fg(\"dim\", \"→\")} ${theme.fg(\"accent\", \"/model\")} ${theme.fg(\"dim\", \"→\")} ${theme.fg(\"accent\", \"/doctor\")}`;\n\t\t} else if (!activeModel) {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Select a model: ${theme.fg(\"accent\", \"/model\")}`;\n\t\t} else if (iosmMode && !hasWorkspace) {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Initialize workspace: ${theme.fg(\"accent\", \"/init\")} or ${theme.fg(\"accent\", \"/iosm\")}`;\n\t\t} else {\n\t\t\tguidanceLine = `${pad}${theme.fg(\"dim\", \"→\")} Ready. Type a task or use ${theme.fg(\"accent\", \"/help\")} for commands`;\n\t\t}\n\n\t\t// Commands and keys\n\t\t\tconst commandsLine =\n\t\t\t\t`${pad}${theme.fg(\"dim\", \"cmds\")} ` +\n\t\t\t\t[\"model\", \"login\", \"contract\", \"singular\", \"semantic\", \"memory\", \"new\"]\n\t\t\t\t\t.map((c) => theme.fg(\"accent\", `/${c}`))\n\t\t\t\t\t.join(theme.fg(\"dim\", \" \"));\n\n\t\tconst keysLine =\n\t\t\t`${pad}${theme.fg(\"dim\", \"keys\")} ` +\n\t\t\tappKeyHint(kb, \"interrupt\", \"stop\") +\n\t\t\ttheme.fg(\"dim\", \" \") +\n\t\t\tappKeyHint(kb, \"selectModel\", \"model\") +\n\t\t\ttheme.fg(\"dim\", \" \") +\n\t\t\tappKeyHint(kb, \"cycleModelForward\", \"next-model\") +\n\t\t\ttheme.fg(\"dim\", \" \") +\n\t\t\tappKeyHint(kb, \"cycleProfile\", \"profile\");\n\n\t\treturn [\n\t\t\ttitleLine,\n\t\t\t\"\",\n\t\t\t...statusRows,\n\t\t\t\"\",\n\t\t\tguidanceLine,\n\t\t\t\"\",\n\t\t\tcommandsLine,\n\t\t\tkeysLine,\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate getMemoryEntryCount(scope: MemoryScope): number | undefined {\n\t\ttry {\n\t\t\treturn readMemoryEntries(this.resolveMemoryPath(scope)).entries.length;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tprivate refreshBuiltInHeader(): void {\n\t\tif (!this.builtInHeader || this.customHeader || this.settingsManager.getQuietStartup()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.builtInHeader.setText(this.buildStartupHeaderContent());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate hasIosmWorkspace(): boolean {\n\t\treturn fs.existsSync(path.join(this.sessionManager.getCwd(), \".iosm\"));\n\t}\n\n\tprivate requireIosmMode(commandName: string): boolean {\n\t\tif (this.activeProfileName === \"iosm\") return true;\n\t\tthis.showWarning(`\\`${commandName}\\` is available only in IOSM profile. Switch profile to \\`iosm\\` (Shift+Tab).`);\n\t\treturn false;\n\t}\n\n\t/**\n\t * Update terminal title with session name and cwd.\n\t */\n\tprivate updateTerminalTitle(): void {\n\t\tconst cwdBasename = path.basename(process.cwd());\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\t\tif (sessionName) {\n\t\t\tthis.ui.terminal.setTitle(`${APP_NAME} - ${sessionName} - ${cwdBasename}`);\n\t\t} else {\n\t\t\tthis.ui.terminal.setTitle(`${APP_NAME} - ${cwdBasename}`);\n\t\t}\n\t}\n\n\t/**\n\t * Run the interactive mode. This is the main entry point.\n\t * Initializes the UI, shows warnings, processes initial messages, and starts the interactive loop.\n\t */\n\tasync run(): Promise<void> {\n\t\tawait this.init();\n\n\t\t// Start version check asynchronously\n\t\tthis.checkForNewVersion().then((newVersion) => {\n\t\t\tif (newVersion) {\n\t\t\t\tthis.showNewVersionNotification(newVersion);\n\t\t\t}\n\t\t});\n\n\t\t// Show startup warnings\n\t\tconst { migratedProviders, modelFallbackMessage, initialMessage, initialImages, initialMessages } = this.options;\n\n\t\tif (migratedProviders && migratedProviders.length > 0) {\n\t\t\tthis.showWarning(`Migrated credentials to auth.json: ${migratedProviders.join(\", \")}`);\n\t\t}\n\n\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\tif (modelsJsonError) {\n\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t}\n\n\t\tif (modelFallbackMessage) {\n\t\t\tthis.showWarning(modelFallbackMessage);\n\t\t}\n\t\tif (!this.session.model) {\n\t\t\tthis.showWarning(\"No model selected. Choose a model to start.\");\n\t\t\tawait this.showModelProviderSelector();\n\t\t}\n\n\t\t// Process initial messages\n\t\tif (initialMessage && this.session.model) {\n\t\t\ttry {\n\t\t\t\tawait this.session.prompt(initialMessage, { images: initialImages });\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t} else if (initialMessage && !this.session.model) {\n\t\t\tthis.showWarning(\"Initial message not sent: select a model first.\");\n\t\t}\n\n\t\tif (initialMessages && this.session.model) {\n\t\t\tfor (const message of initialMessages) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.prompt(message);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\t\tthis.showError(errorMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (initialMessages && initialMessages.length > 0 && !this.session.model) {\n\t\t\tthis.showWarning(\"Initial messages not sent: select a model first.\");\n\t\t}\n\n\t\t// Main interactive loop\n\t\twhile (true) {\n\t\t\tconst userInput = await this.getUserInput();\n\t\t\ttry {\n\t\t\t\tawait this.promptWithTaskFallback(userInput);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\t\tthis.showError(errorMessage);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check npm registry for a newer version.\n\t */\n\tprivate async checkForNewVersion(): Promise<string | undefined> {\n\t\tif (\n\t\t\tprocess.env[ENV_SKIP_VERSION_CHECK] ||\n\t\t\tprocess.env.PI_SKIP_VERSION_CHECK ||\n\t\t\tprocess.env[ENV_OFFLINE] ||\n\t\t\tprocess.env.PI_OFFLINE\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\ttry {\n\t\t\tconst response = await fetch(`https://registry.npmjs.org/${PACKAGE_NAME}/latest`, {\n\t\t\t\tsignal: AbortSignal.timeout(10000),\n\t\t\t});\n\t\t\tif (!response.ok) return undefined;\n\n\t\t\tconst data = (await response.json()) as { version?: string };\n\t\t\tconst latestVersion = data.version;\n\n\t\t\tif (latestVersion && latestVersion !== this.version) {\n\t\t\t\treturn latestVersion;\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Get changelog entries to display on startup.\n\t * Only shows new entries since last seen version, skips for resumed sessions.\n\t */\n\tprivate getChangelogForDisplay(): string | undefined {\n\t\t// Skip changelog for resumed/continued sessions (already have messages)\n\t\tif (this.session.state.messages.length > 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst lastVersion = this.settingsManager.getLastChangelogVersion();\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst entries = parseChangelog(changelogPath);\n\n\t\tif (!lastVersion) {\n\t\t\t// Fresh install - just record the version, don't show changelog\n\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\treturn undefined;\n\t\t} else {\n\t\t\tconst newEntries = getNewEntries(entries, lastVersion);\n\t\t\tif (newEntries.length > 0) {\n\t\t\t\tthis.settingsManager.setLastChangelogVersion(VERSION);\n\t\t\t\treturn newEntries.map((e) => e.content).join(\"\\n\\n\");\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tprivate getMarkdownThemeWithSettings(): MarkdownTheme {\n\t\treturn {\n\t\t\t...getMarkdownTheme(),\n\t\t\tcodeBlockIndent: this.settingsManager.getCodeBlockIndent(),\n\t\t};\n\t}\n\n\t// =========================================================================\n\t// Extension System\n\t// =========================================================================\n\n\tprivate formatDisplayPath(p: string): string {\n\t\tconst home = os.homedir();\n\t\tlet result = p;\n\n\t\t// Replace home directory with ~\n\t\tif (result.startsWith(home)) {\n\t\t\tresult = `~${result.slice(home.length)}`;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get a short path relative to the package root for display.\n\t */\n\tprivate getShortPath(fullPath: string, source: string): string {\n\t\t// For npm packages, show path relative to node_modules/pkg/\n\t\tconst npmMatch = fullPath.match(/node_modules\\/(@?[^/]+(?:\\/[^/]+)?)\\/(.*)/);\n\t\tif (npmMatch && source.startsWith(\"npm:\")) {\n\t\t\treturn npmMatch[2];\n\t\t}\n\n\t\t// For git packages, show path relative to repo root\n\t\tconst gitMatch = fullPath.match(/git\\/[^/]+\\/[^/]+\\/(.*)/);\n\t\tif (gitMatch && source.startsWith(\"git:\")) {\n\t\t\treturn gitMatch[1];\n\t\t}\n\n\t\t// For local/auto, just use formatDisplayPath\n\t\treturn this.formatDisplayPath(fullPath);\n\t}\n\n\tprivate getDisplaySourceInfo(\n\t\tsource: string,\n\t\tscope: string,\n\t): { label: string; scopeLabel?: string; color: \"accent\" | \"muted\" } {\n\t\tif (source === \"local\") {\n\t\t\tif (scope === \"user\") {\n\t\t\t\treturn { label: \"user\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"project\") {\n\t\t\t\treturn { label: \"project\", color: \"muted\" };\n\t\t\t}\n\t\t\tif (scope === \"temporary\") {\n\t\t\t\treturn { label: \"path\", scopeLabel: \"temp\", color: \"muted\" };\n\t\t\t}\n\t\t\treturn { label: \"path\", color: \"muted\" };\n\t\t}\n\n\t\tif (source === \"cli\") {\n\t\t\treturn { label: \"path\", scopeLabel: scope === \"temporary\" ? \"temp\" : undefined, color: \"muted\" };\n\t\t}\n\n\t\tconst scopeLabel =\n\t\t\tscope === \"user\" ? \"user\" : scope === \"project\" ? \"project\" : scope === \"temporary\" ? \"temp\" : undefined;\n\t\treturn { label: source, scopeLabel, color: \"accent\" };\n\t}\n\n\tprivate getScopeGroup(source: string, scope: string): \"user\" | \"project\" | \"path\" {\n\t\tif (source === \"cli\" || scope === \"temporary\") return \"path\";\n\t\tif (scope === \"user\") return \"user\";\n\t\tif (scope === \"project\") return \"project\";\n\t\treturn \"path\";\n\t}\n\n\tprivate isPackageSource(source: string): boolean {\n\t\treturn source.startsWith(\"npm:\") || source.startsWith(\"git:\");\n\t}\n\n\tprivate buildScopeGroups(\n\t\tpaths: string[],\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }> {\n\t\tconst groups: Record<\n\t\t\t\"user\" | \"project\" | \"path\",\n\t\t\t{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }\n\t\t> = {\n\t\t\tuser: { scope: \"user\", paths: [], packages: new Map() },\n\t\t\tproject: { scope: \"project\", paths: [], packages: new Map() },\n\t\t\tpath: { scope: \"path\", paths: [], packages: new Map() },\n\t\t};\n\n\t\tfor (const p of paths) {\n\t\t\tconst meta = this.findMetadata(p, metadata);\n\t\t\tconst source = meta?.source ?? \"local\";\n\t\t\tconst scope = meta?.scope ?? \"project\";\n\t\t\tconst groupKey = this.getScopeGroup(source, scope);\n\t\t\tconst group = groups[groupKey];\n\n\t\t\tif (this.isPackageSource(source)) {\n\t\t\t\tconst list = group.packages.get(source) ?? [];\n\t\t\t\tlist.push(p);\n\t\t\t\tgroup.packages.set(source, list);\n\t\t\t} else {\n\t\t\t\tgroup.paths.push(p);\n\t\t\t}\n\t\t}\n\n\t\treturn [groups.project, groups.user, groups.path].filter(\n\t\t\t(group) => group.paths.length > 0 || group.packages.size > 0,\n\t\t);\n\t}\n\n\tprivate formatScopeGroups(\n\t\tgroups: Array<{ scope: \"user\" | \"project\" | \"path\"; paths: string[]; packages: Map<string, string[]> }>,\n\t\toptions: {\n\t\t\tformatPath: (p: string) => string;\n\t\t\tformatPackagePath: (p: string, source: string) => string;\n\t\t},\n\t): string {\n\t\tconst lines: string[] = [];\n\n\t\tfor (const group of groups) {\n\t\t\tlines.push(` ${theme.fg(\"accent\", group.scope)}`);\n\n\t\t\tconst sortedPaths = [...group.paths].sort((a, b) => a.localeCompare(b));\n\t\t\tfor (const p of sortedPaths) {\n\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPath(p)}`));\n\t\t\t}\n\n\t\t\tconst sortedPackages = Array.from(group.packages.entries()).sort(([a], [b]) => a.localeCompare(b));\n\t\t\tfor (const [source, paths] of sortedPackages) {\n\t\t\t\tlines.push(` ${theme.fg(\"mdLink\", source)}`);\n\t\t\t\tconst sortedPackagePaths = [...paths].sort((a, b) => a.localeCompare(b));\n\t\t\t\tfor (const p of sortedPackagePaths) {\n\t\t\t\t\tlines.push(theme.fg(\"dim\", ` ${options.formatPackagePath(p, source)}`));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\t/**\n\t * Find metadata for a path, checking parent directories if exact match fails.\n\t * Package manager stores metadata for directories, but we display file paths.\n\t */\n\tprivate findMetadata(\n\t\tp: string,\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): { source: string; scope: string; origin: string } | undefined {\n\t\t// Try exact match first\n\t\tconst exact = metadata.get(p);\n\t\tif (exact) return exact;\n\n\t\t// Try parent directories (package manager stores directory paths)\n\t\tlet current = p;\n\t\twhile (current.includes(\"/\")) {\n\t\t\tcurrent = current.substring(0, current.lastIndexOf(\"/\"));\n\t\t\tconst parent = metadata.get(current);\n\t\t\tif (parent) return parent;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Format a path with its source/scope info from metadata.\n\t */\n\tprivate formatPathWithSource(\n\t\tp: string,\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): string {\n\t\tconst meta = this.findMetadata(p, metadata);\n\t\tif (meta) {\n\t\t\tconst shortPath = this.getShortPath(p, meta.source);\n\t\t\tconst { label, scopeLabel } = this.getDisplaySourceInfo(meta.source, meta.scope);\n\t\t\tconst labelText = scopeLabel ? `${label} (${scopeLabel})` : label;\n\t\t\treturn `${labelText} ${shortPath}`;\n\t\t}\n\t\treturn this.formatDisplayPath(p);\n\t}\n\n\t/**\n\t * Format resource diagnostics with nice collision display using metadata.\n\t */\n\tprivate formatDiagnostics(\n\t\tdiagnostics: readonly ResourceDiagnostic[],\n\t\tmetadata: Map<string, { source: string; scope: string; origin: string }>,\n\t): string {\n\t\tconst lines: string[] = [];\n\n\t\t// Group collision diagnostics by name\n\t\tconst collisions = new Map<string, ResourceDiagnostic[]>();\n\t\tconst otherDiagnostics: ResourceDiagnostic[] = [];\n\n\t\tfor (const d of diagnostics) {\n\t\t\tif (d.type === \"collision\" && d.collision) {\n\t\t\t\tconst list = collisions.get(d.collision.name) ?? [];\n\t\t\t\tlist.push(d);\n\t\t\t\tcollisions.set(d.collision.name, list);\n\t\t\t} else {\n\t\t\t\totherDiagnostics.push(d);\n\t\t\t}\n\t\t}\n\n\t\t// Format collision diagnostics grouped by name\n\t\tfor (const [name, collisionList] of collisions) {\n\t\t\tconst first = collisionList[0]?.collision;\n\t\t\tif (!first) continue;\n\t\t\tlines.push(theme.fg(\"warning\", ` \"${name}\" collision:`));\n\t\t\t// Show winner\n\t\t\tlines.push(\n\t\t\t\ttheme.fg(\"dim\", ` ${theme.fg(\"success\", \"✓\")} ${this.formatPathWithSource(first.winnerPath, metadata)}`),\n\t\t\t);\n\t\t\t// Show all losers\n\t\t\tfor (const d of collisionList) {\n\t\t\t\tif (d.collision) {\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\ttheme.fg(\n\t\t\t\t\t\t\t\"dim\",\n\t\t\t\t\t\t\t` ${theme.fg(\"warning\", \"✗\")} ${this.formatPathWithSource(d.collision.loserPath, metadata)} (skipped)`,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Format other diagnostics (skill name collisions, parse errors, etc.)\n\t\tfor (const d of otherDiagnostics) {\n\t\t\tif (d.path) {\n\t\t\t\t// Use metadata-aware formatting for paths\n\t\t\t\tconst sourceInfo = this.formatPathWithSource(d.path, metadata);\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${sourceInfo}`));\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t} else {\n\t\t\t\tlines.push(theme.fg(d.type === \"error\" ? \"error\" : \"warning\", ` ${d.message}`));\n\t\t\t}\n\t\t}\n\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate showLoadedResources(options?: {\n\t\textensionPaths?: string[];\n\t\tforce?: boolean;\n\t\tshowDiagnosticsWhenQuiet?: boolean;\n\t}): void {\n\t\tconst showListing = options?.force || this.options.verbose || !this.settingsManager.getQuietStartup();\n\t\tconst showDiagnostics = showListing || options?.showDiagnosticsWhenQuiet === true;\n\t\tif (!showListing && !showDiagnostics) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst metadata = this.session.resourceLoader.getPathMetadata();\n\t\tconst sectionHeader = (name: string, color: ThemeColor = \"mdHeading\") => theme.fg(color, `[${name}]`);\n\n\t\tconst skillsResult = this.session.resourceLoader.getSkills();\n\t\tconst promptsResult = this.session.resourceLoader.getPrompts();\n\t\tconst themesResult = this.session.resourceLoader.getThemes();\n\t\tconst contextFiles = this.session.resourceLoader.getAgentsFiles().agentsFiles.filter((file) => {\n\t\t\tconst normalized = file.path.replace(/\\\\/g, \"/\");\n\t\t\tconst isIosmPlaybook = normalized.endsWith(\"/IOSM.md\");\n\t\t\tconst isAgentsPlaybook = normalized.endsWith(\"/AGENTS.md\");\n\t\t\tif (!isIosmPlaybook && !isAgentsPlaybook) return true;\n\t\t\treturn this.activeProfileName === \"iosm\" ? isIosmPlaybook : isAgentsPlaybook;\n\t\t});\n\t\tconst loadedThemes = themesResult.themes;\n\t\tconst customThemes = loadedThemes.filter((t) => t.sourcePath);\n\t\tconst extensionPaths = options?.extensionPaths ?? [];\n\n\t\tif (showListing) {\n\t\t\tconst summaryParts = [];\n\t\t\tif (contextFiles.length > 0) summaryParts.push(theme.fg(\"accent\", `${contextFiles.length} context`));\n\t\t\tif (skillsResult.skills.length > 0) summaryParts.push(theme.fg(\"accent\", `${skillsResult.skills.length} skills`));\n\t\t\tif (this.session.promptTemplates.length > 0) {\n\t\t\t\tsummaryParts.push(theme.fg(\"accent\", `${this.session.promptTemplates.length} prompts`));\n\t\t\t}\n\t\t\tif (extensionPaths.length > 0) summaryParts.push(theme.fg(\"accent\", `${extensionPaths.length} extensions`));\n\t\t\tif (customThemes.length > 0) summaryParts.push(theme.fg(\"accent\", `${customThemes.length} themes`));\n\t\t\t\tif (summaryParts.length > 0) {\n\t\t\t\t\t// Build compact resource block: summary + inline items\n\t\t\t\t\tconst lines: string[] = [];\n\t\t\t\t\tlines.push(\n\t\t\t\t\t\t`${theme.fg(\"dim\", \"resources\")} ${summaryParts.join(theme.fg(\"dim\", \" · \"))}`,\n\t\t\t\t\t);\n\n\t\t\t\t// Context: show file basenames inline\n\t\t\t\tif (contextFiles.length > 0) {\n\t\t\t\t\tconst names = contextFiles.map((f) => theme.fg(\"dim\", this.formatDisplayPath(f.path)));\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"ctx\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\t// Skills: show file basenames inline\n\t\t\t\tif (skillsResult.skills.length > 0) {\n\t\t\t\t\tconst names = skillsResult.skills.map((s) => {\n\t\t\t\t\t\tconst parts = s.filePath.replace(/\\\\/g, \"/\").split(\"/\");\n\t\t\t\t\t\t// Use the parent directory name as skill name (directory before SKILL.md)\n\t\t\t\t\t\tconst skillDir = parts[parts.length - 2] || parts[parts.length - 1];\n\t\t\t\t\t\treturn theme.fg(\"dim\", skillDir);\n\t\t\t\t\t});\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"ski\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\t// Prompts: show command names inline\n\t\t\t\tif (this.session.promptTemplates.length > 0) {\n\t\t\t\t\tconst names = this.session.promptTemplates.map((t) => theme.fg(\"dim\", `/${t.name}`));\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"cmd\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\t// Extensions: show basenames inline\n\t\t\t\tif (extensionPaths.length > 0) {\n\t\t\t\t\tconst names = extensionPaths.map((p) => theme.fg(\"dim\", this.formatDisplayPath(p)));\n\t\t\t\t\tlines.push(` ${theme.fg(\"muted\", \"ext\")} ${names.join(theme.fg(\"dim\", \", \"))}`);\n\t\t\t\t}\n\n\t\t\t\tconst resourceWidth = Math.max(24, this.ui?.terminal?.columns ?? 120);\n\t\t\t\tconst safeLines = lines.map((line) =>\n\t\t\t\t\tvisibleWidth(line) > resourceWidth ? truncateToWidth(line, resourceWidth, \"\") : line,\n\t\t\t\t);\n\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(new Text(safeLines.join(\"\\n\"), 0, 0));\n\t\t\t}\n\t\t}\n\n\t\tif (showDiagnostics) {\n\t\t\tconst skillDiagnostics = skillsResult.diagnostics;\n\t\t\tif (skillDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(skillDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Skill conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst promptDiagnostics = promptsResult.diagnostics;\n\t\t\tif (promptDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(promptDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Prompt conflicts]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst extensionDiagnostics: ResourceDiagnostic[] = [];\n\t\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors;\n\t\t\tif (extensionErrors.length > 0) {\n\t\t\t\tfor (const error of extensionErrors) {\n\t\t\t\t\textensionDiagnostics.push({ type: \"error\", message: error.error, path: error.path });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst commandDiagnostics = this.session.extensionRunner?.getCommandDiagnostics() ?? [];\n\t\t\textensionDiagnostics.push(...commandDiagnostics);\n\n\t\t\tconst shortcutDiagnostics = this.session.extensionRunner?.getShortcutDiagnostics() ?? [];\n\t\t\textensionDiagnostics.push(...shortcutDiagnostics);\n\n\t\t\tif (extensionDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(extensionDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(\n\t\t\t\t\tnew Text(`${theme.fg(\"warning\", \"[Extension issues]\")}\\n${warningLines}`, 0, 0),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\n\t\t\tconst themeDiagnostics = themesResult.diagnostics;\n\t\t\tif (themeDiagnostics.length > 0) {\n\t\t\t\tconst warningLines = this.formatDiagnostics(themeDiagnostics, metadata);\n\t\t\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"warning\", \"[Theme conflicts]\")}\\n${warningLines}`, 0, 0));\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Initialize the extension system with TUI-based UI context.\n\t */\n\tprivate async initExtensions(): Promise<void> {\n\t\tconst uiContext = this.createExtensionUIContext();\n\t\tawait this.session.bindExtensions({\n\t\t\tuiContext,\n\t\t\tcommandContextActions: {\n\t\t\t\twaitForIdle: () => this.session.agent.waitForIdle(),\n\t\t\t\tnewSession: async (options) => {\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\n\t\t\t\t\t// Delegate to AgentSession (handles setup + agent state sync)\n\t\t\t\t\tconst success = await this.session.newSession(options);\n\t\t\t\t\tif (!success) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clear UI state\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.pendingMessagesContainer.clear();\n\t\t\t\t\tthis.compactionQueuedMessages = [];\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.pendingTools.clear();\n\n\t\t\t\t\t// Render any messages added via setup, or show empty session\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.ui.requestRender();\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tfork: async (entryId) => {\n\t\t\t\t\tconst result = await this.session.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.editor.setText(result.selectedText);\n\t\t\t\t\tthis.showStatus(\"Forked to new session\");\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tnavigateTree: async (targetId, options) => {\n\t\t\t\t\tconst result = await this.session.navigateTree(targetId, {\n\t\t\t\t\t\tsummarize: options?.summarize,\n\t\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\t\tlabel: options?.label,\n\t\t\t\t\t});\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\treturn { cancelled: true };\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t}\n\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\tswitchSession: async (sessionPath) => {\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t\treturn { cancelled: false };\n\t\t\t\t},\n\t\t\t\treload: async () => {\n\t\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\t},\n\t\t\t},\n\t\t\tshutdownHandler: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t\tif (!this.session.isStreaming) {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (error) => {\n\t\t\t\tthis.showExtensionError(error.extensionPath, error.error, error.stack);\n\t\t\t},\n\t\t});\n\n\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\tthis.setupAutocomplete(this.fdPath);\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (!extensionRunner) {\n\t\t\tthis.showLoadedResources({ extensionPaths: [], force: false });\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setupExtensionShortcuts(extensionRunner);\n\t\tthis.showLoadedResources({ extensionPaths: extensionRunner.getExtensionPaths(), force: false });\n\t}\n\n\t/**\n\t * Get a registered tool definition by name (for custom rendering).\n\t */\n\tprivate getRegisteredToolDefinition(toolName: string) {\n\t\tconst tools = this.session.extensionRunner?.getAllRegisteredTools() ?? [];\n\t\tconst registeredTool = tools.find((t) => t.definition.name === toolName);\n\t\treturn registeredTool?.definition;\n\t}\n\n\t/**\n\t * Set up keyboard shortcuts registered by extensions.\n\t */\n\tprivate setupExtensionShortcuts(extensionRunner: ExtensionRunner): void {\n\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\tif (shortcuts.size === 0) return;\n\n\t\t// Create a context for shortcut handlers\n\t\tconst createContext = (): ExtensionContext => ({\n\t\t\tui: this.createExtensionUIContext(),\n\t\t\thasUI: true,\n\t\t\tcwd: process.cwd(),\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tmodelRegistry: this.session.modelRegistry,\n\t\t\tmodel: this.session.model,\n\t\t\tisIdle: () => !this.session.isStreaming,\n\t\t\tabort: () => this.session.abort(),\n\t\t\thasPendingMessages: () => this.session.pendingMessageCount > 0,\n\t\t\tshutdown: () => {\n\t\t\t\tthis.shutdownRequested = true;\n\t\t\t},\n\t\t\tgetContextUsage: () => this.session.getContextUsage(),\n\t\t\tcompact: (options) => {\n\t\t\t\tvoid (async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.executeCompaction(options?.customInstructions, false);\n\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\toptions?.onComplete?.(result);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\t\t\t\t\toptions?.onError?.(err);\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t},\n\t\t\tgetSystemPrompt: () => this.session.systemPrompt,\n\t\t});\n\n\t\t// Set up the extension shortcut handler on the default editor\n\t\tthis.defaultEditor.onExtensionShortcut = (data: string) => {\n\t\t\tfor (const [shortcutStr, shortcut] of shortcuts) {\n\t\t\t\t// Cast to KeyId - extension shortcuts use the same format\n\t\t\t\tif (matchesKey(data, shortcutStr as KeyId)) {\n\t\t\t\t\t// Run handler async, don't block input\n\t\t\t\t\tPromise.resolve(shortcut.handler(createContext())).catch((err) => {\n\t\t\t\t\t\tthis.showError(`Shortcut handler error: ${err instanceof Error ? err.message : String(err)}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n\n\t/**\n\t * Set extension status text in the footer.\n\t */\n\tprivate setExtensionStatus(key: string, text: string | undefined): void {\n\t\tthis.footerDataProvider.setExtensionStatus(key, text);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set an extension widget (string array or custom component).\n\t */\n\tprivate setExtensionWidget(\n\t\tkey: string,\n\t\tcontent: string[] | ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined,\n\t\toptions?: ExtensionWidgetOptions,\n\t): void {\n\t\tconst placement = options?.placement ?? \"aboveEditor\";\n\t\tconst removeExisting = (map: Map<string, Component & { dispose?(): void }>) => {\n\t\t\tconst existing = map.get(key);\n\t\t\tif (existing?.dispose) existing.dispose();\n\t\t\tmap.delete(key);\n\t\t};\n\n\t\tremoveExisting(this.extensionWidgetsAbove);\n\t\tremoveExisting(this.extensionWidgetsBelow);\n\n\t\tif (content === undefined) {\n\t\t\tthis.renderWidgets();\n\t\t\treturn;\n\t\t}\n\n\t\tlet component: Component & { dispose?(): void };\n\n\t\tif (Array.isArray(content)) {\n\t\t\t// Wrap string array in a Container with Text components\n\t\t\tconst container = new Container();\n\t\t\tfor (const line of content.slice(0, InteractiveMode.MAX_WIDGET_LINES)) {\n\t\t\t\tcontainer.addChild(new Text(line, 1, 0));\n\t\t\t}\n\t\t\tif (content.length > InteractiveMode.MAX_WIDGET_LINES) {\n\t\t\t\tcontainer.addChild(new Text(theme.fg(\"muted\", \"... (widget truncated)\"), 1, 0));\n\t\t\t}\n\t\t\tcomponent = container;\n\t\t} else {\n\t\t\t// Factory function - create component\n\t\t\tcomponent = content(this.ui, theme);\n\t\t}\n\n\t\tconst targetMap = placement === \"belowEditor\" ? this.extensionWidgetsBelow : this.extensionWidgetsAbove;\n\t\ttargetMap.set(key, component);\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate clearExtensionWidgets(): void {\n\t\tfor (const widget of this.extensionWidgetsAbove.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tfor (const widget of this.extensionWidgetsBelow.values()) {\n\t\t\twidget.dispose?.();\n\t\t}\n\t\tthis.extensionWidgetsAbove.clear();\n\t\tthis.extensionWidgetsBelow.clear();\n\t\tthis.renderWidgets();\n\t}\n\n\tprivate resetExtensionUI(): void {\n\t\tif (this.extensionSelector) {\n\t\t\tthis.hideExtensionSelector();\n\t\t}\n\t\tif (this.extensionInput) {\n\t\t\tthis.hideExtensionInput();\n\t\t}\n\t\tif (this.extensionEditor) {\n\t\t\tthis.hideExtensionEditor();\n\t\t}\n\t\tthis.ui.hideOverlay();\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.setExtensionFooter(undefined);\n\t\tthis.setExtensionHeader(undefined);\n\t\tthis.clearExtensionWidgets();\n\t\tthis.footerDataProvider.clearExtensionStatuses();\n\t\tthis.footer.invalidate();\n\t\tthis.setCustomEditorComponent(undefined);\n\t\tthis.defaultEditor.onExtensionShortcut = undefined;\n\t\tthis.updateTerminalTitle();\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.setMessage(\n\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Maximum total widget lines to prevent viewport overflow\n\tprivate static readonly MAX_WIDGET_LINES = 10;\n\n\t/**\n\t * Render all extension widgets to the widget container.\n\t */\n\tprivate renderWidgets(): void {\n\t\tif (!this.widgetContainerAbove || !this.widgetContainerBelow) return;\n\t\tthis.renderWidgetContainer(this.widgetContainerAbove, this.extensionWidgetsAbove, true, true);\n\t\tthis.renderWidgetContainer(this.widgetContainerBelow, this.extensionWidgetsBelow, false, false);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate renderWidgetContainer(\n\t\tcontainer: Container,\n\t\twidgets: Map<string, Component & { dispose?(): void }>,\n\t\tspacerWhenEmpty: boolean,\n\t\tleadingSpacer: boolean,\n\t): void {\n\t\tcontainer.clear();\n\n\t\tif (widgets.size === 0) {\n\t\t\tif (spacerWhenEmpty) {\n\t\t\t\tcontainer.addChild(new Spacer(1));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (leadingSpacer) {\n\t\t\tcontainer.addChild(new Spacer(1));\n\t\t}\n\t\tfor (const component of widgets.values()) {\n\t\t\tcontainer.addChild(component);\n\t\t}\n\t}\n\n\t/**\n\t * Set a custom footer component, or restore the built-in footer.\n\t */\n\tprivate setExtensionFooter(\n\t\tfactory:\n\t\t\t| ((tui: TUI, thm: Theme, footerData: ReadonlyFooterDataProvider) => Component & { dispose?(): void })\n\t\t\t| undefined,\n\t): void {\n\t\t// Dispose existing custom footer\n\t\tif (this.customFooter?.dispose) {\n\t\t\tthis.customFooter.dispose();\n\t\t}\n\n\t\t// Remove current footer from UI\n\t\tif (this.customFooter) {\n\t\t\tthis.ui.removeChild(this.customFooter);\n\t\t} else {\n\t\t\tthis.ui.removeChild(this.footer);\n\t\t}\n\n\t\tif (factory) {\n\t\t\t// Create and add custom footer, passing the data provider\n\t\t\tthis.customFooter = factory(this.ui, theme, this.footerDataProvider);\n\t\t\tthis.ui.addChild(this.customFooter);\n\t\t} else {\n\t\t\t// Restore built-in footer\n\t\t\tthis.customFooter = undefined;\n\t\t\tthis.ui.addChild(this.footer);\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom header component, or restore the built-in header.\n\t */\n\tprivate setExtensionHeader(factory: ((tui: TUI, thm: Theme) => Component & { dispose?(): void }) | undefined): void {\n\t\t// Header may not be initialized yet if called during early initialization\n\t\tif (!this.builtInHeader) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Dispose existing custom header\n\t\tif (this.customHeader?.dispose) {\n\t\t\tthis.customHeader.dispose();\n\t\t}\n\n\t\t// Find the index of the current header in the header container\n\t\tconst currentHeader = this.customHeader || this.builtInHeader;\n\t\tconst index = this.headerContainer.children.indexOf(currentHeader);\n\n\t\tif (factory) {\n\t\t\t// Create and add custom header\n\t\t\tthis.customHeader = factory(this.ui, theme);\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.customHeader;\n\t\t\t} else {\n\t\t\t\t// If not found (e.g. builtInHeader was never added), add at the top\n\t\t\t\tthis.headerContainer.children.unshift(this.customHeader);\n\t\t\t}\n\t\t} else {\n\t\t\t// Restore built-in header\n\t\t\tthis.customHeader = undefined;\n\t\t\tif (index !== -1) {\n\t\t\t\tthis.headerContainer.children[index] = this.builtInHeader;\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addExtensionTerminalInputListener(\n\t\thandler: (data: string) => { consume?: boolean; data?: string } | undefined,\n\t): () => void {\n\t\tconst unsubscribe = this.ui.addInputListener(handler);\n\t\tthis.extensionTerminalInputUnsubscribers.add(unsubscribe);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tthis.extensionTerminalInputUnsubscribers.delete(unsubscribe);\n\t\t};\n\t}\n\n\tprivate clearExtensionTerminalInputListeners(): void {\n\t\tfor (const unsubscribe of this.extensionTerminalInputUnsubscribers) {\n\t\t\tunsubscribe();\n\t\t}\n\t\tthis.extensionTerminalInputUnsubscribers.clear();\n\t}\n\n\t/**\n\t * Create the ExtensionUIContext for extensions.\n\t */\n\tprivate createExtensionUIContext(): ExtensionUIContext {\n\t\treturn {\n\t\t\tselect: (title, options, opts) => this.showExtensionSelector(title, options, opts),\n\t\t\tconfirm: (title, message, opts) => this.showExtensionConfirm(title, message, opts),\n\t\t\tinput: (title, placeholder, opts) => this.showExtensionInput(title, placeholder, opts),\n\t\t\tnotify: (message, type) => this.showExtensionNotify(message, type),\n\t\t\tonTerminalInput: (handler) => this.addExtensionTerminalInputListener(handler),\n\t\t\tsetStatus: (key, text) => this.setExtensionStatus(key, text),\n\t\t\tsetWorkingMessage: (message) => this.setWorkingMessage(message),\n\t\t\tsetWidget: (key, content, options) => this.setExtensionWidget(key, content, options),\n\t\t\tsetFooter: (factory) => this.setExtensionFooter(factory),\n\t\t\tsetHeader: (factory) => this.setExtensionHeader(factory),\n\t\t\tsetTitle: (title) => this.ui.terminal.setTitle(title),\n\t\t\tcustom: (factory, options) => this.showExtensionCustom(factory, options),\n\t\t\tpasteToEditor: (text) => this.editor.handleInput(`\\x1b[200~${text}\\x1b[201~`),\n\t\t\tsetEditorText: (text) => this.editor.setText(text),\n\t\t\tgetEditorText: () => this.editor.getText(),\n\t\t\teditor: (title, prefill) => this.showExtensionEditor(title, prefill),\n\t\t\tsetEditorComponent: (factory) => this.setCustomEditorComponent(factory),\n\t\t\tget theme() {\n\t\t\t\treturn theme;\n\t\t\t},\n\t\t\tgetAllThemes: () => getAvailableThemesWithPaths(),\n\t\t\tgetTheme: (name) => getThemeByName(name),\n\t\t\tsetTheme: (themeOrName) => {\n\t\t\t\tif (themeOrName instanceof Theme) {\n\t\t\t\t\tsetThemeInstance(themeOrName);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\treturn { success: true };\n\t\t\t\t}\n\t\t\t\tconst result = setTheme(themeOrName, true);\n\t\t\t\tif (result.success) {\n\t\t\t\t\tif (this.settingsManager.getTheme() !== themeOrName) {\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeOrName);\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tgetToolsExpanded: () => this.toolOutputExpanded,\n\t\t\tsetToolsExpanded: (expanded) => this.setToolsExpanded(expanded),\n\t\t};\n\t}\n\n\t/**\n\t * Show a selector for extensions.\n\t */\n\tprivate showExtensionSelector(\n\t\ttitle: string,\n\t\toptions: string[],\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionSelector = new ExtensionSelectorComponent(\n\t\t\t\ttitle,\n\t\t\t\toptions,\n\t\t\t\t(option) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(option);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionSelector();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionSelector);\n\t\t\tthis.ui.setFocus(this.extensionSelector);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension selector.\n\t */\n\tprivate hideExtensionSelector(): void {\n\t\tthis.extensionSelector?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionSelector = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a confirmation dialog for extensions.\n\t */\n\tprivate async showExtensionConfirm(\n\t\ttitle: string,\n\t\tmessage: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<boolean> {\n\t\tconst result = await this.showExtensionSelector(`${title}\\n${message}`, [\"Yes\", \"No\"], opts);\n\t\treturn result === \"Yes\";\n\t}\n\n\tprivate async runWithExtensionLoader<T>(message: string, task: () => Promise<T>): Promise<T> {\n\t\tconst loader = new BorderedLoader(this.ui, theme, message, {\n\t\t\tcancellable: false,\n\t\t});\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst restoreEditor = () => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\treturn await task();\n\t\t} finally {\n\t\t\trestoreEditor();\n\t\t}\n\t}\n\n\t/**\n\t * Show a text input for extensions.\n\t */\n\tprivate showExtensionInput(\n\t\ttitle: string,\n\t\tplaceholder?: string,\n\t\topts?: ExtensionUIDialogOptions,\n\t): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tif (opts?.signal?.aborted) {\n\t\t\t\tresolve(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tthis.hideExtensionInput();\n\t\t\t\tresolve(undefined);\n\t\t\t};\n\t\t\topts?.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n\t\t\tthis.extensionInput = new ExtensionInputComponent(\n\t\t\t\ttitle,\n\t\t\t\tplaceholder,\n\t\t\t\t(value) => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\topts?.signal?.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\tthis.hideExtensionInput();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t\t{ tui: this.ui, timeout: opts?.timeout },\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionInput);\n\t\t\tthis.ui.setFocus(this.extensionInput);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension input.\n\t */\n\tprivate hideExtensionInput(): void {\n\t\tthis.extensionInput?.dispose();\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionInput = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a multi-line editor for extensions (with Ctrl+G support).\n\t */\n\tprivate showExtensionEditor(title: string, prefill?: string): Promise<string | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.extensionEditor = new ExtensionEditorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.keybindings,\n\t\t\t\ttitle,\n\t\t\t\tprefill,\n\t\t\t\t(value) => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(value);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.hideExtensionEditor();\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.extensionEditor);\n\t\t\tthis.ui.setFocus(this.extensionEditor);\n\t\t\tthis.ui.requestRender();\n\t\t});\n\t}\n\n\t/**\n\t * Hide the extension editor.\n\t */\n\tprivate hideExtensionEditor(): void {\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.extensionEditor = undefined;\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Set a custom editor component from an extension.\n\t * Pass undefined to restore the default editor.\n\t */\n\tprivate setCustomEditorComponent(\n\t\tfactory: ((tui: TUI, theme: EditorTheme, keybindings: KeybindingsManager) => EditorComponent) | undefined,\n\t): void {\n\t\t// Save text from current editor before switching\n\t\tconst currentText = this.editor.getText();\n\n\t\tthis.editorContainer.clear();\n\n\t\tif (factory) {\n\t\t\t// Create the custom editor with tui, theme, and keybindings\n\t\t\tconst newEditor = factory(this.ui, getEditorTheme(), this.keybindings);\n\n\t\t\t// Wire up callbacks from the default editor\n\t\t\tnewEditor.onSubmit = this.defaultEditor.onSubmit;\n\t\t\tnewEditor.onChange = this.defaultEditor.onChange;\n\n\t\t\t// Copy text from previous editor\n\t\t\tnewEditor.setText(currentText);\n\n\t\t\t// Copy appearance settings if supported\n\t\t\tif (newEditor.borderColor !== undefined) {\n\t\t\t\tnewEditor.borderColor = this.defaultEditor.borderColor;\n\t\t\t}\n\t\t\tif (newEditor.setPaddingX !== undefined) {\n\t\t\t\tnewEditor.setPaddingX(this.defaultEditor.getPaddingX());\n\t\t\t}\n\n\t\t\t// Set autocomplete if supported\n\t\t\tif (newEditor.setAutocompleteProvider && this.autocompleteProvider) {\n\t\t\t\tnewEditor.setAutocompleteProvider(this.autocompleteProvider);\n\t\t\t}\n\n\t\t\t// If extending CustomEditor, copy app-level handlers\n\t\t\t// Use duck typing since instanceof fails across jiti module boundaries\n\t\t\tconst customEditor = newEditor as unknown as Record<string, unknown>;\n\t\t\tif (\"actionHandlers\" in customEditor && customEditor.actionHandlers instanceof Map) {\n\t\t\t\tcustomEditor.onEscape = () => this.defaultEditor.onEscape?.();\n\t\t\t\tcustomEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();\n\t\t\t\tcustomEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();\n\t\t\t\tcustomEditor.onExtensionShortcut = (data: string) => this.defaultEditor.onExtensionShortcut?.(data);\n\t\t\t\t// Copy action handlers (clear, suspend, model switching, etc.)\n\t\t\t\tfor (const [action, handler] of this.defaultEditor.actionHandlers) {\n\t\t\t\t\t(customEditor.actionHandlers as Map<string, () => void>).set(action, handler);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.editor = newEditor;\n\t\t} else {\n\t\t\t// Restore default editor with text from custom editor\n\t\t\tthis.defaultEditor.setText(currentText);\n\t\t\tthis.editor = this.defaultEditor;\n\t\t}\n\n\t\tthis.editorContainer.addChild(this.editor as Component);\n\t\tthis.ui.setFocus(this.editor as Component);\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Show a notification for extensions.\n\t */\n\tprivate showExtensionNotify(message: string, type?: \"info\" | \"warning\" | \"error\"): void {\n\t\tif (type === \"error\") {\n\t\t\tthis.showError(message);\n\t\t} else if (type === \"warning\") {\n\t\t\tthis.showWarning(message);\n\t\t} else {\n\t\t\tthis.showStatus(message);\n\t\t}\n\t}\n\n\t/** Show a custom component with keyboard focus. Overlay mode renders on top of existing content. */\n\tprivate async showExtensionCustom<T>(\n\t\tfactory: (\n\t\t\ttui: TUI,\n\t\t\ttheme: Theme,\n\t\t\tkeybindings: KeybindingsManager,\n\t\t\tdone: (result: T) => void,\n\t\t) => (Component & { dispose?(): void }) | Promise<Component & { dispose?(): void }>,\n\t\toptions?: {\n\t\t\toverlay?: boolean;\n\t\t\toverlayOptions?: OverlayOptions | (() => OverlayOptions);\n\t\t\tonHandle?: (handle: OverlayHandle) => void;\n\t\t},\n\t): Promise<T> {\n\t\tconst savedText = this.editor.getText();\n\t\tconst isOverlay = options?.overlay ?? false;\n\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.editor.setText(savedText);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet component: Component & { dispose?(): void };\n\t\t\tlet closed = false;\n\n\t\t\tconst close = (result: T) => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tif (isOverlay) this.ui.hideOverlay();\n\t\t\t\telse restoreEditor();\n\t\t\t\t// Note: both branches above already call requestRender\n\t\t\t\tresolve(result);\n\t\t\t\ttry {\n\t\t\t\t\tcomponent?.dispose?.();\n\t\t\t\t} catch {\n\t\t\t\t\t/* ignore dispose errors */\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tPromise.resolve(factory(this.ui, theme, this.keybindings, close))\n\t\t\t\t.then((c) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tcomponent = c;\n\t\t\t\t\tif (isOverlay) {\n\t\t\t\t\t\t// Resolve overlay options - can be static or dynamic function\n\t\t\t\t\t\tconst resolveOptions = (): OverlayOptions | undefined => {\n\t\t\t\t\t\t\tif (options?.overlayOptions) {\n\t\t\t\t\t\t\t\tconst opts =\n\t\t\t\t\t\t\t\t\ttypeof options.overlayOptions === \"function\"\n\t\t\t\t\t\t\t\t\t\t? options.overlayOptions()\n\t\t\t\t\t\t\t\t\t\t: options.overlayOptions;\n\t\t\t\t\t\t\t\treturn opts;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Fallback: use component's width property if available\n\t\t\t\t\t\t\tconst w = (component as { width?: number }).width;\n\t\t\t\t\t\t\treturn w ? { width: w } : undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst handle = this.ui.showOverlay(component, resolveOptions());\n\t\t\t\t\t\t// Expose handle to caller for visibility control\n\t\t\t\t\t\toptions?.onHandle?.(handle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.editorContainer.clear();\n\t\t\t\t\t\tthis.editorContainer.addChild(component);\n\t\t\t\t\t\tthis.ui.setFocus(component);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tif (closed) return;\n\t\t\t\t\tif (!isOverlay) restoreEditor();\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Show an extension error in the UI.\n\t */\n\tprivate showExtensionError(extensionPath: string, error: string, stack?: string): void {\n\t\tconst errorMsg = `Extension \"${extensionPath}\" error: ${error}`;\n\t\tconst errorText = new Text(theme.fg(\"error\", errorMsg), 1, 0);\n\t\tthis.chatContainer.addChild(errorText);\n\t\tif (stack) {\n\t\t\t// Show stack trace in dim color, indented\n\t\t\tconst stackLines = stack\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.slice(1) // Skip first line (duplicates error message)\n\t\t\t\t.map((line) => theme.fg(\"dim\", ` ${line.trim()}`))\n\t\t\t\t.join(\"\\n\");\n\t\t\tif (stackLines) {\n\t\t\t\tthis.chatContainer.addChild(new Text(stackLines, 1, 0));\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\t// =========================================================================\n\t// Key Handlers\n\t// =========================================================================\n\n\tprivate setupKeyHandlers(): void {\n\t\t// Set up handlers on defaultEditor - they use this.editor for text access\n\t\t// so they work correctly regardless of which editor is active\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tconst queuedMessages = this.getAllQueuedMessages();\n\t\t\tconst queuedMeta = queuedMessages.meta ?? [];\n\t\t\tconst hasInterruptibleWork =\n\t\t\t\tthis.session.isStreaming ||\n\t\t\t\tthis.session.isBashRunning ||\n\t\t\t\tthis.session.isCompacting ||\n\t\t\t\tthis.session.isRetrying ||\n\t\t\t\tthis.iosmAutomationRun !== undefined ||\n\t\t\t\tthis.iosmVerificationSession !== undefined ||\n\t\t\t\tthis.singularAnalysisSession !== undefined ||\n\t\t\t\tqueuedMessages.steering.length > 0 ||\n\t\t\t\tqueuedMessages.followUp.length > 0 ||\n\t\t\t\tqueuedMeta.length > 0;\n\n\t\t\tif (hasInterruptibleWork) {\n\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t} else if (this.isBashMode) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.isBashMode = false;\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t} else if (!this.editor.getText().trim()) {\n\t\t\t\t// Double-escape with empty editor triggers /tree, /fork, or nothing based on setting\n\t\t\t\tconst action = this.settingsManager.getDoubleEscapeAction();\n\t\t\t\tif (action !== \"none\") {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - this.lastEscapeTime < 500) {\n\t\t\t\t\t\tif (action === \"tree\") {\n\t\t\t\t\t\t\tthis.showTreeSelector();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.lastEscapeTime = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.lastEscapeTime = now;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Register app action handlers\n\t\tthis.defaultEditor.onAction(\"clear\", () => this.handleCtrlC());\n\t\tthis.defaultEditor.onCtrlD = () => this.handleCtrlD();\n\t\tthis.defaultEditor.onAction(\"suspend\", () => this.handleCtrlZ());\n\t\tthis.defaultEditor.onAction(\"cycleProfile\", () => this.cycleProfile(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"cycleThinkingLevel\", () => this.cycleThinkingLevel());\n\t\tthis.defaultEditor.onAction(\"cycleModelForward\", () => this.cycleModel(\"forward\"));\n\t\tthis.defaultEditor.onAction(\"cycleModelBackward\", () => this.cycleModel(\"backward\"));\n\n\t\t// Global debug handler on TUI (works regardless of focus)\n\t\tthis.ui.onDebug = () => this.handleDebugCommand();\n\t\tthis.defaultEditor.onAction(\"selectModel\", () => {\n\t\t\tvoid this.showModelProviderSelector();\n\t\t});\n\t\tthis.defaultEditor.onAction(\"expandTools\", () => this.toggleToolOutputExpansion());\n\t\tthis.defaultEditor.onAction(\"toggleThinking\", () => this.toggleThinkingBlockVisibility());\n\t\tthis.defaultEditor.onAction(\"externalEditor\", () => this.openExternalEditor());\n\t\tthis.defaultEditor.onAction(\"steer\", () => this.handleSteer());\n\t\tthis.defaultEditor.onAction(\"followUp\", () => this.handleFollowUp());\n\t\tthis.defaultEditor.onAction(\"dequeue\", () => this.handleDequeue());\n\t\tthis.defaultEditor.onAction(\"newSession\", () => this.handleClearCommand());\n\t\tthis.defaultEditor.onAction(\"tree\", () => this.showTreeSelector());\n\t\tthis.defaultEditor.onAction(\"fork\", () => this.showUserMessageSelector());\n\t\tthis.defaultEditor.onAction(\"resume\", () => this.showSessionSelector());\n\n\t\tthis.defaultEditor.onChange = (text: string) => {\n\t\t\tconst wasBashMode = this.isBashMode;\n\t\t\tthis.isBashMode = text.trimStart().startsWith(\"!\");\n\t\t\tif (wasBashMode !== this.isBashMode) {\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t}\n\t\t};\n\n\t\t// Handle clipboard image paste (triggered on Ctrl+V)\n\t\tthis.defaultEditor.onPasteImage = () => {\n\t\t\tthis.handleClipboardImagePaste();\n\t\t};\n\t}\n\n\tprivate async handleClipboardImagePaste(): Promise<void> {\n\t\ttry {\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (!image) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write to temp file\n\t\t\tconst tmpDir = os.tmpdir();\n\t\t\tconst ext = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\tconst fileName = `iosm-clipboard-${crypto.randomUUID()}.${ext}`;\n\t\t\tconst filePath = path.join(tmpDir, fileName);\n\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\n\t\t\t// Insert file path directly\n\t\t\tthis.editor.insertTextAtCursor?.(filePath);\n\t\t\tthis.ui.requestRender();\n\t\t} catch {\n\t\t\t// Silently ignore clipboard errors (may not have permission, etc.)\n\t\t}\n\t}\n\n\tprivate setupEditorSubmitHandler(): void {\n\t\tthis.defaultEditor.onSubmit = async (text: string) => {\n\t\t\ttext = text.trim();\n\t\t\tif (!text) return;\n\n\t\t\t// Handle commands\n\t\t\tif (text === \"/init\" || text.startsWith(\"/init \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmInitSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/iosm\" || text.startsWith(\"/iosm \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmAutomationSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/orchestrate\" || text.startsWith(\"/orchestrate \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleOrchestrateSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/agents\" || text.startsWith(\"/agents \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleAgentsSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/subagent-runs\" || text.startsWith(\"/subagent-runs \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleSubagentRunsSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/subagent-resume\" || text.startsWith(\"/subagent-resume \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleSubagentResumeSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/team-runs\" || text.startsWith(\"/team-runs \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleTeamRunsSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/team-status\" || text.startsWith(\"/team-status \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleTeamStatusSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-list\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleIosmCycleListSlashCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-plan\" || text.startsWith(\"/cycle-plan \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmCyclePlanSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-report\" || text.startsWith(\"/cycle-report \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmCycleReportSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/cycle-status\" || text.startsWith(\"/cycle-status \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleIosmCycleStatusSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/mcp\" || text.startsWith(\"/mcp \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleMcpSlashCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/memory\" || text.startsWith(\"/memory \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleMemoryCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/semantic\" || text.startsWith(\"/semantic \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleSemanticCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/contract\" || text.startsWith(\"/contract \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleContractCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/singular\" || text.startsWith(\"/singular \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleSingularCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/settings\") {\n\t\t\t\tthis.showSettingsSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/permissions\" || text.startsWith(\"/permissions \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handlePermissionsCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/yolo\" || text.startsWith(\"/yolo \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleYoloCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/scoped-models\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.showModelsSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/model\" || text.startsWith(\"/model \")) {\n\t\t\t\tconst searchTerm = text.startsWith(\"/model \") ? text.slice(7).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleModelCommand(searchTerm);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text.startsWith(\"/export\")) {\n\t\t\t\tawait this.handleExportCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/share\") {\n\t\t\t\tawait this.handleShareCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/copy\") {\n\t\t\t\tthis.handleCopyCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/name\" || text.startsWith(\"/name \")) {\n\t\t\t\tthis.handleNameCommand(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/session\") {\n\t\t\t\tthis.handleSessionCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/doctor\" || text.startsWith(\"/doctor \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleDoctorCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/checkpoint\" || text.startsWith(\"/checkpoint \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tthis.handleCheckpointCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/rollback\" || text.startsWith(\"/rollback \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleRollbackCommand(text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/changelog\") {\n\t\t\t\tthis.handleChangelogCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/hotkeys\") {\n\t\t\t\tthis.handleHotkeysCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/fork\") {\n\t\t\t\tthis.showUserMessageSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/tree\") {\n\t\t\t\tthis.showTreeSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/login\" || text === \"/auth\" || text.startsWith(\"/auth \")) {\n\t\t\t\tthis.showOAuthSelector(\"login\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/logout\") {\n\t\t\t\tthis.showOAuthSelector(\"logout\");\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/new\" || text === \"/clear\" || text.startsWith(\"/clear \")) {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleClearCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/compact\" || text.startsWith(\"/compact \")) {\n\t\t\t\tconst customInstructions = text.startsWith(\"/compact \") ? text.slice(9).trim() : undefined;\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleCompactCommand(customInstructions);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/reload\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/debug\") {\n\t\t\t\tthis.handleDebugCommand();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/arminsayshi\") {\n\t\t\t\tthis.handleArminSaysHi();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/resume\") {\n\t\t\t\tthis.showSessionSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (text === \"/quit\") {\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.shutdown();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Soft first-run gate: require model selection before normal chat/bash input.\n\t\t\t// Slash commands remain available so the user can run /model, /login, /init, etc.\n\t\t\tif (!this.session.model && !text.startsWith(\"/\")) {\n\t\t\t\tthis.showWarning(\"Select a model first with /model (or configure auth with /login).\");\n\t\t\t\tawait this.showModelProviderSelector();\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Handle bash command (! for normal, !! for excluded from context)\n\t\t\tif (text.startsWith(\"!\")) {\n\t\t\t\tconst isExcluded = text.startsWith(\"!!\");\n\t\t\t\tconst command = isExcluded ? text.slice(2).trim() : text.slice(1).trim();\n\t\t\t\tif (command) {\n\t\t\t\t\tif (this.session.isBashRunning) {\n\t\t\t\t\t\tthis.showWarning(\"A bash command is already running. Press Esc to cancel it first.\");\n\t\t\t\t\t\tthis.editor.setText(text);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tawait this.handleBashCommand(command, isExcluded);\n\t\t\t\t\tthis.isBashMode = false;\n\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Queue input during compaction (extension commands execute immediately)\n\t\t\tif (this.session.isCompacting) {\n\t\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\t\tawait this.session.prompt(text);\n\t\t\t\t} else {\n\t\t\t\t\tthis.queueCompactionMessage(text, this.session.streamInputMode);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If streaming, use configured stream input mode (meta/followUp/steer)\n\t\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text, { streamingBehavior: this.session.streamInputMode });\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normal message submission\n\t\t\t// First, move any pending bash components to chat\n\t\t\tthis.flushPendingBashComponents();\n\n\t\t\tif (this.onInputCallback) {\n\t\t\t\tthis.onInputCallback(text);\n\t\t\t}\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t};\n\t}\n\n\tprivate subscribeToAgent(): void {\n\t\tthis.unsubscribe = this.session.subscribe(async (event) => {\n\t\t\tawait this.handleEvent(event);\n\t\t});\n\t}\n\n\tprivate async handleEvent(event: AgentSessionEvent): Promise<void> {\n\t\tif (!this.isInitialized) {\n\t\t\tawait this.init();\n\t\t}\n\n\t\tthis.footer.invalidate();\n\n\t\tswitch (event.type) {\n\t\t\tcase \"agent_start\":\n\t\t\t\t// Restore main escape handler if retry handler is still active\n\t\t\t\t// (retry success event fires later, but we need main handler now)\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t}\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t}\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tthis.loadingAnimation = new DecryptLoader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\tthis.defaultWorkingMessage,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t// Apply any pending working message queued before loader existed\n\t\t\t\tif (this.pendingWorkingMessage !== undefined) {\n\t\t\t\t\tif (this.pendingWorkingMessage) {\n\t\t\t\t\t\tthis.loadingAnimation.setMessage(this.pendingWorkingMessage);\n\t\t\t\t\t}\n\t\t\t\t\tthis.pendingWorkingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_start\":\n\t\t\t\tif (event.message.role === \"custom\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"user\") {\n\t\t\t\t\tthis.addMessageToChat(event.message);\n\t\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.message.role === \"assistant\") {\n\t\t\t\t\tthis.activeAssistantOrchestrationContext = this.pendingAssistantOrchestrationContexts > 0;\n\t\t\t\t\tif (this.activeAssistantOrchestrationContext) {\n\t\t\t\t\t\tthis.pendingAssistantOrchestrationContexts -= 1;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_update\":\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\n\t\t\t\t\tfor (const content of this.streamingMessage.content) {\n\t\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\t\tif (content.name === \"task\") {\n\t\t\t\t\t\t\t\tconst staleTaskComponent = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (staleTaskComponent) {\n\t\t\t\t\t\t\t\t\tthis.chatContainer.removeChild(staleTaskComponent);\n\t\t\t\t\t\t\t\t\tthis.pendingTools.delete(content.id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!this.pendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tconst component = this.pendingTools.get(content.id);\n\t\t\t\t\t\t\t\tif (component) {\n\t\t\t\t\t\t\t\t\tcomponent.updateArgs(content.arguments);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"message_end\":\n\t\t\t\tif (event.message.role === \"user\") break;\n\t\t\t\tif (this.streamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\tthis.streamingMessage = event.message;\n\t\t\t\t\tlet errorMessage: string | undefined;\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\") {\n\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\tthis.streamingMessage.errorMessage = errorMessage;\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\n\t\t\t\t\tif (this.streamingMessage.stopReason === \"aborted\" || this.streamingMessage.stopReason === \"error\") {\n\t\t\t\t\t\tif (!errorMessage) {\n\t\t\t\t\t\t\terrorMessage = this.streamingMessage.errorMessage || \"Error\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.updateResult({\n\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: errorMessage }],\n\t\t\t\t\t\t\t\tisError: true,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.pendingTools.clear();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Args are now complete - trigger diff computation for edit tools\n\t\t\t\t\t\tfor (const [, component] of this.pendingTools.entries()) {\n\t\t\t\t\t\t\tcomponent.setArgsComplete();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t\tthis.activeAssistantOrchestrationContext = false;\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"tool_execution_start\": {\n\t\t\t\tif (event.toolName === \"task\" && !this.subagentComponents.has(event.toolCallId)) {\n\t\t\t\t\tconst staleTaskComponent = this.pendingTools.get(event.toolCallId);\n\t\t\t\t\tif (staleTaskComponent) {\n\t\t\t\t\t\tthis.chatContainer.removeChild(staleTaskComponent);\n\t\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\t}\n\t\t\t\t\tconst args = event.args as {\n\t\t\t\t\t\tdescription?: string;\n\t\t\t\t\t\tprofile?: string;\n\t\t\t\t\t\tprompt?: string;\n\t\t\t\t\t\tcwd?: string;\n\t\t\t\t\t\tlock_key?: string;\n\t\t\t\t\t\tagent?: string;\n\t\t\t\t\t\tisolation?: \"none\" | \"worktree\";\n\t\t\t\t\t};\n\t\t\t\t\tconst description = args.description ?? \"Running subtask\";\n\t\t\t\t\tconst info: SubagentInfo = {\n\t\t\t\t\t\tdescription,\n\t\t\t\t\t\tprofile: args.profile ?? \"explore\",\n\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\tphase: \"starting subagent\",\n\t\t\t\t\t\tphaseState: \"starting\",\n\t\t\t\t\t\tcwd: args.cwd,\n\t\t\t\t\t\tagent: args.agent,\n\t\t\t\t\t\tlockKey: args.lock_key,\n\t\t\t\t\t\tisolation: args.isolation,\n\t\t\t\t\t\ttoolCallsStarted: 0,\n\t\t\t\t\t\ttoolCallsCompleted: 0,\n\t\t\t\t\t\tassistantMessages: 0,\n\t\t\t\t\t};\n\t\t\t\t\tconst component = new SubagentMessageComponent(info);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\tthis.subagentComponents.set(event.toolCallId, {\n\t\t\t\t\t\tcomponent,\n\t\t\t\t\t\tstartTime: Date.now(),\n\t\t\t\t\t\tprofile: info.profile,\n\t\t\t\t\t\tdescription: info.description,\n\t\t\t\t\t\tcwd: info.cwd,\n\t\t\t\t\t\tagent: info.agent,\n\t\t\t\t\t\tlockKey: info.lockKey,\n\t\t\t\t\t\tisolation: info.isolation,\n\t\t\t\t\t\tphase: info.phase,\n\t\t\t\t\t\tphaseState: info.phaseState,\n\t\t\t\t\t\tactiveTool: info.activeTool,\n\t\t\t\t\t\ttoolCallsStarted: info.toolCallsStarted ?? 0,\n\t\t\t\t\t\ttoolCallsCompleted: info.toolCallsCompleted ?? 0,\n\t\t\t\t\t\tassistantMessages: info.assistantMessages ?? 0,\n\t\t\t\t\t\tdelegatedTasks: info.delegatedTasks,\n\t\t\t\t\t\tdelegatedSucceeded: info.delegatedSucceeded,\n\t\t\t\t\t\tdelegatedFailed: info.delegatedFailed,\n\t\t\t\t\t\tdelegateIndex: info.delegateIndex,\n\t\t\t\t\t\tdelegateTotal: info.delegateTotal,\n\t\t\t\t\t\tdelegateDescription: info.delegateDescription,\n\t\t\t\t\t\tdelegateProfile: info.delegateProfile,\n\t\t\t\t\t\tdelegateItems: info.delegateItems,\n\t\t\t\t\t});\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t} else if (event.toolName !== \"task\" && !this.pendingTools.has(event.toolCallId)) {\n\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t);\n\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\tthis.pendingTools.set(event.toolCallId, component);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_update\": {\n\t\t\t\tconst subagent = this.subagentComponents.get(event.toolCallId);\n\t\t\t\tif (subagent) {\n\t\t\t\t\tconst partialResult = event.partialResult as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\tdetails?: Record<string, unknown>;\n\t\t\t\t\t\t\tcontent?: Array<{ type?: string; text?: string }>;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst progressCandidate = partialResult?.details?.progress;\n\t\t\t\t\tconst progress =\n\t\t\t\t\t\tprogressCandidate && typeof progressCandidate === \"object\"\n\t\t\t\t\t\t\t? (progressCandidate as Record<string, unknown>)\n\t\t\t\t\t\t\t: undefined;\n\n\t\t\t\t\tif (progress) {\n\t\t\t\t\t\tconst phaseText = typeof progress.message === \"string\" ? progress.message.trim() : undefined;\n\t\t\t\t\t\tconst phaseState = isSubagentPhaseState(progress.phase) ? progress.phase : undefined;\n\t\t\t\t\t\tif (phaseText && phaseText.length > 0) {\n\t\t\t\t\t\t\tsubagent.phase = phaseText;\n\t\t\t\t\t\t} else if (phaseState) {\n\t\t\t\t\t\t\tsubagent.phase = phaseState;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (phaseState) {\n\t\t\t\t\t\t\tsubagent.phaseState = phaseState;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.cwd === \"string\") {\n\t\t\t\t\t\t\tsubagent.cwd = progress.cwd;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"activeTool\" in progress) {\n\t\t\t\t\t\t\tsubagent.activeTool =\n\t\t\t\t\t\t\t\ttypeof progress.activeTool === \"string\" && progress.activeTool.trim().length > 0\n\t\t\t\t\t\t\t\t\t? progress.activeTool\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.toolCallsStarted === \"number\") {\n\t\t\t\t\t\t\tsubagent.toolCallsStarted = progress.toolCallsStarted;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.toolCallsCompleted === \"number\") {\n\t\t\t\t\t\t\tsubagent.toolCallsCompleted = progress.toolCallsCompleted;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof progress.assistantMessages === \"number\") {\n\t\t\t\t\t\t\tsubagent.assistantMessages = progress.assistantMessages;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateIndex\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateIndex =\n\t\t\t\t\t\t\t\ttypeof progress.delegateIndex === \"number\" && progress.delegateIndex > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateIndex\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateTotal\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateTotal =\n\t\t\t\t\t\t\t\ttypeof progress.delegateTotal === \"number\" && progress.delegateTotal > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateTotal\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateDescription\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateDescription =\n\t\t\t\t\t\t\t\ttypeof progress.delegateDescription === \"string\" && progress.delegateDescription.trim().length > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateDescription.trim()\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateProfile\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateProfile =\n\t\t\t\t\t\t\t\ttypeof progress.delegateProfile === \"string\" && progress.delegateProfile.trim().length > 0\n\t\t\t\t\t\t\t\t\t? progress.delegateProfile.trim()\n\t\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\"delegateItems\" in progress) {\n\t\t\t\t\t\t\tsubagent.delegateItems = parseSubagentDelegateItems(progress.delegateItems);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst text = partialResult?.content?.find((item) => item.type === \"text\")?.text;\n\t\t\t\t\t\tif (typeof text === \"string\" && text.trim().length > 0) {\n\t\t\t\t\t\t\tsubagent.phase = text.trim();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tsubagent.component.update({\n\t\t\t\t\t\tdescription: subagent.description,\n\t\t\t\t\t\tprofile: subagent.profile,\n\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\tphase: subagent.phase ?? \"running\",\n\t\t\t\t\t\tphaseState: subagent.phaseState,\n\t\t\t\t\t\tcwd: subagent.cwd,\n\t\t\t\t\t\tagent: subagent.agent,\n\t\t\t\t\t\tlockKey: subagent.lockKey,\n\t\t\t\t\t\tisolation: subagent.isolation,\n\t\t\t\t\t\tactiveTool: subagent.activeTool,\n\t\t\t\t\t\ttoolCallsStarted: subagent.toolCallsStarted,\n\t\t\t\t\t\ttoolCallsCompleted: subagent.toolCallsCompleted,\n\t\t\t\t\t\tassistantMessages: subagent.assistantMessages,\n\t\t\t\t\t\tdelegatedTasks: subagent.delegatedTasks,\n\t\t\t\t\t\tdelegatedSucceeded: subagent.delegatedSucceeded,\n\t\t\t\t\t\tdelegatedFailed: subagent.delegatedFailed,\n\t\t\t\t\t\tdelegateIndex: subagent.delegateIndex,\n\t\t\t\t\t\tdelegateTotal: subagent.delegateTotal,\n\t\t\t\t\t\tdelegateDescription: subagent.delegateDescription,\n\t\t\t\t\t\tdelegateProfile: subagent.delegateProfile,\n\t\t\t\t\t\tdelegateItems: subagent.delegateItems,\n\t\t\t\t\t});\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool_execution_end\": {\n\t\t\t\t// Handle subagent (task tool) completion\n\t\t\t\tconst subagent = this.subagentComponents.get(event.toolCallId);\n\t\t\t\tif (subagent) {\n\t\t\t\t\tconst durationMs = Date.now() - subagent.startTime;\n\t\t\t\t\tconst details = event.result?.details as Record<string, unknown> | undefined;\n\t\t\t\t\tconst outputLength = typeof details?.outputLength === \"number\" ? details.outputLength : undefined;\n\t\t\t\t\tconst waitMs = typeof details?.waitMs === \"number\" ? details.waitMs : undefined;\n\t\t\t\t\tconst toolCallsStarted =\n\t\t\t\t\t\ttypeof details?.toolCallsStarted === \"number\"\n\t\t\t\t\t\t\t? details.toolCallsStarted\n\t\t\t\t\t\t\t: subagent.toolCallsStarted;\n\t\t\t\t\tconst toolCallsCompleted =\n\t\t\t\t\t\ttypeof details?.toolCallsCompleted === \"number\"\n\t\t\t\t\t\t\t? details.toolCallsCompleted\n\t\t\t\t\t\t\t: subagent.toolCallsCompleted;\n\t\t\t\t\tconst assistantMessages =\n\t\t\t\t\t\ttypeof details?.assistantMessages === \"number\"\n\t\t\t\t\t\t\t? details.assistantMessages\n\t\t\t\t\t\t\t: subagent.assistantMessages;\n\t\t\t\t\tconst delegatedTasks =\n\t\t\t\t\t\ttypeof details?.delegatedTasks === \"number\" ? details.delegatedTasks : subagent.delegatedTasks;\n\t\t\t\t\tconst delegatedSucceeded =\n\t\t\t\t\t\ttypeof details?.delegatedSucceeded === \"number\"\n\t\t\t\t\t\t\t? details.delegatedSucceeded\n\t\t\t\t\t\t\t: subagent.delegatedSucceeded;\n\t\t\t\t\tconst delegatedFailed =\n\t\t\t\t\t\ttypeof details?.delegatedFailed === \"number\" ? details.delegatedFailed : subagent.delegatedFailed;\n\t\t\t\t\tsubagent.delegatedTasks = delegatedTasks;\n\t\t\t\t\tsubagent.delegatedSucceeded = delegatedSucceeded;\n\t\t\t\t\tsubagent.delegatedFailed = delegatedFailed;\n\t\t\t\t\tsubagent.component.update({\n\t\t\t\t\t\tdescription: subagent.description,\n\t\t\t\t\t\tprofile: subagent.profile,\n\t\t\t\t\t\tstatus: event.isError ? \"error\" : \"done\",\n\t\t\t\t\t\toutputLength,\n\t\t\t\t\t\tdurationMs,\n\t\t\t\t\t\twaitMs,\n\t\t\t\t\t\tphaseState: subagent.phaseState,\n\t\t\t\t\t\tcwd: subagent.cwd,\n\t\t\t\t\t\tagent: subagent.agent,\n\t\t\t\t\t\tlockKey: subagent.lockKey,\n\t\t\t\t\t\tisolation: subagent.isolation,\n\t\t\t\t\t\ttoolCallsStarted,\n\t\t\t\t\t\ttoolCallsCompleted,\n\t\t\t\t\t\tassistantMessages,\n\t\t\t\t\t\tdelegatedTasks,\n\t\t\t\t\t\tdelegatedSucceeded,\n\t\t\t\t\t\tdelegatedFailed,\n\t\t\t\t\t\terrorMessage: event.isError\n\t\t\t\t\t\t\t? (event.result?.content?.[0] as { text?: string } | undefined)?.text ?? \"error\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tconst staleTaskComponent = this.pendingTools.get(event.toolCallId);\n\t\t\t\t\tif (staleTaskComponent) {\n\t\t\t\t\t\tthis.chatContainer.removeChild(staleTaskComponent);\n\t\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\t}\n\t\t\t\t\tthis.subagentComponents.delete(event.toolCallId);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst component = this.pendingTools.get(event.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\tthis.pendingTools.delete(event.toolCallId);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"agent_end\":\n\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\tif (this.streamingComponent) {\n\t\t\t\t\tthis.chatContainer.removeChild(this.streamingComponent);\n\t\t\t\t\tthis.streamingComponent = undefined;\n\t\t\t\t\tthis.streamingMessage = undefined;\n\t\t\t\t}\n\t\t\t\tthis.pendingTools.clear();\n\t\t\t\tthis.subagentComponents.clear();\n\n\t\t\t\tawait this.checkShutdownRequested();\n\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\n\t\t\tcase \"auto_compaction_start\": {\n\t\t\t\t// Keep editor active; submissions are queued during compaction.\n\t\t\t\t// Set up escape to abort auto-compaction\n\t\t\t\tthis.autoCompactionEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t\t};\n\t\t\t\t// Show compacting indicator with reason\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst reasonText = event.reason === \"overflow\" ? \"Context overflow detected, \" : \"\";\n\t\t\t\tthis.autoCompactionLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t`${reasonText}Auto-compacting... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.autoCompactionLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_compaction_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.autoCompactionEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.autoCompactionEscapeHandler;\n\t\t\t\t\tthis.autoCompactionEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.autoCompactionLoader) {\n\t\t\t\t\tthis.autoCompactionLoader.stop();\n\t\t\t\t\tthis.autoCompactionLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Handle result\n\t\t\t\tif (event.aborted) {\n\t\t\t\t\tthis.showStatus(\"Auto-compaction cancelled\");\n\t\t\t\t} else if (event.result) {\n\t\t\t\t\t// Rebuild chat to show compacted state\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\t\t\tthis.addMessageToChat({\n\t\t\t\t\t\trole: \"compactionSummary\",\n\t\t\t\t\t\ttokensBefore: event.result.tokensBefore,\n\t\t\t\t\t\tsummary: event.result.summary,\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t});\n\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t} else if (event.errorMessage) {\n\t\t\t\t\t// Compaction failed (e.g., quota exceeded, API error)\n\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", event.errorMessage), 1, 0));\n\t\t\t\t}\n\t\t\t\tvoid this.flushCompactionQueue({ willRetry: event.willRetry });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_start\": {\n\t\t\t\t// Set up escape to abort retry\n\t\t\t\tthis.retryEscapeHandler = this.defaultEditor.onEscape;\n\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t\t};\n\t\t\t\t// Show retry indicator\n\t\t\t\tthis.statusContainer.clear();\n\t\t\t\tconst delaySeconds = Math.round(event.delayMs / 1000);\n\t\t\t\tthis.retryLoader = new Loader(\n\t\t\t\t\tthis.ui,\n\t\t\t\t\t(spinner) => theme.fg(\"warning\", spinner),\n\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t`Retrying (${event.attempt}/${event.maxAttempts}) in ${delaySeconds}s... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t);\n\t\t\t\tthis.statusContainer.addChild(this.retryLoader);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"auto_retry_end\": {\n\t\t\t\t// Restore escape handler\n\t\t\t\tif (this.retryEscapeHandler) {\n\t\t\t\t\tthis.defaultEditor.onEscape = this.retryEscapeHandler;\n\t\t\t\t\tthis.retryEscapeHandler = undefined;\n\t\t\t\t}\n\t\t\t\t// Stop loader\n\t\t\t\tif (this.retryLoader) {\n\t\t\t\t\tthis.retryLoader.stop();\n\t\t\t\t\tthis.retryLoader = undefined;\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t}\n\t\t\t\t// Show error only on final failure (success shows normal response)\n\t\t\t\tif (!event.success) {\n\t\t\t\t\tthis.showError(`Retry failed after ${event.attempt} attempts: ${event.finalError || \"Unknown error\"}`);\n\t\t\t\t}\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Extract text content from a user message */\n\tprivate getUserMessageText(message: Message): string {\n\t\tif (message.role !== \"user\") return \"\";\n\t\tconst textBlocks =\n\t\t\ttypeof message.content === \"string\"\n\t\t\t\t? [{ type: \"text\", text: message.content }]\n\t\t\t\t: message.content.filter((c: { type: string }) => c.type === \"text\");\n\t\tconst joined = textBlocks.map((c) => (c as { text: string }).text).join(\"\");\n\t\tconst aliases = Array.isArray(this.pendingInternalUserDisplayAliases) ? this.pendingInternalUserDisplayAliases : [];\n\t\tconst aliasIndex = aliases.findIndex((item) => item.rawPrompt === joined);\n\t\tif (aliasIndex !== -1) {\n\t\t\tconst [alias] = aliases.splice(aliasIndex, 1);\n\t\t\treturn alias?.displayText ?? joined;\n\t\t}\n\t\treturn joined;\n\t}\n\n\tprivate handleInternalUiMetaMessage(message: AgentMessage): void {\n\t\tif (message.role !== \"custom\") return;\n\t\tif (message.customType !== INTERNAL_UI_META_CUSTOM_TYPE) return;\n\t\tif (!isInternalUiMetaDetails(message.details)) return;\n\t\tif (message.details.kind !== \"orchestration_context\") return;\n\n\t\tthis.pendingAssistantOrchestrationContexts += 1;\n\t\tif (message.details.rawPrompt && message.details.displayText) {\n\t\t\tthis.pendingInternalUserDisplayAliases.push({\n\t\t\t\trawPrompt: message.details.rawPrompt,\n\t\t\t\tdisplayText: message.details.displayText,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Show a status message in the chat.\n\t *\n\t * If multiple status messages are emitted back-to-back (without anything else being added to the chat),\n\t * we update the previous status line instead of appending new ones to avoid log spam.\n\t */\n\tprivate showStatus(message: string): void {\n\t\tconst children = this.chatContainer.children;\n\t\tconst last = children.length > 0 ? children[children.length - 1] : undefined;\n\t\tconst secondLast = children.length > 1 ? children[children.length - 2] : undefined;\n\n\t\tif (last && secondLast && last === this.lastStatusText && secondLast === this.lastStatusSpacer) {\n\t\t\tthis.lastStatusText.setText(theme.fg(\"dim\", message));\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tconst spacer = new Spacer(1);\n\t\tconst text = new Text(theme.fg(\"dim\", message), 1, 0);\n\t\tthis.chatContainer.addChild(spacer);\n\t\tthis.chatContainer.addChild(text);\n\t\tthis.lastStatusSpacer = spacer;\n\t\tthis.lastStatusText = text;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showProgressLine(message: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", message), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate setWorkingMessage(message?: string): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tif (message) {\n\t\t\t\tthis.loadingAnimation.setMessage(message);\n\t\t\t} else {\n\t\t\t\tthis.loadingAnimation.setMessage(\n\t\t\t\t\t`${this.defaultWorkingMessage} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.pendingWorkingMessage = message;\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate addMessageToChat(message: AgentMessage, options?: { populateHistory?: boolean }): void {\n\t\tswitch (message.role) {\n\t\t\tcase \"bashExecution\": {\n\t\t\t\tconst component = new BashExecutionComponent(message.command, this.ui, message.excludeFromContext);\n\t\t\t\tif (message.output) {\n\t\t\t\t\tcomponent.appendOutput(message.output);\n\t\t\t\t}\n\t\t\t\tcomponent.setComplete(\n\t\t\t\t\tmessage.exitCode,\n\t\t\t\t\tmessage.cancelled,\n\t\t\t\t\tmessage.truncated ? ({ truncated: true } as TruncationResult) : undefined,\n\t\t\t\t\tmessage.fullOutputPath,\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"custom\": {\n\t\t\t\tthis.handleInternalUiMetaMessage(message);\n\t\t\t\tif (message.display) {\n\t\t\t\t\tif (message.customType === TASK_PLAN_CUSTOM_TYPE && isTaskPlanSnapshot(message.details)) {\n\t\t\t\t\t\tconst component = new TaskPlanMessageComponent(message.details);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst renderer = this.session.extensionRunner?.getMessageRenderer(message.customType);\n\t\t\t\t\t\tconst component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"compactionSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new CompactionSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"branchSummary\": {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tconst component = new BranchSummaryMessageComponent(message, this.getMarkdownThemeWithSettings());\n\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"user\": {\n\t\t\t\tconst textContent = this.getUserMessageText(message);\n\t\t\t\tif (textContent) {\n\t\t\t\t\tconst skillBlock = parseSkillBlock(textContent);\n\t\t\t\t\tif (skillBlock) {\n\t\t\t\t\t\t// Render skill block (collapsible)\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tconst component = new SkillInvocationMessageComponent(\n\t\t\t\t\t\t\tskillBlock,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t// Render user message separately if present\n\t\t\t\t\t\tif (skillBlock.userMessage) {\n\t\t\t\t\t\t\tconst userComponent = new UserMessageComponent(\n\t\t\t\t\t\t\t\tskillBlock.userMessage,\n\t\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings());\n\t\t\t\t\t\tthis.chatContainer.addChild(userComponent);\n\t\t\t\t\t}\n\t\t\t\t\tif (options?.populateHistory) {\n\t\t\t\t\t\tthis.editor.addToHistory?.(textContent);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"assistant\": {\n\t\t\t\tconst hasOrchestrationContext = this.pendingAssistantOrchestrationContexts > 0;\n\t\t\t\tif (hasOrchestrationContext) {\n\t\t\t\t\tthis.pendingAssistantOrchestrationContexts -= 1;\n\t\t\t\t}\n\t\t\t\tconst previousOrchestrationContext = this.activeAssistantOrchestrationContext;\n\t\t\t\tthis.activeAssistantOrchestrationContext = hasOrchestrationContext;\n\t\t\t\tconst displayMessage = this.sanitizeAssistantDisplayMessage(message);\n\t\t\t\tthis.activeAssistantOrchestrationContext = previousOrchestrationContext;\n\t\t\t\tconst assistantComponent = new AssistantMessageComponent(\n\t\t\t\t\tdisplayMessage,\n\t\t\t\t\tthis.hideThinkingBlock,\n\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t);\n\t\t\t\tthis.chatContainer.addChild(assistantComponent);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"toolResult\": {\n\t\t\t\t// Tool results are rendered inline with tool calls, handled separately\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst _exhaustive: never = message;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Render session context to chat. Used for initial load and rebuild after compaction.\n\t * @param sessionContext Session context to render\n\t * @param options.updateFooter Update footer state\n\t * @param options.populateHistory Add user messages to editor history\n\t */\n\tprivate renderSessionContext(\n\t\tsessionContext: SessionContext,\n\t\toptions: { updateFooter?: boolean; populateHistory?: boolean } = {},\n\t): void {\n\t\tthis.pendingTools.clear();\n\t\tthis.pendingInternalUserDisplayAliases = [];\n\t\tthis.pendingAssistantOrchestrationContexts = 0;\n\t\tthis.activeAssistantOrchestrationContext = false;\n\t\tconst pendingSubagentHistory = new Map<string, SubagentMessageComponent>();\n\n\t\tif (options.updateFooter) {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t}\n\n\t\tfor (const message of sessionContext.messages) {\n\t\t\t// Assistant messages need special handling for tool calls\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\tthis.addMessageToChat(message);\n\t\t\t\t// Render tool call components\n\t\t\t\tfor (const content of message.content) {\n\t\t\t\t\tif (content.type === \"toolCall\") {\n\t\t\t\t\t\tif (content.name === \"task\") {\n\t\t\t\t\t\t\tconst args = content.arguments as {\n\t\t\t\t\t\t\t\tdescription?: string;\n\t\t\t\t\t\t\t\tprofile?: string;\n\t\t\t\t\t\t\t\tcwd?: string;\n\t\t\t\t\t\t\t\tagent?: string;\n\t\t\t\t\t\t\t\tlock_key?: string;\n\t\t\t\t\t\t\t\tisolation?: \"none\" | \"worktree\";\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tconst subagent = new SubagentMessageComponent({\n\t\t\t\t\t\t\t\tdescription: args.description ?? \"Running subtask\",\n\t\t\t\t\t\t\t\tprofile: args.profile ?? \"explore\",\n\t\t\t\t\t\t\t\tstatus: \"running\",\n\t\t\t\t\t\t\t\tcwd: args.cwd,\n\t\t\t\t\t\t\t\tagent: args.agent,\n\t\t\t\t\t\t\t\tlockKey: args.lock_key,\n\t\t\t\t\t\t\t\tisolation: args.isolation,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthis.chatContainer.addChild(subagent);\n\t\t\t\t\t\t\tpendingSubagentHistory.set(content.id, subagent);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\n\t\t\t\t\t\tif (message.stopReason === \"aborted\" || message.stopReason === \"error\") {\n\t\t\t\t\t\t\tlet errorMessage: string;\n\t\t\t\t\t\t\tif (message.stopReason === \"aborted\") {\n\t\t\t\t\t\t\t\tconst retryAttempt = this.session.retryAttempt;\n\t\t\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\t\t\tretryAttempt > 0\n\t\t\t\t\t\t\t\t\t\t? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? \"s\" : \"\"}`\n\t\t\t\t\t\t\t\t\t\t: \"Operation aborted\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\terrorMessage = message.errorMessage || \"Error\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcomponent.updateResult({ content: [{ type: \"text\", text: errorMessage }], isError: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.pendingTools.set(content.id, component);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (message.role === \"toolResult\") {\n\t\t\t\tconst subagent = pendingSubagentHistory.get(message.toolCallId);\n\t\t\t\tif (subagent) {\n\t\t\t\t\tconst details = message.details as Record<string, unknown> | undefined;\n\t\t\t\t\tsubagent.update({\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\ttypeof details?.description === \"string\" ? details.description : \"Running subtask\",\n\t\t\t\t\t\tprofile: typeof details?.profile === \"string\" ? details.profile : \"explore\",\n\t\t\t\t\t\tstatus: message.isError ? \"error\" : \"done\",\n\t\t\t\t\t\toutputLength: typeof details?.outputLength === \"number\" ? details.outputLength : undefined,\n\t\t\t\t\t\twaitMs: typeof details?.waitMs === \"number\" ? details.waitMs : undefined,\n\t\t\t\t\t\ttoolCallsStarted: typeof details?.toolCallsStarted === \"number\" ? details.toolCallsStarted : undefined,\n\t\t\t\t\t\ttoolCallsCompleted:\n\t\t\t\t\t\t\ttypeof details?.toolCallsCompleted === \"number\" ? details.toolCallsCompleted : undefined,\n\t\t\t\t\t\tassistantMessages:\n\t\t\t\t\t\t\ttypeof details?.assistantMessages === \"number\" ? details.assistantMessages : undefined,\n\t\t\t\t\t\tdelegatedTasks: typeof details?.delegatedTasks === \"number\" ? details.delegatedTasks : undefined,\n\t\t\t\t\t\tdelegatedSucceeded:\n\t\t\t\t\t\t\ttypeof details?.delegatedSucceeded === \"number\" ? details.delegatedSucceeded : undefined,\n\t\t\t\t\t\tdelegatedFailed: typeof details?.delegatedFailed === \"number\" ? details.delegatedFailed : undefined,\n\t\t\t\t\t\terrorMessage: message.isError\n\t\t\t\t\t\t\t? (message.content?.[0] as { text?: string } | undefined)?.text ?? \"error\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t});\n\t\t\t\t\tpendingSubagentHistory.delete(message.toolCallId);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// Match tool results to pending tool components\n\t\t\t\tconst component = this.pendingTools.get(message.toolCallId);\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponent.updateResult(message);\n\t\t\t\t\tthis.pendingTools.delete(message.toolCallId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// All other messages use standard rendering\n\t\t\t\tthis.addMessageToChat(message, options);\n\t\t\t}\n\t\t}\n\n\t\tthis.pendingTools.clear();\n\t\tthis.ui.requestRender();\n\t}\n\n\trenderInitialMessages(): void {\n\t\t// Get aligned messages and entries from session context\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context, {\n\t\t\tupdateFooter: true,\n\t\t\tpopulateHistory: true,\n\t\t});\n\n\t\t// Show compaction info if session was compacted\n\t\tconst allEntries = this.sessionManager.getEntries();\n\t\tconst compactionCount = allEntries.filter((e) => e.type === \"compaction\").length;\n\t\tif (compactionCount > 0) {\n\t\t\tconst times = compactionCount === 1 ? \"1 time\" : `${compactionCount} times`;\n\t\t\tthis.showStatus(`Session compacted ${times}`);\n\t\t}\n\t}\n\n\tasync getUserInput(): Promise<string> {\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.onInputCallback = (text: string) => {\n\t\t\t\tthis.onInputCallback = undefined;\n\t\t\t\tresolve(text);\n\t\t\t};\n\t\t});\n\t}\n\n\tprivate rebuildChatFromMessages(): void {\n\t\tthis.chatContainer.clear();\n\t\tconst context = this.sessionManager.buildSessionContext();\n\t\tthis.renderSessionContext(context);\n\t}\n\n\t// =========================================================================\n\t// Key handlers\n\t// =========================================================================\n\n\tprivate handleCtrlC(): void {\n\t\tconst now = Date.now();\n\t\tif (this.iosmAutomationRun) {\n\t\t\tif (this.iosmAutomationRun.cancelRequested && now - this.lastSigintTime < 500) {\n\t\t\t\tvoid this.shutdown();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.lastSigintTime = now;\n\t\t\tvoid this.interruptCurrentWork();\n\t\t\treturn;\n\t\t}\n\t\tif (now - this.lastSigintTime < 500) {\n\t\t\tvoid this.shutdown();\n\t\t} else {\n\t\t\tthis.clearEditor();\n\t\t\tthis.lastSigintTime = now;\n\t\t}\n\t}\n\n\tprivate handleCtrlD(): void {\n\t\t// Only called when editor is empty (enforced by CustomEditor)\n\t\tvoid this.shutdown();\n\t}\n\n\t/**\n\t * Gracefully shutdown the agent.\n\t * Emits shutdown event to extensions, then exits.\n\t */\n\tprivate isShuttingDown = false;\n\n\tprivate async shutdown(): Promise<void> {\n\t\tif (this.isShuttingDown) return;\n\t\tthis.isShuttingDown = true;\n\n\t\t// Emit shutdown event to extensions\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (extensionRunner?.hasHandlers(\"session_shutdown\")) {\n\t\t\tawait extensionRunner.emit({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t});\n\t\t}\n\n\t\t// Wait for any pending renders to complete\n\t\t// requestRender() uses process.nextTick(), so we wait one tick\n\t\tawait new Promise((resolve) => process.nextTick(resolve));\n\n\t\t// Drain any in-flight Kitty key release events before stopping.\n\t\t// This prevents escape sequences from leaking to the parent shell over slow SSH.\n\t\tawait this.ui.terminal.drainInput(1000);\n\n\t\tthis.stop();\n\t\tprocess.exit(0);\n\t}\n\n\t/**\n\t * Check if shutdown was requested and perform shutdown if so.\n\t */\n\tprivate async checkShutdownRequested(): Promise<void> {\n\t\tif (!this.shutdownRequested) return;\n\t\tawait this.shutdown();\n\t}\n\n\tprivate handleCtrlZ(): void {\n\t\t// Ignore SIGINT while suspended so Ctrl+C in the terminal does not\n\t\t// kill the backgrounded process. The handler is removed on resume.\n\t\tconst ignoreSigint = () => { };\n\t\tprocess.on(\"SIGINT\", ignoreSigint);\n\n\t\t// Set up handler to restore TUI when resumed\n\t\tprocess.once(\"SIGCONT\", () => {\n\t\t\tprocess.removeListener(\"SIGINT\", ignoreSigint);\n\t\t\tthis.ui.start();\n\t\t\tthis.ui.requestRender(true);\n\t\t});\n\n\t\t// Stop the TUI (restore terminal to normal mode)\n\t\tthis.ui.stop();\n\n\t\t// Send SIGTSTP to process group (pid=0 means all processes in group)\n\t\tprocess.kill(0, \"SIGTSTP\");\n\t}\n\n\tprivate async handleSteer(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.queueCompactionMessage(text, \"steer\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Dedicated steer shortcut always sends as steer while streaming\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"steer\" });\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, steer behaves like regular submit\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate async handleFollowUp(): Promise<void> {\n\t\tconst text = (this.editor.getExpandedText?.() ?? this.editor.getText()).trim();\n\t\tif (!text) return;\n\n\t\t// Queue input during compaction (extension commands execute immediately)\n\t\tif (this.session.isCompacting) {\n\t\t\tif (this.isExtensionCommand(text)) {\n\t\t\t\tthis.editor.addToHistory?.(text);\n\t\t\t\tthis.editor.setText(\"\");\n\t\t\t\tawait this.session.prompt(text);\n\t\t\t} else {\n\t\t\t\tthis.queueCompactionMessage(text, \"followUp\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Alt+Enter queues a follow-up message (waits until agent finishes)\n\t\t// This handles extension commands (execute immediately), prompt template expansion, and queueing\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.editor.addToHistory?.(text);\n\t\t\tthis.editor.setText(\"\");\n\t\t\tawait this.session.prompt(text, { streamingBehavior: \"followUp\" });\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t\t// If not streaming, Alt+Enter acts like regular Enter (trigger onSubmit)\n\t\telse if (this.editor.onSubmit) {\n\t\t\tthis.editor.onSubmit(text);\n\t\t}\n\t}\n\n\tprivate handleDequeue(): void {\n\t\tconst restored = this.restoreQueuedMessagesToEditor();\n\t\tif (restored === 0) {\n\t\t\tthis.showStatus(\"No queued messages to restore\");\n\t\t} else {\n\t\t\tthis.showStatus(`Restored ${restored} queued message${restored > 1 ? \"s\" : \"\"} to editor`);\n\t\t}\n\t}\n\n\tprivate updateEditorBorderColor(): void {\n\t\tif (this.isBashMode) {\n\t\t\tthis.editor.borderColor = theme.getBashModeBorderColor();\n\t\t} else {\n\t\t\tconst level = this.session.thinkingLevel || \"off\";\n\t\t\tthis.editor.borderColor = theme.getThinkingBorderColor(level);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate cycleThinkingLevel(): void {\n\t\tconst newLevel = this.session.cycleThinkingLevel();\n\t\tif (newLevel === undefined) {\n\t\t\tthis.showStatus(\"Current model does not support thinking\");\n\t\t} else {\n\t\t\tthis.footer.invalidate();\n\t\t\tthis.updateEditorBorderColor();\n\t\t\tthis.showStatus(`Thinking level: ${newLevel}`);\n\t\t}\n\t}\n\n\tprivate applyProfile(profileName: AgentProfileName): void {\n\t\tconst profile = getAgentProfile(profileName);\n\t\tconst nextActiveTools = this.getProfileToolNames(profile.name);\n\t\tthis.session.setActiveToolsByName(nextActiveTools);\n\t\tthis.session.setThinkingLevel(profile.thinkingLevel);\n\t\tthis.profilePromptSuffix = profile.systemPromptAppend || undefined;\n\t\tthis.syncRuntimePromptSuffix();\n\t\tthis.session.setIosmAutopilotEnabled(profile.name === \"iosm\");\n\n\t\tthis.activeProfileName = profile.name;\n\t\tthis.footer.setActiveProfile(profile.name);\n\t\tthis.footer.setPlanMode(profile.name === \"plan\");\n\t\tthis.setupAutocomplete(this.fdPath);\n\t\tthis.footer.invalidate();\n\t\tthis.updateEditorBorderColor();\n\t\tthis.refreshBuiltInHeader();\n\t\tthis.showStatus(`Profile: ${profile.name}`);\n\t}\n\n\tprivate cycleProfile(direction: \"forward\" | \"backward\"): void {\n\t\tif (this.session.isStreaming || this.session.isCompacting || this.iosmAutomationRun || this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Wait for current work to finish before switching profile.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst names = getMainProfileNames();\n\t\tconst currentIndex = Math.max(0, names.indexOf(this.activeProfileName));\n\t\tconst delta = direction === \"forward\" ? 1 : -1;\n\t\tconst nextIndex = (currentIndex + delta + names.length) % names.length;\n\t\tthis.applyProfile(names[nextIndex]);\n\t}\n\n\tprivate async cycleModel(direction: \"forward\" | \"backward\"): Promise<void> {\n\t\ttry {\n\t\t\tconst result = await this.session.cycleModel(direction);\n\t\t\tif (result === undefined) {\n\t\t\t\tconst msg = this.session.scopedModels.length > 0 ? \"Only one model in scope\" : \"Only one model available\";\n\t\t\t\tthis.showStatus(msg);\n\t\t\t} else {\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.refreshBuiltInHeader();\n\t\t\t\tconst thinkingStr =\n\t\t\t\t\tresult.model.reasoning && result.thinkingLevel !== \"off\" ? ` (thinking: ${result.thinkingLevel})` : \"\";\n\t\t\t\tthis.showStatus(`Switched to ${result.model.name || result.model.id}${thinkingStr}`);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate toggleToolOutputExpansion(): void {\n\t\tthis.setToolsExpanded(!this.toolOutputExpanded);\n\t}\n\n\tprivate setToolsExpanded(expanded: boolean): void {\n\t\tthis.toolOutputExpanded = expanded;\n\t\tfor (const child of this.chatContainer.children) {\n\t\t\tif (isExpandable(child)) {\n\t\t\t\tchild.setExpanded(expanded);\n\t\t\t}\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate toggleThinkingBlockVisibility(): void {\n\t\tthis.hideThinkingBlock = !this.hideThinkingBlock;\n\t\tthis.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);\n\n\t\t// Rebuild chat from session messages\n\t\tthis.chatContainer.clear();\n\t\tthis.rebuildChatFromMessages();\n\n\t\t// If streaming, re-add the streaming component with updated visibility and re-render\n\t\tif (this.streamingComponent && this.streamingMessage) {\n\t\t\tthis.streamingComponent.setHideThinkingBlock(this.hideThinkingBlock);\n\t\t\tthis.streamingComponent.updateContent(this.sanitizeAssistantDisplayMessage(this.streamingMessage));\n\t\t\tthis.chatContainer.addChild(this.streamingComponent);\n\t\t}\n\n\t\tthis.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? \"hidden\" : \"visible\"}`);\n\t}\n\n\tprivate openExternalEditor(): void {\n\t\t// Determine editor (respect $VISUAL, then $EDITOR)\n\t\tconst editorCmd = process.env.VISUAL || process.env.EDITOR;\n\t\tif (!editorCmd) {\n\t\t\tthis.showWarning(\"No editor configured. Set $VISUAL or $EDITOR environment variable.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentText = this.editor.getExpandedText?.() ?? this.editor.getText();\n\t\tconst tmpFile = path.join(os.tmpdir(), `${APP_NAME}-editor-${Date.now()}.${APP_NAME}.md`);\n\n\t\ttry {\n\t\t\t// Write current content to temp file\n\t\t\tfs.writeFileSync(tmpFile, currentText, \"utf-8\");\n\n\t\t\t// Stop TUI to release terminal\n\t\t\tthis.ui.stop();\n\n\t\t\t// Split by space to support editor arguments (e.g., \"code --wait\")\n\t\t\tconst [editor, ...editorArgs] = editorCmd.split(\" \");\n\n\t\t\t// Spawn editor synchronously with inherited stdio for interactive editing\n\t\t\tconst result = spawnSync(editor, [...editorArgs, tmpFile], {\n\t\t\t\tstdio: \"inherit\",\n\t\t\t});\n\n\t\t\t// On successful exit (status 0), replace editor content\n\t\t\tif (result.status === 0) {\n\t\t\t\tconst newContent = fs.readFileSync(tmpFile, \"utf-8\").replace(/\\n$/, \"\");\n\t\t\t\tthis.editor.setText(newContent);\n\t\t\t}\n\t\t\t// On non-zero exit, keep original text (no action needed)\n\t\t} finally {\n\t\t\t// Clean up temp file\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\n\t\t\t// Restart TUI\n\t\t\tthis.ui.start();\n\t\t\t// Force full re-render since external editor uses alternate screen\n\t\t\tthis.ui.requestRender(true);\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// UI helpers\n\t// =========================================================================\n\n\tclearEditor(): void {\n\t\tthis.editor.setText(\"\");\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowError(errorMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"error\", `Error: ${errorMessage}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowWarning(warningMessage: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"warning\", `Warning: ${warningMessage}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowNewVersionNotification(newVersion: string): void {\n\t\tconst action = theme.fg(\"accent\", getUpdateInstruction(PACKAGE_NAME));\n\t\tconst updateInstruction = theme.fg(\"muted\", `New version ${newVersion} is available. `) + action;\n\t\tconst changelogLine = CHANGELOG_URL\n\t\t\t? theme.fg(\"muted\", \"Changelog: \") + theme.fg(\"accent\", CHANGELOG_URL)\n\t\t\t: theme.fg(\"muted\", \"Changelog: CHANGELOG.md\");\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\t`${theme.bold(theme.fg(\"warning\", \"Update Available\"))}\\n${updateInstruction}\\n${changelogLine}`,\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.chatContainer.addChild(new DynamicBorder((text) => theme.fg(\"warning\", text)));\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Get all queued messages (read-only).\n\t * Combines session queue and compaction queue.\n\t */\n\tprivate getAllQueuedMessages(): { steering: string[]; followUp: string[]; meta: string[] } {\n\t\treturn {\n\t\t\tsteering: [\n\t\t\t\t...this.session.getSteeringMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"steer\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tfollowUp: [\n\t\t\t\t...this.session.getFollowUpMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"followUp\").map((msg) => msg.text),\n\t\t\t],\n\t\t\tmeta: [\n\t\t\t\t...this.session.getMetaMessages(),\n\t\t\t\t...this.compactionQueuedMessages.filter((msg) => msg.mode === \"meta\").map((msg) => msg.text),\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * Clear all queued messages and return their contents.\n\t * Clears both session queue and compaction queue.\n\t */\n\tprivate clearAllQueues(): { steering: string[]; followUp: string[]; meta: string[] } {\n\t\tconst { steering, followUp, meta } = this.session.clearQueue();\n\t\tconst compactionSteering = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"steer\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionFollowUp = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"followUp\")\n\t\t\t.map((msg) => msg.text);\n\t\tconst compactionMeta = this.compactionQueuedMessages\n\t\t\t.filter((msg) => msg.mode === \"meta\")\n\t\t\t.map((msg) => msg.text);\n\t\tthis.compactionQueuedMessages = [];\n\t\treturn {\n\t\t\tsteering: [...steering, ...compactionSteering],\n\t\t\tfollowUp: [...followUp, ...compactionFollowUp],\n\t\t\tmeta: [...meta, ...compactionMeta],\n\t\t};\n\t}\n\n\tprivate updatePendingMessagesDisplay(): void {\n\t\tconst bashComponents = [...this.pendingBashComponents];\n\t\tthis.pendingMessagesContainer.clear();\n\t\tconst {\n\t\t\tsteering: steeringMessages,\n\t\t\tfollowUp: followUpMessages,\n\t\t\tmeta: rawMetaMessages,\n\t\t} = this.getAllQueuedMessages();\n\t\tconst metaMessages = rawMetaMessages ?? [];\n\t\tconst totalQueued = steeringMessages.length + followUpMessages.length + metaMessages.length;\n\t\tif (totalQueued > 0 || bashComponents.length > 0) {\n\t\t\tthis.pendingMessagesContainer.addChild(new Spacer(1));\n\t\t\tif (totalQueued > 0) {\n\t\t\t\tconst summaryParts = [theme.bold(theme.fg(\"accent\", `Queue ${totalQueued}`))];\n\t\t\t\tif (metaMessages.length > 0) {\n\t\t\t\t\tsummaryParts.push(theme.fg(\"accent\", `${metaMessages.length} meta`));\n\t\t\t\t}\n\t\t\t\tif (steeringMessages.length > 0) {\n\t\t\t\t\tsummaryParts.push(theme.fg(\"accent\", `${steeringMessages.length} steer`));\n\t\t\t\t}\n\t\t\t\tif (followUpMessages.length > 0) {\n\t\t\t\t\tsummaryParts.push(theme.fg(\"warning\", `${followUpMessages.length} follow-up`));\n\t\t\t\t}\n\t\t\t\tthis.pendingMessagesContainer.addChild(\n\t\t\t\t\tnew TruncatedText(summaryParts.join(theme.fg(\"dim\", \" • \")), 1, 0),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tfor (const message of steeringMessages) {\n\t\t\t\tconst text =\n\t\t\t\t\ttheme.fg(\"accent\", \"steer\") +\n\t\t\t\t\ttheme.fg(\"dim\", \" → \") +\n\t\t\t\t\tthis.previewPendingMessage(message);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of followUpMessages) {\n\t\t\t\tconst text =\n\t\t\t\t\ttheme.fg(\"warning\", \"follow-up\") +\n\t\t\t\t\ttheme.fg(\"dim\", \" → \") +\n\t\t\t\t\tthis.previewPendingMessage(message);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tfor (const message of metaMessages) {\n\t\t\t\tconst text =\n\t\t\t\t\ttheme.fg(\"accent\", \"meta\") +\n\t\t\t\t\ttheme.fg(\"dim\", \" → \") +\n\t\t\t\t\tthis.previewPendingMessage(message);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(text, 1, 0));\n\t\t\t}\n\t\t\tconst metaAppliedStep = this.session?.metaAppliedStep ?? 0;\n\t\t\tif (metaAppliedStep > 0) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(\n\t\t\t\t\tnew TruncatedText(theme.fg(\"dim\", `meta applied at step ${metaAppliedStep}`), 1, 0),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (totalQueued > 0) {\n\t\t\t\tconst dequeueHint = this.getAppKeyDisplay(\"dequeue\");\n\t\t\t\tconst hintText = theme.fg(\"dim\", `↳ ${dequeueHint} to edit or restore the queued draft`);\n\t\t\t\tthis.pendingMessagesContainer.addChild(new TruncatedText(hintText, 1, 0));\n\t\t\t}\n\t\t\tif (bashComponents.length > 0) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(\n\t\t\t\t\tnew TruncatedText(theme.fg(\"muted\", `Pending bash ${bashComponents.length}`), 1, 0),\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const component of bashComponents) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(component);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate previewPendingMessage(message: string): string {\n\t\treturn theme.fg(\"muted\", message.replace(/\\s+/g, \" \").trim());\n\t}\n\n\tprivate async interruptCurrentWork(): Promise<boolean> {\n\t\tconst queuedMessages = this.getAllQueuedMessages();\n\t\tconst queuedMeta = queuedMessages.meta ?? [];\n\t\tconst hasPendingQueuedMessages =\n\t\t\tqueuedMessages.steering.length > 0 || queuedMessages.followUp.length > 0 || queuedMeta.length > 0;\n\t\tconst hasAutomationWork = this.iosmAutomationRun !== undefined;\n\t\tconst verificationSession = this.iosmVerificationSession;\n\t\tconst hasVerificationWork = verificationSession !== undefined;\n\t\tconst singularSession = this.singularAnalysisSession;\n\t\tconst hasSingularWork = singularSession !== undefined;\n\t\tconst hasMainStreaming = this.session.isStreaming;\n\t\tconst hasRetryWork = this.session.isRetrying;\n\t\tconst hasCompactionWork = this.session.isCompacting;\n\t\tconst hasBashWork = this.session.isBashRunning;\n\n\t\tif (\n\t\t\t!hasPendingQueuedMessages &&\n\t\t\t!hasAutomationWork &&\n\t\t\t!hasVerificationWork &&\n\t\t\t!hasSingularWork &&\n\t\t\t!hasMainStreaming &&\n\t\t\t!hasRetryWork &&\n\t\t\t!hasCompactionWork &&\n\t\t\t!hasBashWork\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!hasMainStreaming && (hasBashWork || hasRetryWork || hasCompactionWork || hasPendingQueuedMessages)) {\n\t\t\tawait this.session.notifyStopHooks?.(\"interrupt\");\n\t\t}\n\n\t\tif (this.iosmAutomationRun) {\n\t\t\tthis.iosmAutomationRun.cancelRequested = true;\n\t\t}\n\t\tif (hasPendingQueuedMessages) {\n\t\t\tthis.restoreQueuedMessagesToEditor();\n\t\t} else {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t}\n\t\tif (hasBashWork) {\n\t\t\tthis.session.abortBash();\n\t\t}\n\t\tif (hasRetryWork) {\n\t\t\tthis.session.abortRetry();\n\t\t}\n\t\tif (hasCompactionWork) {\n\t\t\tthis.session.abortCompaction();\n\t\t\tthis.session.abortBranchSummary();\n\t\t}\n\n\t\tthis.showStatus(\n\t\t\thasAutomationWork\n\t\t\t\t? \"Stopping IOSM automation...\"\n\t\t\t\t: hasVerificationWork\n\t\t\t\t\t? \"Stopping IOSM verification...\"\n\t\t\t\t\t: hasSingularWork\n\t\t\t\t\t\t? \"Stopping /singular analysis...\"\n\t\t\t\t\t\t: \"Stopping current run...\",\n\t\t);\n\n\t\tconst abortPromises: Promise<unknown>[] = [];\n\t\tif (hasMainStreaming) {\n\t\t\tabortPromises.push(this.session.abort());\n\t\t}\n\t\tif (verificationSession) {\n\t\t\tabortPromises.push(verificationSession.abort());\n\t\t}\n\t\tif (singularSession) {\n\t\t\tabortPromises.push(singularSession.abort());\n\t\t}\n\t\tif (abortPromises.length > 0) {\n\t\t\tconst settleWithTimeout = (promise: Promise<unknown>): Promise<\"done\" | \"timeout\"> =>\n\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\tlet finished = false;\n\t\t\t\t\tconst timeout = setTimeout(() => {\n\t\t\t\t\t\tif (finished) return;\n\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\tresolve(\"timeout\");\n\t\t\t\t\t}, INTERRUPT_ABORT_TIMEOUT_MS);\n\n\t\t\t\t\tpromise.finally(() => {\n\t\t\t\t\t\tif (finished) return;\n\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\t\tresolve(\"done\");\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\tconst settled = await Promise.all(\n\t\t\t\tabortPromises.map((promise) => settleWithTimeout(promise)),\n\t\t\t);\n\t\t\tif (settled.includes(\"timeout\")) {\n\t\t\t\tthis.showWarning(\n\t\t\t\t\t`Abort is taking longer than ${Math.round(INTERRUPT_ABORT_TIMEOUT_MS / 1000)}s. Try interrupt again if the run is still active.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tprivate restoreQueuedMessagesToEditor(options?: { abort?: boolean; currentText?: string }): number {\n\t\tconst { steering, followUp, meta } = this.clearAllQueues();\n\t\tconst allQueued = [...meta, ...steering, ...followUp];\n\t\tif (allQueued.length === 0) {\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tif (options?.abort) {\n\t\t\t\tthis.agent.abort();\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\t\tconst queuedText = allQueued.join(\"\\n\\n\");\n\t\tconst currentText = options?.currentText ?? this.editor.getText();\n\t\tconst combinedText = [queuedText, currentText].filter((t) => t.trim()).join(\"\\n\\n\");\n\t\tthis.editor.setText(combinedText);\n\t\tthis.updatePendingMessagesDisplay();\n\t\tif (options?.abort) {\n\t\t\tthis.agent.abort();\n\t\t}\n\t\treturn allQueued.length;\n\t}\n\n\tprivate queueCompactionMessage(text: string, mode: \"steer\" | \"followUp\" | \"meta\"): void {\n\t\tthis.compactionQueuedMessages.push({ text, mode });\n\t\tthis.editor.addToHistory?.(text);\n\t\tthis.editor.setText(\"\");\n\t\tthis.updatePendingMessagesDisplay();\n\t\tthis.showStatus(\"Queued message for after compaction\");\n\t}\n\n\tprivate isExtensionCommand(text: string): boolean {\n\t\tif (!text.startsWith(\"/\")) return false;\n\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (!extensionRunner) return false;\n\n\t\tconst spaceIndex = text.indexOf(\" \");\n\t\tconst commandName = spaceIndex === -1 ? text.slice(1) : text.slice(1, spaceIndex);\n\t\treturn !!extensionRunner.getCommand(commandName);\n\t}\n\n\tprivate async flushCompactionQueue(options?: { willRetry?: boolean }): Promise<void> {\n\t\tif (this.compactionQueuedMessages.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst queuedMessages = [...this.compactionQueuedMessages];\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.updatePendingMessagesDisplay();\n\n\t\tconst restoreQueue = (error: unknown) => {\n\t\t\tthis.session.clearQueue();\n\t\t\tthis.compactionQueuedMessages = queuedMessages;\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tthis.showError(\n\t\t\t\t`Failed to send queued message${queuedMessages.length > 1 ? \"s\" : \"\"}: ${error instanceof Error ? error.message : String(error)\n\t\t\t\t}`,\n\t\t\t);\n\t\t};\n\n\t\ttry {\n\t\t\tif (options?.willRetry) {\n\t\t\t\t// When retry is pending, queue messages for the retry turn\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t\t} else if (message.mode === \"meta\") {\n\t\t\t\t\t\tawait this.session.meta(message.text);\n\t\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Find first non-extension-command message to use as prompt\n\t\t\tconst firstPromptIndex = queuedMessages.findIndex((message) => !this.isExtensionCommand(message.text));\n\t\t\tif (firstPromptIndex === -1) {\n\t\t\t\t// All extension commands - execute them all\n\t\t\t\tfor (const message of queuedMessages) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Execute any extension commands before the first prompt\n\t\t\tconst preCommands = queuedMessages.slice(0, firstPromptIndex);\n\t\t\tconst firstPrompt = queuedMessages[firstPromptIndex];\n\t\t\tconst rest = queuedMessages.slice(firstPromptIndex + 1);\n\n\t\t\tfor (const message of preCommands) {\n\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t}\n\n\t\t\t// Send first prompt (starts streaming)\n\t\t\tconst promptPromise = this.session.prompt(firstPrompt.text).catch((error) => {\n\t\t\t\trestoreQueue(error);\n\t\t\t});\n\n\t\t\t// Queue remaining messages\n\t\t\tfor (const message of rest) {\n\t\t\t\tif (this.isExtensionCommand(message.text)) {\n\t\t\t\t\tawait this.session.prompt(message.text);\n\t\t\t\t} else if (message.mode === \"meta\") {\n\t\t\t\t\tawait this.session.meta(message.text);\n\t\t\t\t} else if (message.mode === \"followUp\") {\n\t\t\t\t\tawait this.session.followUp(message.text);\n\t\t\t\t} else {\n\t\t\t\t\tawait this.session.steer(message.text);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updatePendingMessagesDisplay();\n\t\t\tvoid promptPromise;\n\t\t} catch (error) {\n\t\t\trestoreQueue(error);\n\t\t}\n\t}\n\n\t/** Move pending bash components from pending area to chat */\n\tprivate flushPendingBashComponents(): void {\n\t\tfor (const component of this.pendingBashComponents) {\n\t\t\tthis.pendingMessagesContainer.removeChild(component);\n\t\t\tthis.chatContainer.addChild(component);\n\t\t}\n\t\tthis.pendingBashComponents = [];\n\t}\n\n\t// =========================================================================\n\t// Selectors\n\t// =========================================================================\n\n\t/**\n\t * Shows a selector component in place of the editor.\n\t * @param create Factory that receives a `done` callback and returns the component and focus target\n\t */\n\tprivate showSelector(create: (done: () => void) => { component: Component; focus: Component }): void {\n\t\tconst done = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t};\n\t\tconst { component, focus } = create(done);\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate syncMcpToolsWithSession(): void {\n\t\tif (!this.mcpRuntime) return;\n\t\tthis.session.setCustomTools(this.mcpRuntime.getToolDefinitions());\n\t\tthis.setupAutocomplete(this.fdPath);\n\t\tthis.refreshBuiltInHeader();\n\t}\n\n\tprivate async refreshMcpRuntimeAndSession(): Promise<void> {\n\t\tif (!this.mcpRuntime) return;\n\t\tawait this.mcpRuntime.refresh();\n\t\tthis.syncMcpToolsWithSession();\n\t\tconst errors = this.mcpRuntime.getErrors();\n\t\tif (errors.length > 0) {\n\t\t\tthis.showWarning(`MCP config warning: ${errors[0]}${errors.length > 1 ? ` (+${errors.length - 1} more)` : \"\"}`);\n\t\t}\n\t}\n\n\tprivate buildMcpStatusReport(statuses: ReturnType<McpRuntime[\"getServers\"]>): string {\n\t\tif (statuses.length === 0) {\n\t\t\treturn \"No MCP servers configured.\";\n\t\t}\n\t\tconst lines: string[] = [];\n\t\tfor (const status of statuses) {\n\t\t\tlines.push(\n\t\t\t\t`${status.name} · ${status.scope}/${status.transport} · ${status.enabled ? \"enabled\" : \"disabled\"} · state=${status.state} · tools=${status.toolCount}`,\n\t\t\t);\n\t\t\tif (status.error) {\n\t\t\t\tlines.push(` error: ${status.error}`);\n\t\t\t}\n\t\t\tfor (const tool of status.tools.slice(0, 8)) {\n\t\t\t\tconst alias = tool.name === tool.exposedName ? \"\" : ` -> ${tool.exposedName}`;\n\t\t\t\tlines.push(` - ${tool.name}${alias}`);\n\t\t\t}\n\t\t\tif (status.tools.length > 8) {\n\t\t\t\tlines.push(` ... ${status.tools.length - 8} more`);\n\t\t\t}\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate parseMcpKeyValueMapInput(raw: string): { value?: Record<string, string>; error?: string } {\n\t\tconst trimmed = raw.trim();\n\t\tif (!trimmed) {\n\t\t\treturn { value: undefined };\n\t\t}\n\t\tconst pairs = trimmed\n\t\t\t.split(\",\")\n\t\t\t.map((part) => part.trim())\n\t\t\t.filter((part) => part.length > 0);\n\n\t\tconst value: Record<string, string> = {};\n\t\tfor (const pair of pairs) {\n\t\t\tconst eqIndex = pair.indexOf(\"=\");\n\t\t\tif (eqIndex <= 0) {\n\t\t\t\treturn { error: `Invalid pair \"${pair}\". Use KEY=VALUE,KEY2=VALUE2` };\n\t\t\t}\n\t\t\tconst key = pair.slice(0, eqIndex).trim();\n\t\t\tconst entryValue = pair.slice(eqIndex + 1).trim();\n\t\t\tif (!key) {\n\t\t\t\treturn { error: `Invalid pair \"${pair}\". Key must not be empty.` };\n\t\t\t}\n\t\t\tvalue[key] = entryValue;\n\t\t}\n\t\treturn { value: Object.keys(value).length > 0 ? value : undefined };\n\t}\n\n\tprivate parseMcpCsvListInput(raw: string): string[] | undefined {\n\t\tconst trimmed = raw.trim();\n\t\tif (!trimmed) return undefined;\n\t\tconst items = trimmed\n\t\t\t.split(\",\")\n\t\t\t.map((item) => item.trim())\n\t\t\t.filter((item) => item.length > 0);\n\t\treturn items.length > 0 ? [...new Set(items)] : undefined;\n\t}\n\n\tprivate async runMcpAddWizard(initialName?: string): Promise<void> {\n\t\tif (!this.mcpRuntime) {\n\t\t\tthis.showWarning(\"MCP runtime is unavailable in this session.\");\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.refreshMcpRuntimeAndSession();\n\n\t\tlet name = initialName?.trim();\n\t\twhile (!name || !/^[a-zA-Z0-9._-]+$/.test(name)) {\n\t\t\tconst enteredName = await this.showExtensionInput(\"MCP Add: server name\", \"filesystem\");\n\t\t\tif (enteredName === undefined) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tname = enteredName.trim();\n\t\t\tif (!name) {\n\t\t\t\tthis.showWarning(\"Server name cannot be empty.\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!/^[a-zA-Z0-9._-]+$/.test(name)) {\n\t\t\t\tthis.showWarning('Use only letters, numbers, \".\", \"_\" or \"-\".');\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst existing = this.mcpRuntime.getServer(name);\n\t\tif (existing) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\n\t\t\t\t\"MCP Add\",\n\t\t\t\t`Server \"${name}\" already exists (${existing.scope}). Overwrite it?`,\n\t\t\t);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst scopeChoice = await this.showExtensionSelector(\"MCP Add: scope\", [\"project (Recommended)\", \"user\"]);\n\t\tif (!scopeChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconst scope: McpScope = scopeChoice.startsWith(\"user\") ? \"user\" : \"project\";\n\n\t\tconst transportChoice = await this.showExtensionSelector(\"MCP Add: transport\", [\n\t\t\t\"stdio (Recommended)\",\n\t\t\t\"http\",\n\t\t\t\"sse\",\n\t\t]);\n\t\tif (!transportChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconst transport = transportChoice.startsWith(\"http\")\n\t\t\t? \"http\"\n\t\t\t: transportChoice.startsWith(\"sse\")\n\t\t\t\t? \"sse\"\n\t\t\t\t: \"stdio\";\n\n\t\tconst config: McpServerConfig = {\n\t\t\ttransport,\n\t\t\tenabled: true,\n\t\t\ttrust: false,\n\t\t};\n\n\t\tif (transport === \"stdio\") {\n\t\t\twhile (!config.command) {\n\t\t\t\tconst commandLine = await this.showExtensionInput(\n\t\t\t\t\t\"MCP Add: stdio command\",\n\t\t\t\t\t\"npx -y @modelcontextprotocol/server-filesystem .\",\n\t\t\t\t);\n\t\t\t\tif (commandLine === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst tokens = this.parseSlashArgs(commandLine.trim());\n\t\t\t\tif (tokens.length === 0) {\n\t\t\t\t\tthis.showWarning(\"Command cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.command = tokens[0];\n\t\t\t\tconfig.args = tokens.slice(1);\n\t\t\t}\n\n\t\t\tconst cwdInput = await this.showExtensionInput(\n\t\t\t\t\"MCP Add: working directory (optional)\",\n\t\t\t\t\"leave blank to use current project\",\n\t\t\t);\n\t\t\tif (cwdInput === undefined) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (cwdInput.trim()) {\n\t\t\t\tconfig.cwd = cwdInput.trim();\n\t\t\t}\n\n\t\t\twhile (true) {\n\t\t\t\tconst envInput = await this.showExtensionInput(\n\t\t\t\t\t\"MCP Add: env vars (optional)\",\n\t\t\t\t\t\"KEY=VALUE,API_TOKEN=${API_TOKEN}\",\n\t\t\t\t);\n\t\t\t\tif (envInput === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst parsed = this.parseMcpKeyValueMapInput(envInput);\n\t\t\t\tif (parsed.error) {\n\t\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.env = parsed.value;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\twhile (!config.url) {\n\t\t\t\tconst urlInput = await this.showExtensionInput(\n\t\t\t\t\t`MCP Add: ${transport.toUpperCase()} URL`,\n\t\t\t\t\ttransport === \"http\" ? \"https://example.com/mcp\" : \"https://example.com/sse\",\n\t\t\t\t);\n\t\t\t\tif (urlInput === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst candidate = urlInput.trim();\n\t\t\t\tif (!candidate) {\n\t\t\t\t\tthis.showWarning(\"URL cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.url = candidate;\n\t\t\t}\n\n\t\t\twhile (true) {\n\t\t\t\tconst headersInput = await this.showExtensionInput(\n\t\t\t\t\t\"MCP Add: headers (optional)\",\n\t\t\t\t\t\"Authorization=Bearer ${TOKEN}\",\n\t\t\t\t);\n\t\t\t\tif (headersInput === undefined) {\n\t\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst parsed = this.parseMcpKeyValueMapInput(headersInput);\n\t\t\t\tif (parsed.error) {\n\t\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconfig.headers = parsed.value;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\twhile (true) {\n\t\t\tconst timeoutInput = await this.showExtensionInput(\"MCP Add: timeout ms (optional)\", \"30000\");\n\t\t\tif (timeoutInput === undefined) {\n\t\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst trimmed = timeoutInput.trim();\n\t\t\tif (!trimmed) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst timeoutMs = Number.parseInt(trimmed, 10);\n\t\t\tif (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n\t\t\t\tthis.showWarning(\"Timeout must be a positive integer (milliseconds).\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconfig.timeoutMs = timeoutMs;\n\t\t\tbreak;\n\t\t}\n\n\t\tconst includeToolsInput = await this.showExtensionInput(\n\t\t\t\"MCP Add: include tools (optional, CSV)\",\n\t\t\t\"toolA,toolB\",\n\t\t);\n\t\tif (includeToolsInput === undefined) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.includeTools = this.parseMcpCsvListInput(includeToolsInput);\n\n\t\tconst excludeToolsInput = await this.showExtensionInput(\n\t\t\t\"MCP Add: exclude tools (optional, CSV)\",\n\t\t\t\"dangerousTool\",\n\t\t);\n\t\tif (excludeToolsInput === undefined) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.excludeTools = this.parseMcpCsvListInput(excludeToolsInput);\n\n\t\tconst trustChoice = await this.showExtensionSelector(\"MCP Add: trust this server?\", [\n\t\t\t\"No (Recommended)\",\n\t\t\t\"Yes\",\n\t\t]);\n\t\tif (!trustChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.trust = trustChoice.startsWith(\"Yes\");\n\n\t\tconst enableChoice = await this.showExtensionSelector(\"MCP Add: enable now?\", [\"Yes (Recommended)\", \"No\"]);\n\t\tif (!enableChoice) {\n\t\t\tthis.showStatus(\"MCP add cancelled\");\n\t\t\treturn;\n\t\t}\n\t\tconfig.enabled = enableChoice.startsWith(\"Yes\");\n\n\t\tconst path = await this.mcpRuntime.addServer(name, scope, config);\n\t\tthis.syncMcpToolsWithSession();\n\t\tconst status = this.mcpRuntime.getServer(name);\n\t\tthis.showStatus(`Added MCP server ${name} (${scope})`);\n\n\t\tconst details: string[] = [`Config: ${path}`];\n\t\tif (status?.state === \"connected\") {\n\t\t\tdetails.push(`Connected tools: ${status.toolCount}`);\n\t\t} else if (status?.state === \"error\") {\n\t\t\tdetails.push(`Connection warning: ${status.error ?? \"unknown error\"}`);\n\t\t}\n\t\tthis.showCommandTextBlock(\"MCP Add\", details.join(\"\\n\"));\n\t}\n\n\tprivate async handleMcpSlashCommand(text: string): Promise<void> {\n\t\tif (!this.mcpRuntime) {\n\t\t\tthis.showWarning(\"MCP runtime is unavailable in this session.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.length === 0) {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tthis.showMcpSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\tconst rest = args.slice(1);\n\n\t\tif (!subcommand || subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"list\" || subcommand === \"status\") {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tthis.showCommandTextBlock(\"MCP Servers\", this.buildMcpStatusReport(this.mcpRuntime.getServers()));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"add\") {\n\t\t\tif (\n\t\t\t\trest.length === 0 ||\n\t\t\t\t(rest.length === 1 && !rest[0]!.startsWith(\"-\")) ||\n\t\t\t\t(rest.length > 0 && rest.includes(\"--wizard\"))\n\t\t\t) {\n\t\t\t\tconst prefilledName = rest.find((token) => !token.startsWith(\"-\"));\n\t\t\t\tawait this.runMcpAddWizard(prefilledName);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst parsed = parseMcpAddCommand(rest);\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst path = await this.mcpRuntime.addServer(parsed.value.name, parsed.value.scope, parsed.value.config);\n\t\t\tthis.syncMcpToolsWithSession();\n\t\t\tconst status = this.mcpRuntime.getServer(parsed.value.name);\n\t\t\tthis.showStatus(`Added MCP server ${parsed.value.name} (${parsed.value.scope})`);\n\t\t\tconst extraLines = [`Config: ${path}`];\n\t\t\tif (status?.state === \"connected\") {\n\t\t\t\textraLines.push(`Connected tools: ${status.toolCount}`);\n\t\t\t} else if (status?.state === \"error\") {\n\t\t\t\textraLines.push(`Connection warning: ${status.error ?? \"unknown error\"}`);\n\t\t\t}\n\t\t\tthis.showCommandTextBlock(\"MCP Add\", extraLines.join(\"\\n\"));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"remove\") {\n\t\t\tconst parsed = parseMcpTargetCommand(rest, \"all\");\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst removed = await this.mcpRuntime.removeServer(parsed.value.name, parsed.value.scope);\n\t\t\tif (removed.length === 0) {\n\t\t\t\tthis.showWarning(`MCP server \"${parsed.value.name}\" not found.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.syncMcpToolsWithSession();\n\t\t\tthis.showStatus(`Removed MCP server ${parsed.value.name} from ${removed.join(\", \")}`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"enable\" || subcommand === \"disable\") {\n\t\t\tconst parsed = parseMcpTargetCommand(rest, \"all\");\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst enabled = subcommand === \"enable\";\n\t\t\tlet updatedScope: McpScope | undefined;\n\t\t\tif (parsed.value.scope === \"all\") {\n\t\t\t\tupdatedScope =\n\t\t\t\t\t(await this.mcpRuntime.setServerEnabled(parsed.value.name, enabled, \"project\")) ??\n\t\t\t\t\t(await this.mcpRuntime.setServerEnabled(parsed.value.name, enabled, \"user\"));\n\t\t\t} else {\n\t\t\t\tupdatedScope = await this.mcpRuntime.setServerEnabled(parsed.value.name, enabled, parsed.value.scope);\n\t\t\t}\n\t\t\tif (!updatedScope) {\n\t\t\t\tthis.showWarning(`MCP server \"${parsed.value.name}\" not found.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.syncMcpToolsWithSession();\n\t\t\tthis.showStatus(`${enabled ? \"Enabled\" : \"Disabled\"} MCP server ${parsed.value.name} (${updatedScope})`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"reconnect\" || subcommand === \"refresh\") {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"tools\") {\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tconst serverName = rest[0];\n\t\t\tconst statuses = this.mcpRuntime.getServers();\n\t\t\tconst filtered = serverName ? statuses.filter((status) => status.name === serverName) : statuses;\n\t\t\tif (filtered.length === 0) {\n\t\t\t\tthis.showWarning(serverName ? `MCP server \"${serverName}\" not found.` : \"No MCP servers configured.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showCommandTextBlock(\"MCP Tools\", this.buildMcpStatusReport(filtered));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"test\") {\n\t\t\tconst parsed = parseMcpTargetCommand(rest, \"all\");\n\t\t\tif (!parsed.ok) {\n\t\t\t\tif (\"help\" in parsed) {\n\t\t\t\t\tthis.showCommandTextBlock(\"MCP Help\", getMcpCommandHelp(\"/mcp\", { includeWizard: true }));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\tconst status = this.mcpRuntime.getServer(parsed.value.name);\n\t\t\tif (!status) {\n\t\t\t\tthis.showWarning(`MCP server \"${parsed.value.name}\" not found.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (status.state !== \"connected\") {\n\t\t\t\tthis.showError(`MCP server \"${parsed.value.name}\" failed: ${status.error ?? \"unknown error\"}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(`MCP server \"${parsed.value.name}\" connected (${status.toolCount} tools)`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showWarning(`Unknown /mcp subcommand \"${subcommand}\". Use /mcp help.`);\n\t}\n\n\tprivate showMcpSelector(): void {\n\t\tif (!this.mcpRuntime) {\n\t\t\tthis.showWarning(\"MCP runtime is unavailable in this session.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new McpSelectorComponent(this.ui, this.mcpRuntime!.getServers(), {\n\t\t\t\tonClose: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tonToggleEnabled: async (server) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst targetEnabled = !server.enabled;\n\t\t\t\t\t\tconst updated = await this.mcpRuntime!.setServerEnabled(server.name, targetEnabled, server.scope);\n\t\t\t\t\t\tif (!updated) {\n\t\t\t\t\t\t\tthis.showWarning(`MCP server \"${server.name}\" not found.`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.syncMcpToolsWithSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(`${targetEnabled ? \"Enabled\" : \"Disabled\"} ${server.name} (${updated})`);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonReconnect: async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonRemove: async (server) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst removed = await this.mcpRuntime!.removeServer(server.name, server.scope);\n\t\t\t\t\t\tif (removed.length === 0) {\n\t\t\t\t\t\t\tthis.showWarning(`MCP server \"${server.name}\" not found.`);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.syncMcpToolsWithSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(`Removed ${server.name} (${removed.join(\", \")})`);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonRefresh: async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\t\t\tselector.setServers(this.mcpRuntime!.getServers());\n\t\t\t\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonInsertAddCommand: () => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.editor.setText(\"/mcp add \");\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showSettingsSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SettingsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tautoCompact: this.session.autoCompactionEnabled,\n\t\t\t\t\tshowImages: this.settingsManager.getShowImages(),\n\t\t\t\t\tautoResizeImages: this.settingsManager.getImageAutoResize(),\n\t\t\t\t\tblockImages: this.settingsManager.getBlockImages(),\n\t\t\t\t\tenableSkillCommands: this.settingsManager.getEnableSkillCommands(),\n\t\t\t\t\tsteeringMode: this.session.steeringMode,\n\t\t\t\t\tfollowUpMode: this.session.followUpMode,\n\t\t\t\t\tstreamInputMode: this.session.streamInputMode,\n\t\t\t\t\ttransport: this.settingsManager.getTransport(),\n\t\t\t\t\tthinkingLevel: this.session.thinkingLevel,\n\t\t\t\t\tavailableThinkingLevels: this.session.getAvailableThinkingLevels(),\n\t\t\t\t\tcurrentTheme: this.settingsManager.getTheme() || \"dark\",\n\t\t\t\t\tavailableThemes: getAvailableThemes(),\n\t\t\t\t\thideThinkingBlock: this.hideThinkingBlock,\n\t\t\t\t\tcollapseChangelog: this.settingsManager.getCollapseChangelog(),\n\t\t\t\t\tdoubleEscapeAction: this.settingsManager.getDoubleEscapeAction(),\n\t\t\t\t\ttreeFilterMode: this.settingsManager.getTreeFilterMode(),\n\t\t\t\t\tshowHardwareCursor: this.settingsManager.getShowHardwareCursor(),\n\t\t\t\t\teditorPaddingX: this.settingsManager.getEditorPaddingX(),\n\t\t\t\t\tautocompleteMaxVisible: this.settingsManager.getAutocompleteMaxVisible(),\n\t\t\t\t\tquietStartup: this.settingsManager.getQuietStartup(),\n\t\t\t\t\tclearOnShrink: this.settingsManager.getClearOnShrink(),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonAutoCompactChange: (enabled) => {\n\t\t\t\t\t\tthis.session.setAutoCompactionEnabled(enabled);\n\t\t\t\t\t\tthis.footer.setAutoCompactEnabled(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonShowImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowImages(enabled);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof ToolExecutionComponent) {\n\t\t\t\t\t\t\t\tchild.setShowImages(enabled);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutoResizeImagesChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setImageAutoResize(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonBlockImagesChange: (blocked) => {\n\t\t\t\t\t\tthis.settingsManager.setBlockImages(blocked);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableSkillCommandsChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setEnableSkillCommands(enabled);\n\t\t\t\t\t\tthis.setupAutocomplete(this.fdPath);\n\t\t\t\t\t},\n\t\t\t\t\tonSteeringModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setSteeringMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonFollowUpModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setFollowUpMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonStreamInputModeChange: (mode) => {\n\t\t\t\t\t\tthis.session.setStreamInputMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonTransportChange: (transport) => {\n\t\t\t\t\t\tthis.settingsManager.setTransport(transport);\n\t\t\t\t\t\tthis.session.agent.setTransport(transport);\n\t\t\t\t\t},\n\t\t\t\t\tonThinkingLevelChange: (level) => {\n\t\t\t\t\t\tthis.session.setThinkingLevel(level);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t},\n\t\t\t\t\tonThemeChange: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tthis.settingsManager.setTheme(themeName);\n\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${result.error}\\nFell back to dark theme.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonThemePreview: (themeName) => {\n\t\t\t\t\t\tconst result = setTheme(themeName, true);\n\t\t\t\t\t\tif (result.success) {\n\t\t\t\t\t\t\tthis.ui.invalidate();\n\t\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonHideThinkingBlockChange: (hidden) => {\n\t\t\t\t\t\tthis.hideThinkingBlock = hidden;\n\t\t\t\t\t\tthis.settingsManager.setHideThinkingBlock(hidden);\n\t\t\t\t\t\tfor (const child of this.chatContainer.children) {\n\t\t\t\t\t\t\tif (child instanceof AssistantMessageComponent) {\n\t\t\t\t\t\t\t\tchild.setHideThinkingBlock(hidden);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.rebuildChatFromMessages();\n\t\t\t\t\t},\n\t\t\t\t\tonCollapseChangelogChange: (collapsed) => {\n\t\t\t\t\t\tthis.settingsManager.setCollapseChangelog(collapsed);\n\t\t\t\t\t},\n\t\t\t\t\tonQuietStartupChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setQuietStartup(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonDoubleEscapeActionChange: (action) => {\n\t\t\t\t\t\tthis.settingsManager.setDoubleEscapeAction(action);\n\t\t\t\t\t},\n\t\t\t\t\tonTreeFilterModeChange: (mode) => {\n\t\t\t\t\t\tthis.settingsManager.setTreeFilterMode(mode);\n\t\t\t\t\t},\n\t\t\t\t\tonShowHardwareCursorChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setShowHardwareCursor(enabled);\n\t\t\t\t\t\tthis.ui.setShowHardwareCursor(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonEditorPaddingXChange: (padding) => {\n\t\t\t\t\t\tthis.settingsManager.setEditorPaddingX(padding);\n\t\t\t\t\t\tthis.defaultEditor.setPaddingX(padding);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setPaddingX !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setPaddingX(padding);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonAutocompleteMaxVisibleChange: (maxVisible) => {\n\t\t\t\t\t\tthis.settingsManager.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\tif (this.editor !== this.defaultEditor && this.editor.setAutocompleteMaxVisible !== undefined) {\n\t\t\t\t\t\t\tthis.editor.setAutocompleteMaxVisible(maxVisible);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tonClearOnShrinkChange: (enabled) => {\n\t\t\t\t\t\tthis.settingsManager.setClearOnShrink(enabled);\n\t\t\t\t\t\tthis.ui.setClearOnShrink(enabled);\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getSettingsList() };\n\t\t});\n\t}\n\n\tprivate async handleModelCommand(searchTerm?: string): Promise<void> {\n\t\tif (!searchTerm) {\n\t\t\tawait this.showModelProviderSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = await this.findExactModelMatch(searchTerm);\n\t\tif (model) {\n\t\t\ttry {\n\t\t\t\tawait this.session.setModel(model);\n\t\t\t\tthis.footer.invalidate();\n\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\tthis.refreshBuiltInHeader();\n\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showModelSelector(searchTerm);\n\t}\n\n\tprivate async showModelProviderSelector(preferredProvider?: string): Promise<void> {\n\t\tthis.session.modelRegistry.refresh();\n\t\tlet models: Model<any>[] = [];\n\t\ttry {\n\t\t\tmodels = await this.session.modelRegistry.getAvailable();\n\t\t} catch {\n\t\t\tmodels = [];\n\t\t}\n\t\tif (models.length === 0) {\n\t\t\tif (preferredProvider) {\n\t\t\t\t// Fallback for transient registry/load errors: still open model selector\n\t\t\t\t// with a provider hint so login flow can continue.\n\t\t\t\tthis.showModelSelector(preferredProvider);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.showStatus(\"No models available\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst providerCounts = new Map<string, number>();\n\t\tfor (const model of models) {\n\t\t\tproviderCounts.set(model.provider, (providerCounts.get(model.provider) ?? 0) + 1);\n\t\t}\n\t\tconst providers = Array.from(providerCounts.entries()).sort(([a], [b]) => a.localeCompare(b));\n\t\tif (providers.length === 0) {\n\t\t\tthis.showStatus(\"No providers available\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (preferredProvider) {\n\t\t\tconst preferred = providers.find(([provider]) => provider.toLowerCase() === preferredProvider.toLowerCase());\n\t\t\tif (preferred) {\n\t\t\t\tthis.showModelSelector(undefined, preferred[0]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (providers.length === 1) {\n\t\t\tthis.showModelSelector(undefined, providers[0]?.[0]);\n\t\t\treturn;\n\t\t}\n\n\t\tconst optionMap = new Map<string, string>();\n\t\tconst options = [\"All providers\"];\n\t\tfor (const [provider, count] of providers) {\n\t\t\tconst optionLabel = `${provider} (${count})`;\n\t\t\toptionMap.set(optionLabel, provider);\n\t\t\toptions.push(optionLabel);\n\t\t}\n\n\t\tconst selected = await this.showExtensionSelector(\"/model: choose provider\", options);\n\t\tif (!selected) return;\n\t\tif (selected === \"All providers\") {\n\t\t\tthis.showModelSelector();\n\t\t\treturn;\n\t\t}\n\n\t\tconst provider = optionMap.get(selected);\n\t\tif (!provider) {\n\t\t\tthis.showWarning(\"Provider selection is no longer available.\");\n\t\t\treturn;\n\t\t}\n\t\tthis.showModelSelector(undefined, provider);\n\t}\n\n\tprivate async findExactModelMatch(searchTerm: string): Promise<Model<any> | undefined> {\n\t\tconst term = searchTerm.trim();\n\t\tif (!term) return undefined;\n\n\t\tlet targetProvider: string | undefined;\n\t\tlet targetModelId = \"\";\n\n\t\tif (term.includes(\"/\")) {\n\t\t\tconst parts = term.split(\"/\", 2);\n\t\t\ttargetProvider = parts[0]?.trim().toLowerCase();\n\t\t\ttargetModelId = parts[1]?.trim().toLowerCase() ?? \"\";\n\t\t} else {\n\t\t\ttargetModelId = term.toLowerCase();\n\t\t}\n\n\t\tif (!targetModelId) return undefined;\n\n\t\tconst models = await this.getModelCandidates();\n\t\tconst exactMatches = models.filter((item) => {\n\t\t\tconst idMatch = item.id.toLowerCase() === targetModelId;\n\t\t\tconst providerMatch = !targetProvider || item.provider.toLowerCase() === targetProvider;\n\t\t\treturn idMatch && providerMatch;\n\t\t});\n\n\t\treturn exactMatches.length === 1 ? exactMatches[0] : undefined;\n\t}\n\n\tprivate async getModelCandidates(): Promise<Model<any>[]> {\n\t\tif (this.session.scopedModels.length > 0) {\n\t\t\treturn this.session.scopedModels.map((scoped) => scoped.model);\n\t\t}\n\n\t\tthis.session.modelRegistry.refresh();\n\t\ttry {\n\t\t\treturn await this.session.modelRegistry.getAvailable();\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/** Update the footer's available provider count from current model candidates */\n\tprivate async updateAvailableProviderCount(): Promise<void> {\n\t\tconst models = await this.getModelCandidates();\n\t\tconst uniqueProviders = new Set(models.map((m) => m.provider));\n\t\tthis.footerDataProvider.setAvailableProviderCount(uniqueProviders.size);\n\t\tthis.refreshBuiltInHeader();\n\t}\n\n\tprivate showModelSelector(initialSearchInput?: string, providerFilter?: string): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ModelSelectorComponent(\n\t\t\t\tthis.ui,\n\t\t\t\tthis.session.model,\n\t\t\t\tthis.settingsManager,\n\t\t\t\tthis.session.modelRegistry,\n\t\t\t\tthis.session.scopedModels,\n\t\t\t\tasync (model) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.session.setModel(model);\n\t\t\t\t\t\tthis.footer.invalidate();\n\t\t\t\t\t\tthis.updateEditorBorderColor();\n\t\t\t\t\t\tthis.refreshBuiltInHeader();\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(`Model: ${model.id}`);\n\t\t\t\t\t\tthis.checkDaxnutsEasterEgg(model);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSearchInput,\n\t\t\t\tproviderFilter,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async showModelsSelector(): Promise<void> {\n\t\t// Get all available models\n\t\tthis.session.modelRegistry.refresh();\n\t\tconst allModels = this.session.modelRegistry.getAvailable();\n\n\t\tif (allModels.length === 0) {\n\t\t\tthis.showStatus(\"No models available\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Check if session has scoped models (from previous session-only changes or CLI --models)\n\t\tconst sessionScopedModels = this.session.scopedModels;\n\t\tconst hasSessionScope = sessionScopedModels.length > 0;\n\n\t\t// Build enabled model IDs from session state or settings\n\t\tconst enabledModelIds = new Set<string>();\n\t\tlet hasFilter = false;\n\n\t\tif (hasSessionScope) {\n\t\t\t// Use current session's scoped models\n\t\t\tfor (const sm of sessionScopedModels) {\n\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\n\t\t\t}\n\t\t\thasFilter = true;\n\t\t} else {\n\t\t\t// Fall back to settings\n\t\t\tconst patterns = this.settingsManager.getEnabledModels();\n\t\t\tif (patterns !== undefined && patterns.length > 0) {\n\t\t\t\thasFilter = true;\n\t\t\t\tconst scopedModels = await resolveModelScope(patterns, this.session.modelRegistry);\n\t\t\t\tfor (const sm of scopedModels) {\n\t\t\t\t\tenabledModelIds.add(`${sm.model.provider}/${sm.model.id}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Track current enabled state (session-only until persisted)\n\t\tconst currentEnabledIds = new Set(enabledModelIds);\n\t\tlet currentHasFilter = hasFilter;\n\n\t\t// Helper to update session's scoped models (session-only, no persist)\n\t\tconst updateSessionModels = async (enabledIds: Set<string>) => {\n\t\t\tif (enabledIds.size > 0 && enabledIds.size < allModels.length) {\n\t\t\t\tconst newScopedModels = await resolveModelScope(Array.from(enabledIds), this.session.modelRegistry);\n\t\t\t\tthis.session.setScopedModels(\n\t\t\t\t\tnewScopedModels.map((sm) => ({\n\t\t\t\t\t\tmodel: sm.model,\n\t\t\t\t\t\tthinkingLevel: sm.thinkingLevel,\n\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// All enabled or none enabled = no filter\n\t\t\t\tthis.session.setScopedModels([]);\n\t\t\t}\n\t\t\tawait this.updateAvailableProviderCount();\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new ScopedModelsSelectorComponent(\n\t\t\t\t{\n\t\t\t\t\tallModels,\n\t\t\t\t\tenabledModelIds: currentEnabledIds,\n\t\t\t\t\thasEnabledModelsFilter: currentHasFilter,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tonModelToggle: async (modelId, enabled) => {\n\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\tcurrentEnabledIds.add(modelId);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcurrentEnabledIds.delete(modelId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonEnableAll: async (allModelIds) => {\n\t\t\t\t\t\tcurrentEnabledIds.clear();\n\t\t\t\t\t\tfor (const id of allModelIds) {\n\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = false;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonClearAll: async () => {\n\t\t\t\t\t\tcurrentEnabledIds.clear();\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonToggleProvider: async (_provider, modelIds, enabled) => {\n\t\t\t\t\t\tfor (const id of modelIds) {\n\t\t\t\t\t\t\tif (enabled) {\n\t\t\t\t\t\t\t\tcurrentEnabledIds.add(id);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcurrentEnabledIds.delete(id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentHasFilter = true;\n\t\t\t\t\t\tawait updateSessionModels(currentEnabledIds);\n\t\t\t\t\t},\n\t\t\t\t\tonPersist: (enabledIds) => {\n\t\t\t\t\t\t// Persist to settings\n\t\t\t\t\t\tconst newPatterns =\n\t\t\t\t\t\t\tenabledIds.length === allModels.length\n\t\t\t\t\t\t\t\t? undefined // All enabled = clear filter\n\t\t\t\t\t\t\t\t: enabledIds;\n\t\t\t\t\t\tthis.settingsManager.setEnabledModels(newPatterns);\n\t\t\t\t\t\tthis.showStatus(\"Model selection saved to settings\");\n\t\t\t\t\t},\n\t\t\t\t\tonCancel: () => {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showUserMessageSelector(): void {\n\t\tconst userMessages = this.session.getUserMessagesForForking();\n\n\t\tif (userMessages.length === 0) {\n\t\t\tthis.showStatus(\"No messages to fork from\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new UserMessageSelectorComponent(\n\t\t\t\tuserMessages.map((m) => ({ id: m.entryId, text: m.text })),\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\tconst result = await this.session.fork(entryId);\n\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t// Extension cancelled the fork\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\tthis.editor.setText(result.selectedText);\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.showStatus(\"Branched to new session\");\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector.getMessageList() };\n\t\t});\n\t}\n\n\tprivate showTreeSelector(initialSelectedId?: string): void {\n\t\tconst tree = this.sessionManager.getTree();\n\t\tconst realLeafId = this.sessionManager.getLeafId();\n\t\tconst initialFilterMode = this.settingsManager.getTreeFilterMode();\n\n\t\tif (tree.length === 0) {\n\t\t\tthis.showStatus(\"No entries in session\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new TreeSelectorComponent(\n\t\t\t\ttree,\n\t\t\t\trealLeafId,\n\t\t\t\tthis.ui.terminal.rows,\n\t\t\t\tasync (entryId) => {\n\t\t\t\t\t// Selecting the current leaf is a no-op (already there)\n\t\t\t\t\tif (entryId === realLeafId) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t\tthis.showStatus(\"Already at this point\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ask about summarization\n\t\t\t\t\tdone(); // Close selector first\n\n\t\t\t\t\t// Loop until user makes a complete choice or cancels to tree\n\t\t\t\t\tlet wantsSummary = false;\n\t\t\t\t\tlet customInstructions: string | undefined;\n\n\t\t\t\t\t// Check if we should skip the prompt (user preference to always default to no summary)\n\t\t\t\t\tif (!this.settingsManager.getBranchSummarySkipPrompt()) {\n\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\tconst summaryChoice = await this.showExtensionSelector(\"Summarize branch?\", [\n\t\t\t\t\t\t\t\t\"No summary\",\n\t\t\t\t\t\t\t\t\"Summarize\",\n\t\t\t\t\t\t\t\t\"Summarize with custom prompt\",\n\t\t\t\t\t\t\t]);\n\n\t\t\t\t\t\t\tif (summaryChoice === undefined) {\n\t\t\t\t\t\t\t\t// User pressed escape - re-show tree selector with same selection\n\t\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\twantsSummary = summaryChoice !== \"No summary\";\n\n\t\t\t\t\t\t\tif (summaryChoice === \"Summarize with custom prompt\") {\n\t\t\t\t\t\t\t\tcustomInstructions = await this.showExtensionEditor(\"Custom summarization instructions\");\n\t\t\t\t\t\t\t\tif (customInstructions === undefined) {\n\t\t\t\t\t\t\t\t\t// User cancelled - loop back to summary selector\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// User made a complete choice\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set up escape handler and loader if summarizing\n\t\t\t\t\tlet summaryLoader: Loader | undefined;\n\t\t\t\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\n\t\t\t\t\tif (wantsSummary) {\n\t\t\t\t\t\tthis.defaultEditor.onEscape = () => {\n\t\t\t\t\t\t\tvoid this.interruptCurrentWork();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\t\t\tsummaryLoader = new Loader(\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t\t\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\t\t\t\t\t`Summarizing branch... (${appKey(this.keybindings, \"interrupt\")} to cancel)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.statusContainer.addChild(summaryLoader);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = await this.session.navigateTree(entryId, {\n\t\t\t\t\t\t\tsummarize: wantsSummary,\n\t\t\t\t\t\t\tcustomInstructions,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (result.aborted) {\n\t\t\t\t\t\t\t// Summarization aborted - re-show tree selector with same selection\n\t\t\t\t\t\t\tthis.showStatus(\"Branch summarization cancelled\");\n\t\t\t\t\t\t\tthis.showTreeSelector(entryId);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.cancelled) {\n\t\t\t\t\t\t\tthis.showStatus(\"Navigation cancelled\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update UI\n\t\t\t\t\t\tthis.chatContainer.clear();\n\t\t\t\t\t\tthis.renderInitialMessages();\n\t\t\t\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.showStatus(\"Navigated to selected point\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif (summaryLoader) {\n\t\t\t\t\t\t\tsummaryLoader.stop();\n\t\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t(entryId, label) => {\n\t\t\t\t\tthis.sessionManager.appendLabelChange(entryId, label);\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\tinitialSelectedId,\n\t\t\t\tinitialFilterMode,\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate showSessionSelector(): void {\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\t(onProgress) =>\n\t\t\t\t\tSessionManager.list(this.sessionManager.getCwd(), this.sessionManager.getSessionDir(), onProgress),\n\t\t\t\tSessionManager.listAll,\n\t\t\t\tasync (sessionPath) => {\n\t\t\t\t\tdone();\n\t\t\t\t\tawait this.handleResumeSession(sessionPath);\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tvoid this.shutdown();\n\t\t\t\t},\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{\n\t\t\t\t\trenameSession: async (sessionFilePath: string, nextName: string | undefined) => {\n\t\t\t\t\t\tconst next = (nextName ?? \"\").trim();\n\t\t\t\t\t\tif (!next) return;\n\t\t\t\t\t\tconst mgr = SessionManager.open(sessionFilePath);\n\t\t\t\t\t\tmgr.appendSessionInfo(next);\n\t\t\t\t\t},\n\t\t\t\t\tshowRenameHint: true,\n\t\t\t\t\tkeybindings: this.keybindings,\n\t\t\t\t},\n\n\t\t\t\tthis.sessionManager.getSessionFile(),\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate async handleResumeSession(sessionPath: string): Promise<void> {\n\t\tthis.contractService.clear(\"session\");\n\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// Clear UI state\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\n\t\t// Switch session via AgentSession (emits extension session events)\n\t\tawait this.session.switchSession(sessionPath);\n\n\t\t// Clear and re-render the chat\n\t\tthis.chatContainer.clear();\n\t\tthis.renderInitialMessages();\n\t\tthis.syncRuntimePromptSuffix();\n\t\tthis.refreshBuiltInHeader();\n\t\tthis.showStatus(\"Resumed session\");\n\t}\n\n\tprivate async showOAuthSelector(mode: \"login\" | \"logout\"): Promise<void> {\n\t\tif (mode === \"logout\") {\n\t\t\tconst providers = this.session.modelRegistry.authStorage.list();\n\t\t\tconst loggedInProviders = providers.filter((provider) => {\n\t\t\t\tconst credential = this.session.modelRegistry.authStorage.get(provider);\n\t\t\t\treturn credential?.type === \"oauth\" || credential?.type === \"api_key\";\n\t\t\t});\n\t\t\tif (loggedInProviders.length === 0) {\n\t\t\t\tthis.showStatus(\"No saved provider credentials. Use /login first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.showSelector((done) => {\n\t\t\tconst selector = new OAuthSelectorComponent(\n\t\t\t\tmode,\n\t\t\t\tthis.session.modelRegistry.authStorage,\n\t\t\t\tasync (providerId: string) => {\n\t\t\t\t\tdone();\n\n\t\t\t\t\tif (mode === \"login\") {\n\t\t\t\t\t\tif (providerId === OPENROUTER_PROVIDER_ID) {\n\t\t\t\t\t\t\tawait this.handleOpenRouterApiKeyLogin();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait this.showLoginDialog(providerId);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Logout flow\n\t\t\t\t\t\tconst providerName = this.getProviderDisplayName(providerId);\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tthis.session.modelRegistry.authStorage.logout(providerId);\n\t\t\t\t\t\t\tthis.session.modelRegistry.refresh();\n\t\t\t\t\t\t\tawait this.updateAvailableProviderCount();\n\t\t\t\t\t\t\tthis.showStatus(`Logged out of ${providerName}`);\n\t\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\t\tthis.showError(`Logout failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn { component: selector, focus: selector };\n\t\t});\n\t}\n\n\tprivate getProviderDisplayName(providerId: string): string {\n\t\tif (providerId === OPENROUTER_PROVIDER_ID) {\n\t\t\treturn \"OpenRouter\";\n\t\t}\n\t\tconst providerInfo = this.session.modelRegistry.authStorage.getOAuthProviders().find((p) => p.id === providerId);\n\t\treturn providerInfo?.name || providerId;\n\t}\n\n\tprivate async handleOpenRouterApiKeyLogin(options?: { openModelSelector?: boolean }): Promise<void> {\n\t\tconst openModelSelector = options?.openModelSelector ?? true;\n\t\tconst providerName = this.getProviderDisplayName(OPENROUTER_PROVIDER_ID);\n\t\tconst existingCredential = this.session.modelRegistry.authStorage.get(OPENROUTER_PROVIDER_ID);\n\t\tif (existingCredential) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\n\t\t\t\t`${providerName}: replace existing credentials?`,\n\t\t\t\t`Stored at ${getAuthPath()}`,\n\t\t\t);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(`${providerName} login cancelled.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst keyInput = await this.showExtensionInput(\n\t\t\t`${providerName} API key\\nCreate key: https://openrouter.ai/keys`,\n\t\t\t\"sk-or-v1-...\",\n\t\t);\n\t\tif (keyInput === undefined) {\n\t\t\tthis.showStatus(`${providerName} login cancelled.`);\n\t\t\treturn;\n\t\t}\n\t\tconst apiKey = keyInput.trim();\n\t\tif (!apiKey) {\n\t\t\tthis.showWarning(`${providerName} API key cannot be empty.`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.session.modelRegistry.authStorage.set(OPENROUTER_PROVIDER_ID, { type: \"api_key\", key: apiKey });\n\t\tawait this.updateAvailableProviderCount();\n\t\tthis.showStatus(`${providerName} API key saved to ${getAuthPath()}`);\n\t\tif (openModelSelector) {\n\t\t\tawait this.showModelProviderSelector(OPENROUTER_PROVIDER_ID);\n\t\t}\n\t}\n\n\tprivate async showLoginDialog(providerId: string): Promise<void> {\n\t\tconst providerInfo = this.session.modelRegistry.authStorage.getOAuthProviders().find((p) => p.id === providerId);\n\t\tconst providerName = this.getProviderDisplayName(providerId);\n\n\t\t// Providers that use callback servers (can paste redirect URL)\n\t\tconst usesCallbackServer = providerInfo?.usesCallbackServer ?? false;\n\n\t\t// Create login dialog component\n\t\tconst dialog = new LoginDialogComponent(this.ui, providerId, (_success, _message) => {\n\t\t\t// Completion handled below\n\t\t});\n\n\t\t// Show dialog in editor container\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(dialog);\n\t\tthis.ui.setFocus(dialog);\n\t\tthis.ui.requestRender();\n\n\t\t// Promise for manual code input (racing with callback server)\n\t\tlet manualCodeResolve: ((code: string) => void) | undefined;\n\t\tlet manualCodeReject: ((err: Error) => void) | undefined;\n\t\tconst manualCodePromise = new Promise<string>((resolve, reject) => {\n\t\t\tmanualCodeResolve = resolve;\n\t\t\tmanualCodeReject = reject;\n\t\t});\n\n\t\t// Restore editor helper\n\t\tconst restoreEditor = () => {\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.modelRegistry.authStorage.login(providerId as OAuthProviderId, {\n\t\t\t\tonAuth: (info: { url: string; instructions?: string }) => {\n\t\t\t\t\tdialog.showAuth(info.url, info.instructions);\n\n\t\t\t\t\tif (usesCallbackServer) {\n\t\t\t\t\t\t// Show input for manual paste, racing with callback\n\t\t\t\t\t\tdialog\n\t\t\t\t\t\t\t.showManualInput(\"Paste redirect URL below, or complete login in browser:\")\n\t\t\t\t\t\t\t.then((value) => {\n\t\t\t\t\t\t\t\tif (value && manualCodeResolve) {\n\t\t\t\t\t\t\t\t\tmanualCodeResolve(value);\n\t\t\t\t\t\t\t\t\tmanualCodeResolve = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\tif (manualCodeReject) {\n\t\t\t\t\t\t\t\t\tmanualCodeReject(new Error(\"Login cancelled\"));\n\t\t\t\t\t\t\t\t\tmanualCodeReject = undefined;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} else if (providerId === \"github-copilot\") {\n\t\t\t\t\t\t// GitHub Copilot polls after onAuth\n\t\t\t\t\t\tdialog.showWaiting(\"Waiting for browser authentication...\");\n\t\t\t\t\t}\n\t\t\t\t\t// For Anthropic: onPrompt is called immediately after\n\t\t\t\t},\n\n\t\t\t\tonPrompt: async (prompt: { message: string; placeholder?: string }) => {\n\t\t\t\t\treturn dialog.showPrompt(prompt.message, prompt.placeholder);\n\t\t\t\t},\n\n\t\t\t\tonProgress: (message: string) => {\n\t\t\t\t\tdialog.showProgress(message);\n\t\t\t\t},\n\n\t\t\t\tonManualCodeInput: () => manualCodePromise,\n\n\t\t\t\tsignal: dialog.signal,\n\t\t\t});\n\n\t\t\t// Success\n\t\t\trestoreEditor();\n\t\t\tawait this.updateAvailableProviderCount();\n\t\t\tthis.showStatus(`Logged in to ${providerName}. Credentials saved to ${getAuthPath()}`);\n\t\t\tawait this.showModelProviderSelector(providerId);\n\t\t} catch (error: unknown) {\n\t\t\trestoreEditor();\n\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\tif (errorMsg !== \"Login cancelled\") {\n\t\t\t\tthis.showError(`Failed to login to ${providerName}: ${errorMsg}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// =========================================================================\n\t// Command handlers\n\t// =========================================================================\n\n\tprivate parseSlashArgs(input: string): string[] {\n\t\tconst args: string[] = [];\n\t\tlet current = \"\";\n\t\tlet quote: '\"' | \"'\" | undefined;\n\t\tlet escape = false;\n\n\t\tfor (const ch of input.trim()) {\n\t\t\tif (escape) {\n\t\t\t\tcurrent += ch;\n\t\t\t\tescape = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === \"\\\\\") {\n\t\t\t\tescape = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (quote) {\n\t\t\t\tif (ch === quote) {\n\t\t\t\t\tquote = undefined;\n\t\t\t\t} else {\n\t\t\t\t\tcurrent += ch;\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '\"' || ch === \"'\") {\n\t\t\t\tquote = ch;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (/\\s/.test(ch)) {\n\t\t\t\tif (current) {\n\t\t\t\t\targs.push(current);\n\t\t\t\t\tcurrent = \"\";\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcurrent += ch;\n\t\t}\n\n\t\tif (escape) {\n\t\t\tcurrent += \"\\\\\";\n\t\t}\n\t\tif (current) {\n\t\t\targs.push(current);\n\t\t}\n\n\t\treturn args;\n\t}\n\n\tprivate parseMemoryScopeOptions(args: string[]): { scope: MemoryScope; rest: string[]; error?: string } {\n\t\tlet scope: MemoryScope = \"project\";\n\t\tconst rest: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst token = args[index] ?? \"\";\n\t\t\tconst normalized = token.toLowerCase();\n\n\t\t\tif (normalized === \"--project\") {\n\t\t\t\tscope = \"project\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (normalized === \"--user\") {\n\t\t\t\tscope = \"user\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (normalized === \"--scope\") {\n\t\t\t\tconst value = (args[index + 1] ?? \"\").toLowerCase();\n\t\t\t\tif (!value) {\n\t\t\t\t\treturn { scope, rest, error: \"Usage: /memory ... --scope <project|user>\" };\n\t\t\t\t}\n\t\t\t\tif (value !== \"project\" && value !== \"user\") {\n\t\t\t\t\treturn { scope, rest, error: `Invalid memory scope \"${value}\". Use project or user.` };\n\t\t\t\t}\n\t\t\t\tscope = value;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trest.push(token);\n\t\t}\n\n\t\treturn { scope, rest };\n\t}\n\n\tprivate resolveMemoryPath(scope: MemoryScope): string {\n\t\treturn getMemoryFilePath(scope, this.sessionManager.getCwd(), getAgentDir());\n\t}\n\n\tprivate formatMemoryEntriesReport(\n\t\tscope: MemoryScope,\n\t\tfilePath: string,\n\t\tentries: Array<{ text: string; timestamp?: string }>,\n\t\tfileExists: boolean,\n\t\thasManagedBlock: boolean,\n\t): string {\n\t\tconst lines = [`Scope: ${scope}`, `File: ${filePath}`, \"\"];\n\t\tif (entries.length === 0) {\n\t\t\tif (!fileExists) {\n\t\t\t\tlines.push(\"Memory file does not exist yet.\");\n\t\t\t} else if (!hasManagedBlock) {\n\t\t\t\tlines.push(\"Managed memory block not found in file.\");\n\t\t\t} else {\n\t\t\t\tlines.push(\"No memory entries yet.\");\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let index = 0; index < entries.length; index++) {\n\t\t\t\tconst entry = entries[index]!;\n\t\t\t\tconst prefix = entry.timestamp ? `[${entry.timestamp}] ` : \"\";\n\t\t\t\tlines.push(`${index + 1}. ${prefix}${entry.text}`);\n\t\t\t}\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"Usage:\");\n\t\tlines.push(\" /memory # interactive manager\");\n\t\tlines.push(\" /memory <text>\");\n\t\tlines.push(\" /memory add <text> [--scope project|user]\");\n\t\tlines.push(\" /memory edit <index> <text> [--scope project|user]\");\n\t\tlines.push(\" /memory list [--scope project|user]\");\n\t\tlines.push(\" /memory rm <index> [--scope project|user]\");\n\t\tlines.push(\" /memory path [--scope project|user]\");\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate formatMemoryEntryOption(index: number, entry: { text: string; timestamp?: string }): string {\n\t\tconst timestamp = entry.timestamp ? `[${entry.timestamp}] ` : \"\";\n\t\tconst preview = entry.text.length > 90 ? `${entry.text.slice(0, 87)}...` : entry.text;\n\t\treturn `${index}. ${timestamp}${preview}`;\n\t}\n\n\tprivate async selectMemoryEntry(\n\t\tscope: MemoryScope,\n\t\taction: string,\n\t\tentries: Array<{ text: string; timestamp?: string }>,\n\t): Promise<{ index: number; entry: { text: string; timestamp?: string } } | undefined> {\n\t\tif (entries.length === 0) {\n\t\t\tthis.showStatus(`No memory entries in ${scope} scope.`);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = entries.map((entry, index) => this.formatMemoryEntryOption(index + 1, entry));\n\t\tconst picked = await this.showExtensionSelector(`/memory: ${action} (${scope})`, options);\n\t\tif (!picked) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst selectedIndex = options.indexOf(picked);\n\t\tif (selectedIndex < 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst entry = entries[selectedIndex];\n\t\tif (!entry) return undefined;\n\t\treturn { index: selectedIndex + 1, entry };\n\t}\n\n\tprivate async reloadAfterMemoryMutation(successMessage: string, reloadFailurePrefix: string): Promise<void> {\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tthis.showStatus(successMessage);\n\t\t} catch (reloadError) {\n\t\t\tconst message = reloadError instanceof Error ? reloadError.message : String(reloadError);\n\t\t\tthis.showWarning(`${reloadFailurePrefix}: ${message}`);\n\t\t}\n\t\tthis.refreshBuiltInHeader();\n\t}\n\n\tprivate async addMemoryViaCommand(scope: MemoryScope, memoryPath: string, rawText: string): Promise<void> {\n\t\tconst saved = addMemoryEntry(memoryPath, rawText);\n\t\tconst preview = saved.entry.text.length > 80 ? `${saved.entry.text.slice(0, 77)}...` : saved.entry.text;\n\t\tawait this.reloadAfterMemoryMutation(\n\t\t\t`Memory saved (${scope}) #${saved.count}: ${preview}`,\n\t\t\t\"Memory saved but context reload failed\",\n\t\t);\n\t}\n\n\tprivate async updateMemoryViaCommand(\n\t\tscope: MemoryScope,\n\t\tmemoryPath: string,\n\t\tindex: number,\n\t\trawText: string,\n\t): Promise<void> {\n\t\tconst updated = updateMemoryEntry(memoryPath, index, rawText);\n\t\tconst preview = updated.entry.text.length > 80 ? `${updated.entry.text.slice(0, 77)}...` : updated.entry.text;\n\t\tawait this.reloadAfterMemoryMutation(\n\t\t\t`Updated memory #${index} (${scope}): ${preview}`,\n\t\t\t\"Memory updated but context reload failed\",\n\t\t);\n\t}\n\n\tprivate async removeMemoryViaCommand(scope: MemoryScope, memoryPath: string, index: number): Promise<void> {\n\t\tconst removed = removeMemoryEntry(memoryPath, index);\n\t\tawait this.reloadAfterMemoryMutation(\n\t\t\t`Removed memory #${index} (${scope}). Remaining: ${removed.count}`,\n\t\t\t\"Memory removed but context reload failed\",\n\t\t);\n\t}\n\n\tprivate async runMemoryInteractiveMenu(initialScope: MemoryScope): Promise<void> {\n\t\tlet scope: MemoryScope = initialScope;\n\n\t\twhile (true) {\n\t\t\tconst memoryPath = this.resolveMemoryPath(scope);\n\t\t\tlet summary;\n\t\t\ttry {\n\t\t\t\tsummary = readMemoryEntries(memoryPath);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst fileExists = fs.existsSync(memoryPath);\n\t\t\tconst entries = summary.entries;\n\n\t\t\tconst optionAdd = \"Add entry\";\n\t\t\tconst optionEdit = entries.length > 0 ? \"Edit entry\" : \"Edit entry (no entries)\";\n\t\t\tconst optionRemove = entries.length > 0 ? \"Remove entry\" : \"Remove entry (no entries)\";\n\t\t\tconst optionShow = \"Show entries\";\n\t\t\tconst optionPath = \"Show file path\";\n\t\t\tconst optionSwitchScope = `Switch scope (${scope === \"project\" ? \"to user\" : \"to project\"})`;\n\t\t\tconst optionClose = \"Close\";\n\t\t\tconst options = [optionAdd, optionEdit, optionRemove, optionShow, optionPath, optionSwitchScope, optionClose];\n\n\t\t\tconst selected = await this.showExtensionSelector(\n\t\t\t\t`/memory manager (${scope})\\n${memoryPath}\\nentries: ${entries.length}${fileExists ? \"\" : \" (file missing)\"}`,\n\t\t\t\toptions,\n\t\t\t);\n\t\t\tif (!selected || selected === optionClose) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === optionAdd) {\n\t\t\t\tconst rawText = await this.showExtensionInput(`/memory add (${scope})`, \"project starts via PM2\");\n\t\t\t\tif (rawText === undefined) continue;\n\t\t\t\tif (!rawText.trim()) {\n\t\t\t\t\tthis.showWarning(\"Memory text cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.addMemoryViaCommand(scope, memoryPath, rawText);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionEdit) {\n\t\t\t\tconst chosen = await this.selectMemoryEntry(scope, \"edit\", entries);\n\t\t\t\tif (!chosen) continue;\n\t\t\t\tconst edited = await this.showExtensionEditor(\n\t\t\t\t\t`Edit memory #${chosen.index} (${scope})`,\n\t\t\t\t\tchosen.entry.text,\n\t\t\t\t);\n\t\t\t\tif (edited === undefined) continue;\n\t\t\t\tif (!edited.trim()) {\n\t\t\t\t\tthis.showWarning(\"Memory text cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.updateMemoryViaCommand(scope, memoryPath, chosen.index, edited);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionRemove) {\n\t\t\t\tconst chosen = await this.selectMemoryEntry(scope, \"remove\", entries);\n\t\t\t\tif (!chosen) continue;\n\t\t\t\tconst confirmed = await this.showExtensionConfirm(\n\t\t\t\t\t\"Remove memory entry?\",\n\t\t\t\t\t`${this.formatMemoryEntryOption(chosen.index, chosen.entry)}\\n${memoryPath}`,\n\t\t\t\t);\n\t\t\t\tif (!confirmed) {\n\t\t\t\t\tthis.showStatus(\"Memory remove cancelled.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this.removeMemoryViaCommand(scope, memoryPath, chosen.index);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionShow) {\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t\"Memory\",\n\t\t\t\t\tthis.formatMemoryEntriesReport(scope, memoryPath, entries, fileExists, summary.hasManagedBlock),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionPath) {\n\t\t\t\tthis.showCommandTextBlock(\"Memory Path\", `Scope: ${scope}\\nFile: ${memoryPath}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected === optionSwitchScope) {\n\t\t\t\tscope = scope === \"project\" ? \"user\" : \"project\";\n\t\t\t\tthis.showStatus(`Memory manager switched to ${scope} scope.`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleMemoryCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst parsedScope = this.parseMemoryScopeOptions(args);\n\t\tif (parsedScope.error) {\n\t\t\tthis.showWarning(parsedScope.error);\n\t\t\treturn;\n\t\t}\n\n\t\tconst { scope, rest } = parsedScope;\n\t\tconst subcommand = rest[0]?.toLowerCase();\n\n\t\tif (!subcommand || subcommand === \"ui\") {\n\t\t\tawait this.runMemoryInteractiveMenu(scope);\n\t\t\treturn;\n\t\t}\n\n\t\tconst memoryPath = this.resolveMemoryPath(scope);\n\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\ttry {\n\t\t\t\tconst summary = readMemoryEntries(memoryPath);\n\t\t\t\tconst fileExists = fs.existsSync(memoryPath);\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t\"Memory\",\n\t\t\t\t\tthis.formatMemoryEntriesReport(scope, memoryPath, summary.entries, fileExists, summary.hasManagedBlock),\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Memory Help\",\n\t\t\t\t[\n\t\t\t\t\t\"Usage:\",\n\t\t\t\t\t\" /memory [--scope project|user]\",\n\t\t\t\t\t\" /memory ui [--scope project|user]\",\n\t\t\t\t\t\" /memory <text> [--scope project|user]\",\n\t\t\t\t\t\" /memory add <text> [--scope project|user]\",\n\t\t\t\t\t\" /memory edit <index> <text> [--scope project|user]\",\n\t\t\t\t\t\" /memory list [--scope project|user]\",\n\t\t\t\t\t\" /memory rm <index> [--scope project|user]\",\n\t\t\t\t\t\" /memory path [--scope project|user]\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Examples:\",\n\t\t\t\t\t\" /memory\",\n\t\t\t\t\t\" /memory project starts via PM2\",\n\t\t\t\t\t\" /memory add deploy via npm run deploy --scope project\",\n\t\t\t\t\t\" /memory edit 1 deploy via pnpm run deploy\",\n\t\t\t\t\t\" /memory rm 2\",\n\t\t\t\t\t\" /memory list --scope user\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"path\") {\n\t\t\tconst lines = [`Scope: ${scope}`, `File: ${memoryPath}`];\n\t\t\tthis.showCommandTextBlock(\"Memory Path\", lines.join(\"\\n\"));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"edit\" || subcommand === \"update\") {\n\t\t\tconst rawIndex = (rest[1] ?? \"\").trim();\n\t\t\tif (!rawIndex) {\n\t\t\t\tthis.showWarning(\"Usage: /memory edit <index> <text> [--scope project|user]\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = Number.parseInt(rawIndex, 10);\n\t\t\tif (!Number.isFinite(index) || `${index}` !== rawIndex || index < 1) {\n\t\t\t\tthis.showWarning(`Invalid memory index \"${rawIndex}\". Use a positive integer.`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet rawText = rest.slice(2).join(\" \").trim();\n\t\t\tif (!rawText) {\n\t\t\t\ttry {\n\t\t\t\t\tconst summary = readMemoryEntries(memoryPath);\n\t\t\t\t\tconst target = summary.entries[index - 1];\n\t\t\t\t\tif (!target) {\n\t\t\t\t\t\tthis.showWarning(`Memory entry #${index} not found.`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst edited = await this.showExtensionEditor(`Edit memory #${index} (${scope})`, target.text);\n\t\t\t\t\tif (edited === undefined) {\n\t\t\t\t\t\tthis.showStatus(\"Memory edit cancelled.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\trawText = edited;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.updateMemoryViaCommand(scope, memoryPath, index, rawText);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"rm\" || subcommand === \"remove\" || subcommand === \"delete\") {\n\t\t\tconst rawIndex = (rest[1] ?? \"\").trim();\n\t\t\tif (!rawIndex) {\n\t\t\t\tthis.showWarning(\"Usage: /memory rm <index> [--scope project|user]\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = Number.parseInt(rawIndex, 10);\n\t\t\tif (!Number.isFinite(index) || `${index}` !== rawIndex || index < 1) {\n\t\t\t\tthis.showWarning(`Invalid memory index \"${rawIndex}\". Use a positive integer.`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.removeMemoryViaCommand(scope, memoryPath, index);\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.showWarning(message);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst rawText = subcommand === \"add\" ? rest.slice(1).join(\" \").trim() : rest.join(\" \").trim();\n\t\tif (!rawText) {\n\t\t\tthis.showWarning(\"Usage: /memory <text> [--scope project|user]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tawait this.addMemoryViaCommand(scope, memoryPath, rawText);\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate createSemanticRuntime(): SemanticSearchRuntime {\n\t\treturn new SemanticSearchRuntime({\n\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\tagentDir: getAgentDir(),\n\t\t\tauthStorage: this.session.modelRegistry.authStorage,\n\t\t});\n\t}\n\n\tprivate parseSemanticScopeOptions(\n\t\targs: string[],\n\t\tusage: string = \"Usage: /semantic setup --scope <user|project>\",\n\t): {\n\t\tscope: SemanticScope | undefined;\n\t\trest: string[];\n\t\terror?: string;\n\t} {\n\t\tlet scope: SemanticScope | undefined;\n\t\tconst rest: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst token = args[index] ?? \"\";\n\t\t\tconst normalized = token.toLowerCase();\n\n\t\t\tif (normalized === \"--scope\") {\n\t\t\t\tconst value = (args[index + 1] ?? \"\").toLowerCase();\n\t\t\t\tif (!value) {\n\t\t\t\t\treturn { scope, rest, error: usage };\n\t\t\t\t}\n\t\t\t\tif (value !== \"user\" && value !== \"project\") {\n\t\t\t\t\treturn { scope, rest, error: `Invalid semantic scope \"${value}\". Use user or project.` };\n\t\t\t\t}\n\t\t\t\tscope = value;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trest.push(token);\n\t\t}\n\n\t\treturn { scope, rest };\n\t}\n\n\tprivate parseSemanticTopKOptions(args: string[]): {\n\t\ttopK?: number;\n\t\trest: string[];\n\t\terror?: string;\n\t} {\n\t\tlet topK: number | undefined;\n\t\tconst rest: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst token = args[index] ?? \"\";\n\t\t\tconst normalized = token.toLowerCase();\n\t\t\tif (normalized === \"--top-k\" || normalized === \"--topk\") {\n\t\t\t\tconst raw = (args[index + 1] ?? \"\").trim();\n\t\t\t\tif (!raw) {\n\t\t\t\t\treturn { topK, rest, error: \"Usage: /semantic query <text> [--top-k 1..20]\" };\n\t\t\t\t}\n\t\t\t\tconst parsed = Number.parseInt(raw, 10);\n\t\t\t\tif (!Number.isFinite(parsed) || `${parsed}` !== raw || parsed < 1 || parsed > 20) {\n\t\t\t\t\treturn { topK, rest, error: \"--top-k must be an integer between 1 and 20.\" };\n\t\t\t\t}\n\t\t\t\ttopK = parsed;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trest.push(token);\n\t\t}\n\n\t\treturn { topK, rest };\n\t}\n\n\tprivate formatSemanticStatusReport(status: SemanticStatusResult): string {\n\t\tconst lines = [\n\t\t\t`configured: ${status.configured ? \"yes\" : \"no\"}`,\n\t\t\t`enabled: ${status.enabled ? \"yes\" : \"no\"}`,\n\t\t\t`auto_index: ${status.autoIndex ? \"on\" : \"off\"}`,\n\t\t\t`indexed: ${status.indexed ? \"yes\" : \"no\"}`,\n\t\t\t`stale: ${status.stale ? `yes${status.staleReason ? ` (${status.staleReason})` : \"\"}` : \"no\"}`,\n\t\t];\n\t\tif (status.provider) lines.push(`provider: ${status.provider}`);\n\t\tif (status.model) lines.push(`model: ${status.model}`);\n\t\tlines.push(`files: ${status.files}`);\n\t\tlines.push(`chunks: ${status.chunks}`);\n\t\tif (status.dimension !== undefined) lines.push(`dimension: ${status.dimension}`);\n\t\tif (status.ageSeconds !== undefined) lines.push(`age_seconds: ${status.ageSeconds}`);\n\t\tlines.push(`index_path: ${status.indexPath}`);\n\t\tlines.push(`config_user: ${status.configPathUser}`);\n\t\tlines.push(`config_project: ${status.configPathProject}`);\n\t\tif (!status.configured) {\n\t\t\tlines.push(\"hint: run /semantic setup\");\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate formatSemanticIndexReport(result: SemanticIndexOperationResult): string {\n\t\treturn [\n\t\t\t`action: ${result.action}`,\n\t\t\t`processed_files: ${result.processedFiles}`,\n\t\t\t`reused_files: ${result.reusedFiles}`,\n\t\t\t`new_files: ${result.newFiles}`,\n\t\t\t`changed_files: ${result.changedFiles}`,\n\t\t\t`removed_files: ${result.removedFiles}`,\n\t\t\t`chunks: ${result.chunks}`,\n\t\t\t`dimension: ${result.dimension}`,\n\t\t\t`duration_ms: ${result.durationMs}`,\n\t\t\t`built_at: ${result.builtAt}`,\n\t\t\t`index_path: ${result.indexPath}`,\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate formatSemanticQueryReport(result: SemanticQueryResult): string {\n\t\tconst lines = [\n\t\t\t`query: ${result.query}`,\n\t\t\t`top_k: ${result.topK}`,\n\t\t\t`auto_refreshed: ${result.autoRefreshed ? \"yes\" : \"no\"}`,\n\t\t];\n\n\t\tif (result.hits.length === 0) {\n\t\t\tlines.push(\"hits: none\");\n\t\t\treturn lines.join(\"\\n\");\n\t\t}\n\n\t\tlines.push(\"hits:\");\n\t\tfor (let index = 0; index < result.hits.length; index++) {\n\t\t\tconst hit = result.hits[index]!;\n\t\t\tlines.push(\n\t\t\t\t`${index + 1}. score=${hit.score.toFixed(4)} ${hit.path}:${hit.lineStart}-${hit.lineEnd}`,\n\t\t\t);\n\t\t\tlines.push(` ${hit.snippet}`);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate getSemanticSetupProviderLabel(type: SemanticProviderType): string {\n\t\tif (type === \"openrouter\") return \"openrouter\";\n\t\tif (type === \"ollama\") return \"ollama\";\n\t\treturn \"custom_openai\";\n\t}\n\n\tprivate async ensureOpenRouterSemanticCredentials(): Promise<void> {\n\t\tconst existing = await this.session.modelRegistry.authStorage.getApiKey(OPENROUTER_PROVIDER_ID);\n\t\tif (existing) return;\n\n\t\tconst shouldLogin = await this.showExtensionConfirm(\n\t\t\t\"Semantic setup: OpenRouter key missing\",\n\t\t\t\"No OpenRouter API key found. Open login flow now?\",\n\t\t);\n\t\tif (!shouldLogin) {\n\t\t\tthis.showWarning(\"OpenRouter key is missing. semantic index/query will fail until credentials are added.\");\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.handleOpenRouterApiKeyLogin({ openModelSelector: false });\n\t\tconst afterLogin = await this.session.modelRegistry.authStorage.getApiKey(OPENROUTER_PROVIDER_ID);\n\t\tif (!afterLogin) {\n\t\t\tthis.showWarning(\"OpenRouter key is still missing. You can run /login later.\");\n\t\t}\n\t}\n\n\tprivate async selectSemanticModelFromCatalog(\n\t\ttitle: string,\n\t\tcatalogModels: string[],\n\t\tcurrentModel: string,\n\t\toptions?: { highlightLikelyEmbedding?: boolean },\n\t): Promise<string | undefined> {\n\t\tconst normalizedCurrent = currentModel.trim();\n\t\tconst uniqueModels: string[] = [];\n\t\tconst seen = new Set<string>();\n\t\tfor (const model of catalogModels) {\n\t\t\tconst normalized = model.trim();\n\t\t\tif (!normalized || seen.has(normalized)) continue;\n\t\t\tseen.add(normalized);\n\t\t\tuniqueModels.push(normalized);\n\t\t}\n\n\t\tconst optionToModel = new Map<string, string>();\n\t\tconst selectorOptions: string[] = [];\n\t\tconst addOption = (label: string, modelId: string): void => {\n\t\t\tlet uniqueLabel = label;\n\t\t\tlet suffix = 2;\n\t\t\twhile (optionToModel.has(uniqueLabel)) {\n\t\t\t\tuniqueLabel = `${label} (${suffix})`;\n\t\t\t\tsuffix += 1;\n\t\t\t}\n\t\t\toptionToModel.set(uniqueLabel, modelId);\n\t\t\tselectorOptions.push(uniqueLabel);\n\t\t};\n\n\t\tif (normalizedCurrent) {\n\t\t\taddOption(`Current: ${normalizedCurrent}`, normalizedCurrent);\n\t\t}\n\n\t\tfor (const modelId of uniqueModels) {\n\t\t\tconst marker =\n\t\t\t\toptions?.highlightLikelyEmbedding && isLikelyEmbeddingModelId(modelId) ? \" [embedding]\" : \"\";\n\t\t\taddOption(`${modelId}${marker}`, modelId);\n\t\t}\n\n\t\tconst manualOption = \"Enter model manually\";\n\t\tselectorOptions.push(manualOption);\n\n\t\tconst selected = await this.showExtensionSelector(title, selectorOptions);\n\t\tif (!selected) return undefined;\n\n\t\tif (selected === manualOption) {\n\t\t\tconst modelInput = await this.showExtensionInput(`${title}: model`, normalizedCurrent || \"model-id\");\n\t\t\tif (modelInput === undefined) return undefined;\n\t\t\tconst model = modelInput.trim();\n\t\t\tif (!model) {\n\t\t\t\tthis.showWarning(\"Model cannot be empty.\");\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn model;\n\t\t}\n\n\t\treturn optionToModel.get(selected);\n\t}\n\n\tprivate async runSemanticSetupWizard(initialScope?: SemanticScope): Promise<void> {\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst agentDir = getAgentDir();\n\t\tconst merged = loadMergedSemanticConfig(cwd, agentDir);\n\t\tconst config: SemanticSearchConfig = merged.config ?? getDefaultSemanticSearchConfig();\n\n\t\tlet scope = initialScope;\n\t\tif (!scope) {\n\t\t\tconst pickedScope = await this.showExtensionSelector(\"/semantic setup: scope\", [\n\t\t\t\t\"user (Recommended)\",\n\t\t\t\t\"project\",\n\t\t\t]);\n\t\t\tif (!pickedScope) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tscope = pickedScope.startsWith(\"project\") ? \"project\" : \"user\";\n\t\t}\n\n\t\tconst providerOption = await this.showExtensionSelector(\"/semantic setup: provider\", [\n\t\t\t\"openrouter (Recommended)\",\n\t\t\t\"ollama\",\n\t\t\t\"custom_openai\",\n\t\t]);\n\t\tif (!providerOption) {\n\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst providerType: SemanticProviderType = providerOption.startsWith(\"ollama\")\n\t\t\t? \"ollama\"\n\t\t\t: providerOption.startsWith(\"custom_openai\")\n\t\t\t\t? \"custom_openai\"\n\t\t\t\t: \"openrouter\";\n\n\t\tconst providerDefaults: Record<SemanticProviderType, string> = {\n\t\t\topenrouter: \"openai/text-embedding-3-small\",\n\t\t\tollama: \"nomic-embed-text\",\n\t\t\tcustom_openai: \"text-embedding-3-small\",\n\t\t};\n\n\t\tconst currentModel = (\n\t\t\tconfig.provider.type === providerType ? config.provider.model : providerDefaults[providerType]\n\t\t).trim();\n\t\tlet model = currentModel;\n\n\t\tconst nextProvider: SemanticProviderConfig = {\n\t\t\t...config.provider,\n\t\t\ttype: providerType,\n\t\t\tmodel: model || providerDefaults[providerType],\n\t\t};\n\n\t\tif (providerType === \"ollama\") {\n\t\t\tconst defaultBase =\n\t\t\t\t(config.provider.type === \"ollama\" ? config.provider.baseUrl : undefined) ?? \"http://127.0.0.1:11434\";\n\t\t\tconst baseUrlInput = await this.showExtensionInput(\"/semantic setup: ollama base URL\", defaultBase);\n\t\t\tif (baseUrlInput === undefined) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst baseUrl = baseUrlInput.trim();\n\t\t\tnextProvider.baseUrl = baseUrl || undefined;\n\t\t\tnextProvider.apiKeyEnv = undefined;\n\n\t\t\tlet ollamaModels: string[] = [];\n\t\t\ttry {\n\t\t\t\tollamaModels = await listOllamaLocalModels({\n\t\t\t\t\tbaseUrl: nextProvider.baseUrl,\n\t\t\t\t\theaders: config.provider.type === \"ollama\" ? config.provider.headers : undefined,\n\t\t\t\t\ttimeoutMs: nextProvider.timeoutMs,\n\t\t\t\t});\n\t\t\t\tif (ollamaModels.length === 0) {\n\t\t\t\t\tthis.showWarning(\"No local Ollama models found at /api/tags. You can enter model manually.\");\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.showWarning(`Failed to load Ollama models automatically: ${errorMsg}`);\n\t\t\t}\n\n\t\t\tconst selectedModel = await this.selectSemanticModelFromCatalog(\n\t\t\t\t\"/semantic setup: ollama model\",\n\t\t\t\tollamaModels,\n\t\t\t\tcurrentModel || providerDefaults.ollama,\n\t\t\t\t{ highlightLikelyEmbedding: true },\n\t\t\t);\n\t\t\tif (!selectedModel) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmodel = selectedModel;\n\t\t} else if (providerType === \"custom_openai\") {\n\t\t\tconst defaultBase =\n\t\t\t\t(config.provider.type === \"custom_openai\" ? config.provider.baseUrl : undefined) ?? \"http://127.0.0.1:8000/v1\";\n\t\t\tconst baseUrlInput = await this.showExtensionInput(\"/semantic setup: custom base URL\", defaultBase);\n\t\t\tif (baseUrlInput === undefined) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst baseUrl = baseUrlInput.trim();\n\t\t\tif (!baseUrl) {\n\t\t\t\tthis.showWarning(\"Custom provider base URL cannot be empty.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextProvider.baseUrl = baseUrl;\n\n\t\t\tconst defaultApiKeyEnv =\n\t\t\t\t(config.provider.type === \"custom_openai\" ? config.provider.apiKeyEnv : undefined) ?? \"OPENAI_API_KEY\";\n\t\t\tconst apiKeyEnvInput = await this.showExtensionInput(\n\t\t\t\t\"/semantic setup: custom API key env (optional)\",\n\t\t\t\tdefaultApiKeyEnv,\n\t\t\t);\n\t\t\tif (apiKeyEnvInput === undefined) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnextProvider.apiKeyEnv = apiKeyEnvInput.trim() || undefined;\n\n\t\t\tconst modelInput = await this.showExtensionInput(\"/semantic setup: custom model\", currentModel);\n\t\t\tif (modelInput === undefined) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst normalizedModel = modelInput.trim();\n\t\t\tif (!normalizedModel) {\n\t\t\t\tthis.showWarning(\"Model cannot be empty.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmodel = normalizedModel;\n\t\t} else {\n\t\t\tnextProvider.baseUrl = undefined;\n\t\t\tnextProvider.apiKeyEnv = undefined;\n\n\t\t\tlet openRouterModels: string[] = [];\n\t\t\ttry {\n\t\t\t\topenRouterModels = await listOpenRouterEmbeddingModels({\n\t\t\t\t\ttimeoutMs: nextProvider.timeoutMs,\n\t\t\t\t\tauthStorage: this.session.modelRegistry.authStorage,\n\t\t\t\t});\n\t\t\t\tif (openRouterModels.length === 0) {\n\t\t\t\t\tthis.showWarning(\"OpenRouter embeddings catalog is empty. You can enter model manually.\");\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconst errorMsg = error instanceof Error ? error.message : String(error);\n\t\t\t\tthis.showWarning(`Failed to load OpenRouter embedding models automatically: ${errorMsg}`);\n\t\t\t}\n\n\t\t\tconst selectedModel = await this.selectSemanticModelFromCatalog(\n\t\t\t\t\"/semantic setup: openrouter model\",\n\t\t\t\topenRouterModels,\n\t\t\t\tcurrentModel || providerDefaults.openrouter,\n\t\t\t);\n\t\t\tif (!selectedModel) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmodel = selectedModel;\n\t\t}\n\n\t\tnextProvider.model = model;\n\n\t\twhile (true) {\n\t\t\tconst headersInput = await this.showExtensionInput(\n\t\t\t\t\"/semantic setup: headers (optional KEY=VALUE,CSV; press Enter to skip)\",\n\t\t\t\t\"\",\n\t\t\t);\n\t\t\tif (headersInput === undefined) {\n\t\t\t\tthis.showStatus(\"Semantic setup cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst parsedHeaders = this.parseMcpKeyValueMapInput(headersInput);\n\t\t\tif (parsedHeaders.error) {\n\t\t\t\tthis.showWarning(parsedHeaders.error);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnextProvider.headers = parsedHeaders.value;\n\t\t\tbreak;\n\t\t}\n\n\t\tconst nextConfig: SemanticSearchConfig = {\n\t\t\t...config,\n\t\t\tenabled: true,\n\t\t\tprovider: nextProvider,\n\t\t};\n\n\t\tconst savedPath = upsertScopedSemanticSearchConfig(scope, nextConfig, cwd, agentDir);\n\t\tif (providerType === \"openrouter\") {\n\t\t\tawait this.ensureOpenRouterSemanticCredentials();\n\t\t}\n\n\t\tthis.showStatus(`Semantic setup saved (${scope})`);\n\t\tthis.showCommandTextBlock(\n\t\t\t\"Semantic Setup\",\n\t\t\t[\n\t\t\t\t`scope: ${scope}`,\n\t\t\t\t`provider: ${this.getSemanticSetupProviderLabel(providerType)}`,\n\t\t\t\t`model: ${nextProvider.model}`,\n\t\t\t\t`auto_index: ${nextConfig.autoIndex ? \"on\" : \"off\"}`,\n\t\t\t\t`config: ${savedPath}`,\n\t\t\t\t`index_dir: ${getSemanticIndexDir(cwd, agentDir)}`,\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tprivate resolveSemanticAutoIndexWriteScope(cwd: string, agentDir: string): SemanticScope {\n\t\tconst project = readScopedSemanticConfig(\"project\", cwd, agentDir);\n\t\tif (!project.error && project.file.semanticSearch) {\n\t\t\treturn \"project\";\n\t\t}\n\t\treturn \"user\";\n\t}\n\n\tprivate async updateSemanticAutoIndexSetting(options?: {\n\t\tscope?: SemanticScope;\n\t\tvalue?: boolean;\n\t}): Promise<void> {\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst agentDir = getAgentDir();\n\t\tconst merged = loadMergedSemanticConfig(cwd, agentDir);\n\t\tif (!merged.config) {\n\t\t\tthis.showWarning(\"Semantic search is not configured. Run /semantic setup first.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst scope = options?.scope ?? this.resolveSemanticAutoIndexWriteScope(cwd, agentDir);\n\t\tconst value = options?.value ?? !merged.config.autoIndex;\n\n\t\tconst nextConfig: SemanticSearchConfig = {\n\t\t\t...merged.config,\n\t\t\tautoIndex: value,\n\t\t};\n\t\tconst savedPath = upsertScopedSemanticSearchConfig(scope, nextConfig, cwd, agentDir);\n\t\tconst effective = await this.createSemanticRuntime().status().catch(() => undefined);\n\t\tthis.showStatus(`Semantic auto-index ${value ? \"enabled\" : \"disabled\"} (${scope}).`);\n\t\tthis.showCommandTextBlock(\n\t\t\t\"Semantic Auto-Index\",\n\t\t\t[\n\t\t\t\t`scope: ${scope}`,\n\t\t\t\t`saved: ${value ? \"on\" : \"off\"}`,\n\t\t\t\t`effective: ${effective ? (effective.autoIndex ? \"on\" : \"off\") : \"unknown\"}`,\n\t\t\t\t`config: ${savedPath}`,\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tprivate async runSemanticInteractiveMenu(): Promise<void> {\n\t\twhile (true) {\n\t\t\tlet status: SemanticStatusResult | undefined;\n\t\t\ttry {\n\t\t\t\tstatus = await this.createSemanticRuntime().status();\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportSemanticError(error, \"status\");\n\t\t\t}\n\n\t\t\tconst summary = status\n\t\t\t\t? `configured=${status.configured ? \"yes\" : \"no\"} auto_index=${status.autoIndex ? \"on\" : \"off\"} indexed=${status.indexed ? \"yes\" : \"no\"} stale=${status.stale ? \"yes\" : \"no\"}`\n\t\t\t\t: \"status unavailable\";\n\t\t\tconst selected = await this.showExtensionSelector(`/semantic manager\\n${summary}`, [\n\t\t\t\t\"Configure provider/model\",\n\t\t\t\t\"Show status\",\n\t\t\t\t\"Index now\",\n\t\t\t\t\"Rebuild index\",\n\t\t\t\t\"Query index\",\n\t\t\t\t`Automatic indexing: ${status?.autoIndex ? \"on\" : \"off\"}`,\n\t\t\t\t\"Show config/index paths\",\n\t\t\t\t\"Close\",\n\t\t\t]);\n\t\t\tif (!selected || selected === \"Close\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === \"Configure provider/model\") {\n\t\t\t\tawait this.runSemanticSetupWizard();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Show status\") {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.runWithExtensionLoader(\"Checking semantic index status...\", async () =>\n\t\t\t\t\t\tthis.createSemanticRuntime().status(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.showCommandTextBlock(\"Semantic Status\", this.formatSemanticStatusReport(result));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.reportSemanticError(error, \"status\");\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Index now\") {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.runWithExtensionLoader(\"Indexing semantic embeddings...\", async () =>\n\t\t\t\t\t\tthis.createSemanticRuntime().index(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.showStatus(`Semantic index updated (${result.processedFiles} files).`);\n\t\t\t\t\tthis.showCommandTextBlock(\"Semantic Index\", this.formatSemanticIndexReport(result));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.reportSemanticError(error, \"index\");\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Rebuild index\") {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.runWithExtensionLoader(\"Rebuilding semantic index...\", async () =>\n\t\t\t\t\t\tthis.createSemanticRuntime().rebuild(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.showStatus(`Semantic index rebuilt (${result.processedFiles} files).`);\n\t\t\t\t\tthis.showCommandTextBlock(\"Semantic Rebuild\", this.formatSemanticIndexReport(result));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.reportSemanticError(error, \"rebuild\");\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Query index\") {\n\t\t\t\tconst queryInput = await this.showExtensionInput(\"/semantic query\", \"where auth token is validated\");\n\t\t\t\tif (queryInput === undefined) continue;\n\t\t\t\tconst query = queryInput.trim();\n\t\t\t\tif (!query) {\n\t\t\t\t\tthis.showWarning(\"Semantic query cannot be empty.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst topKInput = await this.showExtensionInput(\"/semantic query: top-k (optional, 1..20)\", \"8\");\n\t\t\t\tif (topKInput === undefined) continue;\n\t\t\t\tconst topKRaw = topKInput.trim();\n\t\t\t\tlet topK: number | undefined = undefined;\n\t\t\t\tif (topKRaw) {\n\t\t\t\t\tconst parsed = Number.parseInt(topKRaw, 10);\n\t\t\t\t\tif (!Number.isFinite(parsed) || parsed < 1 || parsed > 20) {\n\t\t\t\t\t\tthis.showWarning(\"top-k must be an integer between 1 and 20.\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttopK = parsed;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await this.runWithExtensionLoader(\"Querying semantic index...\", async () =>\n\t\t\t\t\t\tthis.createSemanticRuntime().query(query, topK),\n\t\t\t\t\t);\n\t\t\t\t\tthis.showCommandTextBlock(\"Semantic Query\", this.formatSemanticQueryReport(result));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.reportSemanticError(error, \"query\");\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected.startsWith(\"Automatic indexing:\")) {\n\t\t\t\tawait this.updateSemanticAutoIndexSetting();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Show config/index paths\") {\n\t\t\t\tconst runtime = this.createSemanticRuntime();\n\t\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\t\tconst agentDir = getAgentDir();\n\t\t\t\ttry {\n\t\t\t\t\tconst semanticStatus = await this.runWithExtensionLoader(\"Loading semantic paths...\", async () =>\n\t\t\t\t\t\truntime.status(),\n\t\t\t\t\t);\n\t\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t\t\"Semantic Paths\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t`user_config: ${getSemanticConfigPath(\"user\", cwd, agentDir)}`,\n\t\t\t\t\t\t\t`project_config: ${getSemanticConfigPath(\"project\", cwd, agentDir)}`,\n\t\t\t\t\t\t\t`index_dir: ${semanticStatus.indexPath}`,\n\t\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.reportSemanticError(error, \"status\");\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate reportSemanticError(error: unknown, context: string): void {\n\t\tif (error instanceof SemanticConfigMissingError) {\n\t\t\tthis.showWarning(\"Semantic search is not configured. Run /semantic setup.\");\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Semantic Config\",\n\t\t\t\t[\n\t\t\t\t\t`user_config: ${error.userConfigPath}`,\n\t\t\t\t\t`project_config: ${error.projectConfigPath}`,\n\t\t\t\t\t\"next: /semantic setup\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tif (error instanceof SemanticIndexRequiredError) {\n\t\t\tthis.showWarning(error.message);\n\t\t\tthis.showWarning(\"Run /semantic index (or enable automatic indexing in /semantic).\");\n\t\t\treturn;\n\t\t}\n\t\tif (error instanceof SemanticRebuildRequiredError) {\n\t\t\tthis.showWarning(error.message);\n\t\t\tthis.showWarning(\"Run /semantic rebuild.\");\n\t\t\treturn;\n\t\t}\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis.showError(`Semantic ${context} failed: ${message}`);\n\t}\n\n\tprivate async handleSemanticCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.length === 0 || (args[0]?.toLowerCase() ?? \"\") === \"ui\") {\n\t\t\tawait this.runSemanticInteractiveMenu();\n\t\t\treturn;\n\t\t}\n\n\t\tconst subcommand = (args[0] ?? \"\").toLowerCase();\n\t\tconst rest = args.slice(1);\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Semantic Help\",\n\t\t\t\t[\n\t\t\t\t\t\"Usage:\",\n\t\t\t\t\t\" /semantic\",\n\t\t\t\t\t\" /semantic ui\",\n\t\t\t\t\t\" /semantic setup [--scope user|project]\",\n\t\t\t\t\t\" /semantic auto-index [on|off] [--scope user|project]\",\n\t\t\t\t\t\" /semantic status\",\n\t\t\t\t\t\" /semantic index\",\n\t\t\t\t\t\" /semantic rebuild\",\n\t\t\t\t\t\" /semantic query <text> [--top-k N]\",\n\t\t\t\t\t\" /semantic help\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"setup\") {\n\t\t\tconst parsedScope = this.parseSemanticScopeOptions(rest);\n\t\t\tif (parsedScope.error) {\n\t\t\t\tthis.showWarning(parsedScope.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parsedScope.rest.length > 0) {\n\t\t\t\tthis.showWarning(`Unexpected arguments for /semantic setup: ${parsedScope.rest.join(\" \")}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.runSemanticSetupWizard(parsedScope.scope);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"auto-index\" || subcommand === \"autoindex\") {\n\t\t\tconst parsedScope = this.parseSemanticScopeOptions(\n\t\t\t\trest,\n\t\t\t\t\"Usage: /semantic auto-index [on|off] [--scope user|project]\",\n\t\t\t);\n\t\t\tif (parsedScope.error) {\n\t\t\t\tthis.showWarning(parsedScope.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet value: boolean | undefined;\n\t\t\tif (parsedScope.rest.length > 1) {\n\t\t\t\tthis.showWarning(\"Usage: /semantic auto-index [on|off] [--scope user|project]\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parsedScope.rest.length === 1) {\n\t\t\t\tconst mode = parsedScope.rest[0]?.toLowerCase();\n\t\t\t\tif (mode === \"on\" || mode === \"enable\" || mode === \"enabled\") value = true;\n\t\t\t\telse if (mode === \"off\" || mode === \"disable\" || mode === \"disabled\") value = false;\n\t\t\t\telse {\n\t\t\t\t\tthis.showWarning(`Unknown auto-index mode \"${parsedScope.rest[0]}\". Use on|off.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait this.updateSemanticAutoIndexSetting({\n\t\t\t\tscope: parsedScope.scope,\n\t\t\t\tvalue,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"status\") {\n\t\t\ttry {\n\t\t\t\tconst result = await this.runWithExtensionLoader(\"Checking semantic index status...\", async () =>\n\t\t\t\t\tthis.createSemanticRuntime().status(),\n\t\t\t\t);\n\t\t\t\tthis.showCommandTextBlock(\"Semantic Status\", this.formatSemanticStatusReport(result));\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportSemanticError(error, \"status\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"index\") {\n\t\t\ttry {\n\t\t\t\tconst result = await this.runWithExtensionLoader(\"Indexing semantic embeddings...\", async () =>\n\t\t\t\t\tthis.createSemanticRuntime().index(),\n\t\t\t\t);\n\t\t\t\tthis.showStatus(`Semantic index updated (${result.processedFiles} files).`);\n\t\t\t\tthis.showCommandTextBlock(\"Semantic Index\", this.formatSemanticIndexReport(result));\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportSemanticError(error, \"index\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"rebuild\") {\n\t\t\ttry {\n\t\t\t\tconst result = await this.runWithExtensionLoader(\"Rebuilding semantic index...\", async () =>\n\t\t\t\t\tthis.createSemanticRuntime().rebuild(),\n\t\t\t\t);\n\t\t\t\tthis.showStatus(`Semantic index rebuilt (${result.processedFiles} files).`);\n\t\t\t\tthis.showCommandTextBlock(\"Semantic Rebuild\", this.formatSemanticIndexReport(result));\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportSemanticError(error, \"rebuild\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"query\") {\n\t\t\tconst parsed = this.parseSemanticTopKOptions(rest);\n\t\t\tif (parsed.error) {\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst query = parsed.rest.join(\" \").trim();\n\t\t\tif (!query) {\n\t\t\t\tthis.showWarning(\"Usage: /semantic query <text> [--top-k N]\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await this.runWithExtensionLoader(\"Querying semantic index...\", async () =>\n\t\t\t\t\tthis.createSemanticRuntime().query(query, parsed.topK),\n\t\t\t\t);\n\t\t\t\tthis.showCommandTextBlock(\"Semantic Query\", this.formatSemanticQueryReport(result));\n\t\t\t} catch (error) {\n\t\t\t\tthis.reportSemanticError(error, \"query\");\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showWarning(`Unknown /semantic subcommand \"${subcommand}\". Use /semantic help.`);\n\t}\n\n\tprivate parseContractScopeOptions(\n\t\targs: string[],\n\t\tusage = \"Usage: /contract <edit|clear> --scope <project|session>\",\n\t): ContractScopeParseResult {\n\t\tlet scope: ContractScope | undefined;\n\t\tconst rest: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst token = args[index] ?? \"\";\n\t\t\tconst normalized = token.toLowerCase();\n\t\t\tif (normalized === \"--scope\") {\n\t\t\t\tconst value = (args[index + 1] ?? \"\").toLowerCase().trim();\n\t\t\t\tif (!value) {\n\t\t\t\t\treturn { scope, rest, error: usage };\n\t\t\t\t}\n\t\t\t\tif (value !== \"project\" && value !== \"session\") {\n\t\t\t\t\treturn { scope, rest, error: `Invalid contract scope \"${value}\". Use project or session.` };\n\t\t\t\t}\n\t\t\t\tscope = value;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trest.push(token);\n\t\t}\n\n\t\treturn { scope, rest };\n\t}\n\n\tprivate cloneContract(contract: EngineeringContract): EngineeringContract {\n\t\treturn normalizeEngineeringContract({\n\t\t\t...(contract.goal ? { goal: contract.goal } : {}),\n\t\t\t...(contract.scope_include ? { scope_include: [...contract.scope_include] } : {}),\n\t\t\t...(contract.scope_exclude ? { scope_exclude: [...contract.scope_exclude] } : {}),\n\t\t\t...(contract.constraints ? { constraints: [...contract.constraints] } : {}),\n\t\t\t...(contract.quality_gates ? { quality_gates: [...contract.quality_gates] } : {}),\n\t\t\t...(contract.definition_of_done ? { definition_of_done: [...contract.definition_of_done] } : {}),\n\t\t\t...(contract.assumptions ? { assumptions: [...contract.assumptions] } : {}),\n\t\t\t...(contract.non_goals ? { non_goals: [...contract.non_goals] } : {}),\n\t\t\t...(contract.risks ? { risks: [...contract.risks] } : {}),\n\t\t\t...(contract.deliverables ? { deliverables: [...contract.deliverables] } : {}),\n\t\t\t...(contract.success_metrics ? { success_metrics: [...contract.success_metrics] } : {}),\n\t\t\t...(contract.stakeholders ? { stakeholders: [...contract.stakeholders] } : {}),\n\t\t\t...(contract.owner ? { owner: contract.owner } : {}),\n\t\t\t...(contract.timebox ? { timebox: contract.timebox } : {}),\n\t\t\t...(contract.notes ? { notes: contract.notes } : {}),\n\t\t});\n\t}\n\n\tprivate formatContractSection(title: string, contract: EngineeringContract): string {\n\t\tconst payload = Object.keys(contract).length > 0 ? contract : {};\n\t\treturn `${title}:\\n${JSON.stringify(payload, null, 2)}`;\n\t}\n\n\tprivate formatContractFieldPreview(field: ContractFieldDefinition, value: unknown): string {\n\t\tif (field.kind === \"text\") {\n\t\t\tif (typeof value !== \"string\" || value.trim().length === 0) return \"(empty)\";\n\t\t\treturn value.trim();\n\t\t}\n\t\tif (!Array.isArray(value) || value.length === 0) return \"(empty)\";\n\t\tconst values = value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0);\n\t\tif (values.length === 0) return \"(empty)\";\n\t\tconst preview = values.slice(0, 2).join(\"; \");\n\t\treturn values.length > 2 ? `${preview} (+${values.length - 2})` : preview;\n\t}\n\n\tprivate showContractState(state: ContractState): void {\n\t\tthis.showCommandTextBlock(\n\t\t\t\"Contract\",\n\t\t\t[\n\t\t\t\t`project_path: ${state.projectPath}${state.hasProjectFile ? \"\" : \" (missing)\"}`,\n\t\t\t\t\"\",\n\t\t\t\tthis.formatContractSection(\"Project\", state.project),\n\t\t\t\t\"\",\n\t\t\t\tthis.formatContractSection(\"Session overlay\", state.sessionOverlay),\n\t\t\t\t\"\",\n\t\t\t\tthis.formatContractSection(\"Effective\", state.effective),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tprivate async editContractFieldValue(\n\t\tscope: ContractScope,\n\t\tfield: ContractFieldDefinition,\n\t\tdraft: EngineeringContract,\n\t): Promise<EngineeringContract | undefined> {\n\t\tconst payload = draft as Record<string, unknown>;\n\t\tconst current = payload[field.key];\n\n\t\tif (field.kind === \"text\") {\n\t\t\tconst entered = await this.showExtensionInput(\n\t\t\t\t`/contract ${scope}: ${field.key}\\n${field.help}\\nEnter empty value to clear.`,\n\t\t\t\ttypeof current === \"string\" && current.trim().length > 0 ? current : field.placeholder,\n\t\t\t);\n\t\t\tif (entered === undefined) return undefined;\n\t\t\tconst nextPayload: Record<string, unknown> = { ...payload };\n\t\t\tconst normalized = entered.trim();\n\t\t\tif (normalized.length === 0) {\n\t\t\t\tdelete nextPayload[field.key];\n\t\t\t} else {\n\t\t\t\tnextPayload[field.key] = normalized;\n\t\t\t}\n\t\t\treturn normalizeEngineeringContract(nextPayload);\n\t\t}\n\n\t\tconst prefill = Array.isArray(current)\n\t\t\t? current.filter((item): item is string => typeof item === \"string\").join(\"\\n\")\n\t\t\t: \"\";\n\t\tconst edited = await this.showExtensionEditor(\n\t\t\t`/contract ${scope}: ${field.key}\\n${field.help}\\nOne item per line. Empty value clears the field.`,\n\t\t\tprefill,\n\t\t);\n\t\tif (edited === undefined) return undefined;\n\t\tconst values = edited\n\t\t\t.split(/\\r?\\n/)\n\t\t\t.map((line) => line.trim())\n\t\t\t.filter((line) => line.length > 0);\n\t\tconst nextPayload: Record<string, unknown> = { ...payload };\n\t\tif (values.length === 0) {\n\t\t\tdelete nextPayload[field.key];\n\t\t} else {\n\t\t\tnextPayload[field.key] = values;\n\t\t}\n\t\treturn normalizeEngineeringContract(nextPayload);\n\t}\n\n\tprivate formatContractEditorSummary(scope: ContractScope, draft: EngineeringContract): string {\n\t\tconst setCount = CONTRACT_FIELD_DEFINITIONS.filter((field) => {\n\t\t\tconst value = (draft as Record<string, unknown>)[field.key];\n\t\t\tif (field.kind === \"text\") return typeof value === \"string\" && value.trim().length > 0;\n\t\t\treturn Array.isArray(value) && value.length > 0;\n\t\t}).length;\n\t\treturn `/contract editor (${scope})\\nfilled=${setCount}/${CONTRACT_FIELD_DEFINITIONS.length}`;\n\t}\n\n\tprivate async editContractScope(scope: ContractScope): Promise<void> {\n\t\tconst state = this.getContractStateSafe();\n\t\tif (!state) return;\n\t\tlet draft = this.cloneContract(scope === \"project\" ? state.project : state.sessionOverlay);\n\n\t\twhile (true) {\n\t\t\tconst fieldOptions = CONTRACT_FIELD_DEFINITIONS.map((field) => {\n\t\t\t\tconst value = (draft as Record<string, unknown>)[field.key];\n\t\t\t\treturn {\n\t\t\t\t\tfield,\n\t\t\t\t\tlabel: `Edit ${field.key}: ${this.formatContractFieldPreview(field, value)}`,\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst selected = await this.showExtensionSelector(\n\t\t\t\t`${this.formatContractEditorSummary(scope, draft)}\\nHow to use: select a field and press Enter to edit. Changes are auto-saved immediately.`,\n\t\t\t\t[\n\t\t\t\t\t...fieldOptions.map((entry) => entry.label),\n\t\t\t\t\t\"Open JSON preview\",\n\t\t\t\t\t\"Delete scope contract\",\n\t\t\t\t\t\"Cancel\",\n\t\t\t\t],\n\t\t\t);\n\t\t\tif (!selected || selected.startsWith(\"Cancel\")) {\n\t\t\t\tthis.showStatus(\"Contract edit cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Open JSON preview\")) {\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t`Contract Draft (${scope})`,\n\t\t\t\t\tJSON.stringify(Object.keys(draft).length > 0 ? draft : {}, null, 2),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (selected.startsWith(\"Delete scope contract\")) {\n\t\t\t\tif (scope === \"project\") {\n\t\t\t\t\tconst confirm = await this.showExtensionConfirm(\n\t\t\t\t\t\t\"Delete project contract?\",\n\t\t\t\t\t\t`${state.projectPath}\\nThis removes .iosm/contract.json`,\n\t\t\t\t\t);\n\t\t\t\t\tif (!confirm) {\n\t\t\t\t\t\tthis.showStatus(\"Project contract delete cancelled.\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.contractService.clear(scope);\n\t\t\t\tthis.syncRuntimePromptSuffix();\n\t\t\t\tthis.showStatus(`Contract cleared (${scope}).`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst fieldEntry = fieldOptions.find((entry) => entry.label === selected);\n\t\t\tconst field = fieldEntry?.field;\n\t\t\tif (!field) {\n\t\t\t\tthis.showWarning(\"Unknown contract field selection.\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst updated = await this.editContractFieldValue(scope, field, draft);\n\t\t\tif (!updated) {\n\t\t\t\tthis.showStatus(`Field edit cancelled (${field.key}).`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdraft = updated;\n\t\t\ttry {\n\t\t\t\tthis.contractService.save(scope, draft);\n\t\t\t\tthis.syncRuntimePromptSuffix();\n\t\t\t\tthis.showStatus(`Saved ${field.key} (${scope}).`);\n\t\t\t} catch (error) {\n\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async runContractInteractiveMenu(): Promise<void> {\n\t\twhile (true) {\n\t\t\tconst state = this.getContractStateSafe();\n\t\t\tif (!state) return;\n\t\t\tconst selected = await this.showExtensionSelector(\n\t\t\t\t[\n\t\t\t\t\t`/contract manager`,\n\t\t\t\t\t`project=${state.hasProjectFile ? \"yes\" : \"no\"} session_keys=${Object.keys(state.sessionOverlay).length} effective_keys=${Object.keys(state.effective).length}`,\n\t\t\t\t\t`How to use: open effective to inspect merged JSON, edit session for temporary changes, edit project for persistent changes.`,\n\t\t\t\t\t`Field edits are auto-saved right after Enter.`,\n\t\t\t\t].join(\"\\n\"),\n\t\t\t\t[\n\t\t\t\t\t\"Open effective contract\",\n\t\t\t\t\t\"Edit session contract\",\n\t\t\t\t\t\"Edit project contract\",\n\t\t\t\t\t\"Copy effective -> session\",\n\t\t\t\t\t\"Copy effective -> project\",\n\t\t\t\t\t\"Delete session contract\",\n\t\t\t\t\t\"Delete project contract\",\n\t\t\t\t\t\"Close\",\n\t\t\t\t],\n\t\t\t);\n\t\t\tif (!selected || selected.startsWith(\"Close\")) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === \"Open effective contract\") {\n\t\t\t\tthis.showContractState(state);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Edit session contract\") {\n\t\t\t\tawait this.editContractScope(\"session\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Edit project contract\") {\n\t\t\t\tawait this.editContractScope(\"project\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Copy effective -> session\") {\n\t\t\t\ttry {\n\t\t\t\t\tthis.contractService.save(\"session\", state.effective);\n\t\t\t\t\tthis.syncRuntimePromptSuffix();\n\t\t\t\t\tthis.showStatus(\"Effective contract copied to session overlay.\");\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Copy effective -> project\") {\n\t\t\t\ttry {\n\t\t\t\t\tthis.contractService.save(\"project\", state.effective);\n\t\t\t\t\tthis.syncRuntimePromptSuffix();\n\t\t\t\t\tthis.showStatus(\"Effective contract copied to project.\");\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.showWarning(error instanceof Error ? error.message : String(error));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Delete session contract\") {\n\t\t\t\tthis.contractService.clear(\"session\");\n\t\t\t\tthis.syncRuntimePromptSuffix();\n\t\t\t\tthis.showStatus(\"Session contract deleted.\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Delete project contract\") {\n\t\t\t\tconst confirm = await this.showExtensionConfirm(\n\t\t\t\t\t\"Delete project contract?\",\n\t\t\t\t\t`${state.projectPath}\\nThis removes .iosm/contract.json`,\n\t\t\t\t);\n\t\t\t\tif (!confirm) {\n\t\t\t\t\tthis.showStatus(\"Project contract delete cancelled.\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthis.contractService.clear(\"project\");\n\t\t\t\tthis.syncRuntimePromptSuffix();\n\t\t\t\tthis.showStatus(\"Project contract deleted.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleContractCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.length === 0 || (args[0]?.toLowerCase() ?? \"\") === \"ui\") {\n\t\t\tawait this.runContractInteractiveMenu();\n\t\t\treturn;\n\t\t}\n\n\t\tconst subcommand = (args[0] ?? \"\").toLowerCase();\n\t\tconst rest = args.slice(1);\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Contract Help\",\n\t\t\t\t[\n\t\t\t\t\t\"Usage:\",\n\t\t\t\t\t\" /contract\",\n\t\t\t\t\t\" /contract ui\",\n\t\t\t\t\t\" /contract show\",\n\t\t\t\t\t\" /contract edit --scope <project|session>\",\n\t\t\t\t\t\" /contract clear --scope <project|session>\",\n\t\t\t\t\t\" /contract help\",\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"Editor model:\",\n\t\t\t\t\t\t\" - Fill fields interactively (goal, scope, constraints, quality gates, DoD, risks, etc.)\",\n\t\t\t\t\t\t\" - Each field is saved immediately after Enter (no extra Save step)\",\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"show\" || subcommand === \"status\" || subcommand === \"open\") {\n\t\t\tconst state = this.getContractStateSafe();\n\t\t\tif (!state) return;\n\t\t\tthis.showContractState(state);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"edit\") {\n\t\t\tconst parsed = this.parseContractScopeOptions(rest, \"Usage: /contract edit --scope <project|session>\");\n\t\t\tif (parsed.error) {\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parsed.rest.length > 0) {\n\t\t\t\tthis.showWarning(`Unexpected arguments for /contract edit: ${parsed.rest.join(\" \")}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait this.editContractScope(parsed.scope ?? \"session\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"clear\" || subcommand === \"rm\" || subcommand === \"remove\" || subcommand === \"delete\") {\n\t\t\tconst parsed = this.parseContractScopeOptions(rest, \"Usage: /contract clear --scope <project|session>\");\n\t\t\tif (parsed.error) {\n\t\t\t\tthis.showWarning(parsed.error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!parsed.scope) {\n\t\t\t\tthis.showWarning(\"Usage: /contract clear --scope <project|session>\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (parsed.rest.length > 0) {\n\t\t\t\tthis.showWarning(`Unexpected arguments for /contract clear: ${parsed.rest.join(\" \")}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.contractService.clear(parsed.scope);\n\t\t\tthis.syncRuntimePromptSuffix();\n\t\t\tthis.showStatus(`Contract cleared (${parsed.scope}).`);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.showWarning(`Unknown /contract subcommand \"${subcommand}\". Use /contract help.`);\n\t}\n\n\tprivate normalizeSingularComplexity(value: unknown, fallback: SingularComplexity): SingularComplexity {\n\t\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\t\tif (normalized === \"low\" || normalized === \"medium\" || normalized === \"high\") {\n\t\t\treturn normalized;\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tprivate normalizeSingularBlastRadius(value: unknown, fallback: SingularBlastRadius): SingularBlastRadius {\n\t\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\t\tif (normalized === \"low\" || normalized === \"medium\" || normalized === \"high\") {\n\t\t\treturn normalized;\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tprivate normalizeSingularRecommendation(value: unknown, fallback: SingularRecommendation): SingularRecommendation {\n\t\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\t\tif (normalized === \"implement_now\" || normalized === \"implement_incrementally\" || normalized === \"defer\") {\n\t\t\treturn normalized;\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tprivate normalizeSingularStageFit(value: unknown): SingularStageFit | undefined {\n\t\tconst normalized = typeof value === \"string\" ? value.trim().toLowerCase() : \"\";\n\t\tif (normalized === \"needed_now\" || normalized === \"optional_now\" || normalized === \"later\") {\n\t\t\treturn normalized;\n\t\t}\n\t\tif (normalized === \"now\") return \"needed_now\";\n\t\tif (normalized === \"optional\") return \"optional_now\";\n\t\treturn undefined;\n\t}\n\n\tprivate toTrimmedString(value: unknown, maxLength: number, fallback?: string): string | undefined {\n\t\tif (typeof value !== \"string\") return fallback;\n\t\tconst compact = value.replace(/\\s+/g, \" \").trim();\n\t\tif (!compact) return fallback;\n\t\tif (compact.length <= maxLength) return compact;\n\t\treturn compact.slice(0, maxLength).trim();\n\t}\n\n\tprivate toTrimmedStringList(value: unknown, maxItems: number, maxLength = 220): string[] {\n\t\tif (!Array.isArray(value)) return [];\n\t\tconst lines: string[] = [];\n\t\tfor (const item of value) {\n\t\t\tconst normalized = this.toTrimmedString(item, maxLength);\n\t\t\tif (!normalized) continue;\n\t\t\tlines.push(normalized);\n\t\t\tif (lines.length >= maxItems) break;\n\t\t}\n\t\treturn lines;\n\t}\n\n\tprivate normalizeSingularImpactAnalysis(\n\t\tvalue: unknown,\n\t\tfallback?: SingularImpactAnalysis,\n\t): SingularImpactAnalysis | undefined {\n\t\tif (!value || typeof value !== \"object\" || Array.isArray(value)) {\n\t\t\treturn fallback;\n\t\t}\n\t\tconst payload = value as Record<string, unknown>;\n\t\tconst codebase = this.toTrimmedString(payload.codebase, 260, fallback?.codebase ?? \"Unknown.\");\n\t\tconst delivery = this.toTrimmedString(payload.delivery, 260, fallback?.delivery ?? \"Unknown.\");\n\t\tconst risks = this.toTrimmedString(payload.risks, 260, fallback?.risks ?? \"Unknown.\");\n\t\tconst operations = this.toTrimmedString(payload.operations, 260, fallback?.operations ?? \"Unknown.\");\n\t\tif (!codebase || !delivery || !risks || !operations) return fallback;\n\t\treturn {\n\t\t\tcodebase,\n\t\t\tdelivery,\n\t\t\trisks,\n\t\t\toperations,\n\t\t};\n\t}\n\n\tprivate buildSingularContractPromptSection(contract: EngineeringContract): string {\n\t\tconst lines: string[] = [];\n\t\tif (contract.goal) lines.push(`- goal: ${contract.goal}`);\n\t\tif ((contract.scope_include ?? []).length > 0) {\n\t\t\tlines.push(`- scope_include: ${(contract.scope_include ?? []).slice(0, 8).join(\"; \")}`);\n\t\t}\n\t\tif ((contract.scope_exclude ?? []).length > 0) {\n\t\t\tlines.push(`- scope_exclude: ${(contract.scope_exclude ?? []).slice(0, 8).join(\"; \")}`);\n\t\t}\n\t\tif ((contract.constraints ?? []).length > 0) {\n\t\t\tlines.push(`- constraints: ${(contract.constraints ?? []).slice(0, 10).join(\"; \")}`);\n\t\t}\n\t\tif ((contract.quality_gates ?? []).length > 0) {\n\t\t\tlines.push(`- quality_gates: ${(contract.quality_gates ?? []).slice(0, 10).join(\"; \")}`);\n\t\t}\n\t\tif ((contract.definition_of_done ?? []).length > 0) {\n\t\t\tlines.push(`- definition_of_done: ${(contract.definition_of_done ?? []).slice(0, 10).join(\"; \")}`);\n\t\t}\n\t\tif ((contract.non_goals ?? []).length > 0) {\n\t\t\tlines.push(`- non_goals: ${(contract.non_goals ?? []).slice(0, 8).join(\"; \")}`);\n\t\t}\n\t\treturn lines.length > 0 ? lines.join(\"\\n\") : \"- none\";\n\t}\n\n\tprivate buildSingularAgentPrompt(\n\t\trequest: string,\n\t\tbaseline: SingularAnalysisResult,\n\t\tcontract: EngineeringContract,\n\t): string {\n\t\tconst filesHint =\n\t\t\tbaseline.matchedFiles.length > 0\n\t\t\t\t? baseline.matchedFiles.slice(0, 12).map((item) => `- ${item}`).join(\"\\n\")\n\t\t\t\t: \"- no direct file matches found in heuristic pass\";\n\n\t\treturn [\n\t\t\t\"You are running a feasibility pass for `/singular`.\",\n\t\t\t\"Task: analyze the codebase for this request and decide whether to implement now, incrementally, or defer.\",\n\t\t\t\"\",\n\t\t\t\"Hard requirements:\",\n\t\t\t\"- Inspect repository files with tools before final output (at least one tool call).\",\n\t\t\t\"- Return a human-readable markdown report (no JSON).\",\n\t\t\t\"- Include exactly three options (Option 1, Option 2, Option 3).\",\n\t\t\t\"- Each option must contain concrete file paths when possible.\",\n\t\t\t\"\",\n\t\t\t\"Use this exact template:\",\n\t\t\t\"# Singular Feasibility\",\n\t\t\t\"Recommendation: implement_now|implement_incrementally|defer\",\n\t\t\t\"Reason: <one concise reason>\",\n\t\t\t\"Complexity: low|medium|high\",\n\t\t\t\"Blast Radius: low|medium|high\",\n\t\t\t\"Stage Fit: needed_now|optional_now|later\",\n\t\t\t\"Stage Fit Reason: <why this stage fit>\",\n\t\t\t\"Impact - Codebase: <impact>\",\n\t\t\t\"Impact - Delivery: <impact>\",\n\t\t\t\"Impact - Risks: <impact>\",\n\t\t\t\"Impact - Operations: <impact>\",\n\t\t\t\"\",\n\t\t\t\"## Option 1: <title>\",\n\t\t\t\"Summary: <summary>\",\n\t\t\t\"Complexity: low|medium|high\",\n\t\t\t\"Blast Radius: low|medium|high\",\n\t\t\t\"When to choose: <guidance>\",\n\t\t\t\"Suggested files:\",\n\t\t\t\"- <path>\",\n\t\t\t\"Plan:\",\n\t\t\t\"1. <step>\",\n\t\t\t\"Pros:\",\n\t\t\t\"- <pro>\",\n\t\t\t\"Cons:\",\n\t\t\t\"- <con>\",\n\t\t\t\"\",\n\t\t\t\"## Option 2: <title>\",\n\t\t\t\"... same fields ...\",\n\t\t\t\"\",\n\t\t\t\"## Option 3: <title>\",\n\t\t\t\"... same fields ...\",\n\t\t\t\"\",\n\t\t\t`Feature request: ${request}`,\n\t\t\t\"\",\n\t\t\t\"Baseline scan summary (heuristic pass):\",\n\t\t\t`- scanned_files: ${baseline.scannedFiles}`,\n\t\t\t`- source_files: ${baseline.sourceFiles}`,\n\t\t\t`- test_files: ${baseline.testFiles}`,\n\t\t\t`- baseline_complexity: ${baseline.baselineComplexity}`,\n\t\t\t`- baseline_blast_radius: ${baseline.baselineBlastRadius}`,\n\t\t\t`- baseline_recommendation: ${baseline.recommendation}`,\n\t\t\t\"\",\n\t\t\t\"Matched file hints from baseline (verify, do not assume blindly):\",\n\t\t\tfilesHint,\n\t\t\t\"\",\n\t\t\t\"Active engineering contract:\",\n\t\t\tthis.buildSingularContractPromptSection(contract),\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate extractLabeledValue(text: string, labels: string[], maxLength = 320): string | undefined {\n\t\tfor (const label of labels) {\n\t\t\tconst escaped = label.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\t\tconst match = text.match(new RegExp(`^\\\\s*${escaped}\\\\s*:\\\\s*(.+?)\\\\s*$`, \"im\"));\n\t\t\tif (!match?.[1]) continue;\n\t\t\tconst normalized = this.toTrimmedString(match[1], maxLength);\n\t\t\tif (normalized) return normalized;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate parseSingularListSection(block: string, heading: string, maxItems: number): string[] {\n\t\tconst headings = [\n\t\t\t\"Summary\",\n\t\t\t\"Complexity\",\n\t\t\t\"Blast Radius\",\n\t\t\t\"When to choose\",\n\t\t\t\"Suggested files\",\n\t\t\t\"Plan\",\n\t\t\t\"Pros\",\n\t\t\t\"Cons\",\n\t\t];\n\t\tconst escapedHeading = heading.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tconst nextHeadings = headings.filter((item) => item !== heading).map((item) => item.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\"));\n\t\tconst sectionRegex = new RegExp(\n\t\t\t`(?:^|\\\\n)\\\\s*${escapedHeading}\\\\s*:\\\\s*([\\\\s\\\\S]*?)(?=\\\\n\\\\s*(?:${nextHeadings.join(\"|\")})\\\\s*:|\\\\n\\\\s*##\\\\s*Option\\\\s*[123]\\\\s*:|$)`,\n\t\t\t\"i\",\n\t\t);\n\t\tconst sectionMatch = block.match(sectionRegex);\n\t\tif (!sectionMatch?.[1]) return [];\n\n\t\tconst result: string[] = [];\n\t\tconst lines = sectionMatch[1].split(/\\r?\\n/);\n\t\tfor (const rawLine of lines) {\n\t\t\tlet line = rawLine.trim();\n\t\t\tif (!line) continue;\n\t\t\tline = line.replace(/^[-*]\\s+/, \"\").replace(/^\\d+[.)]\\s+/, \"\").trim();\n\t\t\tif (!line) continue;\n\t\t\tresult.push(line);\n\t\t\tif (result.length >= maxItems) break;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate parseSingularOptionsFromText(\n\t\ttext: string,\n\t\tbaseline: SingularAnalysisResult,\n\t): { options: SingularOption[]; parsedCount: number } {\n\t\tconst optionRegex = /^##\\s*Option\\s*([123])\\s*:\\s*(.+?)\\s*$/gim;\n\t\tconst matches = [...text.matchAll(optionRegex)];\n\t\tconst parsed: SingularOption[] = [];\n\n\t\tfor (let index = 0; index < matches.length; index += 1) {\n\t\t\tconst current = matches[index];\n\t\t\tconst optionIndexRaw = Number.parseInt(current[1] ?? \"\", 10);\n\t\t\tconst optionIndex = Number.isInteger(optionIndexRaw) ? Math.max(1, Math.min(3, optionIndexRaw)) - 1 : index;\n\t\t\tconst fallback = baseline.options[optionIndex] ?? baseline.options[Math.min(index, baseline.options.length - 1)];\n\t\t\tif (!fallback) continue;\n\n\t\t\tconst bodyStart = (current.index ?? 0) + current[0].length;\n\t\t\tconst bodyEnd = index + 1 < matches.length ? (matches[index + 1].index ?? text.length) : text.length;\n\t\t\tconst body = text.slice(bodyStart, bodyEnd);\n\t\t\tconst title = this.toTrimmedString(current[2], 120, fallback.title) ?? fallback.title;\n\t\t\tconst summary = this.extractLabeledValue(body, [\"Summary\"], 320) ?? fallback.summary;\n\t\t\tconst complexity = this.normalizeSingularComplexity(\n\t\t\t\tthis.extractLabeledValue(body, [\"Complexity\"], 24),\n\t\t\t\tfallback.complexity,\n\t\t\t);\n\t\t\tconst blastRadius = this.normalizeSingularBlastRadius(\n\t\t\t\tthis.extractLabeledValue(body, [\"Blast Radius\", \"Blast\"], 24),\n\t\t\t\tfallback.blast_radius,\n\t\t\t);\n\t\t\tconst whenToChoose = this.extractLabeledValue(body, [\"When to choose\"], 220) ?? fallback.when_to_choose;\n\t\t\tconst suggestedFiles = this.parseSingularListSection(body, \"Suggested files\", 8);\n\t\t\tconst plan = this.parseSingularListSection(body, \"Plan\", 8);\n\t\t\tconst pros = this.parseSingularListSection(body, \"Pros\", 6);\n\t\t\tconst cons = this.parseSingularListSection(body, \"Cons\", 6);\n\n\t\t\tparsed.push({\n\t\t\t\tid: String(parsed.length + 1),\n\t\t\t\ttitle,\n\t\t\t\tsummary,\n\t\t\t\tcomplexity,\n\t\t\t\tblast_radius: blastRadius,\n\t\t\t\tsuggested_files: suggestedFiles.length > 0 ? suggestedFiles : fallback.suggested_files,\n\t\t\t\tplan: plan.length > 0 ? plan : fallback.plan,\n\t\t\t\tpros: pros.length > 0 ? pros : fallback.pros,\n\t\t\t\tcons: cons.length > 0 ? cons : fallback.cons,\n\t\t\t\twhen_to_choose: whenToChoose,\n\t\t\t});\n\t\t}\n\n\t\twhile (parsed.length < 3 && parsed.length < baseline.options.length) {\n\t\t\tconst fallback = baseline.options[parsed.length];\n\t\t\tparsed.push({\n\t\t\t\t...fallback,\n\t\t\t\tid: String(parsed.length + 1),\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\toptions: parsed.slice(0, 3),\n\t\t\tparsedCount: matches.length,\n\t\t};\n\t}\n\n\tprivate parseSingularAgentAnalysisFromText(\n\t\tbaseline: SingularAnalysisResult,\n\t\trawText: string,\n\t): { result: SingularAnalysisResult; parsedOptions: number; hasRecommendation: boolean } {\n\t\tconst recommendationRaw = this.extractLabeledValue(rawText, [\"Recommendation\"], 64);\n\t\tconst recommendation = this.normalizeSingularRecommendation(recommendationRaw, baseline.recommendation);\n\t\tconst recommendationReason =\n\t\t\tthis.extractLabeledValue(rawText, [\"Reason\", \"Recommendation Reason\"], 320) ?? baseline.recommendationReason;\n\t\tconst baselineComplexity = this.normalizeSingularComplexity(\n\t\t\tthis.extractLabeledValue(rawText, [\"Complexity\"], 24),\n\t\t\tbaseline.baselineComplexity,\n\t\t);\n\t\tconst baselineBlastRadius = this.normalizeSingularBlastRadius(\n\t\t\tthis.extractLabeledValue(rawText, [\"Blast Radius\", \"Blast\"], 24),\n\t\t\tbaseline.baselineBlastRadius,\n\t\t);\n\t\tconst stageFit = this.normalizeSingularStageFit(this.extractLabeledValue(rawText, [\"Stage Fit\"], 40)) ?? baseline.stageFit;\n\t\tconst stageFitReason = this.extractLabeledValue(rawText, [\"Stage Fit Reason\"], 280) ?? baseline.stageFitReason;\n\t\tconst impactAnalysis: SingularImpactAnalysis = {\n\t\t\tcodebase: this.extractLabeledValue(rawText, [\"Impact - Codebase\", \"Codebase Impact\"], 260) ?? \"Unknown.\",\n\t\t\tdelivery: this.extractLabeledValue(rawText, [\"Impact - Delivery\", \"Delivery Impact\"], 260) ?? \"Unknown.\",\n\t\t\trisks: this.extractLabeledValue(rawText, [\"Impact - Risks\", \"Risk Impact\"], 260) ?? \"Unknown.\",\n\t\t\toperations: this.extractLabeledValue(rawText, [\"Impact - Operations\", \"Operations Impact\"], 260) ?? \"Unknown.\",\n\t\t};\n\t\tconst { options, parsedCount } = this.parseSingularOptionsFromText(rawText, baseline);\n\n\t\treturn {\n\t\t\tresult: {\n\t\t\t\t...baseline,\n\t\t\t\trecommendation,\n\t\t\t\trecommendationReason,\n\t\t\t\tbaselineComplexity,\n\t\t\t\tbaselineBlastRadius,\n\t\t\t\tstageFit,\n\t\t\t\tstageFitReason,\n\t\t\t\timpactAnalysis,\n\t\t\t\toptions,\n\t\t\t},\n\t\t\tparsedOptions: parsedCount,\n\t\t\thasRecommendation: recommendationRaw !== undefined,\n\t\t};\n\t}\n\n\tprivate async runSingularAgentFeasibilityPass(\n\t\trequest: string,\n\t\tbaseline: SingularAnalysisResult,\n\t\tcontract: EngineeringContract,\n\t): Promise<SingularAnalysisResult | undefined> {\n\t\tconst model = this.session.model;\n\t\tif (!model) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst agentDir = getAgentDir();\n\t\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\t\tconst authStorage = AuthStorage.create(getAuthPath());\n\t\tconst modelRegistry = new ModelRegistry(authStorage, getModelsPath());\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tnoExtensions: true,\n\t\t\tnoSkills: true,\n\t\t\tnoPromptTemplates: true,\n\t\t});\n\t\tawait resourceLoader.reload();\n\n\t\tconst { session } = await createAgentSession({\n\t\t\tcwd,\n\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t\tsettingsManager,\n\t\t\tauthStorage,\n\t\t\tmodelRegistry,\n\t\t\tresourceLoader,\n\t\t\tmodel,\n\t\t\tprofile: \"plan\",\n\t\t\tenableTaskTool: false,\n\t\t});\n\n\t\tlet toolCallsStarted = 0;\n\t\tconst chunks: string[] = [];\n\t\tconst eventBridge = this.createIosmVerificationEventBridge({\n\t\t\tloaderMessage: `Running /singular feasibility analysis... (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t});\n\t\tconst unsubscribe = session.subscribe((event) => {\n\t\t\teventBridge(event);\n\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\ttoolCallsStarted += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"message_end\" && event.message.role === \"assistant\") {\n\t\t\t\tfor (const part of event.message.content) {\n\t\t\t\t\tif (part.type === \"text\" && part.text.trim()) {\n\t\t\t\t\t\tchunks.push(part.text.trim());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.singularAnalysisSession = session;\n\t\ttry {\n\t\t\tconst primaryPrompt = this.buildSingularAgentPrompt(request, baseline, contract);\n\t\t\tconst strictRetryPrompt = [\n\t\t\t\t\"Retry strict mode:\",\n\t\t\t\t\"- Inspect repository files using tools first.\",\n\t\t\t\t\"- Return markdown report using the exact template from previous prompt.\",\n\t\t\t\t\"- Include Recommendation and Option 1/2/3 sections.\",\n\t\t\t\t\"- Do not return JSON.\",\n\t\t\t].join(\"\\n\");\n\n\t\t\tconst runAttempt = async (promptText: string): Promise<{ text: string; toolCalls: number }> => {\n\t\t\t\tconst chunkStart = chunks.length;\n\t\t\t\tconst toolStart = toolCallsStarted;\n\t\t\t\tawait session.prompt(promptText, {\n\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\tskipOrchestrationDirective: true,\n\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\ttext: chunks.slice(chunkStart).join(\"\\n\\n\").trim(),\n\t\t\t\t\ttoolCalls: Math.max(0, toolCallsStarted - toolStart),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tlet attempt = await runAttempt(primaryPrompt);\n\t\t\tlet parsed = this.parseSingularAgentAnalysisFromText(baseline, attempt.text);\n\n\t\t\tif ((parsed.parsedOptions < 3 || !parsed.hasRecommendation || attempt.toolCalls === 0) && !session.isStreaming) {\n\t\t\t\tattempt = await runAttempt(strictRetryPrompt);\n\t\t\t\tparsed = this.parseSingularAgentAnalysisFromText(baseline, attempt.text);\n\t\t\t}\n\n\t\t\tif ((parsed.parsedOptions < 3 || !parsed.hasRecommendation) || toolCallsStarted === 0) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn parsed.result;\n\t\t} finally {\n\t\t\tif (session.isStreaming) {\n\t\t\t\tawait session.abort().catch(() => {\n\t\t\t\t\t// best effort\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (this.singularAnalysisSession === session) {\n\t\t\t\tthis.singularAnalysisSession = undefined;\n\t\t\t}\n\t\t\tunsubscribe();\n\t\t\tsession.dispose();\n\t\t}\n\t}\n\n\tprivate formatSingularRunReport(result: SingularAnalysisResult): string {\n\t\tconst recommendedId = this.resolveRecommendedSingularOptionId(result);\n\t\tconst coverageLine = `${result.scannedFiles} scanned · ${result.sourceFiles} source · ${result.testFiles} tests`;\n\t\tconst lines = [\n\t\t\t`run_id: ${result.runId}`,\n\t\t\t`request: ${result.request}`,\n\t\t\t`generated_at: ${result.generatedAt}`,\n\t\t\t\"\",\n\t\t\t\"overview:\",\n\t\t\t` recommendation: ${result.recommendation}`,\n\t\t\t` reason: ${result.recommendationReason}`,\n\t\t\t` complexity: ${result.baselineComplexity}`,\n\t\t\t` blast_radius: ${result.baselineBlastRadius}`,\n\t\t\t` repository_coverage: ${coverageLine}`,\n\t\t];\n\t\tif (result.stageFit) {\n\t\t\tlines.push(` stage_fit: ${result.stageFit}`);\n\t\t}\n\t\tif (result.stageFitReason) {\n\t\t\tlines.push(` stage_fit_reason: ${result.stageFitReason}`);\n\t\t}\n\t\tif (result.impactAnalysis) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"impact_analysis:\");\n\t\t\tlines.push(` codebase: ${result.impactAnalysis.codebase}`);\n\t\t\tlines.push(` delivery: ${result.impactAnalysis.delivery}`);\n\t\t\tlines.push(` risks: ${result.impactAnalysis.risks}`);\n\t\t\tlines.push(` operations: ${result.impactAnalysis.operations}`);\n\t\t}\n\t\tif (result.matchedFiles.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(`matched_files: ${result.matchedFiles.slice(0, 8).join(\", \")}`);\n\t\t}\n\t\tif (result.contractSignals.length > 0) {\n\t\t\tlines.push(`contract_signals: ${result.contractSignals.join(\", \")}`);\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"implementation_options:\");\n\t\tfor (const option of result.options) {\n\t\t\tconst recommendedMark = option.id === recommendedId ? \" [recommended]\" : \"\";\n\t\t\tlines.push(\n\t\t\t\t`${option.id}. ${option.title}${recommendedMark} [complexity=${option.complexity}, blast=${option.blast_radius}]`,\n\t\t\t);\n\t\t\tlines.push(` ${option.summary}`);\n\t\t\tif (option.when_to_choose) {\n\t\t\t\tlines.push(` when_to_choose: ${option.when_to_choose}`);\n\t\t\t}\n\t\t\tif (option.suggested_files.length > 0) {\n\t\t\t\tlines.push(` files: ${option.suggested_files.slice(0, 8).join(\", \")}`);\n\t\t\t}\n\t\t\tif (option.plan.length > 0) {\n\t\t\t\tlines.push(` first_step: ${option.plan[0]}`);\n\t\t\t}\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"next_action:\");\n\t\tlines.push(\" choose option 1/2/3 to generate a detailed execution draft in editor\");\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate buildSingularExecutionDraft(\n\t\tresult: SingularAnalysisResult,\n\t\toption: SingularOption,\n\t\tcontract?: EngineeringContract,\n\t): string {\n\t\tconst effectiveContract = contract ?? this.singularLastEffectiveContract ?? {};\n\t\tconst defaultQualityGates = [\n\t\t\t\"Targeted tests for changed flows pass.\",\n\t\t\t\"No regressions in adjacent user paths.\",\n\t\t\t\"Logs/metrics updated for the new behavior.\",\n\t\t];\n\t\tconst defaultDoD = [\n\t\t\t\"Core behavior implemented and manually validated.\",\n\t\t\t\"Automated coverage added for critical path.\",\n\t\t\t\"Documentation/changelog updated for user-visible changes.\",\n\t\t];\n\t\tconst qualityGates =\n\t\t\t(effectiveContract.quality_gates ?? []).length > 0\n\t\t\t\t? (effectiveContract.quality_gates ?? []).slice(0, 10)\n\t\t\t\t: defaultQualityGates;\n\t\tconst definitionOfDone =\n\t\t\t(effectiveContract.definition_of_done ?? []).length > 0\n\t\t\t\t? (effectiveContract.definition_of_done ?? []).slice(0, 10)\n\t\t\t\t: defaultDoD;\n\t\tconst constraints = (effectiveContract.constraints ?? []).slice(0, 10);\n\t\tconst scopeInclude = (effectiveContract.scope_include ?? []).slice(0, 10);\n\t\tconst scopeExclude = (effectiveContract.scope_exclude ?? []).slice(0, 10);\n\t\tconst risksFromOption = option.cons.slice(0, 6);\n\t\tconst files = option.suggested_files.slice(0, 14);\n\t\tconst planSteps = option.plan.length > 0 ? option.plan : [\"Implement minimal working path for selected option.\"];\n\n\t\tconst lines = [\n\t\t\t\"# Singular Execution Plan\",\n\t\t\t\"\",\n\t\t\t`Request: ${result.request}`,\n\t\t\t`Selected option: ${option.id}. ${option.title}`,\n\t\t\t`Decision context: recommendation=${result.recommendation}, complexity=${option.complexity}, blast_radius=${option.blast_radius}`,\n\t\t\t...(result.stageFit ? [`Stage fit: ${result.stageFit}`] : []),\n\t\t\t...(result.stageFitReason ? [`Stage fit reason: ${result.stageFitReason}`] : []),\n\t\t\t...(option.when_to_choose ? [`When to choose: ${option.when_to_choose}`] : []),\n\t\t\t\"\",\n\t\t\t\"## 1) Scope and Boundaries\",\n\t\t\t\"In scope:\",\n\t\t\t...(scopeInclude.length > 0 ? scopeInclude.map((item) => `- ${item}`) : [\"- Deliver selected option with minimal blast radius.\"]),\n\t\t\t\"Out of scope:\",\n\t\t\t...(scopeExclude.length > 0 ? scopeExclude.map((item) => `- ${item}`) : [\"- Broad refactors outside touched modules.\"]),\n\t\t\t\"Hard constraints:\",\n\t\t\t...(constraints.length > 0 ? constraints.map((item) => `- ${item}`) : [\"- Keep backward compatibility for existing behavior.\"]),\n\t\t\t\"\",\n\t\t\t\"## 2) Implementation Phases\",\n\t\t\t\"Phase A - Preparation\",\n\t\t\t\"1. Confirm acceptance criteria and edge cases for the selected option.\",\n\t\t\t\"2. Lock touched modules and define rollback strategy before coding.\",\n\t\t\t\"Phase B - Implementation\",\n\t\t\t...planSteps.map((step, index) => `${index + 1}. ${step}`),\n\t\t\t\"Phase C - Hardening\",\n\t\t\t\"1. Run targeted regression checks on impacted flows.\",\n\t\t\t\"2. Address review findings and update docs if behavior changed.\",\n\t\t\t\"\",\n\t\t\t\"## 3) Priority Files\",\n\t\t];\n\t\tlines.push(...(files.length > 0 ? files.map((filePath) => `- ${filePath}`) : [\"- Determine target files during code scan.\"]));\n\t\tlines.push(\n\t\t\t\"\",\n\t\t\t\"## 4) Validation and Quality Gates\",\n\t\t\t\"Functional checks:\",\n\t\t\t\"- Validate main user flow end-to-end.\",\n\t\t\t\"- Validate failure/edge path handling.\",\n\t\t\t\"Quality gates:\",\n\t\t\t...qualityGates.map((gate) => `- [ ] ${gate}`),\n\t\t\t\"\",\n\t\t\t\"## 5) Risk Controls and Rollout\",\n\t\t\t...(result.impactAnalysis?.risks ? [`- Risk focus: ${result.impactAnalysis.risks}`] : [\"- Risk focus: maintain safe rollout with quick rollback.\"]),\n\t\t\t...(risksFromOption.length > 0 ? risksFromOption.map((risk) => `- [ ] Mitigate: ${risk}`) : [\"- [ ] Track and mitigate newly discovered risks during implementation.\"]),\n\t\t\t\"- [ ] Prepare rollback checkpoint before merge.\",\n\t\t\t\"- [ ] Use incremental rollout/feature-flag if blast radius is medium or high.\",\n\t\t\t\"\",\n\t\t\t\"## 6) Definition of Done\",\n\t\t\t...definitionOfDone.map((item) => `- [ ] ${item}`),\n\t\t\t\"\",\n\t\t\t\"## 7) Delivery Notes\",\n\t\t\t\"- Keep commits scoped by phase (prep -> impl -> hardening).\",\n\t\t\t\"- Include tests and docs in the same delivery stream.\",\n\t\t);\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate resolveRecommendedSingularOptionId(result: SingularAnalysisResult): string {\n\t\tif (result.recommendation === \"defer\") {\n\t\t\treturn \"3\";\n\t\t}\n\t\tif (result.recommendation === \"implement_incrementally\") {\n\t\t\tconst incremental = result.options.find((option) => /increment|mvp|phased/i.test(`${option.title} ${option.summary}`));\n\t\t\treturn incremental?.id ?? \"1\";\n\t\t}\n\t\tconst nonDefer = result.options.find((option) => !/defer|later|postpone/i.test(`${option.title} ${option.summary}`));\n\t\treturn nonDefer?.id ?? \"1\";\n\t}\n\n\tprivate async promptSingularDecision(result: SingularAnalysisResult): Promise<void> {\n\t\tconst recommendedId = this.resolveRecommendedSingularOptionId(result);\n\t\tconst options = result.options.map((option) => {\n\t\t\tconst recommendedSuffix = option.id === recommendedId ? \" (Recommended)\" : \"\";\n\t\t\treturn `Option ${option.id}${recommendedSuffix}: ${option.title} [risk=${option.blast_radius}]`;\n\t\t});\n\t\toptions.push(\"Close without decision\");\n\t\tconst selected = await this.showExtensionSelector(\"/singular: choose next step\", options);\n\t\tif (!selected || selected === \"Close without decision\") return;\n\n\t\tconst match = selected.match(/^Option\\s+(\\d+)/);\n\t\tif (!match) return;\n\t\tconst picked = result.options.find((option) => option.id === match[1]);\n\t\tif (!picked) return;\n\n\t\tthis.showCommandTextBlock(\n\t\t\t\"Singular Decision\",\n\t\t\t[\n\t\t\t\t`selected: ${picked.id}. ${picked.title}`,\n\t\t\t\t`summary: ${picked.summary}`,\n\t\t\t\t`complexity: ${picked.complexity}`,\n\t\t\t\t`blast_radius: ${picked.blast_radius}`,\n\t\t\t\t...(picked.when_to_choose ? [`when_to_choose: ${picked.when_to_choose}`] : []),\n\t\t\t\t\"\",\n\t\t\t\t\"plan:\",\n\t\t\t\t...picked.plan.map((step, index) => `${index + 1}. ${step}`),\n\t\t\t\t\"\",\n\t\t\t\t\"pros:\",\n\t\t\t\t...picked.pros.map((item) => `- ${item}`),\n\t\t\t\t\"\",\n\t\t\t\t\"cons:\",\n\t\t\t\t...picked.cons.map((item) => `- ${item}`),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\n\t\tif (picked.id === \"3\" || result.recommendation === \"defer\") {\n\t\t\tthis.showStatus(\"Singular: defer option selected, implementation postponed.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.editor.setText(this.buildSingularExecutionDraft(result, picked, this.singularLastEffectiveContract));\n\t\tthis.showStatus(\"Singular: detailed execution draft generated in editor.\");\n\t}\n\n\tprivate showSingularLastSummary(): void {\n\t\tconst last = this.singularService.getLastRun();\n\t\tif (!last) {\n\t\t\tthis.showWarning(\"No /singular analyses found yet.\");\n\t\t\treturn;\n\t\t}\n\t\tthis.showCommandTextBlock(\n\t\t\t\"Singular Last Run\",\n\t\t\t[\n\t\t\t\t`run_id: ${last.runId}`,\n\t\t\t\t`generated_at: ${last.generatedAt ?? \"unknown\"}`,\n\t\t\t\t`recommendation: ${last.recommendation ?? \"unknown\"}`,\n\t\t\t\t`request: ${last.request ?? \"unknown\"}`,\n\t\t\t\t`analysis_path: ${last.analysisPath}`,\n\t\t\t\t...(last.metaPath ? [`meta_path: ${last.metaPath}`] : []),\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tprivate async runSingularAnalysis(request: string): Promise<void> {\n\t\tlet effectiveContract: EngineeringContract = {};\n\t\ttry {\n\t\t\teffectiveContract = this.contractService.getState().effective;\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.showWarning(`Contract unavailable, continuing /singular without contract overlay: ${message}`);\n\t\t}\n\t\tthis.singularLastEffectiveContract = effectiveContract;\n\n\t\ttry {\n\t\t\tthis.showStatus(\"Singular: preparing baseline scan...\");\n\t\t\tconst baseline = await this.singularService.analyze({\n\t\t\t\trequest,\n\t\t\t\tautosave: false,\n\t\t\t\tcontract: effectiveContract,\n\t\t\t});\n\n\t\t\tlet result = baseline;\n\t\t\tif (!this.session.model) {\n\t\t\t\tthis.showWarning(\"No model selected. /singular used heuristic analysis only. Use /model to enable agent feasibility pass.\");\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tconst enriched = await this.runSingularAgentFeasibilityPass(request, baseline, effectiveContract);\n\t\t\t\t\tif (enriched) {\n\t\t\t\t\t\tresult = enriched;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.showWarning(\"Agent feasibility pass returned incomplete output. Showing heuristic fallback.\");\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tthis.showWarning(`Agent feasibility pass failed. Showing heuristic fallback: ${message}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.singularService.saveAnalysis(result);\n\t\t\tthis.showStatus(`Singular analysis complete: ${result.runId}`);\n\t\t\tthis.showCommandTextBlock(\"Singular Analysis\", this.formatSingularRunReport(result));\n\t\t\tawait this.promptSingularDecision(result);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tthis.showError(`Singular analysis failed: ${message}`);\n\t\t}\n\t}\n\n\tprivate async handleSingularCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.length === 0) {\n\t\t\tthis.showWarning(\"Usage: /singular <feature request>\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst subcommand = (args[0] ?? \"\").toLowerCase();\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Singular Help\",\n\t\t\t\t[\n\t\t\t\t\t\"Usage:\",\n\t\t\t\t\t\" /singular <feature request>\",\n\t\t\t\t\t\" /singular last\",\n\t\t\t\t\t\" /singular help\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Examples:\",\n\t\t\t\t\t\" /singular add account dashboard\",\n\t\t\t\t\t\" /singular introduce RBAC for API\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"last\" && args.length === 1) {\n\t\t\tthis.showSingularLastSummary();\n\t\t\treturn;\n\t\t}\n\n\t\tconst request = args.join(\" \").trim();\n\t\tif (!request) {\n\t\t\tthis.showWarning(\"Usage: /singular <feature request>\");\n\t\t\treturn;\n\t\t}\n\t\tawait this.runSingularAnalysis(request);\n\t}\n\n\tprivate parseCheckpointNameFromLabel(label: string | undefined): string | undefined {\n\t\tif (!label) return undefined;\n\t\tif (!label.startsWith(CHECKPOINT_LABEL_PREFIX)) return undefined;\n\t\tconst name = label.slice(CHECKPOINT_LABEL_PREFIX.length).trim();\n\t\treturn name.length > 0 ? name : undefined;\n\t}\n\n\tprivate buildCheckpointLabel(name: string): string {\n\t\treturn `${CHECKPOINT_LABEL_PREFIX}${name}`;\n\t}\n\n\tprivate normalizeCheckpointName(raw: string): string | undefined {\n\t\tconst normalized = raw.replace(/\\s+/g, \" \").trim();\n\t\tif (!normalized) return undefined;\n\t\tif (normalized.length > 80) return undefined;\n\t\treturn normalized;\n\t}\n\n\tprivate getSessionCheckpoints(): SessionCheckpoint[] {\n\t\tconst active = new Map<string, SessionCheckpoint>();\n\t\tfor (const entry of this.sessionManager.getEntries()) {\n\t\t\tif (entry.type !== \"label\") continue;\n\t\t\tconst name = this.parseCheckpointNameFromLabel(entry.label);\n\t\t\tif (!name) {\n\t\t\t\tactive.delete(entry.targetId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tactive.set(entry.targetId, {\n\t\t\t\tname,\n\t\t\t\ttargetId: entry.targetId,\n\t\t\t\tlabelEntryId: entry.id,\n\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t});\n\t\t}\n\t\treturn [...active.values()].sort(\n\t\t\t(a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime(),\n\t\t);\n\t}\n\n\tprivate buildDefaultCheckpointName(checkpoints: SessionCheckpoint[]): string {\n\t\tconst used = new Set(checkpoints.map((checkpoint) => checkpoint.name.toLowerCase()));\n\t\tlet index = 1;\n\t\twhile (used.has(`cp-${index}`)) {\n\t\t\tindex += 1;\n\t\t}\n\t\treturn `cp-${index}`;\n\t}\n\n\tprivate formatCheckpointList(checkpoints: SessionCheckpoint[]): string {\n\t\tif (checkpoints.length === 0) {\n\t\t\treturn \"No checkpoints yet.\\nCreate one with: /checkpoint [name]\";\n\t\t}\n\t\tconst newestFirst = [...checkpoints].reverse();\n\t\tconst lines = newestFirst.map((checkpoint, index) => {\n\t\t\tconst target = this.sessionManager.getEntry(checkpoint.targetId);\n\t\t\tconst type = target?.type ?? \"missing\";\n\t\t\treturn `${index + 1}. ${checkpoint.name} -> ${checkpoint.targetId} (${type}) @ ${checkpoint.timestamp}`;\n\t\t});\n\t\tlines.push(\"\");\n\t\tlines.push(\"Usage: /rollback [name|index]\");\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate formatCheckpointOption(index: number, checkpoint: SessionCheckpoint): string {\n\t\tconst target = this.sessionManager.getEntry(checkpoint.targetId);\n\t\tconst type = target?.type ?? \"missing\";\n\t\treturn `${index}. ${checkpoint.name} -> ${checkpoint.targetId} (${type}) @ ${checkpoint.timestamp}`;\n\t}\n\n\tprivate handleCheckpointCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\tconst checkpoints = this.getSessionCheckpoints();\n\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\tthis.showCommandTextBlock(\"Checkpoints\", this.formatCheckpointList(checkpoints));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Checkpoint Help\",\n\t\t\t\t[\"Usage:\", \" /checkpoint [name]\", \" /checkpoint list\", \"\", \"Examples:\", \" /checkpoint\", \" /checkpoint before-refactor\"].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst leafId = this.sessionManager.getLeafId();\n\t\tif (!leafId) {\n\t\t\tthis.showWarning(\"Cannot create checkpoint yet (session has no entries).\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst requestedName = args.join(\" \");\n\t\tconst name = requestedName ? this.normalizeCheckpointName(requestedName) : this.buildDefaultCheckpointName(checkpoints);\n\t\tif (!name) {\n\t\t\tthis.showWarning(\"Invalid checkpoint name. Use 1-80 visible characters.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sessionManager.appendLabelChange(leafId, this.buildCheckpointLabel(name));\n\t\tthis.showStatus(`Checkpoint saved: ${name} (${leafId})`);\n\t}\n\n\tprivate async handleRollbackCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst subcommand = args[0]?.toLowerCase();\n\t\tconst checkpoints = this.getSessionCheckpoints();\n\n\t\tif (subcommand === \"list\" || subcommand === \"ls\") {\n\t\t\tthis.showCommandTextBlock(\"Checkpoints\", this.formatCheckpointList(checkpoints));\n\t\t\treturn;\n\t\t}\n\n\t\tif (subcommand === \"help\" || subcommand === \"-h\" || subcommand === \"--help\") {\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"Rollback Help\",\n\t\t\t\t[\n\t\t\t\t\t\"Usage:\",\n\t\t\t\t\t\" /rollback\",\n\t\t\t\t\t\" /rollback <name>\",\n\t\t\t\t\t\" /rollback <index>\",\n\t\t\t\t\t\"\",\n\t\t\t\t\t\"Examples:\",\n\t\t\t\t\t\" /rollback\",\n\t\t\t\t\t\" /rollback before-refactor\",\n\t\t\t\t\t\" /rollback 2\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (checkpoints.length === 0) {\n\t\t\tthis.showWarning(\"No checkpoints available. Create one with /checkpoint.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst newestFirst = [...checkpoints].reverse();\n\t\tconst selector = args.join(\" \").trim();\n\t\tlet target: SessionCheckpoint | undefined = newestFirst[0];\n\n\t\tif (selector) {\n\t\t\tconst numeric = Number.parseInt(selector, 10);\n\t\t\tif (Number.isFinite(numeric) && `${numeric}` === selector) {\n\t\t\t\ttarget = newestFirst[numeric - 1];\n\t\t\t\tif (!target) {\n\t\t\t\t\tthis.showWarning(`Checkpoint index ${numeric} is out of range.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttarget = newestFirst.find((checkpoint) => checkpoint.name === selector);\n\t\t\t\tif (!target) {\n\t\t\t\t\tthis.showWarning(`Checkpoint \"${selector}\" not found.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\t\tif (canShowInteractiveSelector) {\n\t\t\t\tconst options = newestFirst.map((checkpoint, index) => this.formatCheckpointOption(index + 1, checkpoint));\n\t\t\t\tconst picked = await this.showExtensionSelector(\"/rollback: choose checkpoint\", options);\n\t\t\t\tif (!picked) {\n\t\t\t\t\tthis.showStatus(\"Rollback cancelled\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst selectedIndex = options.indexOf(picked);\n\t\t\t\tif (selectedIndex >= 0) {\n\t\t\t\t\ttarget = newestFirst[selectedIndex];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (!target) {\n\t\t\tthis.showWarning(\"No rollback target selected.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await this.session.navigateTree(target.targetId, { summarize: false });\n\t\t\tif (result.cancelled || result.aborted) {\n\t\t\t\tthis.showStatus(\"Rollback cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.chatContainer.clear();\n\t\t\tthis.renderInitialMessages();\n\t\t\tif (result.editorText && !this.editor.getText().trim()) {\n\t\t\t\tthis.editor.setText(result.editorText);\n\t\t\t}\n\t\t\tthis.showStatus(`Rolled back to checkpoint: ${target.name}`);\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate async runDoctorInteractiveFixes(checks: DoctorCheckItem[]): Promise<void> {\n\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\tif (!canShowInteractiveSelector) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasModelIssues = checks.some(\n\t\t\t(check) =>\n\t\t\t\t(check.label === \"Active model\" || check.label === \"Active model auth\" || check.label === \"Available models\") &&\n\t\t\t\tcheck.level === \"fail\",\n\t\t);\n\t\tconst hasMcpIssues = checks.some((check) => check.label === \"MCP servers\" && check.level !== \"ok\");\n\t\tconst hasSemanticIssues = checks.some((check) => check.label === \"Semantic index\" && check.level !== \"ok\");\n\t\tconst hasContractIssues = checks.some((check) => check.label === \"Contract state\" && check.level !== \"ok\");\n\t\tconst hasResourceIssues = checks.some((check) => check.label === \"Resources\" && check.level !== \"ok\");\n\n\t\twhile (true) {\n\t\t\tconst options: string[] = [];\n\t\t\tif (hasModelIssues) {\n\t\t\t\toptions.push(\"Open model selector\");\n\t\t\t\toptions.push(\"Login provider\");\n\t\t\t}\n\t\t\tif (this.mcpRuntime) {\n\t\t\t\tif (hasMcpIssues) {\n\t\t\t\t\toptions.push(\"Open MCP manager\");\n\t\t\t\t}\n\t\t\t\toptions.push(\"Refresh MCP runtime\");\n\t\t\t}\n\t\t\tif (hasSemanticIssues) {\n\t\t\t\toptions.push(\"Open semantic manager\");\n\t\t\t}\n\t\t\tif (hasContractIssues) {\n\t\t\t\toptions.push(\"Open contract manager\");\n\t\t\t}\n\t\t\tif (this.permissionMode === \"yolo\") {\n\t\t\t\toptions.push(\"Set permissions mode to ask\");\n\t\t\t}\n\t\t\tif (hasResourceIssues) {\n\t\t\t\toptions.push(\"Reload resources\");\n\t\t\t}\n\t\t\toptions.push(\"Show auth/models paths\");\n\t\t\toptions.push(\"Close\");\n\n\t\t\tconst selected = await this.showExtensionSelector(\"/doctor fixes\", options);\n\t\t\tif (!selected || selected === \"Close\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (selected === \"Open model selector\") {\n\t\t\t\tawait this.showModelProviderSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Login provider\") {\n\t\t\t\tawait this.showOAuthSelector(\"login\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Open MCP manager\") {\n\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\tthis.showMcpSelector();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Refresh MCP runtime\") {\n\t\t\t\tawait this.refreshMcpRuntimeAndSession();\n\t\t\t\tthis.showStatus(\"MCP servers refreshed\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Open semantic manager\") {\n\t\t\t\tawait this.handleSemanticCommand(\"/semantic\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Open contract manager\") {\n\t\t\t\tawait this.handleContractCommand(\"/contract\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Set permissions mode to ask\") {\n\t\t\t\tthis.permissionMode = \"ask\";\n\t\t\t\tthis.settingsManager.setPermissionMode(\"ask\");\n\t\t\t\tthis.showStatus(\"Permissions: ask\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (selected === \"Reload resources\") {\n\t\t\t\tawait this.handleReloadCommand();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (selected === \"Show auth/models paths\") {\n\t\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\t\tconst agentDir = getAgentDir();\n\t\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\t\"Runtime Paths\",\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t`auth.json: ${getAuthPath()}`,\n\t\t\t\t\t\t\t`models.json: ${getModelsPath()}`,\n\t\t\t\t\t\t\t`contract(project): ${this.contractService.getProjectPath()}`,\n\t\t\t\t\t\t\t`singular(analyses): ${this.singularService.getAnalysesRoot()}`,\n\t\t\t\t\t\t\t`semantic(user): ${getSemanticConfigPath(\"user\", cwd, agentDir)}`,\n\t\t\t\t\t\t\t`semantic(project): ${getSemanticConfigPath(\"project\", cwd, agentDir)}`,\n\t\t\t\t\t\t\t`semantic(index): ${getSemanticIndexDir(cwd, agentDir)}`,\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleDoctorCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst outputJson = args.includes(\"--json\");\n\t\tconst hooks = this.getHookPolicySummary();\n\t\tconst model = this.session.model;\n\t\tconst modelRegistry = this.session.modelRegistry;\n\t\tconst allModels = modelRegistry.getAll();\n\t\tconst availableModels = modelRegistry.getAvailable();\n\t\tconst modelLoadError = modelRegistry.getError();\n\t\tconst authProviders = modelRegistry.authStorage.list();\n\t\tconst hasModelAuth = model ? modelRegistry.authStorage.hasAuth(model.provider) : false;\n\t\tconst extensionErrors = this.session.resourceLoader.getExtensions().errors.length;\n\t\tconst skillDiagnostics = this.session.resourceLoader.getSkills().diagnostics.length;\n\t\tconst promptDiagnostics = this.session.resourceLoader.getPrompts().diagnostics.length;\n\t\tconst themeDiagnostics = this.session.resourceLoader.getThemes().diagnostics.length;\n\n\t\tconst mcpStatuses = this.mcpRuntime?.getServers() ?? [];\n\t\tconst mcpConfigErrors = this.mcpRuntime?.getErrors() ?? [];\n\t\tconst mcpConnected = mcpStatuses.filter((status) => status.state === \"connected\").length;\n\t\tconst mcpErrored = mcpStatuses.filter((status) => status.state === \"error\").length;\n\t\tconst mcpDisabled = mcpStatuses.filter((status) => !status.enabled).length;\n\t\tconst cliToolStatuses = resolveDoctorCliToolStatuses();\n\t\tconst missingCliTools = cliToolStatuses.filter((status) => !status.available).map((status) => status.tool);\n\t\tlet semanticStatus: SemanticStatusResult | undefined;\n\t\tlet semanticStatusError: string | undefined;\n\t\ttry {\n\t\t\tsemanticStatus = await this.createSemanticRuntime().status();\n\t\t} catch (error) {\n\t\t\tsemanticStatusError = error instanceof Error ? error.message : String(error);\n\t\t}\n\t\tlet contractState: ContractState | undefined;\n\t\tlet contractStateError: string | undefined;\n\t\ttry {\n\t\t\tcontractState = this.contractService.getState();\n\t\t} catch (error) {\n\t\t\tcontractStateError = error instanceof Error ? error.message : String(error);\n\t\t}\n\n\t\tconst checks: DoctorCheckItem[] = [];\n\t\tconst addCheck = (\n\t\t\tlevel: DoctorCheckLevel,\n\t\t\tlabel: string,\n\t\t\tdetail: string,\n\t\t\tfix?: string,\n\t\t) => checks.push({ level, label, detail, fix });\n\n\t\tif (!model) {\n\t\t\taddCheck(\"fail\", \"Active model\", \"No active model selected\", \"Run /model and pick a model.\");\n\t\t} else if (!hasModelAuth) {\n\t\t\taddCheck(\n\t\t\t\t\"fail\",\n\t\t\t\t\"Active model auth\",\n\t\t\t\t`Model ${model.provider}/${model.id} has no auth configured`,\n\t\t\t\t`Run /login ${model.provider} or set API key env vars.`,\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"Active model\", `${model.provider}/${model.id}`);\n\t\t}\n\n\t\tif (availableModels.length === 0) {\n\t\t\taddCheck(\"fail\", \"Available models\", \"No models currently have valid auth\", \"Run /login or configure API keys.\");\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"Available models\", `${availableModels.length}/${allModels.length} ready`);\n\t\t}\n\n\t\tif (modelLoadError) {\n\t\t\taddCheck(\"warn\", \"models.json\", modelLoadError.split(\"\\n\")[0] ?? modelLoadError, `Inspect ${getModelsPath()}.`);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"models.json\", \"Loaded without schema/runtime errors\");\n\t\t}\n\n\t\tif (!fs.existsSync(getAuthPath())) {\n\t\t\taddCheck(\"warn\", \"auth.json\", `Missing ${getAuthPath()}`, \"Run /login to create credentials.\");\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"auth.json\", `${authProviders.length} provider credential(s) stored`);\n\t\t}\n\n\t\tif (!this.mcpRuntime) {\n\t\t\taddCheck(\"warn\", \"MCP runtime\", \"Unavailable in this session\");\n\t\t} else if (mcpStatuses.length === 0) {\n\t\t\taddCheck(\"warn\", \"MCP servers\", \"No MCP servers configured\", \"Use /mcp add or iosm mcp add ...\");\n\t\t} else if (mcpErrored > 0 || mcpConfigErrors.length > 0) {\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"MCP servers\",\n\t\t\t\t`${mcpConnected} connected, ${mcpErrored} error, ${mcpDisabled} disabled`,\n\t\t\t\t\"Open /mcp to reconnect or inspect server errors.\",\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"MCP servers\", `${mcpConnected} connected, ${mcpDisabled} disabled`);\n\t\t}\n\n\t\tif (semanticStatusError) {\n\t\t\taddCheck(\"fail\", \"Semantic index\", semanticStatusError, \"Run /semantic setup and retry /semantic status.\");\n\t\t} else if (!semanticStatus) {\n\t\t\taddCheck(\"warn\", \"Semantic index\", \"Status unavailable\", \"Run /semantic setup.\");\n\t\t} else if (!semanticStatus.configured) {\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"Semantic index\",\n\t\t\t\t\"Not configured\",\n\t\t\t\t`Run /semantic setup (user: ${semanticStatus.configPathUser} or project: ${semanticStatus.configPathProject}).`,\n\t\t\t);\n\t\t} else if (!semanticStatus.enabled) {\n\t\t\taddCheck(\"warn\", \"Semantic index\", \"Configured but disabled\", \"Enable semanticSearch.enabled or rerun /semantic setup.\");\n\t\t} else if (!semanticStatus.indexed) {\n\t\t\taddCheck(\"warn\", \"Semantic index\", \"Configured but index is missing\", \"Run /semantic index.\");\n\t\t} else if (semanticStatus.stale) {\n\t\t\tconst requiresRebuild =\n\t\t\t\tsemanticStatus.staleReason === \"provider_changed\" ||\n\t\t\t\tsemanticStatus.staleReason === \"chunking_changed\" ||\n\t\t\t\tsemanticStatus.staleReason === \"index_filters_changed\" ||\n\t\t\t\tsemanticStatus.staleReason === \"dimension_mismatch\";\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"Semantic index\",\n\t\t\t\t`Indexed but stale${semanticStatus.staleReason ? ` (${semanticStatus.staleReason})` : \"\"}`,\n\t\t\t\trequiresRebuild ? \"Run /semantic rebuild.\" : \"Run /semantic index.\",\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\n\t\t\t\t\"ok\",\n\t\t\t\t\"Semantic index\",\n\t\t\t\t`${semanticStatus.provider}/${semanticStatus.model} · auto_index=${semanticStatus.autoIndex ? \"on\" : \"off\"} · files=${semanticStatus.files} chunks=${semanticStatus.chunks}`,\n\t\t\t);\n\t\t}\n\n\t\tif (contractStateError) {\n\t\t\taddCheck(\"fail\", \"Contract state\", contractStateError, \"Fix .iosm/contract.json or run /contract clear --scope project.\");\n\t\t} else if (!contractState) {\n\t\t\taddCheck(\"warn\", \"Contract state\", \"Unavailable\", \"Run /contract show to inspect state.\");\n\t\t} else if (!contractState.hasProjectFile && Object.keys(contractState.sessionOverlay).length === 0) {\n\t\t\taddCheck(\"warn\", \"Contract state\", \"No project/session contract active\", \"Run /contract to define constraints and quality gates.\");\n\t\t} else {\n\t\t\taddCheck(\n\t\t\t\t\"ok\",\n\t\t\t\t\"Contract state\",\n\t\t\t\t`project=${contractState.hasProjectFile ? \"yes\" : \"no\"} session_keys=${Object.keys(contractState.sessionOverlay).length} effective_keys=${Object.keys(contractState.effective).length}`,\n\t\t\t);\n\t\t}\n\n\t\taddCheck(\"ok\", \"Singular analyzer\", \"Available via /singular <request>\");\n\n\t\tif (missingCliTools.length > 0) {\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"CLI toolchain\",\n\t\t\t\t`${cliToolStatuses.length - missingCliTools.length}/${cliToolStatuses.length} available (missing: ${missingCliTools.join(\", \")})`,\n\t\t\t\t`Install missing CLI tools: ${missingCliTools.join(\", \")}.`,\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"CLI toolchain\", `${cliToolStatuses.length}/${cliToolStatuses.length} available`);\n\t\t}\n\n\t\tif (extensionErrors > 0 || skillDiagnostics > 0 || promptDiagnostics > 0 || themeDiagnostics > 0) {\n\t\t\taddCheck(\n\t\t\t\t\"warn\",\n\t\t\t\t\"Resources\",\n\t\t\t\t`extensions:${extensionErrors} skills:${skillDiagnostics} prompts:${promptDiagnostics} themes:${themeDiagnostics}`,\n\t\t\t\t\"Run /reload and inspect warnings shown in the chat.\",\n\t\t\t);\n\t\t} else {\n\t\t\taddCheck(\"ok\", \"Resources\", \"No extension/skill/prompt/theme diagnostics\");\n\t\t}\n\n\t\taddCheck(\n\t\t\tthis.permissionMode === \"yolo\" ? \"warn\" : \"ok\",\n\t\t\t\"Permissions\",\n\t\t\t`mode=${this.permissionMode}, allowRules=${this.permissionAllowRules.length}, denyRules=${this.permissionDenyRules.length}`,\n\t\t\tthis.permissionMode === \"yolo\" ? \"Switch to /permissions ask for safer execution.\" : undefined,\n\t\t);\n\n\t\taddCheck(\n\t\t\tprocess.env[ENV_OFFLINE] ? \"warn\" : \"ok\",\n\t\t\t\"Environment\",\n\t\t\t`offline=${process.env[ENV_OFFLINE] ? \"on\" : \"off\"}, sessionTrace=${isSessionTraceEnabled() ? \"on\" : \"off\"}`,\n\t\t\tprocess.env[ENV_OFFLINE] ? \"Unset IOSM_OFFLINE/PI_OFFLINE when network access is required.\" : undefined,\n\t\t);\n\n\t\taddCheck(\n\t\t\t\"ok\",\n\t\t\t\"Hooks\",\n\t\t\thooks\n\t\t\t\t? `U${hooks.userPromptSubmit}/P${hooks.preToolUse}/T${hooks.postToolUse}/S${hooks.stop}`\n\t\t\t\t: \"No hooks loaded\",\n\t\t);\n\n\t\tconst recommendations = [...new Set(checks.map((check) => check.fix).filter((fix): fix is string => !!fix))];\n\n\t\tif (outputJson) {\n\t\t\tthis.showCommandJsonBlock(\"Doctor Report\", {\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\t\tsessionFile: this.sessionManager.getSessionFile() ?? null,\n\t\t\t\tactiveProfile: this.activeProfileName,\n\t\t\t\texternalCliTools: cliToolStatuses,\n\t\t\t\tchecks,\n\t\t\t\trecommendations,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst lines: string[] = [];\n\t\tlines.push(`Timestamp: ${new Date().toISOString()}`);\n\t\tlines.push(`CWD: ${this.sessionManager.getCwd()}`);\n\t\tlines.push(`Session: ${this.sessionManager.getSessionFile() ?? \"in-memory\"}`);\n\t\tlines.push(`Profile: ${this.activeProfileName}`);\n\t\tlines.push(\"\");\n\t\tfor (const check of checks) {\n\t\t\tconst prefix = check.level === \"ok\" ? \"[OK]\" : check.level === \"warn\" ? \"[WARN]\" : \"[FAIL]\";\n\t\t\tlines.push(`${prefix} ${check.label}: ${check.detail}`);\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"External CLI tools:\");\n\t\tfor (const status of cliToolStatuses) {\n\t\t\tconst prefix = status.available ? \"[OK]\" : \"[WARN]\";\n\t\t\tconst sourceLabel =\n\t\t\t\tstatus.source === \"missing\"\n\t\t\t\t\t? \"missing\"\n\t\t\t\t\t: `${status.source}${status.command ? ` (${status.command})` : \"\"}`;\n\t\t\tlines.push(`${prefix} ${status.tool}: ${sourceLabel}`);\n\t\t\tif (!status.available && status.hint) {\n\t\t\t\tlines.push(` fix: ${status.hint}`);\n\t\t\t}\n\t\t}\n\t\tif (recommendations.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"Recommended actions:\");\n\t\t\tfor (const recommendation of recommendations) {\n\t\t\t\tlines.push(`- ${recommendation}`);\n\t\t\t}\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"Tip: /doctor --json\");\n\t\tthis.showCommandTextBlock(\"Doctor Report\", lines.join(\"\\n\"));\n\n\t\tconst wantsInteractiveFixes = !args.includes(\"--no-fix\");\n\t\tif (wantsInteractiveFixes) {\n\t\t\tawait this.runDoctorInteractiveFixes(checks);\n\t\t}\n\t}\n\n\tprivate showCommandTextBlock(title: string, body: string): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(body, 1, 0));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate showCommandJsonBlock(title: string, value: unknown): void {\n\t\tconst json = JSON.stringify(value, null, 2);\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", title)), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(`\\`\\`\\`json\\n${json}\\n\\`\\`\\``, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async runIosmInitAgentVerification(\n\t\tresult: IosmInitResult,\n\t\ttargetDir: string,\n\t\tonEvent?: (event: AgentSessionEvent) => void,\n\t): Promise<IosmInitVerificationSummary> {\n\t\tif (!result.cycle) {\n\t\t\treturn {\n\t\t\t\tcompleted: false,\n\t\t\t\tskippedReason: \"No cycle scaffold was available for verification.\",\n\t\t\t};\n\t\t}\n\n\t\tconst cycleId = result.cycle.cycleId;\n\t\tprocess.env[ENV_SESSION_TRACE] = \"1\";\n\t\tprocess.env.PI_SESSION_TRACE = \"1\";\n\n\t\tconst agentDir = getAgentDir();\n\t\tconst settingsManager = SettingsManager.create(targetDir, agentDir);\n\t\tconst settingsErrors = settingsManager.drainErrors();\n\t\tfor (const { scope, error } of settingsErrors) {\n\t\t\tthis.showWarning(`Init verify warning (${scope} settings): ${error.message}`);\n\t\t}\n\n\t\tconst authStorage = AuthStorage.create();\n\t\tconst modelRegistry = new ModelRegistry(authStorage, getModelsPath());\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd: targetDir,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tnoExtensions: true,\n\t\t});\n\t\tawait resourceLoader.reload();\n\n\t\tconst { session, modelFallbackMessage } = await createAgentSession({\n\t\t\tcwd: targetDir,\n\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t\tsettingsManager,\n\t\t\tauthStorage,\n\t\t\tmodelRegistry,\n\t\t\tresourceLoader,\n\t\t});\n\t\tlet toolExecutions = 0;\n\t\tconst activityLog: string[] = [];\n\t\tconst pushActivity = (line: string, persist = false): void => {\n\t\t\tactivityLog.push(line);\n\t\t\tif (activityLog.length > 30) {\n\t\t\t\tactivityLog.shift();\n\t\t\t}\n\t\t\tif (persist) {\n\t\t\t\tthis.showProgressLine(`IOSM init verify: ${line}`);\n\t\t\t}\n\t\t};\n\t\tconst setVerifyLiveStatus = (message: string): void => {\n\t\t\tthis.setWorkingMessage(`${message} (${appKey(this.keybindings, \"interrupt\")} to interrupt)`);\n\t\t};\n\t\tconst unsubscribe = session.subscribe((event) => {\n\t\t\tonEvent?.(event);\n\t\t\tif (event.type === \"turn_start\") {\n\t\t\t\tpushActivity(\"agent turn started\");\n\t\t\t\tsetVerifyLiveStatus(\"Verifying workspace...\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type !== \"tool_execution_start\") {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttoolExecutions += 1;\n\t\t\tif (event.toolName === \"bash\") {\n\t\t\t\tconst commandRaw =\n\t\t\t\t\tevent.args && typeof event.args === \"object\" && \"command\" in event.args\n\t\t\t\t\t\t? String((event.args as { command?: unknown }).command ?? \"\")\n\t\t\t\t\t\t: \"\";\n\t\t\t\tconst preview = commandRaw.replace(/\\s+/g, \" \").trim().slice(0, 68);\n\t\t\t\tconst line = `bash #${toolExecutions}${preview ? ` ${preview}${commandRaw.length > 68 ? \"...\" : \"\"}` : \"\"}`;\n\t\t\t\tpushActivity(line);\n\t\t\t\tsetVerifyLiveStatus(`Verifying workspace · ${line}`);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst line = `${event.toolName} #${toolExecutions}`;\n\t\t\tpushActivity(line);\n\t\t\tsetVerifyLiveStatus(`Verifying workspace · ${line}`);\n\t\t});\n\t\tthis.iosmVerificationSession = session;\n\n\t\ttry {\n\t\t\tif (!session.model) {\n\t\t\t\treturn {\n\t\t\t\t\tcompleted: false,\n\t\t\t\t\tskippedReason:\n\t\t\t\t\t\tmodelFallbackMessage ??\n\t\t\t\t\t\t\"No model available for agent verification. Configure /login or an API key, then re-run /init.\",\n\t\t\t\t\tactivityLog,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst timeoutMs = 180_000;\n\t\t\tconst startedAt = Date.now();\n\t\t\tconst heartbeatMs = 10_000;\n\t\t\tlet nextPersistentHeartbeatSec = 30;\n\t\t\tlet timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\t\t\tlet heartbeatHandle: ReturnType<typeof setInterval> | undefined;\n\t\t\ttry {\n\t\t\t\tpushActivity(\"waiting for model response...\", true);\n\t\t\t\tsetVerifyLiveStatus(\"Waiting for model response...\");\n\t\t\t\theartbeatHandle = setInterval(() => {\n\t\t\t\t\tconst elapsedSec = Math.round((Date.now() - startedAt) / 1000);\n\t\t\t\t\tif (toolExecutions === 0 && elapsedSec >= nextPersistentHeartbeatSec) {\n\t\t\t\t\t\tpushActivity(`still waiting for model response (${elapsedSec}s)`, true);\n\t\t\t\t\t\tnextPersistentHeartbeatSec += 30;\n\t\t\t\t\t}\n\t\t\t\t\tsetVerifyLiveStatus(\n\t\t\t\t\t\ttoolExecutions === 0\n\t\t\t\t\t\t\t? `Waiting for model response... ${elapsedSec}s`\n\t\t\t\t\t\t\t: `Verifying workspace... ${elapsedSec}s · tool calls=${toolExecutions}`,\n\t\t\t\t\t);\n\t\t\t\t}, heartbeatMs);\n\t\t\t\tawait Promise.race([\n\t\t\t\t\tsession.prompt(buildIosmAgentVerificationPrompt(result), {\n\t\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t\t}),\n\t\t\t\t\tnew Promise<never>((_resolve, reject) => {\n\t\t\t\t\t\ttimeoutHandle = setTimeout(() => {\n\t\t\t\t\t\t\treject(new Error(`Verifier timeout after ${Math.round(timeoutMs / 1000)}s.`));\n\t\t\t\t\t\t}, timeoutMs);\n\t\t\t\t\t}),\n\t\t\t\t]);\n\t\t\t} finally {\n\t\t\t\tif (timeoutHandle) {\n\t\t\t\t\tclearTimeout(timeoutHandle);\n\t\t\t\t}\n\t\t\t\tif (heartbeatHandle) {\n\t\t\t\t\tclearInterval(heartbeatHandle);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst messages = session.state.messages;\n\t\t\tlet lastAssistant: AssistantMessage | undefined;\n\t\t\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\t\t\tconst message = messages[index];\n\t\t\t\tif (message.role === \"assistant\") {\n\t\t\t\t\tlastAssistant = message as AssistantMessage;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tlastAssistant &&\n\t\t\t\t(lastAssistant.stopReason === \"error\" || lastAssistant.stopReason === \"aborted\")\n\t\t\t) {\n\t\t\t\tpushActivity(`agent finished with ${lastAssistant.stopReason}`);\n\t\t\t\tif (lastAssistant.stopReason === \"aborted\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcompleted: false,\n\t\t\t\t\t\tcancelled: true,\n\t\t\t\t\t\tskippedReason: \"Cancelled by user.\",\n\t\t\t\t\t\ttracePath:\n\t\t\t\t\t\t\tsession.sessionTracePath ??\n\t\t\t\t\t\t\t(isSessionTraceEnabled() ? getSessionTracePath(session.sessionManager.getSessionId()) : undefined),\n\t\t\t\t\t\tactivityLog,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcompleted: false,\n\t\t\t\t\terror: lastAssistant.errorMessage ?? `Verifier finished with ${lastAssistant.stopReason}.`,\n\t\t\t\t\ttracePath:\n\t\t\t\t\t\tsession.sessionTracePath ??\n\t\t\t\t\t\t(isSessionTraceEnabled() ? getSessionTracePath(session.sessionManager.getSessionId()) : undefined),\n\t\t\t\t\tactivityLog,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlet authoredGuide: string | undefined;\n\t\t\ttry {\n\t\t\t\tpushActivity(\"authoring IOSM.md from repository evidence...\");\n\t\t\t\tsetVerifyLiveStatus(\"Authoring IOSM.md...\");\n\t\t\t\tawait session.prompt(buildIosmGuideAuthoringPrompt(result), {\n\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t});\n\t\t\t\tconst guideAssistant = (() => {\n\t\t\t\t\tconst messages = session.state.messages;\n\t\t\t\t\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\t\t\t\t\tconst message = messages[index];\n\t\t\t\t\t\tif (message.role === \"assistant\") {\n\t\t\t\t\t\t\treturn message as AssistantMessage;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn undefined;\n\t\t\t\t})();\n\t\t\t\tconst guideText = extractAssistantText(guideAssistant);\n\t\t\t\tconst normalizedGuide = normalizeIosmGuideMarkdown(guideText);\n\t\t\t\tif (normalizedGuide.trim().length > 0) {\n\t\t\t\t\tauthoredGuide = normalizedGuide;\n\t\t\t\t\tpushActivity(\"IOSM.md authored by agent\");\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tpushActivity(\"agent IOSM.md authoring failed; using structured fallback\");\n\t\t\t}\n\n\t\t\tlet current: IosmMetricSnapshot | undefined;\n\t\t\tlet guidePath: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst report = readIosmCycleReport(result.rootDir, cycleId);\n\t\t\t\tcurrent = createMetricSnapshot(report);\n\t\t\t\tif (authoredGuide) {\n\t\t\t\t\tguidePath = getIosmGuidePath(targetDir);\n\t\t\t\t\tfs.writeFileSync(guidePath, authoredGuide, \"utf8\");\n\t\t\t\t} else {\n\t\t\t\t\tguidePath = writeIosmGuideDocument(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trootDir: targetDir,\n\t\t\t\t\t\t\tcycleId,\n\t\t\t\t\t\t\tassessmentSource: \"verified\",\n\t\t\t\t\t\t\tmetrics: report.metrics,\n\t\t\t\t\t\t\tiosmIndex: report.iosm_index,\n\t\t\t\t\t\t\tdecisionConfidence: report.decision_confidence,\n\t\t\t\t\t\t\tgoals: report.goals,\n\t\t\t\t\t\t\tfilesAnalyzed: result.analysis.files_analyzed,\n\t\t\t\t\t\t\tsourceFileCount: result.analysis.source_file_count,\n\t\t\t\t\t\t\ttestFileCount: result.analysis.test_file_count,\n\t\t\t\t\t\t\tdocFileCount: result.analysis.doc_file_count,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t).path;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tcurrent = undefined;\n\t\t\t\tguidePath = undefined;\n\t\t\t}\n\n\t\t\tlet historyPath: string | undefined;\n\t\t\ttry {\n\t\t\t\tconst history = recordIosmCycleHistory(result.rootDir, cycleId);\n\t\t\t\thistoryPath = history.historyPath;\n\t\t\t} catch {\n\t\t\t\thistoryPath = undefined;\n\t\t\t}\n\n\t\t\tpushActivity(`completed (${toolExecutions} tool calls)`, true);\n\t\t\treturn {\n\t\t\t\tcompleted: true,\n\t\t\t\tcurrent,\n\t\t\t\thistoryPath,\n\t\t\t\tguidePath,\n\t\t\t\ttoolCalls: toolExecutions,\n\t\t\t\ttracePath:\n\t\t\t\t\tsession.sessionTracePath ??\n\t\t\t\t\t(isSessionTraceEnabled() ? getSessionTracePath(session.sessionManager.getSessionId()) : undefined),\n\t\t\t\tactivityLog,\n\t\t\t};\n\t\t} catch (error: unknown) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (isAbortLikeMessage(message)) {\n\t\t\t\tpushActivity(\"cancelled by user\", true);\n\t\t\t\treturn {\n\t\t\t\t\tcompleted: false,\n\t\t\t\t\tcancelled: true,\n\t\t\t\t\tskippedReason: \"Cancelled by user.\",\n\t\t\t\t\tactivityLog,\n\t\t\t\t};\n\t\t\t}\n\t\t\tpushActivity(`failed (${message})`);\n\t\t\tthis.showWarning(`IOSM init verify: failed (${message})`);\n\t\t\treturn {\n\t\t\t\tcompleted: false,\n\t\t\t\terror: message,\n\t\t\t\tactivityLog,\n\t\t\t};\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tif (session.isStreaming) {\n\t\t\t\t\tawait session.abort();\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Best-effort shutdown to avoid a stuck verification loader.\n\t\t\t}\n\t\t\tif (this.iosmVerificationSession === session) {\n\t\t\t\tthis.iosmVerificationSession = undefined;\n\t\t\t}\n\t\t\tunsubscribe();\n\t\t\tsession.dispose();\n\t\t\tif (this.loadingAnimation) {\n\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t}\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.pendingWorkingMessage = undefined;\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t}\n\n\tprivate getLastAssistantMessage(): AssistantMessage | undefined {\n\t\treturn this.session.messages\n\t\t\t.slice()\n\t\t\t.reverse()\n\t\t\t.find((message): message is AssistantMessage => {\n\t\t\t\tif (message.role !== \"assistant\") {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn !(message.stopReason === \"aborted\" && message.content.length === 0);\n\t\t\t});\n\t}\n\n\tprivate sanitizeAssistantDisplayMessage(message: AssistantMessage): AssistantMessage {\n\t\tconst hideAllTextForOrchestration = this.activeAssistantOrchestrationContext;\n\t\tlet changed = false;\n\t\tconst nextContent = message.content.map((content) => {\n\t\t\tif (content.type !== \"text\") return content;\n\t\t\tif (hideAllTextForOrchestration) {\n\t\t\t\tif (content.text !== \"\") {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t\treturn { ...content, text: \"\" };\n\t\t\t}\n\t\t\treturn content;\n\t\t});\n\n\t\treturn changed ? { ...message, content: nextContent } : message;\n\t}\n\n\tprivate resolveMentionedAgent(text: string): string | undefined {\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\tif (loaded.agents.length === 0) return undefined;\n\t\tconst matches = text.matchAll(/(?:^|\\s)@([^\\s]+)/g);\n\t\tfor (const match of matches) {\n\t\t\tconst candidate = (match[1] ?? \"\").trim();\n\t\t\tconst resolved = resolveCustomSubagentReference(candidate, loaded.agents);\n\t\t\tif (resolved) {\n\t\t\t\treturn resolved;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate isCapabilityQuery(text: string): boolean {\n\t\tconst normalized = text.toLowerCase().trim();\n\t\tif (!normalized) return true;\n\t\treturn (\n\t\t\tnormalized === \"?\" ||\n\t\t\tnormalized === \"help\" ||\n\t\t\tnormalized === \"--help\" ||\n\t\t\tnormalized === \"/help\" ||\n\t\t\tnormalized === \"/capabilities\" ||\n\t\t\tnormalized === \"capabilities\"\n\t\t);\n\t}\n\n\tprivate async promptWithTaskFallback(userInput: string): Promise<void> {\n\t\tconst mentionedAgent = this.resolveMentionedAgent(userInput);\n\t\tif (mentionedAgent) {\n\t\t\tconst cleaned = userInput.replace(/(?:^|\\s)@[^\\s]+/g, \" \").trim();\n\t\t\tif (this.isCapabilityQuery(cleaned)) {\n\t\t\t\tconst cwd = this.sessionManager.getCwd();\n\t\t\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\t\t\tconst agent = loaded.agents.find((item) => item.name === mentionedAgent);\n\t\t\t\tif (agent) {\n\t\t\t\t\tconst capabilityPrompt = [\n\t\t\t\t\t\t\"<agent_capability_query>\",\n\t\t\t\t\t\t`agent_name: ${agent.name}`,\n\t\t\t\t\t\t`description: ${agent.description}`,\n\t\t\t\t\t\t`profile: ${agent.profile ?? \"full\"}`,\n\t\t\t\t\t\t`model: ${agent.model ?? \"default\"}`,\n\t\t\t\t\t\t`background: ${agent.background ? \"true\" : \"false\"}`,\n\t\t\t\t\t\t`tools: ${agent.tools?.join(\", \") ?? \"default profile tools\"}`,\n\t\t\t\t\t\t`disallowed_tools: ${agent.disallowedTools?.join(\", \") ?? \"none\"}`,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\"agent_instructions:\",\n\t\t\t\t\t\tagent.instructions,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t`user_question: ${cleaned || \"what can you do?\"}`,\n\t\t\t\t\t\t\"Answer normally and concisely in plain language. Do not run task tool for this query.\",\n\t\t\t\t\t\t\"</agent_capability_query>\",\n\t\t\t\t\t].join(\"\\n\");\n\t\t\t\t\tawait this.session.prompt(capabilityPrompt, {\n\t\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst mentionPrompt = [\n\t\t\t\t\"<orchestrate mode=\\\"sequential\\\" agents=\\\"1\\\">\",\n\t\t\t\t`- agent 1: profile=${this.activeProfileName} cwd=${this.sessionManager.getCwd()} agent=${mentionedAgent}`,\n\t\t\t\t`task: ${cleaned.length > 0 ? cleaned : userInput}`,\n\t\t\t\t\"constraints:\",\n\t\t\t\t\"- user selected a concrete custom agent via @mention\",\n\t\t\t\t`- MUST call task tool with agent=\"${mentionedAgent}\"`,\n\t\t\t\t\"</orchestrate>\",\n\t\t\t].join(\"\\n\");\n\t\t\tawait this.session.prompt(mentionPrompt, {\n\t\t\t\texpandPromptTemplates: false,\n\t\t\t\tsource: \"interactive\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tawait this.session.prompt(userInput);\n\t}\n\n\tprivate createIosmVerificationEventBridge(options?: {\n\t\tloaderMessage?: string;\n\t\thideAssistantText?: boolean;\n\t}): (event: AgentSessionEvent) => void {\n\t\tconst loaderMessage =\n\t\t\toptions?.loaderMessage ?? `Verifying workspace... (${appKey(this.keybindings, \"interrupt\")} to interrupt)`;\n\t\tconst hideAssistantText = options?.hideAssistantText === true;\n\t\tlet verifyStreamingComponent: AssistantMessageComponent | undefined;\n\t\tlet verifyStreamingMessage: AssistantMessage | undefined;\n\t\tconst verifyPendingTools = new Map<string, ToolExecutionComponent>();\n\n\t\treturn (event: AgentSessionEvent): void => {\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"agent_start\":\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t}\n\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\tthis.loadingAnimation = new DecryptLoader(\n\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t(s) => theme.fg(\"accent\", s),\n\t\t\t\t\t\t(t) => theme.fg(\"muted\", t),\n\t\t\t\t\t\tloaderMessage,\n\t\t\t\t\t);\n\t\t\t\t\tthis.statusContainer.addChild(this.loadingAnimation);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"message_start\":\n\t\t\t\t\tif (event.message.role === \"assistant\" && !hideAssistantText) {\n\t\t\t\t\t\tverifyStreamingComponent = new AssistantMessageComponent(\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tthis.getMarkdownThemeWithSettings(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tverifyStreamingMessage = event.message as AssistantMessage;\n\t\t\t\t\t\tthis.chatContainer.addChild(verifyStreamingComponent);\n\t\t\t\t\t\tverifyStreamingComponent.updateContent(verifyStreamingMessage);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"message_update\":\n\t\t\t\t\tif (verifyStreamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\t\tverifyStreamingMessage = event.message as AssistantMessage;\n\t\t\t\t\t\tverifyStreamingComponent.updateContent(verifyStreamingMessage);\n\t\t\t\t\t\tfor (const content of verifyStreamingMessage.content) {\n\t\t\t\t\t\t\tif (content.type === \"toolCall\" && !verifyPendingTools.has(content.id)) {\n\t\t\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\t\t\tcontent.name,\n\t\t\t\t\t\t\t\t\tcontent.arguments,\n\t\t\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\n\t\t\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(content.name),\n\t\t\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\t\t\tverifyPendingTools.set(content.id, component);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"message_end\":\n\t\t\t\t\tif (verifyStreamingComponent && event.message.role === \"assistant\") {\n\t\t\t\t\t\tverifyStreamingMessage = event.message as AssistantMessage;\n\t\t\t\t\t\tverifyStreamingComponent.updateContent(verifyStreamingMessage);\n\t\t\t\t\t\tverifyStreamingComponent = undefined;\n\t\t\t\t\t\tverifyStreamingMessage = undefined;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"tool_execution_start\":\n\t\t\t\t\tif (!verifyPendingTools.has(event.toolCallId)) {\n\t\t\t\t\t\tconst component = new ToolExecutionComponent(\n\t\t\t\t\t\t\tevent.toolName,\n\t\t\t\t\t\t\tevent.args,\n\t\t\t\t\t\t\t{ showImages: this.settingsManager.getShowImages() },\n\t\t\t\t\t\t\tthis.getRegisteredToolDefinition(event.toolName),\n\t\t\t\t\t\t\tthis.ui,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcomponent.setExpanded(this.toolOutputExpanded);\n\t\t\t\t\t\tthis.chatContainer.addChild(component);\n\t\t\t\t\t\tverifyPendingTools.set(event.toolCallId, component);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"tool_execution_update\": {\n\t\t\t\t\tconst component = verifyPendingTools.get(event.toolCallId);\n\t\t\t\t\tif (component) {\n\t\t\t\t\t\tcomponent.updateResult({ ...event.partialResult, isError: false }, true);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"tool_execution_end\": {\n\t\t\t\t\tconst component = verifyPendingTools.get(event.toolCallId);\n\t\t\t\t\tif (component) {\n\t\t\t\t\t\tcomponent.updateResult({ ...event.result, isError: event.isError });\n\t\t\t\t\t\tverifyPendingTools.delete(event.toolCallId);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"agent_end\":\n\t\t\t\t\tif (this.loadingAnimation) {\n\t\t\t\t\t\tthis.loadingAnimation.stop();\n\t\t\t\t\t\tthis.loadingAnimation = undefined;\n\t\t\t\t\t\tthis.statusContainer.clear();\n\t\t\t\t\t}\n\t\t\t\t\tverifyPendingTools.clear();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.ui.requestRender();\n\t\t};\n\t}\n\n\tprivate resolveIosmSnapshot(\n\t\tresult: IosmInitResult,\n\t\tverification: IosmInitVerificationSummary | undefined,\n\t): IosmMetricSnapshot {\n\t\tlet snapshot: IosmMetricSnapshot | undefined = verification?.current;\n\t\tif (!snapshot && result.cycle) {\n\t\t\ttry {\n\t\t\t\tsnapshot = createMetricSnapshot(readIosmCycleReport(result.rootDir, result.cycle.cycleId));\n\t\t\t} catch {\n\t\t\t\tsnapshot = undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\tsnapshot ?? {\n\t\t\t\tmetrics: result.analysis.metrics,\n\t\t\t\tiosm_index: null,\n\t\t\t\tdecision_confidence: null,\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate async runIosmRefreshPass(options: {\n\t\tcwd: string;\n\t\tforce: boolean;\n\t\tagentVerify: boolean;\n\t}): Promise<IosmAutomationRefreshResult> {\n\t\tconst initResult = await initIosmWorkspace({ cwd: options.cwd, force: options.force });\n\t\tlet verification: IosmInitVerificationSummary | undefined;\n\t\tif (options.agentVerify) {\n\t\t\tverification = await this.runIosmInitAgentVerification(\n\t\t\t\tinitResult,\n\t\t\t\toptions.cwd,\n\t\t\t\tthis.createIosmVerificationEventBridge(),\n\t\t\t);\n\t\t}\n\n\t\tlet cycleDecision: IosmDecision | undefined;\n\t\tif (initResult.cycle) {\n\t\t\ttry {\n\t\t\t\tcycleDecision = inspectIosmCycle(initResult.rootDir, initResult.cycle.cycleId).decision;\n\t\t\t} catch {\n\t\t\t\tcycleDecision = undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tinitResult,\n\t\t\tverification,\n\t\t\tsnapshot: this.resolveIosmSnapshot(initResult, verification),\n\t\t\tguidePath: verification?.guidePath ?? getIosmGuidePath(initResult.rootDir),\n\t\t\tcycleDecision,\n\t\t};\n\t}\n\n\tprivate parseIosmAutomationSlashCommand(\n\t\ttext: string,\n\t): { targetIndex?: number; maxIterations?: number; forceInit: boolean } | undefined {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet targetIndex: number | undefined;\n\t\tlet maxIterations: number | undefined;\n\t\tlet forceInit = false;\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst arg = args[index];\n\t\t\tif (arg === \"--force-init\" || arg === \"--force\") {\n\t\t\t\tforceInit = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--max-iterations\") {\n\t\t\t\tconst nextValue = args[index + 1];\n\t\t\t\tconst parsed = nextValue ? Number.parseInt(nextValue, 10) : Number.NaN;\n\t\t\t\tif (!Number.isInteger(parsed) || parsed < 1) {\n\t\t\t\t\tthis.showWarning('Usage: /iosm [target-index] [--max-iterations N] [--force-init]');\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tmaxIterations = parsed;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /iosm: ${arg}`);\n\t\t\t\tthis.showWarning('Usage: /iosm [target-index] [--max-iterations N] [--force-init]');\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tif (targetIndex !== undefined) {\n\t\t\t\tthis.showWarning(`Unexpected argument for /iosm: ${arg}`);\n\t\t\t\tthis.showWarning('Usage: /iosm [target-index] [--max-iterations N] [--force-init]');\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst parsed = Number.parseFloat(arg);\n\t\t\tif (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {\n\t\t\t\tthis.showWarning(`Invalid target index for /iosm: ${arg}`);\n\t\t\t\tthis.showWarning(\"Target index must be a number in the range 0.0 to 1.0.\");\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\ttargetIndex = parsed;\n\t\t}\n\n\t\treturn { targetIndex, maxIterations, forceInit };\n\t}\n\n\tprivate parseOrchestrateSlashCommand(text: string): ParsedOrchestrateCommand | undefined {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet mode: OrchestrationMode | undefined;\n\t\tlet agents: number | undefined;\n\t\tlet maxParallel: number | undefined;\n\t\tlet profile: AgentProfileName | undefined;\n\t\tlet profiles: AgentProfileName[] | undefined;\n\t\tlet cwds: string[] | undefined;\n\t\tlet locks: string[] | undefined;\n\t\tlet isolation: \"none\" | \"worktree\" | undefined;\n\t\tlet dependencies: Array<{ agent: number; dependsOn: number[] }> | undefined;\n\t\tconst taskParts: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst arg = args[index];\n\t\t\tif (arg === \"--parallel\") {\n\t\t\t\tmode = \"parallel\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--sequential\") {\n\t\t\t\tmode = \"sequential\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--agents\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tconst parsed = value ? Number.parseInt(value, 10) : Number.NaN;\n\t\t\t\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > 20) {\n\t\t\t\t\tthis.showWarning(\"Invalid --agents value (expected 1..20).\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tagents = parsed;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--max-parallel\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tconst parsed = value ? Number.parseInt(value, 10) : Number.NaN;\n\t\t\t\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > 20) {\n\t\t\t\t\tthis.showWarning(\"Invalid --max-parallel value (expected 1..20).\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tmaxParallel = parsed;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--profile\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value || !isValidProfileName(value)) {\n\t\t\t\t\tthis.showWarning(`Invalid --profile value: ${value ?? \"(missing)\"}`);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tprofile = value;\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--profiles\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --profiles.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tconst parsedProfiles = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tif (parsedProfiles.length === 0 || parsedProfiles.some((item) => !isValidProfileName(item))) {\n\t\t\t\t\tthis.showWarning(`Invalid --profiles value: ${value}`);\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tprofiles = parsedProfiles as AgentProfileName[];\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--cwd\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --cwd.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tcwds = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--locks\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --locks.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tlocks = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--worktree\") {\n\t\t\t\tisolation = \"worktree\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--depends\") {\n\t\t\t\tconst value = args[index + 1];\n\t\t\t\tif (!value) {\n\t\t\t\t\tthis.showWarning(\"Missing value for --depends.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tconst parsedDeps: Array<{ agent: number; dependsOn: number[] }> = [];\n\t\t\t\tconst edges = value\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.map((item) => item.trim())\n\t\t\t\t\t.filter(Boolean);\n\t\t\t\tfor (const edge of edges) {\n\t\t\t\t\tconst [left, right] = edge.split(\">\");\n\t\t\t\t\tconst agent = Number.parseInt((left ?? \"\").trim(), 10);\n\t\t\t\t\tconst dependency = Number.parseInt((right ?? \"\").trim(), 10);\n\t\t\t\t\tif (!Number.isInteger(agent) || !Number.isInteger(dependency) || agent < 1 || dependency < 1) {\n\t\t\t\t\t\tthis.showWarning(`Invalid dependency edge: ${edge}. Expected format like 2>1,3>2`);\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tconst existing = parsedDeps.find((entry) => entry.agent === agent);\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\texisting.dependsOn.push(dependency);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparsedDeps.push({ agent, dependsOn: [dependency] });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdependencies = parsedDeps.map((entry) => ({\n\t\t\t\t\tagent: entry.agent,\n\t\t\t\t\tdependsOn: [...new Set(entry.dependsOn)].sort((a, b) => a - b),\n\t\t\t\t}));\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /orchestrate: ${arg}`);\n\t\t\t\tthis.showWarning(\n\t\t\t\t\t\"Usage: /orchestrate (--parallel|--sequential) --agents N [--max-parallel N] [--profile <name>|--profiles p1,p2] [--cwd p1,p2] [--locks l1,l2] [--worktree] [--depends 2>1,3>2] <task>\",\n\t\t\t\t);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\ttaskParts.push(arg);\n\t\t}\n\n\t\tconst task = taskParts.join(\" \").trim();\n\t\tif (!mode || !agents || !task) {\n\t\t\tthis.showWarning(\n\t\t\t\t\"Usage: /orchestrate (--parallel|--sequential) --agents N [--max-parallel N] [--profile <name>|--profiles p1,p2] [--cwd p1,p2] [--locks l1,l2] [--worktree] [--depends 2>1,3>2] <task>\",\n\t\t\t);\n\t\t\treturn undefined;\n\t\t}\n\t\tif (profile && profiles) {\n\t\t\tthis.showWarning(\"Use either --profile or --profiles, not both.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (mode === \"sequential\" && maxParallel !== undefined) {\n\t\t\tthis.showWarning(\"--max-parallel is only valid with --parallel mode.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (maxParallel !== undefined && maxParallel > agents) {\n\t\t\tmaxParallel = agents;\n\t\t}\n\t\tif (profiles && profiles.length < agents) {\n\t\t\tthis.showWarning(\"--profiles count must be >= --agents or omitted.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (cwds && cwds.length < agents) {\n\t\t\tthis.showWarning(\"--cwd list count must be >= --agents or omitted.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (locks && locks.length < agents) {\n\t\t\tthis.showWarning(\"--locks list count must be >= --agents or omitted.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tif (dependencies) {\n\t\t\tfor (const dep of dependencies) {\n\t\t\t\tif (dep.agent > agents || dep.dependsOn.some((target) => target > agents || target === dep.agent)) {\n\t\t\t\t\tthis.showWarning(\"Dependency graph references invalid agent indexes.\");\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasDependencyCycle(agents, dependencies)) {\n\t\t\t\tthis.showWarning(\"Dependency graph contains a cycle. Use a DAG for --depends.\");\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmode,\n\t\t\tagents,\n\t\t\tmaxParallel,\n\t\t\tprofile,\n\t\t\tprofiles,\n\t\t\tcwds,\n\t\t\tlocks,\n\t\t\tisolation,\n\t\t\tdependencies,\n\t\t\ttask,\n\t\t};\n\t}\n\n\tprivate async handleOrchestrateSlashCommand(text: string): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Cannot run /orchestrate while the agent is processing a request.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Cannot run /orchestrate while compaction is running.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst parsed = this.parseOrchestrateSlashCommand(text);\n\t\tif (!parsed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentCwd = this.sessionManager.getCwd();\n\t\tconst assignments: string[] = [];\n\t\tconst assignmentRecords: Array<{ profile: string; cwd: string; lockKey?: string; dependsOn: number[] }> = [];\n\t\tfor (let index = 0; index < parsed.agents; index++) {\n\t\t\tconst assignmentProfile =\n\t\t\t\tparsed.profiles?.[index] ?? parsed.profile ?? (this.activeProfileName || \"full\");\n\t\t\tconst assignmentCwd = parsed.cwds?.[index] ?? \".\";\n\t\t\tconst assignmentLock = parsed.locks?.[index];\n\t\t\tconst dependsOn = parsed.dependencies?.find((entry) => entry.agent === index + 1)?.dependsOn ?? [];\n\t\t\tconst resolvedCwd = path.resolve(currentCwd, assignmentCwd);\n\t\t\tassignmentRecords.push({\n\t\t\t\tprofile: assignmentProfile,\n\t\t\t\tcwd: resolvedCwd,\n\t\t\t\tlockKey: assignmentLock,\n\t\t\t\tdependsOn,\n\t\t\t});\n\t\t\tassignments.push(\n\t\t\t\t`- agent ${index + 1}: profile=${assignmentProfile} cwd=${resolvedCwd}${assignmentLock ? ` lock_key=${assignmentLock}` : \"\"\n\t\t\t\t}${parsed.isolation === \"worktree\" ? \" isolation=worktree\" : \"\"}${dependsOn.length > 0 ? ` depends_on=${dependsOn.join(\"|\")}` : \"\"\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\t\tconst teamRun = createTeamRun({\n\t\t\tcwd: currentCwd,\n\t\t\tmode: parsed.mode,\n\t\t\tagents: parsed.agents,\n\t\t\tmaxParallel: parsed.maxParallel,\n\t\t\ttask: parsed.task,\n\t\t\tassignments: assignmentRecords,\n\t\t});\n\t\tconst runAssignments = teamRun.tasks.map(\n\t\t\t(task, index) => `${assignments[index]} run_id=${teamRun.runId} task_id=${task.id}`,\n\t\t);\n\t\tconst taskCallHints = teamRun.tasks.map((task, index) => {\n\t\t\tconst assignment = assignmentRecords[index];\n\t\t\treturn `- task_call_${index + 1}: description=\"agent ${index + 1} execution\" profile=\"${assignment.profile}\" cwd=\"${assignment.cwd}\" run_id=\"${teamRun.runId}\" task_id=\"${task.id}\"${assignment.lockKey ? ` lock_key=\"${assignment.lockKey}\"` : \"\"\n\t\t\t\t}${parsed.isolation === \"worktree\" ? ' isolation=\"worktree\"' : \"\"}`;\n\t\t});\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(\n\t\t\t\ttheme.bold(theme.fg(\"accent\", \"◆ \")) + theme.bold(\"/orchestrate\") + theme.fg(\"muted\", ` ${currentCwd}`),\n\t\t\t\t1,\n\t\t\t\t0,\n\t\t\t),\n\t\t);\n\t\tthis.ui.requestRender();\n\n\t\tconst payload = [\n\t\t\t`<orchestrate run_id=\"${teamRun.runId}\" mode=\"${parsed.mode}\" agents=\"${parsed.agents}\"${parsed.maxParallel ? ` max_parallel=\"${parsed.maxParallel}\"` : \"\"\n\t\t\t}>`,\n\t\t\t...runAssignments,\n\t\t\t\"required_task_calls:\",\n\t\t\t...taskCallHints,\n\t\t\t`task: ${parsed.task}`,\n\t\t\t\"constraints:\",\n\t\t\t\"- use task tool for every agent assignment\",\n\t\t\t\"- for parallel mode, emit all independent task calls in one assistant response\",\n\t\t\t\"- in parallel mode, use parallel tool-call style (<use_parallel_tool_calls>)\",\n\t\t\t\"- keep required orchestration task calls in foreground; do not set background=true unless user explicitly requested detached async runs\",\n\t\t\t\"- do not poll .iosm/subagents/background via bash/read during orchestration; wait for task results and then synthesize\",\n\t\t\t\"- include run_id and task_id from each assignment in the task tool arguments\",\n\t\t\t\"- keep each agent in its assigned cwd\",\n\t\t\t\"- avoid edit collisions; if two write-capable agents target same area, serialize those writes\",\n\t\t\t\"- aggregate outputs into one concise final synthesis\",\n\t\t\t\"</orchestrate>\",\n\t\t].join(\"\\n\");\n\n\t\tawait this.session.prompt(payload, {\n\t\t\texpandPromptTemplates: false,\n\t\t\tsource: \"interactive\",\n\t\t});\n\t}\n\n\tprivate async handleAgentsSlashCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst asJson = args.includes(\"--json\");\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst loaded = loadCustomSubagents({ cwd, agentDir: getAgentDir() });\n\t\tconst profiles = getProfileNames().map((name) => getAgentProfile(name));\n\n\t\tif (asJson) {\n\t\t\tthis.showCommandJsonBlock(\"Agents\", {\n\t\t\t\tprofiles: profiles.map((profile) => ({\n\t\t\t\t\tname: profile.name,\n\t\t\t\t\tdescription: profile.description,\n\t\t\t\t\ttools: profile.tools,\n\t\t\t\t\tthinkingLevel: profile.thinkingLevel,\n\t\t\t\t})),\n\t\t\t\tcustomAgents: loaded.agents.map((agent) => ({\n\t\t\t\t\tname: agent.name,\n\t\t\t\t\tdescription: agent.description,\n\t\t\t\t\tprofile: agent.profile,\n\t\t\t\t\ttools: agent.tools,\n\t\t\t\t\tdisallowedTools: agent.disallowedTools,\n\t\t\t\t\tbackground: agent.background,\n\t\t\t\t\tcwd: agent.cwd,\n\t\t\t\t\tsourcePath: agent.sourcePath,\n\t\t\t\t\tsourceScope: agent.sourceScope,\n\t\t\t\t})),\n\t\t\t\tallCustomAgents: loaded.allAgents.map((agent) => ({\n\t\t\t\t\tname: agent.name,\n\t\t\t\t\tdescription: agent.description,\n\t\t\t\t\tprofile: agent.profile,\n\t\t\t\t\ttools: agent.tools,\n\t\t\t\t\tdisallowedTools: agent.disallowedTools,\n\t\t\t\t\tbackground: agent.background,\n\t\t\t\t\tcwd: agent.cwd,\n\t\t\t\t\tsourcePath: agent.sourcePath,\n\t\t\t\t\tsourceScope: agent.sourceScope,\n\t\t\t\t\teffective: agent.effective,\n\t\t\t\t\toverriddenByPath: agent.overriddenByPath,\n\t\t\t\t})),\n\t\t\t\toverrides: loaded.overrides,\n\t\t\t\tdiagnostics: loaded.diagnostics,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst options = [\n\t\t\t\"Browse existing agents\",\n\t\t\t\"Use agent via @mention\",\n\t\t\t\"Create new agent with AI\",\n\t\t\t\"Edit existing agent file\",\n\t\t\t\"Delete agent file\",\n\t\t\t\"Show source precedence\",\n\t\t\t\"Show agents as text\",\n\t\t];\n\t\tconst selected = await this.showExtensionSelector(\"/agents\", options);\n\t\tif (!selected) return;\n\n\t\tif (selected === \"Show agents as text\") {\n\t\t\tthis.showCommandTextBlock(\"Agents\", this.buildAgentsTextReport(profiles, loaded));\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Create new agent with AI\") {\n\t\t\tawait this.createAgentWithAi();\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Show source precedence\") {\n\t\t\tthis.showCommandTextBlock(\"Agent Source Precedence\", this.buildAgentPrecedenceReport(loaded));\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Use agent via @mention\") {\n\t\t\tconst chosen = await this.selectAgentRecord(\n\t\t\t\tloaded,\n\t\t\t\t\"/agents: use @mention\",\n\t\t\t\tloaded.agents,\n\t\t\t\t(agent) => this.formatAgentChoice(agent),\n\t\t\t);\n\t\t\tif (!chosen) return;\n\t\t\tthis.insertAgentMention(chosen.name);\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Edit existing agent file\") {\n\t\t\tconst editableAgents = loaded.allAgents.filter((agent) => agent.sourceScope !== \"builtin\");\n\t\t\tif (editableAgents.length === 0) {\n\t\t\t\tthis.showStatus(\"No editable custom agent files found. Built-in system agents are read-only.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst chosen = await this.selectAgentRecord(\n\t\t\t\tloaded,\n\t\t\t\t\"/agents: edit file\",\n\t\t\t\teditableAgents,\n\t\t\t\t(agent) => this.formatAgentChoice(agent, { includeScope: true, includeStatus: true }),\n\t\t\t);\n\t\t\tif (!chosen) return;\n\t\t\tawait this.editAgentFile(chosen);\n\t\t\treturn;\n\t\t}\n\n\t\tif (selected === \"Delete agent file\") {\n\t\t\tconst deletableAgents = loaded.allAgents.filter((agent) => agent.sourceScope !== \"builtin\");\n\t\t\tif (deletableAgents.length === 0) {\n\t\t\t\tthis.showStatus(\"No deletable custom agent files found. Built-in system agents are read-only.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst chosen = await this.selectAgentRecord(\n\t\t\t\tloaded,\n\t\t\t\t\"/agents: delete file\",\n\t\t\t\tdeletableAgents,\n\t\t\t\t(agent) => this.formatAgentChoice(agent, { includeScope: true, includeStatus: true }),\n\t\t\t);\n\t\t\tif (!chosen) return;\n\t\t\tawait this.deleteAgentFile(chosen);\n\t\t\treturn;\n\t\t}\n\n\t\tconst chosen = await this.selectAgentRecord(\n\t\t\tloaded,\n\t\t\t\"/agents: details\",\n\t\t\tloaded.agents,\n\t\t\t(agent) => this.formatAgentChoice(agent, { includeScope: true }),\n\t\t);\n\t\tif (!chosen) return;\n\t\tthis.showCommandTextBlock(\"Agent Details\", this.buildAgentDetailReport(chosen, loaded));\n\t}\n\n\tprivate formatAgentChoice(\n\t\tagent: CustomSubagentEntry,\n\t\toptions?: { includeScope?: boolean; includeStatus?: boolean },\n\t): string {\n\t\tconst suffixParts: string[] = [];\n\t\tif (options?.includeScope) {\n\t\t\tsuffixParts.push(agent.sourceScope);\n\t\t}\n\t\tif (options?.includeStatus) {\n\t\t\tsuffixParts.push(agent.effective ? \"active\" : \"shadowed\");\n\t\t}\n\t\tconst suffix = suffixParts.length > 0 ? ` [${suffixParts.join(\", \")}]` : \"\";\n\t\treturn `${agent.name} — ${agent.description}${suffix}`;\n\t}\n\n\tprivate async selectAgentRecord(\n\t\tloaded: ReturnType<typeof loadCustomSubagents>,\n\t\ttitle: string,\n\t\tcandidates: CustomSubagentEntry[],\n\t\tlabelBuilder: (agent: CustomSubagentEntry) => string,\n\t): Promise<CustomSubagentEntry | undefined> {\n\t\tif (candidates.length === 0) {\n\t\t\tthis.showStatus(\"No custom agents found in .iosm/agents or global agents directory.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tconst options = candidates.map((agent, index) => `${index + 1}. ${labelBuilder(agent)}`);\n\t\tconst picked = await this.showExtensionSelector(title, options);\n\t\tif (!picked) return undefined;\n\t\tconst index = options.indexOf(picked);\n\t\treturn index >= 0 ? candidates[index] : undefined;\n\t}\n\n\tprivate insertAgentMention(name: string): void {\n\t\tconst current = this.editor.getText().trim();\n\t\tthis.editor.setText(current ? `${current} @${name} ` : `@${name} `);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender();\n\t\tthis.showStatus(`Inserted @${name} into editor.`);\n\t}\n\n\tprivate buildAgentsTextReport(\n\t\tprofiles: Array<ReturnType<typeof getAgentProfile>>,\n\t\tloaded: ReturnType<typeof loadCustomSubagents>,\n\t): string {\n\t\tconst lines: string[] = [];\n\t\tlines.push(\"Built-in Profiles:\");\n\t\tfor (const profile of profiles) {\n\t\t\tlines.push(\n\t\t\t\t`- ${profile.name}: ${profile.description} · thinking=${profile.thinkingLevel} · tools=${profile.tools.join(\", \")}`,\n\t\t\t);\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(`Active Agents (${loaded.agents.length}):`);\n\t\tif (loaded.agents.length === 0) {\n\t\t\tlines.push(\"- none\");\n\t\t} else {\n\t\t\tfor (const agent of loaded.agents) {\n\t\t\t\tlines.push(\n\t\t\t\t\t`- ${agent.name}: ${agent.description} · profile=${agent.profile ?? \"-\"} · background=${agent.background ? \"true\" : \"false\"} · source=${agent.sourceScope}`,\n\t\t\t\t);\n\t\t\t\tlines.push(\n\t\t\t\t\t` tools=${agent.tools?.join(\", \") ?? \"-\"} · disallowed=${agent.disallowedTools?.join(\", \") ?? \"-\"} · cwd=${agent.cwd ?? \"-\"} · path=${agent.sourcePath}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (loaded.overrides.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"Overrides:\");\n\t\t\tfor (const override of loaded.overrides) {\n\t\t\t\tlines.push(\n\t\t\t\t\t`- ${override.name}: ${override.winnerScope} (${override.winnerPath}) overrides ${override.overriddenScope} (${override.overriddenPath})`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (loaded.diagnostics.length > 0) {\n\t\t\tlines.push(\"\");\n\t\t\tlines.push(\"Diagnostics:\");\n\t\t\tfor (const item of loaded.diagnostics) {\n\t\t\t\tlines.push(`- ${item.path}: ${item.message}`);\n\t\t\t}\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate buildAgentPrecedenceReport(loaded: ReturnType<typeof loadCustomSubagents>): string {\n\t\tconst lines: string[] = [];\n\t\tlines.push(`Active definitions: ${loaded.agents.length}`);\n\t\tlines.push(`All discovered definitions: ${loaded.allAgents.length}`);\n\t\tlines.push(\"\");\n\t\tlines.push(\"Resolution order:\");\n\t\tlines.push(\"- project (.iosm/agents) overrides global (~/.iosm/agent/agents)\");\n\t\tlines.push(\"- global overrides built-in system agents shipped with CLI\");\n\t\tlines.push(\"- within the same scope, later file path wins deterministically\");\n\t\tlines.push(\"\");\n\t\tif (loaded.overrides.length === 0) {\n\t\t\tlines.push(\"Overrides:\");\n\t\t\tlines.push(\"- none\");\n\t\t} else {\n\t\t\tlines.push(\"Overrides:\");\n\t\t\tfor (const override of loaded.overrides) {\n\t\t\t\tlines.push(\n\t\t\t\t\t`- ${override.name}: ${override.winnerScope} winner=${override.winnerPath} shadowed=${override.overriddenPath}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tlines.push(\"\");\n\t\tlines.push(\"All definitions:\");\n\t\tfor (const agent of loaded.allAgents) {\n\t\t\tlines.push(\n\t\t\t\t`- ${agent.name} [${agent.sourceScope}] ${agent.effective ? \"active\" : `shadowed by ${agent.overriddenByPath ?? \"unknown\"}`}`,\n\t\t\t);\n\t\t\tlines.push(` ${agent.sourcePath}`);\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t}\n\n\tprivate buildAgentDetailReport(\n\t\tagent: CustomSubagentEntry,\n\t\tloaded: ReturnType<typeof loadCustomSubagents>,\n\t): string {\n\t\tconst overridden = loaded.allAgents.filter(\n\t\t\t(item) => item.name === agent.name && item.sourcePath !== agent.sourcePath,\n\t\t);\n\t\tconst detailLines = [\n\t\t\t`${agent.name}: ${agent.description}`,\n\t\t\t`profile=${agent.profile ?? \"-\"}`,\n\t\t\t`background=${agent.background ? \"true\" : \"false\"}`,\n\t\t\t`source_scope=${agent.sourceScope}`,\n\t\t\t`status=${agent.effective ? \"active\" : \"shadowed\"}`,\n\t\t\t`tools=${agent.tools?.join(\", \") ?? \"-\"}`,\n\t\t\t`disallowed=${agent.disallowedTools?.join(\", \") ?? \"-\"}`,\n\t\t\t`cwd=${agent.cwd ?? \"-\"}`,\n\t\t\t`path=${agent.sourcePath}`,\n\t\t];\n\t\tif (agent.overriddenByPath) {\n\t\t\tdetailLines.push(`overridden_by=${agent.overriddenByPath}`);\n\t\t}\n\t\tif (overridden.length > 0) {\n\t\t\tdetailLines.push(\"\", \"Alternative definitions:\");\n\t\t\tfor (const entry of overridden) {\n\t\t\t\tdetailLines.push(\n\t\t\t\t\t`- ${entry.sourceScope}: ${entry.sourcePath}${entry.effective ? \" (active)\" : \" (shadowed)\"}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tdetailLines.push(\"\", \"Usage: @agent_name <task>\");\n\t\treturn detailLines.join(\"\\n\");\n\t}\n\n\tprivate async editAgentFile(agent: CustomSubagentEntry): Promise<void> {\n\t\tif (!fs.existsSync(agent.sourcePath)) {\n\t\t\tthis.showWarning(`Agent file not found: ${agent.sourcePath}`);\n\t\t\treturn;\n\t\t}\n\t\tconst current = fs.readFileSync(agent.sourcePath, \"utf8\");\n\t\tconst edited = await this.showExtensionEditor(\n\t\t\t`Edit agent file: ${agent.name} (${agent.sourceScope})`,\n\t\t\tcurrent,\n\t\t);\n\t\tif (edited === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tconst normalized = edited.replace(/\\r\\n/g, \"\\n\").trim();\n\t\tif (!normalized) {\n\t\t\tthis.showWarning(\"Agent file cannot be empty.\");\n\t\t\treturn;\n\t\t}\n\t\tfs.writeFileSync(agent.sourcePath, `${normalized}\\n`, \"utf8\");\n\t\tthis.showStatus(`Updated agent: ${agent.sourcePath}`);\n\t}\n\n\tprivate async deleteAgentFile(agent: CustomSubagentEntry): Promise<void> {\n\t\tif (!fs.existsSync(agent.sourcePath)) {\n\t\t\tthis.showWarning(`Agent file not found: ${agent.sourcePath}`);\n\t\t\treturn;\n\t\t}\n\t\tconst confirmed = await this.showExtensionConfirm(\n\t\t\t\"Delete agent file?\",\n\t\t\t`${agent.name} (${agent.sourceScope})\\n${agent.sourcePath}`,\n\t\t);\n\t\tif (!confirmed) {\n\t\t\tthis.showStatus(\"Agent deletion cancelled.\");\n\t\t\treturn;\n\t\t}\n\t\tfs.rmSync(agent.sourcePath, { force: true });\n\t\tthis.showStatus(`Deleted agent file: ${agent.sourcePath}`);\n\t}\n\n\tprivate extractAssistantText(message: AssistantMessage): string {\n\t\tconst parts: string[] = [];\n\t\tfor (const content of message.content) {\n\t\t\tif (content.type === \"text\" && content.text.trim()) {\n\t\t\t\tparts.push(content.text.trim());\n\t\t\t}\n\t\t}\n\t\treturn parts.join(\"\\n\\n\").trim();\n\t}\n\n\tprivate extractFirstJsonObject(text: string): string | undefined {\n\t\tconst fenced = text.match(/```(?:json)?\\s*([\\s\\S]*?)\\s*```/i);\n\t\tif (fenced?.[1]) {\n\t\t\treturn fenced[1].trim();\n\t\t}\n\t\tconst start = text.indexOf(\"{\");\n\t\tconst end = text.lastIndexOf(\"}\");\n\t\tif (start >= 0 && end > start) {\n\t\t\treturn text.slice(start, end + 1);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate sanitizeAgentFileName(name: string): string {\n\t\treturn name\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9._-]+/g, \"-\")\n\t\t\t.replace(/^-+/, \"\")\n\t\t\t.replace(/-+$/, \"\")\n\t\t\t.slice(0, 80);\n\t}\n\n\tprivate async createAgentWithAi(): Promise<void> {\n\t\tif (this.session.isStreaming || this.session.isCompacting || this.iosmAutomationRun || this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Cannot create agent while another run is active.\");\n\t\t\treturn;\n\t\t}\n\t\tconst userSpec = await this.showExtensionInput(\n\t\t\t\"Describe what the new agent should do\",\n\t\t\t\"e.g. agent that reviews migrations and proposes rollback-safe SQL\",\n\t\t);\n\t\tif (!userSpec || !userSpec.trim()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst generationPrompt = [\n\t\t\t\"You are generating a custom IOSM subagent specification.\",\n\t\t\t\"Return ONLY a single JSON object and no additional text.\",\n\t\t\t'Allowed JSON keys: name, description, profile, tools, disallowed_tools, system_prompt, cwd, background, instructions.',\n\t\t\t'profile must be one of: full, plan, iosm, explore, iosm_analyst, iosm_verifier, cycle_planner.',\n\t\t\t\"name must be short snake/kebab case, suitable for @mention.\",\n\t\t\t\"tools/disallowed_tools must be arrays of tool names when present.\",\n\t\t\t\"instructions must be a concise markdown body for the agent file.\",\n\t\t\t\"Follow prompt best practices:\",\n\t\t\t\"- Define explicit Role and Goal.\",\n\t\t\t\"- Define Scope boundaries (in-scope and out-of-scope).\",\n\t\t\t\"- Define required Workflow/Checklist steps.\",\n\t\t\t\"- Define strict Output format/sections.\",\n\t\t\t\"- Define uncertainty policy: ask for missing critical data instead of guessing.\",\n\t\t\t\"- Keep instructions concrete and testable; avoid vague phrasing.\",\n\t\t\t\"Prefer composition over broad power: default to read-oriented profiles unless write access is required.\",\n\t\t\t\"Built-in system agents already exist and can be extended by user agents:\",\n\t\t\t\"- codebase_auditor\",\n\t\t\t\"- system_error_analyst\",\n\t\t\t\"- iosm_change_executor\",\n\t\t\t\"- iosm_postchange_verifier\",\n\t\t\t\"- qa_test_engineer\",\n\t\t\t\"- test_failure_triager\",\n\t\t\t\"- meta_orchestrator\",\n\t\t\t\"\",\n\t\t\t`User request: ${userSpec.trim()}`,\n\t\t].join(\"\\n\");\n\n\t\tawait this.session.prompt(generationPrompt, {\n\t\t\texpandPromptTemplates: false,\n\t\t\tskipIosmAutopilot: true,\n\t\t\tskipOrchestrationDirective: true,\n\t\t\tsource: \"interactive\",\n\t\t});\n\n\t\tconst assistant = this.getLastAssistantMessage();\n\t\tif (!assistant || assistant.stopReason === \"aborted\" || assistant.stopReason === \"error\") {\n\t\t\tthis.showWarning(\"Agent generation did not complete.\");\n\t\t\treturn;\n\t\t}\n\t\tconst rawText = this.extractAssistantText(assistant);\n\t\tconst jsonCandidate = this.extractFirstJsonObject(rawText);\n\t\tif (!jsonCandidate) {\n\t\t\tthis.showWarning(\"Could not parse generated agent JSON.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttype GeneratedAgentSpec = {\n\t\t\tname?: unknown;\n\t\t\tdescription?: unknown;\n\t\t\tprofile?: unknown;\n\t\t\ttools?: unknown;\n\t\t\tdisallowed_tools?: unknown;\n\t\t\tsystem_prompt?: unknown;\n\t\t\tcwd?: unknown;\n\t\t\tbackground?: unknown;\n\t\t\tinstructions?: unknown;\n\t\t};\n\n\t\tlet parsed: GeneratedAgentSpec;\n\t\ttry {\n\t\t\tparsed = JSON.parse(jsonCandidate) as GeneratedAgentSpec;\n\t\t} catch {\n\t\t\tthis.showWarning(\"Generated JSON is invalid.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst nameRaw = typeof parsed.name === \"string\" ? parsed.name.trim() : \"\";\n\t\tconst fileName = this.sanitizeAgentFileName(nameRaw || \"agent\");\n\t\tif (!fileName) {\n\t\t\tthis.showWarning(\"Generated agent name is empty.\");\n\t\t\treturn;\n\t\t}\n\t\tconst description = typeof parsed.description === \"string\" ? parsed.description.trim() : `Custom agent ${fileName}`;\n\t\tconst profile =\n\t\t\ttypeof parsed.profile === \"string\" && isValidProfileName(parsed.profile) ? parsed.profile : \"explore\";\n\t\tconst tools = Array.isArray(parsed.tools)\n\t\t\t? parsed.tools.map((item) => String(item).trim()).filter(Boolean)\n\t\t\t: undefined;\n\t\tconst disallowedTools = Array.isArray(parsed.disallowed_tools)\n\t\t\t? parsed.disallowed_tools.map((item) => String(item).trim()).filter(Boolean)\n\t\t\t: undefined;\n\t\tconst systemPrompt = typeof parsed.system_prompt === \"string\" ? parsed.system_prompt.trim() : undefined;\n\t\tconst cwdField = typeof parsed.cwd === \"string\" ? parsed.cwd.trim() : undefined;\n\t\tconst background = parsed.background === true;\n\t\tconst instructions =\n\t\t\ttypeof parsed.instructions === \"string\" && parsed.instructions.trim().length > 0\n\t\t\t\t? parsed.instructions.trim()\n\t\t\t\t: `Follow user instructions for ${description}.`;\n\n\t\tconst frontmatter: string[] = [\n\t\t\t\"---\",\n\t\t\t`name: ${JSON.stringify(fileName)}`,\n\t\t\t`description: ${JSON.stringify(description)}`,\n\t\t\t`profile: ${profile}`,\n\t\t];\n\t\tif (tools && tools.length > 0) {\n\t\t\tfrontmatter.push(`tools: [${tools.map((item) => JSON.stringify(item)).join(\", \")}]`);\n\t\t}\n\t\tif (disallowedTools && disallowedTools.length > 0) {\n\t\t\tfrontmatter.push(`disallowed_tools: [${disallowedTools.map((item) => JSON.stringify(item)).join(\", \")}]`);\n\t\t}\n\t\tif (systemPrompt) {\n\t\t\tfrontmatter.push(`system_prompt: ${JSON.stringify(systemPrompt)}`);\n\t\t}\n\t\tif (cwdField) {\n\t\t\tfrontmatter.push(`cwd: ${JSON.stringify(cwdField)}`);\n\t\t}\n\t\tif (background) {\n\t\t\tfrontmatter.push(\"background: true\");\n\t\t}\n\t\tfrontmatter.push(\"---\", \"\", instructions, \"\");\n\n\t\tconst agentsDir = path.join(this.sessionManager.getCwd(), \".iosm\", \"agents\");\n\t\tfs.mkdirSync(agentsDir, { recursive: true });\n\t\tconst targetPath = path.join(agentsDir, `${fileName}.md`);\n\t\tif (fs.existsSync(targetPath)) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\n\t\t\t\t\"Overwrite existing agent?\",\n\t\t\t\t`${targetPath} already exists.`,\n\t\t\t);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(\"Agent creation cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tfs.writeFileSync(targetPath, frontmatter.join(\"\\n\"), \"utf8\");\n\t\t// Refresh autocomplete so the newly-created agent is immediately available in @ suggestions.\n\t\tthis.setupAutocomplete(this.fdPath);\n\t\tthis.showStatus(`Created agent: ${targetPath}`);\n\n\t\tconst insertMention = await this.showExtensionConfirm(\n\t\t\t\"Insert mention?\",\n\t\t\t`Insert @${fileName} into the editor now?`,\n\t\t);\n\t\tif (insertMention) {\n\t\t\tconst current = this.editor.getText().trim();\n\t\t\tthis.editor.setText(current ? `${current} @${fileName} ` : `@${fileName} `);\n\t\t\tthis.ui.requestRender();\n\t\t}\n\t}\n\n\tprivate handleSubagentRunsSlashCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst limitRaw = args[0];\n\t\tconst limit = limitRaw ? Number.parseInt(limitRaw, 10) : 20;\n\t\tif (!Number.isInteger(limit) || limit < 1 || limit > 200) {\n\t\t\tthis.showWarning(\"Usage: /subagent-runs [limit: 1..200]\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst runs = listSubagentRuns(cwd, limit);\n\t\tif (runs.length === 0) {\n\t\t\tthis.showStatus(\"No subagent runs found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst lines = runs.map((run, index) => {\n\t\t\tconst created = run.createdAt ? ` · ${run.createdAt}` : \"\";\n\t\t\tconst profile = run.profile ? ` · ${run.profile}` : \"\";\n\t\t\tconst agent = run.agent ? ` · agent=${run.agent}` : \"\";\n\t\t\tconst cwdPart = run.cwd ? ` · cwd=${run.cwd}` : \"\";\n\t\t\tconst desc = run.description ? `\\n ${run.description}` : \"\";\n\t\t\treturn `${index + 1}. ${run.runId}${profile}${agent}${cwdPart}${created}${desc}`;\n\t\t});\n\t\tthis.showCommandTextBlock(\"Subagent Runs\", lines.join(\"\\n\"));\n\t}\n\n\tprivate async handleSubagentResumeSlashCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tlet runId = args[0];\n\t\tlet extraInstructions = args.slice(1).join(\" \").trim();\n\n\t\tif (!runId) {\n\t\t\tconst runs = listSubagentRuns(cwd, 20);\n\t\t\tif (runs.length === 0) {\n\t\t\t\tthis.showStatus(\"No subagent runs found.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst options = runs.map((run, index) => {\n\t\t\t\tconst created = run.createdAt ? ` · ${run.createdAt}` : \"\";\n\t\t\t\tconst profile = run.profile ? ` · ${run.profile}` : \"\";\n\t\t\t\tconst agent = run.agent ? ` · agent=${run.agent}` : \"\";\n\t\t\t\tconst desc = run.description ? ` · ${run.description}` : \"\";\n\t\t\t\treturn `${index + 1}. ${run.runId}${profile}${agent}${created}${desc}`;\n\t\t\t});\n\t\t\tconst picked = await this.showExtensionSelector(\"/subagent-resume: select run\", options);\n\t\t\tif (!picked) {\n\t\t\t\tthis.showStatus(\"Subagent resume cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst selectedIndex = options.indexOf(picked);\n\t\t\tconst selectedRun = selectedIndex >= 0 ? runs[selectedIndex] : undefined;\n\t\t\tif (!selectedRun) {\n\t\t\t\tthis.showWarning(\"Selected subagent run is no longer available.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trunId = selectedRun.runId;\n\n\t\t\tconst enteredInstructions = await this.showExtensionInput(\n\t\t\t\t\"/subagent-resume: extra instructions (optional)\",\n\t\t\t\t\"leave blank to continue as-is\",\n\t\t\t);\n\t\t\tif (enteredInstructions === undefined) {\n\t\t\t\tthis.showStatus(\"Subagent resume cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\textraInstructions = enteredInstructions.trim();\n\t\t}\n\n\t\tconst run = getSubagentRun(cwd, runId);\n\t\tif (!run) {\n\t\t\tthis.showWarning(`Subagent run not found: ${runId}`);\n\t\t\treturn;\n\t\t}\n\t\tconst outputTail = (run.output ?? \"\").slice(-6000);\n\t\tconst resumePrompt = [\n\t\t\t\"<resume_subagent_run>\",\n\t\t\t`run_id: ${run.runId}`,\n\t\t\t`profile: ${run.profile ?? \"full\"}`,\n\t\t\t`agent: ${run.agent ?? \"\"}`,\n\t\t\t`cwd: ${run.cwd ?? cwd}`,\n\t\t\t`lock_key: ${run.lockKey ?? \"\"}`,\n\t\t\t\"Use the task tool to continue this workstream from the previous output context.\",\n\t\t\t\"\",\n\t\t\t\"Previous output (tail):\",\n\t\t\toutputTail || \"(empty)\",\n\t\t\t\"\",\n\t\t\textraInstructions ? `Additional instructions:\\n${extraInstructions}\\n` : \"\",\n\t\t\t\"</resume_subagent_run>\",\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\\n\");\n\n\t\tawait this.session.prompt(resumePrompt, {\n\t\t\texpandPromptTemplates: false,\n\t\t\tsource: \"interactive\",\n\t\t});\n\t}\n\n\tprivate handleTeamRunsSlashCommand(text: string): void {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst limitRaw = args[0];\n\t\tconst limit = limitRaw ? Number.parseInt(limitRaw, 10) : 20;\n\t\tif (!Number.isInteger(limit) || limit < 1 || limit > 200) {\n\t\t\tthis.showWarning(\"Usage: /team-runs [limit: 1..200]\");\n\t\t\treturn;\n\t\t}\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst runs = listTeamRuns(cwd, limit);\n\t\tif (runs.length === 0) {\n\t\t\tthis.showStatus(\"No team runs found.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst lines = runs.map((run, index) => {\n\t\t\tconst done = run.tasks.filter((task) => task.status === \"done\").length;\n\t\t\tconst errored = run.tasks.filter((task) => task.status === \"error\").length;\n\t\t\treturn `${index + 1}. ${run.runId} · ${run.mode} · ${done}/${run.tasks.length} done · ${errored} error · ${run.createdAt}`;\n\t\t});\n\t\tthis.showCommandTextBlock(\"Team Runs\", lines.join(\"\\n\"));\n\t}\n\n\tprivate async handleTeamStatusSlashCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tlet runId = args[0];\n\n\t\tif (!runId) {\n\t\t\tconst runs = listTeamRuns(cwd, 20);\n\t\t\tif (runs.length === 0) {\n\t\t\t\tthis.showStatus(\"No team runs found.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\t\tif (canShowInteractiveSelector) {\n\t\t\t\tconst options = runs.map((run, index) => {\n\t\t\t\t\tconst done = run.tasks.filter((task) => task.status === \"done\").length;\n\t\t\t\t\tconst errored = run.tasks.filter((task) => task.status === \"error\").length;\n\t\t\t\t\treturn `${index + 1}. ${run.runId} · ${run.mode} · ${done}/${run.tasks.length} done · ${errored} error · ${run.createdAt}`;\n\t\t\t\t});\n\t\t\t\tconst selection = await this.showExtensionSelector(\"/team-status: select run\", options);\n\t\t\t\tif (!selection) {\n\t\t\t\t\tthis.showStatus(\"Team status cancelled.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst selectedIndex = options.indexOf(selection);\n\t\t\t\tconst selectedRun = selectedIndex >= 0 ? runs[selectedIndex] : undefined;\n\t\t\t\tif (!selectedRun) {\n\t\t\t\t\tthis.showWarning(\"Selected team run is no longer available.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trunId = selectedRun.runId;\n\t\t\t} else {\n\t\t\t\trunId = runs[0]?.runId;\n\t\t\t}\n\t\t}\n\t\tif (!runId) {\n\t\t\tthis.showWarning(\"No team run selected.\");\n\t\t\treturn;\n\t\t}\n\t\tconst run = getTeamRun(cwd, runId);\n\t\tif (!run) {\n\t\t\tthis.showWarning(`Team run not found: ${runId}`);\n\t\t\treturn;\n\t\t}\n\t\tconst lines = [\n\t\t\t`Run: ${run.runId}`,\n\t\t\t`Created: ${run.createdAt}`,\n\t\t\t`Mode: ${run.mode}`,\n\t\t\t`Agents: ${run.agents}`,\n\t\t\t`Max parallel: ${run.maxParallel ?? \"n/a\"}`,\n\t\t\t`Task: ${run.task}`,\n\t\t\t\"\",\n\t\t\t\"Assignments:\",\n\t\t\t...run.tasks.map((task) => {\n\t\t\t\tconst deps = task.dependsOn.length > 0 ? task.dependsOn.join(\"|\") : \"-\";\n\t\t\t\treturn `- ${task.id}: status=${task.status} profile=${task.profile} cwd=${task.cwd}${task.lockKey ? ` lock=${task.lockKey}` : \"\"\n\t\t\t\t\t} depends_on=${deps}`;\n\t\t\t}),\n\t\t];\n\t\tthis.showCommandTextBlock(\"Team Status\", lines.join(\"\\n\"));\n\t}\n\n\tprivate showIosmAutomationSummaryCard(input: {\n\t\tstatus: IosmAutomationLoopStatus;\n\t\ttargetIndex: number;\n\t\tmaxIterations: number;\n\t\titerationsCompleted: number;\n\t\tinitialSnapshot: IosmMetricSnapshot;\n\t\tfinalSnapshot: IosmMetricSnapshot;\n\t\tcycleId?: string;\n\t\tcycleDecision?: IosmDecision;\n\t\terror?: string;\n\t\tguidePath?: string;\n\t}): void {\n\t\tconst resultLabel =\n\t\t\tinput.status === \"stabilized\"\n\t\t\t\t? \"stabilized\"\n\t\t\t\t: input.status === \"threshold_reached\"\n\t\t\t\t\t? \"requested threshold reached\"\n\t\t\t\t\t: input.status === \"cancelled\"\n\t\t\t\t\t\t? \"cancelled by user\"\n\t\t\t\t\t\t: input.status === \"max_iterations\"\n\t\t\t\t\t\t\t? \"iteration budget exhausted\"\n\t\t\t\t\t\t\t: \"failed\";\n\t\tconst deltaLines = summarizeMetricDelta(input.initialSnapshot, input.finalSnapshot);\n\t\tconst remainingPriorities = buildIosmPriorityChecklist(input.finalSnapshot.metrics, 3)\n\t\t\t.map(\n\t\t\t\t(item, index) =>\n\t\t\t\t\t`${index + 1}. ${item.metric}=${item.value === null ? \"n/a\" : item.value.toFixed(3)} — ${item.action}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\n\t\tconst lines = [\n\t\t\t`Result: ${resultLabel}`,\n\t\t\t`Target index: ${input.targetIndex.toFixed(3)}`,\n\t\t\t`Iterations completed: ${input.iterationsCompleted}/${input.maxIterations}`,\n\t\t\t`Cycle: ${input.cycleId ?? \"unknown\"}`,\n\t\t\t`Decision: ${input.cycleDecision ?? \"unknown\"}`,\n\t\t\t\"\",\n\t\t\t`Before: ${formatMetricSnapshot(input.initialSnapshot)}`,\n\t\t\t`After: ${formatMetricSnapshot(input.finalSnapshot)}`,\n\t\t\t\"\",\n\t\t\t\"Metric delta:\",\n\t\t\t...(deltaLines.length > 0 ? deltaLines.map((line) => `- ${line}`) : [\"- no metric movement detected\"]),\n\t\t\t\"\",\n\t\t\t\"Remaining priorities:\",\n\t\t\tremainingPriorities,\n\t\t];\n\n\t\tif (input.guidePath) {\n\t\t\tlines.push(\"\", `Guide: ${input.guidePath}`);\n\t\t}\n\n\t\tif (input.error) {\n\t\t\tlines.push(\"\", `Error: ${input.error}`);\n\t\t}\n\n\t\tthis.showCommandTextBlock(\"IOSM Automation\", lines.join(\"\\n\"));\n\t}\n\n\tprivate async handleIosmAutomationSlashCommand(text: string): Promise<void> {\n\t\tif (this.activeProfileName !== \"iosm\") {\n\t\t\tthis.showWarning(\"`/iosm` is available only in IOSM profile. Switch profile to `iosm` (Shift+Tab).\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Cannot run /iosm while the agent is processing a request.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Cannot run /iosm while compaction is running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmAutomationRun) {\n\t\t\tthis.showWarning(\"IOSM automation is already running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Cannot run /iosm while IOSM verification is running.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst parsed = this.parseIosmAutomationSlashCommand(text);\n\t\tif (!parsed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cwd = this.sessionManager.getCwd();\n\t\tconst explicitTarget = parsed.targetIndex !== undefined;\n\t\ttry {\n\t\t\tconst { config: existingConfig } = loadIosmConfig(cwd);\n\t\t\tif (!existingConfig.iosm.automation.allow_agents) {\n\t\t\t\tthis.showWarning(\"IOSM automation is disabled by iosm.automation.allow_agents=false.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Uninitialized workspaces are allowed; /iosm will bootstrap them first.\n\t\t}\n\t\tlet targetIndex = parsed.targetIndex;\n\t\tlet maxIterations = parsed.maxIterations;\n\t\tlet initialSnapshot: IosmMetricSnapshot | undefined;\n\t\tlet finalSnapshot: IosmMetricSnapshot | undefined;\n\t\tlet cycleId: string | undefined;\n\t\tlet cycleDecision: IosmDecision | undefined;\n\t\tlet guidePath: string | undefined;\n\t\tlet currentGoals: string[] = [];\n\t\tlet criticalityProfile: ReturnType<typeof loadIosmConfig>[\"config\"][\"iosm\"][\"metadata\"][\"criticality_profile\"] | undefined;\n\t\tlet approvalRequirements: string[] = [];\n\t\tlet errorMessage: string | undefined;\n\t\tlet status: IosmAutomationLoopStatus = \"failed\";\n\n\t\tthis.iosmAutomationRun = {\n\t\t\tcancelRequested: false,\n\t\t\ttargetIndex,\n\t\t\tmaxIterations,\n\t\t\titerationsCompleted: 0,\n\t\t};\n\t\tconst automationRun = this.iosmAutomationRun;\n\n\t\ttry {\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Text(theme.bold(theme.fg(\"accent\", \"◆ \")) + theme.bold(\"/iosm\") + theme.fg(\"muted\", ` ${cwd}`), 1, 0),\n\t\t\t);\n\t\t\tthis.ui.requestRender();\n\n\t\t\tconst initialRefresh = await this.runIosmRefreshPass({\n\t\t\t\tcwd,\n\t\t\t\tforce: parsed.forceInit,\n\t\t\t\tagentVerify: true,\n\t\t\t});\n\t\t\tconst { config } = loadIosmConfig(cwd);\n\t\t\tconst settings = resolveIosmAutomationSettings(config, {\n\t\t\t\ttargetIndex: parsed.targetIndex,\n\t\t\t\tmaxIterations: parsed.maxIterations,\n\t\t\t});\n\t\t\tif (!config.iosm.automation.allow_agents) {\n\t\t\t\terrorMessage = \"IOSM automation is disabled by iosm.automation.allow_agents=false.\";\n\t\t\t\tstatus = \"failed\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttargetIndex = settings.targetIndex;\n\t\t\tmaxIterations = settings.maxIterations;\n\t\t\tautomationRun.targetIndex = targetIndex;\n\t\t\tautomationRun.maxIterations = maxIterations;\n\t\t\tcriticalityProfile = config.iosm.metadata.criticality_profile;\n\t\t\tapprovalRequirements = config.iosm.automation.human_approval_required_for;\n\n\t\t\tinitialSnapshot = initialRefresh.snapshot;\n\t\t\tfinalSnapshot = initialRefresh.snapshot;\n\t\t\tcycleId = initialRefresh.initResult.cycle?.cycleId;\n\t\t\tcycleDecision = initialRefresh.cycleDecision;\n\t\t\tguidePath = initialRefresh.guidePath;\n\t\t\tcurrentGoals = initialRefresh.initResult.analysis.goals;\n\n\t\t\tthis.showProgressLine(\n\t\t\t\t` Target IOSM index: ${targetIndex.toFixed(3)} · iteration budget: ${maxIterations}`,\n\t\t\t);\n\t\t\tthis.showProgressLine(` Current snapshot: ${formatMetricSnapshot(initialSnapshot)}`);\n\n\t\t\tif (!initialRefresh.verification?.completed) {\n\t\t\t\tif (initialRefresh.verification?.cancelled || automationRun.cancelRequested) {\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\terrorMessage =\n\t\t\t\t\tinitialRefresh.verification?.error ??\n\t\t\t\t\tinitialRefresh.verification?.skippedReason ??\n\t\t\t\t\t\"IOSM verification did not complete.\";\n\t\t\t\tstatus = \"failed\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst initialProgress = evaluateIosmAutomationProgress({\n\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\ttargetIndex,\n\t\t\t\tcycleDecision,\n\t\t\t\texplicitTarget,\n\t\t\t});\n\t\t\tif (initialProgress.failed) {\n\t\t\t\terrorMessage = \"IOSM verifier marked the current cycle as FAIL.\";\n\t\t\t\tstatus = \"failed\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ((!explicitTarget && initialProgress.stabilized) || initialProgress.targetSatisfied) {\n\t\t\t\tstatus = initialProgress.stabilized ? \"stabilized\" : \"threshold_reached\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (let iteration = 1; iteration <= maxIterations; iteration++) {\n\t\t\t\tif (automationRun.cancelRequested) {\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (explicitTarget && cycleDecision === \"STOP\" && !hasReachedIosmTarget(finalSnapshot, targetIndex)) {\n\t\t\t\t\tconst previousCycleId = cycleId;\n\t\t\t\t\tthis.showProgressLine(\" Current cycle stabilized below the requested threshold; opening a fresh cycle.\");\n\t\t\t\t\tconst rollover = await this.runIosmRefreshPass({\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tforce: false,\n\t\t\t\t\t\tagentVerify: true,\n\t\t\t\t\t});\n\t\t\t\t\tfinalSnapshot = rollover.snapshot;\n\t\t\t\t\tcycleId = rollover.initResult.cycle?.cycleId ?? cycleId;\n\t\t\t\t\tcycleDecision = rollover.cycleDecision;\n\t\t\t\t\tguidePath = rollover.guidePath;\n\t\t\t\t\tcurrentGoals = rollover.initResult.analysis.goals;\n\n\t\t\t\t\tif (!rollover.verification?.completed) {\n\t\t\t\t\t\tif (rollover.verification?.cancelled || automationRun.cancelRequested) {\n\t\t\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\terrorMessage =\n\t\t\t\t\t\t\trollover.verification?.error ??\n\t\t\t\t\t\t\trollover.verification?.skippedReason ??\n\t\t\t\t\t\t\t\"IOSM verification did not complete.\";\n\t\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rolloverProgress = evaluateIosmAutomationProgress({\n\t\t\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\t\t\ttargetIndex,\n\t\t\t\t\t\tcycleDecision,\n\t\t\t\t\t\texplicitTarget,\n\t\t\t\t\t});\n\t\t\t\t\tif (rolloverProgress.failed) {\n\t\t\t\t\t\terrorMessage = \"IOSM verifier marked the new cycle as FAIL.\";\n\t\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (rolloverProgress.targetSatisfied) {\n\t\t\t\t\t\tstatus = rolloverProgress.stabilized ? \"stabilized\" : \"threshold_reached\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (previousCycleId === cycleId && rolloverProgress.stabilized) {\n\t\t\t\t\t\terrorMessage = \"IOSM automation could not advance to a fresh cycle after stabilization.\";\n\t\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst priorities = buildIosmPriorityChecklist(finalSnapshot.metrics, 3);\n\t\t\t\tthis.showProgressLine(\n\t\t\t\t\t` Iteration ${iteration}/${maxIterations}: improving from ${finalSnapshot.iosm_index === null ? \"n/a\" : finalSnapshot.iosm_index.toFixed(3)} toward ${targetIndex.toFixed(3)}`,\n\t\t\t\t);\n\t\t\t\tconst iterationPromptTimeoutMs = 300_000;\n\t\t\t\tlet iterationTimeout: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tawait Promise.race([\n\t\t\t\t\t\tthis.session.prompt(\n\t\t\t\t\t\t\tbuildIosmAutomationPrompt({\n\t\t\t\t\t\t\t\trootDir: cwd,\n\t\t\t\t\t\t\t\tcycleId,\n\t\t\t\t\t\t\t\ttargetIndex,\n\t\t\t\t\t\t\t\titeration,\n\t\t\t\t\t\t\t\tmaxIterations,\n\t\t\t\t\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\t\t\t\t\tgoals: currentGoals,\n\t\t\t\t\t\t\t\tpriorities,\n\t\t\t\t\t\t\t\tcurrentDecision: cycleDecision,\n\t\t\t\t\t\t\t\tcriticalityProfile,\n\t\t\t\t\t\t\t\tapprovalRequirements,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\texpandPromptTemplates: false,\n\t\t\t\t\t\t\t\tskipIosmAutopilot: true,\n\t\t\t\t\t\t\t\tsource: \"interactive\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t),\n\t\t\t\t\t\tnew Promise<never>((_resolve, reject) => {\n\t\t\t\t\t\t\titerationTimeout = setTimeout(() => {\n\t\t\t\t\t\t\t\treject(\n\t\t\t\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t\t\t\t`/iosm iteration ${iteration} timed out after ${Math.round(iterationPromptTimeoutMs / 1000)}s.`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}, iterationPromptTimeoutMs);\n\t\t\t\t\t\t}),\n\t\t\t\t\t]);\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\tif (message.includes(\"timed out\")) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (this.session.isStreaming) {\n\t\t\t\t\t\t\t\tawait this.session.abort();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// best effort\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow error;\n\t\t\t\t} finally {\n\t\t\t\t\tif (iterationTimeout) {\n\t\t\t\t\t\tclearTimeout(iterationTimeout);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst lastAssistant = this.getLastAssistantMessage();\n\t\t\t\tif (lastAssistant?.stopReason === \"aborted\") {\n\t\t\t\t\tautomationRun.cancelRequested = true;\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (lastAssistant?.stopReason === \"error\") {\n\t\t\t\t\terrorMessage = lastAssistant.errorMessage ?? \"IOSM improvement turn failed.\";\n\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (automationRun.cancelRequested) {\n\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tconst refreshed = await this.runIosmRefreshPass({\n\t\t\t\t\tcwd,\n\t\t\t\t\tforce: false,\n\t\t\t\t\tagentVerify: true,\n\t\t\t\t});\n\t\t\t\tfinalSnapshot = refreshed.snapshot;\n\t\t\t\tcycleId = refreshed.initResult.cycle?.cycleId ?? cycleId;\n\t\t\t\tcycleDecision = refreshed.cycleDecision;\n\t\t\t\tguidePath = refreshed.guidePath;\n\t\t\t\tcurrentGoals = refreshed.initResult.analysis.goals;\n\n\t\t\t\tif (!refreshed.verification?.completed) {\n\t\t\t\t\tif (refreshed.verification?.cancelled || automationRun.cancelRequested) {\n\t\t\t\t\t\tstatus = \"cancelled\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\terrorMessage =\n\t\t\t\t\t\trefreshed.verification?.error ??\n\t\t\t\t\t\trefreshed.verification?.skippedReason ??\n\t\t\t\t\t\t\"IOSM verification did not complete.\";\n\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tautomationRun.iterationsCompleted = iteration;\n\t\t\t\tthis.showProgressLine(` Verified snapshot: ${formatMetricSnapshot(finalSnapshot)}`);\n\n\t\t\t\tconst progress = evaluateIosmAutomationProgress({\n\t\t\t\t\tsnapshot: finalSnapshot,\n\t\t\t\t\ttargetIndex,\n\t\t\t\t\tcycleDecision,\n\t\t\t\t\texplicitTarget,\n\t\t\t\t});\n\t\t\t\tif (progress.failed) {\n\t\t\t\t\terrorMessage = \"IOSM verifier marked the cycle as FAIL.\";\n\t\t\t\t\tstatus = \"failed\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ((!explicitTarget && progress.stabilized) || progress.targetSatisfied) {\n\t\t\t\t\tstatus = progress.stabilized ? \"stabilized\" : \"threshold_reached\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (iteration === maxIterations) {\n\t\t\t\t\tstatus = \"max_iterations\";\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error: unknown) {\n\t\t\terrorMessage = error instanceof Error ? error.message : String(error);\n\t\t\tstatus = automationRun.cancelRequested ? \"cancelled\" : \"failed\";\n\t\t} finally {\n\t\t\tconst iterationsCompleted = automationRun.iterationsCompleted;\n\t\t\tconst resolvedTargetIndex = targetIndex;\n\t\t\tconst resolvedMaxIterations = maxIterations;\n\t\t\tthis.iosmAutomationRun = undefined;\n\n\t\t\tif (\n\t\t\t\tinitialSnapshot &&\n\t\t\t\tfinalSnapshot &&\n\t\t\t\tresolvedTargetIndex !== undefined &&\n\t\t\t\tresolvedMaxIterations !== undefined\n\t\t\t) {\n\t\t\t\tthis.showIosmAutomationSummaryCard({\n\t\t\t\t\tstatus,\n\t\t\t\t\ttargetIndex: resolvedTargetIndex,\n\t\t\t\t\tmaxIterations: resolvedMaxIterations,\n\t\t\t\t\titerationsCompleted,\n\t\t\t\t\tinitialSnapshot,\n\t\t\t\t\tfinalSnapshot,\n\t\t\t\t\tcycleId,\n\t\t\t\t\tcycleDecision,\n\t\t\t\t\terror: errorMessage,\n\t\t\t\t\tguidePath,\n\t\t\t\t});\n\t\t\t} else if (errorMessage) {\n\t\t\t\tthis.showError(`IOSM automation failed: ${errorMessage}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildStandardInitPlaybook(cwd: string, generatedBody?: string): string {\n\t\tif (generatedBody && generatedBody.trim().length > 0) {\n\t\t\tconst trimmed = generatedBody.trim();\n\t\t\treturn trimmed.startsWith(\"# AGENTS.md\") ? trimmed : `# AGENTS.md\\n\\n${trimmed}`;\n\t\t}\n\n\t\tconst packageJsonPath = path.join(cwd, \"package.json\");\n\t\tlet packageName: string | undefined;\n\t\tlet scriptsSection = \"\";\n\t\ttry {\n\t\t\tif (fs.existsSync(packageJsonPath)) {\n\t\t\t\tconst raw = fs.readFileSync(packageJsonPath, \"utf8\");\n\t\t\t\tconst parsed = JSON.parse(raw) as { name?: string; scripts?: Record<string, string> };\n\t\t\t\tif (typeof parsed.name === \"string\" && parsed.name.trim().length > 0) {\n\t\t\t\t\tpackageName = parsed.name.trim();\n\t\t\t\t}\n\t\t\t\tif (parsed.scripts && typeof parsed.scripts === \"object\") {\n\t\t\t\t\tconst entries = Object.entries(parsed.scripts).slice(0, 8);\n\t\t\t\t\tif (entries.length > 0) {\n\t\t\t\t\t\tscriptsSection = entries.map(([name, cmd]) => ` - \\`npm run ${name}\\`: \\`${cmd}\\``).join(\"\\n\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Keep template generation resilient even if package.json is malformed.\n\t\t}\n\n\t\tconst keyFiles = [\"README.md\", \"package.json\", \"tsconfig.json\", \".env.example\", \"docker-compose.yml\"]\n\t\t\t.filter((name) => fs.existsSync(path.join(cwd, name)))\n\t\t\t.map((name) => `- \\`${name}\\``)\n\t\t\t.join(\"\\n\");\n\n\t\treturn [\n\t\t\t\"# AGENTS.md\",\n\t\t\t\"\",\n\t\t\t\"This workspace is initialized in standard (non-IOSM) mode.\",\n\t\t\tpackageName ? `\\n## Project\\n- Name: \\`${packageName}\\`` : \"\",\n\t\t\t\"\",\n\t\t\t\"## Role\",\n\t\t\t\"- Act as a pragmatic engineering agent.\",\n\t\t\t\"- Inspect relevant files first, then implement changes with minimal blast radius.\",\n\t\t\t\"- Verify changes with targeted checks/tests.\",\n\t\t\t\"\",\n\t\t\t\"## Project Startup\",\n\t\t\tscriptsSection.length > 0\n\t\t\t\t? \"- Use these project scripts first:\\n\" + scriptsSection\n\t\t\t\t: \"- Define and document run/test/build commands here after initial setup.\",\n\t\t\t\"\",\n\t\t\t\"## Key Files\",\n\t\t\tkeyFiles.length > 0 ? keyFiles : \"- Add key entrypoints and config files for quick onboarding.\",\n\t\t\t\"\",\n\t\t\t\"## Working Rules\",\n\t\t\t\"- Keep responses concise and concrete.\",\n\t\t\t\"- Prefer explicit file references and commands.\",\n\t\t\t\"- Use subagents when user explicitly requests delegation or parallelization.\",\n\t\t\t\"\",\n\t\t\t\"## Custom Agents\",\n\t\t\t\"- Put custom agent specs under `.iosm/agents/*.md`.\",\n\t\t\t\"- Use `@agent_name` in chat to target a custom agent explicitly.\",\n\t\t\t\"\",\n\t\t\t\"## Notes\",\n\t\t\t\"- Switch to profile `iosm` to enable IOSM methodology, `/iosm`, and IOSM artifact lifecycle.\",\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\t}\n\n\tprivate async generateStandardAgentsGuideWithAgent(\n\t\tcwd: string,\n\t\tonEvent?: (event: AgentSessionEvent) => void,\n\t): Promise<{\n\t\tcontent: string;\n\t\ttoolCallsStarted: number;\n\t\ttoolCallsCompleted: number;\n\t\tassistantMessages: number;\n\t\tattempts: number;\n\t}> {\n\t\tconst model = this.session.model;\n\t\tif (!model) {\n\t\t\tthrow new Error(\"No model selected. Use /model first.\");\n\t\t}\n\n\t\tconst agentDir = getAgentDir();\n\t\tconst settingsManager = SettingsManager.create(cwd, agentDir);\n\t\tconst authStorage = AuthStorage.create(getAuthPath());\n\t\tconst modelRegistry = new ModelRegistry(authStorage, getModelsPath());\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tnoExtensions: true,\n\t\t\tnoSkills: true,\n\t\t\tnoPromptTemplates: true,\n\t\t});\n\t\tawait resourceLoader.reload();\n\n\t\tconst { session } = await createAgentSession({\n\t\t\tcwd,\n\t\t\tsessionManager: SessionManager.inMemory(),\n\t\t\tsettingsManager,\n\t\t\tauthStorage,\n\t\t\tmodelRegistry,\n\t\t\tresourceLoader,\n\t\t\tmodel,\n\t\t\tprofile: \"plan\",\n\t\t\tenableTaskTool: false,\n\t\t});\n\n\t\tconst existingAgentsPath = path.join(cwd, \"AGENTS.md\");\n\t\tconst existingAgentsRaw = fs.existsSync(existingAgentsPath) ? fs.readFileSync(existingAgentsPath, \"utf8\") : \"\";\n\t\tconst maxExistingChars = 12_000;\n\t\tconst existingAgentsSnippet =\n\t\t\texistingAgentsRaw.length > maxExistingChars\n\t\t\t\t? `${existingAgentsRaw.slice(0, maxExistingChars)}\\n\\n<!-- truncated: ${existingAgentsRaw.length - maxExistingChars} chars omitted -->`\n\t\t\t\t: existingAgentsRaw;\n\n\t\tconst chunks: string[] = [];\n\t\tlet toolCallsStarted = 0;\n\t\tlet toolCallsCompleted = 0;\n\t\tlet assistantMessages = 0;\n\t\tconst unsubscribe = session.subscribe((event) => {\n\t\t\tonEvent?.(event);\n\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\ttoolCallsStarted += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"tool_execution_end\") {\n\t\t\t\ttoolCallsCompleted += 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.type === \"message_end\" && event.message.role === \"assistant\") {\n\t\t\t\tassistantMessages += 1;\n\t\t\t\tfor (const part of event.message.content) {\n\t\t\t\t\tif (part.type === \"text\" && part.text.trim()) {\n\t\t\t\t\t\tchunks.push(part.text.trim());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst prompt = [\n\t\t\t\"Create AGENTS.md for this repository after inspecting the real project files.\",\n\t\t\texistingAgentsSnippet.trim().length > 0\n\t\t\t\t? \"An AGENTS.md already exists: preserve useful guidance, fill missing sections, and update stale parts.\"\n\t\t\t\t: \"No AGENTS.md exists yet: create a complete first version.\",\n\t\t\t\"\",\n\t\t\t\"Requirements:\",\n\t\t\t\"- Explore repository structure and key files before writing.\",\n\t\t\t\"- You MUST call repository-inspection tools (ls/find/read/grep/bash) before final output.\",\n\t\t\t\"- Output ONLY final AGENTS.md content in markdown (no code fences, no commentary).\",\n\t\t\t\"- Include practical sections:\",\n\t\t\t\" 1) Project Overview\",\n\t\t\t\" 2) Stack and Runtime\",\n\t\t\t\" 3) Setup / Run / Test commands\",\n\t\t\t\" 4) Repository Map (important directories/files)\",\n\t\t\t\" 5) Development Workflow and Conventions\",\n\t\t\t\" 6) Troubleshooting / Pitfalls\",\n\t\t\t\" 7) Quick Task Playbooks (common tasks and where to edit)\",\n\t\t\t\"- Keep it concise but actionable.\",\n\t\t\t\"- Use concrete commands and file paths from this repository.\",\n\t\t\t\"- If information is unknown, say 'Unknown' instead of guessing.\",\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"\" : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"Existing AGENTS.md:\" : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"<existing_agents_md>\" : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? existingAgentsSnippet : undefined,\n\t\t\texistingAgentsSnippet.trim().length > 0 ? \"</existing_agents_md>\" : undefined,\n\t\t].join(\"\\n\");\n\n\t\tconst strictRetryPrompt = [\n\t\t\t\"Retry with strict validation:\",\n\t\t\t\"- First, inspect the repository using tools (ls/find/read/grep/bash).\",\n\t\t\t\"- Then output ONLY final AGENTS.md markdown.\",\n\t\t\t\"- Do not include commentary, plans, or fences.\",\n\t\t].join(\"\\n\");\n\n\t\ttry {\n\t\t\tlet attempts = 0;\n\t\t\tlet latestText = \"\";\n\t\t\tlet latestAttemptToolCalls = 0;\n\n\t\t\tconst runAttempt = async (attemptPrompt: string): Promise<{ text: string; toolCalls: number }> => {\n\t\t\t\tconst chunkStart = chunks.length;\n\t\t\t\tconst toolStart = toolCallsStarted;\n\t\t\t\tawait session.prompt(attemptPrompt, { skipIosmAutopilot: true });\n\t\t\t\tconst text = chunks.slice(chunkStart).join(\"\\n\\n\").trim();\n\t\t\t\treturn {\n\t\t\t\t\ttext,\n\t\t\t\t\ttoolCalls: Math.max(0, toolCallsStarted - toolStart),\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tattempts += 1;\n\t\t\tconst firstAttempt = await runAttempt(prompt);\n\t\t\tlatestText = firstAttempt.text;\n\t\t\tlatestAttemptToolCalls = firstAttempt.toolCalls;\n\n\t\t\tif (!latestText || latestAttemptToolCalls === 0) {\n\t\t\t\tattempts += 1;\n\t\t\t\tconst secondAttempt = await runAttempt(strictRetryPrompt);\n\t\t\t\tlatestText = secondAttempt.text;\n\t\t\t\tlatestAttemptToolCalls = secondAttempt.toolCalls;\n\t\t\t}\n\n\t\t\tif (!latestText) {\n\t\t\t\tthrow new Error(\"Agent returned empty AGENTS.md draft.\");\n\t\t\t}\n\t\t\tif (latestAttemptToolCalls === 0) {\n\t\t\t\tthrow new Error(\"Agent did not inspect repository files (0 tool calls).\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcontent: latestText,\n\t\t\t\ttoolCallsStarted,\n\t\t\t\ttoolCallsCompleted,\n\t\t\t\tassistantMessages,\n\t\t\t\tattempts,\n\t\t\t};\n\t\t} finally {\n\t\t\tunsubscribe();\n\t\t\tsession.dispose();\n\t\t}\n\t}\n\n\tprivate async handleStandardInitSlashCommand(options: {\n\t\tcwd: string;\n\t\tforce: boolean;\n\t\tagentVerify: boolean;\n\t}): Promise<void> {\n\t\tconst playbookPath = path.join(options.cwd, \"AGENTS.md\");\n\t\tconst agentsDir = path.join(options.cwd, \".iosm\", \"agents\");\n\t\tfs.mkdirSync(agentsDir, { recursive: true });\n\n\t\tconst existed = fs.existsSync(playbookPath);\n\t\tthis.showProgressLine(\n\t\t\texisted\n\t\t\t\t? \" Scanning repository and updating existing AGENTS.md with agent...\"\n\t\t\t\t: \" Scanning repository and generating AGENTS.md with agent...\",\n\t\t);\n\t\tconst generated = await this.generateStandardAgentsGuideWithAgent(\n\t\t\toptions.cwd,\n\t\t\tthis.createIosmVerificationEventBridge({\n\t\t\t\tloaderMessage: `Initializing workspace... (${appKey(this.keybindings, \"interrupt\")} to interrupt)`,\n\t\t\t}),\n\t\t);\n\t\tfs.writeFileSync(playbookPath, this.buildStandardInitPlaybook(options.cwd, generated.content), \"utf8\");\n\t\tthis.showCommandTextBlock(\n\t\t\t\"Init (Standard Mode)\",\n\t\t\t[\n\t\t\t\t`Profile: ${this.activeProfileName}`,\n\t\t\t\t`AGENTS.md: ${existed ? \"updated\" : \"created\"}`,\n\t\t\t\t`Generator: agent-driven repository scan (${generated.toolCallsStarted} tool calls, ${generated.assistantMessages} assistant messages, ${generated.attempts} attempt${generated.attempts > 1 ? \"s\" : \"\"})`,\n\t\t\t\toptions.force && existed\n\t\t\t\t\t? \"Mode: force overwrite requested.\"\n\t\t\t\t\t: \"Mode: standard overwrite (existing guidance merged by agent when applicable).\",\n\t\t\t\t`.iosm/agents: ready`,\n\t\t\t\toptions.agentVerify\n\t\t\t\t\t? \"Agent verification skipped in standard mode (available in profile `iosm`).\"\n\t\t\t\t\t: \"Verification: disabled.\",\n\t\t\t].join(\"\\n\"),\n\t\t);\n\t}\n\n\tprivate async handleIosmInitSlashCommand(text: string): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Cannot run /init while the agent is processing a request.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Cannot run /init while compaction is running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmAutomationRun) {\n\t\t\tthis.showWarning(\"Cannot run /init while IOSM automation is running.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.iosmVerificationSession) {\n\t\t\tthis.showWarning(\"Cannot run /init while IOSM verification is already running.\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet force = false;\n\t\tlet agentVerify = true;\n\t\tlet targetDir: string | undefined;\n\n\t\tfor (const arg of args) {\n\t\t\tif (arg === \"-f\" || arg === \"--force\") {\n\t\t\t\tforce = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--agent-verify\") {\n\t\t\t\tagentVerify = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--no-agent-verify\" || arg === \"--static-only\") {\n\t\t\t\tagentVerify = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /init: ${arg}`);\n\t\t\t\tthis.showWarning(\"Usage: /init [path] [--force] [--no-agent-verify]\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!targetDir) {\n\t\t\t\ttargetDir = arg;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.showWarning(`Unexpected argument for /init: ${arg}`);\n\t\t\tthis.showWarning(\"Usage: /init [path] [--force] [--no-agent-verify]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst cwd = path.resolve(this.sessionManager.getCwd(), targetDir ?? \".\");\n\t\t\tif (this.activeProfileName !== \"iosm\") {\n\t\t\t\tawait this.handleStandardInitSlashCommand({\n\t\t\t\t\tcwd,\n\t\t\t\t\tforce,\n\t\t\t\t\tagentVerify,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Show init header in chat\n\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\tthis.chatContainer.addChild(\n\t\t\t\tnew Text(\n\t\t\t\t\ttheme.bold(theme.fg(\"accent\", \"◆ \")) + theme.bold(\"/init\") + theme.fg(\"muted\", ` ${cwd}`),\n\t\t\t\t\t1,\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t);\n\t\t\tthis.ui.requestRender();\n\n\t\t\tconst result = await initIosmWorkspace({ cwd, force });\n\n\t\t\tif (result.cycle?.reusedExistingCycle) {\n\t\t\t\tthis.showProgressLine(` Reusing existing cycle: ${result.cycle.cycleId}`);\n\t\t\t} else if (result.cycle) {\n\t\t\t\tthis.showProgressLine(\n\t\t\t\t\t` Analyzed ${result.analysis.files_analyzed} files (${result.analysis.source_file_count} src · ${result.analysis.test_file_count} tests · ${result.analysis.doc_file_count} docs)`,\n\t\t\t\t);\n\t\t\t\tthis.showProgressLine(` Created cycle: ${result.cycle.cycleId}`);\n\t\t\t}\n\n\t\t\tlet verification: IosmInitVerificationSummary | undefined;\n\t\t\tif (agentVerify) {\n\t\t\t\tverification = await this.runIosmInitAgentVerification(\n\t\t\t\t\tresult,\n\t\t\t\t\tcwd,\n\t\t\t\t\tthis.createIosmVerificationEventBridge(),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst currentSnapshot = this.resolveIosmSnapshot(result, verification);\n\n\t\t\tconst checklist = buildIosmPriorityChecklist(currentSnapshot.metrics, 3);\n\t\t\tconst guidePath = verification?.guidePath ?? getIosmGuidePath(result.rootDir);\n\n\t\t\t// Render rich summary card\n\t\t\tthis.showIosmInitSummaryCard(result, currentSnapshot, checklist, guidePath, verification, agentVerify);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(\n\t\t\t\t`Failed to initialize IOSM workspace: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate showIosmInitSummaryCard(\n\t\tresult: IosmInitResult,\n\t\tsnapshot: IosmMetricSnapshot,\n\t\tchecklist: ReturnType<typeof buildIosmPriorityChecklist>,\n\t\tguidePath: string,\n\t\tverification: IosmInitVerificationSummary | undefined,\n\t\tagentVerify: boolean,\n\t): void {\n\t\tconst source = verification?.completed ? \"verified\" : \"heuristic\";\n\t\tconst cycleId = result.cycle?.cycleId ?? \"—\";\n\t\tconst home = process.env.HOME ?? \"\";\n\n\t\tconst shortPath = (p: string): string =>\n\t\t\thome && p.startsWith(home) ? `~${p.slice(home.length)}` : p;\n\n\t\tconst metricBar = (value: number | null): string => {\n\t\t\tif (value === null) return \"n/a \";\n\t\t\tconst filled = Math.round(value * 8);\n\t\t\treturn \"█\".repeat(filled) + \"░\".repeat(8 - filled) + ` ${value.toFixed(2)}`;\n\t\t};\n\n\t\tconst statusIcon = (value: number | null): string => {\n\t\t\tif (value === null) return \"?\";\n\t\t\tif (value < 0.55) return \"⚠\";\n\t\t\tif (value < 0.75) return \"~\";\n\t\t\treturn \"✓\";\n\t\t};\n\n\t\tconst metrics = snapshot.metrics;\n\t\tconst metricOrder: Array<keyof typeof metrics> = [\n\t\t\t\"semantic\",\n\t\t\t\"logic\",\n\t\t\t\"performance\",\n\t\t\t\"simplicity\",\n\t\t\t\"modularity\",\n\t\t\t\"flow\",\n\t\t];\n\n\t\tconst metricRows = metricOrder\n\t\t\t.map((m) => {\n\t\t\t\tconst v = metrics[m];\n\t\t\t\tconst icon = statusIcon(v);\n\t\t\t\tconst bar = metricBar(v);\n\t\t\t\treturn `| ${icon} | ${m.padEnd(11)} | ${bar} |`;\n\t\t\t})\n\t\t\t.join(\"\\n\");\n\n\t\tconst iosmIdx =\n\t\t\tsnapshot.iosm_index !== null && snapshot.iosm_index !== undefined\n\t\t\t\t? snapshot.iosm_index.toFixed(3)\n\t\t\t\t: \"n/a\";\n\t\tconst conf =\n\t\t\tsnapshot.decision_confidence !== null && snapshot.decision_confidence !== undefined\n\t\t\t\t? snapshot.decision_confidence.toFixed(2)\n\t\t\t\t: \"n/a\";\n\n\t\tconst priorityLines = checklist\n\t\t\t.map(\n\t\t\t\t(item, i) =>\n\t\t\t\t\t`${i + 1}. **${item.metric}** \\`${item.value === null ? \"n/a\" : item.value.toFixed(2)}\\` — ${item.action}`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\n\t\tconst goals =\n\t\t\tresult.analysis.goals.length > 0 ? result.analysis.goals.map((g) => `- ${g}`).join(\"\\n\") : \"- (none detected)\";\n\n\t\tconst fileStats = `${result.analysis.files_analyzed} total · ${result.analysis.source_file_count} src · ${result.analysis.test_file_count} tests · ${result.analysis.doc_file_count} docs`;\n\n\t\tconst verifyStatus = !agentVerify\n\t\t\t? \"_skipped (--no-agent-verify)_\"\n\t\t\t: verification?.completed\n\t\t\t\t? `✓ completed (${verification.toolCalls ?? 0} tool calls)`\n\t\t\t\t: verification?.cancelled\n\t\t\t\t\t? \"⚠ cancelled by user\"\n\t\t\t\t\t: verification?.skippedReason\n\t\t\t\t\t\t? `⚠ skipped: ${verification.skippedReason}`\n\t\t\t\t\t\t: verification?.error\n\t\t\t\t\t\t\t? `✗ failed: ${verification.error}`\n\t\t\t\t\t\t\t: \"_not run_\";\n\n\t\tconst md = `## IOSM workspace initialized\n\n**Project:** \\`${shortPath(result.rootDir)}\\`\n**Files:** ${fileStats}\n**Cycle:** \\`${cycleId}\\`\n**Assessment:** ${source} **Verification:** ${verifyStatus}\n\n### Detected goals\n${goals}\n\n### Metric scores\n\n| | Metric | Score |\n|---|-------------|------------------|\n${metricRows}\n\n**IOSM-Index:** \\`${iosmIdx}\\` **Confidence:** \\`${conf}\\`\n\n### Top priorities this cycle\n\n${priorityLines}\n\n### Key workspace files\n\n- \\`IOSM.md\\` — agent playbook (auto-loaded as context each session)\n- \\`iosm.yaml\\` — cycle configuration${result.cycle ? `\\n- \\`.iosm/cycles/${cycleId}/cycle-report.json\\`` : \"\"}\n- \\`${shortPath(guidePath)}\\`\n\n### Next steps\n\nRe-read \\`IOSM.md\\`, then start a session describing which priority to tackle first.\nThe agent will automatically receive IOSM context on every turn.`;\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(md, 1, 0, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleIosmCycleListSlashCommand(): void {\n\t\tif (!this.requireIosmMode(\"/cycle-list\")) return;\n\t\ttry {\n\t\t\tconst cycles = listIosmCycles(this.sessionManager.getCwd());\n\t\t\tif (cycles.length === 0) {\n\t\t\t\tthis.showStatus(\"No IOSM cycles found.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lines: string[] = [];\n\t\t\tfor (const cycle of cycles) {\n\t\t\t\tconst goals = cycle.goals.length > 0 ? cycle.goals.join(\"; \") : \"no goals recorded\";\n\t\t\t\tlines.push(`${cycle.cycleId} ${cycle.status} ${cycle.decision}`);\n\t\t\t\tlines.push(` ${goals}`);\n\t\t\t}\n\t\t\tthis.showCommandTextBlock(\"IOSM Cycles\", lines.join(\"\\n\"));\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to list IOSM cycles: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleIosmCyclePlanSlashCommand(text: string): Promise<void> {\n\t\tif (!this.requireIosmMode(\"/cycle-plan\")) return;\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tlet force = false;\n\t\tlet cycleId: string | undefined;\n\t\tconst goals: string[] = [];\n\n\t\tfor (let index = 0; index < args.length; index++) {\n\t\t\tconst arg = args[index];\n\t\t\tif (arg === \"-f\" || arg === \"--force\") {\n\t\t\t\tforce = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg === \"--id\") {\n\t\t\t\tif (index + 1 >= args.length) {\n\t\t\t\t\tthis.showWarning('Missing value for \"--id\".');\n\t\t\t\t\tthis.showWarning('Usage: /cycle-plan [--id <cycle-id>] [--force] \"goal one\" \"goal two\"');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcycleId = args[index + 1];\n\t\t\t\tindex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (arg.startsWith(\"-\")) {\n\t\t\t\tthis.showWarning(`Unknown option for /cycle-plan: ${arg}`);\n\t\t\t\tthis.showWarning('Usage: /cycle-plan [--id <cycle-id>] [--force] \"goal one\" \"goal two\"');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgoals.push(arg);\n\t\t}\n\n\t\tif (goals.length === 0) {\n\t\t\tthis.showWarning('Usage: /cycle-plan [--id <cycle-id>] [--force] \"goal one\" \"goal two\"');\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst planned = planIosmCycle({\n\t\t\t\tcwd: this.sessionManager.getCwd(),\n\t\t\t\tgoals,\n\t\t\t\tforce,\n\t\t\t\tcycleId,\n\t\t\t});\n\t\t\tthis.showCommandTextBlock(\n\t\t\t\t\"IOSM Cycle Plan\",\n\t\t\t\t[\n\t\t\t\t\t`Planned IOSM cycle ${planned.cycleId}`,\n\t\t\t\t\t` ${planned.cycleDir}`,\n\t\t\t\t\t` baseline: ${planned.baselineReportPath}`,\n\t\t\t\t\t` hypotheses: ${planned.hypothesesPath}`,\n\t\t\t\t\t` report: ${planned.reportPath}`,\n\t\t\t\t].join(\"\\n\"),\n\t\t\t);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to plan IOSM cycle: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate formatIosmCycleSelectionOption(index: number, cycle: ReturnType<typeof listIosmCycles>[number]): string {\n\t\tconst goals = cycle.goals.length > 0 ? cycle.goals.join(\"; \") : \"no goals recorded\";\n\t\treturn `${index}. ${cycle.cycleId} · ${cycle.status} · ${cycle.decision} · ${goals}`;\n\t}\n\n\tprivate async selectIosmCycleId(commandName: \"/cycle-report\" | \"/cycle-status\"): Promise<string | undefined> {\n\t\tconst cycles = listIosmCycles(this.sessionManager.getCwd());\n\t\tif (cycles.length === 0) {\n\t\t\tthis.showStatus(\"No IOSM cycles found.\");\n\t\t\treturn undefined;\n\t\t}\n\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\tif (!canShowInteractiveSelector) {\n\t\t\treturn cycles[0]?.cycleId;\n\t\t}\n\t\tconst options = cycles.map((cycle, index) => this.formatIosmCycleSelectionOption(index + 1, cycle));\n\t\tconst selected = await this.showExtensionSelector(`${commandName}: select cycle`, options);\n\t\tif (!selected) {\n\t\t\tthis.showStatus(`${commandName} cancelled.`);\n\t\t\treturn undefined;\n\t\t}\n\t\tconst selectedIndex = options.indexOf(selected);\n\t\tconst cycle = selectedIndex >= 0 ? cycles[selectedIndex] : undefined;\n\t\tif (!cycle) {\n\t\t\tthis.showWarning(\"Selected cycle is no longer available.\");\n\t\t\treturn undefined;\n\t\t}\n\t\treturn cycle.cycleId;\n\t}\n\n\tprivate async handleIosmCycleReportSlashCommand(text: string): Promise<void> {\n\t\tif (!this.requireIosmMode(\"/cycle-report\")) return;\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.some((arg) => arg.startsWith(\"-\"))) {\n\t\t\tthis.showWarning(\"Usage: /cycle-report [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\t\tif (args.length > 1) {\n\t\t\tthis.showWarning(\"Usage: /cycle-report [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tlet cycleId: string | undefined = args[0];\n\t\t\tif (!cycleId) {\n\t\t\t\tcycleId = await this.selectIosmCycleId(\"/cycle-report\");\n\t\t\t\tif (!cycleId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst report = readIosmCycleReport(this.sessionManager.getCwd(), cycleId);\n\t\t\tthis.showCommandJsonBlock(\"IOSM Cycle Report\", report);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to read IOSM cycle report: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleIosmCycleStatusSlashCommand(text: string): Promise<void> {\n\t\tif (!this.requireIosmMode(\"/cycle-status\")) return;\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.some((arg) => arg.startsWith(\"-\"))) {\n\t\t\tthis.showWarning(\"Usage: /cycle-status [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\t\tif (args.length > 1) {\n\t\t\tthis.showWarning(\"Usage: /cycle-status [cycle-id]\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tlet cycleId: string | undefined = args[0];\n\t\t\tif (!cycleId) {\n\t\t\t\tcycleId = await this.selectIosmCycleId(\"/cycle-status\");\n\t\t\t\tif (!cycleId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst status = inspectIosmCycle(this.sessionManager.getCwd(), cycleId);\n\t\t\tconst guardrails =\n\t\t\t\tstatus.guardrailsPass === null ? \"pending\" : status.guardrailsPass ? \"pass\" : \"fail\";\n\t\t\tconst lines: string[] = [\n\t\t\t\t`Cycle: ${status.cycleId}`,\n\t\t\t\t`Status: ${status.status}`,\n\t\t\t\t`Decision: ${status.decision}`,\n\t\t\t\t`Report: ${status.reportPath}`,\n\t\t\t\t`Capacity: ${status.capacityPass ? \"pass\" : \"fail\"}`,\n\t\t\t\t`Guardrails: ${guardrails}`,\n\t\t\t\t`Report Complete: ${status.reportComplete ? \"yes\" : \"no\"}`,\n\t\t\t\t`Learning Closed: ${status.learningClosed ? \"yes\" : \"no\"}`,\n\t\t\t\t`History Recorded: ${status.historyRecorded ? \"yes\" : \"no\"}`,\n\t\t\t];\n\n\t\t\tif (status.blockingIssues.length > 0) {\n\t\t\t\tlines.push(\"\", \"Blocking Issues:\");\n\t\t\t\tfor (const issue of status.blockingIssues) {\n\t\t\t\t\tlines.push(` - ${issue}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (status.warnings.length > 0) {\n\t\t\t\tlines.push(\"\", \"Warnings:\");\n\t\t\t\tfor (const warning of status.warnings) {\n\t\t\t\t\tlines.push(` - ${warning}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.showCommandTextBlock(\"IOSM Cycle Status\", lines.join(\"\\n\"));\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to inspect IOSM cycle: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleReloadCommand(): Promise<void> {\n\t\tif (this.session.isStreaming) {\n\t\t\tthis.showWarning(\"Wait for the current response to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.session.isCompacting) {\n\t\t\tthis.showWarning(\"Wait for compaction to finish before reloading.\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.resetExtensionUI();\n\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Reloading extensions, skills, prompts, themes...\", {\n\t\t\tcancellable: false,\n\t\t});\n\t\tconst previousEditor = this.editor;\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst dismissLoader = (editor: Component) => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(editor);\n\t\t\tthis.ui.setFocus(editor);\n\t\t\tthis.ui.requestRender();\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.session.reload();\n\t\t\tif (this.mcpRuntime) {\n\t\t\t\tawait this.mcpRuntime.refresh();\n\t\t\t\tthis.syncMcpToolsWithSession();\n\t\t\t\tconst mcpErrors = this.mcpRuntime.getErrors();\n\t\t\t\tif (mcpErrors.length > 0) {\n\t\t\t\t\tthis.showWarning(\n\t\t\t\t\t\t`MCP config warning: ${mcpErrors[0]}${mcpErrors.length > 1 ? ` (+${mcpErrors.length - 1} more)` : \"\"}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetRegisteredThemes(this.session.resourceLoader.getThemes().themes);\n\t\t\tthis.hideThinkingBlock = this.settingsManager.getHideThinkingBlock();\n\t\t\tconst themeName = this.settingsManager.getTheme();\n\t\t\tconst themeResult = themeName ? setTheme(themeName, true) : { success: true };\n\t\t\tif (!themeResult.success) {\n\t\t\t\tthis.showError(`Failed to load theme \"${themeName}\": ${themeResult.error}\\nFell back to dark theme.`);\n\t\t\t}\n\t\t\tconst editorPaddingX = this.settingsManager.getEditorPaddingX();\n\t\t\tconst autocompleteMaxVisible = this.settingsManager.getAutocompleteMaxVisible();\n\t\t\tthis.defaultEditor.setPaddingX(editorPaddingX);\n\t\t\tthis.defaultEditor.setAutocompleteMaxVisible(autocompleteMaxVisible);\n\t\t\tif (this.editor !== this.defaultEditor) {\n\t\t\t\tthis.editor.setPaddingX?.(editorPaddingX);\n\t\t\t\tthis.editor.setAutocompleteMaxVisible?.(autocompleteMaxVisible);\n\t\t\t}\n\t\t\tthis.ui.setShowHardwareCursor(this.settingsManager.getShowHardwareCursor());\n\t\t\tthis.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());\n\t\t\tthis.setupAutocomplete(this.fdPath);\n\t\t\tconst runner = this.session.extensionRunner;\n\t\t\tif (runner) {\n\t\t\t\tthis.setupExtensionShortcuts(runner);\n\t\t\t}\n\t\t\tthis.rebuildChatFromMessages();\n\t\t\tdismissLoader(this.editor as Component);\n\t\t\tthis.showLoadedResources({\n\t\t\t\textensionPaths: runner?.getExtensionPaths() ?? [],\n\t\t\t\tforce: false,\n\t\t\t\tshowDiagnosticsWhenQuiet: true,\n\t\t\t});\n\t\t\tconst modelsJsonError = this.session.modelRegistry.getError();\n\t\t\tif (modelsJsonError) {\n\t\t\t\tthis.showError(`models.json error: ${modelsJsonError}`);\n\t\t\t}\n\t\t\tthis.showStatus(\"Reloaded extensions, skills, prompts, themes\");\n\t\t} catch (error) {\n\t\t\tdismissLoader(previousEditor as Component);\n\t\t\tthis.showError(`Reload failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t}\n\n\tprivate async handleExportCommand(text: string): Promise<void> {\n\t\tconst args = this.parseSlashArgs(text).slice(1);\n\t\tif (args.length > 1) {\n\t\t\tthis.showWarning(\"Usage: /export [output-path]\");\n\t\t\treturn;\n\t\t}\n\t\tlet outputPath: string | undefined = args[0];\n\t\tconst canShowInteractiveSelector = !!this.ui && !!this.editorContainer;\n\t\tif (!outputPath && canShowInteractiveSelector) {\n\t\t\tconst enteredPath = await this.showExtensionInput(\n\t\t\t\t\"/export: output path (optional)\",\n\t\t\t\t\"Leave empty for default export file name\",\n\t\t\t);\n\t\t\tif (enteredPath === undefined) {\n\t\t\t\tthis.showStatus(\"Export cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst normalized = enteredPath.trim();\n\t\t\toutputPath = normalized.length > 0 ? normalized : undefined;\n\t\t}\n\n\t\tif (outputPath && fs.existsSync(outputPath) && canShowInteractiveSelector) {\n\t\t\tconst overwrite = await this.showExtensionConfirm(\"Overwrite existing export file?\", outputPath);\n\t\t\tif (!overwrite) {\n\t\t\t\tthis.showStatus(\"Export cancelled\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst filePath = await this.session.exportToHtml(outputPath);\n\t\t\tthis.showStatus(`Session exported to: ${filePath}`);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\t}\n\n\tprivate async handleShareCommand(): Promise<void> {\n\t\t// Check if gh is available and logged in\n\t\ttry {\n\t\t\tconst authResult = spawnSync(\"gh\", [\"auth\", \"status\"], { encoding: \"utf-8\" });\n\t\t\tif (authResult.status !== 0) {\n\t\t\t\tthis.showError(\"GitHub CLI is not logged in. Run 'gh auth login' first.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\tthis.showError(\"GitHub CLI (gh) is not installed. Install it from https://cli.github.com/\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Export to a temp file\n\t\tconst tmpFile = path.join(os.tmpdir(), \"session.html\");\n\t\ttry {\n\t\t\tawait this.session.exportToHtml(tmpFile);\n\t\t} catch (error: unknown) {\n\t\t\tthis.showError(`Failed to export session: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\treturn;\n\t\t}\n\n\t\t// Show cancellable loader, replacing the editor\n\t\tconst loader = new BorderedLoader(this.ui, theme, \"Creating gist...\");\n\t\tthis.editorContainer.clear();\n\t\tthis.editorContainer.addChild(loader);\n\t\tthis.ui.setFocus(loader);\n\t\tthis.ui.requestRender();\n\n\t\tconst restoreEditor = () => {\n\t\t\tloader.dispose();\n\t\t\tthis.editorContainer.clear();\n\t\t\tthis.editorContainer.addChild(this.editor);\n\t\t\tthis.ui.setFocus(this.editor);\n\t\t\ttry {\n\t\t\t\tfs.unlinkSync(tmpFile);\n\t\t\t} catch {\n\t\t\t\t// Ignore cleanup errors\n\t\t\t}\n\t\t};\n\n\t\t// Create a secret gist asynchronously\n\t\tlet proc: ReturnType<typeof spawn> | null = null;\n\n\t\tloader.onAbort = () => {\n\t\t\tproc?.kill();\n\t\t\trestoreEditor();\n\t\t\tthis.showStatus(\"Share cancelled\");\n\t\t};\n\n\t\ttry {\n\t\t\tconst result = await new Promise<{ stdout: string; stderr: string; code: number | null }>((resolve) => {\n\t\t\t\tproc = spawn(\"gh\", [\"gist\", \"create\", \"--public=false\", tmpFile]);\n\t\t\t\tlet stdout = \"\";\n\t\t\t\tlet stderr = \"\";\n\t\t\t\tproc.stdout?.on(\"data\", (data) => {\n\t\t\t\t\tstdout += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.stderr?.on(\"data\", (data) => {\n\t\t\t\t\tstderr += data.toString();\n\t\t\t\t});\n\t\t\t\tproc.on(\"close\", (code) => resolve({ stdout, stderr, code }));\n\t\t\t});\n\n\t\t\tif (loader.signal.aborted) return;\n\n\t\t\trestoreEditor();\n\n\t\t\tif (result.code !== 0) {\n\t\t\t\tconst errorMsg = result.stderr?.trim() || \"Unknown error\";\n\t\t\t\tthis.showError(`Failed to create gist: ${errorMsg}`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Extract gist ID from the URL returned by gh\n\t\t\t// gh returns something like: https://gist.github.com/username/GIST_ID\n\t\t\tconst gistUrl = result.stdout?.trim();\n\t\t\tconst gistId = gistUrl?.split(\"/\").pop();\n\t\t\tif (!gistId) {\n\t\t\t\tthis.showError(\"Failed to parse gist ID from gh output\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Create the preview URL\n\t\t\tconst previewUrl = getShareViewerUrl(gistId);\n\t\t\tthis.showStatus(`Share URL: ${previewUrl}\\nGist: ${gistUrl}`);\n\t\t} catch (error: unknown) {\n\t\t\tif (!loader.signal.aborted) {\n\t\t\t\trestoreEditor();\n\t\t\t\tthis.showError(`Failed to create gist: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleCopyCommand(): void {\n\t\tconst text = this.session.getLastAssistantText();\n\t\tif (!text) {\n\t\t\tthis.showError(\"No agent messages to copy yet.\");\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tcopyToClipboard(text);\n\t\t\tthis.showStatus(\"Copied last agent message to clipboard\");\n\t\t} catch (error) {\n\t\t\tthis.showError(error instanceof Error ? error.message : String(error));\n\t\t}\n\t}\n\n\tprivate handleNameCommand(text: string): void {\n\t\tconst name = text.replace(/^\\/name\\s*/, \"\").trim();\n\t\tif (!name) {\n\t\t\tconst currentName = this.sessionManager.getSessionName();\n\t\t\tif (currentName) {\n\t\t\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\t\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name: ${currentName}`), 1, 0));\n\t\t\t} else {\n\t\t\t\tthis.showWarning(\"Usage: /name <name>\");\n\t\t\t}\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.sessionManager.appendSessionInfo(name);\n\t\tthis.updateTerminalTitle();\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(theme.fg(\"dim\", `Session name set: ${name}`), 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleSessionCommand(): void {\n\t\tconst stats = this.session.getSessionStats();\n\t\tconst sessionName = this.sessionManager.getSessionName();\n\n\t\tlet info = `${theme.bold(\"Session Info\")}\\n\\n`;\n\t\tif (sessionName) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Name:\")} ${sessionName}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"File:\")} ${stats.sessionFile ?? \"In-memory\"}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"ID:\")} ${stats.sessionId}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Messages\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"User:\")} ${stats.userMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Assistant:\")} ${stats.assistantMessages}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Calls:\")} ${stats.toolCalls}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Tool Results:\")} ${stats.toolResults}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.totalMessages}\\n\\n`;\n\t\tinfo += `${theme.bold(\"Tokens\")}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Input:\")} ${stats.tokens.input.toLocaleString()}\\n`;\n\t\tinfo += `${theme.fg(\"dim\", \"Output:\")} ${stats.tokens.output.toLocaleString()}\\n`;\n\t\tif (stats.tokens.cacheRead > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Read:\")} ${stats.tokens.cacheRead.toLocaleString()}\\n`;\n\t\t}\n\t\tif (stats.tokens.cacheWrite > 0) {\n\t\t\tinfo += `${theme.fg(\"dim\", \"Cache Write:\")} ${stats.tokens.cacheWrite.toLocaleString()}\\n`;\n\t\t}\n\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.tokens.total.toLocaleString()}\\n`;\n\n\t\tif (stats.cost > 0) {\n\t\t\tinfo += `\\n${theme.bold(\"Cost\")}\\n`;\n\t\t\tinfo += `${theme.fg(\"dim\", \"Total:\")} ${stats.cost.toFixed(4)}`;\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(info, 1, 0));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleChangelogCommand(): void {\n\t\tconst changelogPath = getChangelogPath();\n\t\tconst allEntries = parseChangelog(changelogPath);\n\n\t\tconst changelogMarkdown =\n\t\t\tallEntries.length > 0\n\t\t\t\t? allEntries\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.map((e) => e.content)\n\t\t\t\t\t.join(\"\\n\\n\")\n\t\t\t\t: \"No changelog entries found.\";\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"What's New\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(changelogMarkdown, 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\t/**\n\t * Capitalize keybinding for display (e.g., \"ctrl+c\" -> \"Ctrl+C\").\n\t */\n\tprivate capitalizeKey(key: string): string {\n\t\treturn key\n\t\t\t.split(\"/\")\n\t\t\t.map((k) =>\n\t\t\t\tk\n\t\t\t\t\t.split(\"+\")\n\t\t\t\t\t.map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n\t\t\t\t\t.join(\"+\"),\n\t\t\t)\n\t\t\t.join(\"/\");\n\t}\n\n\t/**\n\t * Get capitalized display string for an app keybinding action.\n\t */\n\tprivate getAppKeyDisplay(action: AppAction): string {\n\t\treturn this.capitalizeKey(appKey(this.keybindings, action));\n\t}\n\n\t/**\n\t * Get capitalized display string for an editor keybinding action.\n\t */\n\tprivate getEditorKeyDisplay(action: EditorAction): string {\n\t\treturn this.capitalizeKey(editorKey(action));\n\t}\n\n\tprivate handleHotkeysCommand(): void {\n\t\t// Navigation keybindings\n\t\tconst cursorWordLeft = this.getEditorKeyDisplay(\"cursorWordLeft\");\n\t\tconst cursorWordRight = this.getEditorKeyDisplay(\"cursorWordRight\");\n\t\tconst cursorLineStart = this.getEditorKeyDisplay(\"cursorLineStart\");\n\t\tconst cursorLineEnd = this.getEditorKeyDisplay(\"cursorLineEnd\");\n\t\tconst jumpForward = this.getEditorKeyDisplay(\"jumpForward\");\n\t\tconst jumpBackward = this.getEditorKeyDisplay(\"jumpBackward\");\n\t\tconst pageUp = this.getEditorKeyDisplay(\"pageUp\");\n\t\tconst pageDown = this.getEditorKeyDisplay(\"pageDown\");\n\n\t\t// Editing keybindings\n\t\tconst submit = this.getEditorKeyDisplay(\"submit\");\n\t\tconst newLine = this.getEditorKeyDisplay(\"newLine\");\n\t\tconst deleteWordBackward = this.getEditorKeyDisplay(\"deleteWordBackward\");\n\t\tconst deleteWordForward = this.getEditorKeyDisplay(\"deleteWordForward\");\n\t\tconst deleteToLineStart = this.getEditorKeyDisplay(\"deleteToLineStart\");\n\t\tconst deleteToLineEnd = this.getEditorKeyDisplay(\"deleteToLineEnd\");\n\t\tconst yank = this.getEditorKeyDisplay(\"yank\");\n\t\tconst yankPop = this.getEditorKeyDisplay(\"yankPop\");\n\t\tconst undo = this.getEditorKeyDisplay(\"undo\");\n\t\tconst tab = this.getEditorKeyDisplay(\"tab\");\n\n\t\t// App keybindings\n\t\tconst interrupt = this.getAppKeyDisplay(\"interrupt\");\n\t\tconst clear = this.getAppKeyDisplay(\"clear\");\n\t\tconst exit = this.getAppKeyDisplay(\"exit\");\n\t\tconst suspend = this.getAppKeyDisplay(\"suspend\");\n\t\tconst cycleProfile = this.getAppKeyDisplay(\"cycleProfile\");\n\t\tconst cycleThinkingLevel = this.getAppKeyDisplay(\"cycleThinkingLevel\");\n\t\tconst cycleModelForward = this.getAppKeyDisplay(\"cycleModelForward\");\n\t\tconst selectModel = this.getAppKeyDisplay(\"selectModel\");\n\t\tconst expandTools = this.getAppKeyDisplay(\"expandTools\");\n\t\tconst toggleThinking = this.getAppKeyDisplay(\"toggleThinking\");\n\t\tconst externalEditor = this.getAppKeyDisplay(\"externalEditor\");\n\t\tconst steer = this.getAppKeyDisplay(\"steer\");\n\t\tconst followUp = this.getAppKeyDisplay(\"followUp\");\n\t\tconst dequeue = this.getAppKeyDisplay(\"dequeue\");\n\n\t\tlet hotkeys = `\n**Navigation**\n| Key | Action |\n|-----|--------|\n| \\`Arrow keys\\` | Move cursor / browse history (Up when empty) |\n| \\`${cursorWordLeft}\\` / \\`${cursorWordRight}\\` | Move by word |\n| \\`${cursorLineStart}\\` | Start of line |\n| \\`${cursorLineEnd}\\` | End of line |\n| \\`${jumpForward}\\` | Jump forward to character |\n| \\`${jumpBackward}\\` | Jump backward to character |\n| \\`${pageUp}\\` / \\`${pageDown}\\` | Scroll by page |\n\n**Editing**\n| Key | Action |\n|-----|--------|\n| \\`${submit}\\` | Send message |\n| \\`${newLine}\\` | New line${process.platform === \"win32\" ? \" (Ctrl+Enter on Windows Terminal)\" : \"\"} |\n| \\`${deleteWordBackward}\\` | Delete word backwards |\n| \\`${deleteWordForward}\\` | Delete word forwards |\n| \\`${deleteToLineStart}\\` | Delete to start of line |\n| \\`${deleteToLineEnd}\\` | Delete to end of line |\n| \\`${yank}\\` | Paste the most-recently-deleted text |\n| \\`${yankPop}\\` | Cycle through the deleted text after pasting |\n| \\`${undo}\\` | Undo |\n\n**Other**\n| Key | Action |\n|-----|--------|\n| \\`${tab}\\` | Path completion / accept autocomplete |\n| \\`${interrupt}\\` | Cancel autocomplete / abort streaming |\n| \\`${clear}\\` | Clear editor (first) / exit (second) |\n| \\`${exit}\\` | Exit (when editor is empty) |\n| \\`${suspend}\\` | Suspend to background |\n| \\`${cycleProfile}\\` | Cycle agent profile |\n| \\`${cycleThinkingLevel}\\` | Cycle thinking level |\n| \\`${cycleModelForward}\\` | Cycle models |\n| \\`${selectModel}\\` | Open model selector |\n| \\`${expandTools}\\` | Toggle tool output expansion |\n| \\`${toggleThinking}\\` | Toggle thinking block visibility |\n| \\`${externalEditor}\\` | Edit message in external editor |\n| \\`${steer}\\` | Queue steer message |\n| \\`${followUp}\\` | Queue follow-up message |\n| \\`${dequeue}\\` | Restore queued messages |\n| \\`Ctrl+V\\` | Paste image from clipboard |\n| \\`/\\` | Slash commands |\n| \\`!\\` | Run bash command |\n| \\`!!\\` | Run bash command (excluded from context) |\n`;\n\n\t\t// Add extension-registered shortcuts\n\t\tconst extensionRunner = this.session.extensionRunner;\n\t\tif (extensionRunner) {\n\t\t\tconst shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());\n\t\t\tif (shortcuts.size > 0) {\n\t\t\t\thotkeys += `\n**Extensions**\n| Key | Action |\n|-----|--------|\n`;\n\t\t\t\tfor (const [key, shortcut] of shortcuts) {\n\t\t\t\t\tconst description = shortcut.description ?? shortcut.extensionPath;\n\t\t\t\t\tconst keyDisplay = key.replace(/\\b\\w/g, (c) => c.toUpperCase());\n\t\t\t\t\thotkeys += `| \\`${keyDisplay}\\` | ${description} |\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.chatContainer.addChild(new Text(theme.bold(theme.fg(\"accent\", \"Keyboard Shortcuts\")), 1, 0));\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));\n\t\tthis.chatContainer.addChild(new DynamicBorder());\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleClearCommand(): Promise<void> {\n\t\tthis.contractService.clear(\"session\");\n\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// New session via session (emits extension session events)\n\t\tawait this.session.newSession();\n\n\t\t// Clear UI state\n\t\tthis.chatContainer.clear();\n\t\tthis.pendingMessagesContainer.clear();\n\t\tthis.compactionQueuedMessages = [];\n\t\tthis.streamingComponent = undefined;\n\t\tthis.streamingMessage = undefined;\n\t\tthis.pendingTools.clear();\n\t\tthis.syncRuntimePromptSuffix();\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new Text(`${theme.fg(\"accent\", \"✓ New session started\")}`, 1, 1));\n\t\tthis.refreshBuiltInHeader();\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDebugCommand(): void {\n\t\tconst width = this.ui.terminal.columns;\n\t\tconst height = this.ui.terminal.rows;\n\t\tconst allLines = this.ui.render(width);\n\n\t\tconst debugLogPath = getDebugLogPath();\n\t\tconst debugData = [\n\t\t\t`Debug output at ${new Date().toISOString()}`,\n\t\t\t`Terminal: ${width}x${height}`,\n\t\t\t`Total lines: ${allLines.length}`,\n\t\t\t\"\",\n\t\t\t\"=== All rendered lines with visible widths ===\",\n\t\t\t...allLines.map((line, idx) => {\n\t\t\t\tconst vw = visibleWidth(line);\n\t\t\t\tconst escaped = JSON.stringify(line);\n\t\t\t\treturn `[${idx}] (w=${vw}) ${escaped}`;\n\t\t\t}),\n\t\t\t\"\",\n\t\t\t\"=== Agent messages (JSONL) ===\",\n\t\t\t...this.session.messages.map((msg) => JSON.stringify(msg)),\n\t\t\t\"\",\n\t\t].join(\"\\n\");\n\n\t\tfs.mkdirSync(path.dirname(debugLogPath), { recursive: true });\n\t\tfs.writeFileSync(debugLogPath, debugData);\n\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(\n\t\t\tnew Text(`${theme.fg(\"accent\", \"✓ Debug log written\")}\\n${theme.fg(\"muted\", debugLogPath)}`, 1, 1),\n\t\t);\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleArminSaysHi(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new ArminComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate handleDaxnuts(): void {\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tthis.chatContainer.addChild(new DaxnutsComponent(this.ui));\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate checkDaxnutsEasterEgg(model: { provider: string; id: string }): void {\n\t\tif (model.provider === \"opencode\" && model.id.toLowerCase().includes(\"kimi-k2.5\")) {\n\t\t\tthis.handleDaxnuts();\n\t\t}\n\t}\n\n\tprivate async handleBashCommand(command: string, excludeFromContext = false): Promise<void> {\n\t\tconst extensionRunner = this.session.extensionRunner;\n\n\t\t// Emit user_bash event to let extensions intercept\n\t\tconst eventResult = extensionRunner\n\t\t\t? await extensionRunner.emitUserBash({\n\t\t\t\ttype: \"user_bash\",\n\t\t\t\tcommand,\n\t\t\t\texcludeFromContext,\n\t\t\t\tcwd: process.cwd(),\n\t\t\t})\n\t\t\t: undefined;\n\n\t\t// If extension returned a full result, use it directly\n\t\tif (eventResult?.result) {\n\t\t\tconst result = eventResult.result;\n\n\t\t\t// Create UI component for display\n\t\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\t\t\tif (this.session.isStreaming) {\n\t\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t\t} else {\n\t\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t\t}\n\n\t\t\t// Show output and complete\n\t\t\tif (result.output) {\n\t\t\t\tthis.bashComponent.appendOutput(result.output);\n\t\t\t}\n\t\t\tthis.bashComponent.setComplete(\n\t\t\t\tresult.exitCode,\n\t\t\t\tresult.cancelled,\n\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\tresult.fullOutputPath,\n\t\t\t);\n\n\t\t\t// Record the result in session\n\t\t\tthis.session.recordBashResult(command, result, { excludeFromContext });\n\t\t\tthis.bashComponent = undefined;\n\t\t\tthis.ui.requestRender();\n\t\t\treturn;\n\t\t}\n\n\t\t// Normal execution path (possibly with custom operations)\n\t\tconst isDeferred = this.session.isStreaming;\n\t\tthis.bashComponent = new BashExecutionComponent(command, this.ui, excludeFromContext);\n\n\t\tif (isDeferred) {\n\t\t\t// Show in pending area when agent is streaming\n\t\t\tthis.pendingMessagesContainer.addChild(this.bashComponent);\n\t\t\tthis.pendingBashComponents.push(this.bashComponent);\n\t\t} else {\n\t\t\t// Show in chat immediately when agent is idle\n\t\t\tthis.chatContainer.addChild(this.bashComponent);\n\t\t}\n\t\tthis.ui.requestRender();\n\n\t\ttry {\n\t\t\tconst result = await this.session.executeBash(\n\t\t\t\tcommand,\n\t\t\t\t(chunk) => {\n\t\t\t\t\tif (this.bashComponent) {\n\t\t\t\t\t\tthis.bashComponent.appendOutput(chunk);\n\t\t\t\t\t\tthis.ui.requestRender();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ excludeFromContext, operations: eventResult?.operations },\n\t\t\t);\n\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(\n\t\t\t\t\tresult.exitCode,\n\t\t\t\t\tresult.cancelled,\n\t\t\t\t\tresult.truncated ? ({ truncated: true, content: result.output } as TruncationResult) : undefined,\n\t\t\t\t\tresult.fullOutputPath,\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (this.bashComponent) {\n\t\t\t\tthis.bashComponent.setComplete(undefined, false);\n\t\t\t}\n\t\t\tthis.showError(`Bash command failed: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n\t\t}\n\n\t\tthis.bashComponent = undefined;\n\t\tthis.ui.requestRender();\n\t}\n\n\tprivate async handleCompactCommand(customInstructions?: string): Promise<void> {\n\t\tconst entries = this.sessionManager.getEntries();\n\t\tconst messageCount = entries.filter((e) => e.type === \"message\").length;\n\n\t\tif (messageCount < 2) {\n\t\t\tthis.showWarning(\"Nothing to compact (no messages yet)\");\n\t\t\treturn;\n\t\t}\n\n\t\tawait this.executeCompaction(customInstructions, false);\n\t}\n\n\tprivate async executeCompaction(customInstructions?: string, isAuto = false): Promise<CompactionResult | undefined> {\n\t\t// Stop loading animation\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.statusContainer.clear();\n\n\t\t// Set up escape handler during compaction\n\t\tconst originalOnEscape = this.defaultEditor.onEscape;\n\t\tthis.defaultEditor.onEscape = () => {\n\t\t\tvoid this.interruptCurrentWork();\n\t\t};\n\n\t\t// Show compacting status\n\t\tthis.chatContainer.addChild(new Spacer(1));\n\t\tconst cancelHint = `(${appKey(this.keybindings, \"interrupt\")} to cancel)`;\n\t\tconst label = isAuto ? `Auto-compacting context... ${cancelHint}` : `Compacting context... ${cancelHint}`;\n\t\tconst compactingLoader = new Loader(\n\t\t\tthis.ui,\n\t\t\t(spinner) => theme.fg(\"accent\", spinner),\n\t\t\t(text) => theme.fg(\"muted\", text),\n\t\t\tlabel,\n\t\t);\n\t\tthis.statusContainer.addChild(compactingLoader);\n\t\tthis.ui.requestRender();\n\n\t\tlet result: CompactionResult | undefined;\n\n\t\ttry {\n\t\t\tresult = await this.session.compact(customInstructions);\n\n\t\t\t// Rebuild UI\n\t\t\tthis.rebuildChatFromMessages();\n\n\t\t\t// Add compaction component at bottom so user sees it without scrolling\n\t\t\tconst msg = createCompactionSummaryMessage(result.summary, result.tokensBefore, new Date().toISOString());\n\t\t\tthis.addMessageToChat(msg);\n\n\t\t\tthis.footer.invalidate();\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tif (message === \"Compaction cancelled\" || (error instanceof Error && error.name === \"AbortError\")) {\n\t\t\t\tthis.showError(\"Compaction cancelled\");\n\t\t\t} else {\n\t\t\t\tthis.showError(`Compaction failed: ${message}`);\n\t\t\t}\n\t\t} finally {\n\t\t\tcompactingLoader.stop();\n\t\t\tthis.statusContainer.clear();\n\t\t\tthis.defaultEditor.onEscape = originalOnEscape;\n\t\t}\n\t\tvoid this.flushCompactionQueue({ willRetry: false });\n\t\treturn result;\n\t}\n\n\tstop(): void {\n\t\tif (this.loadingAnimation) {\n\t\t\tthis.loadingAnimation.stop();\n\t\t\tthis.loadingAnimation = undefined;\n\t\t}\n\t\tthis.clearExtensionTerminalInputListeners();\n\t\tthis.footer.dispose();\n\t\tthis.footerDataProvider.dispose();\n\t\tif (this.unsubscribe) {\n\t\t\tthis.unsubscribe();\n\t\t}\n\t\tif (this.isInitialized) {\n\t\t\tthis.ui.stop();\n\t\t\tthis.isInitialized = false;\n\t\t}\n\t}\n}\n"]}