mastracode 0.22.3 → 0.23.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 (181) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/HarnessCompat.d.ts +2 -2
  3. package/dist/HarnessCompat.d.ts.map +1 -1
  4. package/dist/agents/mastracode-gateway.d.ts +58 -0
  5. package/dist/agents/mastracode-gateway.d.ts.map +1 -0
  6. package/dist/agents/model.d.ts +26 -28
  7. package/dist/agents/model.d.ts.map +1 -1
  8. package/dist/agents/{subagents/execute.d.ts → modes/build.d.ts} +3 -3
  9. package/dist/agents/modes/build.d.ts.map +1 -0
  10. package/dist/agents/{subagents → modes}/explore.d.ts +2 -2
  11. package/dist/agents/modes/explore.d.ts.map +1 -0
  12. package/dist/agents/modes/plan.d.ts +6 -0
  13. package/dist/agents/modes/plan.d.ts.map +1 -0
  14. package/dist/{chunk-EATS4KOR.cjs → chunk-3CO7PY6M.cjs} +1094 -239
  15. package/dist/chunk-3CO7PY6M.cjs.map +1 -0
  16. package/dist/{chunk-DJEQBK7L.cjs → chunk-CBPEMMRV.cjs} +1659 -2010
  17. package/dist/chunk-CBPEMMRV.cjs.map +1 -0
  18. package/dist/{chunk-W7Y7QIJA.js → chunk-FXYM4OEI.js} +14 -805
  19. package/dist/chunk-FXYM4OEI.js.map +1 -0
  20. package/dist/{chunk-OXYE6SUY.js → chunk-GKGPZBID.js} +836 -1187
  21. package/dist/chunk-GKGPZBID.js.map +1 -0
  22. package/dist/{chunk-FDDVVRPH.js → chunk-RDIIIT54.js} +1076 -221
  23. package/dist/chunk-RDIIIT54.js.map +1 -0
  24. package/dist/{chunk-NKTZDFIU.cjs → chunk-XPPJHUAD.cjs} +12 -809
  25. package/dist/chunk-XPPJHUAD.cjs.map +1 -0
  26. package/dist/cli.cjs +18 -18
  27. package/dist/cli.js +3 -3
  28. package/dist/index.cjs +3 -3
  29. package/dist/index.d.ts +4 -5
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/mcp/manager.d.ts.map +1 -1
  33. package/dist/onboarding/onboarding-inline.d.ts +2 -2
  34. package/dist/onboarding/onboarding-inline.d.ts.map +1 -1
  35. package/dist/onboarding/settings.d.ts.map +1 -1
  36. package/dist/providers/claude-max.d.ts.map +1 -1
  37. package/dist/tui/chat-boundary-reconciliation.d.ts +18 -1
  38. package/dist/tui/chat-boundary-reconciliation.d.ts.map +1 -1
  39. package/dist/tui/command-dispatch.d.ts.map +1 -1
  40. package/dist/tui/commands/browser.d.ts.map +1 -1
  41. package/dist/tui/commands/goal.d.ts.map +1 -1
  42. package/dist/tui/commands/mode.d.ts.map +1 -1
  43. package/dist/tui/commands/new.d.ts.map +1 -1
  44. package/dist/tui/commands/settings.d.ts.map +1 -1
  45. package/dist/tui/commands/skills.d.ts.map +1 -1
  46. package/dist/tui/components/api-key-dialog.d.ts +2 -2
  47. package/dist/tui/components/api-key-dialog.d.ts.map +1 -1
  48. package/dist/tui/components/ask-question-dialog.d.ts +2 -2
  49. package/dist/tui/components/ask-question-dialog.d.ts.map +1 -1
  50. package/dist/tui/components/ask-question-inline.d.ts +4 -2
  51. package/dist/tui/components/ask-question-inline.d.ts.map +1 -1
  52. package/dist/tui/components/assistant-message.d.ts +2 -2
  53. package/dist/tui/components/assistant-message.d.ts.map +1 -1
  54. package/dist/tui/components/chat-boundary-spacer.d.ts +9 -9
  55. package/dist/tui/components/chat-boundary-spacer.d.ts.map +1 -1
  56. package/dist/tui/components/chat-spacing.d.ts +1 -1
  57. package/dist/tui/components/chat-spacing.d.ts.map +1 -1
  58. package/dist/tui/components/collapsible.d.ts +2 -2
  59. package/dist/tui/components/collapsible.d.ts.map +1 -1
  60. package/dist/tui/components/custom-editor.d.ts +2 -2
  61. package/dist/tui/components/custom-editor.d.ts.map +1 -1
  62. package/dist/tui/components/diff-output.d.ts +3 -1
  63. package/dist/tui/components/diff-output.d.ts.map +1 -1
  64. package/dist/tui/components/error-display.d.ts +4 -2
  65. package/dist/tui/components/error-display.d.ts.map +1 -1
  66. package/dist/tui/components/goal-cycles-dialog.d.ts +2 -2
  67. package/dist/tui/components/goal-cycles-dialog.d.ts.map +1 -1
  68. package/dist/tui/components/idle-counter.d.ts +1 -1
  69. package/dist/tui/components/idle-counter.d.ts.map +1 -1
  70. package/dist/tui/components/judge-display.d.ts +14 -2
  71. package/dist/tui/components/judge-display.d.ts.map +1 -1
  72. package/dist/tui/components/login-dialog.d.ts +2 -2
  73. package/dist/tui/components/login-dialog.d.ts.map +1 -1
  74. package/dist/tui/components/login-mode-selector.d.ts +2 -2
  75. package/dist/tui/components/login-mode-selector.d.ts.map +1 -1
  76. package/dist/tui/components/login-selector.d.ts +1 -1
  77. package/dist/tui/components/login-selector.d.ts.map +1 -1
  78. package/dist/tui/components/masked-input.d.ts +1 -1
  79. package/dist/tui/components/masked-input.d.ts.map +1 -1
  80. package/dist/tui/components/mcp-selector.d.ts +2 -2
  81. package/dist/tui/components/mcp-selector.d.ts.map +1 -1
  82. package/dist/tui/components/model-selector.d.ts +2 -2
  83. package/dist/tui/components/model-selector.d.ts.map +1 -1
  84. package/dist/tui/components/multi-step-progress.d.ts +3 -1
  85. package/dist/tui/components/multi-step-progress.d.ts.map +1 -1
  86. package/dist/tui/components/multiline-input.d.ts +1 -1
  87. package/dist/tui/components/multiline-input.d.ts.map +1 -1
  88. package/dist/tui/components/notification-summary.d.ts +1 -1
  89. package/dist/tui/components/notification-summary.d.ts.map +1 -1
  90. package/dist/tui/components/notification.d.ts +1 -1
  91. package/dist/tui/components/notification.d.ts.map +1 -1
  92. package/dist/tui/components/om-marker.d.ts +3 -1
  93. package/dist/tui/components/om-marker.d.ts.map +1 -1
  94. package/dist/tui/components/om-output.d.ts +3 -1
  95. package/dist/tui/components/om-output.d.ts.map +1 -1
  96. package/dist/tui/components/om-progress.d.ts +1 -1
  97. package/dist/tui/components/om-progress.d.ts.map +1 -1
  98. package/dist/tui/components/om-settings.d.ts +2 -2
  99. package/dist/tui/components/om-settings.d.ts.map +1 -1
  100. package/dist/tui/components/plan-approval-inline.d.ts +2 -2
  101. package/dist/tui/components/plan-approval-inline.d.ts.map +1 -1
  102. package/dist/tui/components/reactive-signal.d.ts +1 -1
  103. package/dist/tui/components/reactive-signal.d.ts.map +1 -1
  104. package/dist/tui/components/settings.d.ts +2 -2
  105. package/dist/tui/components/settings.d.ts.map +1 -1
  106. package/dist/tui/components/shell-output.d.ts +3 -1
  107. package/dist/tui/components/shell-output.d.ts.map +1 -1
  108. package/dist/tui/components/simple-progress.d.ts +1 -1
  109. package/dist/tui/components/simple-progress.d.ts.map +1 -1
  110. package/dist/tui/components/slash-command.d.ts +3 -1
  111. package/dist/tui/components/slash-command.d.ts.map +1 -1
  112. package/dist/tui/components/state-signal.d.ts +1 -1
  113. package/dist/tui/components/state-signal.d.ts.map +1 -1
  114. package/dist/tui/components/subagent-execution.d.ts +2 -2
  115. package/dist/tui/components/subagent-execution.d.ts.map +1 -1
  116. package/dist/tui/components/system-reminder.d.ts +1 -1
  117. package/dist/tui/components/system-reminder.d.ts.map +1 -1
  118. package/dist/tui/components/task-progress.d.ts +1 -1
  119. package/dist/tui/components/task-progress.d.ts.map +1 -1
  120. package/dist/tui/components/temporal-gap.d.ts +3 -1
  121. package/dist/tui/components/temporal-gap.d.ts.map +1 -1
  122. package/dist/tui/components/thinking-settings.d.ts +2 -2
  123. package/dist/tui/components/thinking-settings.d.ts.map +1 -1
  124. package/dist/tui/components/thread-selector.d.ts +2 -2
  125. package/dist/tui/components/thread-selector.d.ts.map +1 -1
  126. package/dist/tui/components/tool-approval-dialog.d.ts +2 -2
  127. package/dist/tui/components/tool-approval-dialog.d.ts.map +1 -1
  128. package/dist/tui/components/tool-execution-enhanced.d.ts +2 -2
  129. package/dist/tui/components/tool-execution-enhanced.d.ts.map +1 -1
  130. package/dist/tui/components/tool-validation-error.d.ts +2 -2
  131. package/dist/tui/components/tool-validation-error.d.ts.map +1 -1
  132. package/dist/tui/components/user-message.d.ts +2 -2
  133. package/dist/tui/components/user-message.d.ts.map +1 -1
  134. package/dist/tui/components/wrapping-autocomplete-list.d.ts +1 -1
  135. package/dist/tui/components/wrapping-autocomplete-list.d.ts.map +1 -1
  136. package/dist/tui/components/wrapping-select-list.d.ts +1 -1
  137. package/dist/tui/components/wrapping-select-list.d.ts.map +1 -1
  138. package/dist/tui/display.d.ts.map +1 -1
  139. package/dist/tui/event-dispatch.d.ts.map +1 -1
  140. package/dist/tui/goal-manager.d.ts +48 -40
  141. package/dist/tui/goal-manager.d.ts.map +1 -1
  142. package/dist/tui/handlers/agent-lifecycle.d.ts +13 -0
  143. package/dist/tui/handlers/agent-lifecycle.d.ts.map +1 -1
  144. package/dist/tui/handlers/index.d.ts +1 -1
  145. package/dist/tui/handlers/index.d.ts.map +1 -1
  146. package/dist/tui/handlers/message.d.ts.map +1 -1
  147. package/dist/tui/handlers/om.d.ts.map +1 -1
  148. package/dist/tui/handlers/tool.d.ts.map +1 -1
  149. package/dist/tui/handlers/types.d.ts +1 -1
  150. package/dist/tui/handlers/types.d.ts.map +1 -1
  151. package/dist/tui/mastra-tui.d.ts.map +1 -1
  152. package/dist/tui/modal-question.d.ts +1 -1
  153. package/dist/tui/modal-question.d.ts.map +1 -1
  154. package/dist/tui/overlay.d.ts +1 -1
  155. package/dist/tui/overlay.d.ts.map +1 -1
  156. package/dist/tui/prompt-api-key.d.ts +1 -1
  157. package/dist/tui/prompt-api-key.d.ts.map +1 -1
  158. package/dist/tui/render-messages.d.ts +1 -1
  159. package/dist/tui/render-messages.d.ts.map +1 -1
  160. package/dist/tui/setup.d.ts.map +1 -1
  161. package/dist/tui/shell.d.ts.map +1 -1
  162. package/dist/tui/state.d.ts +2 -2
  163. package/dist/tui/state.d.ts.map +1 -1
  164. package/dist/tui/status-line.d.ts.map +1 -1
  165. package/dist/tui/theme.d.ts +1 -1
  166. package/dist/tui/theme.d.ts.map +1 -1
  167. package/dist/tui.cjs +19 -19
  168. package/dist/tui.js +2 -2
  169. package/package.json +20 -20
  170. package/dist/agents/coding.d.ts +0 -2
  171. package/dist/agents/coding.d.ts.map +0 -1
  172. package/dist/agents/subagents/execute.d.ts.map +0 -1
  173. package/dist/agents/subagents/explore.d.ts.map +0 -1
  174. package/dist/agents/subagents/plan.d.ts +0 -10
  175. package/dist/agents/subagents/plan.d.ts.map +0 -1
  176. package/dist/chunk-DJEQBK7L.cjs.map +0 -1
  177. package/dist/chunk-EATS4KOR.cjs.map +0 -1
  178. package/dist/chunk-FDDVVRPH.js.map +0 -1
  179. package/dist/chunk-NKTZDFIU.cjs.map +0 -1
  180. package/dist/chunk-OXYE6SUY.js.map +0 -1
  181. package/dist/chunk-W7Y7QIJA.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tui/components/multiline-input.ts","../src/tui/components/wrapping-select-list.ts","../src/tui/components/ask-question-inline.ts","../src/onboarding/onboarding-inline.ts","../src/utils/update-check.ts","../src/tui/components/chat-boundary-spacer.ts","../src/tui/components/chat-spacing.ts","../src/tui/chat-boundary-reconciliation.ts","../src/utils/slash-command-processor.ts","../src/tui/components/goal-cycles-dialog.ts","../src/tui/components/model-selector.ts","../src/tui/goal-manager.ts","../src/tui/overlay.ts","../src/tui/components/masked-input.ts","../src/tui/components/api-key-dialog.ts","../src/tui/prompt-api-key.ts","../src/tui/commands/goal.ts","../src/tui/components/help-overlay.ts","../src/tui/shell-config.ts","../src/tui/commands/help.ts","../src/tui/commands/cost.ts","../src/tui/commands/yolo.ts","../src/tui/components/thinking-settings.ts","../src/tui/commands/think.ts","../src/tui/commands/permissions.ts","../src/tui/commands/name.ts","../src/tui/commands/exit.ts","../src/tui/commands/hooks.ts","../src/tui/key-input.ts","../src/tui/components/mcp-selector.ts","../src/utils/errors.ts","../src/tui/notify.ts","../src/tui/display.ts","../src/tui/commands/mcp.ts","../src/tui/commands/mode.ts","../src/tui/components/slash-command.ts","../src/tui/components/assistant-message.ts","../src/tui/components/notification-summary.ts","../src/tui/components/notification.ts","../src/tui/components/om-marker.ts","../src/tui/components/om-output.ts","../src/tui/components/plan-approval-inline.ts","../src/tui/components/reactive-signal.ts","../src/tui/components/state-signal.ts","../src/tui/components/subagent-execution.ts","../src/tui/components/system-reminder.ts","../src/tui/components/temporal-gap.ts","../src/tui/components/ansi.ts","../src/tui/components/collapsible.ts","../src/tui/components/error-display.ts","../src/tui/components/tool-validation-error.ts","../src/tui/components/tool-execution-enhanced.ts","../src/tui/components/user-message.ts","../src/tui/components/tool-approval-dialog.ts","../src/tui/handlers/tool.ts","../src/tui/render-messages.ts","../src/tui/commands/send-slash-command-message.ts","../src/tui/commands/skill-filters.ts","../src/tui/commands/skills.ts","../src/tui/commands/new.ts","../src/tui/components/ask-question-dialog.ts","../src/tui/modal-question.ts","../src/tui/commands/clone.ts","../src/tui/commands/resource.ts","../src/tui/components/diff-output.ts","../src/tui/commands/diff.ts","../src/tui/components/thread-selector.ts","../src/tui/commands/threads.ts","../src/tui/commands/thread.ts","../src/tui/commands/thread-tag-dir.ts","../src/tui/commands/sandbox.ts","../src/clipboard/index.ts","../src/tui/components/obi-loader.ts","../src/tui/components/om-progress.ts","../src/tui/status-line.ts","../src/tui/commands/models-pack.ts","../src/tui/commands/custom-providers.ts","../src/tui/commands/subagents.ts","../src/tui/components/om-settings.ts","../src/tui/commands/om.ts","../src/tui/components/settings.ts","../src/tui/commands/api-keys.ts","../src/tui/commands/settings.ts","../src/tui/commands/browser.ts","../src/tui/components/login-dialog.ts","../src/tui/components/login-mode-selector.ts","../src/tui/components/login-selector.ts","../src/tui/commands/login.ts","../src/tui/commands/review.ts","../src/tui/commands/report-issue.ts","../src/tui/commands/setup.ts","../src/tui/detect-theme.ts","../src/tui/commands/theme.ts","../src/tui/commands/update.ts","../src/tui/commands/memory-gateway.ts","../src/tui/commands/feedback.ts","../src/tui/commands/observability.ts","../src/tui/commands/github.ts","../src/tui/goal-input-lock.ts","../src/tui/command-dispatch.ts","../src/tui/components/judge-display.ts","../src/tui/prune-chat.ts","../src/tui/handlers/agent-lifecycle.ts","../src/tui/handlers/message.ts","../src/tui/handlers/om.ts","../src/utils/plans.ts","../src/tui/handlers/prompts.ts","../src/tui/handlers/subagent.ts","../src/tui/components/wrapping-autocomplete-list.ts","../src/tui/components/custom-editor.ts","../src/tui/state.ts","../src/tui/event-dispatch.ts","../src/utils/slash-command-loader.ts","../src/tui/components/banner.ts","../src/tui/components/idle-counter.ts","../src/tui/components/task-progress.ts","../src/tui/setup.ts","../src/tui/components/shell-output.ts","../src/tui/shell-result.ts","../src/tui/shell-runner.ts","../src/tui/shell.ts","../src/tui/mastra-tui.ts"],"names":["theme","wrapTextWithAnsi","continuationPrefix","getKeybindings","chalk","resolve","Spacer","path","fs","Box","Text","Input","Container","isSelected","line","visibleWidth","SelectList","basename","TOOL_CATEGORIES","s","label","formatTokens","Markdown","truncateToWidth","COLLAPSED_LINES","formatDuration","MAX_COLLAPSED_LINES","padLine","process","truncateAnsi","fitted","safeStringify","highlight","status","pathDisplay","footerText","termWidth","output","border","maxLineWidth","fixedParts","availableForPath","stripAnsi","text","component","parsePartialJson","getCurrentModeColor","fuzzyFilter","lines","execSync","readFileSync","getObserverColor","getReflectorColor","homedir","access","items","matchesKey","SettingsList","execFile","join","askText","isBrowserbase","nextBrowser","shouldProceed","exec","settings","answer","askSelect","mastra","ctx","command","HIDDEN_REACTIVE_SIGNAL_TAGS","GOAL_STATE_SIGNAL_ID","shouldRenderReactiveSignal","createReminderComponent","TASKS_STATE_ID","trailingParts","truncatedValue","ANSI_STRIP_RE","Editor","mimeType","fileURLToPath","name","parseYaml","spawn","PROVIDER_DEFAULT_MODELS"],"mappings":"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","file":"chunk-GKGPZBID.js","sourcesContent":["/**\n * MultilineInput - wraps pi-tui's Editor to provide multiline text input\n * with the same interface as the single-line Input component.\n *\n * Supports:\n * - Enter to submit\n * - Shift+Enter for new line\n * - \\\\+Enter for new line (pi-tui convention)\n * - Text wrapping and scrolling\n */\n\nimport { Editor, matchesKey } from '@earendil-works/pi-tui';\nimport type { EditorTheme, TUI } from '@earendil-works/pi-tui';\n\nconst ANSI_STRIP_RE = /\\x1b\\[[0-9;]*m/g;\n\nexport class MultilineInput {\n private editor: Editor;\n private _focused = false;\n public onSubmit?: (value: string) => void;\n public onEscape?: () => void;\n public allowEmptySubmit = false;\n\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n }\n\n constructor(tui: TUI, editorTheme: EditorTheme) {\n this.editor = new Editor(tui, editorTheme);\n }\n\n getText(): string {\n return this.editor.getText();\n }\n\n setText(text: string): void {\n this.editor.setText(text);\n }\n\n handleInput(data: string): void {\n if (matchesKey(data, 'escape')) {\n this.onEscape?.();\n return;\n }\n\n if (matchesKey(data, 'enter')) {\n // Check if cursor is preceded by backslash (\\+Enter newline workaround)\n const lines = (this.editor as any).state?.lines;\n const cursorCol = (this.editor as any).state?.cursorCol;\n const currentLine = lines?.[(this.editor as any).state?.cursorLine] || '';\n if (cursorCol > 0 && currentLine[cursorCol - 1] === '\\\\') {\n this.editor.handleInput(data);\n return;\n }\n\n // Submit on plain Enter. Use trim() only to decide emptiness;\n // forward the raw buffer so leading indentation and trailing\n // newlines reach the caller intact.\n const rawText = this.editor.getText();\n if (rawText.trim() || this.allowEmptySubmit) {\n this.onSubmit?.(rawText);\n }\n return;\n }\n\n // Shift+Enter inserts a newline\n if (matchesKey(data, 'shift+enter')) {\n this.editor.handleInput('\\n');\n return;\n }\n\n this.editor.handleInput(data);\n }\n\n invalidate(): void {\n this.editor.invalidate();\n }\n\n /**\n * Render the editor content, stripping the Editor's own border chrome\n * so it can be embedded inside an existing bordered box.\n */\n render(width: number): string[] {\n const editorLines = this.editor.render(width);\n\n // The Editor wraps lines with its own borders: ─── top/bottom, │ sides\n // We strip these to embed content in the ask-question bordered box.\n const contentLines: string[] = [];\n let pastFirstBorder = false;\n\n for (const line of editorLines) {\n const stripped = line.replace(ANSI_STRIP_RE, '');\n\n // Skip horizontal rule border lines (───)\n if (stripped.length > 0 && /^─+$/.test(stripped)) {\n if (!pastFirstBorder) {\n pastFirstBorder = true;\n }\n continue;\n }\n\n // Skip dedicated scroll-indicator chrome (e.g. \"── ↑ ──\").\n // Match only full-line indicator format so user content with\n // arrow characters in it is preserved.\n if (/^─+\\s*[↑↓]\\s*─+$/.test(stripped.trim())) {\n continue;\n }\n\n if (pastFirstBorder) {\n contentLines.push(line);\n }\n }\n\n // If no content lines, return at least one empty line for the cursor\n if (contentLines.length === 0) {\n contentLines.push('');\n }\n\n return contentLines;\n }\n}\n","/**\n * Drop-in replacement for pi-tui's `SelectList` that wraps long item labels\n * across multiple terminal rows with a `↳ ` continuation marker instead of\n * truncating them. Arrow keys move item-to-item — not row-to-row — so\n * navigation stays predictable regardless of label height.\n */\n\nimport { getKeybindings, wrapTextWithAnsi } from '@earendil-works/pi-tui';\nimport type { Component, SelectItem, SelectListTheme } from '@earendil-works/pi-tui';\n\nconst SELECTED_PREFIX = '→ ';\nconst UNSELECTED_PREFIX = ' ';\nconst CONTINUATION_PREFIX = '↳ ';\nconst PREFIX_WIDTH = 2;\nconst CHECKBOX_CHECKED = '[x] ';\nconst CHECKBOX_UNCHECKED = '[ ] ';\nconst CHECKBOX_WIDTH = 4;\n\nexport class WrappingSelectList implements Component {\n private items: SelectItem[];\n private filteredItems: SelectItem[];\n private selectedIndex = 0;\n private maxVisible: number;\n private theme: SelectListTheme;\n /** When true, items are toggled (space) and confirmed together (enter) instead of selected one at a time. */\n private multiSelect: boolean;\n /** Values toggled on in multi-select mode. */\n private checkedValues = new Set<string>();\n\n onSelect?: (item: SelectItem) => void;\n onCancel?: () => void;\n onSelectionChange?: (item: SelectItem) => void;\n /** Called when the user confirms a multi-select list with Enter; receives all checked items in display order. */\n onConfirmMulti?: (items: SelectItem[]) => void;\n\n constructor(items: SelectItem[], maxVisible: number, theme: SelectListTheme, multiSelect = false) {\n this.items = items;\n this.filteredItems = items;\n this.maxVisible = maxVisible;\n this.theme = theme;\n this.multiSelect = multiSelect;\n }\n\n setFilter(filter: string): void {\n this.filteredItems = this.items.filter(item => item.value.toLowerCase().startsWith(filter.toLowerCase()));\n this.selectedIndex = 0;\n }\n\n setSelectedIndex(index: number): void {\n this.selectedIndex = Math.max(0, Math.min(index, this.filteredItems.length - 1));\n }\n\n invalidate(): void {}\n\n getSelectedItem(): SelectItem | null {\n return this.filteredItems[this.selectedIndex] ?? null;\n }\n\n render(width: number): string[] {\n const lines: string[] = [];\n\n if (this.filteredItems.length === 0) {\n lines.push(this.theme.noMatch(' No matching items'));\n return lines;\n }\n\n const startIndex = Math.max(\n 0,\n Math.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredItems.length - this.maxVisible),\n );\n const endIndex = Math.min(startIndex + this.maxVisible, this.filteredItems.length);\n\n for (let i = startIndex; i < endIndex; i++) {\n const item = this.filteredItems[i];\n if (!item) continue;\n const isSelected = i === this.selectedIndex;\n for (const row of this.renderItem(item, isSelected, width)) {\n lines.push(row);\n }\n }\n\n if (startIndex > 0 || endIndex < this.filteredItems.length) {\n lines.push(this.theme.scrollInfo(` (${this.selectedIndex + 1}/${this.filteredItems.length})`));\n }\n\n return lines;\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n\n if (kb.matches(keyData, 'tui.select.up')) {\n this.selectedIndex = this.selectedIndex === 0 ? this.filteredItems.length - 1 : this.selectedIndex - 1;\n this.notifySelectionChange();\n } else if (kb.matches(keyData, 'tui.select.down')) {\n this.selectedIndex = this.selectedIndex === this.filteredItems.length - 1 ? 0 : this.selectedIndex + 1;\n this.notifySelectionChange();\n } else if (this.multiSelect && keyData === ' ') {\n const current = this.filteredItems[this.selectedIndex];\n if (current) {\n if (this.checkedValues.has(current.value)) {\n this.checkedValues.delete(current.value);\n } else {\n this.checkedValues.add(current.value);\n }\n }\n } else if (kb.matches(keyData, 'tui.select.confirm')) {\n if (this.multiSelect) {\n const checked = this.items.filter(item => this.checkedValues.has(item.value));\n this.onConfirmMulti?.(checked);\n return;\n }\n const selected = this.filteredItems[this.selectedIndex];\n if (selected && this.onSelect) this.onSelect(selected);\n } else if (kb.matches(keyData, 'tui.select.cancel')) {\n this.onCancel?.();\n }\n }\n\n private renderItem(item: SelectItem, isSelected: boolean, width: number): string[] {\n const labelText = this.getDisplayValue(item);\n // In multi-select mode each row carries a `[x] `/`[ ] ` checkbox after the\n // cursor prefix, so reserve that extra width when wrapping the label.\n const checkboxWidth = this.multiSelect ? CHECKBOX_WIDTH : 0;\n const labelWidth = Math.max(1, width - PREFIX_WIDTH - checkboxWidth);\n const wrapped = wrapTextWithAnsi(labelText, labelWidth);\n const checkbox = this.multiSelect\n ? this.checkedValues.has(item.value)\n ? CHECKBOX_CHECKED\n : CHECKBOX_UNCHECKED\n : '';\n\n if (wrapped.length === 0) {\n const prefix = isSelected ? SELECTED_PREFIX : UNSELECTED_PREFIX;\n const rendered = `${prefix}${checkbox}`;\n return [isSelected ? this.theme.selectedText(rendered) : rendered];\n }\n\n return wrapped.map((chunk, index) => {\n const cursorPrefix = index === 0 ? (isSelected ? SELECTED_PREFIX : UNSELECTED_PREFIX) : CONTINUATION_PREFIX;\n // Only the first row shows the checkbox; continuation rows indent to align.\n const boxPart = index === 0 ? checkbox : ' '.repeat(checkbox.length);\n const rendered = `${cursorPrefix}${boxPart}${chunk}`;\n if (isSelected) return this.theme.selectedText(rendered);\n if (cursorPrefix === CONTINUATION_PREFIX) return this.theme.description(rendered);\n return rendered;\n });\n }\n\n private getDisplayValue(item: SelectItem): string {\n return item.label || item.value;\n }\n\n private notifySelectionChange(): void {\n const selected = this.filteredItems[this.selectedIndex];\n if (selected && this.onSelectionChange) this.onSelectionChange(selected);\n }\n}\n","/**\n * Inline ask question component.\n * Shows a question with either selectable options or free-text input\n * directly in the conversation flow instead of as an overlay dialog.\n *\n * Supports three lifecycle phases:\n * 1. **Streaming** — Created early by handleToolInputStart with no args.\n * As partial JSON arrives via handleToolInputDelta, `updateArgs()` feeds\n * the question text and option labels into the bordered box progressively.\n * 2. **Active** — When handleAskQuestion fires, `activate()` wires up the\n * interactive SelectList / Input and the submit/cancel callbacks.\n * 3. **Answered** — After the user responds, the box freezes with ✓/✗ icons.\n */\n\nimport {\n Container,\n getKeybindings,\n Input,\n truncateToWidth,\n visibleWidth,\n wrapTextWithAnsi,\n} from '@earendil-works/pi-tui';\nimport type { Focusable, SelectItem, TUI } from '@earendil-works/pi-tui';\nimport { BOX_INDENT_STR, theme, getSelectListTheme, getEditorTheme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\nimport { MultilineInput } from './multiline-input.js';\nimport { WrappingSelectList } from './wrapping-select-list.js';\n\n/**\n * Selection mode for option prompts. `single_select` selects one option on Enter\n * (the default). `multi_select` lets the user toggle several options with Space and\n * confirm them together with Enter, returning all selected labels as an array.\n */\nexport type AskQuestionSelectionMode = 'single_select' | 'multi_select';\n\nexport interface AskQuestionInlineOptions {\n question: string;\n options?: Array<{ label: string; description?: string }>;\n /** Controls whether options are single- or multi-select. Defaults to single_select. */\n selectionMode?: AskQuestionSelectionMode;\n /** Format the text shown after an answer is selected. Defaults to `question → answer`. */\n formatResult?: (answer: string) => string;\n /** If provided, determines whether an answer should be shown with error styling (red ✗). */\n isNegativeAnswer?: (answer: string) => boolean;\n /** Allow submitting an empty string in free-text mode. */\n allowEmptyInput?: boolean;\n /** Show the \"Custom response...\" option in select mode. Defaults to true. */\n allowCustomResponse?: boolean;\n /**\n * Use a multiline editor for free-text input (Shift+Enter / \\+Enter for new lines).\n * Defaults to false — most prompts ask for short answers like names, paths, or yes/no.\n * Enable for prompts that legitimately want paragraph-length replies (e.g. ask_user).\n */\n multiline?: boolean;\n onSubmit: (answer: string) => void;\n /**\n * Called instead of `onSubmit` when the prompt is multi-select, with every selected\n * option label. Falls back to `onSubmit` with a comma-joined string when omitted.\n */\n onSubmitMulti?: (answers: string[]) => void;\n onCancel: () => void;\n}\n\n/**\n * A renderable that wraps the ask-question content in a full bordered box\n * (┌─┐ / │ │ / └─┘) including the interactive SelectList or Input.\n */\nclass AskQuestionBorderedBox {\n questionLines: string[];\n private selectList?: WrappingSelectList;\n private input?: Input | MultilineInput;\n private hintText: string;\n items: Array<{ label: string; description?: string }>;\n private answered = false;\n private cancelled = false;\n private selectedValue?: string;\n /** Selected option labels when the box was answered in multi-select mode. */\n private selectedValues?: string[];\n private answerIsNegative = false;\n /** True when created during streaming, before activate() is called */\n private streaming = false;\n\n constructor(\n questionLines: string[],\n hintText: string,\n items: Array<{ label: string; description?: string }>,\n selectList?: WrappingSelectList,\n input?: Input | MultilineInput,\n streaming?: boolean,\n ) {\n this.questionLines = questionLines;\n this.hintText = hintText;\n this.items = items;\n this.selectList = selectList;\n this.input = input;\n this.streaming = streaming ?? false;\n }\n\n invalidate() {\n this.selectList?.invalidate();\n }\n\n setInteractive(selectList?: WrappingSelectList, input?: Input | MultilineInput, hintText?: string) {\n this.streaming = false;\n this.selectList = selectList;\n this.input = input;\n if (hintText) this.hintText = hintText;\n }\n\n setAnswered(selectedValue: string, isNegative: boolean) {\n this.streaming = false;\n this.answered = true;\n this.selectedValue = selectedValue;\n this.answerIsNegative = isNegative;\n }\n\n setAnsweredMulti(selectedValues: string[]) {\n this.streaming = false;\n this.answered = true;\n this.selectedValues = selectedValues;\n this.answerIsNegative = false;\n }\n\n setCancelled() {\n this.streaming = false;\n this.answered = true;\n this.cancelled = true;\n }\n\n render(width: number): string[] {\n try {\n return this._render(width);\n } catch {\n // Fallback: render a minimal box so the TUI doesn't crash\n return [\n BOX_INDENT_STR + theme.fg('dim', '╭──── Question ────╮'),\n BOX_INDENT_STR + theme.fg('dim', '│ (render error) │'),\n BOX_INDENT_STR + theme.fg('dim', '╰──────────────────╯'),\n ];\n }\n }\n\n private _render(width: number): string[] {\n const border = (s: string) => theme.fg('dim', s);\n\n // Inner width: total width minus indent, minus 4 for \"│ \" + \" │\"\n const innerWidth = Math.max(1, width - BOX_INDENT_STR.length - 4);\n const boxWidth = innerWidth + 4; // \"│ \" + content + \" │\"\n\n const lines: string[] = [];\n\n // Top border: ╭──...──╮\n lines.push(BOX_INDENT_STR + border(`╭${'─'.repeat(boxWidth - 2)}╮`));\n\n // Helper to add a bordered line (truncates content that exceeds innerWidth)\n const addLine = (content: string, contentVisWidth: number) => {\n let finalContent = content;\n let finalWidth = contentVisWidth;\n if (finalWidth > innerWidth) {\n finalContent = truncateToWidth(content, innerWidth);\n finalWidth = visibleWidth(finalContent);\n }\n const pad = Math.max(0, innerWidth - finalWidth);\n lines.push(BOX_INDENT_STR + border('│') + ' ' + finalContent + ' '.repeat(pad) + ' ' + border('│'));\n };\n\n // Question header\n const header = theme.bold(theme.fg('accent', 'Question'));\n addLine(header, visibleWidth(header));\n\n // Question text (word-wrap to fit inside bordered box)\n for (const qLine of this.questionLines) {\n const wrapped = wrapTextWithAnsi(qLine, innerWidth);\n for (const wLine of wrapped) {\n const text = theme.fg('text', wLine);\n addLine(text, visibleWidth(wLine));\n }\n }\n\n // Empty separator\n addLine('', 0);\n\n // Wrap a labelled option line so long labels don't overflow the bordered box.\n // Mirrors the free-text answered branch below: first wrapped line keeps the\n // styled prefix (icon/spaces), continuation lines indent 3 spaces.\n const continuationPrefix = ' ';\n const addWrappedOptionLine = (prefix: string, label: string, style: (s: string) => string) => {\n const prefixVis = visibleWidth(prefix);\n const wrapped = wrapTextWithAnsi(label, Math.max(1, innerWidth - prefixVis));\n wrapped.forEach((line, index) => {\n const linePrefix = index === 0 ? prefix : continuationPrefix;\n const content = `${linePrefix}${style(line)}`;\n addLine(content, visibleWidth(linePrefix) + visibleWidth(line));\n });\n };\n\n if (this.streaming) {\n // Streaming: show option labels as they arrive (dimmed, no interactivity)\n const dim = (s: string) => theme.fg('dim', s);\n for (const item of this.items) {\n addWrappedOptionLine(continuationPrefix, item.label, dim);\n }\n // Waiting indicator\n const waiting = theme.fg('dim', '…');\n addLine(waiting, visibleWidth(waiting));\n } else if (this.answered && this.items.length > 0) {\n // Render frozen item list\n const dim = (s: string) => theme.fg('dim', s);\n if (this.cancelled) {\n // All items dimmed, cancelled notice\n for (const item of this.items) {\n addWrappedOptionLine(continuationPrefix, item.label, dim);\n }\n const cancelLine = `${theme.fg('error', '✗')} ${theme.fg('dim', '(cancelled)')}`;\n addLine(cancelLine, visibleWidth(cancelLine));\n } else {\n // ✓/✗ on selected, dimmed unselected\n const text = (s: string) => theme.fg('text', s);\n for (const item of this.items) {\n const isSelected = this.selectedValues\n ? this.selectedValues.includes(item.label)\n : item.label === this.selectedValue;\n if (isSelected) {\n const icon = this.answerIsNegative ? theme.fg('error', '✗') : theme.fg('success', '✓');\n addWrappedOptionLine(`${icon} `, item.label, text);\n } else {\n addWrappedOptionLine(continuationPrefix, item.label, dim);\n }\n }\n }\n addLine('', 0);\n } else if (this.answered && this.selectedValue != null) {\n // Free-text input answered\n const icon = this.answerIsNegative ? theme.fg('error', '✗') : theme.fg('success', '✓');\n const iconPrefix = `${icon} `;\n const continuationPrefix = ' ';\n const wrappedAnswer = wrapTextWithAnsi(this.selectedValue!, Math.max(1, innerWidth - visibleWidth(iconPrefix)));\n\n wrappedAnswer.forEach((line, index) => {\n const prefix = index === 0 ? iconPrefix : continuationPrefix;\n const content = `${prefix}${theme.fg('text', line)}`;\n addLine(content, visibleWidth(prefix) + visibleWidth(line));\n });\n } else if (this.answered && this.cancelled) {\n // Free-text cancelled\n const cancelLine = `${theme.fg('error', '✗')} ${theme.fg('dim', '(cancelled)')}`;\n addLine(cancelLine, visibleWidth(cancelLine));\n } else {\n // Interactive content (SelectList or Input)\n if (this.selectList) {\n // SelectList renders its own lines — wrap each one with borders\n const selectLines = this.selectList.render(innerWidth);\n for (const sLine of selectLines) {\n addLine(sLine, visibleWidth(sLine));\n }\n } else if (this.input) {\n const inputLines = this.input.render(innerWidth);\n for (const iLine of inputLines) {\n addLine(iLine, visibleWidth(iLine));\n }\n }\n\n // Hint text\n const hint = theme.fg('dim', this.hintText);\n addLine(hint, visibleWidth(hint));\n }\n\n // Bottom border: ╰──...──╯\n lines.push(BOX_INDENT_STR + border(`╰${'─'.repeat(boxWidth - 2)}╯`));\n\n return lines;\n }\n}\n\nexport class AskQuestionInlineComponent extends Container implements Focusable {\n private borderedBox: AskQuestionBorderedBox;\n private selectList?: WrappingSelectList;\n private input?: Input | MultilineInput;\n private tui?: TUI;\n private onSubmit?: (answer: string) => void;\n private onSubmitMulti?: (answers: string[]) => void;\n private onCancel?: () => void;\n private isNegativeAnswer?: (answer: string) => boolean;\n private allowEmptyInput = false;\n private multiline = false;\n private allowCustomResponse = true;\n private multiSelect = false;\n private answered = false;\n\n /**\n * Create a pre-answered instance for rendering from chat history.\n * No interactive elements — just shows the question and the answer in the bordered box.\n */\n static fromHistory(\n question: string,\n options: Array<{ label: string; description?: string }> | undefined,\n answer: string,\n cancelled: boolean,\n ): AskQuestionInlineComponent {\n const component = AskQuestionInlineComponent.createStreaming();\n component.updateArgs({ question, options });\n component.answered = true;\n if (cancelled) {\n component.borderedBox.setCancelled();\n } else {\n component.borderedBox.setAnswered(answer, false);\n }\n return component;\n }\n\n /**\n * Create a streaming instance for early rendering during tool input streaming.\n * Shows the bordered box with \"…\" indicator. Call updateArgs() as partial JSON\n * arrives, then activate() when the question event fires.\n */\n static createStreaming(tui?: TUI): AskQuestionInlineComponent {\n const component = new AskQuestionInlineComponent();\n component.tui = tui;\n return component;\n }\n\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n if (!this.answered && this.input) {\n this.input.focused = value;\n }\n }\n\n render(width: number): string[] {\n try {\n return super.render(width);\n } catch {\n return [\n BOX_INDENT_STR + theme.fg('dim', '╭──── Question ────╮'),\n BOX_INDENT_STR + theme.fg('dim', '│ (render error) │'),\n BOX_INDENT_STR + theme.fg('dim', '╰──────────────────╯'),\n ];\n }\n }\n\n /**\n * Private constructor — use static factories or the options constructor.\n */\n constructor(options?: AskQuestionInlineOptions, _ui?: TUI) {\n super();\n\n this.tui = _ui;\n\n if (options) {\n // Full construction with interactive elements\n this.onSubmit = options.onSubmit;\n this.onSubmitMulti = options.onSubmitMulti;\n this.onCancel = options.onCancel;\n this.isNegativeAnswer = options.isNegativeAnswer;\n this.allowEmptyInput = Boolean(options.allowEmptyInput);\n this.multiline = Boolean(options.multiline);\n this.allowCustomResponse = options.allowCustomResponse ?? true;\n this.multiSelect = options.selectionMode === 'multi_select';\n\n const questionLines = options.question.split('\\n');\n\n let hintText: string;\n if (options.options && options.options.length > 0) {\n hintText = this.selectHintText();\n this.buildSelectMode(options.options);\n } else {\n hintText = this.useMultiline()\n ? 'Enter to submit · Shift+Enter/\\\\+Enter for new line · Esc to skip'\n : 'Enter to submit · Esc to skip';\n this.buildInputMode();\n }\n\n this.borderedBox = new AskQuestionBorderedBox(\n questionLines,\n hintText,\n options.options || [],\n this.selectList,\n this.input,\n );\n } else {\n // Streaming mode — empty bordered box, will be populated by updateArgs()\n this.borderedBox = new AskQuestionBorderedBox([], '', [], undefined, undefined, true);\n }\n\n this.addChild(this.borderedBox as any);\n }\n\n /**\n * Update the question text and options from streaming partial args.\n * Called during tool input delta streaming.\n */\n updateArgs(args: unknown): void {\n if (this.answered) return;\n if (!args || typeof args !== 'object') return;\n const a = args as Record<string, unknown>;\n if (typeof a.question === 'string') {\n this.borderedBox.questionLines = a.question.split('\\n');\n }\n if (Array.isArray(a.options)) {\n this.borderedBox.items = a.options.filter(\n (o: unknown): o is { label: string; description?: string } =>\n typeof o === 'object' && o !== null && typeof (o as any).label === 'string',\n );\n }\n }\n\n /**\n * Activate the interactive elements (SelectList or Input) and wire up callbacks.\n * Called by handleAskQuestion when the question event fires after streaming.\n */\n activate(options: {\n question: string;\n options?: Array<{ label: string; description?: string }>;\n selectionMode?: AskQuestionSelectionMode;\n isNegativeAnswer?: (answer: string) => boolean;\n allowEmptyInput?: boolean;\n allowCustomResponse?: boolean;\n multiline?: boolean;\n tui?: TUI;\n onSubmit: (answer: string) => void;\n onSubmitMulti?: (answers: string[]) => void;\n onCancel: () => void;\n }): void {\n if (this.answered) return;\n if (options.tui) this.tui = options.tui;\n this.onSubmit = options.onSubmit;\n this.onSubmitMulti = options.onSubmitMulti;\n this.onCancel = options.onCancel;\n this.isNegativeAnswer = options.isNegativeAnswer;\n this.allowEmptyInput = Boolean(options.allowEmptyInput);\n this.allowCustomResponse = options.allowCustomResponse ?? true;\n this.multiline = Boolean(options.multiline);\n this.multiSelect = options.selectionMode === 'multi_select';\n\n // Update question text and items to final values\n this.borderedBox.questionLines = options.question.split('\\n');\n this.borderedBox.items = options.options || [];\n\n // Build interactive elements\n let hintText: string;\n if (options.options && options.options.length > 0) {\n hintText = this.selectHintText();\n this.buildSelectMode(options.options);\n } else {\n hintText = this.useMultiline()\n ? 'Enter to submit · Shift+Enter/\\\\+Enter for new line · Esc to skip'\n : 'Enter to submit · Esc to skip';\n this.buildInputMode();\n }\n\n // Switch bordered box out of streaming mode\n this.borderedBox.setInteractive(this.selectList, this.input, hintText);\n }\n\n private static readonly CUSTOM_RESPONSE_VALUE = '__custom_response__';\n\n /** Hint line shown under an option list, tailored to single- vs multi-select. */\n private selectHintText(): string {\n return this.multiSelect\n ? 'Space to toggle · Enter to confirm · Esc to skip'\n : '↑↓ to navigate · Enter to select · Esc to skip';\n }\n\n private buildSelectMode(opts: Array<{ label: string; description?: string }>): void {\n const items: SelectItem[] = opts.map(opt => ({\n value: opt.label,\n label: opt.description ? `${opt.label} ${theme.fg('dim', opt.description)}` : opt.label,\n }));\n\n // \"Custom response...\" only applies to single-select: it switches to free-text.\n // Multi-select toggles a fixed option set, so the escape hatch doesn't apply.\n if (this.allowCustomResponse && !this.multiSelect) {\n items.push({\n value: AskQuestionInlineComponent.CUSTOM_RESPONSE_VALUE,\n label: theme.fg('dim', '✎ Custom response...'),\n });\n }\n\n this.selectList = new WrappingSelectList(items, Math.min(items.length, 8), getSelectListTheme(), this.multiSelect);\n\n if (this.multiSelect) {\n this.selectList.onConfirmMulti = (selected: SelectItem[]) => {\n this.handleMultiAnswer(selected.map(item => item.value));\n };\n } else {\n this.selectList.onSelect = (item: SelectItem) => {\n if (item.value === AskQuestionInlineComponent.CUSTOM_RESPONSE_VALUE) {\n this.switchToCustomInput();\n return;\n }\n this.handleAnswer(item.value);\n };\n }\n this.selectList.onCancel = () => {\n this.handleCancel();\n };\n }\n\n private switchToCustomInput(): void {\n // Tear down the select list and switch to free-text input\n this.selectList = undefined;\n this.buildInputMode();\n\n // Clear items so the answered state renders as free-text, not select\n this.borderedBox.items = [];\n this.borderedBox.setInteractive(\n undefined,\n this.input,\n this.useMultiline()\n ? 'Enter to submit · Shift+Enter/\\\\+Enter for new line · Esc to skip'\n : 'Enter to submit · Esc to skip',\n );\n }\n\n /** Whether this prompt should render a multiline editor (vs a single-line input). */\n private useMultiline(): boolean {\n return this.multiline && Boolean(this.tui);\n }\n\n private buildInputMode(): void {\n if (this.useMultiline()) {\n // Multiline editor — opted in by callers that expect paragraph-length answers.\n const multilineInput = new MultilineInput(this.tui!, getEditorTheme());\n multilineInput.allowEmptySubmit = this.allowEmptyInput;\n multilineInput.onSubmit = (value: string) => {\n // Trim only for the emptiness decision; forward the raw value\n // so leading indentation / trailing newlines survive.\n if (value.trim() || this.allowEmptyInput) {\n this.handleAnswer(value);\n }\n };\n multilineInput.onEscape = () => {\n this.handleCancel();\n };\n this.input = multilineInput;\n } else {\n // Single-line input — the right default for short answers (paths, names, yes/no).\n this.input = new Input();\n this.input.onSubmit = (value: string) => {\n const trimmed = value.trim();\n if (trimmed || this.allowEmptyInput) {\n this.handleAnswer(trimmed);\n }\n };\n (this.input as any).keybindings = getKeybindings();\n }\n\n // Carry focus over so callers (constructor, activate, switchToCustomInput)\n // don't have to reapply it manually after rebuilding the input.\n this.input.focused = this._focused;\n }\n\n answer(answer: string, isNegative = false): void {\n if (this.answered) return;\n this.answered = true;\n\n this.borderedBox.setAnswered(answer, isNegative);\n }\n\n private handleAnswer(answer: string): void {\n if (this.answered) return;\n const isNegative = this.isNegativeAnswer?.(answer) ?? false;\n this.answer(answer, isNegative);\n\n this.onSubmit?.(answer);\n }\n\n private handleMultiAnswer(answers: string[]): void {\n if (this.answered) return;\n this.answered = true;\n this.borderedBox.setAnsweredMulti(answers);\n\n // Prefer the array-shaped callback; fall back to a comma-joined string so\n // single-select-only callers still receive a usable answer.\n if (this.onSubmitMulti) {\n this.onSubmitMulti(answers);\n } else {\n this.onSubmit?.(answers.join(', '));\n }\n }\n\n private handleCancel(): void {\n if (this.answered) return;\n this.answered = true;\n\n this.borderedBox.setCancelled();\n\n this.onCancel?.();\n }\n\n handleInput(data: string): void {\n if (this.answered) return;\n\n if (this.selectList) {\n this.selectList.handleInput(data);\n } else if (this.input) {\n const kb = getKeybindings();\n if (kb.matches(data, 'tui.select.cancel')) {\n this.handleCancel();\n return;\n }\n this.input.handleInput(data);\n }\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\n","/**\n * Setup onboarding component.\n *\n * Walks the user through a multi-step wizard:\n * 1. Welcome\n * 2. Auth / Login prompt\n * 3. Mode pack selection (build / plan / fast model preset)\n * 4. OM pack selection (observational memory model)\n * 5. YOLO mode toggle\n *\n * The component renders as a settings overlay. On completion it fires\n * `onComplete` with the collected choices.\n */\n\nimport { Box, SelectList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable, SelectItem, TUI } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { AskQuestionInlineComponent } from '../tui/components/ask-question-inline.js';\nimport { BOX_INDENT, theme, getSelectListTheme, mastra } from '../tui/theme.js';\nimport type { ModePack, OMPack } from './packs.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface OnboardingResult {\n modePack: ModePack;\n omPack: OMPack;\n yolo: boolean;\n /** True if the user chose to log in (auth flow handled externally). */\n loginRequested: boolean;\n loginProvider?: string;\n}\n\n/** Previously saved selections to pre-populate when re-running /setup. */\nexport interface PreviousSetupChoices {\n modePackId: string | null;\n omPackId: string | null;\n yolo: boolean | null;\n}\n\nexport interface OnboardingOptions {\n tui: TUI;\n /** OAuth providers available for login. label=display name, value=provider id */\n authProviders: Array<{ label: string; value: string; loggedIn: boolean }>;\n /** Available mode packs (pre-filtered by provider access). */\n modePacks: ModePack[];\n /** Available OM packs (pre-filtered by provider access). */\n omPacks: OMPack[];\n /** Whether the user has any provider access (API key or OAuth) — even for providers without a built-in pack. */\n hasProviderAccess: boolean;\n /** Previously saved choices — used to highlight current selections when re-running. */\n previous?: PreviousSetupChoices;\n /** Called when the wizard completes. */\n onComplete: (result: OnboardingResult) => void;\n /** Called if the user cancels the wizard (Esc on welcome). */\n onCancel: () => void;\n /** Called when the user requests login during onboarding. */\n onLogin: (providerId: string, done: () => void) => void;\n /** Show the model selector overlay and return the chosen model ID (or undefined on cancel). */\n onSelectModel: (title: string, modeColor?: string) => Promise<string | undefined>;\n}\n\n// ---------------------------------------------------------------------------\n// Steps\n// ---------------------------------------------------------------------------\n\ntype StepId = 'welcome' | 'auth' | 'modePack' | 'omPack' | 'yolo' | 'done';\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport class OnboardingInlineComponent extends Box implements Focusable {\n private tui: TUI;\n private options: OnboardingOptions;\n\n // Track which step we're on (written by renderStep for debugging / future use)\n private currentStep: StepId = 'welcome';\n private stepBox!: Box;\n private selectList?: SelectList;\n private activeInlineQuestion?: AskQuestionInlineComponent;\n private _finished = false;\n\n // Collected choices\n private loginRequested = false;\n private loginProvider?: string;\n private selectedModePack!: ModePack;\n private selectedOmPack!: OMPack;\n private selectedYolo = true;\n\n // Focusable\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n }\n\n constructor(options: OnboardingOptions) {\n super(4, 2, (text: string) => theme.bg('overlayBg', text));\n this.tui = options.tui;\n this.options = options;\n\n // Initialize defaults — prefer previous selection if it still exists in the available packs\n const prevModePack = options.previous?.modePackId\n ? options.modePacks.find(p => p.id === options.previous!.modePackId)\n : undefined;\n this.selectedModePack = prevModePack ?? options.modePacks[0]!;\n\n const prevOmPack = options.previous?.omPackId\n ? options.omPacks.find(p => p.id === options.previous!.omPackId)\n : undefined;\n this.selectedOmPack = prevOmPack ??\n options.omPacks[0] ?? { id: 'none', name: 'None available', description: '', modelId: '' };\n\n if (options.previous?.yolo != null) {\n this.selectedYolo = options.previous.yolo;\n }\n\n this.renderStep('welcome');\n }\n\n get finished(): boolean {\n return this._finished;\n }\n\n /** Programmatically cancel the wizard (e.g. on Ctrl+C). */\n cancel(): void {\n if (this._finished) return;\n this._finished = true;\n this.collapseStep('Setup skipped — run /setup anytime to configure');\n this.options.onCancel();\n }\n\n /** Refresh the available mode packs (e.g. after a login grants new provider access). */\n updateModePacks(packs: ModePack[]): void {\n this.options.modePacks = packs;\n if (!this.selectedModePack || !packs.find(p => p.id === this.selectedModePack.id)) {\n this.selectedModePack = packs[0]!;\n }\n }\n\n /** Refresh the available OM packs (e.g. after a login grants new provider access). */\n updateOmPacks(packs: OMPack[]): void {\n this.options.omPacks = packs;\n if (!this.selectedOmPack || !packs.find(p => p.id === this.selectedOmPack.id)) {\n this.selectedOmPack = packs[0]!;\n }\n }\n\n /** Update whether the user has any provider access (e.g. after a login). */\n updateHasProviderAccess(hasAccess: boolean): void {\n this.options.hasProviderAccess = hasAccess;\n }\n\n // ---------------------------------------------------------------------------\n // Rendering helpers\n // ---------------------------------------------------------------------------\n\n private clearStep(): void {\n if (this.stepBox) {\n this.removeChild(this.stepBox);\n }\n this.selectList = undefined;\n }\n\n private renderStep(step: StepId): void {\n this.currentStep = step;\n\n switch (step) {\n case 'welcome':\n return this.renderWelcome();\n case 'auth':\n return this.renderAuth();\n case 'modePack':\n return this.renderModePack();\n case 'omPack':\n return this.renderOmPack();\n case 'yolo':\n return this.renderYolo();\n case 'done':\n return this.renderDone();\n }\n }\n\n private stepCount = 0;\n\n private makeBox(): Box {\n this.clearStep();\n this.stepBox = new Box(BOX_INDENT, 1, (text: string) => theme.bg('overlayBg', text));\n // Add a spacer between steps, but not before the very first one\n if (this.stepCount > 0) {\n this.addChild(new Spacer(1));\n }\n this.stepCount++;\n this.addChild(this.stepBox);\n return this.stepBox;\n }\n\n // ---------------------------------------------------------------------------\n // Step: Welcome\n // ---------------------------------------------------------------------------\n\n private renderWelcome(): void {\n const box = this.makeBox();\n box.addChild(new Text(theme.bold(theme.fg('accent', '👋 Welcome to Mastra Code')), 0, 0));\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('text', \"Let's configure your models and preferences.\"), 0, 0));\n box.addChild(new Text(chalk.white('You can re-run this anytime with /setup.'), 0, 0));\n box.addChild(new Spacer(1));\n\n const items: SelectItem[] = [\n { value: 'continue', label: ` ${theme.fg('success', 'Continue')}` },\n { value: 'skip', label: ` ${theme.fg('dim', 'Skip')}` },\n ];\n this.selectList = new SelectList(items, items.length, getSelectListTheme());\n this.selectList.onSelect = (item: SelectItem) => {\n if (item.value === 'continue') {\n this.collapseStep('Welcome');\n this.renderStep('auth');\n } else {\n this._finished = true;\n this.collapseStep('Setup skipped — run /setup anytime to configure');\n this.options.onCancel();\n }\n };\n this.selectList.onCancel = () => {\n this._finished = true;\n this.collapseStep('Setup skipped — run /setup anytime to configure');\n this.options.onCancel();\n };\n box.addChild(this.selectList);\n }\n\n // ---------------------------------------------------------------------------\n // Step: Auth\n // ---------------------------------------------------------------------------\n\n private renderAuth(): void {\n const box = this.makeBox();\n box.addChild(new Text(theme.bold(theme.fg('accent', '🔑 Authentication')), 0, 0));\n box.addChild(new Spacer(1));\n\n const providers = this.options.authProviders;\n if (providers.length === 0) {\n box.addChild(new Text(theme.fg('dim', 'No OAuth providers available. Skipping.'), 0, 0));\n // auto-advance after brief moment\n setTimeout(() => this.renderStep('modePack'), 100);\n return;\n }\n\n box.addChild(new Text(theme.fg('text', 'Log in with an AI provider to use your subscription,'), 0, 0));\n box.addChild(new Text(theme.fg('text', 'or skip if you have API keys configured as environment variables.'), 0, 0));\n box.addChild(new Spacer(1));\n\n const items: SelectItem[] = providers.map(p => ({\n value: p.value,\n label: p.loggedIn ? ` ${p.label} ${theme.fg('success', '✓ logged in')}` : ` ${p.label}`,\n }));\n items.push({\n value: '__skip',\n label: ` ${theme.fg('dim', 'Skip (use API keys or configure later with /login)')}`,\n });\n\n this.selectList = new SelectList(items, Math.min(items.length, 8), getSelectListTheme());\n this.selectList.onSelect = (item: SelectItem) => {\n if (item.value === '__skip') {\n this.renderStep('modePack');\n } else {\n this.loginRequested = true;\n this.loginProvider = item.value;\n // Hand off to the external login flow; it calls `done()` when finished\n this.options.onLogin(item.value, () => {\n this.renderStep('modePack');\n });\n }\n };\n this.selectList.onCancel = () => {\n this.renderStep('modePack');\n };\n\n box.addChild(this.selectList);\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc skip'), 0, 0));\n }\n\n // ---------------------------------------------------------------------------\n // Step: Mode pack\n // ---------------------------------------------------------------------------\n\n /** Text component showing details for the currently highlighted mode pack. */\n private modePackDetail?: Text;\n\n private renderModePack(): void {\n const packs = this.options.modePacks;\n const box = this.makeBox();\n\n // No API keys and no OAuth logins — show warning but allow the user to continue\n if (!this.options.hasProviderAccess) {\n box.addChild(new Text(theme.bold(theme.fg('warning', 'No model providers configured')), 0, 0));\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('text', 'To use Mastra Code you need at least one API key or OAuth login'), 0, 0));\n box.addChild(new Text(theme.fg('text', 'for Anthropic, OpenAI, or another supported provider.'), 0, 0));\n box.addChild(new Spacer(1));\n box.addChild(\n new Text(theme.fg('dim', 'See https://mastra.ai/models for supported providers and API key env vars.'), 0, 0),\n );\n box.addChild(new Spacer(1));\n box.addChild(\n new Text(theme.fg('dim', 'Set an API key and restart, or run /login to authenticate via OAuth.'), 0, 0),\n );\n box.addChild(new Spacer(1));\n }\n\n box.addChild(new Text(theme.bold(theme.fg('accent', 'Model Packs')), 0, 0));\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('text', 'Choose default models for each mode (build / plan / fast):'), 0, 0));\n box.addChild(new Spacer(1));\n\n const prevId = this.options.previous?.modePackId ?? null;\n const items: SelectItem[] = packs.map(p => ({\n value: p.id,\n label: ` ${p.name} ${theme.fg('dim', p.description)}${p.id === prevId ? theme.fg('dim', ' (current)') : ''}`,\n }));\n\n this.selectList = new SelectList(items, items.length, getSelectListTheme());\n\n // Pre-select the previously chosen pack\n const prevIdx = prevId ? packs.findIndex(p => p.id === prevId) : -1;\n if (prevIdx > 0) this.selectList.setSelectedIndex(prevIdx);\n\n this.selectList.onSelect = (item: SelectItem) => {\n const pack = packs.find(p => p.id === item.value) ?? packs[0]!;\n if (pack.id === 'custom') {\n this.runCustomPackFlow();\n } else {\n this.selectedModePack = pack;\n this.collapseStep(`Model pack → ${theme.bold(this.selectedModePack.name)}`);\n this.renderStep('omPack');\n }\n };\n this.selectList.onCancel = () => {\n this.collapseStep(`Model pack → ${theme.bold(this.selectedModePack.name)} (default)`);\n this.renderStep('omPack');\n };\n this.selectList.onSelectionChange = (item: SelectItem) => {\n this.updateModePackDetail(packs, item.value);\n };\n\n box.addChild(this.selectList);\n box.addChild(new Spacer(1));\n\n // Detail line — shows models for the currently highlighted pack\n this.modePackDetail = new Text('', 0, 0);\n box.addChild(this.modePackDetail);\n\n // Initialize detail for the highlighted item\n const initialId = prevIdx > 0 ? packs[prevIdx]!.id : packs[0]!.id;\n this.updateModePackDetail(packs, initialId);\n\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc use default'), 0, 0));\n }\n\n private updateModePackDetail(packs: ModePack[], highlightedId: string): void {\n const pack = packs.find(p => p.id === highlightedId);\n if (!pack || !this.modePackDetail) return;\n\n if (pack.id === 'custom') {\n this.modePackDetail.setText(theme.fg('dim', \" You'll pick a model for each mode in the next steps.\"));\n } else {\n const detail = [\n ` ${chalk.hex(mastra.blue)('plan')} → ${theme.fg('text', pack.models.plan)}`,\n ` ${chalk.hex(mastra.purple)('build')} → ${theme.fg('text', pack.models.build)}`,\n ` ${chalk.hex(mastra.green)('fast')} → ${theme.fg('text', pack.models.fast)}`,\n ].join('\\n');\n this.modePackDetail.setText(detail);\n }\n this.tui.requestRender();\n }\n\n // ---------------------------------------------------------------------------\n // Custom pack flow — sequential model selection for each mode\n // ---------------------------------------------------------------------------\n\n private async promptCustomPackName(): Promise<string | null> {\n return new Promise(resolve => {\n const question = new AskQuestionInlineComponent(\n {\n question: 'Name this custom pack',\n formatResult: answer => `Custom pack: ${answer}`,\n onSubmit: answer => {\n this.activeInlineQuestion = undefined;\n const trimmed = answer.trim();\n resolve(trimmed.length > 0 ? trimmed : null);\n },\n onCancel: () => {\n this.activeInlineQuestion = undefined;\n resolve(null);\n },\n },\n this.tui,\n );\n\n this.activeInlineQuestion = question;\n this.stepBox.addChild(new Spacer(1));\n this.stepBox.addChild(question);\n this.tui.requestRender();\n });\n }\n\n private async runCustomPackFlow(): Promise<void> {\n // Clear the pack selector so it doesn't capture input while overlays are shown\n this.selectList = undefined;\n\n const packName = await this.promptCustomPackName();\n if (!packName) {\n const fallback = this.options.modePacks.find(p => p.id !== 'custom') ?? this.options.modePacks[0]!;\n this.selectedModePack = fallback;\n this.collapseStep(`Model pack → ${theme.bold(this.selectedModePack.name)} (cancelled custom)`);\n this.renderStep('omPack');\n this.tui.requestRender();\n return;\n }\n\n this.collapseStep(`Model pack → Custom (${packName})`);\n\n const modes: Array<{ id: 'plan' | 'build' | 'fast'; label: string; color: string }> = [\n { id: 'plan', label: 'plan', color: mastra.purple },\n { id: 'build', label: 'build', color: mastra.green },\n { id: 'fast', label: 'fast', color: mastra.orange },\n ];\n\n const models: Record<string, string> = { build: '', plan: '', fast: '' };\n\n for (const mode of modes) {\n const title = `Select model for ${mode.label} mode`;\n const modelId = await this.options.onSelectModel(title, mode.color);\n\n if (!modelId) {\n // User cancelled — fall back to first non-custom pack (or keep current)\n const fallback = this.options.modePacks.find(p => p.id !== 'custom') ?? this.options.modePacks[0]!;\n this.selectedModePack = fallback;\n this.collapseStep(`Model pack → ${theme.bold(this.selectedModePack.name)} (cancelled custom)`);\n this.renderStep('omPack');\n this.tui.requestRender();\n return;\n }\n\n models[mode.id] = modelId;\n }\n\n this.selectedModePack = {\n id: `custom:${packName}`,\n name: packName,\n description: 'Saved custom pack',\n models: { build: models.build!, plan: models.plan!, fast: models.fast! },\n };\n\n this.collapseStep(\n `Model pack → ${theme.bold(packName)} ` +\n `${chalk.hex(mastra.blue)('plan')} ${models.plan} ` +\n `${chalk.hex(mastra.purple)('build')} ${models.build} ` +\n `${chalk.hex(mastra.green)('fast')} ${models.fast}`,\n );\n this.renderStep('omPack');\n this.tui.requestRender();\n }\n\n // ---------------------------------------------------------------------------\n // Step: OM pack\n // ---------------------------------------------------------------------------\n\n private renderOmPack(): void {\n const omPacks = this.options.omPacks;\n\n // If no OM packs at all (unlikely — would mean zero supported providers),\n // skip to next step\n if (omPacks.length === 0) {\n this.renderStep('yolo');\n return;\n }\n\n const box = this.makeBox();\n box.addChild(new Text(theme.bold(theme.fg('accent', '🧠 Observational Memory')), 0, 0));\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('text', 'Choose the model for observational memory:'), 0, 0));\n box.addChild(new Text(theme.fg('dim', 'https://mastra.ai/docs/memory/observational-memory'), 0, 0));\n box.addChild(new Spacer(1));\n\n const prevOmId = this.options.previous?.omPackId ?? null;\n const items: SelectItem[] = omPacks.map(p => ({\n value: p.id,\n label: ` ${p.name} ${theme.fg('dim', p.description)}${p.id === prevOmId ? theme.fg('dim', ' (current)') : ''}`,\n }));\n\n this.selectList = new SelectList(items, items.length, getSelectListTheme());\n\n // Pre-select the previously chosen OM pack\n const prevOmIdx = prevOmId ? omPacks.findIndex(p => p.id === prevOmId) : -1;\n if (prevOmIdx > 0) this.selectList.setSelectedIndex(prevOmIdx);\n\n this.selectList.onSelect = (item: SelectItem) => {\n const pack = omPacks.find(p => p.id === item.value) ?? omPacks[0]!;\n if (pack.id === 'custom') {\n this.runCustomOmFlow();\n } else {\n this.selectedOmPack = pack;\n this.collapseStep(`Observational memory → ${theme.bold(this.selectedOmPack.name)}`);\n this.renderStep('yolo');\n }\n };\n this.selectList.onCancel = () => {\n this.collapseStep(`Observational memory → ${theme.bold(this.selectedOmPack.name)} (default)`);\n this.renderStep('yolo');\n };\n\n box.addChild(this.selectList);\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc use default'), 0, 0));\n }\n\n private async runCustomOmFlow(): Promise<void> {\n this.selectList = undefined;\n this.collapseStep(`Observational memory → ${theme.bold('Custom')}`);\n\n const modelId = await this.options.onSelectModel('Select model for observational memory');\n if (modelId) {\n this.selectedOmPack = { id: 'custom', name: 'Custom', description: 'User-selected model', modelId };\n this.collapseStep(`Observational memory → ${theme.bold('Custom')} ${modelId}`);\n } else {\n // Cancelled — fall back to first non-custom pack\n const fallback = this.options.omPacks.find(p => p.id !== 'custom');\n if (fallback) {\n this.selectedOmPack = fallback;\n this.collapseStep(`Observational memory → ${theme.bold(fallback.name)} (cancelled custom)`);\n } else {\n this.collapseStep(`Observational memory → ${theme.bold('Custom')} (cancelled)`);\n }\n }\n this.renderStep('yolo');\n this.tui.requestRender();\n }\n\n // ---------------------------------------------------------------------------\n // Step: YOLO mode\n // ---------------------------------------------------------------------------\n\n private renderYolo(): void {\n const box = this.makeBox();\n box.addChild(new Text(theme.bold(theme.fg('accent', '⚡ Tool Approval')), 0, 0));\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('text', 'YOLO mode auto-approves all tool calls (edits, commands, etc).'), 0, 0));\n box.addChild(new Text(theme.fg('text', 'You can toggle this anytime with Ctrl+Y or /yolo.'), 0, 0));\n box.addChild(new Spacer(1));\n\n const prevYolo = this.options.previous?.yolo ?? null;\n const currentOn = prevYolo === true ? theme.fg('dim', ' (current)') : '';\n const currentOff = prevYolo === false ? theme.fg('dim', ' (current)') : '';\n const items: SelectItem[] = [\n {\n value: 'on',\n label: ` ${theme.fg('success', 'Enable YOLO')} ${theme.fg('dim', '(recommended — auto-approve everything)')}${currentOn}`,\n },\n {\n value: 'off',\n label: ` ${theme.fg('warning', 'Disable YOLO')} ${theme.fg('dim', '(ask before each tool call)')}${currentOff}`,\n },\n ];\n\n this.selectList = new SelectList(items, items.length, getSelectListTheme());\n\n // Pre-select the previously chosen YOLO setting\n if (prevYolo === false) this.selectList.setSelectedIndex(1);\n this.selectList.onSelect = (item: SelectItem) => {\n this.selectedYolo = item.value === 'on';\n const label = this.selectedYolo ? 'enabled' : 'disabled';\n this.collapseStep(`YOLO mode → ${theme.bold(label)}`);\n this.renderStep('done');\n };\n this.selectList.onCancel = () => {\n this.collapseStep(`YOLO mode → ${theme.bold('enabled')} (default)`);\n this.renderStep('done');\n };\n\n box.addChild(this.selectList);\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc use default'), 0, 0));\n }\n\n // ---------------------------------------------------------------------------\n // Step: Done\n // ---------------------------------------------------------------------------\n\n private renderDone(): void {\n this._finished = true;\n const box = this.makeBox();\n box.addChild(new Text(theme.bold(theme.fg('success', '✓ Setup complete!')), 0, 0));\n box.addChild(new Spacer(1));\n\n const lines = [\n `Model pack: ${theme.bold(this.selectedModePack.name)}`,\n ` ${chalk.hex(mastra.blue)('plan')} → ${this.selectedModePack.models.plan}`,\n ` ${chalk.hex(mastra.purple)('build')} → ${this.selectedModePack.models.build}`,\n ` ${chalk.hex(mastra.green)('fast')} → ${this.selectedModePack.models.fast}`,\n `Observational memory: ${theme.bold(this.selectedOmPack.name)}`,\n `YOLO mode: ${theme.bold(this.selectedYolo ? 'enabled' : 'disabled')}`,\n ];\n for (const line of lines) {\n box.addChild(new Text(theme.fg('text', line), 0, 0));\n }\n box.addChild(new Spacer(1));\n box.addChild(new Text(theme.fg('dim', 'Type a message to start coding, or use /help for commands.'), 0, 0));\n\n this.options.onComplete({\n modePack: this.selectedModePack,\n omPack: this.selectedOmPack,\n yolo: this.selectedYolo,\n loginRequested: this.loginRequested,\n loginProvider: this.loginProvider,\n });\n }\n\n // ---------------------------------------------------------------------------\n // Collapse a completed step into a single summary line\n // ---------------------------------------------------------------------------\n\n private collapseStep(summary: string): void {\n if (!this.stepBox) return;\n this.stepBox.clear();\n this.stepBox.setBgFn((text: string) => theme.bg('overlayBg', text));\n this.stepBox.addChild(new Text(`${theme.fg('success', '✓')} ${theme.fg('text', summary)}`, 0, 0));\n this.selectList = undefined;\n this.activeInlineQuestion = undefined;\n }\n\n // ---------------------------------------------------------------------------\n // Input handling\n // ---------------------------------------------------------------------------\n\n handleInput(data: string): void {\n if (this._finished) return;\n\n if (this.activeInlineQuestion) {\n this.activeInlineQuestion.handleInput(data);\n return;\n }\n\n if (this.selectList) {\n this.selectList.handleInput(data);\n return;\n }\n }\n}\n","/**\n * Check for newer versions of mastracode on npm.\n */\n\nimport { execFile } from 'node:child_process';\nimport { readFileSync, realpathSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\ndeclare const MASTRACODE_VERSION: string | undefined;\n\nconst PACKAGE_NAME = 'mastracode';\nconst NPM_REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;\n\n/** Timeout for the npm registry fetch (ms). */\nconst FETCH_TIMEOUT_MS = 5_000;\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nfunction matchPM(str: string): PackageManager | null {\n // Order matters: check pnpm before npm since \"npm\" is a substring of some paths\n if (/pnpm/i.test(str)) return 'pnpm';\n if (/\\byarn\\b/i.test(str)) return 'yarn';\n if (/\\bbun\\b/i.test(str)) return 'bun';\n if (/\\bnpm\\b/i.test(str)) return 'npm';\n return null;\n}\n\n/**\n * Detect which package manager was used to install mastracode globally.\n *\n * Uses a multi-tier approach:\n * 1. npm_config_user_agent env var (set when run via `pnpm run`, `npm run`, etc.)\n * 2. npm_execpath env var (fallback for script-based invocation)\n * 3. NODE_PATH env var (set by pnpm global bin stubs)\n * 4. Resolved path of the running script (process.argv[1])\n * 5. Shell-out to `pnpm list -g` to check if pnpm manages the package\n * 6. Falls back to 'npm'\n */\nexport async function detectPackageManager(): Promise<PackageManager> {\n // Tier 1: npm_config_user_agent (most reliable when available)\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent) {\n const pm = matchPM(userAgent);\n if (pm) return pm;\n }\n\n // Tier 2: npm_execpath\n const execPath = process.env.npm_execpath;\n if (execPath) {\n const pm = matchPM(execPath);\n if (pm) return pm;\n }\n\n // Tier 3: NODE_PATH (pnpm global stubs set this to paths containing .pnpm)\n const nodePath = process.env.NODE_PATH;\n if (nodePath) {\n if (/[/\\\\]\\.pnpm[/\\\\]/.test(nodePath) || /[/\\\\]pnpm[/\\\\]/.test(nodePath)) return 'pnpm';\n if (/[/\\\\]\\.yarn[/\\\\]/.test(nodePath)) return 'yarn';\n if (/[/\\\\]\\.bun[/\\\\]/.test(nodePath)) return 'bun';\n }\n\n // Tier 4: Resolved script path\n try {\n const scriptPath = realpathSync(process.argv[1] ?? '');\n if (/[/\\\\]\\.?pnpm[/\\\\]/.test(scriptPath)) return 'pnpm';\n if (/[/\\\\]\\.?yarn[/\\\\]/.test(scriptPath)) return 'yarn';\n if (/[/\\\\]\\.?bun[/\\\\]/.test(scriptPath)) return 'bun';\n } catch {\n // realpathSync can fail if argv[1] is missing/broken — fall through\n }\n\n // Tier 5: Check if the package is in pnpm's global store (non-blocking)\n const pnpmResult = await new Promise<boolean>(resolve => {\n execFile('pnpm', ['list', '-g', '--depth=0', PACKAGE_NAME], { timeout: 3_000 }, (error, stdout) => {\n resolve(!error && stdout.includes(PACKAGE_NAME));\n });\n });\n if (pnpmResult) return 'pnpm';\n\n return 'npm';\n}\n\n/**\n * Build the shell command string a user would run to install/update globally.\n */\nexport function getInstallCommand(pm: PackageManager, version?: string): string {\n const pkg = version ? `${PACKAGE_NAME}@${version}` : `${PACKAGE_NAME}@latest`;\n switch (pm) {\n case 'pnpm':\n return `pnpm add -g ${pkg}`;\n case 'yarn':\n return `yarn global add ${pkg}`;\n case 'bun':\n return `bun add -g ${pkg}`;\n default:\n return `npm install -g ${pkg}`;\n }\n}\n\n/**\n * Read the current version, injected at build time by tsup's `define` option.\n * Falls back to reading package.json at runtime (e.g. when running from source with tsx).\n */\nexport function getCurrentVersion(): string {\n if (typeof MASTRACODE_VERSION !== 'undefined') {\n return MASTRACODE_VERSION;\n }\n // Fallback for running from source (e.g. pnpx tsx mastracode/src/main.ts)\n const dir = dirname(fileURLToPath(import.meta.url));\n const pkgPath = resolve(dir, '../../package.json');\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return pkg.version;\n}\n\n/**\n * Fetch the latest published version from npm.\n * Returns null if the fetch fails (network error, timeout, etc.).\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n const res = await fetch(NPM_REGISTRY_URL, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Simple semver comparison: returns true if `latest` is newer than `current`.\n * Handles standard x.y.z versions. Ignores pre-release tags.\n */\nexport function isNewerVersion(current: string, latest: string): boolean {\n const parse = (v: string) =>\n v\n .replace(/^v/, '')\n .split('-')[0]!\n .split('.')\n .map(s => {\n const n = Number(s);\n return Number.isFinite(n) ? n : 0;\n });\n const [cMajor = 0, cMinor = 0, cPatch = 0] = parse(current);\n const [lMajor = 0, lMinor = 0, lPatch = 0] = parse(latest);\n if (lMajor !== cMajor) return lMajor > cMajor;\n if (lMinor !== cMinor) return lMinor > cMinor;\n return lPatch > cPatch;\n}\n\n/** Max entries to show in the changelog summary. */\nconst MAX_CHANGELOG_ENTRIES = 20;\n\n/**\n * Fetch the CHANGELOG.md for a specific published version from the npm CDN\n * and extract a human-readable summary of changes.\n * Returns null if the fetch fails or the changelog can't be parsed.\n */\nexport async function fetchChangelog(version: string): Promise<string | null> {\n try {\n const url = `https://unpkg.com/${PACKAGE_NAME}@${version}/CHANGELOG.md`;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);\n const res = await fetch(url, { signal: controller.signal });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const text = await res.text();\n return parseChangelog(text, version);\n } catch {\n return null;\n }\n}\n\n/**\n * Extract the changelog section for a specific version and format it\n * as a concise bullet list suitable for terminal display.\n */\nexport function parseChangelog(markdown: string, version: string): string | null {\n const versionHeader = `## ${version}`;\n const startIdx = markdown.indexOf(versionHeader);\n if (startIdx === -1) return null;\n\n const afterHeader = startIdx + versionHeader.length;\n const nextHeaderIdx = markdown.indexOf('\\n## ', afterHeader);\n const section = nextHeaderIdx === -1 ? markdown.slice(afterHeader) : markdown.slice(afterHeader, nextHeaderIdx);\n\n const lines = section.split('\\n');\n const entries: string[] = [];\n let skipIndented = false;\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i]!;\n const trimmed = raw.trim();\n\n // Only match top-level entries (no leading whitespace before \"- \")\n const isTopLevel = raw === trimmed && trimmed.startsWith('- ');\n if (!isTopLevel) {\n // Skip indented sub-items (e.g. dependency list entries)\n if (skipIndented && /^\\s+-\\s/.test(raw)) continue;\n skipIndented = false;\n continue;\n }\n\n // Skip dependency update entries and their sub-items\n if (/^- Updated dependenc/i.test(trimmed)) {\n skipIndented = true;\n continue;\n }\n skipIndented = false;\n\n let entry = trimmed.slice(2);\n // Strip markdown links: [text](url) → text\n entry = entry.replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1');\n // Strip PR references like (#15760)\n entry = entry.replace(/\\s*\\(#\\d+\\)\\s*/g, ' ');\n // Strip commit SHA references like (`abc123`)\n entry = entry.replace(/\\s*\\(`[a-f0-9]+`\\)\\s*/g, ' ');\n // Trim trailing periods for cleaner bullet display\n entry = entry.replace(/\\.\\s*$/, '');\n entry = entry.trim();\n if (entry) entries.push(entry);\n if (entries.length >= MAX_CHANGELOG_ENTRIES) break;\n }\n\n if (entries.length === 0) return null;\n return entries.map(e => ` • ${e}`).join('\\n');\n}\n\n/**\n * Run the appropriate global install command to update mastracode.\n * Returns true on success, false on failure.\n */\nexport function runUpdate(pm: PackageManager, targetVersion: string): Promise<boolean> {\n const args = buildInstallArgs(pm, targetVersion);\n return new Promise(resolve => {\n execFile(pm, args, { timeout: 60_000 }, error => {\n resolve(!error);\n });\n });\n}\n\nfunction buildInstallArgs(pm: PackageManager, version: string): string[] {\n const pkg = `${PACKAGE_NAME}@${version}`;\n switch (pm) {\n case 'pnpm':\n return ['add', '-g', pkg];\n case 'yarn':\n return ['global', 'add', pkg];\n case 'bun':\n return ['add', '-g', pkg];\n default:\n return ['install', '-g', pkg];\n }\n}\n","import { Spacer } from '@earendil-works/pi-tui';\n\n/**\n * Static spacer placed above a chat component.\n *\n * Height is set once during reconciliation via `setLines()` and stays\n * fixed until the next reconciliation pass — no per-frame recomputation.\n */\nexport class ChatBoundarySpacer extends Spacer {\n readonly isChatBoundarySpacer = true;\n\n constructor(lines = 1) {\n super(lines);\n }\n}\n\nexport function isChatBoundarySpacer(component: unknown): component is ChatBoundarySpacer {\n return !!component && (component as { isChatBoundarySpacer?: boolean }).isChatBoundarySpacer === true;\n}\n","import type { Component } from '@earendil-works/pi-tui';\n\nexport type ChatSpacingKind =\n | 'quiet-compact-tool'\n | 'quiet-shell-tool'\n | 'normal-tool'\n | 'assistant-message'\n | 'user-message'\n | 'plan'\n | 'task'\n | 'system'\n | 'other';\n\nexport interface ChatSpacingParticipant {\n getChatSpacingKind(): ChatSpacingKind | undefined;\n}\n\ninterface CompactToolSpacingParticipant {\n getCompactToolGroupKey?(): string | undefined;\n hasQuietStreamingPreview?(): boolean;\n}\n\nexport function getChatSpacingKind(component: Component | undefined): ChatSpacingKind | undefined {\n const participant = component as Partial<ChatSpacingParticipant> | undefined;\n return participant?.getChatSpacingKind?.();\n}\n\nexport function getSpacingBetweenComponents(\n prev: Component | undefined,\n next: Component | undefined,\n _prevPrev?: Component | undefined,\n _nextNext?: Component | undefined,\n): number {\n const prevKind = getChatSpacingKind(prev);\n const nextKind = getChatSpacingKind(next);\n\n if (prevKind === 'quiet-compact-tool' && nextKind === 'quiet-compact-tool') {\n const prevKey = getCompactToolGroupKey(prev);\n const nextKey = getCompactToolGroupKey(next);\n if (prevKey && nextKey && prevKey === nextKey) return 0;\n return 1;\n }\n if (hasQuietStreamingPreview(prev) || hasQuietStreamingPreview(next)) return 1;\n return getSpacingBetween(prevKind, nextKind);\n}\n\nfunction getCompactToolGroupKey(component: Component | undefined): string | undefined {\n return (component as CompactToolSpacingParticipant | undefined)?.getCompactToolGroupKey?.();\n}\n\nfunction hasQuietStreamingPreview(component: Component | undefined): boolean {\n return (component as CompactToolSpacingParticipant | undefined)?.hasQuietStreamingPreview?.() ?? false;\n}\n\nexport function getSpacingBetween(prev: ChatSpacingKind | undefined, next: ChatSpacingKind | undefined): number {\n if (!prev || !next) return 0;\n if (prev === 'quiet-compact-tool' && next === 'quiet-compact-tool') return 0;\n if (isToolSpacingKind(prev) && next === 'assistant-message') return 1;\n if (prev === 'assistant-message' && isToolSpacingKind(next)) return 1;\n return 1;\n}\n\nfunction isToolSpacingKind(kind: ChatSpacingKind | undefined): boolean {\n return kind === 'quiet-compact-tool' || kind === 'quiet-shell-tool' || kind === 'normal-tool';\n}\n","import type { Component, Container } from '@earendil-works/pi-tui';\nimport { ChatBoundarySpacer, isChatBoundarySpacer } from './components/chat-boundary-spacer.js';\nimport { getChatSpacingKind, getSpacingBetweenComponents } from './components/chat-spacing.js';\nimport type { CompactToolLabelColor } from './components/tool-execution-interface.js';\n\ninterface CompactToolGroupingParticipant {\n getCompactToolGroupKey?(): string | undefined;\n getCompactToolGroupSummary?(): string | undefined;\n getOwnCompactToolLabelColor?(): CompactToolLabelColor | undefined;\n setCompactToolGroupLabelColor?(color: CompactToolLabelColor | undefined): void;\n setCompactToolContinuation?(continuation: boolean, previousSummary?: string): void;\n setCompactToolHasFollowingContinuation?(hasFollowingContinuation: boolean): void;\n}\n\n/**\n * Insert a chat component into the container and reconcile spacing.\n *\n * The component is spliced at `index` and then a single reconciliation\n * pass places static spacers above each component that needs one.\n */\nexport function insertChatComponentWithBoundarySpacing(\n chatContainer: Container,\n child: Component,\n index = chatContainer.children.length,\n): void {\n const children = chatContainer.children as Component[];\n const boundedIndex = Math.max(0, Math.min(index, children.length));\n children.splice(boundedIndex, 0, child);\n reconcileChatBoundarySpacers(chatContainer);\n}\n\nfunction findNextSpacingComponentInList(components: Component[], index: number): Component | undefined {\n for (let i = index + 1; i < components.length; i++) {\n const child = components[i];\n if (child && getChatSpacingKind(child)) return child;\n }\n return undefined;\n}\n\n/**\n * Rebuild the spacing layout for a chat container.\n *\n * Places one static {@link ChatBoundarySpacer} above each component that\n * participates in spacing (has a `getChatSpacingKind`) and has a preceding\n * spacing participant. Spacer heights are computed once via\n * `getSpacingBetweenComponents` — no per-frame recomputation.\n *\n * Existing spacer instances are reused (via `setLines`) to minimise\n * object churn and avoid identity-change flicker.\n */\nexport function reconcileChatBoundarySpacers(chatContainer: Container): void {\n const children = chatContainer.children as Component[];\n const components = children.filter(child => !isChatBoundarySpacer(child));\n\n // Pool existing spacers for reuse so we keep the same object identity\n // where possible, reducing object churn.\n const spacerPool = children.filter(isChatBoundarySpacer);\n let poolIndex = 0;\n\n const nextChildren: Component[] = [];\n let previousCompactToolGroupKey: string | undefined;\n let previousCompactToolSummary: string | undefined;\n let currentCompactRun: CompactToolGroupingParticipant[] = [];\n let previousSpacingComponent: Component | undefined;\n\n const flushCompactRunColor = () => {\n const color = getCompactRunLabelColor(currentCompactRun);\n for (const participant of currentCompactRun) {\n participant.setCompactToolGroupLabelColor?.(color);\n }\n currentCompactRun = [];\n };\n\n for (let i = 0; i < components.length; i++) {\n const component = components[i]!;\n\n // --- compact-tool grouping (unchanged logic) --------------------------\n const participant = component as CompactToolGroupingParticipant;\n const compactToolGroupKey = participant.getCompactToolGroupKey?.();\n const compactToolGroupSummary = participant.getCompactToolGroupSummary?.();\n const next = findNextSpacingComponentInList(components, i);\n const nextParticipant = next as CompactToolGroupingParticipant | undefined;\n const nextCompactToolGroupKey = nextParticipant?.getCompactToolGroupKey?.();\n const isContinuation = !!compactToolGroupKey && compactToolGroupKey === previousCompactToolGroupKey;\n participant.setCompactToolContinuation?.(isContinuation, isContinuation ? previousCompactToolSummary : undefined);\n participant.setCompactToolHasFollowingContinuation?.(\n !!compactToolGroupKey && compactToolGroupKey === nextCompactToolGroupKey,\n );\n if (compactToolGroupKey) {\n if (!isContinuation) flushCompactRunColor();\n currentCompactRun.push(participant);\n } else {\n flushCompactRunColor();\n participant.setCompactToolGroupLabelColor?.(undefined);\n }\n if (getChatSpacingKind(component)) {\n previousCompactToolGroupKey = compactToolGroupKey;\n previousCompactToolSummary = compactToolGroupSummary;\n }\n\n // --- spacer above this component --------------------------------------\n if (getChatSpacingKind(component) && previousSpacingComponent) {\n const spacing = getSpacingBetweenComponents(previousSpacingComponent, component);\n if (spacing > 0) {\n let spacer: ChatBoundarySpacer;\n if (poolIndex < spacerPool.length) {\n spacer = spacerPool[poolIndex]!;\n spacer.setLines(spacing);\n poolIndex++;\n } else {\n spacer = new ChatBoundarySpacer(spacing);\n }\n nextChildren.push(spacer);\n }\n }\n\n if (getChatSpacingKind(component)) {\n previousSpacingComponent = component;\n }\n\n nextChildren.push(component);\n }\n\n flushCompactRunColor();\n chatContainer.children = nextChildren as never[];\n chatContainer.invalidate();\n}\n\nfunction getCompactRunLabelColor(participants: CompactToolGroupingParticipant[]): CompactToolLabelColor | undefined {\n if (participants.length <= 1) return undefined;\n if (participants.some(participant => participant.getOwnCompactToolLabelColor?.() === 'error')) return 'error';\n return 'toolTitle';\n}\n","import { execSync } from 'node:child_process';\nimport { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\nimport type { SlashCommandMetadata } from './slash-command-loader.js';\n\n/**\n * Process a slash command by replacing variables and executing shell commands\n */\nexport async function processSlashCommand(\n command: SlashCommandMetadata,\n args: string[],\n workingDir: string,\n): Promise<string> {\n const { result: withArgs, shouldAppendRawArgs } = replaceArguments(command.template, args);\n let result = withArgs;\n\n // Replace shell commands\n result = await replaceShellOutput(result, workingDir);\n\n // Replace file references\n result = await replaceFileReferences(result, workingDir);\n\n // Append raw args after shell/file processing to avoid executing user input\n if (shouldAppendRawArgs) {\n result = result.trimEnd() + `\\n\\nARGUMENTS: ${args.join(' ')}`;\n }\n\n return result;\n}\n\n/**\n * Replace argument variables in template\n * $ARGUMENTS - all arguments joined\n * $1, $2, etc. - positional arguments\n */\nfunction replaceArguments(template: string, args: string[]): { result: string; shouldAppendRawArgs: boolean } {\n let result = template;\n\n // Check if template references any argument variables\n const hasArgumentsVar = /\\$ARGUMENTS/.test(template);\n const hasPositionalVar = /\\$[1-9]\\d*/.test(template);\n\n // Replace $ARGUMENTS with all args joined\n result = result.replace(/\\$ARGUMENTS/g, args.join(' '));\n\n // Replace range arguments $1+, $2+, etc. before single positional arguments.\n args.forEach((_, index) => {\n const argNumber = index + 1;\n const pattern = new RegExp(`\\\\\\$${argNumber}\\\\+`, 'g');\n result = result.replace(pattern, args.slice(index).join(' '));\n });\n\n // Replace positional arguments $1, $2, etc.\n args.forEach((arg, index) => {\n const pattern = new RegExp(`\\\\\\$${index + 1}`, 'g');\n result = result.replace(pattern, arg);\n });\n\n // Clear unused positional and range arguments\n result = result.replace(/\\$[1-9]\\d*\\+?/g, '');\n\n return {\n result,\n shouldAppendRawArgs: !hasArgumentsVar && !hasPositionalVar && args.length > 0,\n };\n}\n\n/**\n * Replace shell command references with their output\n * Format: !`command`\n */\nasync function replaceShellOutput(template: string, workingDir: string): Promise<string> {\n const shellPattern = /!`([^`]+)`/g;\n const matches = [...template.matchAll(shellPattern)];\n\n let result = template;\n for (const match of matches) {\n const [fullMatch, command] = match;\n try {\n const output = execSync(command!, {\n cwd: workingDir,\n encoding: 'utf-8',\n timeout: 30000,\n maxBuffer: 1024 * 1024, // 1MB buffer\n });\n result = result.replace(fullMatch, output.trim());\n } catch (error) {\n console.error(`Error executing shell command \"${command}\":`, error);\n result = result.replace(fullMatch, `[Error: Failed to execute \"${command}\"]`);\n }\n }\n\n return result;\n}\n\n/**\n * Replace file references with file content\n * Format: @filename or @path/to/file\n */\nasync function replaceFileReferences(template: string, workingDir: string): Promise<string> {\n const filePattern = /@([\\w./-]+)/g;\n const matches = [...template.matchAll(filePattern)];\n\n let result = template;\n for (const match of matches) {\n const [fullMatch, filePath] = match;\n try {\n const fullPath = path.resolve(workingDir, filePath!);\n const content = await fs.readFile(fullPath, 'utf-8');\n result = result.replace(fullMatch, content);\n } catch {\n // Leave literal @mentions/search qualifiers such as @me intact when they do not resolve to files.\n }\n }\n\n return result;\n}\n\n/**\n * Format a command for display in help/autocomplete\n */\nexport function formatCommandForDisplay(command: SlashCommandMetadata): string {\n const parts = [command.name];\n\n if (command.description) {\n parts.push(`- ${command.description}`);\n }\n\n return parts.join(' ');\n}\n\n/**\n * Group commands by namespace for display\n */\nexport function groupCommandsByNamespace(commands: SlashCommandMetadata[]): Map<string, SlashCommandMetadata[]> {\n const groups = new Map<string, SlashCommandMetadata[]>();\n\n for (const command of commands) {\n const namespace = command.namespace || command.name.split(':')[0] || 'general';\n\n if (!groups.has(namespace)) {\n groups.set(namespace, []);\n }\n\n groups.get(namespace)!.push(command);\n }\n\n return groups;\n}\n","/**\n * Goal max-cycles input dialog.\n * Shows a preconfigured input with the current default value that the user can edit.\n */\n\nimport { Box, getKeybindings, Input, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable } from '@earendil-works/pi-tui';\n\nimport { theme } from '../theme.js';\n\nexport interface GoalCyclesDialogOptions {\n defaultValue: number;\n onSubmit: (maxCycles: number) => void;\n onCancel: () => void;\n}\n\nexport class GoalCyclesDialogComponent extends Box implements Focusable {\n private input: Input;\n private onSubmit: (maxCycles: number) => void;\n private onCancel: () => void;\n\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n this.input.focused = value;\n }\n\n constructor(options: GoalCyclesDialogOptions) {\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.onSubmit = options.onSubmit;\n this.onCancel = options.onCancel;\n\n this.addChild(new Text(theme.bold(theme.fg('accent', 'Max Attempts')), 0, 0));\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('text', 'How many attempts before pausing the goal?'), 0, 0));\n this.addChild(new Spacer(1));\n\n this.input = new Input();\n this.input.setValue(String(options.defaultValue));\n this.input.onSubmit = (value: string) => {\n const parsed = parseInt(value.trim(), 10);\n if (isNaN(parsed) || parsed < 1) {\n this.onSubmit(options.defaultValue);\n } else {\n this.onSubmit(parsed);\n }\n };\n this.addChild(this.input);\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('dim', ' Enter to confirm · Esc to cancel'), 0, 0));\n }\n\n handleInput(data: string): void {\n const kb = getKeybindings();\n if (kb.matches(data, 'tui.select.cancel')) {\n this.onCancel();\n return;\n }\n this.input.handleInput(data);\n }\n}\n","/**\n * Model selector component for switching between available models.\n * Uses pi-tui overlay pattern with search and fuzzy filtering.\n */\n\nimport { Box, Container, fuzzyFilter, getKeybindings, Input, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable, TUI } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { theme } from '../theme.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ModelItem {\n /** Full model ID (e.g., \"anthropic/claude-sonnet-4\") */\n id: string;\n /** Provider name (e.g., \"anthropic\") */\n provider: string;\n /** Model name without provider (e.g., \"claude-sonnet-4\") */\n modelName: string;\n /** Whether the API key for this provider is available */\n hasApiKey: boolean;\n /** Environment variable name for the API key (e.g., \"ANTHROPIC_API_KEY\") */\n apiKeyEnvVar?: string;\n /** Number of times this model has been selected (for ranking) */\n useCount?: number;\n}\n\nexport interface ModelSelectorOptions {\n /** TUI instance for rendering */\n tui: TUI;\n /** List of available models */\n models: ModelItem[];\n /** Currently selected model ID */\n currentModelId?: string;\n /** Optional title for the selector */\n title?: string;\n /** Optional hex color for the title background (e.g. mode color) */\n titleColor?: string;\n /** Callback when a model is selected */\n onSelect: (model: ModelItem) => void;\n /** Callback when selection is cancelled */\n onCancel: () => void;\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/**\n * Build a synthetic \"Use: <id>\" ModelItem for an arbitrary model id typed by\n * the user. The provider prefix is parsed from the id; key metadata is\n * derived from any sibling model that already lives under the same provider\n * so the API-key prompt still fires for known providers without a key.\n *\n * If no sibling is found (truly novel provider), we default `hasApiKey: false`\n * so the user is still prompted for a key by provider name.\n */\nexport function makeCustomModelItem(id: string, models: ModelItem[]): ModelItem {\n const parts = id.split('/');\n const provider = parts.length > 1 ? parts[0]! : 'custom';\n const modelName = parts.length > 1 ? parts.slice(1).join('/') : id;\n const sibling = models.find(m => m.provider === provider);\n return {\n id,\n provider,\n modelName,\n hasApiKey: sibling?.hasApiKey ?? false,\n apiKeyEnvVar: sibling?.apiKeyEnvVar,\n };\n}\n\n// =============================================================================\n// ModelSelectorComponent\n// =============================================================================\n\nexport class ModelSelectorComponent extends Box implements Focusable {\n private searchInput!: Input;\n private listContainer!: Container;\n private allModels: ModelItem[];\n private filteredModels: ModelItem[];\n private selectedIndex = 0;\n private currentModelId?: string;\n private onSelectCallback: (model: ModelItem) => void;\n private onCancelCallback: () => void;\n private tui: TUI;\n private title: string;\n private titleColor?: string;\n\n // Focusable implementation\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n this.searchInput.focused = value;\n }\n\n constructor(options: ModelSelectorOptions) {\n // Box with padding and background\n super(4, 2, text => theme.bg('overlayBg', text));\n\n this.tui = options.tui;\n this.title = options.title ?? 'Select Model';\n this.titleColor = options.titleColor;\n this.allModels = this.sortModels(options.models, options.currentModelId);\n this.currentModelId = options.currentModelId;\n this.onSelectCallback = options.onSelect;\n this.onCancelCallback = options.onCancel;\n this.filteredModels = this.allModels;\n\n // Build UI\n this.buildUI();\n }\n\n private buildUI(): void {\n // Title — optionally with a mode-colored background\n const titleText = this.titleColor\n ? chalk.bgHex(this.titleColor).white.bold(` ${this.title} `)\n : theme.bold(theme.fg('accent', this.title));\n this.addChild(new Text(titleText, 0, 0));\n this.addChild(new Spacer(1));\n\n // Hint\n this.addChild(new Text(theme.fg('muted', 'Type to search • ↑↓ navigate • Enter select • Esc cancel'), 0, 0));\n this.addChild(new Spacer(1));\n\n // Search input (Input has built-in \"> \" prompt)\n this.searchInput = new Input();\n this.searchInput.onSubmit = () => {\n if (this.hasCustomItem && this.selectedIndex === 0) {\n const query = this.searchInput.getValue().trim();\n if (query) this.handleSelect(this.makeCustomModelItem(query));\n } else {\n const modelIndex = this.hasCustomItem ? this.selectedIndex - 1 : this.selectedIndex;\n const selected = this.filteredModels[modelIndex];\n if (selected) this.handleSelect(selected);\n }\n };\n this.addChild(this.searchInput);\n this.addChild(new Spacer(1));\n\n // List container\n this.listContainer = new Container();\n this.addChild(this.listContainer);\n\n // Initial render\n this.updateList();\n }\n\n private sortModels(models: ModelItem[], currentModelId?: string): ModelItem[] {\n const sorted = [...models];\n\n // Sort: current first, then API key available, then by use count (desc), then alphabetical\n sorted.sort((a, b) => {\n // Current model always first\n const aIsCurrent = a.id === currentModelId;\n const bIsCurrent = b.id === currentModelId;\n if (aIsCurrent && !bIsCurrent) return -1;\n if (!aIsCurrent && bIsCurrent) return 1;\n\n // Models with API keys come before those without\n if (a.hasApiKey && !b.hasApiKey) return -1;\n if (!a.hasApiKey && b.hasApiKey) return 1;\n\n // Then by use count (higher = first)\n const aCount = a.useCount ?? 0;\n const bCount = b.useCount ?? 0;\n if (aCount !== bCount) return bCount - aCount;\n\n // Then by provider\n const providerCompare = a.provider.localeCompare(b.provider);\n if (providerCompare !== 0) return providerCompare;\n\n // Then by model name\n return a.modelName.localeCompare(b.modelName);\n });\n\n return sorted;\n }\n\n /** Whether the custom \"Use: ...\" item is showing at the top */\n private hasCustomItem = false;\n\n private filterModels(query: string): void {\n // Apply fuzzy filter if there's a query, otherwise show all\n // Sorting already puts models with API keys first\n this.filteredModels = query\n ? fuzzyFilter(this.allModels, query, m => `${m.id} ${m.provider} ${m.modelName}`)\n : this.allModels;\n\n // Show \"Use: query\" custom item when query looks like a model ID\n // and doesn't exactly match the top result\n const trimmed = query.trim();\n this.hasCustomItem = trimmed.length > 0 && this.filteredModels[0]?.id !== trimmed;\n\n const totalItems = this.filteredModels.length + (this.hasCustomItem ? 1 : 0);\n this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, totalItems - 1));\n this.updateList();\n }\n\n private makeCustomModelItem(id: string): ModelItem {\n return makeCustomModelItem(id, this.allModels);\n }\n\n private updateList(): void {\n this.listContainer.clear();\n\n const totalItems = this.filteredModels.length + (this.hasCustomItem ? 1 : 0);\n const maxVisible = 12;\n const startIndex = Math.max(0, Math.min(this.selectedIndex - Math.floor(maxVisible / 2), totalItems - maxVisible));\n const endIndex = Math.min(startIndex + maxVisible, totalItems);\n\n for (let i = startIndex; i < endIndex; i++) {\n // First item is the custom \"Use: ...\" entry when active\n if (this.hasCustomItem && i === 0) {\n const query = this.searchInput.getValue().trim();\n const isSelected = this.selectedIndex === 0;\n const line = isSelected\n ? theme.fg('accent', '→ ') + theme.bold(theme.fg('accent', `Use: ${query}`))\n : ' ' + theme.fg('muted', `Use: ${query}`);\n this.listContainer.addChild(new Text(line, 0, 0));\n continue;\n }\n\n // Offset into filteredModels (subtract 1 when custom item is present)\n const modelIndex = this.hasCustomItem ? i - 1 : i;\n const item = this.filteredModels[modelIndex];\n if (!item) continue;\n\n const isSelected = i === this.selectedIndex;\n const isCurrent = item.id === this.currentModelId;\n const checkmark = isCurrent ? theme.fg('success', ' ✓') : '';\n const noKeyIndicator = !item.hasApiKey\n ? theme.fg('error', ' ✗') + theme.fg('muted', item.apiKeyEnvVar ? ` (${item.apiKeyEnvVar})` : ' (no key)')\n : '';\n\n let line = '';\n if (isSelected) {\n line = theme.fg('accent', '→ ' + item.id) + checkmark + noKeyIndicator;\n } else {\n const modelText = item.hasApiKey ? item.id : theme.fg('muted', item.id);\n line = ' ' + modelText + checkmark + noKeyIndicator;\n }\n\n this.listContainer.addChild(new Text(line, 0, 0));\n }\n\n // Scroll indicator\n if (startIndex > 0 || endIndex < totalItems) {\n const scrollInfo = theme.fg('muted', `(${this.selectedIndex + 1}/${totalItems})`);\n this.listContainer.addChild(new Text(scrollInfo, 0, 0));\n }\n\n // Empty state\n if (totalItems === 0) {\n this.listContainer.addChild(new Text(theme.fg('muted', 'No matching models'), 0, 0));\n }\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n\n const totalItems = this.filteredModels.length + (this.hasCustomItem ? 1 : 0);\n\n // Up arrow\n if (kb.matches(keyData, 'tui.select.up')) {\n if (totalItems === 0) return;\n this.selectedIndex = this.selectedIndex === 0 ? totalItems - 1 : this.selectedIndex - 1;\n this.updateList();\n this.tui.requestRender();\n }\n // Down arrow\n else if (kb.matches(keyData, 'tui.select.down')) {\n if (totalItems === 0) return;\n this.selectedIndex = this.selectedIndex === totalItems - 1 ? 0 : this.selectedIndex + 1;\n this.updateList();\n this.tui.requestRender();\n }\n // Enter\n else if (kb.matches(keyData, 'tui.select.confirm')) {\n if (this.hasCustomItem && this.selectedIndex === 0) {\n const query = this.searchInput.getValue().trim();\n if (query) this.handleSelect(this.makeCustomModelItem(query));\n } else {\n const modelIndex = this.hasCustomItem ? this.selectedIndex - 1 : this.selectedIndex;\n const selected = this.filteredModels[modelIndex];\n if (selected) this.handleSelect(selected);\n }\n }\n // Escape or Ctrl+C\n else if (kb.matches(keyData, 'tui.select.cancel')) {\n this.onCancelCallback();\n }\n // Pass everything else to search input\n else {\n this.searchInput.handleInput(keyData);\n this.filterModels(this.searchInput.getValue());\n this.tui.requestRender();\n }\n }\n\n private handleSelect(model: ModelItem): void {\n this.onSelectCallback(model);\n }\n\n getSearchInput(): Input {\n return this.searchInput;\n }\n}\n","/**\n * GoalManager — persistent cross-turn goals, backed by the Agent's native goal\n * mechanism.\n *\n * The objective lives in the durable `threadState` `'goal'` slot (via\n * `agent.setObjective`/`getObjective`/`clearObjective`/`updateObjectiveOptions`)\n * and is judged in-loop by the core goal step. This manager is a thin adapter:\n * it keeps a synchronous in-memory view of the current objective for the TUI\n * (status line, modal, keyboard shortcuts) and delegates persistence to the\n * agent. There is no standalone judge agent and no between-turn re-invocation —\n * the core goal step drives continuation and surfaces progress via `goal` stream\n * chunks.\n */\nimport { randomUUID } from 'node:crypto';\nimport type { Agent } from '@mastra/core/agent';\nimport type { GoalObjectiveRecord } from '@mastra/core/storage';\n\nimport { loadSettings } from '../onboarding/settings.js';\n\nimport type { TUIState } from './state.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type GoalStatus = 'active' | 'paused' | 'done';\n\n/**\n * TUI-facing view of a goal. Derived from the durable {@link GoalObjectiveRecord}\n * plus the effective judge/max-runs settings, with display-only timer fields and\n * a stable `id` used to match plan-started goals.\n */\nexport interface GoalState {\n id: string;\n objective: string;\n status: GoalStatus;\n turnsUsed: number;\n maxTurns: number;\n judgeModelId: string;\n startedAt: string;\n activeStartedAt?: string;\n activeDurationMs?: number;\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nexport const DEFAULT_MAX_TURNS = 50;\nconst THREAD_GOAL_KEY = 'goal';\n\n// =============================================================================\n// GoalManager\n// =============================================================================\n\nexport class GoalManager {\n /** Synchronous in-memory view of the active objective record (source of truth is ThreadState). */\n private record: (GoalObjectiveRecord & { id: string }) | null = null;\n /** Display-only active-timer accounting (not persisted to the objective record). */\n private activeStartedAt: string | null = null;\n private activeDurationMs = 0;\n private persistGoalOnNextThreadCreate = false;\n\n // ---------------------------------------------------------------------------\n // Synchronous TUI surface\n // ---------------------------------------------------------------------------\n\n getGoal(): GoalState | null {\n if (!this.record) return null;\n const { judgeModelId, maxTurns } = this.effectiveSettings(this.record);\n return {\n id: this.record.id,\n objective: this.record.objective,\n status: this.record.status,\n turnsUsed: this.record.runsUsed,\n maxTurns,\n judgeModelId,\n startedAt: new Date(this.record.startedAt).toISOString(),\n activeStartedAt: this.activeStartedAt ?? undefined,\n activeDurationMs: this.activeDurationMs,\n };\n }\n\n isActive(): boolean {\n return this.record?.status === 'active';\n }\n\n persistOnNextThreadCreate(): void {\n this.persistGoalOnNextThreadCreate = true;\n }\n\n consumePersistOnNextThreadCreate(): boolean {\n if (!this.persistGoalOnNextThreadCreate) return false;\n this.persistGoalOnNextThreadCreate = false;\n return true;\n }\n\n startActiveTimer(): void {\n if (this.record?.status === 'active' && !this.activeStartedAt) {\n this.activeStartedAt = new Date().toISOString();\n }\n }\n\n stopActiveTimer(): void {\n if (!this.activeStartedAt) return;\n const startedMs = Date.parse(this.activeStartedAt);\n if (Number.isFinite(startedMs)) {\n this.activeDurationMs += Math.max(0, Date.now() - startedMs);\n }\n this.activeStartedAt = null;\n }\n\n /** Reset active-timer accounting to zero (e.g. for an untriggered plan goal). */\n resetActiveTimer(): void {\n this.activeStartedAt = null;\n this.activeDurationMs = 0;\n }\n\n // ---------------------------------------------------------------------------\n // Objective lifecycle (ThreadState-backed via the agent)\n // ---------------------------------------------------------------------------\n\n /**\n * Set a new objective. Persists to ThreadState via `agent.setObjective` and\n * updates the in-memory view. Only the provided settings are persisted into\n * the record; unset ones fall back to the agent's `goal` config at read time.\n */\n async setGoal(\n state: TUIState,\n objective: string,\n judgeModelId: string,\n maxTurns: number = DEFAULT_MAX_TURNS,\n ): Promise<GoalState | null> {\n const threadId = state.harness.getCurrentThreadId();\n const agent = this.getAgent(state);\n const now = Date.now();\n const id = randomUUID();\n\n if (agent && threadId) {\n const persisted = await agent.setObjective(objective, {\n threadId,\n resourceId: state.harness.getResourceId(),\n ...(judgeModelId ? { judgeModelId } : {}),\n maxRuns: maxTurns,\n });\n this.record = persisted ? { ...persisted, id } : this.localRecord(objective, judgeModelId, maxTurns, now, id);\n } else {\n this.record = this.localRecord(objective, judgeModelId, maxTurns, now, id);\n }\n\n this.activeStartedAt = new Date(now).toISOString();\n this.activeDurationMs = 0;\n return this.getGoal();\n }\n\n /**\n * Update the judge model / max-runs defaults. Persists into the active record\n * (so the override is remembered in thread state) when a goal is set.\n */\n async updateJudgeDefaults(state: TUIState, judgeModelId: string, maxTurns: number): Promise<GoalState | null> {\n if (!this.record) return null;\n const threadId = state.harness.getCurrentThreadId();\n const agent = this.getAgent(state);\n if (agent && threadId) {\n const updated = await agent.updateObjectiveOptions({\n threadId,\n ...(judgeModelId ? { judgeModelId } : {}),\n maxRuns: maxTurns,\n });\n if (updated) this.record = { ...updated, id: this.record.id };\n } else {\n this.record = {\n ...this.record,\n ...(judgeModelId ? { judgeModelId } : {}),\n maxRuns: maxTurns,\n updatedAt: Date.now(),\n };\n }\n return this.getGoal();\n }\n\n pause(): GoalState | null {\n if (this.record && this.record.status === 'active') {\n this.stopActiveTimer();\n this.record = { ...this.record, status: 'paused', updatedAt: Date.now() };\n }\n return this.getGoal();\n }\n\n resume(): GoalState | null {\n if (this.record && this.record.status === 'paused') {\n this.record = { ...this.record, status: 'active', updatedAt: Date.now() };\n this.startActiveTimer();\n }\n return this.getGoal();\n }\n\n markDone(): void {\n if (this.record) {\n this.stopActiveTimer();\n this.record = { ...this.record, status: 'done', updatedAt: Date.now() };\n }\n }\n\n clear(): void {\n this.record = null;\n this.activeStartedAt = null;\n this.activeDurationMs = 0;\n this.persistGoalOnNextThreadCreate = false;\n }\n\n /**\n * Sync the latest objective record from ThreadState into the in-memory view.\n * Called from the `goal` stream-chunk handler after each evaluation.\n */\n applyEvaluation(update: { runsUsed: number; status: GoalStatus }): GoalState | null {\n if (!this.record) return null;\n this.record = { ...this.record, runsUsed: update.runsUsed, status: update.status, updatedAt: Date.now() };\n if (update.status !== 'active') this.stopActiveTimer();\n return this.getGoal();\n }\n\n // ---------------------------------------------------------------------------\n // Persistence\n // ---------------------------------------------------------------------------\n\n /**\n * Persist the active objective to ThreadState via the agent. The objective\n * record is the source of truth; the legacy thread-metadata key is cleared so\n * stale state from older sessions does not resurface.\n */\n async saveToThread(state: TUIState): Promise<void> {\n const threadId = state.harness.getCurrentThreadId();\n const agent = this.getAgent(state);\n try {\n if (agent && threadId) {\n if (this.record) {\n // Push the current status/options into the existing record. If no\n // record is persisted yet (e.g. first save), create one.\n const updated = await agent.updateObjectiveOptions({\n threadId,\n status: this.record.status,\n ...(this.record.judgeModelId ? { judgeModelId: this.record.judgeModelId } : {}),\n ...(this.record.maxRuns !== undefined ? { maxRuns: this.record.maxRuns } : {}),\n });\n if (!updated) {\n // No persisted record yet: create one. `setObjective` always writes\n // `status: 'active'`, so re-apply the in-memory status afterwards if\n // the local goal was already paused/done — otherwise the resumed\n // thread state would no longer match the in-memory state.\n const desiredStatus = this.record.status;\n await agent.setObjective(this.record.objective, {\n threadId,\n resourceId: state.harness.getResourceId(),\n ...(this.record.judgeModelId ? { judgeModelId: this.record.judgeModelId } : {}),\n ...(this.record.maxRuns !== undefined ? { maxRuns: this.record.maxRuns } : {}),\n });\n if (desiredStatus !== 'active') {\n await agent.updateObjectiveOptions({ threadId, status: desiredStatus });\n }\n }\n } else {\n await agent.clearObjective({ threadId });\n }\n }\n // Clear any legacy thread-metadata goal so it can't shadow the record.\n await state.harness.setThreadSetting({ key: THREAD_GOAL_KEY, value: undefined });\n } catch {\n // Persistence is not critical.\n }\n }\n\n /**\n * Load the objective from ThreadState (called on thread switch). Falls back to\n * the legacy thread-metadata goal for threads created before this migration.\n */\n async loadFromThread(state: TUIState): Promise<void> {\n this.persistGoalOnNextThreadCreate = false;\n this.activeStartedAt = null;\n this.activeDurationMs = 0;\n\n const threadId = state.harness.getCurrentThreadId();\n const agent = this.getAgent(state);\n if (agent && threadId) {\n try {\n const record = await agent.getObjective({ threadId });\n if (record) {\n this.record = { ...record, id: randomUUID() };\n return;\n }\n } catch {\n // fall through to legacy metadata\n }\n }\n this.record = null;\n }\n\n /**\n * Legacy entry point retained for thread-switch call sites that only have the\n * thread metadata available. Hydrates from a previously-persisted GoalState.\n */\n loadFromThreadMetadata(metadata: Record<string, unknown> | undefined): void {\n const saved = metadata?.[THREAD_GOAL_KEY] as Partial<GoalState> | undefined;\n this.persistGoalOnNextThreadCreate = false;\n this.activeStartedAt = null;\n this.activeDurationMs = 0;\n if (saved && saved.objective && saved.status) {\n this.record = {\n objective: saved.objective,\n status: saved.status,\n runsUsed: saved.turnsUsed ?? 0,\n maxRuns: saved.maxTurns ?? DEFAULT_MAX_TURNS,\n judgeModelId: saved.judgeModelId ?? '',\n startedAt: saved.startedAt ? Date.parse(saved.startedAt) || Date.now() : Date.now(),\n updatedAt: Date.now(),\n id: saved.id ?? randomUUID(),\n };\n this.activeDurationMs = saved.activeDurationMs ?? 0;\n } else {\n this.record = null;\n }\n }\n\n // ---------------------------------------------------------------------------\n // Private\n // ---------------------------------------------------------------------------\n\n private getAgent(state: TUIState): Agent | undefined {\n try {\n return state.harness.getCurrentAgent();\n } catch {\n return undefined;\n }\n }\n\n /** Resolve effective judge model + max runs (record value → settings default). */\n private effectiveSettings(record: GoalObjectiveRecord): { judgeModelId: string; maxTurns: number } {\n const settings = loadSettings();\n return {\n judgeModelId: record.judgeModelId ?? settings.models.goalJudgeModel ?? '',\n maxTurns: record.maxRuns ?? settings.models.goalMaxTurns ?? DEFAULT_MAX_TURNS,\n };\n }\n\n private localRecord(\n objective: string,\n judgeModelId: string,\n maxTurns: number,\n now: number,\n id: string,\n ): GoalObjectiveRecord & { id: string } {\n return {\n objective,\n status: 'active',\n runsUsed: 0,\n maxRuns: maxTurns,\n ...(judgeModelId ? { judgeModelId } : {}),\n startedAt: now,\n updatedAt: now,\n id,\n };\n }\n}\n","import type { Component, OverlayHandle, OverlayOptions, SizeValue, TUI } from '@earendil-works/pi-tui';\nimport { visibleWidth } from '@earendil-works/pi-tui';\n\nimport { theme } from './theme.js';\n\ntype ModalOverlayOptions = {\n widthPercent?: number;\n maxWidth?: number;\n maxHeight?: OverlayOptions['maxHeight'];\n minHeightPercent?: number;\n maxTopPadding?: number;\n};\n\nfunction parseSizeValue(value: SizeValue | undefined, total: number): number | undefined {\n if (typeof value === 'number') return value;\n const match = value?.match(/^(\\d+(?:\\.\\d+)?)%$/);\n return match?.[1] ? Math.floor((parseFloat(match[1]) / 100) * total) : undefined;\n}\n\nfunction modalMinHeight(tui: TUI, options: ModalOverlayOptions): number {\n const termHeight = tui.terminal?.rows ?? 40;\n const minHeight = Math.floor(termHeight * (options.minHeightPercent ?? 0.7));\n const maxHeight = parseSizeValue(options.maxHeight ?? '80%', termHeight) ?? termHeight;\n\n return Math.max(1, Math.min(minHeight, maxHeight));\n}\n\nclass MinHeightOverlay implements Component {\n constructor(\n private component: Component,\n private tui: TUI,\n private options: ModalOverlayOptions,\n ) {}\n\n get focused(): boolean {\n return (this.component as Component & { focused?: boolean }).focused ?? false;\n }\n\n set focused(value: boolean) {\n if ('focused' in this.component) {\n (this.component as Component & { focused: boolean }).focused = value;\n }\n }\n\n get wantsKeyRelease(): boolean | undefined {\n return this.component.wantsKeyRelease;\n }\n\n handleInput(data: string): void {\n this.component.handleInput?.(data);\n }\n\n invalidate(): void {\n this.component.invalidate?.();\n }\n\n render(width: number): string[] {\n const lines = this.component.render(width);\n const minHeight = modalMinHeight(this.tui, this.options);\n if (lines.length >= minHeight) return lines;\n\n const blank = theme.bg('overlayBg', ' '.repeat(width));\n const missingLines = minHeight - lines.length;\n const topPadding = Math.min(Math.floor(missingLines / 2), this.options.maxTopPadding ?? 4);\n const padded = [\n ...Array.from({ length: topPadding }, () => blank),\n ...lines,\n ...Array.from({ length: missingLines - topPadding }, () => blank),\n ];\n\n return padded.map(line => {\n const padNeeded = Math.max(0, width - visibleWidth(line));\n return padNeeded > 0 ? `${line}${theme.bg('overlayBg', ' '.repeat(padNeeded))}` : line;\n });\n }\n}\n\nexport function modalOverlayOptions(tui: TUI, options: ModalOverlayOptions = {}): OverlayOptions {\n const widthPercent = options.widthPercent ?? 0.9;\n const maxWidth = options.maxWidth ?? 160;\n const termWidth = tui.terminal?.columns ?? 120;\n\n const width = Math.max(1, Math.min(Math.floor(termWidth * widthPercent), maxWidth));\n\n return {\n width,\n minWidth: Math.min(width, 90),\n maxHeight: options.maxHeight ?? '80%',\n };\n}\n\nexport function showModalOverlay(tui: TUI, component: Component, options: ModalOverlayOptions = {}): OverlayHandle {\n return tui.showOverlay(new MinHeightOverlay(component, tui, options), modalOverlayOptions(tui, options));\n}\n","/**\n * MaskedInput - wraps pi-tui's Input to obscure displayed text with asterisks.\n * The actual value is preserved; only the rendered output is masked.\n */\n\nimport { Input } from '@earendil-works/pi-tui';\nimport type { Component, Focusable } from '@earendil-works/pi-tui';\n\nexport class MaskedInput implements Component, Focusable {\n private input: Input;\n\n get focused(): boolean {\n return this.input.focused;\n }\n set focused(value: boolean) {\n this.input.focused = value;\n }\n\n set onSubmit(fn: ((value: string) => void) | undefined) {\n this.input.onSubmit = fn;\n }\n\n set onEscape(fn: (() => void) | undefined) {\n this.input.onEscape = fn;\n }\n\n constructor() {\n this.input = new Input();\n }\n\n getValue(): string {\n return this.input.getValue();\n }\n\n setValue(value: string): void {\n this.input.setValue(value);\n }\n\n handleInput(data: string): void {\n this.input.handleInput(data);\n }\n\n invalidate(): void {\n this.input.invalidate();\n }\n\n render(width: number): string[] {\n // Temporarily swap the value to masked characters, render, then restore.\n const real = this.input.getValue();\n try {\n this.input.setValue('*'.repeat(real.length));\n return this.input.render(width);\n } finally {\n this.input.setValue(real);\n }\n }\n}\n","/**\n * API key input dialog component.\n * Shown when a user selects a model that doesn't have an API key configured.\n * Allows entering a key or cancelling to proceed without one.\n */\n\nimport { Box, getKeybindings, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable } from '@earendil-works/pi-tui';\nimport { theme } from '../theme.js';\nimport { MaskedInput } from './masked-input.js';\n\nexport interface ApiKeyDialogOptions {\n /** Provider name shown in the title (e.g., \"Google\") */\n providerName: string;\n /** Environment variable name hint (e.g., \"GOOGLE_GENERATIVE_AI_API_KEY\") */\n apiKeyEnvVar?: string;\n /** Called with the entered key when the user submits */\n onSubmit: (key: string) => void;\n /** Called when the user cancels */\n onCancel: () => void;\n}\n\nexport class ApiKeyDialogComponent extends Box implements Focusable {\n private input: MaskedInput;\n private onSubmit: (key: string) => void;\n private onCancel: () => void;\n\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n this.input.focused = value;\n }\n\n constructor(options: ApiKeyDialogOptions) {\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.onSubmit = options.onSubmit;\n this.onCancel = options.onCancel;\n\n // Title\n this.addChild(new Text(theme.bold(theme.fg('accent', `API Key Required`)), 0, 0));\n this.addChild(new Spacer(1));\n\n // Description\n this.addChild(new Text(theme.fg('text', `Enter an API key for ${options.providerName}:`), 0, 0));\n if (options.apiKeyEnvVar) {\n this.addChild(new Text(theme.fg('dim', `You can also set ${options.apiKeyEnvVar} in your environment.`), 0, 0));\n }\n this.addChild(new Spacer(1));\n\n // Input\n this.input = new MaskedInput();\n this.input.onSubmit = (value: string) => {\n const trimmed = value.trim();\n if (trimmed) {\n this.onSubmit(trimmed);\n } else {\n this.onCancel();\n }\n };\n this.addChild(this.input);\n this.addChild(new Spacer(1));\n\n // Hints\n this.addChild(new Text(theme.fg('dim', ' Enter to submit · Esc to cancel'), 0, 0));\n }\n\n handleInput(data: string): void {\n const kb = getKeybindings();\n if (kb.matches(data, 'tui.select.cancel')) {\n this.onCancel();\n return;\n }\n this.input.handleInput(data);\n }\n}\n","/**\n * Shared helper: prompt user for an API key when they select a model without one.\n */\n\nimport type { TUI } from '@earendil-works/pi-tui';\nimport type { AuthStorage } from '../auth/storage.js';\nimport { ApiKeyDialogComponent } from './components/api-key-dialog.js';\nimport type { ModelItem } from './components/model-selector.js';\nimport { showModalOverlay } from './overlay.js';\n\n/**\n * If the selected model doesn't have an API key, show a dialog to enter one.\n * Returns the model ID on success or when cancelled (same behavior — cancelling\n * just means no key was stored, but the model is still selected).\n *\n * Resolves after the user submits or cancels the dialog.\n */\nexport function promptForApiKeyIfNeeded(\n ui: TUI,\n model: ModelItem,\n authStorage: AuthStorage | undefined,\n): Promise<void> {\n // Model already has a key (env var or stored) — nothing to do\n if (model.hasApiKey || !authStorage) {\n return Promise.resolve();\n }\n\n return new Promise<void>(resolve => {\n const dialog = new ApiKeyDialogComponent({\n providerName: model.provider,\n apiKeyEnvVar: model.apiKeyEnvVar,\n onSubmit: (key: string) => {\n ui.hideOverlay();\n // Store the key and set env var so model resolution picks it up\n authStorage.setStoredApiKey(model.provider, key, model.apiKeyEnvVar);\n resolve();\n },\n onCancel: () => {\n ui.hideOverlay();\n resolve();\n },\n });\n\n showModalOverlay(ui, dialog, { widthPercent: 0.7, maxHeight: '50%' });\n dialog.focused = true;\n });\n}\n","/**\n * /goal command — persistent cross-turn goals (Ralph loop).\n *\n * Usage:\n * /goal <text> Set a standing goal (asks for judge defaults only if unset)\n * /goal Open goal actions\n * /goal status Show current goal status\n * /goal pause Pause the continuation loop\n * /goal resume Resume without resetting the turn counter\n * /goal clear Drop the goal\n * /goal judge Set the goal judge model and max-attempt defaults\n */\nimport { Box, SelectList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { SelectItem } from '@earendil-works/pi-tui';\nimport type { HarnessMessage } from '@mastra/core/harness';\nimport { loadSettings, saveSettings } from '../../onboarding/settings.js';\nimport { GoalCyclesDialogComponent } from '../components/goal-cycles-dialog.js';\nimport { ModelSelectorComponent } from '../components/model-selector.js';\nimport type { ModelItem } from '../components/model-selector.js';\nimport { DEFAULT_MAX_TURNS } from '../goal-manager.js';\nimport type { GoalState } from '../goal-manager.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { promptForApiKeyIfNeeded } from '../prompt-api-key.js';\nimport { getSelectListTheme, theme } from '../theme.js';\n\nimport type { SlashCommandContext } from './types.js';\n\nexport interface StartGoalOptions {\n trigger?: 'send' | 'none';\n}\n\nexport async function handleGoalCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const { state } = ctx;\n const goalManager = state.goalManager;\n const subCommand = args[0]?.toLowerCase();\n\n if (!subCommand) {\n await showGoalActionModal(ctx);\n return;\n }\n\n // /goal status — show current state\n if (subCommand === 'status') {\n showGoalStatus(ctx);\n return;\n }\n\n // /goal pause\n if (subCommand === 'pause') {\n const goal = goalManager.pause();\n if (!goal) {\n ctx.showInfo('No goal to pause.');\n return;\n }\n await goalManager.saveToThread(state);\n ctx.showInfo(\n `Goal paused: \"${goal.objective}\" (${goal.turnsUsed}/${goal.maxTurns} turns used). Use /goal resume to continue.`,\n );\n return;\n }\n\n // /goal resume\n if (subCommand === 'resume') {\n const goal = goalManager.getGoal();\n if (!goal) {\n ctx.showInfo('No goal to resume. Use /goal <text> to set one.');\n return;\n }\n if (goal.status === 'active') {\n ctx.showInfo('Goal is already active.');\n return;\n }\n if (goal.status !== 'paused') {\n ctx.showInfo('Goal is already done. Use /goal <text> to set a new goal.');\n return;\n }\n\n goalManager.resume();\n await goalManager.saveToThread(state);\n\n ctx.showInfo(\n `Goal resumed: \"${goal.objective}\" — ${goal.turnsUsed}/${goal.maxTurns} turns used. Sending continuation...`,\n );\n\n // Kick off the next turn. The in-loop goal step re-evaluates the objective\n // once the agent produces a candidate answer.\n try {\n await state.harness.sendMessage({ content: `Continue working toward the goal: ${goal.objective}` });\n } catch (err) {\n goalManager.pause();\n await goalManager.saveToThread(state);\n ctx.showError(\n `Goal paused — failed to send continuation for \"${goal.objective}\": ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n return;\n }\n\n // /goal clear\n if (subCommand === 'clear') {\n goalManager.clear();\n state.planStartedGoalId = undefined;\n await goalManager.saveToThread(state);\n ctx.showInfo('Goal cleared.');\n return;\n }\n\n // /goal judge — set the judge model and max-attempt defaults\n if (subCommand === 'judge') {\n await handleJudgeCommand(ctx);\n return;\n }\n\n // /goal <text> — set a new goal using saved judge defaults, asking only once if needed.\n const objective = args.join(' ');\n await startGoalWithDefaults(ctx, objective);\n}\n\nfunction formatGoalStatus(goal: GoalState): string {\n return `Goal (${goal.status}): \"${goal.objective}\" — ${goal.turnsUsed}/${goal.maxTurns} turns used [judge: ${goal.judgeModelId}]`;\n}\n\nfunction formatGoalStatusRow(goal: GoalState): string {\n return formatGoalStatus(goal).replace(/\\s+/g, ' ');\n}\n\nfunction showGoalStatus(ctx: SlashCommandContext): void {\n const goal = ctx.state.goalManager.getGoal();\n if (!goal) {\n ctx.showInfo('No goal set. Use /goal <text> to set one.');\n return;\n }\n ctx.showInfo(formatGoalStatus(goal));\n}\n\nasync function showGoalActionModal(ctx: SlashCommandContext): Promise<void> {\n const goal = ctx.state.goalManager.getGoal();\n const items: SelectItem[] = [\n {\n value: 'status',\n label: ` Status ${theme.fg('dim', goal ? formatGoalStatusRow(goal) : 'No goal set')}`,\n },\n ];\n\n if (goal?.status === 'active') {\n items.push({ value: 'pause', label: ` Pause ${theme.fg('dim', 'Pause the continuation loop')}` });\n } else if (goal?.status === 'paused') {\n items.push({ value: 'resume', label: ` Resume ${theme.fg('dim', 'Resume and send a continuation')}` });\n }\n\n if (goal) {\n items.push({ value: 'clear', label: ` Clear ${theme.fg('dim', 'Drop the current goal')}` });\n }\n\n items.push(\n { value: 'judge', label: ` Judge settings ${theme.fg('dim', 'Set judge model and max attempts')}` },\n { value: 'new-hint', label: ` New goal ${theme.fg('dim', 'Type /goal <objective> to start')}` },\n );\n\n return new Promise<void>(resolve => {\n const container = new Box(4, 2, (text: string) => theme.bg('overlayBg', text));\n container.addChild(new Text(theme.bold(theme.fg('accent', 'Goal Actions')), 0, 0));\n container.addChild(new Spacer(1));\n\n const selectList = new SelectList(items, items.length, getSelectListTheme());\n selectList.onSelect = async (item: SelectItem) => {\n ctx.state.ui.hideOverlay();\n try {\n if (item.value === 'status') showGoalStatus(ctx);\n else if (item.value === 'pause') await handleGoalCommand(ctx, ['pause']);\n else if (item.value === 'resume') await handleGoalCommand(ctx, ['resume']);\n else if (item.value === 'clear') await handleGoalCommand(ctx, ['clear']);\n else if (item.value === 'judge') await handleJudgeCommand(ctx);\n else if (item.value === 'new-hint') ctx.showInfo('Type /goal <objective> to start a new goal.');\n } finally {\n resolve();\n }\n };\n\n selectList.onCancel = () => {\n ctx.state.ui.hideOverlay();\n resolve();\n };\n\n container.addChild(selectList);\n container.addChild(new Spacer(1));\n container.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc cancel'), 0, 0));\n\n const modal = container as Box & { handleInput: (data: string) => void };\n modal.handleInput = (data: string) => selectList.handleInput(data);\n showModalOverlay(ctx.state.ui, modal, { maxHeight: '60%' });\n });\n}\n\nexport async function handleJudgeCommand(ctx: SlashCommandContext): Promise<void> {\n const defaults = await promptForJudgeDefaults(ctx, 'Judge settings unchanged.');\n if (!defaults) return;\n\n const activeGoal = await ctx.state.goalManager.updateJudgeDefaults(\n ctx.state,\n defaults.judgeModelId,\n defaults.maxTurns,\n );\n if (activeGoal) {\n ctx.showInfo(\n `Judge defaults set: ${defaults.judgeModelId}, ${defaults.maxTurns} max attempts. Current goal updated.`,\n );\n return;\n }\n\n ctx.showInfo(`Judge defaults set: ${defaults.judgeModelId}, ${defaults.maxTurns} max attempts.`);\n}\n\ninterface JudgeDefaults {\n judgeModelId: string;\n maxTurns: number;\n}\n\nexport async function startGoalWithDefaults(\n ctx: SlashCommandContext,\n objective: string,\n cancelMessage = 'Goal cancelled.',\n options: StartGoalOptions = {},\n): Promise<void> {\n const defaults = getJudgeDefaults();\n const judgeDefaults = defaults ?? (await promptForJudgeDefaults(ctx, cancelMessage));\n if (!judgeDefaults) return;\n\n await startGoal(ctx, objective, judgeDefaults.judgeModelId, judgeDefaults.maxTurns, options);\n}\n\nfunction getJudgeDefaults(): JudgeDefaults | null {\n const settings = loadSettings();\n const judgeModelId = settings.models.goalJudgeModel;\n const maxTurns = settings.models.goalMaxTurns;\n if (!judgeModelId || typeof maxTurns !== 'number' || maxTurns <= 0) return null;\n return { judgeModelId, maxTurns };\n}\n\nasync function promptForJudgeDefaults(ctx: SlashCommandContext, cancelMessage: string): Promise<JudgeDefaults | null> {\n const { state } = ctx;\n const availableModels = await state.harness.listAvailableModels();\n\n if (availableModels.length === 0) {\n ctx.showError('No models available. Cannot set goal judge defaults.');\n return null;\n }\n\n const settings = loadSettings();\n const preselectedId = settings.models.goalJudgeModel ?? state.harness.getCurrentModelId() ?? undefined;\n const defaultMaxTurns =\n typeof settings.models.goalMaxTurns === 'number' && settings.models.goalMaxTurns > 0\n ? settings.models.goalMaxTurns\n : DEFAULT_MAX_TURNS;\n\n return new Promise(resolve => {\n const selector = new ModelSelectorComponent({\n tui: state.ui,\n models: availableModels,\n currentModelId: preselectedId,\n title: 'Select Goal Judge Model',\n onSelect: async (model: ModelItem) => {\n state.ui.hideOverlay();\n await promptForApiKeyIfNeeded(state.ui, model, ctx.authStorage);\n\n const cyclesDialog = new GoalCyclesDialogComponent({\n defaultValue: defaultMaxTurns,\n onSubmit: (maxTurns: number) => {\n state.ui.hideOverlay();\n const s = loadSettings();\n s.models.goalJudgeModel = model.id;\n s.models.goalMaxTurns = maxTurns;\n saveSettings(s);\n resolve({ judgeModelId: model.id, maxTurns });\n },\n onCancel: () => {\n state.ui.hideOverlay();\n ctx.showInfo(cancelMessage);\n resolve(null);\n },\n });\n\n state.ui.showOverlay(cyclesDialog, {\n width: '50%',\n maxHeight: '40%',\n anchor: 'center',\n });\n cyclesDialog.focused = true;\n },\n onCancel: () => {\n state.ui.hideOverlay();\n ctx.showInfo(cancelMessage);\n resolve(null);\n },\n });\n\n state.ui.showOverlay(selector, {\n width: '80%',\n maxHeight: '60%',\n anchor: 'center',\n });\n selector.focused = true;\n });\n}\n\nasync function startGoal(\n ctx: SlashCommandContext,\n objective: string,\n judgeModelId: string,\n maxTurns: number,\n options: StartGoalOptions = {},\n): Promise<void> {\n const { state } = ctx;\n const goalManager = state.goalManager;\n\n if (state.pendingNewThread) {\n await state.harness.createThread();\n state.pendingNewThread = false;\n }\n\n const shouldPersistToCreatedThread = !state.harness.getCurrentThreadId();\n const goal = await goalManager.setGoal(state, objective, judgeModelId, maxTurns);\n if (!goal) {\n ctx.showError('Failed to set goal.');\n return;\n }\n\n state.planStartedGoalId = undefined;\n if (options.trigger === 'none') {\n // Plan-started goals don't begin accruing active time until the user\n // actually triggers them.\n goalManager.resetActiveTimer();\n }\n if (shouldPersistToCreatedThread) {\n goalManager.persistOnNextThreadCreate();\n }\n await goalManager.saveToThread(state);\n\n if (options.trigger === 'none') {\n return;\n }\n\n try {\n await state.harness.sendSignal(createGoalReminderSignal(goal)).accepted;\n } catch (err) {\n goalManager.pause();\n await goalManager.saveToThread(state);\n ctx.showError(`Goal paused — failed to start: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nfunction createGoalReminderSignal(goal: GoalState) {\n return {\n type: 'system-reminder' as const,\n contents: goal.objective,\n attributes: { type: 'goal' },\n metadata: {\n goalId: goal.id,\n maxTurns: goal.maxTurns,\n judgeModelId: goal.judgeModelId,\n },\n };\n}\n\nexport function createGoalReminderMessage(\n goalId: string,\n objective: string,\n maxTurns: number,\n judgeModelId: string,\n): HarnessMessage {\n return {\n id: `goal-${goalId}`,\n role: 'user',\n createdAt: new Date(),\n content: [\n {\n type: 'system_reminder',\n reminderType: 'goal',\n message: objective,\n goalMaxTurns: maxTurns,\n judgeModelId,\n },\n ],\n } as unknown as HarnessMessage;\n}\n\nexport function createGoalReminderXml(message: string): string {\n return `<system-reminder type=\"goal\">${escapeXml(message)}</system-reminder>`;\n}\n\nfunction escapeXml(value: string): string {\n return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');\n}\n","/**\n * Help text builder — generates the inline help content shown by /help.\n */\n\nimport type { SlashCommandMetadata } from '../../utils/slash-command-loader.js';\n\nexport interface HelpTextOptions {\n /** Number of available harness modes (mode commands shown when > 1) */\n modes: number;\n /** User-defined custom slash commands */\n customSlashCommands: SlashCommandMetadata[];\n /** Active direct shell passthrough mode label */\n shellModeLabel?: string;\n}\n\ninterface HelpEntry {\n key: string;\n description: string;\n}\n\n// =============================================================================\n// Data\n// =============================================================================\n\nfunction getCommands(modes: number): HelpEntry[] {\n const cmds: HelpEntry[] = [\n { key: '/new', description: 'Start a new thread' },\n { key: '/threads', description: 'Switch between threads' },\n { key: '/thread', description: 'Show current thread info' },\n { key: '/thread:tag-dir', description: 'Tag thread with current directory' },\n { key: '/name', description: 'Rename current thread' },\n { key: '/resource', description: 'Show/switch resource ID' },\n { key: '/skills', description: 'List available skills' },\n { key: '/skill/<name>', description: 'Activate a skill' },\n { key: '/models', description: 'Switch model pack' },\n { key: '/custom-providers', description: 'Manage custom providers and models' },\n { key: '/subagents', description: 'Configure subagent models' },\n { key: '/permissions', description: 'Tool approval permissions' },\n { key: '/settings', description: 'Notifications, YOLO, thinking' },\n { key: '/om', description: 'Configure Observational Memory' },\n { key: '/review', description: 'Review a GitHub pull request' },\n { key: '/report-issue', description: 'Open or browse mastracode issues' },\n { key: '/cost', description: 'Token usage and costs' },\n { key: '/diff', description: 'Modified files or git diff' },\n { key: '/sandbox', description: 'Manage sandbox allowed paths' },\n { key: '/hooks', description: 'Show/reload configured hooks' },\n { key: '/mcp', description: 'Show/reload MCP connections' },\n { key: '/login', description: 'Login with OAuth provider' },\n { key: '/logout', description: 'Logout from OAuth provider' },\n { key: '/setup', description: 'Run the setup wizard' },\n { key: '/browser', description: 'Configure browser automation' },\n { key: '/api-keys', description: 'Manage provider API keys' },\n { key: '/theme', description: 'Switch color theme (auto/dark/light)' },\n { key: '/update', description: 'Check for and install updates' },\n { key: '/observability', description: 'Configure cloud observability' },\n { key: '/github', description: 'Subscribe/sync GitHub PR signals' },\n { key: '/goal', description: 'Set/manage persistent goal (Ralph loop)' },\n { key: '/goal judge', description: 'Set the goal judge model and max attempts' },\n ];\n\n if (modes > 1) {\n cmds.push({ key: '/mode', description: 'Switch or list modes' });\n }\n\n cmds.push({ key: '/exit', description: 'Exit' }, { key: '/help', description: 'Show this help' });\n\n return cmds;\n}\n\nfunction getShortcuts(modes: number): HelpEntry[] {\n const shortcuts: HelpEntry[] = [\n { key: 'Ctrl+C', description: 'Interrupt / clear input' },\n { key: 'Ctrl+C×2', description: 'Exit (double-tap)' },\n { key: 'Ctrl+D', description: 'Exit (when editor empty)' },\n { key: 'Enter', description: 'Send message' },\n { key: 'Ctrl+F', description: 'Queue follow-up' },\n { key: 'Ctrl+T', description: 'Toggle thinking blocks' },\n { key: 'Ctrl+E', description: 'Expand/collapse tool outputs' },\n { key: 'Ctrl+Y', description: 'Toggle YOLO mode' },\n { key: 'Ctrl+Z', description: 'Suspend process (fg to resume)' },\n { key: 'Alt+Z', description: 'Undo last clear' },\n ];\n\n if (modes > 1) {\n shortcuts.push({ key: '⇧+Tab', description: 'Cycle agent modes' });\n }\n\n shortcuts.push({ key: '/', description: 'Commands' }, { key: '!', description: 'Shell' });\n\n return shortcuts;\n}\n\n// =============================================================================\n// Rendering\n// =============================================================================\n\nfunction renderSection(title: string, entries: HelpEntry[]): string {\n const maxKeyLen = Math.max(...entries.map(e => e.key.length));\n const lines = entries.map(e => ` ${e.key.padEnd(maxKeyLen + 2)}${e.description}`).join('\\n');\n return `${title}\\n${lines}`;\n}\n\n/**\n * Build the full help text as a plain string for inline display via showInfo().\n */\nexport function buildHelpText(options: HelpTextOptions): string {\n const sections: string[] = [];\n\n sections.push(renderSection('Commands', getCommands(options.modes)));\n\n if (options.customSlashCommands.length > 0) {\n const customEntries = options.customSlashCommands.map(cmd => ({\n key: `//${cmd.name}`,\n description: cmd.description || 'No description',\n }));\n sections.push(renderSection('Custom Commands', customEntries));\n }\n\n sections.push(\n renderSection('Shell', [\n {\n key: '!<cmd>',\n description: `Run a direct shell command (${options.shellModeLabel ?? 'default shell'})`,\n },\n ]),\n );\n\n sections.push(renderSection('Keyboard Shortcuts', getShortcuts(options.modes)));\n\n return sections.join('\\n\\n');\n}\n","import type { ShellPassthroughSettings } from '../onboarding/settings.js';\n\nexport const MASTRACODE_SHELL_ENV = 'MASTRACODE_SHELL';\nexport const MASTRACODE_SHELL_MODE_ENV = 'MASTRACODE_SHELL_MODE';\n\nexport type ShellPassthroughMode = 'default' | 'path' | 'login';\nexport type ShellFamily = 'posix' | 'cmd' | 'powershell';\n\nexport interface DefaultShellInvocation {\n kind: 'default';\n mode: 'default';\n label: string;\n warnings: string[];\n}\n\nexport interface ExplicitShellInvocation {\n kind: 'explicit';\n mode: Exclude<ShellPassthroughMode, 'default'>;\n family: ShellFamily;\n executable: string;\n args: string[];\n label: string;\n warnings: string[];\n}\n\nexport type ShellPassthroughInvocation = DefaultShellInvocation | ExplicitShellInvocation;\n\nconst VALID_MODES = new Set<ShellPassthroughMode>(['default', 'path', 'login']);\nconst VALID_FAMILIES = new Set<ShellFamily>(['posix', 'cmd', 'powershell']);\nconst POWERSHELL_BASENAMES = new Set(['pwsh', 'pwsh.exe', 'powershell', 'powershell.exe']);\nconst CMD_BASENAMES = new Set(['cmd', 'cmd.exe']);\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction parseMode(value: unknown): ShellPassthroughMode | undefined {\n const mode = nonEmptyString(value);\n return mode && VALID_MODES.has(mode as ShellPassthroughMode) ? (mode as ShellPassthroughMode) : undefined;\n}\n\nfunction parseFamily(value: unknown): ShellFamily | undefined {\n const family = nonEmptyString(value);\n return family && VALID_FAMILIES.has(family as ShellFamily) ? (family as ShellFamily) : undefined;\n}\n\nfunction executableBasename(executable: string): string {\n return executable.split(/[\\\\/]/).pop()?.toLowerCase() ?? executable.toLowerCase();\n}\n\nexport function inferShellFamily(executable: string, platform: NodeJS.Platform | string): ShellFamily | undefined {\n const basename = executableBasename(executable);\n if (POWERSHELL_BASENAMES.has(basename)) return 'powershell';\n if (CMD_BASENAMES.has(basename)) return 'cmd';\n return platform === 'win32' ? undefined : 'posix';\n}\n\nfunction shellDisplayName(executable: string): string {\n return executableBasename(executable).replace(/\\.exe$/i, '');\n}\n\nfunction quotePowerShellSingleQuotedString(value: string): string {\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n}\n\nexport function buildPowerShellScript(command: string): string {\n return [\n \"$ErrorActionPreference = 'Stop'\",\n '$PSNativeCommandUseErrorActionPreference = $false',\n '$global:LASTEXITCODE = $null',\n `$scriptBlock = [scriptblock]::Create(${quotePowerShellSingleQuotedString(command)})`,\n 'try {',\n ' & $scriptBlock',\n ' $commandSucceeded = $?',\n ' $nativeExitCode = $global:LASTEXITCODE',\n ' if (-not $commandSucceeded) {',\n ' if ($nativeExitCode -is [int] -and $nativeExitCode -ne 0) { exit $nativeExitCode }',\n ' exit 1',\n ' }',\n ' exit 0',\n '} catch {',\n ' [Console]::Error.WriteLine($_.ToString())',\n ' exit 1',\n '}',\n ].join('\\n');\n}\n\nexport function encodePowerShellCommand(script: string): string {\n return Buffer.from(script, 'utf16le').toString('base64');\n}\n\nexport function buildPowerShellArgs(command: string, options: { loadProfile: boolean }): string[] {\n return [\n '-NoLogo',\n '-NonInteractive',\n ...(options.loadProfile ? [] : ['-NoProfile']),\n '-EncodedCommand',\n encodePowerShellCommand(buildPowerShellScript(command)),\n ];\n}\n\nfunction buildExplicitShellArgs(\n family: ShellFamily,\n mode: Exclude<ShellPassthroughMode, 'default'>,\n command: string,\n): string[] {\n if (family === 'powershell') {\n return buildPowerShellArgs(command, { loadProfile: mode === 'login' });\n }\n\n if (family === 'cmd') {\n // With /s, cmd.exe strips the first and last quote on the line and runs\n // everything in between verbatim. Wrapping the whole command in one pair of\n // quotes therefore preserves any inner quotes (e.g. quoted paths) exactly,\n // without needing to escape them. See the cmd /C quote-handling rules.\n return ['/d', '/s', '/c', `\"${command}\"`];\n }\n\n return mode === 'login' ? ['-l', '-c', command] : ['-c', command];\n}\n\nfunction defaultInvocation(warnings: string[] = []): DefaultShellInvocation {\n return {\n kind: 'default',\n mode: 'default',\n label: 'default shell',\n warnings,\n };\n}\n\nexport function resolveShellPassthroughInvocation(\n command: string,\n settings: ShellPassthroughSettings | undefined,\n env: NodeJS.ProcessEnv = process.env,\n platform: NodeJS.Platform | string = process.platform,\n): ShellPassthroughInvocation {\n const warnings: string[] = [];\n const envExecutable = nonEmptyString(env[MASTRACODE_SHELL_ENV]);\n const settingsExecutable = nonEmptyString(settings?.executable);\n const envModeValue = nonEmptyString(env[MASTRACODE_SHELL_MODE_ENV]);\n const settingsModeValue = nonEmptyString(settings?.mode);\n const settingsFamilyValue = nonEmptyString(settings?.family);\n const hasEnvExecutable = Boolean(envExecutable);\n\n let mode = parseMode(envModeValue);\n if (envModeValue && !mode) {\n warnings.push(`${MASTRACODE_SHELL_MODE_ENV} must be default, path, or login`);\n return defaultInvocation(warnings);\n }\n\n if (!mode) {\n const settingsMode = parseMode(settingsModeValue);\n if (settingsModeValue && !settingsMode && !hasEnvExecutable) {\n warnings.push('shellPassthrough.mode must be default, path, or login');\n return defaultInvocation(warnings);\n }\n mode = hasEnvExecutable\n ? settingsMode && settingsMode !== 'default'\n ? settingsMode\n : 'path'\n : (settingsMode ?? (settingsExecutable ? 'path' : undefined));\n }\n\n const executable = envExecutable ?? settingsExecutable;\n mode ??= 'default';\n\n if (mode === 'default') {\n return defaultInvocation(warnings);\n }\n\n if (!executable) {\n warnings.push(`shell passthrough ${mode} mode requires an executable`);\n return defaultInvocation(warnings);\n }\n\n let family = hasEnvExecutable ? undefined : parseFamily(settingsFamilyValue);\n if (settingsFamilyValue && !family && !hasEnvExecutable) {\n warnings.push('shellPassthrough.family must be posix, cmd, or powershell');\n return defaultInvocation(warnings);\n }\n\n family ??= inferShellFamily(executable, platform);\n if (!family) {\n warnings.push(`could not infer shell family for ${executable}`);\n return defaultInvocation(warnings);\n }\n\n const normalizedMode: Exclude<ShellPassthroughMode, 'default'> = mode === 'login' ? 'login' : 'path';\n const args = buildExplicitShellArgs(family, normalizedMode, command);\n const profileLabel =\n family === 'powershell' && normalizedMode === 'path'\n ? ', no profile'\n : normalizedMode === 'login' && family !== 'cmd'\n ? ', login/profile'\n : '';\n\n return {\n kind: 'explicit',\n mode: normalizedMode,\n family,\n executable,\n args,\n label: `${shellDisplayName(executable)} (${family}${profileLabel})`,\n warnings,\n };\n}\n\nexport function describeShellPassthroughInvocation(invocation: ShellPassthroughInvocation): string {\n return invocation.label;\n}\n","import { loadSettings } from '../../onboarding/settings.js';\nimport { buildHelpText } from '../components/help-overlay.js';\nimport { describeShellPassthroughInvocation, resolveShellPassthroughInvocation } from '../shell-config.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport function handleHelpCommand(ctx: SlashCommandContext): void {\n const shellInvocation = resolveShellPassthroughInvocation('', loadSettings().shellPassthrough);\n const text = buildHelpText({\n modes: ctx.harness.listModes().length,\n customSlashCommands: ctx.customSlashCommands,\n shellModeLabel: describeShellPassthroughInvocation(shellInvocation),\n });\n ctx.showInfo(text);\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport function handleCostCommand(ctx: SlashCommandContext): void {\n const formatNumber = (n: number) => n.toLocaleString();\n\n // Read from Harness display state (canonical source)\n const ds = ctx.state.harness.getDisplayState();\n\n let omTokensText = '';\n if (ds.omProgress.observationTokens > 0) {\n omTokensText = `\n Memory: ${formatNumber(ds.omProgress.observationTokens)} tokens`;\n }\n\n ctx.showInfo(`Token Usage (Current Thread):\n Input: ${formatNumber(ds.tokenUsage.promptTokens)} tokens\n Output: ${formatNumber(ds.tokenUsage.completionTokens)} tokens${omTokensText}\n ─────────────────────────────────────────\n Total: ${formatNumber(ds.tokenUsage.totalTokens)} tokens\n \n Note: For cost estimates, check your provider's pricing page.`);\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport function handleYoloCommand(ctx: SlashCommandContext): void {\n const current = (ctx.harness.getState() as any).yolo === true;\n ctx.harness.setState({ yolo: !current } as any);\n ctx.showInfo(!current ? 'YOLO mode ON — tools auto-approved' : 'YOLO mode OFF — tools require approval');\n}\n","/**\n * Thinking level settings component.\n * Simple selector for reasoning depth levels.\n *\n * Changes apply immediately — Esc closes the panel.\n */\n\nimport { Box, SelectList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { SelectItem, Focusable } from '@earendil-works/pi-tui';\nimport { theme, getSelectListTheme } from '../theme.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ThinkingSettingsCallbacks {\n onLevelChange: (level: string) => void;\n onClose: () => void;\n}\n\n// =============================================================================\n// Thinking Levels\n// =============================================================================\n\nexport type ThinkingLevelId = 'off' | 'low' | 'medium' | 'high' | 'xhigh';\n\nexport interface ThinkingLevelOption {\n id: ThinkingLevelId;\n label: string;\n providerValue: 'none' | 'low' | 'medium' | 'high' | 'xhigh';\n description: string;\n}\n\nconst BASE_THINKING_LEVELS: ThinkingLevelOption[] = [\n { id: 'off', label: 'Off', providerValue: 'none', description: 'Reasoning disabled' },\n { id: 'low', label: 'Low', providerValue: 'low', description: 'Light reasoning' },\n { id: 'medium', label: 'Medium', providerValue: 'medium', description: 'Balanced reasoning' },\n { id: 'high', label: 'High', providerValue: 'high', description: 'Deep reasoning' },\n { id: 'xhigh', label: 'Very High', providerValue: 'xhigh', description: 'Maximum reasoning depth' },\n];\n\nfunction isOpenAIModel(modelId: string): boolean {\n return modelId.startsWith('openai/');\n}\n\nexport function getThinkingLevelsForModel(modelId: string): ThinkingLevelOption[] {\n if (!isOpenAIModel(modelId)) {\n return [...BASE_THINKING_LEVELS];\n }\n\n return BASE_THINKING_LEVELS.map(level => ({\n ...level,\n label: level.providerValue,\n }));\n}\n\nexport const THINKING_LEVELS = getThinkingLevelsForModel('');\n\nexport function getThinkingLevelForModel(modelId: string, levelId: string): ThinkingLevelOption {\n return (\n getThinkingLevelsForModel(modelId).find(level => level.id === levelId) ?? getThinkingLevelsForModel(modelId)[0]!\n );\n}\n\n// =============================================================================\n// Thinking Settings Component\n// =============================================================================\n\nexport class ThinkingSettingsComponent extends Box implements Focusable {\n private selectList: SelectList;\n\n // Focusable implementation\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n }\n\n constructor(currentLevel: string, callbacks: ThinkingSettingsCallbacks) {\n super(2, 1, (text: string) => theme.bg('overlayBg', text));\n\n // Title\n this.addChild(new Text(theme.bold(theme.fg('accent', 'Thinking Level')), 0, 0));\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('muted', 'Extended thinking for Anthropic models'), 0, 0));\n this.addChild(new Spacer(1));\n\n // Build items\n const items: SelectItem[] = THINKING_LEVELS.map(level => ({\n value: level.id,\n label: ` ${level.label} ${theme.fg('dim', level.description)}`,\n }));\n\n this.selectList = new SelectList(items, items.length, getSelectListTheme());\n\n // Pre-select current level\n const currentIndex = THINKING_LEVELS.findIndex(l => l.id === currentLevel);\n if (currentIndex !== -1) {\n this.selectList.setSelectedIndex(currentIndex);\n }\n\n this.selectList.onSelect = (item: SelectItem) => {\n callbacks.onLevelChange(item.value);\n callbacks.onClose();\n };\n this.selectList.onCancel = callbacks.onClose;\n\n this.addChild(this.selectList);\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('dim', ' Enter to select · Esc to close'), 0, 0));\n }\n\n handleInput(data: string): void {\n this.selectList.handleInput(data);\n }\n}\n","import { Box, SelectList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { SelectItem } from '@earendil-works/pi-tui';\n\nimport type { ThinkingLevelSetting } from '../../onboarding/settings.js';\nimport { loadSettings, saveSettings } from '../../onboarding/settings.js';\nimport {\n THINKING_LEVELS,\n getThinkingLevelForModel,\n getThinkingLevelsForModel,\n} from '../components/thinking-settings.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { theme, getSelectListTheme } from '../theme.js';\nimport type { SlashCommandContext } from './types.js';\n\n/** Models that support reasoning effort. */\nfunction supportsThinking(modelId: string): boolean {\n return modelId.startsWith('openai/');\n}\n\nfunction getThinkingStatusLine(modelId: string, levelId: string): string {\n const level = getThinkingLevelForModel(modelId, levelId);\n return `Thinking: ${level.label}`;\n}\n\nfunction isThinkingLevelSetting(level: string): level is ThinkingLevelSetting {\n return THINKING_LEVELS.some(option => option.id === level);\n}\n\nfunction persistGlobalThinkingLevel(level: ThinkingLevelSetting): void {\n const settings = loadSettings();\n settings.preferences.thinkingLevel = level;\n saveSettings(settings);\n}\n\nfunction getModelNote(ctx: SlashCommandContext): string | null {\n const modelId = ctx.state.harness.getCurrentModelId() ?? '';\n if (!modelId) return 'No model selected.';\n if (!supportsThinking(modelId)) {\n return `Warning: current model (${modelId}) may not support reasoning effort. Setting will be saved but may not take effect.`;\n }\n return null;\n}\n\nexport async function handleThinkCommand(ctx: SlashCommandContext, args: string[] = []): Promise<void> {\n const currentLevel = ((ctx.harness.getState() as any)?.thinkingLevel ?? 'off') as string;\n const modelId = ctx.state.harness.getCurrentModelId() ?? '';\n const thinkingLevels = getThinkingLevelsForModel(modelId);\n const arg = args[0]?.toLowerCase();\n\n if (arg === 'status') {\n ctx.showInfo(getThinkingStatusLine(modelId, currentLevel));\n return;\n }\n\n // Direct level argument: /think high\n if (arg) {\n const selected = thinkingLevels.find(l => l.id === arg);\n if (!selected) {\n ctx.showInfo(\n `Invalid thinking level: ${arg}. Use one of: ${THINKING_LEVELS.map(l => l.id).join(', ')} or 'status'.`,\n );\n return;\n }\n const note = getModelNote(ctx);\n await ctx.harness.setState({ thinkingLevel: selected.id } as any);\n persistGlobalThinkingLevel(selected.id);\n ctx.showInfo(getThinkingStatusLine(modelId, selected.id) + (note ? ` (${note})` : ''));\n return;\n }\n\n // No argument: show inline selector\n const items: SelectItem[] = thinkingLevels.map(l => ({\n value: l.id,\n label: ` ${l.label} ${theme.fg('dim', l.description)}${l.id === currentLevel ? theme.fg('dim', ' (current)') : ''}`,\n }));\n\n const modelNote = getModelNote(ctx);\n\n return new Promise<void>(resolve => {\n const container = new Box(4, 2, text => theme.bg('overlayBg', text));\n container.addChild(new Text(theme.bold(theme.fg('accent', 'Thinking Level')), 0, 0));\n container.addChild(new Spacer(1));\n if (modelNote) {\n container.addChild(new Text(theme.fg('warning', modelNote), 0, 0));\n container.addChild(new Spacer(1));\n }\n\n const selectList = new SelectList(items, items.length, getSelectListTheme());\n\n selectList.onSelect = async (item: SelectItem) => {\n ctx.state.ui.hideOverlay();\n const selectedLevel = item.value;\n if (!isThinkingLevelSetting(selectedLevel)) {\n resolve();\n return;\n }\n\n try {\n await ctx.harness.setState({ thinkingLevel: selectedLevel } as any);\n persistGlobalThinkingLevel(selectedLevel);\n const selectedLabel = getThinkingLevelForModel(modelId, selectedLevel).label;\n ctx.showInfo(`Thinking → ${selectedLevel === currentLevel ? `${selectedLabel} (unchanged)` : selectedLabel}`);\n } catch {\n // Keep cancel behavior silent.\n } finally {\n resolve();\n }\n };\n\n selectList.onCancel = () => {\n ctx.state.ui.hideOverlay();\n resolve();\n };\n\n container.addChild(selectList);\n container.addChild(new Spacer(1));\n container.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc cancel'), 0, 0));\n\n // Pre-select current level (after adding to container, matching models-pack pattern)\n const currentIdx = thinkingLevels.findIndex(l => l.id === currentLevel);\n if (currentIdx > 0) selectList.setSelectedIndex(currentIdx);\n\n const modal = container as Box & { handleInput: (data: string) => void };\n modal.handleInput = (data: string) => selectList.handleInput(data);\n showModalOverlay(ctx.state.ui, modal, { maxHeight: '60%' });\n });\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport async function handlePermissionsCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n if (args[0] === 'set' && args.length >= 3) {\n const category = args[1] as any;\n const policy = args[2] as any;\n const validCategories = ['read', 'edit', 'execute', 'mcp'];\n const validPolicies = ['allow', 'ask', 'deny'];\n if (!validCategories.includes(category)) {\n ctx.showInfo(`Invalid category: ${category}. Must be one of: ${validCategories.join(', ')}`);\n return;\n }\n if (!validPolicies.includes(policy)) {\n ctx.showInfo(`Invalid policy: ${policy}. Must be one of: ${validPolicies.join(', ')}`);\n return;\n }\n ctx.harness.setPermissionForCategory({ category, policy });\n ctx.showInfo(`Set ${category} policy to: ${policy}`);\n return;\n }\n await showPermissions(ctx);\n}\n\nasync function showPermissions(ctx: SlashCommandContext): Promise<void> {\n const { TOOL_CATEGORIES, getToolsForCategory } = await import('../../permissions.js');\n const rules = ctx.harness.getPermissionRules();\n const grants = ctx.harness.getSessionGrants();\n const isYolo = (ctx.harness.getState() as any).yolo === true;\n\n const lines: string[] = [];\n lines.push('Tool Approval Permissions');\n lines.push('─'.repeat(40));\n\n if (isYolo) {\n lines.push('');\n lines.push('⚡ YOLO mode is ON — all tools are auto-approved');\n lines.push(' Use /yolo to toggle off');\n }\n\n lines.push('');\n lines.push('Category Policies:');\n for (const [cat, meta] of Object.entries(TOOL_CATEGORIES)) {\n const policy = rules.categories[cat as keyof typeof rules.categories] || 'ask';\n const sessionGranted = grants.categories.includes(cat as any);\n const tools = getToolsForCategory(cat as any);\n const status = sessionGranted ? `${policy} (session: always allow)` : policy;\n lines.push(` ${meta.label.padEnd(12)} ${status.padEnd(16)} tools: ${tools.join(', ')}`);\n }\n\n if (Object.keys(rules.tools).length > 0) {\n lines.push('');\n lines.push('Per-tool Overrides:');\n for (const [tool, policy] of Object.entries(rules.tools)) {\n lines.push(` ${tool.padEnd(24)} ${policy}`);\n }\n }\n\n if (grants.categories.length > 0 || grants.tools.length > 0) {\n lines.push('');\n lines.push('Session Grants (reset on restart):');\n if (grants.categories.length > 0) {\n lines.push(` Categories: ${grants.categories.join(', ')}`);\n }\n if (grants.tools.length > 0) {\n lines.push(` Tools: ${grants.tools.join(', ')}`);\n }\n }\n\n lines.push('');\n lines.push('Commands:');\n lines.push(' /permissions set <category> <allow|ask|deny>');\n lines.push(' /yolo — toggle auto-approve all tools');\n\n ctx.showInfo(lines.join('\\n'));\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport async function handleNameCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const title = args.join(' ').trim();\n if (!title) {\n ctx.showInfo('Usage: /name <title>');\n return;\n }\n if (!ctx.harness.getCurrentThreadId()) {\n ctx.showInfo('No active thread. Send a message first.');\n return;\n }\n await ctx.harness.renameThread({ title });\n ctx.showInfo(`Thread renamed to: ${title}`);\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport function handleExitCommand(ctx: SlashCommandContext): void {\n ctx.stop();\n process.exit(0);\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport function handleHooksCommand(ctx: SlashCommandContext, args: string[]): void {\n const hm = ctx.hookManager;\n if (!hm) {\n ctx.showInfo('Hooks system not initialized.');\n return;\n }\n\n const subcommand = args[0];\n if (subcommand === 'reload') {\n hm.reload();\n ctx.showInfo('Hooks config reloaded.');\n return;\n }\n\n const paths = hm.getConfigPaths();\n\n if (!hm.hasHooks()) {\n ctx.showInfo(\n `No hooks configured.\\n\\n` +\n `Add hooks to:\\n` +\n ` ${paths.project} (project)\\n` +\n ` ${paths.global} (global)\\n\\n` +\n `Example hooks.json:\\n` +\n ` {\\n` +\n ` \"PreToolUse\": [{\\n` +\n ` \"type\": \"command\",\\n` +\n ` \"command\": \"echo 'tool called'\",\\n` +\n ` \"matcher\": { \"tool_name\": \"execute_command\" }\\n` +\n ` }]\\n` +\n ` }`,\n );\n return;\n }\n\n const hookConfig = hm.getConfig();\n const lines: string[] = [`Hooks Configuration:`];\n lines.push(` Project: ${paths.project}`);\n lines.push(` Global: ${paths.global}`);\n lines.push('');\n\n const eventNames = [\n 'PreToolUse',\n 'PostToolUse',\n 'Stop',\n 'UserPromptSubmit',\n 'SessionStart',\n 'SessionEnd',\n 'Notification',\n ] as const;\n\n for (const event of eventNames) {\n const hooks = hookConfig[event];\n if (hooks && hooks.length > 0) {\n lines.push(` ${event} (${hooks.length} hook${hooks.length > 1 ? 's' : ''}):`);\n for (const hook of hooks) {\n const matcherStr = hook.matcher?.tool_name ? ` [tool: ${hook.matcher.tool_name}]` : '';\n const desc = hook.description ? ` - ${hook.description}` : '';\n lines.push(` ${hook.command}${matcherStr}${desc}`);\n }\n }\n }\n\n lines.push('');\n lines.push(` /hooks reload - Reload config from disk`);\n\n ctx.showInfo(lines.join('\\n'));\n}\n","/**\n * Decode a terminal input sequence into a single-character shortcut.\n *\n * pi-tui pushes the Kitty keyboard protocol when supported, so printable keys\n * arrive as CSI-u sequences (`\\x1b[121u` for `y`) instead of raw bytes —\n * leaving `data === 'y'` style comparisons silently dropping every press.\n * Falls back to xterm modifyOtherKeys (`\\x1b[27;<mod>;<cp>~`) for terminals\n * without Kitty support.\n *\n * Single-character `parseKey` results pass through unchanged — letters,\n * digits, and unmodified punctuation (`y`, `?`, `0`). `Shift+<letter>`\n * decodes to the uppercase letter so `Y`-vs-`y` shortcuts survive both\n * encodings. Shifted digits and symbols (`shift+1`, `shift+!`, etc.) return\n * `undefined` because pi-tui's `parseKey` does not collapse them to a\n * single shifted glyph. Ctrl/Alt/Super and non-printable keys return\n * `undefined` so modifier-bearing variants never alias a shortcut.\n *\n * Callers that want to react to space or other keys whose `parseKey` name\n * is multi-character (`space`, `enter`, `tab`, function keys) should use\n * pi-tui's `matchesKey` directly.\n */\nimport { parseKey } from '@earendil-works/pi-tui';\n\nconst SHIFT_LETTER_RE = /^shift\\+([a-z])$/;\n\nexport function decodePrintableShortcut(data: string): string | undefined {\n const key = parseKey(data);\n if (key === undefined) return undefined;\n if (key.length === 1) return key;\n const shifted = SHIFT_LETTER_RE.exec(key);\n if (shifted) return shifted[1]!.toUpperCase();\n return undefined;\n}\n","/**\n * MCP server selector component for managing MCP server connections.\n * Uses pi-tui overlay pattern with navigation.\n */\n\nimport { Box, Container, getKeybindings, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable, TUI } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport type { McpServerStatus, McpSkippedServer } from '../../mcp/types.js';\nimport { decodePrintableShortcut } from '../key-input.js';\nimport { theme } from '../theme.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface McpSelectorOptions {\n /** TUI instance for rendering */\n tui: TUI;\n /** Server statuses */\n statuses: McpServerStatus[];\n /** Skipped servers */\n skipped: McpSkippedServer[];\n /** Config file paths for display */\n configPaths: { project: string; global: string; claude: string };\n /** Get current statuses (for polling during initial connect) */\n getStatuses: () => { statuses: McpServerStatus[]; skipped: McpSkippedServer[] };\n /** Callback to reload all servers — should return fresh statuses/skipped */\n onReloadAll: () => Promise<{ statuses: McpServerStatus[]; skipped: McpSkippedServer[] }>;\n /** Callback to reconnect a single server by name — returns updated status */\n onReconnectServer: (name: string) => Promise<McpServerStatus>;\n /** Get captured stderr logs for a server */\n getServerLogs: (name: string) => string[];\n /** Show an info message in the chat area */\n showInfo: (msg: string) => void;\n /** Callback when selector is dismissed */\n onClose: () => void;\n}\n\n// =============================================================================\n// Sub-menu actions\n// =============================================================================\n\ninterface ServerAction {\n label: string;\n key: string;\n}\n\nconst CONNECTED_ACTIONS: ServerAction[] = [\n { label: 'View tools', key: 'tools' },\n { label: 'View logs', key: 'logs' },\n { label: 'Reconnect', key: 'reconnect' },\n];\n\nconst FAILED_ACTIONS: ServerAction[] = [\n { label: 'View error', key: 'error' },\n { label: 'View logs', key: 'logs' },\n { label: 'Reconnect', key: 'reconnect' },\n];\n\nconst CONNECTING_ACTIONS: ServerAction[] = [{ label: 'Waiting for connection...', key: 'none' }];\n\n// =============================================================================\n// McpSelectorComponent\n// =============================================================================\n\nexport class McpSelectorComponent extends Box implements Focusable {\n private listContainer!: Container;\n private statuses: McpServerStatus[];\n private skipped: McpSkippedServer[];\n private selectedIndex = 0;\n private getStatusesCallback: McpSelectorOptions['getStatuses'];\n private onReloadAllCallback: McpSelectorOptions['onReloadAll'];\n private onReconnectServerCallback: McpSelectorOptions['onReconnectServer'];\n private getServerLogsCallback: McpSelectorOptions['getServerLogs'];\n private showInfoCallback: McpSelectorOptions['showInfo'];\n private onCloseCallback: () => void;\n private tui: TUI;\n private pollTimer: ReturnType<typeof setInterval> | null = null;\n\n // Sub-menu state\n private subMenuOpen = false;\n private subMenuIndex = 0;\n private subMenuActions: ServerAction[] = [];\n\n // Detail view state (tool list / error display)\n private _detailView = false;\n\n // Loading state during reload\n private _reloading = false;\n\n // Focusable implementation\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n }\n\n constructor(options: McpSelectorOptions) {\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.tui = options.tui;\n this.statuses = options.statuses;\n this.skipped = options.skipped;\n this.getStatusesCallback = options.getStatuses;\n this.onReloadAllCallback = options.onReloadAll;\n this.onReconnectServerCallback = options.onReconnectServer;\n this.getServerLogsCallback = options.getServerLogs;\n this.showInfoCallback = options.showInfo;\n this.onCloseCallback = options.onClose;\n\n this.buildUI();\n this.startPollingIfNeeded();\n }\n\n private buildUI(): void {\n // Title\n const titleText = chalk.bgHex('#16c858').white.bold(' Manage MCP servers ');\n this.addChild(new Text(titleText, 0, 0));\n this.addChild(new Spacer(1));\n\n // List container (includes server count + server list)\n this.listContainer = new Container();\n this.addChild(this.listContainer);\n\n // Footer spacer + hints\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('muted', '↑↓ navigate • Enter select • r reload all • Esc close'), 0, 0));\n\n // Initial render\n this.updateList();\n }\n\n private getTotalItems(): number {\n return this.statuses.length + this.skipped.length;\n }\n\n private updateList(): void {\n this.listContainer.clear();\n\n // Server count line\n const total = this.getTotalItems();\n const countLabel = this._reloading\n ? `${total} server${total !== 1 ? 's' : ''} — reconnecting...`\n : `${total} server${total !== 1 ? 's' : ''}`;\n this.listContainer.addChild(new Text(theme.fg(this._reloading ? 'warning' : 'muted', countLabel), 0, 0));\n this.listContainer.addChild(new Spacer(1));\n\n const totalItems = this.getTotalItems();\n\n for (let i = 0; i < this.statuses.length; i++) {\n const status = this.statuses[i]!;\n const isSelected = i === this.selectedIndex && !this.subMenuOpen;\n\n let icon: string;\n let stateText: string;\n if (this._reloading) {\n icon = theme.fg('warning', '⟳');\n stateText = theme.fg('warning', 'reconnecting...');\n } else if (status.connecting) {\n icon = theme.fg('warning', '⟳');\n stateText = theme.fg('warning', 'connecting...');\n } else if (status.connected) {\n icon = theme.fg('success', '✔');\n stateText = theme.fg('success', 'connected');\n } else {\n icon = theme.fg('error', '✗');\n stateText = theme.fg('error', 'failed');\n }\n\n const cursor = isSelected ? theme.fg('accent', '› ') : ' ';\n const name = isSelected ? theme.bold(theme.fg('accent', status.name)) : status.name;\n const transport = theme.fg('muted', `[${status.transport}]`);\n const toolInfo =\n !this._reloading && status.toolCount > 0 ? theme.fg('muted', ` · ${status.toolCount} tools`) : '';\n\n this.listContainer.addChild(new Text(`${cursor}${icon} ${name} ${transport} ${stateText}${toolInfo}`, 0, 0));\n\n // Sub-menu for this server\n if (i === this.selectedIndex && this.subMenuOpen) {\n for (let j = 0; j < this.subMenuActions.length; j++) {\n const action = this.subMenuActions[j]!;\n const actionSelected = j === this.subMenuIndex;\n const actionCursor = actionSelected ? theme.fg('accent', ' › ') : ' ';\n const actionText = actionSelected\n ? theme.bold(theme.fg('accent', action.label))\n : theme.fg('muted', action.label);\n this.listContainer.addChild(new Text(`${actionCursor}${actionText}`, 0, 0));\n }\n }\n }\n\n // Skipped servers\n if (this.skipped.length > 0) {\n this.listContainer.addChild(new Spacer(1));\n this.listContainer.addChild(new Text(theme.fg('muted', 'Skipped:'), 0, 0));\n for (let i = 0; i < this.skipped.length; i++) {\n const s = this.skipped[i]!;\n const idx = this.statuses.length + i;\n const isSelected = idx === this.selectedIndex && !this.subMenuOpen;\n const cursor = isSelected ? theme.fg('accent', '› ') : ' ';\n const name = isSelected ? theme.bold(theme.fg('accent', s.name)) : s.name;\n this.listContainer.addChild(\n new Text(`${cursor}${theme.fg('warning', '⊘')} ${name} — ${theme.fg('muted', s.reason)}`, 0, 0),\n );\n }\n }\n\n // Empty state\n if (totalItems === 0) {\n this.listContainer.addChild(new Text(theme.fg('muted', 'No MCP servers configured'), 0, 0));\n }\n\n this.tui.requestRender();\n }\n\n private startPollingIfNeeded(): void {\n if (this.pollTimer) return;\n const hasConnecting = this.statuses.some(s => s.connecting);\n if (!hasConnecting) return;\n\n this.pollTimer = setInterval(() => {\n // Don't refresh while in a detail view or mid-reload\n if (this._detailView || this._reloading) return;\n\n const fresh = this.getStatusesCallback();\n this.statuses = fresh.statuses;\n this.skipped = fresh.skipped;\n\n // Clamp index\n const total = this.getTotalItems();\n if (this.selectedIndex >= total) {\n this.selectedIndex = Math.max(0, total - 1);\n }\n\n this.updateList();\n\n // Stop polling when nothing is connecting anymore\n if (!this.statuses.some(s => s.connecting)) {\n this.stopPolling();\n }\n }, 500);\n }\n\n private stopPolling(): void {\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = null;\n }\n }\n\n /** Clean up resources when component is removed. */\n dispose(): void {\n this.stopPolling();\n }\n\n handleInput(data: string): void {\n const kb = getKeybindings();\n\n // During reload, only allow closing the selector\n if (this._reloading) {\n if (kb.matches(data, 'tui.select.cancel')) {\n this.onCloseCallback();\n }\n return;\n }\n const totalItems = this.getTotalItems();\n\n // Detail view (tool list or error) — Esc goes back to server list\n if (this._detailView) {\n if (kb.matches(data, 'tui.select.cancel')) {\n this._detailView = false;\n this.updateList();\n }\n return;\n }\n\n if (this.subMenuOpen) {\n this.handleSubMenuInput(data, kb);\n return;\n }\n\n // Up arrow\n if (kb.matches(data, 'tui.select.up')) {\n if (totalItems === 0) return;\n this.selectedIndex = this.selectedIndex === 0 ? totalItems - 1 : this.selectedIndex - 1;\n this.updateList();\n }\n // Down arrow\n else if (kb.matches(data, 'tui.select.down')) {\n if (totalItems === 0) return;\n this.selectedIndex = this.selectedIndex === totalItems - 1 ? 0 : this.selectedIndex + 1;\n this.updateList();\n }\n // Enter — open sub-menu for the selected server\n else if (kb.matches(data, 'tui.select.confirm')) {\n if (this.selectedIndex < this.statuses.length) {\n this.openSubMenu();\n }\n // Skipped servers have no sub-menu actions\n }\n // 'r' — reload all servers\n else if (decodePrintableShortcut(data) === 'r') {\n this.doReloadAll();\n }\n // Escape or Ctrl+C\n else if (kb.matches(data, 'tui.select.cancel')) {\n this.stopPolling();\n this.onCloseCallback();\n }\n }\n\n private openSubMenu(): void {\n const status = this.statuses[this.selectedIndex];\n if (!status) return;\n\n if (status.connecting) {\n this.subMenuActions = CONNECTING_ACTIONS;\n } else if (status.connected) {\n this.subMenuActions = CONNECTED_ACTIONS;\n } else {\n this.subMenuActions = FAILED_ACTIONS;\n }\n\n this.subMenuOpen = true;\n this.subMenuIndex = 0;\n this.updateList();\n }\n\n private handleSubMenuInput(data: string, kb: ReturnType<typeof getKeybindings>): void {\n // Up arrow\n if (kb.matches(data, 'tui.select.up')) {\n this.subMenuIndex = this.subMenuIndex === 0 ? this.subMenuActions.length - 1 : this.subMenuIndex - 1;\n this.updateList();\n }\n // Down arrow\n else if (kb.matches(data, 'tui.select.down')) {\n this.subMenuIndex = this.subMenuIndex === this.subMenuActions.length - 1 ? 0 : this.subMenuIndex + 1;\n this.updateList();\n }\n // Enter — execute action\n else if (kb.matches(data, 'tui.select.confirm')) {\n const action = this.subMenuActions[this.subMenuIndex];\n if (!action || action.key === 'none') return;\n this.executeAction(action.key);\n }\n // Escape — close sub-menu\n else if (kb.matches(data, 'tui.select.cancel')) {\n this.subMenuOpen = false;\n this.updateList();\n }\n }\n\n private executeAction(actionKey: string): void {\n const status = this.statuses[this.selectedIndex];\n if (!status) return;\n\n switch (actionKey) {\n case 'tools': {\n this.subMenuOpen = false;\n this.showToolList(status);\n break;\n }\n case 'error': {\n this.subMenuOpen = false;\n this.showError(status);\n break;\n }\n case 'logs': {\n this.subMenuOpen = false;\n this.showLogs(status);\n break;\n }\n case 'reconnect': {\n this.subMenuOpen = false;\n this.doReconnectServer(status);\n break;\n }\n }\n }\n\n private doReloadAll(): void {\n this._reloading = true;\n this.updateList();\n\n this.onReloadAllCallback()\n .then((result: { statuses: McpServerStatus[]; skipped: McpSkippedServer[] }) => {\n this.statuses = result.statuses;\n this.skipped = result.skipped;\n // Clamp selected index in case server count changed\n const total = this.getTotalItems();\n if (this.selectedIndex >= total) {\n this.selectedIndex = Math.max(0, total - 1);\n }\n const connected = result.statuses.filter(s => s.connected);\n const totalTools = connected.reduce((sum, s) => sum + s.toolCount, 0);\n this.showInfoCallback(`MCP: Reloaded. ${connected.length} server(s) connected, ${totalTools} tool(s).`);\n for (const s of result.statuses.filter(s => !s.connected)) {\n this.showInfoCallback(`MCP: Failed to connect to \"${s.name}\": ${s.error ?? 'Unknown error'}`);\n }\n })\n .catch(() => {\n this.showInfoCallback('MCP: Reload failed. Retrying may help.');\n })\n .finally(() => {\n this._reloading = false;\n this.updateList();\n });\n }\n\n private doReconnectServer(status: McpServerStatus): void {\n if (status.connecting) return;\n const name = status.name;\n\n // Mark this server as connecting\n const idx = this.statuses.findIndex(s => s.name === name);\n if (idx >= 0) {\n this.statuses[idx] = {\n name,\n connected: false,\n connecting: true,\n toolCount: 0,\n toolNames: [],\n transport: status.transport,\n };\n }\n this.updateList();\n\n this.onReconnectServerCallback(name)\n .then((updated: McpServerStatus) => {\n // If a reload-all started, ignore stale reconnect results\n if (this._reloading) return;\n const i = this.statuses.findIndex(s => s.name === name);\n if (i >= 0) {\n this.statuses[i] = updated;\n }\n if (updated.connected) {\n this.showInfoCallback(`MCP: Reconnected \"${name}\" — ${updated.toolCount} tool(s)`);\n } else {\n this.showInfoCallback(`MCP: Failed to reconnect \"${name}\": ${updated.error ?? 'Unknown error'}`);\n }\n })\n .catch((err: unknown) => {\n if (this._reloading) return;\n const errMsg = err instanceof Error ? err.message : String(err);\n const i = this.statuses.findIndex(s => s.name === name);\n if (i >= 0) {\n this.statuses[i] = {\n name,\n connected: false,\n connecting: false,\n toolCount: 0,\n toolNames: [],\n transport: status.transport,\n error: errMsg,\n };\n }\n this.showInfoCallback(`MCP: Failed to reconnect \"${name}\": ${errMsg}`);\n })\n .finally(() => {\n if (!this._reloading) {\n this.updateList();\n }\n });\n }\n\n private showToolList(status: McpServerStatus): void {\n this.listContainer.clear();\n\n this.listContainer.addChild(\n new Text(theme.bold(`Tools for ${status.name}`) + theme.fg('muted', ` (${status.toolCount})`), 0, 0),\n );\n this.listContainer.addChild(new Spacer(1));\n\n if (status.toolNames.length === 0) {\n this.listContainer.addChild(new Text(theme.fg('muted', 'No tools available'), 0, 0));\n } else {\n for (const toolName of status.toolNames) {\n this.listContainer.addChild(new Text(` ${theme.fg('muted', '–')} ${toolName}`, 0, 0));\n }\n }\n\n this.listContainer.addChild(new Spacer(1));\n this.listContainer.addChild(new Text(theme.fg('muted', 'Press Esc to go back'), 0, 0));\n\n this._detailView = true;\n this.tui.requestRender();\n }\n\n private showError(status: McpServerStatus): void {\n this.listContainer.clear();\n\n this.listContainer.addChild(new Text(theme.bold(`Error for ${status.name}`), 0, 0));\n this.listContainer.addChild(new Spacer(1));\n this.listContainer.addChild(new Text(theme.fg('error', status.error ?? 'Unknown error'), 0, 0));\n this.listContainer.addChild(new Spacer(1));\n this.listContainer.addChild(new Text(theme.fg('muted', 'Press Esc to go back'), 0, 0));\n\n this._detailView = true;\n this.tui.requestRender();\n }\n\n private showLogs(status: McpServerStatus): void {\n this.listContainer.clear();\n\n const logs = this.getServerLogsCallback(status.name);\n\n this.listContainer.addChild(\n new Text(theme.bold(`Logs for ${status.name}`) + theme.fg('muted', ` (${logs.length} lines)`), 0, 0),\n );\n this.listContainer.addChild(new Spacer(1));\n\n if (logs.length === 0) {\n const hint =\n status.transport === 'http'\n ? 'No logs available (HTTP servers do not produce stderr output)'\n : 'No logs captured yet';\n this.listContainer.addChild(new Text(theme.fg('muted', hint), 0, 0));\n } else {\n // Show last 50 lines to avoid overwhelming the overlay\n const tail = logs.slice(-50);\n if (logs.length > 50) {\n this.listContainer.addChild(\n new Text(theme.fg('muted', ` ... ${logs.length - 50} earlier lines omitted`), 0, 0),\n );\n }\n for (const line of tail) {\n this.listContainer.addChild(new Text(theme.fg('muted', ` ${line}`), 0, 0));\n }\n }\n\n this.listContainer.addChild(new Spacer(1));\n this.listContainer.addChild(new Text(theme.fg('muted', 'Press Esc to go back'), 0, 0));\n\n this._detailView = true;\n this.tui.requestRender();\n }\n}\n","/**\n * Error handling utilities for the Mastra Code TUI.\n * Parses API errors and provides user-friendly messages.\n */\n\nexport interface ParsedError {\n /** User-friendly error message */\n message: string;\n /** Extra diagnostic detail to surface to the user */\n detail?: string;\n /** Request URL involved in the failure, when available */\n requestUrl?: string;\n /** Error type for categorization */\n type: ErrorType;\n /** Whether this error is retryable */\n retryable: boolean;\n /** Suggested retry delay in ms (if retryable) */\n retryDelay?: number;\n /** Original error for debugging */\n originalError: Error;\n}\n\nexport type ErrorType =\n | 'rate_limit'\n | 'auth'\n | 'network'\n | 'timeout'\n | 'invalid_request'\n | 'server_error'\n | 'model_not_found'\n | 'context_length'\n | 'content_filter'\n | 'unknown';\n\n/**\n * Parse an error and return a user-friendly representation.\n */\nfunction summarizeErrorDetail(error: unknown): string | undefined {\n if (error instanceof Error) {\n if (error.cause instanceof Error && error.cause.message) {\n return error.cause.message;\n }\n\n if (typeof error.cause === 'string' && error.cause.trim().length > 0) {\n return error.cause;\n }\n\n if (error.message.trim().length > 0) {\n return error.message;\n }\n }\n\n if (typeof error === 'string' && error.trim().length > 0) {\n return error;\n }\n\n if (error && typeof error === 'object') {\n const errorObj = error as Record<string, unknown>;\n const candidates = [errorObj['message'], errorObj['cause'], errorObj['code'], errorObj['statusText']];\n\n for (const candidate of candidates) {\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\n return candidate;\n }\n }\n }\n\n return undefined;\n}\n\nfunction extractRequestUrl(error: unknown): string | undefined {\n if (!error || typeof error !== 'object') {\n return undefined;\n }\n\n const candidates: unknown[] = [];\n const errorObj = error as Record<string, unknown>;\n candidates.push(errorObj['requestUrl'], errorObj['url']);\n\n if (errorObj['cause'] && typeof errorObj['cause'] === 'object') {\n const causeObj = errorObj['cause'] as Record<string, unknown>;\n candidates.push(causeObj['requestUrl'], causeObj['url']);\n }\n\n for (const candidate of candidates) {\n if (typeof candidate === 'string' && candidate.trim().length > 0) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nexport function parseError(error: unknown): ParsedError {\n const err = error instanceof Error ? error : new Error(String(error));\n const message = err.message.toLowerCase();\n const errorObj = error as Record<string, unknown>;\n const detail = summarizeErrorDetail(error);\n const requestUrl = extractRequestUrl(error);\n\n // Check for rate limiting\n if (\n message.includes('rate limit') ||\n message.includes('rate_limit') ||\n message.includes('429') ||\n errorObj.statusCode === 429 ||\n errorObj.status === 429\n ) {\n const retryAfter = extractRetryAfter(errorObj);\n return {\n message: 'Rate limited. Please wait a moment before trying again.',\n type: 'rate_limit',\n retryable: true,\n retryDelay: retryAfter || 5000,\n originalError: err,\n };\n }\n\n // Check for authentication errors\n if (\n message.includes('unauthorized') ||\n message.includes('authentication') ||\n message.includes('invalid api key') ||\n message.includes('invalid_api_key') ||\n message.includes('api key') ||\n errorObj.statusCode === 401 ||\n errorObj.status === 401\n ) {\n return {\n message: 'Authentication failed. Please check your API key or login with /login.',\n detail,\n requestUrl,\n type: 'auth',\n retryable: false,\n originalError: err,\n };\n }\n\n // Check for forbidden/permission errors\n if (errorObj.statusCode === 403 || errorObj.status === 403) {\n return {\n message: 'Access denied. You may not have permission to use this model.',\n detail,\n requestUrl,\n type: 'auth',\n retryable: false,\n originalError: err,\n };\n }\n\n // Check for network errors\n if (\n message.includes('network') ||\n message.includes('econnrefused') ||\n message.includes('enotfound') ||\n message.includes('fetch failed') ||\n message.includes('connection')\n ) {\n return {\n message: 'Network error while contacting the provider or gateway.',\n detail,\n requestUrl,\n type: 'network',\n retryable: true,\n retryDelay: 2000,\n originalError: err,\n };\n }\n\n // Check for timeout errors\n if (message.includes('timeout') || message.includes('timed out') || message.includes('etimedout')) {\n return {\n message: 'Request timed out. The server may be overloaded.',\n type: 'timeout',\n retryable: true,\n retryDelay: 3000,\n originalError: err,\n };\n }\n\n // Check for model not found\n if (\n message.includes('model not found') ||\n message.includes('model_not_found') ||\n message.includes('does not exist') ||\n message.includes('invalid model')\n ) {\n return {\n message: 'Model not found. Please select a different model with /models.',\n type: 'model_not_found',\n retryable: false,\n originalError: err,\n };\n }\n\n // Check for context length errors\n if (\n message.includes('context length') ||\n message.includes('context_length') ||\n message.includes('too many tokens') ||\n message.includes('maximum context') ||\n message.includes('token limit')\n ) {\n return {\n message: 'Message too long. Try starting a new thread with /new.',\n type: 'context_length',\n retryable: false,\n originalError: err,\n };\n }\n\n // Check for content filter errors\n if (\n message.includes('content filter') ||\n message.includes('content_filter') ||\n message.includes('content policy') ||\n message.includes('safety') ||\n message.includes('prohibited')\n ) {\n return {\n message: \"Content was filtered by the model's safety system.\",\n type: 'content_filter',\n retryable: false,\n originalError: err,\n };\n }\n\n // Check for server errors\n if (\n message.includes('internal server') ||\n message.includes('server error') ||\n errorObj.statusCode === 500 ||\n errorObj.status === 500 ||\n errorObj.statusCode === 502 ||\n errorObj.status === 502 ||\n errorObj.statusCode === 503 ||\n errorObj.status === 503\n ) {\n return {\n message: 'Server error. The API may be experiencing issues.',\n type: 'server_error',\n retryable: true,\n retryDelay: 5000,\n originalError: err,\n };\n }\n\n // Check for invalid request errors\n if (\n message.includes('invalid request') ||\n message.includes('bad request') ||\n errorObj.statusCode === 400 ||\n errorObj.status === 400\n ) {\n return {\n message: `Invalid request: ${extractErrorDetail(err)}`,\n type: 'invalid_request',\n retryable: false,\n originalError: err,\n };\n }\n\n // Unknown error - try to extract useful info\n return {\n message: extractErrorDetail(err),\n type: 'unknown',\n retryable: false,\n originalError: err,\n };\n}\n\n/**\n * Extract retry-after header value from error.\n */\nfunction extractRetryAfter(error: Record<string, unknown>): number | undefined {\n const headers = error.headers as Record<string, unknown> | undefined;\n const retryAfter = error.retryAfter || headers?.['retry-after'];\n if (typeof retryAfter === 'number') {\n return retryAfter * 1000; // Convert seconds to ms\n }\n if (typeof retryAfter === 'string') {\n const seconds = parseInt(retryAfter, 10);\n if (!isNaN(seconds)) {\n return seconds * 1000;\n }\n }\n return undefined;\n}\n\n/**\n * Extract a useful error detail from an error object.\n */\nfunction extractErrorDetail(error: Error): string {\n const errorObj = error as unknown as Record<string, unknown>;\n\n // Try to get a specific error message from common API error formats\n if (errorObj.error && typeof errorObj.error === 'object') {\n const apiError = errorObj.error as Record<string, unknown>;\n if (apiError.message) return String(apiError.message);\n }\n\n if (errorObj.message) return String(errorObj.message);\n if (errorObj.detail) return String(errorObj.detail);\n if (errorObj.reason) return String(errorObj.reason);\n\n // Clean up the error message\n let message = error.message;\n\n // Remove common prefixes\n message = message.replace(/^(error|exception|failed):\\s*/i, '');\n\n // Truncate very long messages\n if (message.length > 200) {\n message = message.substring(0, 200) + '...';\n }\n\n return message || 'An unknown error occurred';\n}\n\n/**\n * Sleep for a given number of milliseconds.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Retry a function with exponential backoff.\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: {\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n onRetry?: (error: ParsedError, attempt: number) => void;\n } = {},\n): Promise<T> {\n const { maxRetries = 3, initialDelay = 1000, maxDelay = 30000, onRetry } = options;\n\n let lastError: ParsedError | undefined;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = parseError(error);\n\n // Don't retry non-retryable errors\n if (!lastError.retryable || attempt === maxRetries) {\n throw lastError.originalError;\n }\n\n // Calculate delay with exponential backoff\n const delay = Math.min(lastError.retryDelay || initialDelay * Math.pow(2, attempt), maxDelay);\n\n if (onRetry) {\n onRetry(lastError, attempt + 1);\n }\n\n await sleep(delay);\n }\n }\n\n // Should never reach here, but TypeScript needs this\n throw lastError?.originalError || new Error('Retry failed');\n}\n","/**\n * Notification utility for alerting the user when the TUI needs attention.\n * Sends a terminal bell and optionally a native OS notification.\n */\n\nimport { exec } from 'node:child_process';\nimport type { HookManager } from '../hooks/manager.js';\n\nexport type NotificationMode = 'bell' | 'system' | 'both' | 'off';\n\nexport type NotificationReason = 'agent_done' | 'ask_question' | 'tool_approval' | 'plan_approval' | 'sandbox_access';\n\n/**\n * Send a notification to the user.\n * - \"bell\": writes \\x07 to stdout (terminal bell)\n * - \"system\": sends a native OS notification (macOS only for now)\n * - \"both\": bell + system\n * - \"off\": no-op\n *\n * Also fires Notification hooks if a hookManager is provided.\n */\nexport function sendNotification(\n reason: NotificationReason,\n opts: {\n mode: NotificationMode;\n message?: string;\n hookManager?: HookManager;\n },\n): void {\n const { mode, message, hookManager } = opts;\n\n if (mode === 'off') {\n // Still fire hooks even when built-in notifications are off\n hookManager?.runNotification(reason, message);\n return;\n }\n\n if (mode === 'bell' || mode === 'both') {\n process.stdout.write('\\x07');\n }\n\n if (mode === 'system' || mode === 'both') {\n sendSystemNotification(reason, message);\n }\n\n hookManager?.runNotification(reason, message);\n}\n\nfunction sendSystemNotification(reason: NotificationReason, message?: string): void {\n if (process.platform === 'darwin') {\n const title = 'Mastra Code';\n const body = message || reasonToMessage(reason);\n const escaped = body.replace(/\"/g, '\\\\\"');\n exec(`osascript -e 'display notification \"${escaped}\" with title \"${title}\"'`);\n }\n // Linux/Windows: could add notify-send / powershell in the future\n}\n\nfunction reasonToMessage(reason: NotificationReason): string {\n switch (reason) {\n case 'agent_done':\n return 'Agent finished — waiting for your input';\n case 'ask_question':\n return 'Agent has a question for you';\n case 'tool_approval':\n return 'Tool requires your approval';\n case 'plan_approval':\n return 'Plan requires your approval';\n case 'sandbox_access':\n return 'Sandbox access requested';\n }\n}\n","/**\n * Display helpers for the TUI: error messages, info messages, notifications.\n */\nimport { Container, Text } from '@earendil-works/pi-tui';\n\nimport { parseError } from '../utils/errors.js';\nimport { insertChatComponentWithBoundarySpacing } from './chat-boundary-reconciliation.js';\nimport type { ChatSpacingKind } from './components/chat-spacing.js';\nimport type { NotificationMode, NotificationReason } from './notify.js';\nimport { sendNotification } from './notify.js';\nimport type { TUIState } from './state.js';\nimport { theme } from './theme.js';\n\nclass InfoMessageComponent extends Container {\n constructor(lines: Text[]) {\n super();\n for (const line of lines) {\n this.addChild(line);\n }\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'system';\n }\n}\n\nexport function showError(state: TUIState, message: string): void {\n const component = new InfoMessageComponent([new Text(theme.fg('error', `Error: ${message}`), 1, 0)]);\n insertChatComponentWithBoundarySpacing(state.chatContainer, component);\n state.ui.requestRender();\n}\n\nexport function showInfo(state: TUIState, message: string): void {\n const component = new InfoMessageComponent([new Text(theme.fg('muted', message), 1, 0)]);\n insertChatComponentWithBoundarySpacing(state.chatContainer, component);\n state.ui.requestRender();\n}\n\nexport function showFormattedError(\n state: TUIState,\n event:\n | {\n error: Error;\n errorType?: string;\n retryable?: boolean;\n retryDelay?: number;\n }\n | Error,\n): void {\n const error = 'error' in event ? event.error : event;\n const parsed = parseError(error);\n\n // Show the main error message\n let errorText = `Error: ${parsed.message}`;\n if (parsed.detail && parsed.detail !== parsed.message) {\n errorText += theme.fg('muted', ` (${parsed.detail})`);\n }\n if (parsed.requestUrl) {\n errorText += theme.fg('muted', ` [url: ${parsed.requestUrl}]`);\n }\n\n // Add retry info if applicable\n const retryable = 'retryable' in event ? event.retryable : parsed.retryable;\n const retryDelay = 'retryDelay' in event ? event.retryDelay : parsed.retryDelay;\n if (retryable && retryDelay) {\n const seconds = Math.ceil(retryDelay / 1000);\n errorText += theme.fg('muted', ` (retry in ${seconds}s)`);\n }\n\n const lines: Text[] = [new Text(theme.fg('error', errorText), 1, 0)];\n\n // Add helpful hints based on error type\n const hint = getErrorHint(parsed.type);\n if (hint) {\n lines.push(new Text(theme.fg('muted', ` Hint: ${hint}`), 1, 0));\n }\n\n const component = new InfoMessageComponent(lines);\n insertChatComponentWithBoundarySpacing(state.chatContainer, component);\n state.ui.requestRender();\n}\n\nfunction getErrorHint(errorType: string): string | null {\n switch (errorType) {\n case 'auth':\n return 'Use /login to authenticate with a provider';\n case 'model_not_found':\n return 'Use /models to select a different model';\n case 'context_length':\n return 'Use /new to start a fresh conversation';\n case 'rate_limit':\n return 'Wait a moment and try again';\n case 'network':\n return 'Check your internet connection';\n default:\n return null;\n }\n}\n\nexport function notify(state: TUIState, reason: NotificationReason, message?: string): void {\n const mode = ((state.harness.getState() as any)?.notifications ?? 'off') as NotificationMode;\n sendNotification(reason, {\n mode,\n message,\n hookManager: state.hookManager,\n });\n}\n","import { McpSelectorComponent } from '../components/mcp-selector.js';\nimport { showInfo } from '../display.js';\nimport { showModalOverlay } from '../overlay.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport async function handleMcpCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const mm = ctx.mcpManager;\n if (!mm) {\n ctx.showInfo('MCP system not initialized.');\n return;\n }\n\n const subcommand = args[0];\n\n // /mcp reload — reconnect all servers (also available from the selector)\n if (subcommand === 'reload') {\n await reloadServers(ctx);\n return;\n }\n\n // /mcp status — text-only status dump (non-interactive fallback)\n if (subcommand === 'status') {\n showTextStatus(ctx);\n return;\n }\n\n const paths = mm.getConfigPaths();\n\n // No servers? Show setup instructions.\n if (!mm.hasServers()) {\n ctx.showInfo(\n `No MCP servers configured.\\n\\n` +\n `Add servers to:\\n` +\n ` ${paths.project} (project)\\n` +\n ` ${paths.global} (global)\\n` +\n ` ${paths.claude} (Claude Code compat)\\n\\n` +\n `Example mcp.json:\\n` +\n ` {\\n` +\n ` \"mcpServers\": {\\n` +\n ` \"filesystem\": {\\n` +\n ` \"command\": \"npx\",\\n` +\n ` \"args\": [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/path\"],\\n` +\n ` \"env\": {}\\n` +\n ` },\\n` +\n ` \"remote-api\": {\\n` +\n ` \"url\": \"https://mcp.example.com/sse\",\\n` +\n ` \"headers\": { \"Authorization\": \"Bearer <token>\" }\\n` +\n ` }\\n` +\n ` }\\n` +\n ` }\\n\\n` +\n `Note: For dynamic auth (token refresh), use a stdio wrapper.\\n` +\n `\"headers\" only supports static values.`,\n );\n return;\n }\n\n // Default: show interactive selector overlay\n const statuses = mm.getServerStatuses();\n const skipped = mm.getSkippedServers();\n\n const selector = new McpSelectorComponent({\n tui: ctx.state.ui,\n statuses,\n skipped,\n configPaths: paths,\n getStatuses: () => ({\n statuses: mm.getServerStatuses(),\n skipped: mm.getSkippedServers(),\n }),\n onReloadAll: async () => {\n await mm.reload();\n return {\n statuses: mm.getServerStatuses(),\n skipped: mm.getSkippedServers(),\n };\n },\n onReconnectServer: async (name: string) => {\n return mm.reconnectServer(name);\n },\n getServerLogs: (name: string) => {\n return mm.getServerLogs(name);\n },\n showInfo: (msg: string) => {\n showInfo(ctx.state, msg);\n },\n onClose: () => {\n selector.dispose();\n ctx.state.ui.hideOverlay();\n },\n });\n\n showModalOverlay(ctx.state.ui, selector, { widthPercent: 0.8, maxHeight: '70%' });\n selector.focused = true;\n}\n\nasync function reloadServers(ctx: SlashCommandContext): Promise<void> {\n const mm = ctx.mcpManager;\n if (!mm) return;\n ctx.showInfo('MCP: Reconnecting to servers...');\n try {\n await mm.reload();\n const statuses = mm.getServerStatuses();\n const connected = statuses.filter(s => s.connected);\n const totalTools = connected.reduce((sum, s) => sum + s.toolCount, 0);\n ctx.showInfo(`MCP: Reloaded. ${connected.length} server(s) connected, ${totalTools} tool(s).`);\n for (const s of statuses.filter(s => !s.connected)) {\n ctx.showInfo(`MCP: Failed to connect to \"${s.name}\": ${s.error}`);\n }\n } catch (error) {\n ctx.showError(`MCP reload failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nfunction showTextStatus(ctx: SlashCommandContext): void {\n const mm = ctx.mcpManager;\n if (!mm) return;\n const paths = mm.getConfigPaths();\n const statuses = mm.getServerStatuses();\n const skipped = mm.getSkippedServers();\n\n const lines: string[] = [`MCP Servers:`];\n lines.push(` Project: ${paths.project}`);\n lines.push(` Global: ${paths.global}`);\n lines.push(` Claude: ${paths.claude}`);\n lines.push('');\n\n for (const status of statuses) {\n const icon = status.connecting ? '⟳' : status.connected ? '\\u2713' : '\\u2717';\n const state = status.connecting ? 'connecting...' : status.connected ? 'connected' : `error: ${status.error}`;\n lines.push(` ${icon} ${status.name} [${status.transport}] (${state})`);\n if (status.toolNames.length > 0) {\n for (const toolName of status.toolNames) {\n lines.push(` - ${toolName}`);\n }\n }\n }\n\n if (skipped.length > 0) {\n lines.push('');\n lines.push(' Skipped:');\n for (const s of skipped) {\n lines.push(` \\u2717 ${s.name}: ${s.reason}`);\n }\n }\n\n lines.push('');\n lines.push(` /mcp reload - Disconnect and reconnect all servers`);\n\n ctx.showInfo(lines.join('\\n'));\n}\n","import type { IToolExecutionComponent } from '../components/tool-execution-interface.js';\nimport type { SlashCommandContext } from './types.js';\n\nfunction applyCurrentModeColorToRenderedTools(ctx: SlashCommandContext): void {\n const color = ctx.harness.getCurrentMode?.()?.metadata?.color;\n const modeColor = typeof color === 'string' ? color : undefined;\n for (const tool of ctx.state.allToolComponents as IToolExecutionComponent[]) {\n tool.setCompactToolModeColor?.(modeColor);\n }\n ctx.state.ui.requestRender();\n}\n\nexport async function handleModeCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const modes = ctx.harness.listModes();\n if (modes.length <= 1) {\n ctx.showInfo('Only one mode available');\n return;\n }\n if (args[0]) {\n try {\n await ctx.harness.switchMode({ modeId: args[0] });\n applyCurrentModeColorToRenderedTools(ctx);\n } catch (err) {\n ctx.showError(`Failed to switch mode: ${err instanceof Error ? err.message : String(err)}`);\n }\n } else {\n const currentMode = ctx.harness.getCurrentMode();\n const modeList = modes\n .map(m => ` ${m.id === currentMode?.id ? '* ' : ' '}${m.name}${m.description ? ` - ${m.description}` : ''}`)\n .join('\\n');\n ctx.showInfo(`Modes:\\n${modeList}`);\n }\n}\n","/**\n * SlashCommandComponent - renders a bordered box for slash command messages\n * showing the command name as a heading and truncated content that can be\n * expanded with ctrl+e. The full content is still sent to the assistant.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, getTermWidth, mastra } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nconst MAX_COLLAPSED_LINES = 3;\nconst getBorderColor = () => mastra.green;\n\nexport class SlashCommandComponent extends Container {\n private commandName: string;\n private contentLines: string[];\n private expanded = false;\n\n constructor(commandName: string, content?: string) {\n super();\n this.commandName = commandName;\n this.contentLines = content ? content.split('\\n').filter(l => l.trim()) : [];\n this.rebuild();\n }\n\n matches(commandName: string, content: string): boolean {\n return (\n this.commandName === commandName &&\n this.contentLines.join('\\n') ===\n content\n .split('\\n')\n .filter(l => l.trim())\n .join('\\n')\n );\n }\n\n setExpanded(expanded: boolean): void {\n if (this.expanded === expanded) return;\n this.expanded = expanded;\n this.rebuild();\n }\n\n private rebuild(): void {\n this.clear();\n\n const border = (char: string) => chalk.bold.hex(getBorderColor())(char);\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 6 - BOX_INDENT * 2;\n\n const heading = chalk.hex(mastra.specialGray)(`/${this.commandName}`);\n\n if (this.contentLines.length === 0) {\n this.addChild(new Text(`${border('╰──')} ${heading}`, BOX_INDENT, 0));\n return;\n }\n\n // Top border\n this.addChild(new Text(`${border('╭──')}`, BOX_INDENT, 0));\n\n // Word-wrap content lines\n const wrappedLines: string[] = [];\n for (const line of this.contentLines) {\n if (line.length > maxLineWidth) {\n let remaining = line;\n while (remaining.length > maxLineWidth) {\n const breakAt = remaining.lastIndexOf(' ', maxLineWidth);\n const splitAt = breakAt > 0 ? breakAt : maxLineWidth;\n wrappedLines.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n if (remaining) wrappedLines.push(remaining);\n } else {\n wrappedLines.push(line);\n }\n }\n\n const truncated = !this.expanded && wrappedLines.length > MAX_COLLAPSED_LINES + 1;\n const displayLines = truncated ? wrappedLines.slice(0, MAX_COLLAPSED_LINES) : wrappedLines;\n\n const contentText = displayLines\n .map(\n line =>\n `${border('│')} ${chalk.hex(mastra.mainGray)(line.length > maxLineWidth ? line.slice(0, maxLineWidth - 1) + '…' : line)}`,\n )\n .join('\\n');\n this.addChild(new Text(contentText, BOX_INDENT, 0));\n\n if (truncated) {\n const moreText = chalk.hex(mastra.darkGray)(\n `... ${wrappedLines.length - MAX_COLLAPSED_LINES} more lines (ctrl+e to expand)`,\n );\n this.addChild(new Text(`${border('│')} ${moreText}`, BOX_INDENT, 0));\n }\n\n // Bottom border with command name\n this.addChild(new Text(`${border('╰──')} ${heading}`, BOX_INDENT, 0));\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\n","/**\n * Component that renders an assistant message with streaming support.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Container, Markdown, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { MarkdownTheme } from '@earendil-works/pi-tui';\nimport type { HarnessMessage } from '@mastra/core/harness';\nimport { CHAT_INDENT, getMarkdownTheme, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nlet _compId = 0;\nfunction asmDebugLog(...args: unknown[]) {\n if (!['true', '1'].includes(process.env.MASTRA_TUI_DEBUG!)) {\n return;\n }\n const line = `[ASM ${new Date().toISOString()}] ${args.map(a => (typeof a === 'string' ? a : JSON.stringify(a))).join(' ')}\\n`;\n try {\n fs.appendFileSync(path.join(process.cwd(), 'tui-debug.log'), line);\n } catch {}\n}\n\nexport class AssistantMessageComponent extends Container {\n private contentContainer: Container;\n private hideThinkingBlock: boolean;\n private markdownTheme: MarkdownTheme;\n private lastMessage?: HarnessMessage;\n private _id: number;\n\n constructor(message?: HarnessMessage, hideThinkingBlock = false, markdownTheme: MarkdownTheme = getMarkdownTheme()) {\n super();\n this._id = ++_compId;\n\n this.hideThinkingBlock = hideThinkingBlock;\n this.markdownTheme = markdownTheme;\n\n // Container for text/thinking content\n this.contentContainer = new Container();\n this.addChild(this.contentContainer);\n\n asmDebugLog(`COMP#${this._id} CREATED`);\n\n if (message) {\n this.updateContent(message);\n }\n }\n\n override invalidate(): void {\n super.invalidate();\n if (this.lastMessage) {\n const summary = this.lastMessage.content\n .map(c => (c.type === 'text' ? `text(${c.text.length}ch)` : c.type))\n .join(', ');\n asmDebugLog(`COMP#${this._id} INVALIDATE lastMessage=[${summary}]`);\n this.updateContent(this.lastMessage);\n }\n }\n\n setHideThinkingBlock(hide: boolean): void {\n this.hideThinkingBlock = hide;\n }\n\n getChatSpacingKind(): ChatSpacingKind | undefined {\n return this.contentContainer.children.length > 0 ? 'assistant-message' : undefined;\n }\n\n updateContent(message: HarnessMessage): void {\n // Deep copy the message to prevent mutation from the harness's shared content array\n this.lastMessage = {\n ...message,\n content: message.content.map(c => ({ ...c })),\n };\n\n // Clear content container\n this.contentContainer.clear();\n\n // Render content in order\n for (let i = 0; i < message.content.length; i++) {\n const content = message.content[i]!;\n\n if (content.type === 'text' && (content as any).text.trim()) {\n // Assistant text messages - trim the text\n this.contentContainer.addChild(\n new Markdown((content as any).text.trim(), CHAT_INDENT, 0, this.markdownTheme, {\n color: (text: string) => theme.fg('text', text),\n }),\n );\n } else if (content.type === 'thinking' && (content as any).thinking.trim()) {\n // Check if there's text content after this thinking block\n const hasTextAfter = message.content.slice(i + 1).some(c => c.type === 'text' && (c as any).text.trim());\n\n if (this.hideThinkingBlock) {\n // Show static \"Thinking...\" label when hidden\n this.contentContainer.addChild(\n new Text(theme.italic(theme.fg('thinkingText', 'Thinking...')), CHAT_INDENT, 0),\n );\n if (hasTextAfter) {\n this.contentContainer.addChild(new Spacer(1));\n }\n } else {\n // Thinking traces in thinkingText color, italic\n this.contentContainer.addChild(\n new Markdown((content as any).thinking.trim(), CHAT_INDENT, 0, this.markdownTheme, {\n color: (text: string) => theme.fg('thinkingText', text),\n italic: true,\n }),\n );\n this.contentContainer.addChild(new Spacer(1));\n }\n }\n // Skip tool_call and tool_result - those are rendered by ToolExecutionComponent\n }\n\n // Check if aborted or error - show after partial content\n if (message.stopReason === 'aborted') {\n const abortMessage = message.errorMessage || 'Interrupted';\n this.contentContainer.addChild(new Text(theme.fg('error', abortMessage), CHAT_INDENT, 0));\n } else if (message.stopReason === 'error') {\n const errorMsg = message.errorMessage || 'Unknown error';\n this.contentContainer.addChild(new Text(theme.fg('error', `Error: ${errorMsg}`), CHAT_INDENT, 0));\n }\n }\n}\n","import { Container, Text } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, mastra, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nexport interface NotificationSummaryOptions {\n message: string;\n pending: number;\n bySource: Record<string, number>;\n}\n\nexport class NotificationSummaryComponent extends Container {\n constructor(options: NotificationSummaryOptions) {\n super();\n\n const title = chalk.hex(mastra.orange).bold(`Notification summary: ${options.pending} pending`);\n this.addChild(new Text(title, BOX_INDENT, 0));\n\n const sourceSummary = Object.entries(options.bySource)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([source, count]) => `${source}: ${count}`)\n .join(', ');\n const message = sourceSummary || options.message.trim();\n\n if (message) {\n this.addChild(new Text(theme.fg('dim', message), BOX_INDENT + 2, 0));\n }\n\n this.addChild(\n new Text(theme.fg('dim', 'Use notification_inbox to inspect pending notifications.'), BOX_INDENT + 2, 0),\n );\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'system';\n }\n}\n","import { Container, Text, visibleWidth } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, getTermWidth, mastra, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nexport interface NotificationOptions {\n message: string;\n source?: string;\n kind?: string;\n priority?: string;\n status?: string;\n}\n\nfunction priorityColor(priority?: string): string {\n if (priority === 'urgent' || priority === 'high') return mastra.orange;\n if (priority === 'medium') return mastra.blue;\n return mastra.darkGray;\n}\n\nconst MAX_NOTIFICATION_CONTENT_WIDTH = 100;\nconst MIN_NOTIFICATION_CONTENT_WIDTH = 24;\n\nfunction padLine(value: string, width: number): string {\n return value + ' '.repeat(Math.max(0, width - visibleWidth(value)));\n}\n\nfunction splitLongWord(word: string, maxWidth: number): string[] {\n const segments: string[] = [];\n let current = '';\n\n for (const char of word) {\n if (current && visibleWidth(current + char) > maxWidth) {\n segments.push(current);\n current = char;\n } else {\n current += char;\n }\n }\n\n if (current) segments.push(current);\n return segments;\n}\n\nfunction wrapText(value: string, maxWidth: number): string[] {\n const lines: string[] = [];\n\n for (const paragraph of value.split('\\n')) {\n const words = paragraph.trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) {\n lines.push('');\n continue;\n }\n\n let current = '';\n for (const word of words) {\n const wordSegments = visibleWidth(word) > maxWidth ? splitLongWord(word, maxWidth) : [word];\n for (const segment of wordSegments) {\n const next = current ? `${current} ${segment}` : segment;\n if (current && visibleWidth(next) > maxWidth) {\n lines.push(current);\n current = segment;\n } else {\n current = next;\n }\n }\n }\n\n if (current) lines.push(current);\n }\n\n return lines;\n}\n\nexport class NotificationComponent extends Container {\n constructor(options: NotificationOptions) {\n super();\n\n const titleText = options.source ? `notification from ${options.source}` : 'notification';\n const details = [options.priority, options.kind, options.status].filter(Boolean).join(' · ');\n const message = options.message.trim();\n const maxContentWidth = Math.max(\n MIN_NOTIFICATION_CONTENT_WIDTH,\n Math.min(MAX_NOTIFICATION_CONTENT_WIDTH, getTermWidth() - BOX_INDENT - 4),\n );\n const titleLines = wrapText(titleText, maxContentWidth);\n const detailLines = details ? wrapText(details, maxContentWidth) : [];\n const messageLines = message ? wrapText(message, maxContentWidth) : [];\n const allLines = [...titleLines, ...detailLines, ...messageLines];\n const contentWidth = Math.max(...allLines.map(line => visibleWidth(line)), 1);\n const borderColor = chalk.hex(mastra.blue);\n const top = `╭${'─'.repeat(contentWidth + 2)}╮`;\n const bottom = `╰${'─'.repeat(contentWidth + 2)}╯`;\n\n this.addChild(new Text(borderColor(top), BOX_INDENT, 0));\n for (const line of titleLines) {\n this.addChild(\n new Text(\n `${borderColor('│')} ${chalk.hex(priorityColor(options.priority)).bold(padLine(line, contentWidth))} ${borderColor('│')}`,\n BOX_INDENT,\n 0,\n ),\n );\n }\n\n for (const line of detailLines) {\n this.addChild(\n new Text(\n `${borderColor('│')} ${theme.fg('dim', padLine(line, contentWidth))} ${borderColor('│')}`,\n BOX_INDENT,\n 0,\n ),\n );\n }\n\n for (const line of messageLines) {\n this.addChild(new Text(`${borderColor('│')} ${padLine(line, contentWidth)} ${borderColor('│')}`, BOX_INDENT, 0));\n }\n\n this.addChild(new Text(borderColor(bottom), BOX_INDENT, 0));\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'system';\n }\n}\n","/**\n * TUI component for rendering OM observation markers in chat history.\n * Supports updating in-place (start → end/failed).\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport { BOX_INDENT, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\n/**\n * Format token count for display (e.g., 7234 -> \"7.2k\", 234 -> \"0.2k\", 0 -> \"0\")\n */\nfunction formatTokens(tokens: number): string {\n if (tokens === 0) return '0';\n const k = tokens / 1000;\n return k % 1 === 0 ? `${k}k` : `${k.toFixed(1)}k`;\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n\n const totalSeconds = Math.floor(ms / 1000);\n if (totalSeconds < 60) return `${totalSeconds}s`;\n\n const totalMinutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n if (totalMinutes < 60) return seconds === 0 ? `${totalMinutes}m` : `${totalMinutes}m${seconds}s`;\n\n const hours = Math.floor(totalMinutes / 60);\n const minutes = totalMinutes % 60;\n return minutes === 0 ? `${hours}h` : `${hours}h${minutes}m`;\n}\nexport type OMMarkerData =\n | {\n type: 'om_observation_start';\n tokensToObserve: number;\n operationType?: 'observation' | 'reflection';\n }\n | {\n type: 'om_observation_end';\n tokensObserved: number;\n observationTokens: number;\n durationMs: number;\n operationType?: 'observation' | 'reflection';\n }\n | {\n type: 'om_observation_failed';\n error: string;\n tokensAttempted?: number;\n operationType?: 'observation' | 'reflection';\n }\n | {\n type: 'om_buffering_start';\n operationType: 'observation' | 'reflection';\n tokensToBuffer: number;\n }\n | {\n type: 'om_buffering_end';\n operationType: 'observation' | 'reflection';\n tokensBuffered: number;\n bufferedTokens: number;\n observations?: string;\n }\n | {\n type: 'om_buffering_failed';\n operationType: 'observation' | 'reflection';\n error: string;\n }\n | {\n type: 'om_activation';\n operationType: 'observation' | 'reflection';\n tokensActivated: number;\n observationTokens: number;\n activationCount?: number;\n activateAfterIdle?: number;\n }\n | {\n type: 'om_activation_provider_change';\n previousModel: string;\n currentModel: string;\n }\n | {\n type: 'om_thread_title_updated';\n oldTitle?: string;\n newTitle: string;\n };\n\n/**\n * Renders an inline OM observation marker in the chat history.\n * Can be updated in-place to transition from start → end/failed.\n */\nexport class OMMarkerComponent extends Container {\n private textChild: Text;\n\n constructor(data: OMMarkerData) {\n super();\n this.textChild = new Text(formatMarker(data), BOX_INDENT, 0);\n this.addChild(this.textChild);\n }\n\n /**\n * Update the marker in-place (e.g., from start → end).\n */\n update(data: OMMarkerData): void {\n this.textChild.setText(formatMarker(data));\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\nfunction formatMarker(data: OMMarkerData): string {\n const isReflection = 'operationType' in data && data.operationType === 'reflection';\n const label = isReflection ? 'Reflection' : 'Observation';\n\n switch (data.type) {\n case 'om_observation_start': {\n const tokens = data.tokensToObserve > 0 ? ` ~${formatTokens(data.tokensToObserve)} tokens` : '';\n return theme.fg('muted', ` 🧠 ${label} in progress${tokens}...`);\n }\n case 'om_observation_end': {\n const observed = formatTokens(data.tokensObserved);\n const compressed = formatTokens(data.observationTokens);\n const ratio =\n data.tokensObserved > 0 && data.observationTokens > 0\n ? `${Math.round(data.tokensObserved / data.observationTokens)}x`\n : '';\n const duration = (data.durationMs / 1000).toFixed(1);\n const ratioStr = ratio ? ` (${ratio} compression)` : '';\n return theme.fg('success', ` 🧠 Observed: ${observed} → ${compressed} tokens${ratioStr} in ${duration}s ✓`);\n }\n case 'om_observation_failed': {\n const tokens = data.tokensAttempted ? ` (${formatTokens(data.tokensAttempted)} tokens)` : '';\n return theme.fg('error', ` ✗ ${label} failed${tokens}: ${data.error}`);\n }\n case 'om_buffering_start': {\n const tokens = data.tokensToBuffer > 0 ? ` ~${formatTokens(data.tokensToBuffer)} tokens` : '';\n return theme.fg('muted', ` ⟳ Buffering ${label.toLowerCase()}${tokens}...`);\n }\n case 'om_buffering_end': {\n const input = formatTokens(data.tokensBuffered);\n // For observations: bufferedTokens is cumulative total, not this cycle's output.\n // Estimate output from observations string (~4 chars/token).\n // For reflections: bufferedTokens IS the output token count.\n const outputTokens =\n data.operationType === 'observation' && data.observations\n ? Math.round(data.observations.length / 4)\n : data.bufferedTokens;\n const output = formatTokens(outputTokens);\n const ratio =\n data.tokensBuffered > 0 && outputTokens > 0 ? ` (${Math.round(data.tokensBuffered / outputTokens)}x)` : '';\n return theme.fg('success', ` ✓ Buffered ${label.toLowerCase()}: ${input} → ${output} tokens${ratio}`);\n }\n case 'om_buffering_failed': {\n return theme.fg('error', ` ✗ Buffering ${label.toLowerCase()} failed: ${data.error}`);\n }\n case 'om_activation': {\n if (data.operationType === 'reflection') {\n // For reflection, tokensActivated = obs tokens before, observationTokens = obs tokens after.\n // Reflection compresses observations in place — no message tokens move.\n const before = formatTokens(data.tokensActivated);\n const after = formatTokens(data.observationTokens);\n const delta = data.tokensActivated - data.observationTokens;\n const deltaStr = delta > 0 ? ` (-${formatTokens(delta)})` : delta < 0 ? ` (+${formatTokens(-delta)})` : '';\n return theme.fg('success', ` ✓ Activated reflection: ${before} → ${after} obs tokens${deltaStr}`);\n }\n const msgTokens = formatTokens(data.tokensActivated);\n const obsTokens = formatTokens(data.observationTokens);\n const label =\n data.activationCount && data.activationCount > 1 ? `${data.activationCount} observations` : 'observations';\n const idleSuffix =\n data.activateAfterIdle !== undefined ? ` (${formatDuration(data.activateAfterIdle)} idle timeout)` : '';\n return theme.fg(\n 'success',\n ` ✓ Activated ${label}: -${msgTokens} msg tokens, +${obsTokens} obs tokens${idleSuffix}`,\n );\n }\n case 'om_activation_provider_change': {\n return theme.fg('muted', ` Model changed ${data.previousModel} → ${data.currentModel}, activating observations`);\n }\n case 'om_thread_title_updated': {\n return theme.fg('muted', ` thread title updated: ${data.newTitle}`);\n }\n }\n}\n","/**\n * TUI component for rendering OM observation/reflection output in a bordered box.\n * Uses observer (amber) color for observations and reflector (red) color for reflections.\n * Collapsed to COLLAPSED_LINES by default, expandable with ctrl+e.\n * Includes marker info (emoji, compression stats) in the footer.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, getTermWidth, mastra } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\n// Read from proxy at render time so they pick up contrast adaptation\nconst getObserverColor = () => mastra.orange;\nconst getReflectorColor = () => mastra.red;\nconst COLLAPSED_LINES = 10;\n\nfunction formatTokens(tokens: number): string {\n if (tokens === 0) return '0';\n const k = tokens / 1000;\n return k % 1 === 0 ? `${k}k` : `${k.toFixed(1)}k`;\n}\n\n/** Truncate a string with ANSI codes to a visible width */\nfunction truncateAnsi(str: string, maxWidth: number): string {\n const ansiRegex = /\\x1b\\[[0-9;]{0,32}m/g;\n let visibleLength = 0;\n let result = '';\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = ansiRegex.exec(str)) !== null) {\n const textBefore = str.slice(lastIndex, match.index);\n for (const char of textBefore) {\n if (visibleLength >= maxWidth) break;\n result += char;\n visibleLength++;\n }\n if (visibleLength >= maxWidth) break;\n result += match[0];\n lastIndex = match.index + match[0].length;\n }\n\n const remaining = str.slice(lastIndex);\n for (const char of remaining) {\n if (visibleLength >= maxWidth) break;\n result += char;\n visibleLength++;\n }\n\n if (visibleLength >= maxWidth) {\n result += '\\x1b[0m';\n }\n return result;\n}\n\n/**\n * Soft-wrap an array of lines to fit within maxWidth, preserving words where possible.\n * Returns groups where each group corresponds to one original line split into wrapped segments.\n */\nfunction softWrapLines(lines: string[], maxWidth: number): { groups: string[][]; flat: string[] } {\n const groups: string[][] = [];\n const flat: string[] = [];\n for (const line of lines) {\n if (line.length <= maxWidth) {\n groups.push([line]);\n flat.push(line);\n continue;\n }\n // Word-wrap: break at spaces when possible\n const group: string[] = [];\n let remaining = line;\n while (remaining.length > maxWidth) {\n let breakAt = remaining.lastIndexOf(' ', maxWidth);\n if (breakAt <= 0) {\n breakAt = maxWidth;\n }\n const segment = remaining.slice(0, breakAt);\n group.push(segment);\n flat.push(segment);\n remaining = remaining.slice(breakAt).replace(/^ /, '');\n }\n if (remaining.length > 0) {\n group.push(remaining);\n flat.push(remaining);\n }\n groups.push(group);\n }\n return { groups, flat };\n}\n\nexport type OMOutputType = 'observation' | 'reflection';\n\nexport interface OMOutputData {\n type: OMOutputType;\n observations: string;\n currentTask?: string;\n suggestedResponse?: string;\n durationMs?: number;\n tokensObserved?: number;\n observationTokens?: number;\n compressedTokens?: number;\n}\n\nexport class OMOutputComponent extends Container {\n private data: OMOutputData;\n private expanded: boolean = false;\n\n constructor(data: OMOutputData) {\n super();\n this.data = data;\n this.rebuild();\n }\n\n setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.rebuild();\n }\n\n toggleExpanded(): void {\n this.setExpanded(!this.expanded);\n }\n private rebuild(): void {\n this.clear();\n\n const isReflection = this.data.type === 'reflection';\n const color = isReflection ? getReflectorColor() : getObserverColor();\n const border = (char: string) => chalk.bold.hex(color)(char);\n\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 6 - BOX_INDENT * 2; // \"│ \" prefix + buffer + indent\n // Soft-wrap all original lines to terminal width\n const originalLines = this.data.observations.split('\\n');\n const { groups, flat: wrappedLines } = softWrapLines(originalLines, maxLineWidth);\n const originalLineCount = originalLines.length;\n const wrappedLineCount = wrappedLines.length;\n\n // Build footer text with marker info (emoji + compression stats)\n const footerText = this.buildFooterText(color);\n\n // Top border\n this.addChild(new Text(border('╭──'), BOX_INDENT, 0));\n\n // Content lines with left border\n let truncated = false;\n const borderedLines: string[] = [];\n if (!this.expanded && wrappedLineCount > COLLAPSED_LINES + 1) {\n // Collect head groups until we hit ~half the budget\n const headBudget = Math.ceil(COLLAPSED_LINES / 2);\n const headLines: string[] = [];\n let headGroupCount = 0;\n for (const group of groups) {\n if (headLines.length + group.length > headBudget && headLines.length > 0) break;\n headLines.push(...group);\n headGroupCount++;\n }\n\n // Collect tail groups from the end until we hit the other half\n const tailBudget = COLLAPSED_LINES - headLines.length;\n const tailLines: string[] = [];\n let tailGroupStart = groups.length;\n for (let i = groups.length - 1; i >= headGroupCount; i--) {\n if (tailLines.length + groups[i]!.length > tailBudget && tailLines.length > 0) break;\n tailLines.unshift(...groups[i]!);\n tailGroupStart = i;\n }\n\n const hiddenGroups = tailGroupStart - headGroupCount;\n truncated = hiddenGroups > 0;\n\n if (truncated) {\n for (const line of headLines) {\n borderedLines.push(border('│') + ' ' + chalk.hex(mastra.specialGray)(line));\n }\n borderedLines.push(\n border('│') + ' ' + chalk.hex(mastra.mainGray)(`... ${originalLineCount} lines total (ctrl+e to expand)`),\n );\n for (const line of tailLines) {\n borderedLines.push(border('│') + ' ' + chalk.hex(mastra.specialGray)(line));\n }\n } else {\n // Edge case: all groups fit when snapped to boundaries\n for (const line of wrappedLines) {\n borderedLines.push(border('│') + ' ' + chalk.hex(mastra.specialGray)(line));\n }\n }\n } else {\n for (const line of wrappedLines) {\n borderedLines.push(border('│') + ' ' + chalk.hex(mastra.specialGray)(line));\n }\n }\n\n const displayOutput = borderedLines.join('\\n');\n if (displayOutput.trim()) {\n this.addChild(new Text(displayOutput, BOX_INDENT, 0));\n }\n\n // Current task / suggested response sections\n if (this.data.currentTask && (this.expanded || !truncated)) {\n const taskLine =\n border('│') +\n ' ' +\n chalk.hex(color).bold('Current task: ') +\n chalk.hex(mastra.specialGray)(this.data.currentTask);\n this.addChild(new Text(truncateAnsi(taskLine, termWidth - 2 - BOX_INDENT * 2), BOX_INDENT, 0));\n }\n\n if (this.data.suggestedResponse && (this.expanded || !truncated)) {\n const sugLine =\n border('│') +\n ' ' +\n chalk.hex(color).bold('Suggested response: ') +\n chalk.hex(mastra.specialGray)(this.data.suggestedResponse);\n this.addChild(new Text(truncateAnsi(sugLine, termWidth - 2 - BOX_INDENT * 2), BOX_INDENT, 0));\n }\n\n // Bottom border with footer\n this.addChild(new Text(`${border('╰──')} ${footerText}`, BOX_INDENT, 0));\n }\n\n private buildFooterText(color: string): string {\n const isReflection = this.data.type === 'reflection';\n const emoji = '🧠';\n\n if (isReflection) {\n // Reflection: \"🧠 Reflected: Xk → Yk tokens (Zx compression) in Ns ✓\"\n const observed = formatTokens(this.data.tokensObserved ?? 0);\n const compressed = formatTokens(this.data.compressedTokens ?? this.data.observationTokens ?? 0);\n const ratio =\n (this.data.tokensObserved ?? 0) > 0 && (this.data.compressedTokens ?? this.data.observationTokens ?? 0) > 0\n ? `${Math.round((this.data.tokensObserved ?? 0) / (this.data.compressedTokens ?? this.data.observationTokens ?? 1))}x`\n : '';\n const durationStr = this.data.durationMs ? ` in ${(this.data.durationMs / 1000).toFixed(1)}s` : '';\n const ratioStr = ratio ? ` (${ratio} compression)` : '';\n return `${emoji} ${chalk.hex(color)(`Reflected: ${observed} → ${compressed} tokens${ratioStr}${durationStr}`)} ${chalk.hex(mastra.green)('✓')}`;\n } else {\n // Observation: \"🧠 Observed: Xk → Yk tokens (Zx compression) in Ns ✓\"\n const observed = formatTokens(this.data.tokensObserved ?? 0);\n const compressed = formatTokens(this.data.observationTokens ?? 0);\n const ratio =\n (this.data.tokensObserved ?? 0) > 0 && (this.data.observationTokens ?? 0) > 0\n ? `${Math.round((this.data.tokensObserved ?? 0) / (this.data.observationTokens ?? 1))}x`\n : '';\n const durationStr = this.data.durationMs ? ` in ${(this.data.durationMs / 1000).toFixed(1)}s` : '';\n const ratioStr = ratio ? ` (${ratio} compression)` : '';\n return `${emoji} ${chalk.hex(color)(`Observed: ${observed} → ${compressed} tokens${ratioStr}${durationStr}`)} ${chalk.hex(mastra.green)('✓')}`;\n }\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\n","/**\n * Inline plan approval component.\n * Shows a submitted plan as rendered markdown with Approve/Reject/Request Changes options\n * directly in the conversation flow.\n */\n\nimport {\n Box,\n Container,\n getKeybindings,\n Input,\n Markdown,\n SelectList,\n Spacer,\n Text,\n truncateToWidth,\n visibleWidth,\n} from '@earendil-works/pi-tui';\nimport type { Component, Focusable, SelectItem, TUI } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, theme, getSelectListTheme, getMarkdownTheme, mastra } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nexport interface PlanApprovalInlineOptions {\n toolCallId: string;\n title: string;\n plan: string;\n onApprove: () => void;\n onGoal: () => void;\n onReject: (feedback?: string) => void;\n}\n\nclass PlanContentBox implements Component {\n constructor(private plan: string) {}\n\n invalidate(): void {}\n\n render(width: number): string[] {\n const availableWidth = Math.max(24, width - BOX_INDENT);\n const innerWidth = Math.max(20, availableWidth - 4);\n const markdown = new Markdown(this.plan, 0, 0, getMarkdownTheme(), {\n color: (text: string) => theme.fg('text', text),\n });\n const rendered = markdown.render(innerWidth).flatMap(line => (line.length > 0 ? [line] : ['']));\n const border = (text: string) => chalk.hex(mastra.purple)(text);\n const top = `${border('╭')}${border('─'.repeat(innerWidth + 2))}${border('╮')}`;\n const bottom = `${border('╰')}${border('─'.repeat(innerWidth + 2))}${border('╯')}`;\n const body = rendered.map(line => {\n let content = line;\n let contentVis = visibleWidth(content);\n if (contentVis > innerWidth) {\n content = truncateToWidth(content, innerWidth);\n contentVis = visibleWidth(content);\n }\n const padding = ' '.repeat(Math.max(0, innerWidth - contentVis));\n return `${border('│')} ${content}${padding} ${border('│')}`;\n });\n return [top, ...body, bottom];\n }\n}\n\nexport class PlanApprovalInlineComponent extends Container implements Focusable {\n private contentBox: Box;\n private selectList?: SelectList;\n private feedbackInput?: Input;\n private onApprove?: () => void;\n private onGoal?: () => void;\n private onReject?: (feedback?: string) => void;\n private resolved = false;\n private mode: 'streaming' | 'select' | 'feedback' = 'select';\n private planTitle: string;\n private planContent: string;\n\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n if (this.mode === 'feedback' && this.feedbackInput) {\n this.feedbackInput.focused = value;\n }\n }\n\n constructor(\n options: PlanApprovalInlineOptions,\n private ui: TUI,\n ) {\n super();\n this.planTitle = options.title;\n this.planContent = options.plan;\n this.contentBox = new Box(BOX_INDENT, 0, (text: string) => text);\n this.addChild(this.contentBox);\n this.activate(options);\n }\n\n static createStreaming(ui: TUI): PlanApprovalInlineComponent {\n const component = new PlanApprovalInlineComponent(\n {\n toolCallId: '',\n title: 'Untitled plan',\n plan: '',\n onApprove: () => {},\n onGoal: () => {},\n onReject: () => {},\n },\n ui,\n );\n component.mode = 'streaming';\n component.resolved = false;\n component.renderStreaming();\n return component;\n }\n\n activate(options: PlanApprovalInlineOptions): void {\n this.onApprove = options.onApprove;\n this.onGoal = options.onGoal;\n this.onReject = options.onReject;\n this.planTitle = options.title;\n this.planContent = options.plan;\n this.mode = 'select';\n this.resolved = false;\n this.renderSelectable();\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'plan';\n }\n\n updateArgs(args: unknown): void {\n if (!args || typeof args !== 'object' || this.resolved) return;\n const partial = args as { title?: unknown; plan?: unknown };\n if (typeof partial.title === 'string') {\n this.planTitle = partial.title || 'Untitled plan';\n }\n if (typeof partial.plan === 'string') {\n this.planContent = partial.plan;\n }\n if (this.mode === 'streaming') {\n this.renderStreaming();\n }\n }\n\n private renderSelectable(): void {\n this.contentBox.clear();\n this.selectList = undefined;\n this.feedbackInput = undefined;\n this.renderPlanHeader();\n this.renderPlanContent();\n\n const items: SelectItem[] = [\n {\n value: 'approve',\n label: ` ${theme.fg('success', 'Approve')} ${theme.fg('dim', '— switch to Build mode and implement')}`,\n },\n {\n value: 'goal',\n label: ` ${theme.fg('success', 'Use as /goal')} ${theme.fg('dim', '— switch to Build mode and pursue this plan')}`,\n },\n {\n value: 'reject',\n label: ` ${theme.fg('error', 'Reject')} ${theme.fg('dim', '— stay in Plan mode')}`,\n },\n {\n value: 'edit',\n label: ` ${theme.fg('warning', 'Request changes')} ${theme.fg('dim', '— provide feedback')}`,\n },\n ];\n\n this.selectList = new SelectList(items, items.length, getSelectListTheme());\n\n this.selectList.onSelect = (item: SelectItem) => {\n this.handleSelection(item.value);\n };\n this.selectList.onCancel = () => {\n this.handleReject();\n };\n\n this.contentBox.addChild(this.selectList);\n this.contentBox.addChild(new Spacer(1));\n this.contentBox.addChild(new Text(theme.fg('dim', 'Up/Down navigate Enter select Esc reject'), 0, 0));\n }\n\n private renderStreaming(): void {\n this.contentBox.clear();\n this.selectList = undefined;\n this.feedbackInput = undefined;\n this.renderPlanHeader();\n this.renderPlanContent();\n this.contentBox.addChild(new Text(theme.fg('dim', 'Submitting plan…'), 0, 0));\n }\n\n private renderPlanHeader(prefix = ''): void {\n this.contentBox.addChild(new Text(`${prefix}${theme.bold(theme.fg('accent', `Plan: ${this.planTitle}`))}`, 0, 0));\n this.contentBox.addChild(new Spacer(1));\n }\n\n private renderPlanContent(): void {\n this.contentBox.addChild(new PlanContentBox(this.planContent));\n this.contentBox.addChild(new Spacer(1));\n }\n\n private renderFeedback(feedback?: string): void {\n if (!feedback) return;\n this.contentBox.addChild(new Text(theme.fg('warning', `Requested changes: ${feedback}`), 0, 0));\n this.contentBox.addChild(new Spacer(1));\n }\n\n private handleSelection(value: string): void {\n if (this.resolved) return;\n\n switch (value) {\n case 'approve':\n this.handleApprove();\n break;\n case 'goal':\n this.handleGoal();\n break;\n case 'reject':\n this.handleReject();\n break;\n case 'edit':\n this.switchToFeedbackMode();\n break;\n }\n }\n\n private handleApprove(): void {\n if (this.resolved) return;\n this.resolved = true;\n this.showResult('Approved', true);\n this.onApprove?.();\n }\n\n private handleGoal(): void {\n if (this.resolved) return;\n this.resolved = true;\n this.showResult('Set as goal', true);\n this.onGoal?.();\n }\n\n private handleReject(feedback?: string): void {\n if (this.resolved) return;\n this.resolved = true;\n this.showResult(feedback ? 'Changes requested' : 'Rejected', false, feedback);\n this.onReject?.(feedback);\n }\n\n private switchToFeedbackMode(): void {\n this.mode = 'feedback';\n this.selectList = undefined;\n\n this.contentBox.clear();\n this.renderPlanHeader();\n this.renderPlanContent();\n\n this.contentBox.addChild(new Text(theme.fg('accent', 'Provide feedback for revision:'), 0, 0));\n this.contentBox.addChild(new Spacer(1));\n\n this.feedbackInput = new Input();\n this.feedbackInput.focused = this._focused;\n this.feedbackInput.onSubmit = (value: string) => {\n const trimmed = value.trim();\n this.handleReject(trimmed || undefined);\n };\n this.feedbackInput.onEscape = () => {\n this.handleReject();\n };\n\n this.contentBox.addChild(this.feedbackInput);\n this.contentBox.addChild(new Spacer(1));\n this.contentBox.addChild(\n new Text(theme.fg('dim', 'Enter to submit feedback Esc to reject without feedback'), 0, 0),\n );\n this.ui.requestRender(true);\n }\n\n private showResult(status: string, isApproved: boolean, feedback?: string): void {\n this.contentBox.clear();\n\n const icon = isApproved ? theme.fg('success', '✓') : theme.fg('error', '✗');\n this.renderPlanHeader();\n this.renderPlanContent();\n this.contentBox.addChild(new Text(`${icon} ${theme.fg('dim', status)}`, 0, 0));\n this.contentBox.addChild(new Spacer(1));\n this.renderFeedback(feedback);\n }\n\n handleInput(data: string): void {\n if (this.resolved) return;\n\n if (this.mode === 'feedback' && this.feedbackInput) {\n const kb = getKeybindings();\n if (kb.matches(data, 'tui.select.cancel')) {\n this.handleReject();\n return;\n }\n this.feedbackInput.handleInput(data);\n } else if (this.selectList) {\n this.selectList.handleInput(data);\n }\n }\n}\n\n/**\n * Static component for rendering a resolved plan in history.\n * Shows the plan content with approval/rejection status.\n */\nexport interface PlanResultOptions {\n title: string;\n plan: string;\n isApproved: boolean;\n feedback?: string;\n}\n\nexport class PlanResultComponent extends Container {\n getChatSpacingKind(): ChatSpacingKind {\n return 'plan';\n }\n\n constructor(options: PlanResultOptions) {\n super();\n\n const contentBox = new Box(BOX_INDENT, 0, (text: string) => text);\n this.addChild(contentBox);\n\n const icon = options.isApproved ? theme.fg('success', '✓') : theme.fg('error', '✗');\n const status = options.isApproved ? 'Approved' : options.feedback ? 'Changes requested' : 'Rejected';\n\n contentBox.addChild(new Text(theme.bold(theme.fg('accent', `Plan: ${options.title}`)), 0, 0));\n contentBox.addChild(new Spacer(1));\n contentBox.addChild(new PlanContentBox(options.plan));\n contentBox.addChild(new Spacer(1));\n contentBox.addChild(new Text(`${icon} ${theme.fg('dim', status)}`, 0, 0));\n contentBox.addChild(new Spacer(1));\n\n if (options.feedback) {\n contentBox.addChild(new Text(theme.fg('warning', `Requested changes: ${options.feedback}`), 0, 0));\n contentBox.addChild(new Spacer(1));\n }\n }\n}\n","import { Container, Text } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, mastra, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nexport interface ReactiveSignalOptions {\n tagName: string;\n message?: string;\n}\n\nexport class ReactiveSignalComponent extends Container {\n constructor(options: ReactiveSignalOptions) {\n super();\n\n this.addChild(new Text(chalk.hex(mastra.orange).bold(`Signal: ${options.tagName}`), BOX_INDENT, 0));\n if (options.message?.trim()) {\n this.addChild(new Text(theme.fg('dim', options.message.trim()), BOX_INDENT + 2, 0));\n }\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'system';\n }\n}\n","import { Container, Text } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, mastra, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nexport interface StateSignalOptions {\n stateId: string;\n mode: 'snapshot' | 'delta';\n version?: number;\n message?: string;\n}\n\nexport class StateSignalComponent extends Container {\n constructor(options: StateSignalOptions) {\n super();\n\n const title = chalk.hex(mastra.blue).bold(`State ${options.mode}: ${options.stateId}`);\n this.addChild(new Text(title, BOX_INDENT, 0));\n\n const message = options.message?.trim();\n if (message) {\n const preview = message.length > 180 ? `${message.slice(0, 177)}...` : message;\n this.addChild(new Text(theme.fg('dim', preview), BOX_INDENT + 2, 0));\n }\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'system';\n }\n}\n","/**\n * Subagent execution rendering component.\n * Shows real-time activity from a delegated subagent task using\n * the same bordered box style as shell/view tools:\n * - Top border\n * - Task description (always visible)\n * - Streaming tool call activity (capped rolling window)\n * - Bottom border with agent type, model, status, duration\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport type { TUI } from '@earendil-works/pi-tui';\nimport { safeStringify } from '@mastra/core/utils';\nimport { BOX_INDENT, getTermWidth, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\nimport type { IToolExecutionComponent } from './tool-execution-interface.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface SubagentToolCall {\n name: string;\n args: unknown;\n result?: string;\n isError?: boolean;\n done: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst MAX_ACTIVITY_LINES = 15;\nconst COLLAPSED_LINES = 15;\n\nexport interface SubagentExecutionOptions {\n /** When true, auto-collapse to a single summary line on completion. Default false. */\n collapseOnComplete?: boolean;\n /** True when this subagent is running on a forked copy of the parent thread. */\n forked?: boolean;\n /** When true, show full completed content including the final result. Default false. */\n expandOnComplete?: boolean;\n}\n\nexport class SubagentExecutionComponent extends Container implements IToolExecutionComponent {\n private ui: TUI;\n\n // State\n private agentType: string;\n private task: string;\n private modelId?: string;\n private toolCalls: SubagentToolCall[] = [];\n private done = false;\n private isError = false;\n private startTime = Date.now();\n private durationMs = 0;\n private finalResult?: string;\n private expanded = false;\n private collapseOnComplete: boolean;\n private expandOnComplete: boolean;\n private forked: boolean;\n\n constructor(agentType: string, task: string, ui: TUI, modelId?: string, options?: SubagentExecutionOptions) {\n super();\n this.agentType = agentType;\n this.task = task;\n this.modelId = modelId;\n this.ui = ui;\n this.collapseOnComplete = options?.collapseOnComplete ?? false;\n this.expandOnComplete = options?.expandOnComplete ?? false;\n this.forked = options?.forked ?? false;\n\n this.rebuild();\n }\n\n // ── Mutation API ──────────────────────────────────────────────────────\n\n addToolStart(name: string, args: unknown): void {\n this.toolCalls.push({ name, args, done: false });\n this.rebuild();\n }\n addToolEnd(name: string, result: unknown, isError: boolean): void {\n for (let i = this.toolCalls.length - 1; i >= 0; i--) {\n const toolCall = this.toolCalls[i]!;\n if (toolCall.name === name && !toolCall.done) {\n toolCall.done = true;\n toolCall.isError = isError;\n toolCall.result = typeof result === 'string' ? result : safeStringify(result ?? '');\n break;\n }\n }\n this.rebuild();\n }\n\n finish(isError: boolean, durationMs: number, result?: string): void {\n this.done = true;\n this.isError = isError;\n this.durationMs = durationMs;\n this.finalResult = result;\n if (this.expandOnComplete) {\n this.expanded = true;\n } else if (this.collapseOnComplete) {\n this.expanded = false;\n }\n this.rebuild();\n }\n\n setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.rebuild();\n }\n\n toggleExpanded(): void {\n this.expanded = !this.expanded;\n this.rebuild();\n }\n\n // IToolExecutionComponent interface methods\n updateArgs(_args: unknown): void {}\n updateResult(_result: unknown, _isPartial: boolean): void {}\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'normal-tool';\n }\n\n // ── Rendering ──────────────────────────────────────────────────────────\n\n private rebuild(): void {\n this.clear();\n\n const border = (char: string) => theme.bold(theme.fg('accent', char));\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 6 - BOX_INDENT * 2;\n\n // ── Bottom border with info (always rendered) ──\n const typeLabelText = this.forked ? 'fork' : this.agentType;\n const typeLabel = theme.bold(theme.fg('accent', typeLabelText));\n const modelLabel = this.modelId ? theme.fg('muted', ` ${this.modelId}`) : '';\n const statusIcon = this.done\n ? this.isError\n ? theme.fg('error', ' ✗')\n : theme.fg('success', ' ✓')\n : theme.fg('muted', ' ⋯');\n const durationStr = this.done ? theme.fg('muted', ` ${formatDuration(this.durationMs)}`) : '';\n const footerText = `${theme.bold(theme.fg('toolTitle', 'subagent'))} ${typeLabel}${modelLabel}${durationStr}${statusIcon}`;\n\n // When collapse-on-complete is enabled, render only the single-line footer summary.\n // Quiet mode does not enable this for subagents; it is kept for explicit callers/tests.\n if (this.collapseOnComplete && this.done && !this.expanded) {\n this.addChild(new Text(`${border('╰──')} ${footerText}`, BOX_INDENT, 0));\n this.invalidate();\n this.ui.requestRender();\n return;\n }\n\n // ── Top border ──\n this.addChild(new Text(border('╭──'), BOX_INDENT, 0));\n\n // ── Task description (capped when collapsed) ──\n const taskLines = this.task.split('\\n');\n const wrappedTaskLines: string[] = [];\n for (const line of taskLines) {\n if (line.length > maxLineWidth) {\n let remaining = line;\n while (remaining.length > maxLineWidth) {\n const breakAt = remaining.lastIndexOf(' ', maxLineWidth);\n const splitAt = breakAt > 0 ? breakAt : maxLineWidth;\n wrappedTaskLines.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n if (remaining) wrappedTaskLines.push(remaining);\n } else {\n wrappedTaskLines.push(line);\n }\n }\n const maxTaskLines = 5;\n const taskTruncated = !this.expanded && wrappedTaskLines.length > maxTaskLines + 1;\n const displayTaskLines = taskTruncated ? wrappedTaskLines.slice(0, maxTaskLines) : wrappedTaskLines;\n\n const taskContent = displayTaskLines.map(line => `${border('│')} ${line}`).join('\\n');\n this.addChild(new Text(taskContent, BOX_INDENT, 0));\n\n if (taskTruncated) {\n const moreText = theme.fg('muted', `... ${wrappedTaskLines.length - maxTaskLines} more lines (ctrl+e to expand)`);\n this.addChild(new Text(`${border('│')} ${moreText}`, BOX_INDENT, 0));\n }\n\n // ── Activity lines (tool calls — capped rolling window) ──\n if (this.toolCalls.length > 0) {\n // Separator between task and activity\n this.addChild(new Text(`${border('│')} ${theme.fg('muted', '───')}`, BOX_INDENT, 0));\n\n const activityLines = this.toolCalls.map(tc => formatToolCallLine(tc, maxLineWidth));\n\n // While streaming: rolling window. When done: collapsible.\n const cap = this.done ? COLLAPSED_LINES : MAX_ACTIVITY_LINES;\n let displayLines = activityLines;\n let hiddenCount = 0;\n const minHidden = this.done ? 2 : 1;\n if (!this.expanded && activityLines.length > cap + minHidden - 1) {\n hiddenCount = activityLines.length - cap;\n if (this.done) {\n // Show first N lines when collapsed (completed)\n displayLines = activityLines.slice(0, cap);\n } else {\n // Show last N lines while streaming\n displayLines = activityLines.slice(-cap);\n }\n }\n\n if (!this.done && hiddenCount > 0) {\n const hiddenText = theme.fg('muted', ` ... ${hiddenCount} more above`);\n this.addChild(new Text(`${border('│')} ${hiddenText}`, BOX_INDENT, 0));\n }\n\n const activityContent = displayLines.map(line => `${border('│')} ${line}`).join('\\n');\n this.addChild(new Text(activityContent, BOX_INDENT, 0));\n\n if (this.done && hiddenCount > 0) {\n const moreText = theme.fg('muted', `... ${hiddenCount} more (ctrl+e to expand)`);\n this.addChild(new Text(`${border('│')} ${moreText}`, BOX_INDENT, 0));\n }\n }\n\n // ── Final result (shown after completion, only when expanded) ──\n if (this.done && this.finalResult && this.expanded) {\n this.addChild(new Text(`${border('│')} ${theme.fg('muted', '───')}`, BOX_INDENT, 0));\n const resultLines = this.finalResult!.split('\\n');\n\n const resultContent = resultLines\n .map(line => {\n const truncatedLine = line.length > maxLineWidth ? line.slice(0, maxLineWidth - 1) + '…' : line;\n return `${border('│')} ${theme.fg('muted', truncatedLine)}`;\n })\n .join('\\n');\n if (resultContent.trim()) {\n this.addChild(new Text(resultContent, BOX_INDENT, 0));\n }\n }\n\n // ── Bottom border ──\n this.addChild(new Text(`${border('╰──')} ${footerText}`, BOX_INDENT, 0));\n\n this.invalidate();\n this.ui.requestRender();\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction formatToolCallLine(tc: SubagentToolCall, _maxWidth: number): string {\n const icon = tc.done ? (tc.isError ? theme.fg('error', '✗') : theme.fg('success', '✓')) : theme.fg('muted', '⋯');\n const name = theme.fg('toolTitle', tc.name);\n const argsSummary = summarizeArgs(tc.args);\n return `${icon} ${name} ${argsSummary}`;\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n const s = (ms / 1000).toFixed(1);\n return `${s}s`;\n}\n\nfunction summarizeArgs(args: unknown): string {\n if (!args || typeof args !== 'object') return '';\n const obj = args as Record<string, unknown>;\n const parts: string[] = [];\n\n // Special handling for task list snapshots.\n if (obj.tasks && Array.isArray(obj.tasks)) {\n const maxTasksInSummary = 5;\n const tasks = obj.tasks as Array<{\n content?: string;\n status?: string;\n activeForm?: string;\n }>;\n const visibleTasks = tasks.slice(0, maxTasksInSummary);\n const taskSummaries = visibleTasks.map(t => {\n const icon = t.status === 'completed' ? '✓' : t.status === 'in_progress' ? '→' : '○';\n const content = t.content || t.activeForm || 'task';\n return `${icon} ${content}`;\n });\n const extraCount = tasks.length - visibleTasks.length;\n if (extraCount > 0) {\n taskSummaries.push(`… +${extraCount} more`);\n }\n return theme.fg('muted', taskSummaries.join(', '));\n }\n\n for (const [_key, val] of Object.entries(obj)) {\n if (typeof val === 'string') {\n const short = val.length > 40 ? val.slice(0, 40) + '…' : val;\n parts.push(theme.fg('muted', short));\n } else if (Array.isArray(val)) {\n parts.push(theme.fg('muted', `${val.length} items`));\n } else if (typeof val === 'object' && val !== null) {\n parts.push(theme.fg('muted', '{...}'));\n }\n }\n return parts.join(' ');\n}\n","/**\n * SystemReminderComponent - renders system-generated reminder messages\n * inline with an amber notice style.\n */\n\nimport process from 'node:process';\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport stripAnsi from 'strip-ansi';\nimport { BOX_INDENT, getTermWidth, mastraBrand, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nconst MAX_COLLAPSED_LINES = 10;\nconst LOADED_INSTRUCTION_INDENT = BOX_INDENT + 2;\n\nexport interface SystemReminderOptions {\n message?: string;\n reminderType?: string;\n path?: string;\n goalMaxTurns?: number;\n judgeModelId?: string;\n}\n\nexport class SystemReminderComponent extends Container {\n private messageLines: string[];\n private readonly reminderType?: string;\n private readonly path?: string;\n private readonly goalMaxTurns?: number;\n private readonly judgeModelId?: string;\n private expanded = false;\n\n isExpanded(): boolean {\n return this.expanded;\n }\n\n constructor(options: SystemReminderOptions) {\n super();\n\n this.messageLines = splitMessageLines(resolveReminderMessage(options.message));\n this.reminderType = options.reminderType;\n this.path = options.path;\n this.goalMaxTurns = options.goalMaxTurns;\n this.judgeModelId = options.judgeModelId;\n\n this.rebuild();\n }\n\n setExpanded(expanded: boolean): void {\n if (this.expanded === expanded) {\n return;\n }\n\n this.expanded = expanded;\n this.rebuild();\n }\n\n toggleExpanded(): void {\n this.setExpanded(!this.expanded);\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'system';\n }\n\n private rebuild(): void {\n this.clear();\n\n if (isLoadedInstructionPathReminder(this.reminderType, this.path)) {\n const path = formatReminderPath(this.path!);\n this.addChild(new Text(theme.fg('toolTitle', `loaded ${path}`), LOADED_INSTRUCTION_INDENT, 0));\n return;\n }\n\n const accent = getReminderAccent(this.reminderType);\n const border = (char: string) => (accent ? chalk.hex(accent).bold(char) : theme.bold(theme.fg('toolTitle', char)));\n const titleText = getReminderTitle(this.reminderType, this.path, {\n goalMaxTurns: this.goalMaxTurns,\n judgeModelId: this.judgeModelId,\n });\n const title = accent ? chalk.hex(accent).bold(titleText) : theme.bold(theme.fg('toolTitle', titleText));\n const metadataColor = (text: string) => theme.fg('dim', text);\n const bodyColor = (text: string) => theme.fg('text', text);\n const hintColor = (text: string) => theme.fg('dim', text);\n const termWidth = getTermWidth();\n const innerWidth = Math.max(20, termWidth - BOX_INDENT * 2 - 4);\n const horizontal = '─'.repeat(innerWidth + 1);\n\n const metadataLines = [this.path ? formatReminderPath(this.path) : undefined].filter((line): line is string =>\n Boolean(line),\n );\n\n const wrappedMessageLines = wrapLines(this.messageLines, innerWidth);\n const shouldCollapse = wrappedMessageLines.length > MAX_COLLAPSED_LINES;\n const visibleMessageLines =\n shouldCollapse && !this.expanded ? wrappedMessageLines.slice(0, MAX_COLLAPSED_LINES) : wrappedMessageLines;\n\n this.addChild(new Text(`${border('╭')}${border(horizontal)}${border('╮')}`, BOX_INDENT, 0));\n this.addChild(new Text(renderRow(title, innerWidth, border), BOX_INDENT, 0));\n\n for (const line of metadataLines) {\n this.addChild(new Text(renderRow(metadataColor(line), innerWidth, border), BOX_INDENT, 0));\n }\n\n if (metadataLines.length > 0 && visibleMessageLines.length > 0) {\n this.addChild(new Text(renderRow('', innerWidth, border), BOX_INDENT, 0));\n }\n\n for (const line of visibleMessageLines) {\n this.addChild(new Text(renderRow(bodyColor(line), innerWidth, border), BOX_INDENT, 0));\n }\n\n if (shouldCollapse && !this.expanded) {\n const remaining = wrappedMessageLines.length - visibleMessageLines.length;\n const hint = hintColor(`... ${remaining} more lines (ctrl+e to expand)`);\n this.addChild(new Text(renderRow(hint, innerWidth, border), BOX_INDENT, 0));\n }\n\n this.addChild(new Text(`${border('╰')}${border(horizontal)}${border('╯')}`, BOX_INDENT, 0));\n }\n}\n\nfunction renderRow(text: string, width: number, border: (char: string) => string): string {\n const content = padLine(text, width);\n const rightPadding = hasWideGlyph(stripAnsi(text)) ? ' ' : '';\n return `${border('│')} ${content}${rightPadding}${border('│')}`;\n}\n\nfunction splitMessageLines(message: string): string[] {\n return message\n .split('\\n')\n .map(line => line.trimEnd())\n .filter(line => line.length > 0);\n}\n\nfunction isLoadedInstructionPathReminder(reminderType: string | undefined, path: string | undefined): boolean {\n return Boolean(path && (reminderType === 'dynamic-agents-md' || isAgentsInstructionPath(path)));\n}\n\nfunction resolveReminderMessage(message: string | undefined): string {\n const trimmedMessage = message?.trim();\n return trimmedMessage && trimmedMessage !== 'undefined' ? trimmedMessage : '';\n}\n\nfunction getReminderTitle(\n reminderType: string | undefined,\n path: string | undefined,\n metadata: { goalMaxTurns?: number; judgeModelId?: string } = {},\n): string {\n if (reminderType === 'goal') {\n const details = [\n typeof metadata.goalMaxTurns === 'number' ? `${metadata.goalMaxTurns} max attempts` : undefined,\n metadata.judgeModelId ? `judge: ${metadata.judgeModelId}` : undefined,\n ].filter(Boolean);\n return details.length > 0 ? `Goal (${details.join(', ')})` : 'Goal';\n }\n if (reminderType === 'goal-judge') return 'Goal';\n return reminderType === 'dynamic-agents-md' || isAgentsInstructionPath(path) ? 'Loaded AGENTS.md' : 'System Reminder';\n}\n\nfunction getReminderAccent(reminderType: string | undefined): string | undefined {\n return reminderType === 'goal' || reminderType === 'goal-judge' ? mastraBrand.blue : undefined;\n}\n\nfunction isAgentsInstructionPath(path: string | undefined): boolean {\n return typeof path === 'string' && /(?:^|\\/)AGENTS\\.md$/i.test(path);\n}\n\nfunction formatReminderPath(path: string): string {\n const cwd = process.cwd();\n if (path === cwd) {\n return '.';\n }\n\n const cwdPrefix = `${cwd}/`;\n return path.startsWith(cwdPrefix) ? path.slice(cwdPrefix.length) : path;\n}\n\nfunction hasWideGlyph(text: string): boolean {\n return [...text].some(char =>\n /[\\p{Extended_Pictographic}\\u1100-\\u115F\\u2329\\u232A\\u2E80-\\uA4CF\\uAC00-\\uD7A3\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE6F\\uFF00-\\uFF60\\uFFE0-\\uFFE6]/u.test(\n char,\n ),\n );\n}\n\nfunction wrapLines(lines: string[], maxLineWidth: number): string[] {\n if (lines.length === 0) {\n return [''];\n }\n\n const wrappedLines: string[] = [];\n\n for (const line of lines) {\n if (line.length <= maxLineWidth) {\n wrappedLines.push(line);\n continue;\n }\n\n let remaining = line;\n while (remaining.length > maxLineWidth) {\n const breakAt = remaining.lastIndexOf(' ', maxLineWidth);\n const splitAt = breakAt > 0 ? breakAt : maxLineWidth;\n wrappedLines.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n\n if (remaining.length > 0) {\n wrappedLines.push(remaining);\n }\n }\n\n return wrappedLines;\n}\n\nfunction padLine(text: string, width: number): string {\n const visibleLength = stripAnsi(text).length;\n if (visibleLength === width) {\n return text;\n }\n\n if (visibleLength > width) {\n return truncateLine(text, width);\n }\n\n return text + ' '.repeat(width - visibleLength);\n}\n\nfunction truncateLine(text: string, width: number): string {\n const plain = stripAnsi(text);\n return plain.length <= width ? text : plain.slice(0, Math.max(0, width - 1)) + '…';\n}\n","/**\n * Lightweight inline indicator for temporal gaps between messages.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport { BOX_INDENT, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nexport interface TemporalGapOptions {\n message?: string;\n gapText?: string;\n}\n\nexport class TemporalGapComponent extends Container {\n constructor(options: TemporalGapOptions) {\n super();\n\n this.addChild(new Text(theme.fg('dim', ` ⏳ ${resolveGapText(options)}`), BOX_INDENT, 0));\n }\n\n setExpanded(_expanded: boolean): void {}\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\n\nfunction resolveGapText(options: TemporalGapOptions): string {\n const gapText = options.gapText?.trim();\n if (gapText) {\n return gapText;\n }\n\n const message = options.message?.trim();\n if (!message) {\n return 'Time passed';\n }\n\n const separatorIndex = message.indexOf(' — ');\n return separatorIndex >= 0 ? message.slice(0, separatorIndex).trim() : message;\n}\n","/**\n * Shared ANSI text-handling helpers for TUI components.\n */\n\nimport { visibleWidth } from '@earendil-works/pi-tui';\n\nconst ANSI_CLOSERS = '\\x1b]8;;\\x07\\x1b[0m';\nconst ELLIPSIS = '…';\nconst ELLIPSIS_WIDTH = visibleWidth(ELLIPSIS);\n\nfunction fitVisibleText(text: string, maxWidth: number): { text: string; width: number; truncated: boolean } {\n if (maxWidth <= 0) return { text: '', width: 0, truncated: text.length > 0 };\n\n const targetWidth = Math.max(0, maxWidth - ELLIPSIS_WIDTH);\n let width = 0;\n let result = '';\n let resultWidth = 0;\n\n for (const char of text) {\n const charWidth = visibleWidth(char);\n if (width + charWidth > maxWidth) {\n return { text: `${result}${ELLIPSIS}`, width: resultWidth + ELLIPSIS_WIDTH, truncated: true };\n }\n if (width + charWidth <= targetWidth) {\n result += char;\n resultWidth += charWidth;\n }\n width += charWidth;\n }\n\n return { text, width, truncated: false };\n}\n\n/** Truncate a string with ANSI codes to a visible width.\n * Handles both SGR sequences (\\x1b[...m) and OSC 8 hyperlinks (\\x1b]8;...;\\x07).\n */\nexport function truncateAnsi(str: string, maxWidth: number): string {\n if (maxWidth <= 0) return '';\n\n // The OSC 8 hyperlink body is terminated by BEL (\\x07). We also\n // break on a new ESC (\\x1b) so a missing terminator cannot scan\n // unbounded input and amplify polynomial backtracking.\n const ansiRegex = /\\x1b\\[[0-9;]{0,32}m|\\x1b\\]8;[^\\x07\\x1b]{0,8192}\\x07/g;\n let visibleLength = 0;\n let result = '';\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = ansiRegex.exec(str)) !== null) {\n // Add text before this ANSI code\n const textBefore = str.slice(lastIndex, match.index);\n const fitted = fitVisibleText(textBefore, maxWidth - visibleLength);\n if (fitted.truncated) {\n result += fitted.text;\n result += ANSI_CLOSERS; // Close any open hyperlink + reset styles\n return result;\n }\n result += fitted.text;\n visibleLength += fitted.width;\n\n // Add the ANSI code (doesn't count toward visible length)\n result += match[0];\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last ANSI code\n const remaining = str.slice(lastIndex);\n const fitted = fitVisibleText(remaining, maxWidth - visibleLength);\n result += fitted.text;\n if (fitted.truncated) result += ANSI_CLOSERS; // Close hyperlink + reset\n\n return result;\n}\n","/**\n * Generic collapsible container component.\n * Can be used to wrap any content that should be expandable/collapsible.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport type { TUI } from '@earendil-works/pi-tui';\nimport { highlight } from 'cli-highlight';\nimport { theme } from '../theme.js';\n\nexport interface CollapsibleOptions {\n /** Initial expanded state */\n expanded?: boolean;\n /** Header text or component */\n header: string | Container;\n /** Summary shown when collapsed */\n summary?: string;\n /** Max lines to show when collapsed (0 = fully collapsed) */\n collapsedLines?: number;\n /** Max lines to show when expanded */\n expandedLines?: number;\n /** Whether to show line count in header */\n showLineCount?: boolean;\n}\n\nexport class CollapsibleComponent extends Container {\n private expanded: boolean;\n private header: string | Container;\n protected summary?: string;\n private content: string[] = [];\n private options: CollapsibleOptions;\n private ui: TUI;\n\n constructor(options: CollapsibleOptions, ui: TUI) {\n super();\n this.options = {\n expanded: false,\n collapsedLines: 10,\n expandedLines: 100,\n showLineCount: true,\n ...options,\n };\n this.expanded = this.options.expanded ?? false;\n this.header = options.header;\n this.summary = options.summary;\n this.ui = ui;\n this.updateDisplay();\n }\n\n setContent(content: string | string[]): void {\n this.content = Array.isArray(content) ? content : content.split('\\n');\n this.updateDisplay();\n }\n\n isExpanded(): boolean {\n return this.expanded;\n }\n\n setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.updateDisplay();\n }\n\n toggle(): void {\n this.expanded = !this.expanded;\n this.updateDisplay();\n }\n\n private updateDisplay(): void {\n this.clear();\n\n const lineCount =\n this.options.showLineCount && this.content.length > 0 ? theme.fg('muted', ` (${this.content.length} lines)`) : '';\n\n const headerText = typeof this.header === 'string' ? `${this.header}${lineCount}` : this.header;\n\n if (typeof headerText === 'string') {\n this.addChild(new Text(headerText, 0, 0));\n } else {\n this.addChild(headerText);\n }\n\n // Show summary when collapsed if provided\n if (!this.expanded && this.summary) {\n this.addChild(new Text(theme.fg('muted', this.summary), 0, 0));\n return;\n }\n\n // Show content\n if (this.content.length === 0) return;\n\n const maxLines = this.expanded ? this.options.expandedLines! : this.options.collapsedLines!;\n\n if (maxLines === 0 && !this.expanded) {\n // Fully collapsed, show nothing\n return;\n }\n\n const linesToShow = Math.min(this.content.length, maxLines);\n const hasMore = this.content.length > maxLines;\n\n // Add content lines\n for (let i = 0; i < linesToShow; i++) {\n this.addChild(new Text(this.content[i], 0, 0));\n }\n\n // Show truncation indicator\n if (hasMore) {\n const remaining = this.content.length - linesToShow;\n const action = this.expanded ? 'collapse' : 'expand';\n const hint = theme.fg('muted', `... ${remaining} more lines (Ctrl+E to ${action} all)`);\n this.addChild(new Text(hint, 0, 0));\n }\n }\n}\n\n/**\n * File viewer with collapsible content\n */\nexport class CollapsibleFileViewer extends CollapsibleComponent {\n constructor(path: string, content: string, options: Partial<CollapsibleOptions>, ui: TUI) {\n let lines = content.split('\\n').map(line => line.trimEnd());\n\n // Remove \"Here's the result of running `cat -n`...\" header if present\n if (lines.length > 0 && lines[0]!.includes(\"Here's the result of running\")) {\n lines = lines.slice(1);\n }\n\n // Strip line numbers from cat -n format: \" 123\\tcode\" -> \"code\"\n const lineNumberRegex = /^\\s*\\d+\\t/;\n const codeLines = lines.map(line => line.replace(lineNumberRegex, ''));\n\n // Remove trailing empty lines\n while (codeLines.length > 0 && codeLines[codeLines.length - 1] === '') {\n codeLines.pop();\n }\n\n // Apply syntax highlighting\n let highlightedLines = codeLines;\n try {\n const highlighted = highlight(codeLines.join('\\n'), {\n language: getLanguageFromPath(path),\n ignoreIllegals: true,\n });\n highlightedLines = highlighted.split('\\n');\n } catch {\n // If highlighting fails, use original content\n }\n\n const header = `${theme.bold(theme.fg('toolTitle', '📄 view'))} ${theme.fg('accent', path)}`;\n\n super(\n {\n header,\n collapsedLines: 20,\n expandedLines: 200,\n showLineCount: true,\n ...options,\n },\n ui,\n );\n\n this.setContent(highlightedLines);\n }\n}\n\n/** Map file extensions to highlight.js language names */\nfunction getLanguageFromPath(path: string): string | undefined {\n const ext = path.split('.').pop()?.toLowerCase();\n const langMap: Record<string, string> = {\n ts: 'typescript',\n tsx: 'typescript',\n js: 'javascript',\n jsx: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n json: 'json',\n md: 'markdown',\n py: 'python',\n rb: 'ruby',\n rs: 'rust',\n go: 'go',\n java: 'java',\n kt: 'kotlin',\n swift: 'swift',\n c: 'c',\n cpp: 'cpp',\n h: 'c',\n hpp: 'cpp',\n cs: 'csharp',\n php: 'php',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n fish: 'bash',\n yml: 'yaml',\n yaml: 'yaml',\n toml: 'ini',\n ini: 'ini',\n xml: 'xml',\n html: 'html',\n htm: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'scss',\n less: 'less',\n sql: 'sql',\n graphql: 'graphql',\n gql: 'graphql',\n dockerfile: 'dockerfile',\n makefile: 'makefile',\n cmake: 'cmake',\n vue: 'vue',\n svelte: 'xml',\n };\n return ext ? langMap[ext] : undefined;\n}\n\n/**\n * Diff viewer with collapsible hunks\n */\nexport class CollapsibleDiffViewer extends CollapsibleComponent {\n private oldContent: string;\n private newContent: string;\n\n constructor(path: string, oldContent: string, newContent: string, options: Partial<CollapsibleOptions>, ui: TUI) {\n const header = `${theme.bold(theme.fg('toolTitle', '✏️ edit'))} ${theme.fg('accent', path)}`;\n\n super(\n {\n header,\n collapsedLines: 15,\n expandedLines: 100,\n showLineCount: false,\n ...options,\n },\n ui,\n );\n\n this.oldContent = oldContent;\n this.newContent = newContent;\n this.generateDiff();\n }\n\n private generateDiff(): void {\n const oldLines = this.oldContent.split('\\n');\n const newLines = this.newContent.split('\\n');\n const diff: string[] = [];\n\n // Simple line-by-line diff (in production, use a proper diff algorithm)\n const maxLines = Math.max(oldLines.length, newLines.length);\n let addedCount = 0;\n let removedCount = 0;\n\n for (let i = 0; i < maxLines; i++) {\n if (i >= oldLines.length) {\n diff.push(theme.fg('success', `+ ${newLines[i]}`));\n addedCount++;\n } else if (i >= newLines.length) {\n diff.push(theme.fg('error', `- ${oldLines[i]}`));\n removedCount++;\n } else if (oldLines[i] !== newLines[i]) {\n diff.push(theme.fg('error', `- ${oldLines[i]}`));\n diff.push(theme.fg('success', `+ ${newLines[i]}`));\n addedCount++;\n removedCount++;\n } else {\n // Context line\n diff.push(theme.fg('muted', ` ${oldLines[i]}`));\n }\n }\n\n this.summary = `+${addedCount} -${removedCount} lines changed`;\n this.setContent(diff);\n }\n}\n\n/**\n * Command output viewer with collapsible sections\n */\nexport class CollapsibleCommandOutput extends CollapsibleComponent {\n constructor(command: string, output: string, exitCode: number, options: Partial<CollapsibleOptions>, ui: TUI) {\n const status = exitCode === 0 ? theme.fg('success', '✓') : theme.fg('error', `✗ (exit ${exitCode})`);\n\n const header = `${theme.bold(theme.fg('toolTitle', 'command'))} ${theme.fg('accent', command)} ${status}`;\n\n // Clean up output\n const lines = output.split('\\n').map(line => line.trimEnd());\n while (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n super(\n {\n header,\n collapsedLines: exitCode === 0 ? 10 : 50, // Show more on error\n expandedLines: 500,\n showLineCount: true,\n ...options,\n },\n ui,\n );\n\n this.setContent(lines);\n }\n}\n","/**\n * Enhanced error display component with collapsible stack traces,\n * syntax highlighting, and smart summarization.\n */\n\nimport { Box, Container, Text, Spacer } from '@earendil-works/pi-tui';\nimport type { TUI } from '@earendil-works/pi-tui';\nimport { BOX_INDENT, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\nimport { CollapsibleComponent } from './collapsible.js';\n\nexport interface ErrorInfo {\n message: string;\n name?: string;\n stack?: string;\n code?: string;\n file?: string;\n line?: number;\n column?: number;\n context?: {\n before?: string[];\n line?: string;\n after?: string[];\n };\n}\n\n/**\n * Parse error information from various error formats\n */\nfunction parseErrorInfo(error: Error | string): ErrorInfo {\n if (typeof error === 'string') {\n // Try to parse error-like string\n const lines = error.split('\\n').filter(line => line.trim());\n const firstLine = lines[0] || '';\n\n // Check for shell command errors\n if (firstLine.includes('command not found')) {\n const cmdMatch = firstLine.match(/(\\w+):\\s*command not found/);\n return {\n name: 'CommandNotFoundError',\n message: cmdMatch ? `'${cmdMatch[1]}' is not a recognized command` : firstLine,\n };\n }\n\n // Check for \"Output:\" prefix (from tool execution)\n const cleanedError = error.replace(/^Output:\\s*/m, '');\n const cleanedLines = cleanedError.split('\\n').filter(line => line.trim());\n\n // Match Node.js error patterns\n const nodeErrorMatch = cleanedError.match(/^([A-Z][a-zA-Z]*Error):\\s*(.+)$/m);\n if (nodeErrorMatch) {\n // Extract stack trace\n const stackLines = cleanedLines.filter(line => line.match(/^\\s*at\\s+/));\n return {\n name: nodeErrorMatch[1]!,\n message: nodeErrorMatch[2]!,\n stack: stackLines.length > 0 ? stackLines.join('\\n') : undefined,\n };\n }\n\n // Match common error patterns\n const errorMatch = firstLine.match(/^([A-Z][a-zA-Z]*Error):\\s*(.+)$/);\n if (errorMatch) {\n return {\n name: errorMatch[1]!,\n message: errorMatch[2]!,\n stack: lines.slice(1).join('\\n'),\n };\n }\n\n // Extract file location if present\n const fileMatch = error.match(/at\\s+(.+?):(\\d+):?(\\d+)?/);\n\n return {\n message: cleanedLines[0] || firstLine,\n stack: cleanedLines.length > 1 ? cleanedLines.slice(1).join('\\n') : undefined,\n file: fileMatch?.[1],\n line: fileMatch?.[2] ? parseInt(fileMatch[2]) : undefined,\n column: fileMatch?.[3] ? parseInt(fileMatch[3]) : undefined,\n };\n }\n\n // Error object\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n code: (error as any).code,\n };\n}\n\n/**\n * Format stack trace lines with syntax highlighting\n */\nfunction formatStackTrace(stack: string): string[] {\n const lines = stack.split('\\n');\n return lines.map(line => {\n // Highlight file paths\n if (line.match(/^\\s*at\\s+/)) {\n return line.replace(\n /(\\s+at\\s+)([^(]+)(\\s*\\()([^)]+)(\\))/,\n (match, at, fn, open, loc, close) =>\n `${theme.fg('muted', at)}${theme.fg('function', fn)}${theme.fg('muted', open)}${theme.fg('path', loc)}${theme.fg('muted', close)}`,\n );\n }\n\n // Mute empty lines and framework traces\n if (!line.trim() || line.includes('node_modules')) {\n return theme.fg('muted', line);\n }\n\n return line;\n });\n}\n\n/**\n * Collapsible stack trace component\n */\nclass CollapsibleStackTrace extends CollapsibleComponent {\n constructor(stack: string, options: { expanded?: boolean } = {}, ui: TUI) {\n super(\n {\n header: 'Stack Trace',\n expanded: options.expanded ?? false,\n collapsedLines: 5,\n expandedLines: 100,\n showLineCount: true,\n },\n ui,\n );\n\n // Format and set the content\n const formattedLines = formatStackTrace(stack);\n this.setContent(formattedLines.join('\\n'));\n }\n}\n\n/**\n * Enhanced error display component\n */\nexport class ErrorDisplayComponent extends Container {\n constructor(\n private error: Error | string,\n private options: {\n showStack?: boolean;\n showContext?: boolean;\n expanded?: boolean;\n } = {},\n private ui: TUI,\n ) {\n super();\n this.build();\n }\n\n private build(): void {\n const info = parseErrorInfo(this.error);\n\n // Wrap everything in a box (borders provide structure, no extra padding)\n const box = new Box(BOX_INDENT, 0, (text: string) => text);\n this.addChild(box);\n\n // Add a visible border around the entire error display\n const borderTop = new Text(theme.fg('error', '╭─ Error ─' + '─'.repeat(50) + '╮'), 0, 0);\n box.addChild(borderTop);\n\n // Error header container with background\n const errorContainer = new Container();\n\n // Add a colored background to the error message\n const errorBg = (text: string) => theme.bg('errorBg', text);\n\n // Error type and message with proper formatting\n if (info.name && info.name !== 'Error') {\n const typeLine = new Container();\n typeLine.addChild(new Text('│ ', 0, 0));\n typeLine.addChild(new Text(errorBg(` ${theme.bold(theme.fg('error', info.name))} `), 0, 0));\n errorContainer.addChild(typeLine);\n }\n\n // Error message\n const msgLine = new Container();\n msgLine.addChild(new Text('│ ', 0, 0));\n msgLine.addChild(new Text(theme.bold(info.message), 0, 0));\n errorContainer.addChild(msgLine);\n\n // File location if available\n if (info.file && info.line) {\n const location = `${info.file}:${info.line}${info.column ? `:${info.column}` : ''}`;\n errorContainer.addChild(new Text(theme.fg('muted', ` at ${location}`), 0, 0));\n }\n\n box.addChild(errorContainer);\n\n // Code context if available\n if (this.options.showContext && info.context) {\n box.addChild(new Spacer(1));\n box.addChild(this.createCodeContext(info.context, info.line));\n }\n\n // Stack trace (collapsible)\n if (this.options.showStack && info.stack) {\n box.addChild(new Spacer(1));\n box.addChild(new CollapsibleStackTrace(info.stack, { expanded: this.options.expanded }, this.ui));\n }\n\n // Add bottom border\n const borderBottom = new Text(theme.fg('error', '╰' + '─'.repeat(59) + '╯'), 0, 0);\n box.addChild(borderBottom);\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n\n private createCodeContext(context: NonNullable<ErrorInfo['context']>, errorLine?: number): Container {\n const container = new Container();\n const codeBlock = new Container();\n\n // Add a header\n codeBlock.addChild(new Text(theme.fg('muted', 'Code context:'), 0, 0));\n\n // Before lines\n if (context.before) {\n context.before.forEach((line, i) => {\n const lineNum = errorLine ? errorLine - context.before!.length + i : i + 1;\n codeBlock.addChild(new Text(theme.fg('muted', `${lineNum.toString().padStart(4)} │ ${line}`), 0, 0));\n });\n }\n\n // Error line (highlighted)\n if (context.line && errorLine) {\n codeBlock.addChild(new Text(theme.fg('error', `${errorLine.toString().padStart(4)} │ ${context.line}`), 0, 0));\n }\n\n // After lines\n if (context.after) {\n context.after.forEach((line, i) => {\n const lineNum = errorLine ? errorLine + i + 1 : i + 1;\n codeBlock.addChild(new Text(theme.fg('muted', `${lineNum.toString().padStart(4)} │ ${line}`), 0, 0));\n });\n }\n\n container.addChild(codeBlock);\n return container;\n }\n}\n","/**\n * Enhanced display component for tool validation errors.\n * Provides clear, actionable feedback when tool inputs are invalid.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport type { TUI } from '@earendil-works/pi-tui';\nimport { safeStringify } from '@mastra/core/utils';\nimport { MC_TOOLS } from '../../tool-names.js';\nimport { theme } from '../theme.js';\n\nexport interface ValidationError {\n field: string;\n message: string;\n expected?: string;\n received?: string;\n}\n\nexport interface ToolValidationErrorOptions {\n toolName: string;\n errors: ValidationError[];\n args?: unknown;\n schema?: unknown;\n}\n\n/**\n * Parse validation errors from various error formats\n */\nexport function parseValidationErrors(error: unknown): ValidationError[] {\n const errors: ValidationError[] = [];\n\n if (typeof error === 'string') {\n // Try to parse Zod-style errors. Restrict the gap between the field\n // name and the ': ' separator to non-newline characters and bound it\n // to avoid the polynomial backtracking CodeQL flagged on\n // attacker-crafted repetitions of `at \"!\"`.\n const zodMatch = error.match(/at \"([^\"\\n]{1,256})\"[^:\\n]{0,256}: ([^\\n]{1,4096})/g);\n if (zodMatch) {\n zodMatch.forEach(match => {\n const [, field, message] = match.match(/at \"([^\"\\n]{1,256})\"[^:\\n]{0,256}: ([^\\n]{1,4096})/) || [];\n if (field && message) {\n errors.push({ field, message });\n }\n });\n }\n\n // Try to parse \"missing required parameter\" errors. Bound the gap\n // so the lazy quantifier cannot drive O(n^2) behaviour on large\n // inputs without a closing quote.\n const missingMatch = error.match(/missing required[^\"`'\\n]{0,256}[\"`'](\\w{1,128})[\"`']/i);\n if (missingMatch) {\n errors.push({\n field: missingMatch[1]!,\n message: 'Required parameter is missing',\n });\n }\n\n // Generic fallback\n if (errors.length === 0) {\n errors.push({\n field: 'unknown',\n message: error,\n });\n }\n } else if (typeof error === 'object' && error !== null) {\n // Handle structured error objects\n const err = error as any;\n\n // Zod error format\n if (err.issues && Array.isArray(err.issues)) {\n err.issues.forEach((issue: any) => {\n errors.push({\n field: issue.path?.join('.') || 'unknown',\n message: issue.message,\n expected: issue.expected,\n received: issue.received,\n });\n });\n }\n // Generic error with message\n else if (err.message) {\n errors.push({\n field: err.field || 'unknown',\n message: err.message,\n });\n }\n }\n\n return errors.length > 0 ? errors : [{ field: 'unknown', message: String(error) }];\n}\n\n/**\n * Format tool arguments for display\n */\nfunction formatArgs(args: unknown): string[] {\n if (!args || typeof args !== 'object') return [];\n\n const lines: string[] = [];\n const obj = args as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(obj)) {\n let valueStr: string;\n if (value === null || value === undefined) {\n valueStr = theme.fg('muted', 'undefined');\n } else if (typeof value === 'string') {\n valueStr = value.length > 50 ? `\"${value.slice(0, 47)}...\"` : `\"${value}\"`;\n } else if (typeof value === 'object') {\n valueStr = safeStringify(value);\n if (valueStr.length > 50) {\n valueStr = valueStr.slice(0, 47) + '...';\n }\n } else {\n valueStr = String(value);\n }\n\n lines.push(` ${theme.fg('accent', key)}: ${valueStr}`);\n }\n\n return lines;\n}\n\n/**\n * Enhanced tool validation error display component\n */\nexport class ToolValidationErrorComponent extends Container {\n constructor(options: ToolValidationErrorOptions, _ui: TUI) {\n super();\n\n const { toolName, errors, args } = options;\n\n // Header\n this.addChild(\n new Text(\n `${theme.fg('error', '✗ Tool validation failed: ')}${theme.bold(theme.fg('toolTitle', toolName))}`,\n 0,\n 0,\n ),\n );\n this.addChild(new Text('', 0, 0));\n\n // Error details\n errors.forEach((error, index) => {\n if (index > 0) {\n this.addChild(new Text('', 0, 0));\n }\n\n if (error.field !== 'unknown') {\n this.addChild(new Text(`${theme.fg('muted', ' Parameter: ')}${theme.fg('accent', error.field)}`, 0, 0));\n }\n\n this.addChild(new Text(`${theme.fg('muted', ' Issue: ')}${theme.fg('error', error.message)}`, 0, 0));\n\n if (error.expected || error.received) {\n let detail = '';\n if (error.expected) {\n detail += `${theme.fg('muted', ' Expected: ')}${theme.fg('success', error.expected)}`;\n if (error.received) detail += theme.fg('muted', ', ');\n }\n if (error.received) {\n detail += `${theme.fg('muted', 'Received: ')}${theme.fg('error', error.received)}`;\n }\n this.addChild(new Text(detail, 0, 0));\n }\n });\n\n // Show provided arguments if available\n if (args && Object.keys(args as any).length > 0) {\n this.addChild(new Text('', 0, 0));\n this.addChild(new Text(theme.fg('muted', 'Provided arguments:'), 0, 0));\n const argsLines = formatArgs(args);\n argsLines.forEach(line => {\n this.addChild(new Text(line, 0, 0));\n });\n }\n\n // Suggestions\n const suggestions = this.generateSuggestions(toolName, errors);\n if (suggestions.length > 0) {\n this.addChild(new Text('', 0, 0));\n this.addChild(new Text(theme.bold(theme.fg('accent', 'Suggestions:')), 0, 0));\n suggestions.forEach(suggestion => {\n this.addChild(new Text(` • ${suggestion}`, 0, 0));\n });\n }\n }\n\n private generateSuggestions(toolName: string, errors: ValidationError[]): string[] {\n const suggestions: string[] = [];\n\n const missingParams = errors.filter(\n e => e.message.toLowerCase().includes('required') || e.message.toLowerCase().includes('missing'),\n );\n\n if (missingParams.length > 0) {\n const params = missingParams.map(e => e.field).filter(f => f !== 'unknown');\n if (params.length > 0) {\n suggestions.push(`Add the required parameter${params.length > 1 ? 's' : ''}: ${params.join(', ')}`);\n }\n }\n\n const typeErrors = errors.filter(\n e => e.message.toLowerCase().includes('type') || e.message.toLowerCase().includes('expected'),\n );\n\n if (typeErrors.length > 0) {\n suggestions.push('Check that parameter types match the expected format');\n }\n\n if (toolName === 'ask_user' && errors.some(e => e.field === 'question')) {\n suggestions.push('Make sure to provide a \"question\" parameter with your question text');\n }\n\n if (toolName === MC_TOOLS.EXECUTE_COMMAND && errors.some(e => e.field === 'command')) {\n suggestions.push('Provide a \"command\" parameter with the command to execute');\n }\n\n if (toolName === MC_TOOLS.VIEW && errors.some(e => e.field === 'path')) {\n suggestions.push('Provide a \"path\" parameter with the file or directory path');\n }\n\n return suggestions;\n }\n}\n","/**\n * Enhanced tool execution component with better collapsible support.\n * This will replace the existing tool-execution.ts\n */\n\nimport * as os from 'node:os';\nimport { Box, Container, Spacer, Text, visibleWidth } from '@earendil-works/pi-tui';\nimport type { TUI } from '@earendil-works/pi-tui';\nimport type { TaskItemInput } from '@mastra/core/harness';\nimport chalk from 'chalk';\nimport { highlight } from 'cli-highlight';\nimport type { Theme as HighlightTheme } from 'cli-highlight';\nimport { MC_TOOLS } from '../../tool-names.js';\nimport { BOX_INDENT, getTermWidth, theme, mastra, tintHex, ensureTerminalGlyphContrast } from '../theme.js';\nimport { truncateAnsi } from './ansi.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\nimport { ErrorDisplayComponent } from './error-display.js';\nimport type {\n CompactToolLabelColor,\n IToolExecutionComponent,\n QuietToolDisplayMode,\n ToolResult,\n} from './tool-execution-interface.js';\nimport { ToolValidationErrorComponent, parseValidationErrors } from './tool-validation-error.js';\n\nexport type { ToolResult };\n\nconst CODE_HIGHLIGHT_THEME: HighlightTheme = {\n default: text => theme.fg('toolArgs', text),\n keyword: chalk.hex('#c084fc'),\n built_in: chalk.hex('#93c5fd'),\n type: chalk.hex('#93c5fd'),\n literal: chalk.hex('#fca5a5'),\n number: chalk.hex('#fbbf24'),\n string: chalk.hex('#86efac'),\n regexp: chalk.hex('#fca5a5'),\n title: chalk.hex('#93c5fd'),\n function: chalk.hex('#93c5fd'),\n params: chalk.hex('#d4d4d8'),\n comment: chalk.hex('#71717a'),\n meta: chalk.hex('#a1a1aa'),\n attr: chalk.hex('#fbbf24'),\n variable: chalk.hex('#d4d4d8'),\n tag: chalk.hex('#c084fc'),\n name: chalk.hex('#c084fc'),\n};\n\nconst COMPACT_TOOL_COLOR = mastra.orange;\nconst COMPACT_TOOL_ARGS_BG = '#141414';\nconst QUIET_TOOL_RAIL = tintHex(COMPACT_TOOL_COLOR, 0.35);\n\nfunction normalizeHexColor(color: string | undefined): string | undefined {\n if (!color || !/^#[0-9a-f]{6}$/i.test(color)) return undefined;\n return color;\n}\n\nconst QUIET_CODE_HIGHLIGHT_THEME: HighlightTheme = {\n default: chalk.hex('#b4b4bd'),\n keyword: chalk.hex('#c4b5fd'),\n built_in: chalk.hex('#93c5fd'),\n type: chalk.hex('#93c5fd'),\n literal: chalk.hex('#fca5a5'),\n number: chalk.hex('#fbbf24'),\n string: chalk.hex('#9ecfa9'),\n regexp: chalk.hex('#fca5a5'),\n title: chalk.hex('#93c5fd'),\n function: chalk.hex('#7dd3fc'),\n params: chalk.hex('#b4b4bd'),\n comment: chalk.hex('#71717a'),\n meta: chalk.hex('#71717a'),\n attr: chalk.hex('#fbbf24'),\n variable: chalk.hex('#d4d4d8'),\n tag: chalk.hex('#c4b5fd'),\n name: chalk.hex('#c4b5fd'),\n};\n\nconst SHELL_CONTROL_WORDS = new Set([\n 'if',\n 'then',\n 'else',\n 'elif',\n 'fi',\n 'for',\n 'while',\n 'until',\n 'do',\n 'done',\n 'case',\n 'esac',\n 'in',\n 'function',\n]);\n\nexport interface ToolExecutionOptions {\n showImages?: boolean;\n autoCollapse?: boolean;\n collapsedByDefault?: boolean;\n quietDisplayMode?: QuietToolDisplayMode;\n quietPreviewLineLimit?: number;\n compactToolModeColor?: string;\n}\n/**\n * Convert absolute path to tilde notation if it's in home directory\n */\nfunction shortenPath(path: string): string {\n const home = os.homedir();\n if (path.startsWith(home)) {\n return `~${path.slice(home.length)}`;\n }\n return path;\n}\n\n/**\n * Resolve a file path to an absolute path for use in file:// URLs.\n */\nfunction resolveAbsolutePath(filePath: string): string {\n if (filePath.startsWith('/')) return filePath;\n if (filePath.startsWith('~')) {\n return os.homedir() + filePath.slice(1);\n }\n return process.cwd() + '/' + filePath;\n}\n\n/**\n * Wrap text in an OSC 8 hyperlink to a file path.\n * Terminals that support OSC 8 (iTerm2, WezTerm, Kitty, etc.) will\n * render the text as a clickable link that opens the file.\n * Other terminals will just show the visible text.\n */\nfunction fileLink(displayText: string, filePath: string, line?: number): string {\n const absPath = resolveAbsolutePath(filePath);\n const lineFragment = line ? `#${line}` : '';\n // OSC 8: \\x1b]8;params;URI\\x07 ... \\x1b]8;;\\x07\n return `\\x1b]8;;file://${absPath}${lineFragment}\\x07${displayText}\\x1b]8;;\\x07`;\n}\n\n/** Check if a tool name is a web search provider tool (e.g. web_search, web_search_20250305) */\nfunction isWebSearchTool(name: string): boolean {\n return name === 'web_search' || /^web_search_\\d+$/.test(name);\n}\n\nfunction isBrowserTool(name: string): boolean {\n return name.startsWith('browser_');\n}\n\nfunction isSkillTool(name: string): boolean {\n return name === 'skill' || name === 'skill_search' || name === 'skill_read';\n}\n\n/**\n * Extract the actual content from tool result text.\n */\nfunction extractContent(text: string): { content: string; isError: boolean } {\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed === 'object' && parsed !== null) {\n if ('content' in parsed) {\n const content = parsed.content;\n let contentStr: string;\n\n if (typeof content === 'string') {\n contentStr = content;\n } else if (Array.isArray(content)) {\n contentStr = content\n .filter(\n (part: unknown) =>\n typeof part === 'object' && part !== null && (part as Record<string, unknown>).type === 'text',\n )\n .map((part: unknown) => (part as Record<string, unknown>).text || '')\n .join('');\n } else {\n contentStr = JSON.stringify(content, null, 2);\n }\n\n return {\n content: contentStr,\n isError: Boolean(parsed.isError),\n };\n }\n return { content: JSON.stringify(parsed, null, 2), isError: false };\n }\n } catch {\n // Not JSON, use as-is\n }\n return { content: text, isError: false };\n}\n\n/**\n * Enhanced tool execution component with collapsible sections\n */\nexport class ToolExecutionComponentEnhanced extends Container implements IToolExecutionComponent {\n private contentBox: Box;\n private toolName: string;\n private args: unknown;\n private expanded = false;\n private isPartial = true;\n private ui: TUI;\n private result?: ToolResult;\n private options: ToolExecutionOptions;\n private startTime = Date.now();\n private streamingOutput = ''; // Buffer for streaming shell output\n private quietDisplayMode: QuietToolDisplayMode;\n private quietPreviewLineLimit: number;\n private compactToolContinuation = false;\n private compactToolHasFollowingContinuation = false;\n private compactToolPreviousSummary: string | undefined;\n private compactToolGroupLabelColor: CompactToolLabelColor | undefined;\n private compactToolModeColor: string | undefined;\n\n constructor(toolName: string, args: unknown, options: ToolExecutionOptions = {}, ui: TUI) {\n super();\n this.toolName = toolName;\n this.args = args;\n this.ui = ui;\n this.options = {\n autoCollapse: true,\n collapsedByDefault: true,\n ...options,\n };\n this.expanded = !this.options.collapsedByDefault;\n this.quietDisplayMode = this.options.quietDisplayMode ?? 'normal';\n this.quietPreviewLineLimit = this.options.quietPreviewLineLimit ?? 2;\n this.compactToolModeColor = normalizeHexColor(this.options.compactToolModeColor);\n\n // Content box - left indent for chat history alignment, no background\n this.contentBox = new Box(BOX_INDENT, 0, (text: string) => text);\n this.addChild(this.contentBox);\n this.updateTrailingSpacer();\n\n this.rebuild();\n }\n\n updateArgs(args: unknown, rebuild = true): void {\n this.args = args;\n if (rebuild) this.rebuild();\n }\n\n refresh(): void {\n this.rebuild();\n }\n\n updateResult(result: ToolResult, isPartial = false): void {\n this.result = result;\n this.isPartial = isPartial;\n // Keep streaming output for colored display in final result\n this.rebuild();\n }\n\n /**\n * Append streaming shell output.\n * Only for execute_command tool - shows live output while command runs.\n */\n appendStreamingOutput(output: string): void {\n if (\n this.toolName !== MC_TOOLS.EXECUTE_COMMAND &&\n this.toolName !== MC_TOOLS.GET_PROCESS_OUTPUT &&\n this.toolName !== MC_TOOLS.KILL_PROCESS\n ) {\n return;\n }\n this.streamingOutput += output;\n this.rebuild();\n }\n\n setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.rebuild();\n }\n\n setQuietModeDisplay(mode: QuietToolDisplayMode): void {\n this.quietDisplayMode = mode;\n this.updateTrailingSpacer();\n this.rebuild();\n }\n\n setQuietPreviewLineLimit(limit: number): void {\n const normalizedLimit = Number.isFinite(limit) ? limit : 2;\n this.quietPreviewLineLimit = Math.min(8, Math.max(0, Math.floor(normalizedLimit)));\n this.rebuild();\n }\n\n setCompactToolModeColor(color: string | undefined): void {\n const nextColor = normalizeHexColor(color);\n if (this.compactToolModeColor === nextColor) return;\n this.compactToolModeColor = nextColor;\n if (this.quietDisplayMode === 'quiet') this.rebuild();\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n if (this.quietDisplayMode === 'quiet') {\n return this.toolName === MC_TOOLS.EXECUTE_COMMAND ? 'quiet-shell-tool' : 'quiet-compact-tool';\n }\n return 'normal-tool';\n }\n\n getCompactToolGroupKey(): string | undefined {\n if (this.getChatSpacingKind() !== 'quiet-compact-tool') return undefined;\n return this.getCompactToolLabel();\n }\n\n getCompactToolGroupSummary(): string | undefined {\n if (this.getChatSpacingKind() !== 'quiet-compact-tool') return undefined;\n return this.getCompactToolSummary();\n }\n\n hasQuietStreamingPreview(): boolean {\n return this.quietDisplayMode === 'quiet' && this.quietPreviewLineLimit > 0 && this.getQuietActivePreview() !== '';\n }\n\n setCompactToolContinuation(continuation: boolean, previousSummary?: string): void {\n if (this.compactToolContinuation === continuation && this.compactToolPreviousSummary === previousSummary) return;\n this.compactToolContinuation = continuation;\n this.compactToolPreviousSummary = previousSummary;\n this.rebuild();\n }\n\n setCompactToolHasFollowingContinuation(hasFollowingContinuation: boolean): void {\n if (this.compactToolHasFollowingContinuation === hasFollowingContinuation) return;\n this.compactToolHasFollowingContinuation = hasFollowingContinuation;\n this.rebuild();\n }\n\n isComplete(): boolean {\n return !this.isPartial;\n }\n\n toggleExpanded(): void {\n this.setExpanded(!this.expanded);\n }\n\n override invalidate(): void {\n super.invalidate();\n // invalidate is called by the layout system — only update bg, don't rebuild\n this.updateBgColor();\n }\n\n private updateBgColor(): void {\n // No background for any tools - use bordered box style instead\n this.contentBox.setBgFn((text: string) => text);\n }\n\n private updateTrailingSpacer(): void {\n const trailingSpacerHeight = 0;\n const desiredChildren = trailingSpacerHeight > 0 ? 2 : 1;\n while (this.children.length > desiredChildren) {\n this.children.pop();\n }\n if (this.children.length < desiredChildren) {\n this.addChild(new Spacer(trailingSpacerHeight));\n }\n }\n\n private getCollapsedLineLimit(defaultLimit: number): number {\n return defaultLimit;\n }\n\n private shouldShowLeadingPadding(): boolean {\n return this.quietDisplayMode === 'normal';\n }\n\n private addLeadingPadding(): void {\n if (this.shouldShowLeadingPadding()) {\n this.contentBox.addChild(new Text('', 0, 0));\n }\n }\n\n private limitQuietShellLines(lines: string[]): string[] {\n if (this.quietDisplayMode !== 'quiet' || lines.length <= 15) {\n return lines;\n }\n return lines.slice(-15);\n }\n\n /**\n * Full clear-and-rebuild. Called when:\n * - args change (updateArgs)\n * - result arrives or changes (updateResult)\n * - expand/collapse on a tool with no collapsible child\n * - initial construction\n */\n private rebuild(): void {\n this.updateBgColor();\n this.contentBox.clear();\n\n if (this.quietDisplayMode === 'quiet' && this.toolName !== MC_TOOLS.EXECUTE_COMMAND) {\n this.renderCompactTool();\n return;\n }\n\n switch (this.toolName) {\n case MC_TOOLS.VIEW:\n this.renderViewToolEnhanced();\n break;\n case MC_TOOLS.EXECUTE_COMMAND:\n this.renderBashToolEnhanced();\n break;\n case MC_TOOLS.STRING_REPLACE_LSP:\n this.renderEditToolEnhanced();\n break;\n case MC_TOOLS.WRITE_FILE:\n this.renderWriteToolEnhanced();\n break;\n case MC_TOOLS.FIND_FILES:\n this.renderListFilesEnhanced();\n break;\n case MC_TOOLS.LSP_INSPECT:\n this.renderLspInspectEnhanced();\n break;\n case MC_TOOLS.GET_PROCESS_OUTPUT:\n case MC_TOOLS.KILL_PROCESS:\n this.renderProcessToolEnhanced();\n break;\n case 'task_write':\n this.renderTaskWriteEnhanced();\n break;\n default:\n if (isWebSearchTool(this.toolName)) {\n this.renderWebSearchEnhanced();\n } else {\n this.renderGenericToolEnhanced();\n }\n }\n }\n\n private renderCompactTool(): void {\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - BOX_INDENT * 2 - 2;\n const lines = this.getCompactToolSummaryLines();\n\n for (const line of lines) {\n this.contentBox.addChild(new Text(truncateAnsi(line, maxLineWidth), 0, 0));\n }\n }\n\n private getQuietPreviewLines(maxLineWidth: number): string[] {\n if (\n this.quietDisplayMode !== 'quiet' ||\n this.toolName === MC_TOOLS.EXECUTE_COMMAND ||\n this.quietPreviewLineLimit <= 0\n )\n return [];\n\n const preview = this.getQuietActivePreview();\n if (!preview) return [];\n\n if (this.isQuietCodePreviewTool()) {\n return this.getQuietCodePreviewLines(preview, maxLineWidth);\n }\n\n const firstLineWidth = Math.max(10, maxLineWidth - 4);\n const continuationWidth = Math.max(10, maxLineWidth - 4);\n const wrapped = this.wrapPreviewLines(preview, firstLineWidth, continuationWidth).slice(\n -this.quietPreviewLineLimit,\n );\n\n return wrapped.map(line => {\n const linePrefix = ` ${chalk.hex(this.getQuietToolRailColor())('│')} `;\n return truncateAnsi(`${linePrefix}${this.formatQuietActivePreview(line)}`, maxLineWidth);\n });\n }\n\n private getQuietCodePreviewLines(preview: string, maxLineWidth: number): string[] {\n const linePrefix = ` ${chalk.hex(this.getQuietToolRailColor())('│')} `;\n return this.highlightQuietCodePreview(preview)\n .split('\\n')\n .slice(-this.quietPreviewLineLimit)\n .map(line => truncateAnsi(`${linePrefix}${line}`, maxLineWidth));\n }\n\n private isQuietCodePreviewTool(): boolean {\n return (\n this.toolName === MC_TOOLS.VIEW ||\n this.toolName === MC_TOOLS.WRITE_FILE ||\n this.toolName === MC_TOOLS.STRING_REPLACE_LSP\n );\n }\n\n private getQuietPreviewCapLine(): string {\n return ` ${chalk.hex(this.getQuietToolRailColor())('╰──')}`;\n }\n\n private getQuietPreviewSpacerLine(): string {\n return ` ${chalk.hex(this.getQuietToolRailColor())('│')}`;\n }\n\n private shouldCloseQuietPreview(): boolean {\n return !this.compactToolHasFollowingContinuation;\n }\n\n private formatQuietActivePreview(preview: string): string {\n if (this.toolName === MC_TOOLS.FIND_FILES || this.toolName === MC_TOOLS.SEARCH_CONTENT) {\n return theme.fg('toolOutput', preview);\n }\n\n return theme.fg('text', preview);\n }\n\n private highlightQuietCodePreview(preview: string): string {\n const path = this.getFirstStringArg('path');\n try {\n return highlight(preview, {\n language: getLanguageFromPath(path),\n ignoreIllegals: true,\n theme: QUIET_CODE_HIGHLIGHT_THEME,\n });\n } catch {\n return theme.fg('toolArgs', preview);\n }\n }\n\n private tokenizeQuietShellCommand(command: string): Array<{ text: string; color: (value: string) => string }> {\n const tokens = command.match(/\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|\\s+|&&|\\|\\||[|;&()<>]|[^\\s|;&()<>]+/g) ?? [''];\n\n return tokens.map(token => {\n if (/^\\s+$/.test(token)) return { text: token, color: (value: string) => value };\n if ((token.startsWith('\"') && token.endsWith('\"')) || (token.startsWith(\"'\") && token.endsWith(\"'\"))) {\n return { text: token, color: chalk.white };\n }\n if (token === '&&' || token === '||' || token === '|' || token === ';' || token === '&') {\n return { text: token, color: (value: string) => theme.fg('muted', value) };\n }\n if (token === '(' || token === ')' || token === '<' || token === '>') {\n return { text: token, color: (value: string) => theme.fg('muted', value) };\n }\n if (SHELL_CONTROL_WORDS.has(token)) {\n return { text: token, color: chalk.blue };\n }\n return { text: token, color: (value: string) => theme.fg('toolArgs', value) };\n });\n }\n\n private wrapQuietShellCommand(command: string, width: number): string[] {\n const lines: string[] = [];\n let current = '';\n let currentWidth = 0;\n\n const pushCurrent = () => {\n lines.push(current);\n current = '';\n currentWidth = 0;\n };\n\n const takeVisiblePrefix = (text: string, maxWidth: number): string => {\n let chunk = '';\n let chunkWidth = 0;\n\n for (const char of text) {\n const charWidth = visibleWidth(char);\n if (chunk && chunkWidth + charWidth > maxWidth) break;\n chunk += char;\n chunkWidth += charWidth;\n if (chunkWidth >= maxWidth) break;\n }\n\n return chunk;\n };\n\n const wrapSourceLine = (sourceLine: string) => {\n for (const token of this.tokenizeQuietShellCommand(sourceLine)) {\n let remaining = token.text;\n\n while (remaining.length > 0) {\n if (currentWidth === 0 && /^\\s+$/.test(remaining)) break;\n\n const available = width - currentWidth;\n if (available <= 0) {\n pushCurrent();\n continue;\n }\n\n const remainingWidth = visibleWidth(remaining);\n if (remainingWidth <= available) {\n current += token.color(remaining);\n currentWidth += remainingWidth;\n break;\n }\n\n if (currentWidth > 0 && !/^\\s+$/.test(remaining)) {\n pushCurrent();\n continue;\n }\n\n const chunk = takeVisiblePrefix(remaining, available);\n current += token.color(chunk);\n currentWidth += visibleWidth(chunk);\n remaining = remaining.slice(chunk.length);\n pushCurrent();\n }\n }\n };\n\n const sourceLines = command.split('\\n');\n sourceLines.forEach((sourceLine, index) => {\n wrapSourceLine(sourceLine);\n if (index < sourceLines.length - 1) pushCurrent();\n });\n\n if (current) lines.push(current);\n return lines.length ? lines : [''];\n }\n\n private wrapPreviewLines(preview: string, firstLineWidth: number, continuationWidth: number): string[] {\n const lines: string[] = [];\n let width = firstLineWidth;\n\n for (const sourceLine of preview.split('\\n')) {\n if (sourceLine.length === 0) {\n if (lines.length > 0) width = continuationWidth;\n continue;\n }\n\n let remaining = sourceLine;\n while (remaining.length > width) {\n lines.push(remaining.slice(0, width));\n remaining = remaining.slice(width);\n width = continuationWidth;\n }\n\n lines.push(remaining);\n width = continuationWidth;\n }\n\n return lines;\n }\n\n private getCompactToolSummaryLines(): string[] {\n const status = this.getCompactStatusIndicator();\n const toolLabel = this.getCompactToolLabel();\n const toolLabelColor = this.getCompactToolLabelColor();\n const summary = this.compactToolContinuation ? this.getCompactContinuationSummary() : this.getCompactToolSummary();\n const detailLines = this.getQuietPreviewLines(getTermWidth() - BOX_INDENT * 2 - 2);\n const firstLine = this.compactToolContinuation\n ? summary\n ? `${this.getCompactContinuationIndent()}${this.formatCompactContinuationLine(summary)}${status}`\n : this.compactToolPreviousSummary\n ? `${this.getCompactContinuationIndent()}${this.formatEmptyCompactContinuationLine()}${status}`\n : `${this.getCompactContinuationIndent()}${this.formatCompactToolHeader(toolLabel, toolLabelColor, '')}${status}`\n : `${this.formatCompactToolHeader(toolLabel, toolLabelColor, summary)}${status}`;\n\n if (detailLines.length === 0) return [firstLine];\n const previewLines = this.shouldCloseQuietPreview() ? [...detailLines, this.getQuietPreviewCapLine()] : detailLines;\n if (this.compactToolHasFollowingContinuation) previewLines.push(this.getQuietPreviewSpacerLine());\n return [firstLine, ...previewLines];\n }\n\n private getCompactStatusIndicator(): string {\n return this.isErrorResult() ? theme.fg('error', ' ✗') : '';\n }\n\n private formatCompactToolHeader(toolLabel: string, toolLabelColor: CompactToolLabelColor, summary: string): string {\n const color = this.getCompactToolAccentColor(toolLabelColor);\n const argsBg = this.getCompactToolArgsBg(toolLabelColor);\n const argsColor = this.getCompactToolArgsColor(toolLabelColor);\n const leftHalf = chalk.hex(color)('▐');\n const rightHalf = summary ? chalk.hex(color).bgHex(argsBg)('▌') : chalk.hex(color)('▌');\n const label = `${leftHalf}${chalk.bgHex(color).hex('#000000').bold(toolLabel)}${rightHalf}`;\n const args = summary ? this.formatCompactSummaryBadge(summary, argsBg, argsColor) : '';\n const trail = summary ? chalk.hex(argsBg)('▌') : '';\n return `${label}${args}${trail}`;\n }\n\n private getCompactToolAccentColor(toolLabelColor: CompactToolLabelColor): string {\n if (this.isErrorResult() || toolLabelColor === 'error') return mastra.red;\n return this.compactToolModeColor ?? COMPACT_TOOL_COLOR;\n }\n\n private getCompactToolArgsBg(toolLabelColor: CompactToolLabelColor): string {\n if (this.isErrorResult() || toolLabelColor === 'error') return tintHex(mastra.red, 0.15);\n return COMPACT_TOOL_ARGS_BG;\n }\n\n private getCompactToolArgsColor(toolLabelColor: CompactToolLabelColor): string | undefined {\n if (this.isErrorResult() || toolLabelColor === 'error') return undefined;\n return this.compactToolModeColor ?? COMPACT_TOOL_COLOR;\n }\n\n private getQuietToolRailColor(): string {\n const color = this.isErrorResult()\n ? tintHex(mastra.red, 0.35)\n : this.compactToolModeColor\n ? tintHex(this.compactToolModeColor, 0.35)\n : QUIET_TOOL_RAIL;\n return ensureTerminalGlyphContrast(color);\n }\n\n private getQuietToolCircleColor(color: string): string {\n return ensureTerminalGlyphContrast(color);\n }\n\n private formatToolBorder(char: string): string {\n return theme.bold(chalk.hex(ensureTerminalGlyphContrast(theme.getTheme().toolBorderSuccess))(char));\n }\n\n getCompactToolLabelColor(): CompactToolLabelColor {\n if (this.compactToolGroupLabelColor) return this.compactToolGroupLabelColor;\n return this.getOwnCompactToolLabelColor();\n }\n\n setCompactToolGroupLabelColor(color: CompactToolLabelColor | undefined): void {\n if (this.compactToolGroupLabelColor === color) return;\n this.compactToolGroupLabelColor = color;\n this.rebuild();\n }\n\n getOwnCompactToolLabelColor(): CompactToolLabelColor {\n return this.isErrorResult() ? 'error' : 'toolTitle';\n }\n\n private isErrorResult(): boolean {\n if (this.result?.isError) return true;\n if (!this.result) return false;\n\n const output = this.getFormattedOutput();\n if (this.toolName === MC_TOOLS.STRING_REPLACE_LSP && /specified text was not found/i.test(output)) return true;\n return false;\n }\n\n private getQuietActivePreview(): string {\n if (this.isErrorResult()) return this.formatQuietErrorPreview();\n if (isWebSearchTool(this.toolName)) return this.formatQuietWebSearchPreview();\n if (isBrowserTool(this.toolName)) return this.formatQuietBrowserPreview();\n if (isSkillTool(this.toolName)) return this.formatQuietSkillPreview();\n if (this.toolName === MC_TOOLS.GET_PROCESS_OUTPUT) return this.formatQuietProcessOutputPreview();\n if (this.toolName === MC_TOOLS.FILE_STAT) return this.formatQuietFileStatPreview();\n\n switch (this.toolName) {\n case MC_TOOLS.VIEW:\n return this.formatQuietViewPreview();\n case MC_TOOLS.FIND_FILES:\n return this.formatQuietListPreview();\n case 'skill':\n return '';\n case MC_TOOLS.STRING_REPLACE_LSP:\n return this.formatQuietEditPreview();\n case MC_TOOLS.WRITE_FILE:\n return this.getMultilinePreview('content', Number.POSITIVE_INFINITY, false);\n case MC_TOOLS.SEARCH_CONTENT:\n return this.formatSearchDetail();\n case MC_TOOLS.LSP_INSPECT:\n return this.getFirstLineArg('match', 80);\n default:\n return this.formatQuietGenericResultPreview();\n }\n }\n\n private formatQuietEditPreview(): string {\n return (\n this.getMultilinePreview('new_str', Number.POSITIVE_INFINITY, false) ||\n this.getMultilinePreview('new_string', Number.POSITIVE_INFINITY, false)\n );\n }\n\n private formatQuietErrorPreview(): string {\n const outputLines = this.stripAnsi(this.getFormattedOutput())\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean);\n if (outputLines.some(line => line.startsWith('Validation error:') || line.startsWith('Parameter:'))) {\n return outputLines.join(' — ');\n }\n return outputLines.slice(0, 2).join('\\n');\n }\n\n private formatQuietViewPreview(): string {\n if (!this.result) return '';\n\n const output = this.getFormattedOutput();\n if (!output || !this.looksLikeViewOutput(output)) return '';\n\n const argsObj = this.args as Record<string, unknown> | undefined;\n const viewRange = argsObj?.view_range as [number, number] | undefined;\n const startLine = viewRange?.[0] ?? (argsObj?.offset as number | undefined) ?? 1;\n return getPlainCodeFromViewOutput(output, startLine);\n }\n\n private formatQuietListPreview(): string {\n if (!this.result) return '';\n\n const entries = this.getListResultEntries();\n if (entries.length === 0) return '';\n\n return entries.slice(0, 2).join('\\n');\n }\n\n private formatQuietWebSearchPreview(): string {\n if (!this.result) return '';\n\n return this.stripAnsi(this.formatWebSearchResults())\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .slice(0, 2)\n .join('\\n');\n }\n\n private formatQuietBrowserPreview(): string {\n if (!this.result || !['browser_snapshot', 'browser_evaluate'].includes(this.toolName)) return '';\n const output = this.unwrapBrowserToolOutput(this.getFormattedOutput());\n return this.stripAnsi(output)\n .split('\\n')\n .map(line => line.trimEnd())\n .filter(Boolean)\n .slice(0, 2)\n .join('\\n');\n }\n\n private unwrapBrowserToolOutput(output: string): string {\n try {\n const parsed = JSON.parse(output) as unknown;\n if (typeof parsed !== 'object' || parsed === null) return output;\n const record = parsed as Record<string, unknown>;\n if (this.toolName === 'browser_evaluate' && record.result !== undefined) {\n return this.formatBrowserEvaluateResult(record.result);\n }\n if (this.toolName === 'browser_snapshot' && typeof record.snapshot === 'string') return record.snapshot;\n if (typeof record.error === 'string') return record.error;\n return '';\n } catch {\n return output;\n }\n }\n\n private formatBrowserEvaluateResult(result: unknown): string {\n if (typeof result === 'string') return result;\n if (typeof result !== 'object' || result === null) return String(result);\n if (Array.isArray(result)) return `[${result.length} items]`;\n\n return Object.entries(result as Record<string, unknown>)\n .slice(0, 3)\n .map(([key, value]) => `${key}: ${this.formatCompactBrowserValue(value)}`)\n .join('\\n');\n }\n\n private formatCompactBrowserValue(value: unknown): string {\n if (typeof value === 'string') return value === '' ? '\"\"' : value;\n if (value === undefined) return 'undefined';\n if (value === null) return 'null';\n if (Array.isArray(value)) return `[${value.length} items]`;\n if (typeof value === 'object') return '{…}';\n return String(value);\n }\n\n private formatQuietProcessOutputPreview(): string {\n if (!this.result) return '';\n return this.stripAnsi(this.getFormattedOutput())\n .split('\\n')\n .map(line => line.trimEnd())\n .filter(Boolean)\n .slice(0, 3)\n .join('\\n');\n }\n\n private formatQuietFileStatPreview(): string {\n if (!this.result) return '';\n const output = this.stripAnsi(this.getFormattedOutput()).trim();\n return output.replace(/^\\S+\\s+/, '').replace(/\\s+/g, ' ');\n }\n\n private formatQuietGenericResultPreview(): string {\n if (!this.result || this.isPartial) return '';\n const output = this.stripAnsi(this.getFormattedOutput()).trim();\n if (!output) return '';\n\n const compactJson = this.formatCompactJsonResult(output);\n const preview = compactJson || output;\n const argsSummary = this.stripAnsi(this.formatArgsSummary()).trim();\n if (argsSummary && preview === argsSummary) return '';\n\n return preview\n .split('\\n')\n .map(line => line.trimEnd())\n .filter(Boolean)\n .slice(0, 2)\n .join('\\n');\n }\n\n private formatCompactJsonResult(output: string): string {\n try {\n const parsed = JSON.parse(output) as unknown;\n if (typeof parsed !== 'object' || parsed === null) return String(parsed);\n if (Array.isArray(parsed)) return `[${parsed.length} items]`;\n return Object.entries(parsed as Record<string, unknown>)\n .slice(0, 3)\n .map(([key, value]) => `${key}: ${this.formatCompactBrowserValue(value)}`)\n .join('\\n');\n } catch {\n return '';\n }\n }\n\n private formatQuietSkillPreview(): string {\n if (!this.result || this.toolName !== 'skill_search') return '';\n return this.stripAnsi(this.getFormattedOutput())\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .slice(0, 2)\n .join('\\n');\n }\n\n private getListResultEntries(): string[] {\n return this.getFormattedOutput()\n .split('\\n')\n .map(line => line.trimEnd())\n .filter(line => line.trim() !== '' && line.trim() !== '.');\n }\n\n private looksLikeViewOutput(output: string): boolean {\n return output.split('\\n').some(line => /^\\s*\\d+[\\t→]/.test(line));\n }\n\n private getMultilinePreview(key: string, maxLength = 80, includeLineCount = true): string {\n const value = this.getFirstStringArg(key);\n if (!value) return '';\n\n const lines = value.split('\\n');\n const previewText = includeLineCount ? (lines[0] ?? '') : value.replace(/\\r\\n/g, '\\n').replace(/^\\n+|\\n+$/g, '');\n const truncated =\n Number.isFinite(maxLength) && previewText.length > maxLength\n ? `${previewText.slice(0, maxLength)}…`\n : previewText;\n return includeLineCount && lines.length > 1 ? `${truncated} (${lines.length} lines)` : truncated;\n }\n\n private stripAnsi(value: string): string {\n return value.replace(/\\x1b\\[[0-9;]*m/g, '');\n }\n\n private getCompactContinuationIndent(): string {\n return ' ';\n }\n\n private formatEmptyCompactContinuationLine(): string {\n const railColor = this.getQuietToolRailColor();\n const isStreamingContinuation = !this.isComplete() && this.quietPreviewLineLimit > 0;\n if (isStreamingContinuation) {\n const circleColor = this.getQuietToolCircleColor(this.getCompactToolAccentColor(this.getCompactToolLabelColor()));\n return `${chalk.hex(circleColor)('●')}${chalk.hex(railColor)('─')}`;\n }\n return chalk.hex(railColor)(this.compactToolHasFollowingContinuation ? '├─' : '╰─');\n }\n\n private formatCompactContinuationLine(summary: string): string {\n const lineMatch = summary.match(/^─+/);\n const linePrefix = lineMatch?.[0] ?? '';\n const separator = linePrefix ? '' : ' ';\n const hasFollowing = this.compactToolHasFollowingContinuation || this.hasQuietStreamingPreview();\n const hasPreview = this.hasQuietStreamingPreview();\n const toolLabelColor = this.getCompactToolLabelColor();\n const color = this.getCompactToolAccentColor(toolLabelColor);\n const argsBg = this.getCompactToolArgsBg(toolLabelColor);\n const argsColor = this.getCompactToolArgsColor(toolLabelColor);\n const railColor = this.getQuietToolRailColor();\n const circleColor = this.getQuietToolCircleColor(color);\n const isStreamingContinuation =\n this.compactToolContinuation && !this.isComplete() && this.quietPreviewLineLimit > 0;\n const branch =\n hasFollowing || isStreamingContinuation\n ? `${hasPreview || isStreamingContinuation ? chalk.hex(circleColor)('●') : chalk.hex(railColor)('├')}${chalk.hex(railColor)(`─${separator}${linePrefix}`)}`\n : chalk.hex(railColor)(`╰─${separator}${linePrefix}`);\n const continuationSummary = ` ${summary.slice(linePrefix.length)}`;\n const trail = continuationSummary ? chalk.hex(argsBg)('▌') : '';\n return `${branch}${this.formatCompactSummaryBadge(continuationSummary, argsBg, argsColor)}${trail}`;\n }\n\n private formatCompactSummaryBadge(summary: string, argsBg: string, argsColor?: string): string {\n const styleText = (text: string) => (argsColor ? chalk.hex(argsColor)(text) : theme.fg('text', text));\n const rangeMatch = summary.match(/(:\\d+(?:-\\d+)?)$/);\n if (!rangeMatch?.[1]) return chalk.bgHex(argsBg)(styleText(summary));\n\n const rangeStart = summary.length - rangeMatch[1].length;\n return `${chalk.bgHex(argsBg)(styleText(summary.slice(0, rangeStart)))}${chalk.bgHex(argsBg)(theme.fg('dim', rangeMatch[1]))}`;\n }\n\n private getCompactContinuationSummary(): string {\n const summary = this.getCompactToolSummary();\n const previousSummary = this.compactToolPreviousSummary;\n if (!summary) return '';\n if (!previousSummary) return this.isComplete() ? summary : '';\n\n if (previousSummary.startsWith(`${summary}:`)) {\n const dirnameStart = this.getImmediateDirnameStart(summary);\n if (dirnameStart !== undefined) {\n return `${this.formatSharedPrefixPlaceholder(summary, dirnameStart)}${summary.slice(dirnameStart)}`;\n }\n }\n\n const sharedPrefixLength = this.getSharedPrefixLength(previousSummary, summary);\n if (sharedPrefixLength === 0) return summary;\n\n const visibleRemainder = summary.slice(sharedPrefixLength);\n if (!visibleRemainder && this.hasCompletePathSegment(summary)) {\n const dirnameStart = this.getImmediateDirnameStart(summary);\n if (dirnameStart !== undefined) {\n return `${this.formatSharedPrefixPlaceholder(summary, dirnameStart)}${summary.slice(dirnameStart)}`;\n }\n }\n return `${this.formatSharedPrefixPlaceholder(summary, sharedPrefixLength)}${visibleRemainder}`;\n }\n\n private getImmediateDirnameStart(summary: string): number | undefined {\n const pathEnd = summary.indexOf(':');\n const path = pathEnd >= 0 ? summary.slice(0, pathEnd) : summary;\n const filenameSlashIndex = path.lastIndexOf('/');\n if (filenameSlashIndex < 0) return undefined;\n const dirnameSlashIndex = path.lastIndexOf('/', filenameSlashIndex - 1);\n return dirnameSlashIndex >= 0 ? dirnameSlashIndex : filenameSlashIndex;\n }\n\n private hasCompletePathSegment(summary: string): boolean {\n const pathEnd = summary.indexOf(':');\n const path = pathEnd >= 0 ? summary.slice(0, pathEnd) : summary;\n const lastSegment = path.slice(path.lastIndexOf('/') + 1);\n return lastSegment.length > 0 && (pathEnd >= 0 || lastSegment.includes('.'));\n }\n\n private formatSharedPrefixPlaceholder(summary: string, sharedPrefixLength: number): string {\n if (sharedPrefixLength <= 0) return '';\n if (summary[sharedPrefixLength - 1] === '/') {\n return `${'─'.repeat(sharedPrefixLength)}/`;\n }\n return '─'.repeat(sharedPrefixLength + 1);\n }\n\n private getSharedPrefixLength(a: string, b: string): number {\n let i = 0;\n while (i < a.length && i < b.length && a[i] === b[i]) {\n i++;\n }\n\n const pathEnd = b.indexOf(':');\n const path = pathEnd >= 0 ? b.slice(0, pathEnd) : b;\n const sharedPathLength = Math.min(i, path.length);\n if (sharedPathLength === 0) return 0;\n\n const matchingSegmentBoundary = path.lastIndexOf('/', sharedPathLength - 1);\n const currentSegmentStart = path.lastIndexOf('/', Math.max(0, sharedPathLength - 1));\n\n if (i === b.length && i === a.length) {\n return this.getImmediateDirnameStart(b) ?? b.length;\n }\n\n if (i === b.length || i === a.length) {\n return b.length;\n }\n\n if (i < b.length && i < a.length) {\n const visiblePathStart = this.getImmediateDirnameStart(b) ?? currentSegmentStart;\n if (currentSegmentStart < 0) return 0;\n return Math.min(currentSegmentStart, visiblePathStart);\n }\n\n return matchingSegmentBoundary >= 0 ? matchingSegmentBoundary + 1 : 0;\n }\n\n private getCompactToolSummary(): string {\n if (isWebSearchTool(this.toolName)) return this.formatWebSearchSummary();\n if (isBrowserTool(this.toolName)) return this.formatBrowserSummary();\n if (isSkillTool(this.toolName)) return this.formatSkillSummary();\n\n switch (this.toolName) {\n case MC_TOOLS.VIEW:\n return this.formatPathWithRange();\n case MC_TOOLS.STRING_REPLACE_LSP:\n return this.formatEditSummary();\n case MC_TOOLS.WRITE_FILE:\n return this.getFirstStringArg('path');\n case MC_TOOLS.FIND_FILES:\n return this.formatListSummary();\n case MC_TOOLS.DELETE_FILE:\n case MC_TOOLS.FILE_STAT:\n case MC_TOOLS.MKDIR:\n return this.getFirstStringArg('path');\n case MC_TOOLS.AST_SMART_EDIT:\n return this.getFirstStringArg('path') || this.getFirstStringArg('targetName');\n case MC_TOOLS.SEARCH_CONTENT:\n return this.formatSearchSummary();\n case MC_TOOLS.LSP_INSPECT:\n return this.formatPathWithRange();\n case MC_TOOLS.GET_PROCESS_OUTPUT:\n case MC_TOOLS.KILL_PROCESS:\n return this.getFirstStringArg('pid');\n case 'skill':\n return this.getFirstStringArg('name');\n case 'subagent':\n return this.formatSubagentSummary();\n default:\n return this.formatPlainArgsSummary().trim();\n }\n }\n\n private getCompactToolLabel(): string {\n if (isWebSearchTool(this.toolName)) return 'web';\n\n switch (this.toolName) {\n case MC_TOOLS.EXECUTE_COMMAND:\n return '$';\n case MC_TOOLS.STRING_REPLACE_LSP:\n return 'edit';\n case MC_TOOLS.WRITE_FILE:\n return 'write';\n case MC_TOOLS.FIND_FILES:\n return 'list';\n case MC_TOOLS.SEARCH_CONTENT:\n return 'grep';\n case MC_TOOLS.DELETE_FILE:\n return 'delete';\n case MC_TOOLS.FILE_STAT:\n return 'stat';\n case MC_TOOLS.MKDIR:\n return 'mkdir';\n case MC_TOOLS.GET_PROCESS_OUTPUT:\n return 'process';\n case MC_TOOLS.KILL_PROCESS:\n return 'kill';\n case MC_TOOLS.AST_SMART_EDIT:\n return 'ast_edit';\n default:\n return this.toolName;\n }\n }\n\n private formatPathWithRange(): string {\n const rawPath = this.getFirstStringArg('path');\n if (!rawPath) return '';\n\n const argsObj = this.args as Record<string, unknown> | undefined;\n const viewRange = argsObj?.view_range as [number, number] | undefined;\n const offset = typeof argsObj?.offset === 'number' ? argsObj.offset : undefined;\n const limit = typeof argsObj?.limit === 'number' ? argsObj.limit : undefined;\n const line = typeof argsObj?.line === 'number' ? argsObj.line : undefined;\n const start = viewRange?.[0] ?? offset ?? line;\n const end = viewRange?.[1] ?? (offset !== undefined && limit !== undefined ? offset + limit - 1 : line);\n const path = rawPath;\n\n if (start === undefined) return path;\n return end !== undefined && end !== start ? `${path}:${start}-${end}` : `${path}:${start}`;\n }\n\n private formatEditSummary(): string {\n const path = this.getFirstStringArg('path');\n if (!path) return '';\n\n const output = this.getFormattedOutput();\n const escapedPath = path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const match = output.match(new RegExp(`Replaced \\\\d+ occurrences? in ${escapedPath} \\\\(lines ([^)]+)\\\\)`));\n return match?.[1] ? `${path}:${match[1]}` : path;\n }\n\n private formatListSummary(): string {\n const target = this.getFirstStringArg('path') || this.getFirstStringArg('pattern');\n const resultCount = this.result ? this.getListResultEntries().length : undefined;\n if (resultCount === undefined) return target;\n return `${target} (${resultCount} ${resultCount === 1 ? 'result' : 'results'})`;\n }\n\n private formatSearchSummary(): string {\n return this.getFirstStringArg('path');\n }\n\n private formatWebSearchSummary(): string {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const action = argsObj?.action as Record<string, unknown> | undefined;\n const query = argsObj?.query ? String(argsObj.query) : action?.query ? String(action.query) : '';\n return query ? `\"${query}\"` : '';\n }\n\n private formatBrowserSummary(): string {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const first = (...keys: string[]) =>\n keys.map(key => argsObj?.[key]).find(value => value !== undefined && value !== null);\n const quote = (value: unknown) => (typeof value === 'string' ? `\"${value}\"` : String(value));\n\n switch (this.toolName) {\n case 'browser_goto':\n return this.getFirstStringArg('url');\n case 'browser_snapshot': {\n const interactiveOnly = first('interactiveOnly');\n const maxDepth = first('maxDepth');\n return [\n interactiveOnly !== undefined ? `interactive=${interactiveOnly}` : '',\n maxDepth !== undefined ? `depth=${maxDepth}` : '',\n ]\n .filter(Boolean)\n .join(' ');\n }\n case 'browser_click':\n return [\n this.getFirstStringArg('ref'),\n first('button') ? `button=${first('button')}` : '',\n first('clickCount') ? `x${first('clickCount')}` : '',\n ]\n .filter(Boolean)\n .join(' ');\n case 'browser_type':\n return [\n this.getFirstStringArg('ref'),\n this.getFirstStringArg('text') ? quote(this.getFirstStringArg('text')) : '',\n ]\n .filter(Boolean)\n .join(' ');\n case 'browser_press':\n return this.getFirstStringArg('key');\n case 'browser_select':\n return [\n this.getFirstStringArg('ref'),\n first('value', 'label', 'index') !== undefined ? quote(first('value', 'label', 'index')) : '',\n ]\n .filter(Boolean)\n .join(' ');\n case 'browser_scroll':\n return [\n this.getFirstStringArg('direction'),\n first('amount') !== undefined ? `${first('amount')}px` : '',\n this.getFirstStringArg('ref'),\n ]\n .filter(Boolean)\n .join(' ');\n case 'browser_wait':\n return [this.getFirstStringArg('ref'), this.getFirstStringArg('state')].filter(Boolean).join(' ');\n case 'browser_tabs':\n return [this.getFirstStringArg('action'), this.getFirstStringArg('url')].filter(Boolean).join(' ');\n case 'browser_evaluate':\n return this.getFirstLineArg('script', 80);\n default:\n return this.formatPlainArgsSummary().trim();\n }\n }\n\n private formatSubagentSummary(): string {\n const agentType = this.getFirstStringArg('agentType');\n const task = this.getFirstLineArg('task', 80);\n return [agentType, task].filter(Boolean).join(' ');\n }\n\n private formatSkillSummary(): string {\n switch (this.toolName) {\n case 'skill':\n return this.getFirstStringArg('name');\n case 'skill_search':\n return this.getFirstStringArg('query');\n case 'skill_read':\n return [this.getFirstStringArg('skillName'), this.getFirstStringArg('path')].filter(Boolean).join(' ');\n default:\n return '';\n }\n }\n\n private formatSearchDetail(): string {\n const pattern = this.getFirstStringArg('pattern');\n if (!pattern) return '';\n\n const resultCount = this.getSearchResultCount();\n return resultCount === undefined ? pattern : `${pattern} (${resultCount} results)`;\n }\n\n private getSearchResultCount(): number | undefined {\n if (!this.result) return undefined;\n\n const output = this.getFormattedOutput();\n const explicitMatch = output.match(/(\\d+)\\s+(?:matches|results)/i);\n if (explicitMatch?.[1]) return Number(explicitMatch[1]);\n\n const matchLines = output\n .split('\\n')\n .filter(line => /:\\d+:/.test(line) || /^\\s*(?:\\.|\\/|[\\w.-]+\\/).+:\\d+/.test(line));\n return matchLines.length > 0 ? matchLines.length : undefined;\n }\n\n private getFirstStringArg(key: string): string {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const value = argsObj?.[key];\n return typeof value === 'string' ? value : '';\n }\n\n private getFirstLineArg(key: string, maxLength: number): string {\n const value = this.getFirstStringArg(key);\n if (!value) return '';\n const firstLine = value.split('\\n')[0] ?? '';\n return firstLine.length > maxLength ? `${firstLine.slice(0, maxLength)}…` : firstLine;\n }\n\n private renderViewToolEnhanced(): void {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const fullPath = argsObj?.path ? String(argsObj.path) : '';\n const viewRange = argsObj?.view_range as [number, number] | undefined;\n const offset = argsObj?.offset as number | undefined;\n const limit = argsObj?.limit as number | undefined;\n // view tool uses view_range[0], workspace read_file uses offset\n const startLine = viewRange?.[0] ?? offset ?? 1;\n\n // Build range display from view_range or offset/limit\n let rangeDisplay = '';\n if (viewRange) {\n rangeDisplay = theme.fg('muted', `:${viewRange[0]}-${viewRange[1]}`);\n } else if (offset || limit) {\n const from = offset ?? 1;\n const to = limit ? from + limit - 1 : undefined;\n rangeDisplay = theme.fg('muted', to ? `:${from}-${to}` : `:${from}`);\n }\n\n const border = (char: string) => this.formatToolBorder(char);\n\n if (!this.result || this.isPartial) {\n const path = argsObj?.path ? shortenPath(String(argsObj.path)) : '...';\n const status = this.getStatusIndicator();\n const pathDisplay = fullPath\n ? fileLink(theme.fg('toolArgs', path), fullPath, startLine)\n : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'view'))} ${pathDisplay}${rangeDisplay}${status}`;\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n const status = this.getStatusIndicator();\n\n // Calculate available width for path and truncate from beginning if needed\n const termWidth = getTermWidth();\n const fixedParts = '╰── view ' + (rangeDisplay ? `:XXX,XXX` : '') + ' ✓'; // approximate fixed width\n const availableForPath = termWidth - fixedParts.length - 6 - BOX_INDENT * 2; // buffer\n let path = argsObj?.path ? shortenPath(String(argsObj.path)) : '...';\n if (path.length > availableForPath && availableForPath > 10) {\n path = '…' + path.slice(-(availableForPath - 1));\n }\n\n const pathDisplay = fullPath\n ? fileLink(theme.fg('toolArgs', path), fullPath, startLine)\n : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'view'))} ${pathDisplay}${rangeDisplay}${status}`;\n\n // Empty line padding above\n this.addLeadingPadding();\n\n // Top border\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n // Syntax-highlighted content with left border, truncated to prevent soft wrap\n const output = this.getFormattedOutput();\n if (output) {\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2; // Account for border \"│ \" (2) + buffer (2)\n const highlighted = highlightCode(output, fullPath, startLine);\n let lines = highlighted.split('\\n');\n\n // Limit lines when collapsed\n const collapsedLines = this.getCollapsedLineLimit(20);\n const totalLines = lines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n\n if (hasMore) {\n lines = lines.slice(0, collapsedLines);\n }\n\n const borderedLines = lines.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n\n // Show truncation indicator\n if (hasMore) {\n const remaining = totalLines - collapsedLines;\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${remaining} more lines (ctrl+e to expand)`), 0, 0),\n );\n }\n }\n\n // Bottom border with tool info\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n }\n\n private renderBashToolEnhanced(): void {\n const argsObj = this.args as Record<string, unknown> | undefined;\n let command = argsObj?.command ? String(argsObj.command) : '...';\n const timeout = argsObj?.timeout as number | undefined;\n const cwd = argsObj?.cwd ? shortenPath(String(argsObj.cwd)) : '';\n\n // Strip \"cd $CWD && \" from the start since we show cwd in the footer\n const cdPattern = /^cd\\s+[^\\s]+\\s+&&\\s+/;\n command = command.replace(cdPattern, '');\n\n // Extract tail value from command (e.g., \"| tail -5\" or \"| tail -n 5\")\n let maxStreamLines: number | undefined;\n const tailMatch = command.match(/\\|\\s*tail\\s+(?:-n\\s+)?(-?\\d+)\\s*$/);\n if (tailMatch) {\n maxStreamLines = Math.abs(parseInt(tailMatch[1]!, 10));\n }\n\n const timeoutSuffix = timeout ? theme.fg('muted', ` (timeout ${timeout}s)`) : '';\n const cwdSuffix = cwd ? theme.fg('muted', ` in ${cwd}`) : '';\n const timeSuffix = this.isPartial ? timeoutSuffix : this.getDurationSuffix();\n\n // Helper to render shell command with terminal-like bordered box\n const renderBorderedShell = (status: string, outputLines: string[]) => {\n const border = (char: string) => this.formatToolBorder(char);\n const footerPrompt = `${theme.bold(theme.fg('toolTitle', '$'))} `;\n const footerSuffix = `${cwdSuffix}${timeSuffix}${status}`;\n const termWidth = getTermWidth();\n const contentWidth = Math.max(20, termWidth - BOX_INDENT * 2 - 4); // Account for \"│ \" + \" │\"\n const horizontal = '─'.repeat(contentWidth + 2);\n const renderLine = (line: string, color: (value: string) => string = value => theme.fg('toolOutput', value)) => {\n const truncated = truncateAnsi(line, contentWidth);\n const padding = ' '.repeat(Math.max(0, contentWidth - visibleWidth(truncated)));\n return `${border('│')} ${color(truncated)}${padding} ${border('│')}`;\n };\n const displayOutput = outputLines.map(line => renderLine(line)).join('\\n');\n const hasOutput = displayOutput.trim() !== '';\n\n this.contentBox.addChild(new Text(`${border('╭')}${border(horizontal)}${border('╮')}`, 0, 0));\n if (hasOutput) {\n this.contentBox.addChild(new Text(displayOutput, 0, 0));\n this.contentBox.addChild(new Text(`${border('├')}${border(horizontal)}${border('┤')}`, 0, 0));\n }\n const footerWrapWidth = Math.max(1, contentWidth - 4);\n const footerLines = this.wrapQuietShellCommand(command, footerWrapWidth);\n const footerSuffixWidth = visibleWidth(footerSuffix);\n footerLines.forEach((footerLine, index) => {\n const prefix = index === 0 ? footerPrompt : ' ';\n const isLast = index === footerLines.length - 1;\n const suffixFits = isLast && visibleWidth(footerLine) + footerSuffixWidth <= footerWrapWidth;\n const suffix = suffixFits ? footerSuffix : '';\n this.contentBox.addChild(\n new Text(\n renderLine(`${prefix}${footerLine}${suffix}`, value => value),\n 0,\n 0,\n ),\n );\n });\n const lastFooterLine = footerLines[footerLines.length - 1] ?? '';\n if (visibleWidth(lastFooterLine) + footerSuffixWidth > footerWrapWidth) {\n this.contentBox.addChild(\n new Text(\n renderLine(` ${footerSuffix}`, value => value),\n 0,\n 0,\n ),\n );\n }\n this.contentBox.addChild(new Text(`${border('╰')}${border(horizontal)}${border('╯')}`, 0, 0));\n };\n\n if (!this.result || this.isPartial) {\n const status = this.getStatusIndicator();\n let lines = this.streamingOutput ? this.streamingOutput.split('\\n') : [];\n // Remove leading empty lines during streaming\n while (lines.length > 0 && lines[0] === '') {\n lines.shift();\n }\n // Remove trailing empty lines during streaming (from trailing newline)\n while (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n // Apply tail limit to streaming output to match final result\n if (maxStreamLines && lines.length > maxStreamLines) {\n lines = lines.slice(-maxStreamLines);\n }\n renderBorderedShell(status, this.limitQuietShellLines(lines));\n return;\n }\n\n // Helper to apply tail limit and clean up lines\n const prepareOutputLines = (output: string): string[] => {\n let lines = output.split('\\n');\n // Remove leading/trailing empty lines\n while (lines.length > 0 && lines[0] === '') {\n lines.shift();\n }\n while (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n // Apply tail limit to match streaming display\n if (maxStreamLines && lines.length > maxStreamLines) {\n lines = lines.slice(-maxStreamLines);\n }\n return lines;\n };\n\n // For errors, use bordered box with error status\n if (this.result.isError) {\n const status = theme.fg('error', ' ✗');\n const output = this.streamingOutput.trim() || this.getFormattedOutput();\n renderBorderedShell(status, this.limitQuietShellLines(prepareOutputLines(output)));\n return;\n }\n\n // Also check if output contains common error patterns\n const outputText = this.getFormattedOutput();\n const looksLikeError = outputText.match(\n /Error:|TypeError:|SyntaxError:|ReferenceError:|command not found|fatal:|error:/i,\n );\n if (looksLikeError) {\n const status = theme.fg('error', ' ✗');\n const output = this.streamingOutput.trim() || this.getFormattedOutput();\n renderBorderedShell(status, this.limitQuietShellLines(prepareOutputLines(output)));\n return;\n }\n\n // Success - use bordered box with checkmark\n const status = theme.fg('success', ' ✓');\n const output = this.streamingOutput.trim() || this.getFormattedOutput();\n {\n renderBorderedShell(status, this.limitQuietShellLines(prepareOutputLines(output)));\n }\n }\n\n private renderProcessToolEnhanced(): void {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const pid = argsObj?.pid ? Number(argsObj.pid) : 0;\n const isKill = this.toolName === MC_TOOLS.KILL_PROCESS;\n const isWait = !isKill && argsObj?.wait === true;\n\n const timeSuffix = this.isPartial ? '' : this.getDurationSuffix();\n const label = isKill ? 'kill' : isWait ? 'wait' : 'output';\n\n const renderBorderedProcess = (status: string, outputLines: string[]) => {\n const border = (char: string) => this.formatToolBorder(char);\n const footerText = `${theme.bold(theme.fg('toolTitle', label))} ${theme.fg('toolArgs', `PID ${pid}`)}${timeSuffix}${status}`;\n\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n const borderedLines = outputLines.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n const displayOutput = borderedLines.join('\\n');\n if (displayOutput.trim()) {\n this.contentBox.addChild(new Text(displayOutput, 0, 0));\n }\n\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n };\n\n const prepareOutputLines = (output: string): string[] => {\n let lines = output.split('\\n');\n while (lines.length > 0 && lines[0] === '') lines.shift();\n while (lines.length > 0 && lines[lines.length - 1] === '') lines.pop();\n return lines;\n };\n\n if (!this.result || this.isPartial) {\n const status = this.getStatusIndicator();\n let lines = this.streamingOutput ? this.streamingOutput.split('\\n') : [];\n while (lines.length > 0 && lines[0] === '') lines.shift();\n while (lines.length > 0 && lines[lines.length - 1] === '') lines.pop();\n renderBorderedProcess(status, lines);\n return;\n }\n\n const status = this.result.isError ? theme.fg('error', ' ✗') : theme.fg('success', ' ✓');\n const output = this.streamingOutput.trim() || this.getFormattedOutput();\n {\n renderBorderedProcess(status, prepareOutputLines(output));\n }\n }\n\n private renderEditToolEnhanced(): void {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const fullPath = argsObj?.path ? String(argsObj.path) : '';\n const startLineNum = argsObj?.start_line ? Number(argsObj.start_line) : undefined;\n const startLine = startLineNum ? `:${String(startLineNum)}` : '';\n\n // While streaming / pending — show diff preview if old_str + new_str available\n if (!this.result || this.isPartial) {\n const path = argsObj?.path ? shortenPath(String(argsObj.path)) : '...';\n const status = this.getStatusIndicator();\n const pathDisplay = fullPath\n ? fileLink(theme.fg('toolArgs', path), fullPath, startLineNum)\n : theme.fg('toolArgs', path);\n\n // If both old_str/old_string and new_str/new_string are available, show a bordered diff preview\n const oldStr = argsObj?.old_str ?? argsObj?.old_string;\n const newStr = argsObj?.new_str ?? argsObj?.new_string;\n if (oldStr != null && newStr != null) {\n const border = (char: string) => this.formatToolBorder(char);\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n const footerText = `${theme.bold(theme.fg('toolTitle', 'edit'))} ${pathDisplay}${theme.fg('muted', startLine)}${status}`;\n\n this.addLeadingPadding();\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n const { lines: diffLines } = this.generateDiffLines(String(oldStr), String(newStr));\n\n // While streaming, show the tail so new content scrolls in at the bottom\n const collapsedLines = this.getCollapsedLineLimit(15);\n const totalLines = diffLines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n let linesToShow = diffLines;\n let skippedAbove = 0;\n if (hasMore) {\n skippedAbove = totalLines - collapsedLines;\n linesToShow = diffLines.slice(-collapsedLines);\n }\n\n if (skippedAbove > 0) {\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${skippedAbove} lines above (ctrl+e to expand)`), 0, 0),\n );\n }\n\n const borderedLines = linesToShow.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n // No diff args yet — show bordered header\n const editBorder = (char: string) => this.formatToolBorder(char);\n const headerText = `${theme.bold(theme.fg('toolTitle', 'edit'))} ${pathDisplay}${theme.fg('muted', startLine)}${status}`;\n this.contentBox.addChild(new Text(editBorder('╭──'), 0, 0));\n this.contentBox.addChild(new Text(`${editBorder('╰──')} ${headerText}`, 0, 0));\n return;\n }\n\n const border = (char: string) => this.formatToolBorder(char);\n const status = this.getStatusIndicator();\n\n // Calculate available width for path and truncate from beginning if needed\n const termWidth = getTermWidth();\n const fixedParts = '╰── edit ' + startLine + ' ✓'; // approximate fixed width\n const availableForPath = termWidth - fixedParts.length - 6 - BOX_INDENT * 2; // buffer\n let path = argsObj?.path ? shortenPath(String(argsObj.path)) : '...';\n if (path.length > availableForPath && availableForPath > 10) {\n path = '…' + path.slice(-(availableForPath - 1));\n }\n\n const pathDisplay = fullPath\n ? fileLink(theme.fg('toolArgs', path), fullPath, startLineNum)\n : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'edit'))} ${pathDisplay}${theme.fg('muted', startLine)}${status}`;\n\n // Empty line padding above\n this.addLeadingPadding();\n\n // Top border\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n // For edits, show the diff\n const finalOldStr = argsObj?.old_str ?? argsObj?.old_string;\n const finalNewStr = argsObj?.new_str ?? argsObj?.new_string;\n if (finalOldStr != null && finalNewStr != null && !this.result.isError) {\n const { lines: diffLines, firstChangeIndex } = this.generateDiffLines(String(finalOldStr), String(finalNewStr));\n\n // Limit lines when collapsed, windowed around first change\n const collapsedLines = this.getCollapsedLineLimit(15);\n const totalLines = diffLines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n\n let linesToShow = diffLines;\n let skippedBefore = 0;\n if (hasMore) {\n // Show 3 context lines before the first change, rest after\n const contextBefore = 3;\n const start = Math.max(0, firstChangeIndex - contextBefore);\n linesToShow = diffLines.slice(start, start + collapsedLines);\n skippedBefore = start;\n }\n // Render diff lines with border, truncated to prevent wrap\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n\n // Show \"skipped above\" indicator\n if (skippedBefore > 0) {\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${skippedBefore} lines above`), 0, 0),\n );\n }\n\n const borderedLines = linesToShow.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n\n // Show truncation indicator\n if (hasMore) {\n const remaining = totalLines - (skippedBefore + linesToShow.length);\n if (remaining > 0) {\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${remaining} more lines (ctrl+e to expand)`), 0, 0),\n );\n }\n }\n } else if (this.result.isError) {\n // Show error output\n const output = this.getFormattedOutput();\n if (output) {\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n const lines = output.split('\\n').map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('error', truncated);\n });\n this.contentBox.addChild(new Text(lines.join('\\n'), 0, 0));\n }\n }\n\n // Bottom border with tool info\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n\n // LSP diagnostics below the box\n const diagnostics = this.parseLSPDiagnostics();\n if (diagnostics && !diagnostics.hasIssues) {\n this.contentBox.addChild(new Text(theme.fg('muted', ` ✓ No LSP issues`), 0, 0));\n } else if (diagnostics && diagnostics.hasIssues) {\n const COLLAPSED_DIAG_LINES = 3;\n const shouldCollapse = !this.expanded && diagnostics.entries.length > COLLAPSED_DIAG_LINES + 1;\n const maxDiags = shouldCollapse ? COLLAPSED_DIAG_LINES : diagnostics.entries.length;\n const entriesToShow = diagnostics.entries.slice(0, maxDiags);\n for (const diag of entriesToShow) {\n const t = theme.getTheme();\n const color = diag.severity === 'error' ? t.error : diag.severity === 'warning' ? t.warning : t.muted;\n const icon = diag.severity === 'error' ? '✗' : diag.severity === 'warning' ? '⚠' : 'ℹ';\n const location = diag.location ? chalk.hex(color)(diag.location) + ' ' : '';\n const line = ` ${chalk.hex(color)(icon)} ${location}${theme.fg('thinkingText', diag.message)}`;\n this.contentBox.addChild(new Text(line, 0, 0));\n }\n if (shouldCollapse) {\n const remaining = diagnostics.entries.length - COLLAPSED_DIAG_LINES;\n this.contentBox.addChild(\n new Text(\n theme.fg('muted', ` ... ${remaining} more diagnostic${remaining > 1 ? 's' : ''} (ctrl+e to expand)`),\n 0,\n 0,\n ),\n );\n }\n }\n }\n\n private parseLSPDiagnostics(): {\n hasIssues: boolean;\n entries: Array<{\n severity: 'error' | 'warning' | 'info' | 'hint';\n location: string;\n message: string;\n }>;\n } | null {\n const output = this.getFormattedOutput();\n const lspIdx = output.indexOf('LSP Diagnostics:');\n if (lspIdx === -1) return null;\n\n const lspText = output.slice(lspIdx + 'LSP Diagnostics:'.length);\n if (lspText.includes('No errors or warnings')) {\n return { hasIssues: false, entries: [] };\n }\n\n const entries: Array<{\n severity: 'error' | 'warning' | 'info' | 'hint';\n location: string;\n message: string;\n }> = [];\n let currentSeverity: 'error' | 'warning' | 'info' | 'hint' = 'error';\n\n for (const line of lspText.split('\\n')) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (trimmed === 'Errors:') {\n currentSeverity = 'error';\n } else if (trimmed === 'Warnings:') {\n currentSeverity = 'warning';\n } else if (trimmed === 'Info:') {\n currentSeverity = 'info';\n } else if (trimmed === 'Hints:') {\n currentSeverity = 'hint';\n } else {\n const match = trimmed.match(/^((?:.*:)?\\d+:\\d+)\\s*-\\s*(.+)$/);\n if (match) {\n entries.push({\n severity: currentSeverity,\n location: match[1]!,\n message: match[2]!,\n });\n }\n }\n }\n\n return { hasIssues: entries.length > 0, entries };\n }\n private generateDiffLines(oldStr: string, newStr: string): { lines: string[]; firstChangeIndex: number } {\n const oldLines = oldStr.split('\\n');\n const newLines = newStr.split('\\n');\n const lines: string[] = [];\n let firstChangeIndex = -1;\n\n // Use soft red for removed, green for added\n const removedColor = chalk.hex(mastra.red); // soft red\n const addedColor = chalk.hex(theme.getTheme().success); // soft green\n\n const maxLines = Math.max(oldLines.length, newLines.length);\n\n for (let i = 0; i < maxLines; i++) {\n if (i >= oldLines.length) {\n if (firstChangeIndex === -1) firstChangeIndex = lines.length;\n lines.push(addedColor(newLines[i]));\n } else if (i >= newLines.length) {\n if (firstChangeIndex === -1) firstChangeIndex = lines.length;\n lines.push(removedColor(oldLines[i]));\n } else if (oldLines[i] !== newLines[i]) {\n if (firstChangeIndex === -1) firstChangeIndex = lines.length;\n lines.push(removedColor(oldLines[i]!));\n lines.push(addedColor(newLines[i]!));\n } else {\n // Context line\n lines.push(theme.fg('muted', oldLines[i]!));\n }\n }\n\n return {\n lines,\n firstChangeIndex: firstChangeIndex === -1 ? 0 : firstChangeIndex,\n };\n }\n private renderWriteToolEnhanced(): void {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const fullPath = argsObj?.path ? String(argsObj.path) : '';\n const content = argsObj?.content ? String(argsObj.content) : '';\n\n // While streaming args (no result yet), show bordered box with content as it arrives\n if (!this.result || this.isPartial) {\n if (!content) {\n // No content yet — show bordered pending header\n const writeBorder = (char: string) => this.formatToolBorder(char);\n const path = argsObj?.path ? shortenPath(String(argsObj.path)) : '...';\n const status = this.getStatusIndicator();\n const pathDisplay = fullPath ? fileLink(theme.fg('toolArgs', path), fullPath) : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'write'))} ${pathDisplay}${status}`;\n this.contentBox.addChild(new Text(writeBorder('╭──'), 0, 0));\n this.contentBox.addChild(new Text(`${writeBorder('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n // Content is streaming in — show bordered box with syntax-highlighted preview\n const border = (char: string) => this.formatToolBorder(char);\n const status = this.getStatusIndicator();\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n\n let path = argsObj?.path ? shortenPath(String(argsObj.path)) : '...';\n const fixedParts = '╰── write ⋯';\n const availableForPath = termWidth - fixedParts.length - 6 - BOX_INDENT * 2;\n if (path.length > availableForPath && availableForPath > 10) {\n path = '…' + path.slice(-(availableForPath - 1));\n }\n const pathDisplay = fullPath ? fileLink(theme.fg('toolArgs', path), fullPath) : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'write'))} ${pathDisplay}${status}`;\n\n this.addLeadingPadding();\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n const highlighted = highlightCode(content, fullPath);\n let lines = highlighted.split('\\n');\n\n const collapsedLines = this.getCollapsedLineLimit(20);\n const totalLines = lines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n let skippedAbove = 0;\n if (hasMore) {\n skippedAbove = totalLines - collapsedLines;\n lines = lines.slice(-collapsedLines);\n }\n\n if (skippedAbove > 0) {\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${skippedAbove} lines above (ctrl+e to expand)`), 0, 0),\n );\n }\n\n const borderedLines = lines.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n // Complete — show final bordered result\n const border = (char: string) => this.formatToolBorder(char);\n const status = this.getStatusIndicator();\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n\n let path = argsObj?.path ? shortenPath(String(argsObj.path)) : '...';\n const fixedParts = '╰── write ✓';\n const availableForPath = termWidth - fixedParts.length - 6 - BOX_INDENT * 2;\n if (path.length > availableForPath && availableForPath > 10) {\n path = '…' + path.slice(-(availableForPath - 1));\n }\n const pathDisplay = fullPath ? fileLink(theme.fg('toolArgs', path), fullPath) : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'write'))} ${pathDisplay}${status}`;\n\n this.addLeadingPadding();\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n if (this.result.isError) {\n const output = this.getFormattedOutput();\n if (output) {\n const lines = output.split('\\n').map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('error', truncated);\n });\n this.contentBox.addChild(new Text(lines.join('\\n'), 0, 0));\n }\n } else if (content) {\n const highlighted = highlightCode(content, fullPath);\n let lines = highlighted.split('\\n');\n\n const collapsedLines = this.getCollapsedLineLimit(20);\n const totalLines = lines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n let skippedAbove = 0;\n if (hasMore) {\n skippedAbove = totalLines - collapsedLines;\n lines = lines.slice(-collapsedLines);\n }\n\n if (skippedAbove > 0) {\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${skippedAbove} lines above (ctrl+e to expand)`), 0, 0),\n );\n }\n\n const borderedLines = lines.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n }\n\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n }\n private renderListFilesEnhanced(): void {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const fullPath = argsObj?.path ? String(argsObj.path) : '';\n const path = argsObj?.path ? shortenPath(String(argsObj.path)) : '/';\n const pattern = argsObj?.pattern ? String(argsObj.pattern) : '';\n const patternDisplay = pattern ? ' ' + theme.fg('muted', pattern) : '';\n const border = (char: string) => this.formatToolBorder(char);\n const status = this.getStatusIndicator();\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n\n if (!this.result || this.isPartial) {\n const pathDisplay = fullPath ? fileLink(theme.fg('toolArgs', path), fullPath) : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'list'))} ${pathDisplay}${patternDisplay}${status}`;\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n const output = this.getFormattedOutput();\n if (output) {\n // Extract summary line (e.g. \"5 directories, 9 files\") from tree output for the footer\n let lines = output.split('\\n');\n const lastLine = lines[lines.length - 1]?.trim() || '';\n const summaryMatch = lastLine.match(/^\\d+\\s+directories?,\\s+\\d+\\s+files?$/);\n const summaryDisplay = summaryMatch ? ' ' + theme.fg('muted', lastLine) : '';\n // Remove the summary line from content if it matched\n if (summaryMatch) {\n lines = lines.slice(0, -1);\n }\n\n const collapsedLines = this.getCollapsedLineLimit(15);\n const totalLines = lines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n let skippedAbove = 0;\n if (hasMore) {\n skippedAbove = totalLines - collapsedLines;\n lines = lines.slice(-collapsedLines);\n }\n\n const pathDisplay = fullPath ? fileLink(theme.fg('toolArgs', path), fullPath) : theme.fg('toolArgs', path);\n const footerText = `${theme.bold(theme.fg('toolTitle', 'list'))} ${pathDisplay}${patternDisplay}${summaryDisplay}${status}`;\n\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n if (skippedAbove > 0) {\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${skippedAbove} lines above (ctrl+e to expand)`), 0, 0),\n );\n }\n\n const borderedLines = lines.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n }\n }\n\n private renderLspInspectEnhanced(): void {\n const border = (char: string) => this.formatToolBorder(char);\n const status = this.getStatusIndicator();\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n const argsObj = this.args as { path?: string; line?: number; match?: string } | undefined;\n const path_ = argsObj?.path;\n const line = argsObj?.line;\n const match = argsObj?.match;\n\n // Build args summary for footer\n const argsSummary = [\n path_ ? shortenPath(path_.replace(process.cwd() + '/', '')) : null,\n line ? `L${line}` : null,\n match ? truncateAnsi(match.replace(/<<</g, '‹‹‹'), 40) : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n if (!this.result || this.isPartial) {\n const footerText = `${theme.bold(theme.fg('toolTitle', 'lsp_inspect'))}${argsSummary ? ' ' + theme.fg('toolArgs', argsSummary) : ''}${status}`;\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n // Extract raw text from result\n const rawText = this.result.content\n .filter(c => c.type === 'text' && c.text)\n .map(c => c.text!)\n .join('\\n');\n\n if (this.result.isError || !rawText.trim()) {\n const footerText = `${theme.bold(theme.fg('toolTitle', 'lsp_inspect'))}${argsSummary ? ' ' + theme.fg('toolArgs', argsSummary) : ''}${status}`;\n const output = this.getFormattedOutput();\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n if (output) {\n this.contentBox.addChild(new Text(border('│') + ' ' + theme.fg('error', output), 0, 0));\n }\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n // Parse lsp_inspect result\n let parsed: {\n hover?: { value: string; kind: string };\n diagnostics?: Array<{ severity: string; message: string; source: string | null }>;\n definition?: Array<{ location: string; preview: string | null }>;\n implementation?: string[];\n error?: string;\n };\n try {\n parsed = JSON.parse(rawText);\n } catch {\n // Fall back to generic rendering if not valid JSON\n this.renderGenericToolEnhanced();\n return;\n }\n\n if (parsed.error) {\n const footerText = `${theme.bold(theme.fg('toolTitle', 'lsp_inspect'))}${argsSummary ? ' ' + theme.fg('toolArgs', argsSummary) : ''}${status}`;\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n this.contentBox.addChild(new Text(border('│') + ' ' + theme.fg('error', parsed.error), 0, 0));\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n const footerText = `${theme.bold(theme.fg('toolTitle', 'lsp_inspect'))}${argsSummary ? ' ' + theme.fg('toolArgs', argsSummary) : ''}${status}`;\n\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n // Render hover content\n if (parsed.hover) {\n const hoverValue = parsed.hover.value || '';\n const hoverLines = hoverValue.split('\\n').filter(line => line.trim() !== '');\n if (hoverLines.length > 0) {\n this.contentBox.addChild(new Text(border('│') + ' ' + theme.fg('toolArgs', 'hover:'), 0, 0));\n }\n for (const line of hoverLines) {\n const truncated = truncateAnsi(line, maxLineWidth - 2);\n const prefix = border('│') + ' ';\n this.contentBox.addChild(new Text(prefix + theme.fg('text', truncated), 0, 0));\n }\n }\n\n // Render line diagnostics\n if (parsed.diagnostics && parsed.diagnostics.length > 0) {\n this.contentBox.addChild(new Text(border('│'), 0, 0));\n this.contentBox.addChild(new Text(border('│') + ' ' + theme.fg('toolArgs', 'diagnostics:'), 0, 0));\n\n for (const diagnostic of parsed.diagnostics) {\n const label = diagnostic.source ? `${diagnostic.severity} (${diagnostic.source})` : diagnostic.severity;\n const diagLine = `${label}: ${diagnostic.message}`;\n this.contentBox.addChild(\n new Text(\n border('│') +\n ' ' +\n theme.fg(diagnostic.severity === 'error' ? 'error' : 'text', truncateAnsi(diagLine, maxLineWidth - 2)),\n 0,\n 0,\n ),\n );\n }\n }\n\n // Render definition entries\n if (parsed.definition && parsed.definition.length > 0) {\n // Add blank line before definition section for visual separation\n this.contentBox.addChild(new Text(border('│'), 0, 0));\n this.contentBox.addChild(new Text(border('│') + ' ' + theme.fg('toolArgs', 'definition:'), 0, 0));\n\n for (const def of parsed.definition) {\n const location = def.location || '';\n const preview = def.preview || '';\n // Parse location: \"$cwd/path:Lline:Cchar\" or just \"path:Lline:Cchar\"\n const parsedLoc = this.parseLspLocation(location);\n const displayLoc = parsedLoc\n ? fileLink(\n theme.fg('toolOutput', parsedLoc.shortPath + ':' + parsedLoc.lineCol),\n parsedLoc.absPath,\n parsedLoc.line,\n )\n : theme.fg('toolOutput', location);\n\n const defLine = border('│') + ' ' + displayLoc;\n this.contentBox.addChild(new Text(truncateAnsi(defLine, maxLineWidth), 0, 0));\n\n if (preview) {\n const previewLine = border('│') + ' ' + theme.fg('text', truncateAnsi(preview, maxLineWidth - 3));\n this.contentBox.addChild(new Text(previewLine, 0, 0));\n }\n }\n }\n\n // Render implementation entries\n if (parsed.implementation && parsed.implementation.length > 0) {\n const implCount = parsed.implementation.length;\n const implLabel = implCount === 1 ? 'implementation:' : `implementations (${implCount}):`;\n\n // Add blank line before implementation section for visual separation\n this.contentBox.addChild(new Text(border('│'), 0, 0));\n\n // Show first few implementations inline, collapse rest\n const maxShow = this.expanded ? parsed.implementation.length : 5;\n const shown = parsed.implementation.slice(0, maxShow);\n const remaining = parsed.implementation.length - maxShow;\n\n this.contentBox.addChild(new Text(border('│') + ' ' + theme.fg('toolArgs', implLabel), 0, 0));\n\n for (const loc of shown) {\n const parsedLoc = this.parseLspLocation(loc);\n const displayLoc = parsedLoc\n ? fileLink(\n theme.fg('toolOutput', parsedLoc.shortPath + ':' + parsedLoc.lineCol),\n parsedLoc.absPath,\n parsedLoc.line,\n )\n : theme.fg('toolOutput', loc);\n const implLine = border('│') + ' ' + displayLoc;\n this.contentBox.addChild(new Text(truncateAnsi(implLine, maxLineWidth), 0, 0));\n }\n\n if (remaining > 0 && !this.expanded) {\n const moreLine = border('│') + ' ' + theme.fg('toolOutput', `... ${remaining} more (ctrl+e to expand)`);\n this.contentBox.addChild(new Text(moreLine, 0, 0));\n }\n }\n\n // Show message if no results found\n if (!parsed.hover && !parsed.diagnostics?.length && !parsed.definition?.length && !parsed.implementation?.length) {\n this.contentBox.addChild(\n new Text(\n border('│') + ' ' + theme.fg('muted', 'No hover, diagnostics, definition, or implementation results'),\n 0,\n 0,\n ),\n );\n }\n\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n }\n\n /**\n * Parse an LSP location string like \"$cwd/path:Lline:Cchar\" into components.\n */\n private parseLspLocation(\n location: string,\n ): { absPath: string; shortPath: string; line: number; lineCol: string } | null {\n // Match patterns like:\n // - \"$cwd/packages/core/src/foo.ts:L10:C5\"\n // - \"/absolute/path/to/file.ts:L1:C1\"\n // - \"path/to/file.ts:L10:C5\"\n const match = location.match(/^(.+?):L(\\d+):C(\\d+)$/);\n if (!match) return null;\n\n const rawPath = match[1]!;\n const line = parseInt(match[2]!, 10);\n const lineCol = `L${match[2]}:C${match[3]}`;\n\n // Resolve to absolute path\n let absPath: string;\n let shortPath: string;\n if (rawPath.startsWith('$cwd/')) {\n absPath = process.cwd() + '/' + rawPath.slice(5);\n shortPath = rawPath.slice(5); // Strip $cwd/ prefix\n } else if (rawPath.startsWith('~')) {\n absPath = os.homedir() + rawPath.slice(1);\n shortPath = shortenPath(absPath);\n } else if (rawPath.startsWith('/')) {\n absPath = rawPath;\n shortPath = absPath.startsWith(process.cwd() + '/')\n ? absPath.slice(process.cwd().length + 1)\n : shortenPath(absPath);\n } else {\n absPath = process.cwd() + '/' + rawPath;\n shortPath = rawPath;\n }\n\n return { absPath, shortPath, line, lineCol };\n }\n\n private renderTaskWriteEnhanced(): void {\n const argsObj = this.args as { tasks?: TaskItemInput[] } | undefined;\n const tasks = argsObj?.tasks;\n const status = this.getStatusIndicator();\n const border = (char: string) => this.formatToolBorder(char);\n\n // Show a compact bordered header — the pinned TaskProgressComponent handles live rendering\n const count = tasks?.length ?? 0;\n const countSuffix = count > 0 ? theme.fg('muted', ` (${count} tasks)`) : '';\n const footerText = `${theme.bold(theme.fg('toolTitle', 'task_write'))}${countSuffix}${status}`;\n\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n // Surface error details when the tool call fails\n if (!this.isPartial && this.result?.isError) {\n const output = this.getFormattedOutput();\n if (output) {\n this.contentBox.addChild(new Text(border('│') + ' ' + theme.fg('error', output), 0, 0));\n }\n }\n\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n }\n\n private renderWebSearchEnhanced(): void {\n const argsObj = this.args as Record<string, unknown> | undefined;\n const action = argsObj?.action as Record<string, unknown> | undefined;\n let query = argsObj?.query ? String(argsObj.query) : action?.query ? String(action.query) : '';\n // Fallback: extract query from result content (OpenAI format: { action: { query } })\n if (!query && this.result) {\n try {\n const raw = this.getFormattedOutput();\n const parsed = JSON.parse(raw);\n if (parsed?.action?.query) query = String(parsed.action.query);\n } catch {\n /* ignore */\n }\n }\n const status = this.getStatusIndicator();\n\n const queryDisplay = query ? ` ${theme.fg('toolArgs', `\"${query}\"`)}` : '';\n const footerText = `${theme.bold(theme.fg('toolTitle', 'web_search'))}${queryDisplay}${status}`;\n const border = (char: string) => this.formatToolBorder(char);\n\n if (!this.result || this.isPartial) {\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n if (this.result.isError) {\n this.renderErrorResult(footerText);\n return;\n }\n\n // Parse search results and format as a clean list of titles + URLs\n const output = this.formatWebSearchResults();\n if (output) {\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n\n // Empty line padding above\n this.addLeadingPadding();\n\n // Top border\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n let lines = output.split('\\n');\n\n // Limit lines when collapsed\n const collapsedLines = this.getCollapsedLineLimit(10);\n const totalLines = lines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n\n if (hasMore) {\n lines = lines.slice(0, collapsedLines);\n }\n\n const borderedLines = lines.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n\n // Show truncation indicator\n if (hasMore) {\n const remaining = totalLines - collapsedLines;\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${remaining} more lines (ctrl+e to expand)`), 0, 0),\n );\n }\n\n // Bottom border with tool info\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n } else {\n this.contentBox.addChild(new Text(footerText, 0, 0));\n }\n }\n\n /**\n * Format web search results as a clean list of titles + URLs.\n * Handles both Anthropic provider results (JSON array with encryptedContent)\n * and Tavily results (markdown-formatted text).\n */\n private formatWebSearchResults(): string {\n const raw = this.getFormattedOutput();\n if (!raw) return '';\n\n // Try to parse as JSON\n try {\n const parsed = JSON.parse(raw);\n\n // Anthropic provider format: JSON array of { url, title, pageAge, ... }\n if (Array.isArray(parsed)) {\n const lines: string[] = [];\n for (const item of parsed) {\n if (typeof item !== 'object' || item === null) continue;\n const url = typeof item.url === 'string' ? item.url : '';\n if (!url) continue;\n const title = typeof item.title === 'string' && item.title ? item.title : '';\n const age = typeof item.pageAge === 'string' && item.pageAge ? theme.fg('muted', ` (${item.pageAge})`) : '';\n if (title) {\n lines.push(` ${theme.fg('toolOutput', title)}${age}`);\n lines.push(` ${theme.fg('muted', url)}`);\n } else {\n lines.push(` ${theme.fg('toolOutput', url)}${age}`);\n }\n }\n if (lines.length > 0) return lines.join('\\n');\n\n // Parsed as JSON array but couldn't extract results — strip encryptedContent\n // before falling through, so we never dump huge base64 blobs to the terminal\n const stripped = parsed.map((item: unknown) => {\n if (typeof item !== 'object' || item === null) return item;\n const { encryptedContent, ...rest } = item as Record<string, unknown>;\n return rest;\n });\n return JSON.stringify(stripped, null, 2);\n }\n\n // OpenAI provider format: { action: { query }, sources: [{ url, title }, ...] }\n if (typeof parsed === 'object' && parsed !== null && Array.isArray(parsed.sources)) {\n const lines: string[] = [];\n for (const source of parsed.sources) {\n if (typeof source !== 'object' || source === null) continue;\n const url = typeof source.url === 'string' ? source.url : '';\n if (!url) continue;\n const title = typeof source.title === 'string' && source.title ? source.title : '';\n if (title) {\n lines.push(` ${theme.fg('toolOutput', title)}`);\n lines.push(` ${theme.fg('muted', url)}`);\n } else {\n lines.push(` ${theme.fg('toolOutput', url)}`);\n }\n }\n if (lines.length > 0) return lines.join('\\n');\n }\n } catch {\n // Not JSON — fall through to raw text (Tavily format)\n }\n\n // Not JSON (e.g. Tavily format) — already readable text, return as-is\n return raw;\n }\n\n private renderGenericToolEnhanced(): void {\n const border = (char: string) => this.formatToolBorder(char);\n const status = this.getStatusIndicator();\n\n const argsSummary = this.formatArgsSummary();\n\n const footerText = `${theme.bold(theme.fg('toolTitle', this.toolName))}${argsSummary}${status}`;\n\n if (!this.result || this.isPartial) {\n // Pending: show bordered header with args preview\n const preview = this.formatArgsPreview();\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n if (preview.length > 0) {\n const previewLines = preview.map(line => border('│') + ' ' + theme.fg('toolOutput', line));\n this.contentBox.addChild(new Text(previewLines.join('\\n'), 0, 0));\n }\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n return;\n }\n\n // Use enhanced error display for errors\n if (this.result.isError) {\n this.renderErrorResult(footerText);\n return;\n }\n\n const output = this.getFormattedOutput();\n if (output) {\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2;\n\n // Empty line padding above\n this.addLeadingPadding();\n\n // Top border\n this.contentBox.addChild(new Text(border('╭──'), 0, 0));\n\n let lines = output.split('\\n');\n const collapsedLines = this.getCollapsedLineLimit(10);\n const totalLines = lines.length;\n const hasMore = !this.expanded && totalLines > collapsedLines + 1;\n\n if (hasMore) {\n lines = lines.slice(0, collapsedLines);\n }\n\n const borderedLines = lines.map(line => {\n const truncated = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + theme.fg('toolOutput', truncated);\n });\n this.contentBox.addChild(new Text(borderedLines.join('\\n'), 0, 0));\n\n if (hasMore) {\n const remaining = totalLines - collapsedLines;\n this.contentBox.addChild(\n new Text(border('│') + ' ' + theme.fg('muted', `... ${remaining} more lines (ctrl+e to expand)`), 0, 0),\n );\n }\n\n // Bottom border with tool info\n this.contentBox.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n } else {\n // No output - just show the footer line\n this.contentBox.addChild(new Text(footerText, 0, 0));\n }\n }\n\n /**\n * Format a compact args preview as key=\"value\" pairs.\n * Long values are truncated, multiline values show first line + count.\n * Returns an array of formatted lines.\n */\n private formatArgsPreview(maxLines = 4, maxValueLen = 60): string[] {\n if (!this.args || typeof this.args !== 'object') return [];\n const argsObj = this.args as Record<string, unknown>;\n const keys = Object.keys(argsObj);\n if (keys.length === 0) return [];\n\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 4 - BOX_INDENT * 2 - 2; // -2 for \"│ \" border prefix\n const lines: string[] = [];\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]!;\n if (lines.length >= maxLines) {\n const remaining = keys.length - i;\n lines.push(theme.fg('muted', ` ... ${remaining} more`));\n break;\n }\n const raw = argsObj[key];\n let val: string;\n if (typeof raw === 'string') {\n const strLines = raw.split('\\n');\n if (strLines.length > 1) {\n val = strLines[0]!.slice(0, maxValueLen) + theme.fg('muted', ` (${strLines.length} lines)`);\n } else {\n val = raw.length > maxValueLen ? raw.slice(0, maxValueLen) + '…' : raw;\n }\n val = `\"${val}\"`;\n } else if (raw === undefined) {\n continue;\n } else if (Array.isArray(raw)) {\n val = `[${raw.length} items]`;\n } else if (typeof raw === 'object' && raw !== null) {\n const objKeys = Object.keys(raw as Record<string, unknown>);\n val = `{${objKeys.slice(0, 3).join(', ')}${objKeys.length > 3 ? ', …' : ''}}`;\n } else {\n val = String(raw);\n }\n const line = truncateAnsi(` ${theme.fg('muted', key + '=')}${val}`, maxLineWidth);\n lines.push(line);\n }\n return lines;\n }\n\n private formatPlainArgsSummary(): string {\n return this.stripAnsi(this.formatArgsSummary());\n }\n\n /**\n * Compact inline args summary for the footer line.\n * Shows key=value pairs truncated to fit on one line.\n */\n private formatArgsSummary(): string {\n if (!this.args || typeof this.args !== 'object') return '';\n const argsObj = this.args as Record<string, unknown>;\n const entries = Object.entries(argsObj).filter(([, v]) => v !== undefined);\n if (entries.length === 0) return '';\n\n const termWidth = getTermWidth();\n // Leave room for tool name, status indicator, borders\n const maxLen = Math.max(20, termWidth - this.toolName.length - 15 - BOX_INDENT * 2);\n const parts: string[] = [];\n let currentLen = 0;\n\n for (const [key, raw] of entries) {\n let val: string;\n if (typeof raw === 'string') {\n const firstLine = raw.split('\\n')[0]!;\n val = firstLine.length > 40 ? firstLine.slice(0, 40) + '…' : firstLine;\n val = `\"${val}\"`;\n } else if (Array.isArray(raw)) {\n val = `[${raw.length}]`;\n } else if (typeof raw === 'object' && raw !== null) {\n val = '{…}';\n } else {\n val = String(raw);\n }\n const part = `${key}=${val}`;\n if (currentLen + part.length + 2 > maxLen && parts.length > 0) {\n parts.push('…');\n break;\n }\n parts.push(part);\n currentLen += part.length + 2;\n }\n\n return ' ' + theme.fg('toolArgs', parts.join(', '));\n }\n\n private getStatusIndicator(): string {\n return this.isPartial\n ? theme.fg('muted', ' ⋯')\n : this.isErrorResult()\n ? theme.fg('error', ' ✗')\n : theme.fg('success', ' ✓');\n }\n\n private getDurationSuffix(): string {\n if (this.isPartial) return '';\n const ms = Date.now() - this.startTime;\n if (ms < 1000) return theme.fg('muted', ` ${ms}ms`);\n return theme.fg('muted', ` ${(ms / 1000).toFixed(1)}s`);\n }\n\n private getFormattedOutput(): string {\n if (!this.result) return '';\n\n const textContent = this.result.content\n .filter(c => c.type === 'text' && c.text)\n .map(c => c.text!)\n .join('\\n');\n\n if (!textContent) return '';\n\n const { content } = extractContent(textContent);\n // Remove excessive blank lines while preserving intentional formatting\n return content.trim().replace(/\\n\\s*\\n\\s*\\n/g, '\\n\\n');\n }\n\n /**\n * Render an error result using the enhanced error display component\n */\n private renderErrorResult(header: string): void {\n if (!this.result) return;\n\n // First add the header\n this.contentBox.addChild(new Text(header, 0, 0));\n\n // Extract error text from result\n const errorText = this.result.content\n .filter(c => c.type === 'text' && c.text)\n .map(c => c.text!)\n .join('\\n');\n\n if (!errorText) return;\n\n // Check if this is a validation error\n const isValidationError =\n errorText.toLowerCase().includes('validation') ||\n errorText.toLowerCase().includes('required parameter') ||\n errorText.toLowerCase().includes('missing required') ||\n errorText.match(/at \"\\w+\"/i) || // Zod-style errors\n (errorText.includes('Expected') && errorText.includes('Received'));\n\n if (isValidationError) {\n // Use specialized validation error component\n const validationErrors = parseValidationErrors(errorText);\n const validationDisplay = new ToolValidationErrorComponent(\n {\n toolName: this.toolName,\n errors: validationErrors,\n args: this.args,\n },\n this.ui,\n );\n this.contentBox.addChild(validationDisplay);\n return;\n }\n\n // Try to parse as an error object\n let error: Error | string = errorText;\n try {\n const { content } = extractContent(errorText);\n error = content;\n const parsed = parseErrorFromContent(content);\n if (parsed) error = parsed;\n } catch {\n // Keep as string\n }\n\n // Create error display component\n const errorDisplay = new ErrorDisplayComponent(\n error,\n {\n showStack: true,\n showContext: true,\n expanded: this.expanded,\n },\n this.ui,\n );\n\n this.contentBox.addChild(errorDisplay);\n }\n}\n\n/** Map file extensions to highlight.js language names */\nfunction getLanguageFromPath(path: string): string | undefined {\n const ext = path.split('.').pop()?.toLowerCase();\n const langMap: Record<string, string> = {\n ts: 'typescript',\n tsx: 'typescript',\n js: 'javascript',\n jsx: 'javascript',\n mjs: 'javascript',\n cjs: 'javascript',\n json: 'json',\n md: 'markdown',\n py: 'python',\n rb: 'ruby',\n rs: 'rust',\n go: 'go',\n java: 'java',\n kt: 'kotlin',\n swift: 'swift',\n c: 'c',\n cpp: 'cpp',\n h: 'c',\n hpp: 'cpp',\n cs: 'csharp',\n php: 'php',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n fish: 'bash',\n yml: 'yaml',\n yaml: 'yaml',\n toml: 'ini',\n ini: 'ini',\n xml: 'xml',\n html: 'html',\n htm: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'scss',\n less: 'less',\n sql: 'sql',\n graphql: 'graphql',\n gql: 'graphql',\n dockerfile: 'dockerfile',\n makefile: 'makefile',\n cmake: 'cmake',\n vue: 'vue',\n svelte: 'xml',\n };\n return ext ? langMap[ext] : undefined;\n}\n\n/** Strip line number formatting (cat -n or workspace →) from view-style output */\nfunction getPlainCodeFromViewOutput(content: string, startLine?: number): string {\n let lines = content.split('\\n').map(line => line.trimEnd());\n // Remove known headers:\n // - \"[Truncated N tokens]\" from token truncation\n // - \"Here's the result of running `cat -n`...\" from view tool\n // - \"/path/to/file (NNN bytes)\" or \"/path/to/file (lines N-M of T, NNN bytes)\" from workspace read_file\n while (\n lines.length > 0 &&\n (lines[0]!.includes(\"Here's the result of running\") ||\n lines[0]!.match(/^\\[Truncated \\d+ tokens\\]$/) ||\n lines[0]!.match(/^.*\\(\\d+ bytes\\)$/) ||\n lines[0]!.match(/^.*\\(lines \\d+-\\d+ of \\d+, \\d+ bytes\\)$/))\n ) {\n lines = lines.slice(1);\n }\n\n // Strip line numbers - we know they're sequential starting from startLine\n // Supports two formats:\n // view tool: \" 123\\tcode\" (tab separator)\n // workspace read_file: \" 123→code\" (arrow separator)\n // Separator is optional because trimEnd() strips trailing tabs on blank lines\n let expectedLineNum = startLine ?? 1;\n const codeLines = lines.map(line => {\n const numStr = String(expectedLineNum);\n const match = line.match(/^(\\s*)(\\d+)[\\t→]?(.*)$/);\n if (match && match[2] === numStr) {\n expectedLineNum++;\n return match[3]; // Return just the code part after the separator\n }\n return line;\n });\n\n // Remove trailing empty lines\n while (codeLines.length > 0 && codeLines[codeLines.length - 1] === '') {\n codeLines.pop();\n }\n\n return codeLines.join('\\n');\n}\n\n/** Strip line number formatting (cat -n or workspace →) and apply syntax highlighting */\nfunction highlightCode(content: string, path: string, startLine?: number): string {\n const code = getPlainCodeFromViewOutput(content, startLine);\n try {\n return highlight(code, {\n language: getLanguageFromPath(path),\n ignoreIllegals: true,\n theme: CODE_HIGHLIGHT_THEME,\n });\n } catch {\n return code;\n }\n}\n/** Parse a `Name: message\\n at ...` error string into an Error object.\n * Returns null if the content does not look like a JavaScript Error.\n * Preserves the behaviour of the original `/^([A-Z][a-zA-Z]*Error):\\s*(.+)$/m`\n * pattern (same captures for well-formed inputs) while using bounded\n * quantifiers and `[ \\t]` separators to avoid the polynomial backtracking\n * CodeQL flagged on pathological inputs.\n * Exported for unit testing.\n */\nexport function parseErrorFromContent(content: string): Error | null {\n const errorMatch = content.match(/^([A-Z][A-Za-z]{0,64}Error):[ \\t]*(.{1,8192})$/m);\n if (!errorMatch) return null;\n const err = new Error(errorMatch[2]!);\n err.name = errorMatch[1]!;\n // Stack frames are always space/tab-indented — never vertical whitespace.\n const stackMatch = content.match(/\\n[ \\t]+at[ \\t]+.+/g);\n if (stackMatch) {\n err.stack = `${err.name}: ${err.message}\\n${stackMatch.join('\\n')}`;\n }\n return err;\n}\n","/**\n * Component that renders a user message with a thin border that fits the content.\n */\n\nimport { Container, Markdown, Text, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';\nimport type { MarkdownTheme } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT_STR, getMarkdownTheme, mastra, tintHex, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\n/**\n * Strip ANSI escape sequences from a string.\n */\nfunction stripAnsi(s: string): string {\n return s.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\n/**\n * A renderable wrapper that adds a thin box-drawing border sized to content.\n */\nclass BorderedBox {\n private child: { render(width: number): string[]; invalidate?(): void };\n private pending: boolean;\n private borderColor?: string;\n private label?: string;\n\n constructor(\n child: { render(width: number): string[]; invalidate?(): void },\n options: { pending?: boolean; borderColor?: string; label?: string } = {},\n ) {\n this.child = child;\n this.pending = options.pending ?? false;\n this.borderColor = options.borderColor;\n this.label = options.label;\n }\n\n invalidate() {\n this.child.invalidate?.();\n }\n\n render(width: number): string[] {\n const borderColor = (s: string) =>\n this.borderColor\n ? chalk.hex(this.borderColor)(s)\n : this.pending\n ? chalk.hex(theme.getTheme().dim)(s)\n : chalk.hex(tintHex(mastra.green, 1))(s);\n\n // Border uses 4 chars: \"│ \" (2) on left + \" │\" (2) on right\n // Plus 2 for the \"› \" prompt prefix on the first line\n // Plus BOX_INDENT_STR.length for the left indent\n // Use the tightest constraint (first line with prompt) for Markdown width\n const maxInnerWidth = Math.max(1, width - 6 - 2 - BOX_INDENT_STR.length - 1);\n const childLines = this.child.render(maxInnerWidth);\n\n if (childLines.length === 0) {\n return [];\n }\n\n // Trim trailing whitespace padding that Markdown adds, and measure true content width\n const trimmedLines: string[] = [];\n let maxContentWidth = 0;\n for (const line of childLines) {\n // Markdown appends plain spaces to pad to full width — trim them\n const trimmed = line.replace(/\\s+$/, '');\n trimmedLines.push(trimmed);\n const w = visibleWidth(stripAnsi(trimmed));\n if (w > maxContentWidth) maxContentWidth = w;\n }\n\n // Cap content width so the box never exceeds the render width\n const maxAllowedContent = maxInnerWidth;\n maxContentWidth = Math.min(maxContentWidth, maxAllowedContent);\n\n // Box inner width = content width + prompt prefix (the \"│ \" and \" │\" add the padding)\n let boxInner = maxContentWidth + 2;\n // When a label is present, ensure the box is wide enough so the top border\n // (╭ label ──...──╮) doesn't exceed the content/bottom border width.\n if (this.label) {\n const labelOverhead = ` ${this.label} `.length + 2; // ╭ + label + ╮\n const neededBoxWidth = Math.max(boxInner + 4, labelOverhead);\n boxInner = neededBoxWidth - 4;\n }\n // Total box width: \"│\" + \" \" + content + \" \" + \"│\" = boxInner + 4\n const boxWidth = boxInner + 4;\n\n const lines: string[] = [];\n\n const promptPrefix = chalk.hex(tintHex(mastra.green, 1))('»') + ' ';\n const promptWidth = 2;\n\n // Top border: ╭──...──╮ or ╭ label ──...──╮\n if (this.label) {\n const labelText = ` ${this.label} `;\n const labelLen = labelText.length;\n const remaining = Math.max(0, boxWidth - 2 - labelLen);\n lines.push(\n borderColor('╭') + chalk.hex(theme.getTheme().dim)(labelText) + borderColor(`${'─'.repeat(remaining)}╮`),\n );\n } else {\n lines.push(borderColor(`╭${'─'.repeat(boxWidth - 2)}╮`));\n }\n\n // Content lines with side borders, first line gets \"> \" prefix\n for (let i = 0; i < trimmedLines.length; i++) {\n let trimmed = trimmedLines[i]!;\n let vis = visibleWidth(stripAnsi(trimmed));\n // Truncate content that exceeds the available inner width\n const lineMaxWidth = i === 0 ? boxInner - promptWidth : boxInner;\n if (vis > lineMaxWidth) {\n trimmed = truncateToWidth(trimmed, lineMaxWidth);\n vis = visibleWidth(stripAnsi(trimmed));\n }\n if (i === 0) {\n const padNeeded = Math.max(0, boxInner - vis - promptWidth);\n lines.push(borderColor('│') + ' ' + promptPrefix + trimmed + ' '.repeat(padNeeded) + ' ' + borderColor('│'));\n } else {\n const padNeeded = Math.max(0, boxInner - vis);\n lines.push(borderColor('│') + ' ' + trimmed + ' '.repeat(padNeeded) + ' ' + borderColor('│'));\n }\n }\n\n // Bottom border: ╰──...──╯\n lines.push(borderColor(`╰${'─'.repeat(boxWidth - 2)}╯`));\n\n return lines.map(l => BOX_INDENT_STR + l);\n }\n}\n\nexport class UserMessageComponent extends Container {\n constructor(\n text: string,\n markdownTheme: MarkdownTheme = getMarkdownTheme(),\n options: { pending?: boolean; borderColor?: string; label?: string } = {},\n ) {\n super();\n\n const md = new Markdown(text, 0, 0, markdownTheme, {\n color: (text: string) => (options.pending ? theme.fg('dim', text) : theme.fg('text', text)),\n italic: false,\n });\n\n this.addChild(\n new BorderedBox(md, { pending: options.pending, borderColor: options.borderColor, label: options.label }),\n );\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'user-message';\n }\n}\n\nexport class PendingUserMessageComponent extends Container {\n constructor(text: string, imageCount = 0) {\n super();\n\n const prefix = imageCount > 0 ? `[${imageCount} image${imageCount > 1 ? 's' : ''}] ` : '';\n const displayText = `${prefix}${text.replace(/\\[image\\]\\s*/g, '').trim()}`.trim();\n this.addChild(new Text(theme.fg('dim', `↳ ${displayText || 'Message'} pending…`), BOX_INDENT_STR.length, 0));\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'user-message';\n }\n}\n","/**\n * Tool approval dialog component.\n * Shows tool details and prompts user to approve or decline execution.\n *\n * Keyboard shortcuts:\n * y — approve this one call\n * n / Esc — decline this call\n * a — always allow this category for the session\n * Y — switch to YOLO mode (approve all)\n */\nimport { Box, getKeybindings, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable } from '@earendil-works/pi-tui';\nimport { safeStringify } from '@mastra/core/utils';\nimport chalk from 'chalk';\nimport { decodePrintableShortcut } from '../key-input.js';\nimport { theme } from '../theme.js';\n\nexport type ApprovalAction =\n | { type: 'approve' }\n | { type: 'decline' }\n | { type: 'always_allow_category' }\n | { type: 'yolo' };\n\nexport interface ToolApprovalDialogOptions {\n toolCallId: string;\n toolName: string;\n args: unknown;\n /** Human-readable category label, e.g. \"Edit\" or \"Execute\" */\n categoryLabel?: string;\n onAction: (action: ApprovalAction) => void;\n}\n\nexport class ToolApprovalDialogComponent extends Box implements Focusable {\n private toolName: string;\n private args: unknown;\n private categoryLabel: string | undefined;\n private onAction: (action: ApprovalAction) => void;\n private resolved = false;\n\n // Focusable implementation\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n }\n\n constructor(options: ToolApprovalDialogOptions) {\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.toolName = options.toolName;\n this.args = options.args;\n this.categoryLabel = options.categoryLabel;\n this.onAction = options.onAction;\n\n this.buildUI();\n }\n\n private buildUI(): void {\n // Title\n this.addChild(new Text(theme.fg('warning', '⚠ Tool Approval Required'), 0, 0));\n this.addChild(new Spacer(1));\n\n // Tool name\n this.addChild(new Text(theme.fg('accent', `Tool: `) + theme.fg('text', this.toolName), 0, 0));\n if (this.categoryLabel) {\n this.addChild(new Text(theme.fg('accent', `Category: `) + theme.fg('text', this.categoryLabel), 0, 0));\n }\n this.addChild(new Spacer(1));\n\n // Arguments (formatted)\n this.addChild(new Text(theme.fg('muted', 'Arguments:'), 0, 0));\n const argsText = this.formatArgs(this.args);\n for (const line of argsText.split('\\n').slice(0, 10)) {\n this.addChild(new Text(theme.fg('text', ' ' + line), 0, 0));\n }\n if (argsText.split('\\n').length > 10) {\n this.addChild(new Text(theme.fg('muted', ' ... (truncated)'), 0, 0));\n }\n\n this.addChild(new Spacer(1));\n // Prompt text with keyboard shortcuts\n const categoryHint = this.categoryLabel\n ? `lways allow ${this.categoryLabel.toLowerCase()}`\n : 'lways allow category';\n const dimColor = chalk.hex(theme.getTheme().dim);\n const key = chalk.hex(theme.getTheme().text).bold;\n this.addChild(\n new Text(\n theme.fg('accent', 'Allow? ') +\n key('y') +\n dimColor('es ') +\n key('n') +\n dimColor('o ') +\n key('a') +\n dimColor(categoryHint + ' ') +\n key('Y') +\n dimColor('olo'),\n 0,\n 0,\n ),\n );\n }\n\n private formatArgs(args: unknown): string {\n if (args === null || args === undefined) {\n return '(none)';\n }\n\n if (typeof args !== 'object') {\n return String(args);\n }\n\n const entries = Object.entries(args as Record<string, unknown>);\n if (entries.length === 0) return '(none)';\n\n const lines: string[] = [];\n for (const [key, value] of entries) {\n let str: string;\n if (typeof value === 'string') {\n str = value;\n } else {\n str = safeStringify(value);\n }\n const maxLen = 120;\n const firstLine = str.split('\\n')[0] ?? '';\n const lineCount = typeof value === 'string' ? str.split('\\n').length : 0;\n const suffix = lineCount > 1 ? ` (${lineCount} lines)` : '';\n const display = firstLine.length > maxLen ? firstLine.slice(0, maxLen) + '…' : firstLine;\n lines.push(`${key}: ${display}${suffix}`);\n }\n return lines.join('\\n');\n }\n\n private emit(action: ApprovalAction): void {\n if (this.resolved) return;\n this.resolved = true;\n this.onAction(action);\n }\n\n handleInput(data: string): void {\n if (this.resolved) return;\n const kb = getKeybindings();\n\n // Escape to decline\n if (kb.matches(data, 'tui.select.cancel')) {\n this.emit({ type: 'decline' });\n return;\n }\n\n switch (decodePrintableShortcut(data)) {\n case 'y':\n this.emit({ type: 'approve' });\n break;\n case 'n':\n this.emit({ type: 'decline' });\n break;\n case 'a':\n this.emit({ type: 'always_allow_category' });\n break;\n case 'Y':\n this.emit({ type: 'yolo' });\n break;\n }\n }\n\n render(maxWidth: number): string[] {\n return super.render(maxWidth);\n }\n}\n","/**\n * Event handlers for tool execution events:\n * tool_start, tool_approval_required, tool_update, shell_output,\n * tool_input_start, tool_input_delta, tool_input_end, tool_end.\n *\n * Also includes formatToolResult helper.\n */\n\nimport type { TaskItemInput } from '@mastra/core/harness';\nimport { safeStringify } from '@mastra/core/utils';\nimport { parse as parsePartialJson } from 'partial-json';\n\nimport { getToolCategory, TOOL_CATEGORIES } from '../../permissions.js';\nimport { reconcileChatBoundarySpacers } from '../chat-boundary-reconciliation.js';\nimport { AskQuestionInlineComponent } from '../components/ask-question-inline.js';\nimport { AssistantMessageComponent } from '../components/assistant-message.js';\nimport { PlanApprovalInlineComponent } from '../components/plan-approval-inline.js';\nimport { ToolApprovalDialogComponent } from '../components/tool-approval-dialog.js';\nimport type { ApprovalAction } from '../components/tool-approval-dialog.js';\nimport { ToolExecutionComponentEnhanced } from '../components/tool-execution-enhanced.js';\nimport type { ToolResult } from '../components/tool-execution-enhanced.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { getMarkdownTheme } from '../theme.js';\n\nimport type { EventHandlerContext } from './types.js';\n\nfunction getCurrentModeColor(ctx: EventHandlerContext): string | undefined {\n const color = ctx.state.harness.getCurrentMode?.()?.metadata?.color;\n return typeof color === 'string' ? color : undefined;\n}\n\nexport function isTaskMutationTool(toolName: string): boolean {\n return toolName === 'task_write' || toolName === 'task_update' || toolName === 'task_complete';\n}\n\nfunction applyQuietDisplayForNewTool(ctx: EventHandlerContext, component: ToolExecutionComponentEnhanced): void {\n if (!ctx.state.quietMode) return;\n\n component.setCompactToolModeColor(getCurrentModeColor(ctx));\n component.setQuietModeDisplay('quiet');\n component.setQuietPreviewLineLimit(ctx.state.quietModeMaxToolPreviewLines);\n}\n\nfunction reconcileToolBoundaries(ctx: EventHandlerContext): void {\n reconcileChatBoundarySpacers(ctx.state.chatContainer);\n}\n\nfunction insertTaskToolErrorComponent(ctx: EventHandlerContext, component: unknown): void {\n const { state } = ctx;\n if (state.streamingComponent) {\n const insertIndex = state.chatContainer.children.indexOf(state.streamingComponent as never);\n if (insertIndex >= 0) {\n (state.chatContainer.children as unknown[]).splice(insertIndex, 0, component);\n state.chatContainer.invalidate();\n return;\n }\n }\n ctx.addChildBeforeFollowUps(component as never);\n}\n\nfunction ensureSubmitPlanComponent(\n ctx: EventHandlerContext,\n toolCallId: string,\n args?: unknown,\n): PlanApprovalInlineComponent {\n const { state } = ctx;\n let component = state.pendingSubmitPlanComponents.get(toolCallId);\n if (!component) {\n component = PlanApprovalInlineComponent.createStreaming(state.ui);\n state.pendingSubmitPlanComponents.set(toolCallId, component);\n state.lastSubmitPlanComponent = component;\n ctx.addChildBeforeFollowUps(component);\n\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n }\n component.updateArgs(args);\n reconcileToolBoundaries(ctx);\n return component;\n}\n\n/**\n * Format a tool result for display.\n * Handles objects, strings, and other types.\n * Extracts content from common tool return structures like { content: \"...\", isError: false }\n */\nfunction isToolResultError(result: unknown): boolean {\n return typeof result === 'object' && result !== null && (result as Record<string, unknown>).isError === true;\n}\n\nexport function formatToolResult(result: unknown): string {\n if (result === null || result === undefined) {\n return '';\n }\n if (typeof result === 'string') {\n return result;\n }\n if (typeof result === 'object') {\n const obj = result as Record<string, unknown>;\n // Handle common tool return format: { content: \"...\", isError: boolean }\n if ('content' in obj && typeof obj.content === 'string') {\n return obj.content;\n }\n // Handle content array format: { content: [{ type: \"text\", text: \"...\" }] }\n if ('content' in obj && Array.isArray(obj.content)) {\n const textParts = obj.content\n .filter(\n (part: unknown) =>\n typeof part === 'object' && part !== null && (part as Record<string, unknown>).type === 'text',\n )\n .map((part: unknown) => (part as Record<string, unknown>).text || '');\n if (textParts.length > 0) {\n return textParts.join('\\n');\n }\n }\n try {\n return safeStringify(result, 2);\n } catch {\n return String(result);\n }\n }\n return String(result);\n}\n\nexport function handleToolApprovalRequired(\n ctx: EventHandlerContext,\n toolCallId: string,\n toolName: string,\n args: unknown,\n): void {\n const { state } = ctx;\n // Compute category label for the dialog\n const category = getToolCategory(toolName);\n const categoryLabel = category ? TOOL_CATEGORIES[category]?.label : undefined;\n\n // Send notification to alert the user\n ctx.notify('tool_approval', `Approve ${toolName}?`);\n\n const dialog = new ToolApprovalDialogComponent({\n toolCallId,\n toolName,\n args,\n categoryLabel,\n onAction: (action: ApprovalAction) => {\n state.ui.hideOverlay();\n state.pendingApprovalDismiss = null;\n if (action.type === 'approve') {\n state.harness.respondToToolApproval({ decision: 'approve' });\n } else if (action.type === 'always_allow_category') {\n state.harness.respondToToolApproval({ decision: 'always_allow_category' });\n } else if (action.type === 'yolo') {\n state.harness.setState({ yolo: true } as any);\n state.harness.respondToToolApproval({ decision: 'approve' });\n } else {\n state.harness.respondToToolApproval({ decision: 'decline' });\n }\n },\n });\n\n // Set up Ctrl+C dismiss to decline\n state.pendingApprovalDismiss = () => {\n state.ui.hideOverlay();\n state.pendingApprovalDismiss = null;\n state.harness.respondToToolApproval({ decision: 'decline' });\n };\n\n // Show the dialog as an overlay\n showModalOverlay(state.ui, dialog, { widthPercent: 0.7 });\n dialog.focused = true;\n state.ui.requestRender();\n}\n\nexport function handleToolStart(ctx: EventHandlerContext, toolCallId: string, toolName: string, args: unknown): void {\n const { state } = ctx;\n // Component may already exist if created early by handleToolInputStart\n const existingComponent = state.pendingTools.get(toolCallId);\n const existingSubmitPlanComponent = state.pendingSubmitPlanComponents?.get(toolCallId);\n\n if (existingComponent) {\n // Component was created during input streaming — update with final args\n existingComponent.updateArgs(args);\n reconcileToolBoundaries(ctx);\n } else if (existingSubmitPlanComponent) {\n existingSubmitPlanComponent.updateArgs(args);\n } else if (!state.seenToolCallIds.has(toolCallId)) {\n state.seenToolCallIds.add(toolCallId);\n\n // Skip creating the regular tool component for subagent calls\n // The SubagentExecutionComponent will handle all the rendering\n if (toolName === 'subagent') {\n return;\n }\n\n // Skip creating regular component for ask_user — it uses AskQuestionInlineComponent\n // (normally created by handleToolInputStart, but handleToolStart may fire first)\n if (toolName === 'ask_user') {\n return;\n }\n\n if (toolName === 'submit_plan') {\n ensureSubmitPlanComponent(ctx, toolCallId, args);\n state.ui.requestRender();\n return;\n }\n\n if (isTaskMutationTool(toolName)) {\n state.taskToolInsertIndex = state.chatContainer.children.length;\n const component = new ToolExecutionComponentEnhanced(\n toolName,\n args,\n { showImages: false, collapsedByDefault: !state.toolOutputExpanded },\n state.ui,\n );\n component.setExpanded(state.toolOutputExpanded);\n state.pendingTools.set(toolCallId, component);\n state.pendingTaskToolIds?.add(toolCallId);\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n state.ui.requestRender();\n return;\n }\n\n const component = new ToolExecutionComponentEnhanced(\n toolName,\n args,\n { showImages: false, collapsedByDefault: !state.toolOutputExpanded },\n state.ui,\n );\n component.setExpanded(state.toolOutputExpanded);\n applyQuietDisplayForNewTool(ctx, component);\n ctx.addChildBeforeFollowUps(component);\n state.pendingTools.set(toolCallId, component);\n state.allToolComponents.push(component);\n reconcileToolBoundaries(ctx);\n\n // Create a new post-tool AssistantMessageComponent so pre-tool text is preserved\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n\n state.ui.requestRender();\n }\n\n // File modification tracking is handled by the Harness display state\n}\n\nexport function handleToolUpdate(ctx: EventHandlerContext, toolCallId: string, partialResult: unknown): void {\n const { state } = ctx;\n const component = state.pendingTools.get(toolCallId);\n if (component) {\n const result: ToolResult = {\n content: [{ type: 'text', text: formatToolResult(partialResult) }],\n isError: false,\n };\n component.updateResult(result, true);\n reconcileToolBoundaries(ctx);\n state.ui.requestRender();\n }\n}\n\n/**\n * Handle streaming shell output from execute_command tool.\n */\nexport function handleShellOutput(\n ctx: EventHandlerContext,\n toolCallId: string,\n output: string,\n _stream: 'stdout' | 'stderr',\n): void {\n const { state } = ctx;\n const component = state.pendingTools.get(toolCallId);\n if (component?.appendStreamingOutput) {\n component.appendStreamingOutput(output);\n reconcileToolBoundaries(ctx);\n state.ui.requestRender();\n }\n}\n\n/**\n * Handle the start of streaming tool call input arguments.\n * Creates the tool component early so partial args can render as they arrive.\n */\nexport function handleToolInputStart(ctx: EventHandlerContext, toolCallId: string, toolName: string): void {\n const { state } = ctx;\n\n // Mark as seen so handleMessageUpdate doesn't create a duplicate component\n if (!state.seenToolCallIds.has(toolCallId)) {\n state.seenToolCallIds.add(toolCallId);\n }\n\n if (state.pendingTools.has(toolCallId)) {\n if (isTaskMutationTool(toolName)) {\n state.pendingTaskToolIds?.add(toolCallId);\n }\n return;\n }\n\n // Create the component early so deltas can update it\n // Skip for subagent (handled by SubagentExecutionComponent),\n // task tools (they stream to or update the pinned TaskProgressComponent),\n // and ask_user (uses AskQuestionInlineComponent)\n if (toolName === 'submit_plan') {\n ensureSubmitPlanComponent(ctx, toolCallId);\n state.ui.requestRender();\n } else if (toolName === 'ask_user') {\n if (state.goalManager?.isActive()) {\n return;\n }\n\n const askComponent = AskQuestionInlineComponent.createStreaming(state.ui);\n ctx.addChildBeforeFollowUps(askComponent);\n state.lastAskUserComponent = askComponent;\n state.pendingAskUserComponents.set(toolCallId, askComponent);\n\n // Create a new post-tool AssistantMessageComponent so pre-tool text is preserved\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n\n state.ui.requestRender();\n } else if (isTaskMutationTool(toolName)) {\n // Record position so task_updated can place inline completed/cleared display here\n state.taskToolInsertIndex = state.chatContainer.children.length;\n const component = new ToolExecutionComponentEnhanced(\n toolName,\n {},\n { showImages: false, collapsedByDefault: !state.toolOutputExpanded },\n state.ui,\n );\n component.setExpanded(state.toolOutputExpanded);\n state.pendingTools.set(toolCallId, component);\n state.pendingTaskToolIds?.add(toolCallId);\n\n // Create a new post-tool AssistantMessageComponent so pre-tool text is preserved\n // (even though task_write doesn't render a tool component inline, we still need\n // to split the streaming component so getTrailingContentParts doesn't overwrite it)\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n state.ui.requestRender();\n } else if (toolName !== 'subagent') {\n const component = new ToolExecutionComponentEnhanced(\n toolName,\n {},\n { showImages: false, collapsedByDefault: !state.toolOutputExpanded },\n state.ui,\n );\n component.setExpanded(state.toolOutputExpanded);\n applyQuietDisplayForNewTool(ctx, component);\n ctx.addChildBeforeFollowUps(component);\n state.pendingTools.set(toolCallId, component);\n state.allToolComponents.push(component);\n reconcileToolBoundaries(ctx);\n\n // Create a new post-tool AssistantMessageComponent so pre-tool text is preserved\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n\n state.ui.requestRender();\n }\n}\n\n/**\n * Handle an incremental delta of tool call input arguments.\n * Buffers the partial JSON text and attempts to parse it, updating the component's args.\n */\nexport function handleToolInputDelta(ctx: EventHandlerContext, toolCallId: string, _argsTextDelta: string): void {\n const { state } = ctx;\n const ds = state.harness.getDisplayState();\n const buffer = ds.toolInputBuffers.get(toolCallId);\n if (buffer === undefined) return;\n\n const updatedText = buffer.text;\n\n try {\n const partialArgs = parsePartialJson(updatedText);\n if (partialArgs && typeof partialArgs === 'object') {\n // Update inline tool component if it exists\n const component = state.pendingTools.get(toolCallId);\n if (component) {\n component.updateArgs(partialArgs, false);\n reconcileToolBoundaries(ctx);\n component.refresh?.();\n }\n\n // For ask_user, stream partial args into the question component\n if (buffer.toolName === 'ask_user') {\n const askComponent = state.pendingAskUserComponents.get(toolCallId);\n if (askComponent) {\n try {\n askComponent.updateArgs(partialArgs);\n } catch {\n // Don't crash on malformed partial args\n }\n }\n }\n\n // For submit_plan, stream the title/plan args into the inline purple plan box.\n if (buffer.toolName === 'submit_plan') {\n const planComponent = state.pendingSubmitPlanComponents?.get(toolCallId);\n if (planComponent) {\n planComponent.updateArgs(partialArgs);\n }\n }\n\n // For task_write, stream partial tasks into the pinned TaskProgressComponent.\n // The last array item is actively being written so its content is unstable.\n // If all existing pinned items are already completed, the list is stable and\n // we can stream in new items immediately (including the last one).\n // Otherwise, exclude the last item to avoid jumpy partial-content matches.\n if (buffer.toolName === 'task_write' && state.taskProgress) {\n const tasks = (partialArgs as { tasks?: TaskItemInput[] }).tasks;\n if (tasks && tasks.length > 0) {\n const existing = state.taskProgress.getTasks();\n const allExistingDone = existing.length === 0 || existing.every(t => t.status === 'completed');\n if (allExistingDone) {\n // Old list is done — start fresh, stream new items immediately\n state.taskProgress.updateTasks(tasks);\n } else if (tasks.length > 1) {\n // Merge only completed items (exclude the last still-streaming one)\n const merged = [...existing];\n for (const task of tasks.slice(0, -1)) {\n if (!task.content) continue;\n const idx = task.id\n ? merged.findIndex(t => t.id === task.id)\n : merged.findIndex(t => !t.id && t.content === task.content);\n if (idx >= 0) {\n merged[idx] = task;\n } else {\n merged.push(task);\n }\n }\n state.taskProgress.updateTasks(merged);\n }\n }\n }\n\n state.ui.requestRender();\n }\n } catch {\n // Malformed or incomplete JSON — partial-json throws MalformedJSON for invalid input\n }\n}\n\n/**\n * Clean up the input buffer when tool input streaming ends.\n */\nexport function handleToolInputEnd(_ctx: EventHandlerContext, _toolCallId: string): void {\n // Buffer cleanup handled by Harness display state\n}\n\nexport function handleToolEnd(ctx: EventHandlerContext, toolCallId: string, result: unknown, isError: boolean): void {\n const { state } = ctx;\n // If this is a subagent tool, store the result in the SubagentExecutionComponent\n const subagentComponent = state.pendingSubagents.get(toolCallId);\n if (subagentComponent) {\n // The final result is available here\n const resultText = formatToolResult(result);\n // We'll need to wait for subagent_end to set this\n // Store it temporarily\n (subagentComponent as any)._pendingResult = resultText;\n }\n\n // File modification tracking is handled by the Harness display state\n\n // Clean up ask_user component tracking\n state.pendingAskUserComponents.delete(toolCallId);\n\n if (state.pendingSubmitPlanComponents?.has(toolCallId)) {\n // submit_plan renders through PlanApprovalInlineComponent, not the generic tool box.\n return;\n }\n\n const component = state.pendingTools.get(toolCallId);\n if (component) {\n const isPendingTaskTool = state.pendingTaskToolIds?.has(toolCallId) ?? false;\n const effectiveIsError = isError || isToolResultError(result);\n if (isPendingTaskTool && effectiveIsError) {\n insertTaskToolErrorComponent(ctx, component);\n state.allToolComponents.push(component);\n }\n\n const toolResult: ToolResult = {\n content: [{ type: 'text', text: formatToolResult(result) }],\n isError: effectiveIsError,\n };\n component.updateResult(toolResult, false);\n reconcileToolBoundaries(ctx);\n\n state.pendingTools.delete(toolCallId);\n state.pendingTaskToolIds?.delete(toolCallId);\n state.ui.requestRender();\n }\n}\n","/**\n * Message rendering helpers extracted from MastraTUI.\n *\n * Pure functions that operate on TUIState — no class dependency.\n */\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport type { Component } from '@earendil-works/pi-tui';\nimport type { HarnessMessage, HarnessMessageContent, TaskItemInput, TaskItemSnapshot } from '@mastra/core/harness';\nimport { assignTaskIds, parseSubagentMeta } from '@mastra/core/harness';\nimport { TASKS_STATE_ID } from '@mastra/core/tools';\nimport chalk from 'chalk';\nimport {\n insertChatComponentWithBoundarySpacing,\n reconcileChatBoundarySpacers,\n} from './chat-boundary-reconciliation.js';\nimport { AskQuestionInlineComponent } from './components/ask-question-inline.js';\nimport { AssistantMessageComponent } from './components/assistant-message.js';\nimport type { ChatSpacingKind } from './components/chat-spacing.js';\nimport { NotificationSummaryComponent } from './components/notification-summary.js';\nimport { NotificationComponent } from './components/notification.js';\nimport { OMMarkerComponent } from './components/om-marker.js';\nimport { OMOutputComponent } from './components/om-output.js';\nimport { PlanResultComponent } from './components/plan-approval-inline.js';\nimport { ReactiveSignalComponent } from './components/reactive-signal.js';\nimport { SlashCommandComponent } from './components/slash-command.js';\nimport { StateSignalComponent } from './components/state-signal.js';\nimport { SubagentExecutionComponent } from './components/subagent-execution.js';\nimport { SystemReminderComponent } from './components/system-reminder.js';\nimport { TemporalGapComponent } from './components/temporal-gap.js';\nimport { ToolExecutionComponentEnhanced } from './components/tool-execution-enhanced.js';\nimport { PendingUserMessageComponent, UserMessageComponent } from './components/user-message.js';\nimport { formatToolResult, isTaskMutationTool } from './handlers/tool.js';\nimport type { TUIState } from './state.js';\nimport { BOX_INDENT, getMarkdownTheme, theme, mastra } from './theme.js';\n\n// Re-export so existing consumers can still import from here\nexport { formatToolResult };\n\nconst WHILE_ACTIVE_USER_MESSAGE_LABEL = 'steer';\n// These are internal control-plane signals handled by GithubSignals. The user-visible\n// result is rendered by github-sync-status, so showing these would duplicate the UI.\nconst HIDDEN_REACTIVE_SIGNAL_TAGS = new Set(['github-subscribe-pr', 'github-unsubscribe-pr']);\nconst GOAL_STATE_SIGNAL_ID = 'goal';\n\nfunction shouldRenderReactiveSignal(tagName: string): boolean {\n return !HIDDEN_REACTIVE_SIGNAL_TAGS.has(tagName);\n}\n\ntype MessageWithAttributes = HarnessMessage & {\n attributes?: Record<string, string | number | boolean | null | undefined>;\n};\n\nfunction getUserMessageLabel(message: MessageWithAttributes, fallbackLabel?: string): string | undefined {\n if (message.attributes?.delivery === 'while-active') return WHILE_ACTIVE_USER_MESSAGE_LABEL;\n return fallbackLabel;\n}\n\nfunction getPendingUserMessageLabel(isInterjection?: boolean): string | undefined {\n return isInterjection ? WHILE_ACTIVE_USER_MESSAGE_LABEL : undefined;\n}\n\nfunction getCurrentModeColor(state: TUIState): string | undefined {\n const color = state.harness.getCurrentMode?.()?.metadata?.color;\n return typeof color === 'string' ? color : undefined;\n}\n\n// =============================================================================\n// renderClearedTasksInline\n// =============================================================================\n\nclass TaskHistoryComponent extends Container {\n getChatSpacingKind(): ChatSpacingKind {\n return 'task';\n }\n}\n\nfunction insertTaskHistoryComponent(state: TUIState, component: Component, insertIndex: number): void {\n insertChatComponentWithBoundarySpacing(\n state.chatContainer,\n component,\n insertIndex >= 0 ? insertIndex : state.chatContainer.children.length,\n );\n}\n\n/**\n * Render inline display when tasks are cleared.\n */\nexport function renderClearedTasksInline(state: TUIState, clearedTasks: TaskItemSnapshot[], insertIndex = -1): void {\n const container = new TaskHistoryComponent();\n const count = clearedTasks.length;\n const label = count === 1 ? 'Task' : 'Tasks';\n container.addChild(new Text(theme.fg('accent', `${label} cleared`), BOX_INDENT, 0));\n for (const task of clearedTasks) {\n const icon = task.status === 'completed' ? chalk.hex(mastra.green)('✓') : chalk.hex(mastra.darkGray)('○');\n const text = chalk.hex(theme.getTheme().dim).strikethrough(task.content);\n container.addChild(new Text(` ${icon} ${text}`, BOX_INDENT, 0));\n }\n insertTaskHistoryComponent(state, container, insertIndex);\n}\n\nfunction renderTaskTransitionFromHistory(\n state: TUIState,\n previousTasks: TaskItemSnapshot[],\n nextTasks: TaskItemSnapshot[],\n): { tasks: TaskItemSnapshot[]; replacedWithInline: boolean } {\n if (nextTasks.length > 0 && nextTasks.every(t => t.status === 'completed')) {\n // A fully-completed list hides its pinned view and leaves no inline receipt\n // (matches the live path); the transcript already narrates completion.\n return { tasks: nextTasks, replacedWithInline: true };\n }\n\n if (nextTasks.length === 0) {\n if (previousTasks.length > 0) {\n renderClearedTasksInline(state, previousTasks);\n return { tasks: [], replacedWithInline: true };\n }\n return { tasks: [], replacedWithInline: false };\n }\n\n return { tasks: nextTasks, replacedWithInline: true };\n}\n\n// =============================================================================\n// addUserMessage\n// =============================================================================\n\nfunction createReminderComponent(\n reminderType: string | undefined,\n options: {\n message?: string;\n path?: string;\n gapText?: string;\n goalMaxTurns?: number;\n judgeModelId?: string;\n },\n): SystemReminderComponent | TemporalGapComponent {\n if (reminderType === 'temporal-gap') {\n return new TemporalGapComponent({\n message: options.message,\n gapText: options.gapText,\n });\n }\n\n return new SystemReminderComponent({\n message: options.message,\n reminderType,\n path: options.path,\n goalMaxTurns: options.goalMaxTurns,\n judgeModelId: options.judgeModelId,\n });\n}\n\nfunction addChildBeforeFollowUps(state: TUIState, child: Component): void {\n const pendingSignalComponents = state.pendingSignalMessageComponentsById?.values() ?? [];\n const firstPinned = [...state.followUpComponents, ...pendingSignalComponents].find(pinned =>\n state.chatContainer.children.includes(('component' in pinned ? pinned.component : pinned) as never),\n );\n\n if (firstPinned) {\n const component = 'component' in firstPinned ? firstPinned.component : firstPinned;\n const idx = state.chatContainer.children.indexOf(component as never);\n if (idx >= 0) {\n insertChatComponentWithBoundarySpacing(state.chatContainer, child, idx);\n return;\n }\n }\n\n insertChatComponentWithBoundarySpacing(state.chatContainer, child);\n}\n\nexport function addChildBeforeMessageOrFollowUps(state: TUIState, child: Component, precedesMessageId?: string): void {\n if (precedesMessageId) {\n const anchor = state.messageComponentsById.get(precedesMessageId);\n if (anchor) {\n const idx = state.chatContainer.children.indexOf(anchor as never);\n if (idx >= 0) {\n insertChatComponentWithBoundarySpacing(state.chatContainer, child, idx);\n return;\n }\n }\n }\n\n addChildBeforeFollowUps(state, child);\n}\n\n/**\n * Add a user message to the chat container.\n */\nexport function addPendingUserMessage(\n state: TUIState,\n messageId: string,\n text: string,\n images?: Array<{ data: string; mimeType: string }>,\n options?: { isInterjection?: boolean },\n): void {\n const existing = state.pendingSignalMessageComponentsById.get(messageId);\n if (existing) {\n state.chatContainer.removeChild(existing.component as never);\n reconcileChatBoundarySpacers(state.chatContainer);\n }\n\n const component = new PendingUserMessageComponent(text, images?.length ?? 0);\n state.pendingSignalMessageComponentsById.set(messageId, { component, text, isInterjection: options?.isInterjection });\n state.chatContainer.addChild(component);\n reconcileChatBoundarySpacers(state.chatContainer);\n state.ui.requestRender();\n}\n\nexport function confirmPendingUserMessage(state: TUIState, messageId: string, text: string): void {\n const pending = state.pendingSignalMessageComponentsById.get(messageId);\n if (!pending) return;\n\n if (state.streamingComponent && state.harness.getDisplayState().isRunning) {\n state.streamingComponent = undefined;\n state.streamingMessage = undefined;\n }\n\n replacePendingUserMessage(state, messageId, text);\n}\n\nfunction replacePendingUserMessage(state: TUIState, messageId: string, text: string): void {\n const pending = state.pendingSignalMessageComponentsById.get(messageId);\n if (!pending) return;\n\n const label = getPendingUserMessageLabel(pending.isInterjection);\n const confirmed = new UserMessageComponent(text, getMarkdownTheme(), {\n ...(label ? { label } : {}),\n });\n const idx = state.chatContainer.children.indexOf(pending.component as never);\n if (idx >= 0) {\n (state.chatContainer.children as unknown[]).splice(idx, 1, confirmed);\n reconcileChatBoundarySpacers(state.chatContainer);\n } else {\n addChildBeforeFollowUps(state, confirmed);\n }\n state.pendingSignalMessageComponentsById.delete(messageId);\n state.messageComponentsById.set(messageId, confirmed);\n state.ui.requestRender();\n}\n\nexport function removePendingUserMessage(state: TUIState, messageId: string): void {\n const pending = state.pendingSignalMessageComponentsById.get(messageId);\n if (!pending) return;\n state.chatContainer.removeChild(pending.component as never);\n state.pendingSignalMessageComponentsById.delete(messageId);\n state.ui.requestRender();\n}\n\nexport function clearPendingUserMessages(state: TUIState): void {\n for (const pending of state.pendingSignalMessageComponentsById.values()) {\n state.chatContainer.removeChild(pending.component as never);\n }\n state.pendingSignalMessageComponentsById.clear();\n state.ui.requestRender();\n}\n\nfunction confirmMatchingPendingUserMessage(state: TUIState, messageId: string, text: string): boolean {\n const normalizedText = text.trim();\n for (const [pendingId, pending] of state.pendingSignalMessageComponentsById) {\n if (pending.text.trim() !== normalizedText) continue;\n\n const label = getPendingUserMessageLabel(pending.isInterjection);\n const confirmed = new UserMessageComponent(text, getMarkdownTheme(), {\n ...(label ? { label } : {}),\n });\n const idx = state.chatContainer.children.indexOf(pending.component as never);\n if (idx >= 0) {\n (state.chatContainer.children as unknown[]).splice(idx, 1, confirmed);\n reconcileChatBoundarySpacers(state.chatContainer);\n } else {\n addChildBeforeFollowUps(state, confirmed);\n }\n state.pendingSignalMessageComponentsById.delete(pendingId);\n state.messageComponentsById.set(messageId, confirmed);\n state.ui.requestRender();\n return true;\n }\n return false;\n}\n\nfunction unescapeSkillBoundary(text: string): string {\n return text.replaceAll('&lt;/skill&gt;', '</skill>');\n}\n\nexport function addUserMessage(state: TUIState, message: HarnessMessage, options?: { label?: string }): void {\n if (state.messageComponentsById.has(message.id)) {\n return;\n }\n\n const reminderPart = message.content.find(\n (content): content is Extract<HarnessMessageContent, { type: 'system_reminder' }> =>\n content.type === 'system_reminder',\n );\n\n if (reminderPart) {\n const goalMetadata = reminderPart as typeof reminderPart & { goalMaxTurns?: number; judgeModelId?: string };\n const reminderComponent = createReminderComponent(reminderPart.reminderType, {\n message: reminderPart.message,\n path: reminderPart.path,\n gapText: reminderPart.gapText,\n goalMaxTurns: goalMetadata.goalMaxTurns,\n judgeModelId: goalMetadata.judgeModelId,\n });\n reminderComponent.setExpanded(state.toolOutputExpanded);\n state.allSystemReminderComponents.push(reminderComponent);\n\n if (!reminderPart.precedesMessageId && state.streamingComponent) {\n const idx = state.chatContainer.children.indexOf(state.streamingComponent as never);\n if (idx >= 0) {\n (state.chatContainer.children as unknown[]).splice(idx, 0, reminderComponent);\n reconcileChatBoundarySpacers(state.chatContainer);\n state.ui.requestRender();\n return;\n }\n }\n\n addChildBeforeMessageOrFollowUps(state, reminderComponent, reminderPart.precedesMessageId);\n state.ui.requestRender();\n return;\n }\n\n const stateSignalPart = message.content.find(content => (content as { type?: string }).type === 'state_signal') as\n | { type: 'state_signal'; stateId: string; mode: 'snapshot' | 'delta'; version?: number; message?: string }\n | undefined;\n\n // The `tasks` state signal is rendered by the pinned task list UI (replayed\n // from task tool history), so skip its raw <current-task-list> snapshot here.\n // The `goal` state signal is surfaced by the goal/judge UI, so likewise skip\n // its raw <current-objective> snapshot.\n if (\n stateSignalPart &&\n (stateSignalPart.stateId === TASKS_STATE_ID || stateSignalPart.stateId === GOAL_STATE_SIGNAL_ID)\n ) {\n return;\n }\n\n if (stateSignalPart) {\n const component = new StateSignalComponent({\n stateId: stateSignalPart.stateId,\n mode: stateSignalPart.mode,\n version: stateSignalPart.version,\n message: stateSignalPart.message,\n });\n addChildBeforeFollowUps(state, component);\n state.messageComponentsById.set(message.id, component);\n state.ui.requestRender();\n return;\n }\n\n const reactiveSignalPart = message.content.find(\n content => (content as { type?: string }).type === 'reactive_signal',\n ) as { type: 'reactive_signal'; tagName: string; message?: string } | undefined;\n\n if (reactiveSignalPart) {\n if (!shouldRenderReactiveSignal(reactiveSignalPart.tagName)) return;\n const component = new ReactiveSignalComponent({\n tagName: reactiveSignalPart.tagName,\n message: reactiveSignalPart.message,\n });\n addChildBeforeFollowUps(state, component);\n state.messageComponentsById.set(message.id, component);\n state.ui.requestRender();\n return;\n }\n\n const notificationPart = message.content.find(content => (content as { type?: string }).type === 'notification') as\n | {\n type: 'notification';\n message: string;\n source?: string;\n kind?: string;\n priority?: string;\n status?: string;\n }\n | undefined;\n\n if (notificationPart) {\n const component = new NotificationComponent({\n message: notificationPart.message,\n source: notificationPart.source,\n kind: notificationPart.kind,\n priority: notificationPart.priority,\n status: notificationPart.status,\n });\n addChildBeforeFollowUps(state, component);\n state.messageComponentsById.set(message.id, component);\n state.ui.requestRender();\n return;\n }\n\n const notificationSummaryPart = message.content.find(\n content => (content as { type?: string }).type === 'notification_summary',\n ) as\n | {\n type: 'notification_summary';\n message: string;\n pending: number;\n bySource: Record<string, number>;\n }\n | undefined;\n\n if (notificationSummaryPart) {\n const component = new NotificationSummaryComponent({\n message: notificationSummaryPart.message,\n pending: notificationSummaryPart.pending,\n bySource: notificationSummaryPart.bySource,\n });\n addChildBeforeFollowUps(state, component);\n state.messageComponentsById.set(message.id, component);\n state.ui.requestRender();\n return;\n }\n\n const textContent = message.content\n .filter(c => c.type === 'text')\n .map(c => (c as { type: 'text'; text: string }).text)\n .join('\\n');\n\n const imageCount = message.content.filter(c => c.type === 'image').length;\n\n // Strip [image] markers from text since we show count separately\n const displayText = imageCount > 0 ? textContent.replace(/\\[image\\]\\s*/g, '').trim() : textContent.trim();\n const exactDisplayText = displayText.trim();\n\n const slashCommandMatch = exactDisplayText.match(/^<slash-command\\s+name=\"([^\"]*)\">([\\s\\S]*?)<\\/slash-command>$/);\n if (slashCommandMatch) {\n const commandName = slashCommandMatch[1]!;\n const commandContent = slashCommandMatch[2]!.trim();\n const pending = state.pendingSignalMessageComponentsById.get(message.id);\n if (pending) {\n state.chatContainer.removeChild(pending.component as never);\n state.pendingSignalMessageComponentsById.delete(message.id);\n reconcileChatBoundarySpacers(state.chatContainer);\n }\n const existingSlashComp = state.allSlashCommandComponents.find(\n component =>\n component.matches(commandName, commandContent) && state.chatContainer.children.includes(component as never),\n );\n if (existingSlashComp) {\n state.messageComponentsById.set(message.id, existingSlashComp);\n state.ui.requestRender();\n return;\n }\n\n const slashComp = new SlashCommandComponent(commandName, commandContent);\n state.allSlashCommandComponents.push(slashComp);\n insertChatComponentWithBoundarySpacing(state.chatContainer, slashComp);\n state.ui.requestRender();\n return;\n }\n\n const skillMatch = exactDisplayText.match(/^<skill\\s+name=\"([^\"]*)\">([\\s\\S]*?)<\\/skill>$/);\n if (skillMatch) {\n const commandName = `skill/${skillMatch[1]!}`;\n const skillContent = unescapeSkillBoundary(skillMatch[2]!.trim());\n const pending = state.pendingSignalMessageComponentsById.get(message.id);\n if (pending) {\n state.chatContainer.removeChild(pending.component as never);\n state.pendingSignalMessageComponentsById.delete(message.id);\n reconcileChatBoundarySpacers(state.chatContainer);\n }\n const existingSkillComp = state.allSlashCommandComponents.find(\n component =>\n component.matches(commandName, skillContent) && state.chatContainer.children.includes(component as never),\n );\n if (existingSkillComp) {\n state.messageComponentsById.set(message.id, existingSkillComp);\n state.ui.requestRender();\n return;\n }\n\n const skillComp = new SlashCommandComponent(commandName, skillContent);\n state.allSlashCommandComponents.push(skillComp);\n insertChatComponentWithBoundarySpacing(state.chatContainer, skillComp);\n state.ui.requestRender();\n return;\n }\n\n if (state.pendingSignalMessageComponentsById.has(message.id)) {\n confirmPendingUserMessage(state, message.id, displayText);\n return;\n }\n\n if (confirmMatchingPendingUserMessage(state, message.id, displayText)) {\n return;\n }\n\n // Suppress subscription echo of locally-rendered queued messages (Ctrl+F queue).\n // drainQueuedAction already rendered the message with a local ID; the subscription\n // echoes it back with a different signal ID which would otherwise create a duplicate.\n const dedupKey = displayText.trim();\n const pendingEchoCounts = state.firedQueuedMessageTexts;\n const dedupCount = pendingEchoCounts?.get(dedupKey) ?? 0;\n if (dedupCount > 0) {\n if (dedupCount === 1) pendingEchoCounts!.delete(dedupKey);\n else pendingEchoCounts!.set(dedupKey, dedupCount - 1);\n return;\n }\n\n const legacyReminderMatch = exactDisplayText.match(\n /^<system-reminder(?<attrs>\\s+[^>]*)?>(?<body>[\\s\\S]*?)<\\/system-reminder>$/,\n );\n if (legacyReminderMatch?.groups?.body) {\n const attrs = legacyReminderMatch.groups.attrs ?? '';\n const reminderType = attrs.match(/\\stype=\"([^\"]+)\"/)?.[1];\n const path = attrs.match(/\\spath=\"([^\"]+)\"/)?.[1];\n const precedesMessageId = attrs.match(/\\sprecedesMessageId=\"([^\"]+)\"/)?.[1];\n const reminderText = unescapeSystemReminderText(legacyReminderMatch.groups.body.trim());\n const reminderComponent = createReminderComponent(reminderType, {\n message: reminderText,\n path,\n gapText: reminderType === 'temporal-gap' ? reminderText.split(' — ')[0]?.trim() : undefined,\n });\n reminderComponent.setExpanded(state.toolOutputExpanded);\n state.allSystemReminderComponents.push(reminderComponent);\n\n addChildBeforeMessageOrFollowUps(state, reminderComponent, precedesMessageId);\n state.ui.requestRender();\n return;\n }\n\n const prefix = imageCount > 0 ? `[${imageCount} image${imageCount > 1 ? 's' : ''}] ` : '';\n if (displayText || prefix) {\n const label = getUserMessageLabel(message, options?.label);\n const userComponent = new UserMessageComponent(prefix + displayText, getMarkdownTheme(), {\n ...(label ? { label } : {}),\n });\n\n state.messageComponentsById.set(message.id, userComponent);\n\n if (state.streamingComponent && state.harness.getDisplayState().isRunning) {\n state.chatContainer.addChild(userComponent);\n state.followUpComponents.push(userComponent);\n reconcileChatBoundarySpacers(state.chatContainer);\n return;\n }\n\n addChildBeforeFollowUps(state, userComponent);\n }\n}\n\nfunction getTaskResultTasks(result: unknown): TaskItemInput[] | undefined {\n if (typeof result !== 'object' || result === null || !('tasks' in result)) return undefined;\n const tasks = (result as { tasks?: unknown }).tasks;\n return Array.isArray(tasks) ? (tasks as TaskItemInput[]) : undefined;\n}\n\nfunction areTasksEqual(left: readonly TaskItemSnapshot[] | undefined, right: readonly TaskItemSnapshot[]): boolean {\n if (!left || left.length !== right.length) return false;\n return left.every((task, index) => {\n const other = right[index];\n return (\n other !== undefined &&\n task.id === other.id &&\n task.content === other.content &&\n task.status === other.status &&\n task.activeForm === other.activeForm\n );\n });\n}\n\nfunction applyTaskPatchFallback(\n tasks: TaskItemSnapshot[],\n args: unknown,\n status?: TaskItemSnapshot['status'],\n): TaskItemSnapshot[] {\n if (\n typeof args !== 'object' ||\n args === null ||\n !('id' in args) ||\n typeof (args as { id?: unknown }).id !== 'string'\n ) {\n return tasks;\n }\n\n const patch = args as { id: string; content?: string; status?: TaskItemSnapshot['status']; activeForm?: string };\n return tasks.map(task => (task.id === patch.id ? { ...task, ...patch, ...(status ? { status } : {}) } : task));\n}\n\nfunction applyTaskToolResult(\n tasks: TaskItemSnapshot[],\n toolName: string,\n args: unknown,\n result: unknown,\n isError: boolean,\n): TaskItemSnapshot[] {\n if (isError) return tasks;\n\n if (toolName === 'task_write') {\n const resultTasks = getTaskResultTasks(result);\n const inputTasks = (args as { tasks?: TaskItemInput[] } | undefined)?.tasks;\n const rawTasks = resultTasks ?? inputTasks;\n const nextTasks = rawTasks ? assignTaskIds(rawTasks, tasks) : undefined;\n return nextTasks ? [...nextTasks] : [];\n }\n\n if (toolName === 'task_update' || toolName === 'task_complete') {\n const resultTasks = getTaskResultTasks(result);\n // Current task patch tools return structured task snapshots. Keep this\n // fallback only for early persisted histories created before that snapshot\n // field existed.\n return resultTasks\n ? assignTaskIds(resultTasks, tasks)\n : applyTaskPatchFallback(tasks, args, toolName === 'task_complete' ? 'completed' : undefined);\n }\n\n if (toolName === 'task_check') {\n const resultTasks = getTaskResultTasks(result);\n return resultTasks ? assignTaskIds(resultTasks, tasks) : tasks;\n }\n\n return tasks;\n}\n\n// =============================================================================\n// renderExistingMessages\n// =============================================================================\n\nconst STARTUP_MESSAGE_WINDOW_SIZE = 40;\n\nfunction getLatestMessageTimestamp(messages: HarnessMessage[]): number | undefined {\n let latest: number | undefined;\n for (const message of messages) {\n const time = new Date(message.createdAt).getTime();\n if (Number.isNaN(time)) continue;\n latest = latest === undefined ? time : Math.max(latest, time);\n }\n return latest;\n}\n\n/**\n * Re-render all existing messages from the harness thread into the chat container.\n * Called on thread switch and initial load.\n */\nexport async function renderExistingMessages(state: TUIState): Promise<void> {\n const messages = await state.harness.listMessages({ limit: STARTUP_MESSAGE_WINDOW_SIZE });\n state.lastRenderedMessageAt = getLatestMessageTimestamp(messages);\n\n state.chatContainer.clear();\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n state.allToolComponents = [];\n state.allSlashCommandComponents = [];\n state.allSystemReminderComponents = [];\n state.messageComponentsById.clear();\n state.pendingSignalMessageComponentsById.clear();\n state.allShellComponents = [];\n\n // Local accumulator for detecting task clears during visible history reconstruction.\n // Startup only replays task state from the bounded message window. If no task\n // snapshot exists in that window, keep the existing display-state snapshot.\n let previousTasksAcc: TaskItemSnapshot[] = [];\n let hasReplayedTaskState = false;\n\n for (const message of messages) {\n if (message.role === 'user') {\n addUserMessage(state, message);\n } else if (message.role === 'assistant') {\n // Render content in order - interleaving text and tool calls\n // Accumulate text/thinking until we hit a tool call, then render both\n let accumulatedContent: HarnessMessageContent[] = [];\n\n for (const content of message.content) {\n if (content.type === 'text' || content.type === 'thinking') {\n accumulatedContent.push(content);\n } else if (content.type === 'tool_call') {\n // Render accumulated text first if any\n if (accumulatedContent.length > 0) {\n const textMessage: HarnessMessage = {\n ...message,\n content: accumulatedContent,\n };\n const textComponent = new AssistantMessageComponent(\n textMessage,\n state.hideThinkingBlock,\n getMarkdownTheme(),\n );\n state.chatContainer.addChild(textComponent);\n accumulatedContent = [];\n }\n\n // Find matching tool result\n const toolResult = message.content.find(c => c.type === 'tool_result' && c.id === content.id);\n\n // Render subagent tool calls with dedicated component\n if (content.name === 'subagent') {\n const subArgs = content.args as\n | {\n agentType?: string;\n task?: string;\n modelId?: string;\n forked?: boolean;\n }\n | undefined;\n const rawResult = toolResult?.type === 'tool_result' ? formatToolResult(toolResult.result) : undefined;\n const isErr = toolResult?.type === 'tool_result' && toolResult.isError;\n\n // Parse embedded metadata for model ID, duration, tool calls\n const meta = rawResult ? parseSubagentMeta(rawResult) : null;\n const resultText = meta?.text ?? rawResult;\n const currentModelId =\n typeof (state.harness as { getFullModelId?: () => string }).getFullModelId === 'function'\n ? (state.harness as { getFullModelId: () => string }).getFullModelId()\n : undefined;\n const modelId = meta?.modelId ?? subArgs?.modelId ?? (subArgs?.forked ? currentModelId : undefined);\n const durationMs = meta?.durationMs ?? 0;\n\n const subComponent = new SubagentExecutionComponent(\n subArgs?.agentType ?? 'unknown',\n subArgs?.task ?? '',\n state.ui,\n modelId,\n { collapseOnComplete: false, expandOnComplete: state.quietMode, forked: subArgs?.forked },\n );\n // Populate tool calls from metadata\n if (meta?.toolCalls) {\n for (const tc of meta.toolCalls) {\n subComponent.addToolStart(tc.name, {});\n subComponent.addToolEnd(tc.name, '', tc.isError);\n }\n }\n // Mark as finished with result\n subComponent.finish(isErr ?? false, durationMs, resultText);\n insertChatComponentWithBoundarySpacing(state.chatContainer, subComponent);\n state.allToolComponents.push(subComponent as any);\n continue;\n }\n\n // Render ask_user with the proper question component\n if (content.name === 'ask_user' && toolResult?.type === 'tool_result') {\n const askArgs = content.args as\n | { question?: string; options?: Array<{ label: string; description?: string }> }\n | undefined;\n const answer =\n typeof toolResult.result === 'string' ? toolResult.result : formatToolResult(toolResult.result);\n const cancelled = answer === '(skipped)';\n if (askArgs?.question) {\n const askComponent = AskQuestionInlineComponent.fromHistory(\n askArgs.question,\n askArgs.options,\n answer,\n cancelled,\n );\n state.chatContainer.addChild(askComponent);\n continue;\n }\n }\n\n // Render the tool call\n const toolComponent = new ToolExecutionComponentEnhanced(\n content.name,\n content.args,\n {\n showImages: false,\n collapsedByDefault: !state.toolOutputExpanded,\n },\n state.ui,\n );\n\n if (toolResult && toolResult.type === 'tool_result') {\n toolComponent.updateResult(\n {\n content: [\n {\n type: 'text',\n text: formatToolResult(toolResult.result),\n },\n ],\n isError: toolResult.isError,\n },\n false,\n );\n }\n\n // Successful task transition tools render through the pinned task UI,\n // not as regular tool result boxes.\n let replacedWithInline = false;\n if (isTaskMutationTool(content.name) && toolResult?.type === 'tool_result' && !toolResult.isError) {\n hasReplayedTaskState = true;\n const nextTasks = applyTaskToolResult(\n previousTasksAcc,\n content.name,\n content.args,\n toolResult.result,\n toolResult.isError,\n );\n const transition = renderTaskTransitionFromHistory(state, previousTasksAcc, nextTasks);\n previousTasksAcc = transition.tasks;\n replacedWithInline = transition.replacedWithInline;\n }\n\n if (content.name === 'task_check' && toolResult?.type === 'tool_result' && !toolResult.isError) {\n const resultTasks = getTaskResultTasks(toolResult.result);\n if (resultTasks) {\n hasReplayedTaskState = true;\n previousTasksAcc = assignTaskIds(resultTasks, previousTasksAcc);\n }\n }\n\n // If this was submit_plan, show the plan with approval status\n if (content.name === 'submit_plan' && toolResult?.type === 'tool_result') {\n const args = content.args as { title?: string; plan?: string } | undefined;\n // Result could be a string or an object with content property\n let resultText = '';\n if (typeof toolResult.result === 'string') {\n resultText = toolResult.result;\n } else if (\n typeof toolResult.result === 'object' &&\n toolResult.result !== null &&\n 'content' in toolResult.result &&\n typeof (toolResult.result as any).content === 'string'\n ) {\n resultText = (toolResult.result as any).content;\n }\n const isApproved = resultText.toLowerCase().includes('approved');\n // Extract feedback if rejected with feedback\n let feedback: string | undefined;\n if (!isApproved && resultText.includes('Feedback:')) {\n const feedbackMatch = resultText.match(/Feedback:\\s*(.+)/);\n feedback = feedbackMatch?.[1];\n }\n\n if (args?.title && args?.plan) {\n const planResult = new PlanResultComponent({\n title: args.title,\n plan: args.plan,\n isApproved,\n feedback,\n });\n state.chatContainer.addChild(planResult);\n replacedWithInline = true;\n }\n }\n\n if (!replacedWithInline) {\n if (state.quietMode) {\n toolComponent.setCompactToolModeColor(getCurrentModeColor(state));\n toolComponent.setQuietModeDisplay('quiet');\n toolComponent.setQuietPreviewLineLimit(state.quietModeMaxToolPreviewLines);\n }\n state.chatContainer.addChild(toolComponent);\n state.allToolComponents.push(toolComponent);\n } else {\n }\n } else if (\n content.type === 'om_observation_start' ||\n content.type === 'om_observation_end' ||\n content.type === 'om_observation_failed'\n ) {\n // Skip start markers in history — only show completed/failed results\n if (content.type === 'om_observation_start') continue;\n\n // Render accumulated text first if any\n if (accumulatedContent.length > 0) {\n const textMessage: HarnessMessage = {\n ...message,\n content: accumulatedContent,\n };\n const textComponent = new AssistantMessageComponent(\n textMessage,\n state.hideThinkingBlock,\n getMarkdownTheme(),\n );\n state.chatContainer.addChild(textComponent);\n accumulatedContent = [];\n }\n\n if (content.type === 'om_observation_end') {\n // Render bordered output box with marker info in footer\n const isReflection = content.operationType === 'reflection';\n const outputComponent = new OMOutputComponent({\n type: isReflection ? 'reflection' : 'observation',\n observations: content.observations ?? '',\n currentTask: content.currentTask,\n suggestedResponse: content.suggestedResponse,\n durationMs: content.durationMs,\n tokensObserved: content.tokensObserved,\n observationTokens: content.observationTokens,\n compressedTokens: isReflection ? content.observationTokens : undefined,\n });\n state.chatContainer.addChild(outputComponent);\n } else {\n // Failed marker\n state.chatContainer.addChild(new OMMarkerComponent(content));\n }\n } else if (content.type === 'om_thread_title_updated') {\n if (state.quietMode) continue;\n // Render thread title update marker in history\n state.chatContainer.addChild(\n new OMMarkerComponent({\n type: 'om_thread_title_updated',\n newTitle: content.newTitle,\n oldTitle: content.oldTitle,\n }),\n );\n }\n // Skip tool_result - it's handled with tool_call above\n }\n\n // Render any remaining text after the last tool call\n if (accumulatedContent.length > 0) {\n const textMessage: HarnessMessage = {\n ...message,\n content: accumulatedContent,\n };\n const textComponent = new AssistantMessageComponent(textMessage, state.hideThinkingBlock, getMarkdownTheme());\n state.chatContainer.addChild(textComponent);\n }\n }\n }\n\n // Restore or clear the pinned task list from history replay when the bounded\n // window contains a task snapshot. Otherwise, keep the existing display-state\n // snapshot instead of clobbering older tasks that are outside the render window.\n if (hasReplayedTaskState) {\n if (state.taskProgress) {\n state.taskProgress.updateTasks(previousTasksAcc);\n }\n const currentTasks =\n typeof state.harness.getState === 'function'\n ? (state.harness.getState() as { tasks?: TaskItemSnapshot[] }).tasks\n : undefined;\n if (!areTasksEqual(currentTasks, previousTasksAcc)) {\n try {\n await state.harness.setState({ tasks: previousTasksAcc });\n } catch {\n // Custom harness state schemas may not accept TUI replayed task state.\n // Keep the reconstructed task list local to display state in that case.\n }\n }\n const harnessWithReplayTasks = state.harness as typeof state.harness & {\n restoreDisplayTasks?: (tasks: TaskItemSnapshot[]) => void;\n };\n harnessWithReplayTasks.restoreDisplayTasks?.(previousTasksAcc);\n }\n\n reconcileChatBoundarySpacers(state.chatContainer);\n state.ui.requestRender();\n}\n\nfunction unescapeSystemReminderText(text: string): string {\n return text.replaceAll('&lt;', '<').replaceAll('&gt;', '>').replaceAll('&amp;', '&');\n}\n","import { addPendingUserMessage, removePendingUserMessage } from '../render-messages.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport function isCurrentThreadActive(ctx: SlashCommandContext): boolean {\n return ctx.harness.isCurrentThreadStreamActive?.() ?? ctx.harness.getDisplayState?.().isRunning ?? false;\n}\n\nexport async function sendSlashCommandMessage(\n ctx: SlashCommandContext,\n displayText: string,\n content: string,\n options: { renderIdleUserMessage?: boolean } = {},\n): Promise<void> {\n if (ctx.state.pendingNewThread) {\n await ctx.harness.createThread();\n ctx.state.pendingNewThread = false;\n }\n\n if (isCurrentThreadActive(ctx)) {\n const signal = ctx.harness.sendSignal({ content });\n addPendingUserMessage(ctx.state, signal.id, displayText);\n try {\n await signal.accepted;\n } catch (error) {\n removePendingUserMessage(ctx.state, signal.id);\n throw error;\n }\n return;\n }\n\n if (options.renderIdleUserMessage ?? true) {\n ctx.addUserMessage({\n id: `user-${Date.now()}`,\n role: 'user',\n content: [{ type: 'text', text: displayText }],\n createdAt: new Date(),\n });\n ctx.state.ui.requestRender();\n }\n await ctx.harness.sendMessage({ content });\n}\n","import type { SkillMetadata } from '@mastra/core/workspace';\n\n/**\n * Whether a skill should be invocable directly by the user via /skill/<name>\n * and surfaced in the /skills listing and autocomplete. Defaults to true.\n * Skills opt out by setting `user-invocable: false` in SKILL.md frontmatter.\n */\nexport function isUserInvocable(skill: Pick<SkillMetadata, 'user-invocable'>): boolean {\n return skill['user-invocable'] !== false;\n}\n","import { formatSkillActivation } from '@mastra/core/workspace';\nimport { insertChatComponentWithBoundarySpacing } from '../chat-boundary-reconciliation.js';\nimport { SlashCommandComponent } from '../components/slash-command.js';\nimport { isCurrentThreadActive, sendSlashCommandMessage } from './send-slash-command-message.js';\nimport { isUserInvocable } from './skill-filters.js';\nimport type { SlashCommandContext } from './types.js';\n\n// Keep the renderer's non-greedy `<skill>...</skill>` regex from terminating\n// on a literal closing tag inside the body. Other characters pass through.\nfunction escapeSkillBoundary(value: string): string {\n return value.replaceAll('</skill>', '&lt;/skill&gt;');\n}\n\nasync function resolveWorkspace(ctx: SlashCommandContext) {\n let workspace = ctx.getResolvedWorkspace();\n if (!workspace && ctx.harness.hasWorkspace()) {\n workspace = await ctx.harness.resolveWorkspace();\n }\n return workspace;\n}\n\nexport async function handleSkillsCommand(ctx: SlashCommandContext): Promise<void> {\n // Eagerly resolve workspace if not yet cached (e.g. /skills called before first message)\n let workspace;\n try {\n workspace = await resolveWorkspace(ctx);\n } catch (error) {\n ctx.showError(`Failed to resolve workspace: ${error instanceof Error ? error.message : String(error)}`);\n return;\n }\n\n if (!workspace?.skills) {\n ctx.showInfo(\n 'No skills configured.\\n\\n' +\n 'Add skills to any of these locations:\\n' +\n ' .mastracode/skills/ (project-local)\\n' +\n ' .claude/skills/ (project-local)\\n' +\n ' .agents/skills/ (project-local)\\n' +\n ' ~/.mastracode/skills/ (global)\\n' +\n ' ~/.claude/skills/ (global)\\n' +\n ' ~/.agents/skills/ (global)\\n\\n' +\n 'Each skill is a folder with a SKILL.md file.\\n' +\n 'Install skills: npx add-skill <github-url>',\n );\n return;\n }\n\n try {\n const allSkills = await workspace.skills!.list();\n const skills = allSkills.filter(isUserInvocable);\n\n if (skills.length === 0) {\n ctx.showInfo(\n 'No user-invokable skills found in configured directories.\\n\\n' +\n 'Each skill needs a SKILL.md file with YAML frontmatter.\\n' +\n 'Skills with `user-invocable: false` are hidden from this list.\\n' +\n 'Install skills: npx add-skill <github-url>',\n );\n return;\n }\n\n const skillLines = skills.map(skill => {\n const desc = skill.description\n ? ` - ${skill.description.length > 60 ? skill.description.slice(0, 57) + '...' : skill.description}`\n : '';\n return ` ${skill.name}${desc}`;\n });\n\n ctx.showInfo(\n `Skills (${skills.length}):\\n${skillLines.join('\\n')}\\n\\n` +\n 'Skills are automatically activated by the agent when relevant.',\n );\n } catch (error) {\n ctx.showError(`Failed to list skills: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nexport async function handleSkillCommand(ctx: SlashCommandContext, skillName: string, args: string[]): Promise<void> {\n const normalizedSkillName = skillName.trim();\n if (!normalizedSkillName) {\n ctx.showError('Usage: /skill/<name>');\n return;\n }\n\n let workspace;\n try {\n workspace = await resolveWorkspace(ctx);\n } catch (error) {\n ctx.showError(`Failed to resolve workspace: ${error instanceof Error ? error.message : String(error)}`);\n return;\n }\n\n if (!workspace?.skills) {\n ctx.showError('No skills configured.');\n return;\n }\n\n try {\n const skill = await workspace.skills.get(normalizedSkillName);\n if (!skill || !isUserInvocable(skill)) {\n const skills = (await workspace.skills.list()).filter(isUserInvocable);\n const available = skills.length ? ` Available skills: ${skills.map(s => s.name).join(', ')}` : '';\n ctx.showError(`Skill not found: ${normalizedSkillName}.${available}`);\n return;\n }\n\n const trimmedArgs = args.join(' ').trim();\n const content = `${formatSkillActivation(skill)}${trimmedArgs ? `\\n\\nARGUMENTS: ${trimmedArgs}` : ''}`.trim();\n if (!content) {\n ctx.showInfo(`Activated /skill/${skill.name} (no instructions)`);\n return;\n }\n\n if (!isCurrentThreadActive(ctx)) {\n const component = new SlashCommandComponent(`skill/${skill.name}`, content);\n ctx.state.allSlashCommandComponents.push(component);\n insertChatComponentWithBoundarySpacing(ctx.state.chatContainer, component);\n ctx.state.ui.requestRender();\n }\n\n const displayText = `/skill/${skill.name}${trimmedArgs ? ` ${trimmedArgs}` : ''}`;\n await sendSlashCommandMessage(\n ctx,\n displayText,\n `<skill name=\"${skill.name}\">\\n${escapeSkillBoundary(content)}\\n</skill>`,\n {\n renderIdleUserMessage: false,\n },\n );\n } catch (error) {\n ctx.showError(\n `Error executing /skill/${normalizedSkillName}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport async function handleNewCommand(ctx: SlashCommandContext): Promise<void> {\n const { state } = ctx;\n\n // Detach from the old thread's event stream so cross-process events\n // don't leak into the new conversation. Unlike bare abort(), this also\n // unsubscribes from the PubSub topic — preventing another mc instance\n // on the same thread from pushing output into this TUI.\n state.harness.detachFromCurrentThread();\n\n state.pendingNewThread = true;\n state.chatContainer.clear();\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n state.allToolComponents = [];\n state.allSlashCommandComponents = [];\n state.allSystemReminderComponents = [];\n state.messageComponentsById.clear();\n state.allShellComponents = [];\n // Clear file tracking in display state (thread_created will also reset this)\n state.harness.getDisplayState().modifiedFiles.clear();\n // Clear per-thread ephemeral state from the global harness state\n await state.harness.setState({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n if (state.taskProgress) {\n state.taskProgress.updateTasks([]);\n }\n state.taskToolInsertIndex = -1;\n\n ctx.updateStatusLine();\n state.ui.requestRender();\n ctx.showInfo('Ready for new conversation');\n}\n","/**\n * Ask question dialog component.\n * Shows a question with either selectable options or free-text input.\n * Used by the ask_user tool to collect structured answers from the user.\n */\n\nimport { Box, getKeybindings, Input, SelectList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable, SelectItem, Component, TUI } from '@earendil-works/pi-tui';\nimport { theme, getSelectListTheme, getEditorTheme } from '../theme.js';\nimport type { AskQuestionSelectionMode } from './ask-question-inline.js';\nimport { MultilineInput } from './multiline-input.js';\nimport { WrappingSelectList } from './wrapping-select-list.js';\n\nexport interface AskQuestionDialogOptions {\n question: string;\n options?: Array<{ label: string; description?: string }>;\n /** Controls whether options are single- or multi-select. Defaults to single_select. */\n selectionMode?: AskQuestionSelectionMode;\n /**\n * Use a multiline editor for free-text input (Shift+Enter / \\+Enter for new lines).\n * Defaults to false. Enable for prompts that legitimately want paragraph-length replies.\n */\n multiline?: boolean;\n allowEmptyInput?: boolean;\n defaultValue?: string;\n allowCustomResponse?: boolean;\n selectedOptionLabel?: string;\n tui?: TUI;\n onSubmit: (answer: string) => void;\n /**\n * Called instead of `onSubmit` when the prompt is multi-select, with every selected\n * option label. Falls back to `onSubmit` with a comma-joined string when omitted.\n */\n onSubmitMulti?: (answers: string[]) => void;\n onCancel: () => void;\n}\n\nexport class AskQuestionDialogComponent extends Box implements Focusable {\n private static readonly CUSTOM_RESPONSE_VALUE = '__custom_response__';\n\n private selectList?: SelectList | WrappingSelectList;\n private input?: Input | MultilineInput;\n private tui?: TUI;\n private multiline = false;\n private multiSelect = false;\n private allowEmptyInput = false;\n private defaultValue?: string;\n private allowCustomResponse = true;\n private selectedOptionLabel?: string;\n private onSubmit: (answer: string) => void;\n private onSubmitMulti?: (answers: string[]) => void;\n private onCancel: () => void;\n\n /** Children added by buildSelectMode/buildInputMode, tracked for removal on mode switch */\n private modeChildren: Component[] = [];\n\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n if (this.input) this.input.focused = value;\n }\n\n constructor(options: AskQuestionDialogOptions) {\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.onSubmit = options.onSubmit;\n this.onSubmitMulti = options.onSubmitMulti;\n this.onCancel = options.onCancel;\n this.tui = options.tui;\n this.multiline = Boolean(options.multiline);\n this.multiSelect = options.selectionMode === 'multi_select';\n this.allowEmptyInput = Boolean(options.allowEmptyInput);\n this.defaultValue = options.defaultValue;\n this.allowCustomResponse = options.allowCustomResponse ?? true;\n this.selectedOptionLabel = options.selectedOptionLabel;\n\n // Title\n this.addChild(new Text(theme.bold(theme.fg('accent', 'Question')), 0, 0));\n this.addChild(new Spacer(1));\n\n // Question text (may be multi-line)\n for (const line of options.question.split('\\n')) {\n this.addChild(new Text(theme.fg('text', line), 0, 0));\n }\n this.addChild(new Spacer(1));\n\n if (options.options && options.options.length > 0) {\n this.buildSelectMode(options.options);\n } else {\n this.buildInputMode();\n }\n }\n\n private buildSelectMode(opts: Array<{ label: string; description?: string }>): void {\n const items: SelectItem[] = opts.map(opt => ({\n value: opt.label,\n label: opt.description ? ` ${opt.label} ${theme.fg('dim', opt.description)}` : ` ${opt.label}`,\n }));\n\n // \"Custom response...\" only applies to single-select: it switches to free-text.\n if (this.allowCustomResponse && !this.multiSelect) {\n items.push({\n value: AskQuestionDialogComponent.CUSTOM_RESPONSE_VALUE,\n label: ` ${theme.fg('dim', '✎ Custom response...')}`,\n });\n }\n\n let hintText: string;\n if (this.multiSelect) {\n const list = new WrappingSelectList(items, Math.min(items.length, 8), getSelectListTheme(), true);\n list.onConfirmMulti = (selected: SelectItem[]) => {\n const values = selected.map(item => item.value);\n if (this.onSubmitMulti) {\n this.onSubmitMulti(values);\n } else {\n this.onSubmit(values.join(', '));\n }\n };\n list.onCancel = this.onCancel;\n this.selectList = list;\n hintText = ' Space to toggle · Enter to confirm · Esc to skip';\n } else {\n const list = new SelectList(items, Math.min(items.length, 8), getSelectListTheme());\n const selectedIndex = items.findIndex(item => item.value === this.selectedOptionLabel);\n if (selectedIndex >= 0) list.setSelectedIndex(selectedIndex);\n list.onSelect = (item: SelectItem) => {\n if (item.value === AskQuestionDialogComponent.CUSTOM_RESPONSE_VALUE) {\n this.switchToCustomInput();\n return;\n }\n this.onSubmit(item.value);\n };\n list.onCancel = this.onCancel;\n this.selectList = list;\n hintText = ' ↑↓ to navigate · Enter to select · Esc to skip';\n }\n\n this.modeChildren = [];\n const selectChild = this.selectList as Component;\n this.addChild(selectChild);\n this.modeChildren.push(selectChild);\n const spacer = new Spacer(1);\n this.addChild(spacer);\n this.modeChildren.push(spacer);\n const hint = new Text(theme.fg('dim', hintText), 0, 0);\n this.addChild(hint);\n this.modeChildren.push(hint);\n }\n\n /** Whether this prompt should render a multiline editor (vs a single-line input). */\n private useMultiline(): boolean {\n return this.multiline && Boolean(this.tui);\n }\n\n private buildInputMode(): void {\n if (this.useMultiline()) {\n const multilineInput = new MultilineInput(this.tui!, getEditorTheme());\n multilineInput.allowEmptySubmit = this.allowEmptyInput;\n multilineInput.onSubmit = (value: string) => {\n // Trim only for the emptiness decision; forward the raw value\n // so leading indentation / trailing newlines survive.\n if (value.trim() || this.allowEmptyInput) {\n this.onSubmit(value);\n }\n };\n multilineInput.onEscape = () => {\n this.onCancel();\n };\n this.input = multilineInput;\n } else {\n this.input = new Input();\n this.input.onSubmit = (value: string) => {\n const trimmed = value.trim();\n if (trimmed || this.allowEmptyInput) {\n this.onSubmit(trimmed);\n }\n };\n }\n\n this.modeChildren = [];\n const inputChild = this.input;\n this.addChild(inputChild);\n this.modeChildren.push(inputChild);\n const spacer = new Spacer(1);\n this.addChild(spacer);\n this.modeChildren.push(spacer);\n const hintText = this.useMultiline()\n ? ' Enter to submit · Shift+Enter for new line · \\\\+Enter for new line · Esc to skip'\n : ' Enter to submit · Esc to skip';\n const hint = new Text(theme.fg('dim', hintText), 0, 0);\n this.addChild(hint);\n this.modeChildren.push(hint);\n\n if (this.defaultValue) {\n (this.input as Input).setValue?.(this.defaultValue);\n }\n\n // Carry focus over so switchToCustomInput() yields a focused input.\n this.input.focused = this._focused;\n }\n\n private switchToCustomInput(): void {\n // Remove select mode children\n for (const child of this.modeChildren) {\n this.removeChild(child);\n }\n this.selectList = undefined;\n this.buildInputMode();\n }\n\n handleInput(data: string): void {\n if (this.selectList) {\n this.selectList.handleInput(data);\n } else if (this.input) {\n const kb = getKeybindings();\n if (kb.matches(data, 'tui.select.cancel')) {\n this.onCancel();\n return;\n }\n this.input.handleInput(data);\n }\n }\n}\n","import type { OverlayOptions, TUI } from '@earendil-works/pi-tui';\n\nimport { AskQuestionDialogComponent } from './components/ask-question-dialog.js';\nimport { showModalOverlay } from './overlay.js';\n\nexport type ModalQuestionOption = { label: string; description?: string };\n\nexport type ModalQuestionOptions = {\n question: string;\n options?: ModalQuestionOption[];\n defaultValue?: string;\n allowEmptyInput?: boolean;\n allowCustomResponse?: boolean;\n selectedOptionLabel?: string;\n multiline?: boolean;\n overlay?: {\n widthPercent?: number;\n maxHeight?: OverlayOptions['maxHeight'];\n };\n};\n\nexport function askModalQuestion(tui: TUI, options: ModalQuestionOptions): Promise<string | null> {\n return new Promise(resolve => {\n const question = new AskQuestionDialogComponent({\n question: options.question,\n options: options.options,\n multiline: options.multiline,\n tui,\n allowEmptyInput: options.allowEmptyInput,\n allowCustomResponse: options.allowCustomResponse,\n selectedOptionLabel: options.selectedOptionLabel,\n defaultValue: options.defaultValue,\n onSubmit: answer => {\n tui.hideOverlay();\n resolve(answer);\n },\n onCancel: () => {\n tui.hideOverlay();\n resolve(null);\n },\n });\n\n showModalOverlay(tui, question, { maxHeight: '50%', ...options.overlay });\n question.focused = true;\n });\n}\n","import { askModalQuestion } from '../modal-question.js';\nimport type { TUIState } from '../state.js';\nimport type { SlashCommandContext } from './types.js';\n\n/** Minimal interface accepted by resetUIAfterClone so it works from both\n * slash-command handlers (SlashCommandContext) and the MastraTUI class. */\ninterface CloneResetContext {\n state: TUIState;\n updateStatusLine: () => void;\n renderExistingMessages: () => Promise<void>;\n showInfo: (message: string) => void;\n}\n\n/**\n * Confirm whether the user wants to clone a thread. Returns true if\n * confirmed, false on cancel or \"No\".\n */\nexport async function confirmClone(state: TUIState, threadLabel?: string): Promise<boolean> {\n const label = threadLabel ? `Clone thread \"${threadLabel}\"?` : 'Clone the current thread?';\n const answer = await askModalQuestion(state.ui, {\n question: label,\n options: [\n { label: 'Yes', description: 'Clone this thread' },\n { label: 'No', description: 'Cancel' },\n ],\n });\n return answer === 'Yes';\n}\n\n/**\n * Prompt for an optional clone name. Returns the trimmed name, or null\n * if the user presses Esc or submits an empty string.\n */\nexport async function askCloneName(state: TUIState): Promise<string | null> {\n const answer = await askModalQuestion(state.ui, { question: 'Give the cloned thread a name? (Esc to skip)' });\n const trimmed = answer?.trim() ?? '';\n return trimmed.length > 0 ? trimmed : null;\n}\n\n/**\n * Shared post-clone UI reset: clears chat, tools, tasks, re-renders messages,\n * and shows an info banner. Every clone path should call this after\n * `harness.cloneThread()` succeeds.\n */\nexport async function resetUIAfterClone(ctx: CloneResetContext, clonedTitle: string): Promise<void> {\n const { state } = ctx;\n state.chatContainer.clear();\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n state.allToolComponents = [];\n state.allSystemReminderComponents = [];\n state.messageComponentsById.clear();\n state.allShellComponents = [];\n state.harness.getDisplayState().modifiedFiles.clear();\n // Clear per-thread ephemeral state from the global harness state\n await state.harness.setState({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n if (state.taskProgress) {\n state.taskProgress.updateTasks([]);\n }\n state.taskToolInsertIndex = -1;\n\n ctx.updateStatusLine();\n await ctx.renderExistingMessages();\n state.ui.requestRender();\n ctx.showInfo(`Cloned thread: ${clonedTitle}`);\n}\n\nexport async function handleCloneCommand(ctx: SlashCommandContext): Promise<void> {\n const { state } = ctx;\n\n const currentThreadId = state.harness.getCurrentThreadId();\n if (!currentThreadId) {\n ctx.showInfo('No active thread to clone');\n return;\n }\n\n // Step 1: Confirm / Cancel\n if (!(await confirmClone(state))) return;\n\n // Step 2: Optional rename\n const customTitle = await askCloneName(state);\n\n try {\n const clonedThread = await state.harness.cloneThread({\n sourceThreadId: currentThreadId,\n ...(customTitle ? { title: customTitle } : {}),\n });\n\n await resetUIAfterClone(ctx, clonedThread.title || clonedThread.id);\n } catch (error) {\n ctx.showError(`Failed to clone thread: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport async function handleResourceCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const { state, harness } = ctx;\n const sub = args[0]?.trim();\n const current = harness.getResourceId();\n const defaultId = harness.getDefaultResourceId();\n\n if (!sub) {\n const knownIds = await harness.getKnownResourceIds();\n const isOverridden = current !== defaultId;\n const lines = [\n `Current: ${current}${isOverridden ? ` (auto-detected: ${defaultId})` : ''}`,\n '',\n 'Known resource IDs:',\n ...knownIds.map((id: string) => ` ${id === current ? '* ' : ' '}${id}`),\n '',\n 'Usage:',\n ' /resource - Show current resource and known IDs',\n ' /resource <id> - Switch to a resource ID (resumes latest thread)',\n ' /resource reset - Reset to auto-detected ID',\n ];\n ctx.showInfo(lines.join('\\n'));\n return;\n }\n\n const newId = sub === 'reset' ? defaultId : args.join(' ').trim();\n\n if (newId === current) {\n ctx.showInfo(`Already on resource: ${current}`);\n return;\n }\n\n harness.setResourceId({ resourceId: newId });\n\n // Try to resume the most recent thread for this resource\n const threads = await harness.listThreads();\n const latest = [...threads].sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())[0];\n\n if (latest) {\n await harness.switchThread({ threadId: latest.id });\n state.chatContainer.clear();\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n state.allToolComponents = [];\n state.allSystemReminderComponents = [];\n state.messageComponentsById.clear();\n state.allShellComponents = [];\n state.pendingNewThread = false;\n await ctx.renderExistingMessages();\n ctx.showInfo(\n sub === 'reset'\n ? `Resource ID reset to: ${defaultId} — resumed thread: ${latest.title || latest.id}`\n : `Switched to resource: ${newId} — resumed thread: ${latest.title || latest.id}`,\n );\n } else {\n state.chatContainer.clear();\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n state.allToolComponents = [];\n state.allSystemReminderComponents = [];\n state.messageComponentsById.clear();\n state.allShellComponents = [];\n state.pendingNewThread = true;\n ctx.showInfo(\n sub === 'reset'\n ? `Resource ID reset to: ${defaultId} (no existing threads, a new one will be created)`\n : `Switched to resource: ${newId} (no existing threads, a new one will be created)`,\n );\n }\n\n ctx.updateStatusLine();\n state.ui.requestRender();\n}\n","/**\n * Component that renders git diff output with syntax highlighting.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { BOX_INDENT, theme, mastra } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nfunction colorizeDiffLine(line: string): string {\n const t = theme.getTheme();\n const addedColor = chalk.hex(t.success);\n const hunkHeaderColor = chalk.hex(t.toolBorderPending);\n const fileHeaderColor = chalk.bold.hex(t.accent);\n const removedColor = chalk.hex(mastra.red);\n const metaColor = chalk.hex(mastra.mainGray);\n\n // Unified diff headers\n if (line.startsWith('+++') || line.startsWith('---')) {\n return fileHeaderColor(line);\n }\n\n // Added lines\n if (line.startsWith('+')) {\n return addedColor(line);\n }\n\n // Removed lines\n if (line.startsWith('-')) {\n return removedColor(line);\n }\n\n // Hunk headers\n if (line.startsWith('@@')) {\n // Parse the @@ -start,count +start,count @@ format\n const match = line.match(/^(@@ .+? @@)(.*)/);\n if (match) {\n return hunkHeaderColor(match[1]) + metaColor(match[2] || '');\n }\n return hunkHeaderColor(line);\n }\n\n // Binary files, rename markers, etc.\n if (\n line.startsWith('diff ') ||\n line.startsWith('index ') ||\n line.startsWith('new file') ||\n line.startsWith('deleted file') ||\n line.startsWith('similarity index') ||\n line.startsWith('rename ')\n ) {\n return metaColor(line);\n }\n\n return metaColor(line);\n}\n\nexport class DiffOutputComponent extends Container {\n constructor(command: string, diffOutput: string) {\n super();\n\n // Command header\n this.addChild(\n new Text(\n `${theme.fg('success', '✓')} ${theme.bold(theme.fg('muted', '$'))} ${theme.fg('text', command)}`,\n BOX_INDENT,\n 0,\n ),\n );\n\n const output = diffOutput.trimEnd();\n if (output) {\n const lines = output.split('\\n');\n for (const line of lines) {\n this.addChild(new Text(` ${colorizeDiffLine(line)}`, BOX_INDENT, 0));\n }\n }\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\n","import { DiffOutputComponent } from '../components/diff-output.js';\nimport { theme } from '../theme.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport async function handleDiffCommand(ctx: SlashCommandContext, filePath?: string): Promise<void> {\n const { state } = ctx;\n\n if (filePath) {\n try {\n const { execa } = await import('execa');\n const result = await execa('git', ['diff', filePath], {\n cwd: process.cwd(),\n reject: false,\n });\n\n if (!result.stdout.trim()) {\n const staged = await execa('git', ['diff', '--cached', filePath], {\n cwd: process.cwd(),\n reject: false,\n });\n if (!staged.stdout.trim()) {\n ctx.showInfo(`No changes detected for: ${filePath}`);\n return;\n }\n const component = new DiffOutputComponent(`git diff --cached ${filePath}`, staged.stdout);\n state.chatContainer.addChild(component);\n state.ui.requestRender();\n return;\n }\n\n const component = new DiffOutputComponent(`git diff ${filePath}`, result.stdout);\n state.chatContainer.addChild(component);\n state.ui.requestRender();\n } catch (error) {\n ctx.showError(error instanceof Error ? error.message : 'Failed to get diff');\n }\n return;\n }\n\n // No path specified — show summary of all tracked modified files\n // Read from Harness display state (canonical source for file modifications)\n const modifiedFiles = state.harness.getDisplayState().modifiedFiles;\n if (modifiedFiles.size === 0) {\n try {\n const { execa } = await import('execa');\n const result = await execa('git', ['diff', '--stat'], {\n cwd: process.cwd(),\n reject: false,\n });\n const staged = await execa('git', ['diff', '--cached', '--stat'], {\n cwd: process.cwd(),\n reject: false,\n });\n\n const output = [result.stdout, staged.stdout].filter(Boolean).join('\\n');\n if (output.trim()) {\n const component = new DiffOutputComponent('git diff --stat', output);\n state.chatContainer.addChild(component);\n state.ui.requestRender();\n } else {\n ctx.showInfo('No file changes detected in this session or working tree.');\n }\n } catch {\n ctx.showInfo('No file changes tracked in this session.');\n }\n return;\n }\n\n const lines: string[] = [`Modified files (${modifiedFiles.size}):`];\n for (const [fp, info] of modifiedFiles) {\n const opCounts = new Map<string, number>();\n for (const op of info.operations) {\n opCounts.set(op, (opCounts.get(op) || 0) + 1);\n }\n const ops = Array.from(opCounts.entries())\n .map(([op, count]) => (count > 1 ? `${op}×${count}` : op))\n .join(', ');\n lines.push(` ${theme.fg('path', fp)} ${theme.fg('muted', `(${ops})`)}`);\n }\n lines.push('');\n lines.push(theme.fg('muted', 'Use /diff <path> to see the git diff for a specific file.'));\n\n ctx.showInfo(lines.join('\\n'));\n}\n","/**\n * Thread selector component for switching between conversation threads.\n * Uses pi-tui overlay pattern with search and navigation.\n */\n\nimport { Box, Container, fuzzyFilter, getKeybindings, Input, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable, TUI } from '@earendil-works/pi-tui';\nimport type { HarnessThread } from '@mastra/core/harness';\nimport { decodePrintableShortcut } from '../key-input.js';\nimport { theme } from '../theme.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ThreadSelectorOptions {\n tui: TUI;\n threads: HarnessThread[];\n currentThreadId: string | null;\n /** Current resource ID — threads from this resource sort to the top */\n currentResourceId?: string;\n /** Current project root path — threads tagged with this directory sort above other same-resource threads */\n currentProjectPath?: string;\n onSelect: (thread: HarnessThread) => void;\n onCancel: () => void;\n /** Called when user presses 'c' to clone the selected thread */\n onClone?: (thread: HarnessThread) => void;\n /** Function to fetch message previews for currently visible threads */\n getMessagePreviews?: (threadIds: string[]) => Promise<Map<string, string>>;\n initialMessagePreviews?: Map<string, string>;\n initialAttemptedPreviewThreadIds?: Set<string>;\n onMessagePreviewsLoaded?: (previews: Map<string, string>, attemptedThreadIds: Set<string>) => void;\n}\n\nconst MAX_VISIBLE_THREADS = 12;\nconst INITIAL_PREVIEW_LOAD_COUNT = 24;\nconst PREVIEW_BATCH_SIZE = 2;\nconst INITIAL_PREVIEW_LOAD_DELAY_MS = 150;\nconst INTERACTION_PREVIEW_LOAD_DELAY_MS = 250;\nconst FOLLOW_UP_PREVIEW_LOAD_DELAY_MS = 50;\n\n// =============================================================================\n// ThreadSelectorComponent\n// =============================================================================\n\nexport class ThreadSelectorComponent extends Box implements Focusable {\n private searchInput!: Input;\n private listContainer!: Container;\n private allThreads: HarnessThread[];\n private filteredThreads: HarnessThread[];\n private selectedIndex = 0;\n private currentThreadId: string | null;\n private currentResourceId: string | undefined;\n private currentProjectPath: string | undefined;\n private onSelectCallback: (thread: HarnessThread) => void;\n private onCancelCallback: () => void;\n private onCloneCallback: ((thread: HarnessThread) => void) | undefined;\n private tui: TUI;\n private getMessagePreviews: ((threadIds: string[]) => Promise<Map<string, string>>) | undefined;\n private onMessagePreviewsLoaded:\n | ((previews: Map<string, string>, attemptedThreadIds: Set<string>) => void)\n | undefined;\n private messagePreviews: Map<string, string>;\n private attemptedPreviewThreadIds: Set<string>;\n private loadingPreviewThreadIds: Set<string> = new Set();\n private previewLoadVersion = 0;\n private previewLoadTimeout: ReturnType<typeof setTimeout> | null = null;\n\n // Focusable implementation\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n this.searchInput.focused = value;\n }\n\n constructor(options: ThreadSelectorOptions) {\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.tui = options.tui;\n this.currentResourceId = options.currentResourceId;\n this.currentProjectPath = options.currentProjectPath;\n this.allThreads = this.sortThreads(options.threads, options.currentThreadId);\n this.currentThreadId = options.currentThreadId;\n this.onSelectCallback = options.onSelect;\n this.onCancelCallback = options.onCancel;\n this.onCloneCallback = options.onClone;\n this.getMessagePreviews = options.getMessagePreviews;\n this.onMessagePreviewsLoaded = options.onMessagePreviewsLoaded;\n this.messagePreviews = new Map(options.initialMessagePreviews ?? []);\n this.attemptedPreviewThreadIds = new Set(options.initialAttemptedPreviewThreadIds ?? []);\n this.filteredThreads = this.allThreads;\n\n this.buildUI();\n this.scheduleMessagePreviewLoad({ initialLoad: true });\n }\n\n private getVisibleRange(): { startIndex: number; endIndex: number } {\n const startIndex = Math.max(\n 0,\n Math.min(\n this.selectedIndex - Math.floor(MAX_VISIBLE_THREADS / 2),\n this.filteredThreads.length - MAX_VISIBLE_THREADS,\n ),\n );\n const endIndex = Math.min(startIndex + MAX_VISIBLE_THREADS, this.filteredThreads.length);\n return { startIndex, endIndex };\n }\n\n private getVisibleThreads(): HarnessThread[] {\n const { startIndex, endIndex } = this.getVisibleRange();\n return this.filteredThreads.slice(startIndex, endIndex);\n }\n\n private getPreviewCandidates(initialLoad: boolean): HarnessThread[] {\n const initialThreads = initialLoad ? this.filteredThreads.slice(0, INITIAL_PREVIEW_LOAD_COUNT) : [];\n const combinedThreads = [...initialThreads, ...this.getVisibleThreads()];\n const uniqueThreads = combinedThreads.filter(\n (thread, index, threads) => threads.findIndex(t => t.id === thread.id) === index,\n );\n\n const prioritizedThreads = uniqueThreads.filter(\n thread =>\n thread.resourceId === this.currentResourceId &&\n typeof thread.metadata?.projectPath === 'string' &&\n thread.metadata.projectPath === this.currentProjectPath,\n );\n const remainingThreads = uniqueThreads.filter(thread => !prioritizedThreads.some(t => t.id === thread.id));\n\n return [...prioritizedThreads, ...remainingThreads].filter(\n thread =>\n !this.messagePreviews.has(thread.id) &&\n !this.attemptedPreviewThreadIds.has(thread.id) &&\n !this.loadingPreviewThreadIds.has(thread.id),\n );\n }\n\n private scheduleMessagePreviewLoad({\n initialLoad = false,\n delayMs,\n }: { initialLoad?: boolean; delayMs?: number } = {}): void {\n const previewDelayMs = delayMs ?? (initialLoad ? INITIAL_PREVIEW_LOAD_DELAY_MS : FOLLOW_UP_PREVIEW_LOAD_DELAY_MS);\n\n if (this.previewLoadTimeout) {\n clearTimeout(this.previewLoadTimeout);\n }\n\n this.previewLoadTimeout = setTimeout(() => {\n this.previewLoadTimeout = null;\n void this.loadMessagePreviews({ initialLoad });\n }, previewDelayMs);\n }\n\n private async loadMessagePreviews({ initialLoad = false }: { initialLoad?: boolean } = {}): Promise<void> {\n if (!this.getMessagePreviews) return;\n\n const version = ++this.previewLoadVersion;\n const candidates = this.getPreviewCandidates(initialLoad);\n const threadIds = candidates.slice(0, PREVIEW_BATCH_SIZE).map(thread => thread.id);\n\n if (threadIds.length === 0) return;\n\n threadIds.forEach(threadId => this.loadingPreviewThreadIds.add(threadId));\n this.updateList();\n this.tui.requestRender();\n\n try {\n const previews = await this.getMessagePreviews(threadIds);\n if (version !== this.previewLoadVersion) return;\n\n threadIds.forEach(threadId => this.attemptedPreviewThreadIds.add(threadId));\n\n for (const [threadId, preview] of previews) {\n if (preview) {\n this.messagePreviews.set(threadId, preview);\n }\n }\n\n this.onMessagePreviewsLoaded?.(new Map(this.messagePreviews), new Set(this.attemptedPreviewThreadIds));\n } catch {\n // Ignore errors, previews will just be empty\n } finally {\n threadIds.forEach(threadId => this.loadingPreviewThreadIds.delete(threadId));\n }\n\n this.updateList();\n this.tui.requestRender();\n\n if (candidates.length > PREVIEW_BATCH_SIZE) {\n this.scheduleMessagePreviewLoad({ initialLoad, delayMs: FOLLOW_UP_PREVIEW_LOAD_DELAY_MS });\n }\n }\n\n private buildUI(): void {\n this.addChild(new Text(theme.bold(theme.fg('accent', 'Select Thread')), 0, 0));\n this.addChild(new Spacer(1));\n const cloneHint = this.onCloneCallback ? ' • c clone' : '';\n this.addChild(\n new Text(theme.fg('muted', `Type to search • ↑↓ navigate • Enter select${cloneHint} • Esc cancel`), 0, 0),\n );\n this.addChild(new Spacer(1));\n\n this.searchInput = new Input();\n this.searchInput.onSubmit = () => {\n const selected = this.filteredThreads[this.selectedIndex];\n if (selected) {\n this.onSelectCallback(selected);\n }\n };\n this.addChild(this.searchInput);\n this.addChild(new Spacer(1));\n\n this.listContainer = new Container();\n this.addChild(this.listContainer);\n\n this.updateList();\n }\n\n private sortThreads(threads: HarnessThread[], currentThreadId: string | null): HarnessThread[] {\n const sorted = [...threads];\n const resId = this.currentResourceId;\n const projPath = this.currentProjectPath;\n sorted.sort((a, b) => {\n // Current thread first\n if (a.id === currentThreadId) return -1;\n if (b.id === currentThreadId) return 1;\n // Current resource threads before other resources\n if (resId) {\n const aLocal = a.resourceId === resId;\n const bLocal = b.resourceId === resId;\n if (aLocal && !bLocal) return -1;\n if (!aLocal && bLocal) return 1;\n }\n // Within the same resource, threads tagged with the current directory first\n if (projPath && a.resourceId === b.resourceId) {\n const aDir = typeof a.metadata?.projectPath === 'string' && a.metadata.projectPath === projPath;\n const bDir = typeof b.metadata?.projectPath === 'string' && b.metadata.projectPath === projPath;\n if (aDir && !bDir) return -1;\n if (!aDir && bDir) return 1;\n }\n // Then by most recently updated\n return b.updatedAt.getTime() - a.updatedAt.getTime();\n });\n return sorted;\n }\n\n private filterThreads(query: string): void {\n this.filteredThreads = query\n ? fuzzyFilter(\n this.allThreads,\n query,\n t =>\n `${t.title ?? ''} ${t.resourceId} ${t.id} ${typeof t.metadata?.projectPath === 'string' ? t.metadata.projectPath : ''}`,\n )\n : this.allThreads;\n\n this.selectedIndex = Math.min(this.selectedIndex, Math.max(0, this.filteredThreads.length - 1));\n this.updateList();\n this.scheduleMessagePreviewLoad({ initialLoad: true });\n }\n\n private formatTimeAgo(date: Date): string {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000);\n if (seconds < 60) return 'just now';\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n }\n\n private updateList(): void {\n this.listContainer.clear();\n\n const startIndex = Math.max(\n 0,\n Math.min(\n this.selectedIndex - Math.floor(MAX_VISIBLE_THREADS / 2),\n this.filteredThreads.length - MAX_VISIBLE_THREADS,\n ),\n );\n const endIndex = Math.min(startIndex + MAX_VISIBLE_THREADS, this.filteredThreads.length);\n\n for (let i = startIndex; i < endIndex; i++) {\n const thread = this.filteredThreads[i];\n if (!thread) continue;\n\n const isSelected = i === this.selectedIndex;\n const isCurrent = thread.id === this.currentThreadId;\n const checkmark = isCurrent ? theme.fg('success', ' ✓') : '';\n const shortId = thread.id.slice(-6);\n const threadPath = thread.metadata?.projectPath as string | undefined;\n const pathTag = threadPath ? theme.fg('dim', ` [${threadPath.split('/').pop()}]`) : '';\n const displayId = `${thread.resourceId}/${shortId}`;\n const timeAgo = theme.fg('muted', ` (${this.formatTimeAgo(thread.updatedAt)})`);\n\n // Show thread title when available, except the default placeholder title.\n const displayTitle = thread.title && thread.title !== 'New Thread' ? thread.title : null;\n\n let line = '';\n if (isSelected) {\n line = theme.fg('accent', `→ ${displayId}`) + pathTag + timeAgo + checkmark;\n } else {\n line = ` ${displayId}` + pathTag + timeAgo + checkmark;\n }\n\n this.listContainer.addChild(new Text(line, 0, 0));\n\n if (displayTitle) {\n this.listContainer.addChild(new Text(` ${theme.fg('muted', displayTitle)}`, 0, 0));\n } else {\n const preview = this.messagePreviews.get(thread.id);\n if (preview) {\n this.listContainer.addChild(new Text(` ${theme.fg('dim', `\"${preview}\"`)}`, 0, 0));\n }\n }\n }\n\n if (startIndex > 0 || endIndex < this.filteredThreads.length) {\n const scrollInfo = theme.fg('muted', `(${this.selectedIndex + 1}/${this.filteredThreads.length})`);\n this.listContainer.addChild(new Text(scrollInfo, 0, 0));\n }\n\n if (this.filteredThreads.length === 0) {\n this.listContainer.addChild(new Text(theme.fg('muted', 'No matching threads'), 0, 0));\n }\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n\n if (kb.matches(keyData, 'tui.select.up')) {\n if (this.filteredThreads.length === 0) return;\n this.selectedIndex = this.selectedIndex === 0 ? this.filteredThreads.length - 1 : this.selectedIndex - 1;\n this.updateList();\n this.tui.requestRender();\n this.scheduleMessagePreviewLoad({ delayMs: INTERACTION_PREVIEW_LOAD_DELAY_MS });\n } else if (kb.matches(keyData, 'tui.select.down')) {\n if (this.filteredThreads.length === 0) return;\n this.selectedIndex = this.selectedIndex === this.filteredThreads.length - 1 ? 0 : this.selectedIndex + 1;\n this.updateList();\n this.tui.requestRender();\n this.scheduleMessagePreviewLoad({ delayMs: INTERACTION_PREVIEW_LOAD_DELAY_MS });\n } else if (kb.matches(keyData, 'tui.select.confirm')) {\n const selected = this.filteredThreads[this.selectedIndex];\n if (selected) {\n this.onSelectCallback(selected);\n }\n } else if (kb.matches(keyData, 'tui.select.cancel')) {\n this.onCancelCallback();\n } else if (decodePrintableShortcut(keyData) === 'c' && this.onCloneCallback && !this.searchInput.getValue()) {\n const selected = this.filteredThreads[this.selectedIndex];\n if (selected) {\n this.onCloneCallback(selected);\n }\n } else {\n this.searchInput.handleInput(keyData);\n this.filterThreads(this.searchInput.getValue());\n this.tui.requestRender();\n this.scheduleMessagePreviewLoad({ delayMs: INTERACTION_PREVIEW_LOAD_DELAY_MS });\n }\n }\n}\n","import { ThreadLockError } from '../../utils/thread-lock.js';\nimport { ThreadSelectorComponent } from '../components/thread-selector.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { askCloneName, confirmClone, resetUIAfterClone } from './clone.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport function showThreadLockPrompt(\n ctx: SlashCommandContext,\n threadTitle: string,\n ownerPid: number,\n lockedThreadId?: string,\n): void {\n ctx.analytics?.trackInteractivePrompt('thread_lock_prompt', {\n threadId: lockedThreadId ?? ctx.state.harness.getCurrentThreadId(),\n resourceId: ctx.state.harness.getResourceId(),\n mode: ctx.state.harness.getCurrentModeId(),\n });\n\n void (async () => {\n const answer = await askModalQuestion(ctx.state.ui, {\n question: `Thread \"${threadTitle}\" is locked by pid ${ownerPid}. What would you like to do?`,\n options: [\n { label: 'Switch thread', description: 'Pick a different thread' },\n { label: 'New thread', description: 'Start a fresh thread' },\n ...(lockedThreadId ? [{ label: 'Clone thread', description: 'Fork from this thread' }] : []),\n { label: 'Exit', description: 'Exit' },\n ],\n });\n\n if (answer === 'Switch thread') {\n await handleThreadsCommand(ctx);\n } else if (answer === 'Clone thread' && lockedThreadId) {\n try {\n const customTitle = await askCloneName(ctx.state);\n const clonedThread = await ctx.state.harness.cloneThread({\n sourceThreadId: lockedThreadId,\n ...(customTitle ? { title: customTitle } : {}),\n });\n ctx.state.pendingNewThread = false;\n await resetUIAfterClone(ctx, clonedThread.title || clonedThread.id);\n } catch (error) {\n ctx.showError(`Failed to clone thread: ${error instanceof Error ? error.message : String(error)}`);\n }\n } else if (answer === 'New thread') {\n // pendingNewThread is already true from the caller\n } else {\n process.exit(0);\n }\n })();\n}\n\nexport async function handleThreadsCommand(ctx: SlashCommandContext): Promise<void> {\n const { state } = ctx;\n const threads = await state.harness.listThreads({ allResources: true });\n const currentId = state.pendingNewThread ? null : state.harness.getCurrentThreadId();\n const currentResourceId = state.harness.getResourceId();\n const threadById = new Map(threads.map(thread => [thread.id, thread] as const));\n\n for (const [threadId, cachedPreview] of [...state.threadPreviewCache.entries()]) {\n const thread = threadById.get(threadId);\n if (!thread || cachedPreview.updatedAt < thread.updatedAt.getTime()) {\n state.threadPreviewCache.delete(threadId);\n state.attemptedThreadPreviewIds.delete(threadId);\n }\n }\n\n for (const threadId of [...state.attemptedThreadPreviewIds]) {\n if (!threadById.has(threadId)) {\n state.attemptedThreadPreviewIds.delete(threadId);\n }\n }\n\n if (threads.length === 0) {\n ctx.showInfo('No threads yet. Send a message to create one.');\n return;\n }\n // console.log(cachedPreview);\n\n return new Promise(resolve => {\n const selector = new ThreadSelectorComponent({\n tui: state.ui,\n threads,\n currentThreadId: currentId,\n currentResourceId,\n currentProjectPath: state.projectInfo.rootPath,\n initialMessagePreviews: new Map(\n [...state.threadPreviewCache.entries()].map(\n ([threadId, cachedPreview]) => [threadId, cachedPreview.preview] as const,\n ),\n ),\n initialAttemptedPreviewThreadIds: state.attemptedThreadPreviewIds,\n onMessagePreviewsLoaded: (previews, attemptedThreadIds) => {\n state.threadPreviewCache = new Map(\n [...previews.entries()].flatMap(([threadId, preview]) => {\n const thread = threadById.get(threadId);\n return thread ? [[threadId, { preview, updatedAt: thread.updatedAt.getTime() }] as const] : [];\n }),\n );\n state.attemptedThreadPreviewIds = attemptedThreadIds;\n },\n getMessagePreviews: async (threadIds: string[]) => {\n return new Map(\n threadIds.flatMap(threadId => {\n const preview = state.threadPreviewCache.get(threadId)?.preview;\n return preview ? [[threadId, preview] as const] : [];\n }),\n );\n },\n onSelect: async thread => {\n state.ui.hideOverlay();\n\n if (thread.id === currentId) {\n resolve();\n return;\n }\n\n if (thread.resourceId !== currentResourceId) {\n state.harness.setResourceId({ resourceId: thread.resourceId });\n }\n try {\n await state.harness.switchThread({ threadId: thread.id });\n } catch (error) {\n if (error instanceof ThreadLockError) {\n showThreadLockPrompt(ctx, thread.title || thread.id, error.ownerPid, thread.id);\n } else {\n ctx.showError(`Failed to switch thread: ${error instanceof Error ? error.message : String(error)}`);\n }\n resolve();\n return;\n }\n state.pendingNewThread = false;\n\n state.chatContainer.clear();\n state.allToolComponents = [];\n state.allSystemReminderComponents = [];\n state.messageComponentsById.clear();\n state.allShellComponents = [];\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n await ctx.renderExistingMessages();\n\n ctx.showInfo(`Switched to: ${thread.title || thread.id}`);\n resolve();\n },\n onClone: async thread => {\n state.ui.hideOverlay();\n if (!(await confirmClone(state, thread.title || thread.id))) {\n resolve();\n return;\n }\n try {\n const customTitle = await askCloneName(state);\n const clonedThread = await state.harness.cloneThread({\n sourceThreadId: thread.id,\n ...(customTitle ? { title: customTitle } : {}),\n });\n state.pendingNewThread = false;\n await resetUIAfterClone(ctx, clonedThread.title || clonedThread.id);\n } catch (error) {\n ctx.showError(`Failed to clone thread: ${error instanceof Error ? error.message : String(error)}`);\n }\n resolve();\n },\n onCancel: () => {\n state.ui.hideOverlay();\n resolve();\n },\n });\n\n showModalOverlay(state.ui, selector, { widthPercent: 0.8, maxHeight: '60%' });\n selector.focused = true;\n });\n}\n","import type { SlashCommandContext } from './types.js';\n\nfunction formatDateWithLocal(date: Date): string {\n return `${date.toISOString()} [${date.toLocaleString()}]`;\n}\n\nexport async function handleThreadCommand(ctx: SlashCommandContext): Promise<void> {\n const { harness, state } = ctx;\n const currentThreadId = harness.getCurrentThreadId();\n const currentResourceId = harness.getResourceId();\n const isPendingNewThread = state.pendingNewThread;\n\n if (!currentThreadId) {\n const lines = ['No active thread.', `Resource: ${currentResourceId}`];\n\n if (isPendingNewThread) {\n lines.push('Pending new thread: yes');\n }\n\n ctx.showInfo(lines.join('\\n'));\n return;\n }\n\n const threads = await harness.listThreads({ allResources: true });\n const thread = threads.find(t => t.id === currentThreadId);\n\n const cloneMetadata =\n thread?.metadata && typeof thread.metadata === 'object'\n ? (thread.metadata as { clone?: { sourceThreadId?: string; clonedAt?: Date | string } }).clone\n : undefined;\n\n const lines = [\n `Title: ${thread?.title?.trim() || '(untitled)'}`,\n `ID: ${currentThreadId}`,\n `Resource: ${thread?.resourceId ?? currentResourceId}`,\n ];\n\n if (thread) {\n lines.push(`Created: ${formatDateWithLocal(thread.createdAt)}`);\n lines.push(`Updated: ${formatDateWithLocal(thread.updatedAt)}`);\n }\n\n if (isPendingNewThread) {\n lines.push('Pending new thread: yes');\n }\n\n if (cloneMetadata?.sourceThreadId) {\n lines.push(`Forked from: ${cloneMetadata.sourceThreadId}`);\n if (cloneMetadata.clonedAt) {\n const clonedAt =\n cloneMetadata.clonedAt instanceof Date ? cloneMetadata.clonedAt : new Date(cloneMetadata.clonedAt);\n lines.push(`Forked at: ${formatDateWithLocal(clonedAt)}`);\n }\n }\n\n ctx.showInfo(lines.join('\\n'));\n}\n","import { askModalQuestion } from '../modal-question.js';\nimport { theme } from '../theme.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport async function handleThreadTagDirCommand(ctx: SlashCommandContext): Promise<void> {\n const { state } = ctx;\n const threadId = state.harness.getCurrentThreadId();\n if (!threadId && state.pendingNewThread) {\n ctx.showInfo('No active thread yet — send a message first.');\n return;\n }\n if (!threadId) {\n ctx.showInfo('No active thread.');\n return;\n }\n\n const projectPath = (state.harness.getState() as any)?.projectPath as string | undefined;\n if (!projectPath) {\n ctx.showInfo('Could not detect current project path.');\n return;\n }\n\n const dirName = projectPath.split('/').pop() || projectPath;\n\n const answer = await askModalQuestion(state.ui, {\n question: `Tag this thread with directory \"${dirName}\"?\\n ${theme.fg('dim', projectPath)}`,\n options: [{ label: 'Yes' }, { label: 'No' }],\n });\n if (answer?.toLowerCase().startsWith('y')) {\n await state.harness.setThreadSetting({ key: 'projectPath', value: projectPath });\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { AskQuestionDialogComponent } from '../components/ask-question-dialog.js';\nimport { showModalOverlay } from '../overlay.js';\nimport type { SlashCommandContext } from './types.js';\n\nasync function sandboxAddPath(ctx: SlashCommandContext, rawPath: string): Promise<void> {\n const harnessState = ctx.state.harness.getState() as {\n sandboxAllowedPaths?: string[];\n };\n const currentPaths = harnessState.sandboxAllowedPaths ?? [];\n const resolved = path.resolve(rawPath);\n\n if (currentPaths.includes(resolved)) {\n ctx.showInfo(`Path already allowed: ${resolved}`);\n return;\n }\n try {\n await fs.promises.access(resolved);\n } catch {\n ctx.showError(`Path does not exist: ${resolved}`);\n return;\n }\n const updated = [...currentPaths, resolved];\n ctx.state.harness.setState({ sandboxAllowedPaths: updated } as any);\n await ctx.state.harness.setThreadSetting({ key: 'sandboxAllowedPaths', value: updated });\n ctx.showInfo(`Added to sandbox: ${resolved}`);\n}\n\nasync function sandboxRemovePath(ctx: SlashCommandContext, rawPath: string, currentPaths: string[]): Promise<void> {\n const resolved = path.resolve(rawPath);\n const match = currentPaths.find(p => p === resolved || p === rawPath);\n if (!match) {\n ctx.showError(`Path not in allowed list: ${resolved}`);\n return;\n }\n const updated = currentPaths.filter(p => p !== match);\n ctx.state.harness.setState({ sandboxAllowedPaths: updated } as any);\n await ctx.state.harness.setThreadSetting({ key: 'sandboxAllowedPaths', value: updated });\n ctx.showInfo(`Removed from sandbox: ${match}`);\n}\n\nasync function showSandboxAddPrompt(ctx: SlashCommandContext): Promise<void> {\n return new Promise<void>(resolve => {\n const questionComponent = new AskQuestionDialogComponent({\n question: 'Enter path to allow',\n tui: ctx.state.ui,\n onSubmit: async answer => {\n ctx.state.ui.hideOverlay();\n await sandboxAddPath(ctx, answer);\n resolve();\n },\n onCancel: () => {\n ctx.state.ui.hideOverlay();\n resolve();\n },\n });\n\n showModalOverlay(ctx.state.ui, questionComponent, { maxHeight: '50%' });\n questionComponent.focused = true;\n });\n}\n\nexport async function handleSandboxCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const harnessState = ctx.state.harness.getState() as {\n sandboxAllowedPaths?: string[];\n };\n const currentPaths = harnessState.sandboxAllowedPaths ?? [];\n\n const subcommand = args[0]?.toLowerCase();\n if (subcommand === 'add' && args.length > 1) {\n await sandboxAddPath(ctx, args.slice(1).join(' ').trim());\n return;\n }\n if (subcommand === 'remove' && args.length > 1) {\n await sandboxRemovePath(ctx, args.slice(1).join(' ').trim(), currentPaths);\n return;\n }\n\n const options: Array<{ label: string; description?: string }> = [\n { label: 'Add path', description: 'Allow access to another directory' },\n ];\n\n for (const p of currentPaths) {\n options.push({\n label: `Remove: ${p}`,\n description: p,\n });\n }\n\n const pathsSummary = currentPaths.length\n ? `${currentPaths.length} allowed path${currentPaths.length > 1 ? 's' : ''}`\n : 'no extra paths';\n\n return new Promise<void>(resolve => {\n const questionComponent = new AskQuestionDialogComponent({\n question: `Sandbox settings (${pathsSummary})`,\n options,\n tui: ctx.state.ui,\n onSubmit: async answer => {\n ctx.state.ui.hideOverlay();\n if (answer === 'Add path') {\n await showSandboxAddPrompt(ctx);\n } else if (answer.startsWith('Remove: ')) {\n const targetPath = answer.replace('Remove: ', '');\n if (currentPaths.includes(targetPath)) {\n await sandboxRemovePath(ctx, targetPath, currentPaths);\n }\n }\n resolve();\n },\n onCancel: () => {\n ctx.state.ui.hideOverlay();\n resolve();\n },\n });\n\n showModalOverlay(ctx.state.ui, questionComponent, { maxHeight: '60%' });\n questionComponent.focused = true;\n });\n}\n","/**\n * Platform-specific clipboard image extraction.\n *\n * Checks the system clipboard for image data and returns it as base64.\n * Uses synchronous execution (execSync) since this only runs on paste events.\n */\n\nimport { execSync } from 'node:child_process';\nimport { readFileSync, unlinkSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport { join } from 'node:path';\n\nexport interface ClipboardImage {\n data: string; // base64-encoded image data or a remote image URL\n mimeType: string;\n}\n\n/**\n * Read plain text from the system clipboard.\n * Returns null if clipboard is empty or reading fails.\n */\nexport function getClipboardText(): string | null {\n try {\n if (process.platform === 'darwin') {\n const text = execSync('pbpaste', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return text.length > 0 ? text : null;\n }\n if (process.platform === 'linux') {\n // Try xclip first, then wl-paste\n try {\n const text = execSync('xclip -selection clipboard -o', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return text.length > 0 ? text : null;\n } catch {\n const text = execSync('wl-paste', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return text.length > 0 ? text : null;\n }\n }\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Write plain text to the system clipboard.\n * Returns true on success, false on failure.\n */\nexport function setClipboardText(text: string): boolean {\n try {\n if (process.platform === 'darwin') {\n execSync('pbcopy', {\n input: text,\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return true;\n }\n if (process.platform === 'linux') {\n try {\n execSync('xclip -selection clipboard', {\n input: text,\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return true;\n } catch {\n execSync('wl-copy', {\n input: text,\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return true;\n }\n }\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Check the system clipboard for image data and return it as base64.\n * Returns null if no image data is found or extraction fails.\n */\nexport function getClipboardImage(): ClipboardImage | null {\n try {\n if (process.platform === 'darwin') {\n return getMacClipboardImage();\n }\n if (process.platform === 'linux') {\n return getLinuxClipboardImage();\n }\n return null;\n } catch {\n return null;\n }\n}\n\n// =============================================================================\n// macOS\n// =============================================================================\n\nfunction getMacClipboardImage(): ClipboardImage | null {\n return (\n tryReadMacClipboardImage({\n coercion: '«class PNGf»',\n extension: 'png',\n mimeType: 'image/png',\n }) ??\n tryReadMacClipboardImage({\n coercion: 'TIFF picture',\n extension: 'tiff',\n mimeType: 'image/tiff',\n }) ??\n tryReadMacClipboardImage({\n coercion: '«class TIFF»',\n extension: 'tiff',\n mimeType: 'image/tiff',\n })\n );\n}\n\nfunction tryReadMacClipboardImage({\n coercion,\n extension,\n mimeType,\n}: {\n coercion: string;\n extension: string;\n mimeType: string;\n}): ClipboardImage | null {\n const tmpFile = join(tmpdir(), `mastra-clipboard-${Date.now()}.${extension}`);\n\n try {\n const script = `\n\t\t\tset theImage to the clipboard as ${coercion}\n\t\t\tset theFile to open for access POSIX file \"${tmpFile}\" with write permission\n\t\t\twrite theImage to theFile\n\t\t\tclose access theFile\n\t\t`;\n execSync(`osascript -e '${script.replace(/'/g, \"'\\\\''\")}'`, {\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n const buffer = readFileSync(tmpFile);\n if (!Buffer.isBuffer(buffer) || buffer.length === 0) {\n return null;\n }\n\n return {\n data: buffer.toString('base64'),\n mimeType,\n };\n } catch {\n return null;\n } finally {\n try {\n unlinkSync(tmpFile);\n } catch {\n // ignore cleanup errors\n }\n }\n}\n\n// =============================================================================\n// Linux\n// =============================================================================\n\nfunction getLinuxClipboardImage(): ClipboardImage | null {\n // Try xclip first, then wl-paste (Wayland)\n return getLinuxClipboardImageXclip() ?? getLinuxClipboardImageWlPaste();\n}\n\nfunction getLinuxClipboardImageXclip(): ClipboardImage | null {\n try {\n // Check available targets\n const targets = execSync('xclip -selection clipboard -target TARGETS -o', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (!targets.includes('image/png')) {\n return null;\n }\n\n // Extract PNG data\n const buffer = execSync('xclip -selection clipboard -target image/png -o', {\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe'],\n maxBuffer: 50 * 1024 * 1024, // 50MB max\n });\n\n if (!Buffer.isBuffer(buffer) || buffer.length === 0) {\n return null;\n }\n\n return {\n data: buffer.toString('base64'),\n mimeType: 'image/png',\n };\n } catch {\n return null;\n }\n}\n\nfunction getLinuxClipboardImageWlPaste(): ClipboardImage | null {\n try {\n // Check if wl-paste is available and clipboard has image\n const types = execSync('wl-paste --list-types', {\n encoding: 'utf-8',\n timeout: 3000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n if (!types.includes('image/png')) {\n return null;\n }\n\n // Extract PNG data\n const buffer = execSync('wl-paste --type image/png', {\n timeout: 5000,\n stdio: ['pipe', 'pipe', 'pipe'],\n maxBuffer: 50 * 1024 * 1024,\n });\n\n if (!Buffer.isBuffer(buffer) || buffer.length === 0) {\n return null;\n }\n\n return {\n data: buffer.toString('base64'),\n mimeType: 'image/png',\n };\n } catch {\n return null;\n }\n}\n","import chalk from 'chalk';\nimport { getThemeMode } from '../theme.js';\n\nconst GRADIENT_WIDTH = 30; // Width of the bright spot as percentage of total text\nconst BASE_COLOR = [22, 200, 88]; // Brand green #16c858\nfunction getMinBrightness(): number {\n return getThemeMode() === 'dark' ? 0.45 : 0.55;\n}\n\n/**\n * Parse a hex color string to [r, g, b].\n */\nfunction hexToRgb(hex: string): [number, number, number] {\n const h = hex.replace('#', '');\n return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];\n}\n\n/** Idle brightness target for fade-out interpolation */\nconst IDLE_BRIGHTNESS = 0.8;\n\n/**\n * Applies a sweeping gradient animation to a plain text string.\n * A bright spot moves left-to-right across the text.\n *\n * @param text - Plain text to colorize (no ANSI codes)\n * @param offset - Current animation offset (0-1, wraps around)\n * @param color - Optional hex color override (defaults to green accent)\n * @param fadeProgress - 0 = full animation, 1 = fully idle (flattens gradient)\n * @returns Chalk-colored string\n */\nexport function applyGradientSweep(text: string, offset: number, color?: string, fadeProgress = 0): string {\n const chars = [...text];\n const totalChars = chars.length;\n if (totalChars === 0) return text;\n\n const baseColor = color ? hexToRgb(color) : BASE_COLOR;\n const gradientCenter = (offset % 1) * 100;\n const halfGradient = GRADIENT_WIDTH / 2;\n const minBrightness = getMinBrightness();\n const brightnessRange = 1 - minBrightness;\n\n // Batch consecutive chars with same RGB to reduce chalk.rgb() calls\n let result = '';\n let batchChars = '';\n let batchR = -1,\n batchG = -1,\n batchB = -1;\n\n for (let i = 0; i < totalChars; i++) {\n const char = chars[i]!;\n if (char === ' ') {\n // Flush current batch before space\n if (batchChars) {\n result += chalk.rgb(batchR, batchG, batchB)(batchChars);\n batchChars = '';\n }\n result += ' ';\n continue;\n }\n\n const charPosition = (i / totalChars) * 100;\n let distance = Math.abs(charPosition - gradientCenter);\n if (distance > 50) distance = 100 - distance;\n\n const normalizedDistance = Math.min(distance / halfGradient, 1);\n const animBrightness = minBrightness + brightnessRange * (1 - normalizedDistance);\n const brightness = animBrightness + (IDLE_BRIGHTNESS - animBrightness) * fadeProgress;\n\n const r = Math.floor(baseColor[0]! * brightness);\n const g = Math.floor(baseColor[1]! * brightness);\n const b = Math.floor(baseColor[2]! * brightness);\n\n // If same color as current batch, append; otherwise flush and start new batch\n if (r === batchR && g === batchG && b === batchB) {\n batchChars += char;\n } else {\n if (batchChars) {\n result += chalk.rgb(batchR, batchG, batchB)(batchChars);\n }\n batchChars = char;\n batchR = r;\n batchG = g;\n batchB = b;\n }\n }\n\n if (batchChars) {\n result += chalk.rgb(batchR, batchG, batchB)(batchChars);\n }\n\n return result;\n}\n\n/**\n * Manages the gradient sweep animation state.\n * Call `start()` when agent begins working, `stop()` when idle.\n * On each tick, call `getOffset()` to get the current sweep position.\n */\nexport class GradientAnimator {\n private offset = 0;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n private onTick: () => void;\n private _isFadingOut = false;\n private _isFadingIn = false;\n private _fadeProgress = 0; // 0 = full animation, 1 = fully idle\n\n constructor(onTick: () => void) {\n this.onTick = onTick;\n }\n\n start(): void {\n if (this.intervalId && !this._isFadingOut) return;\n // Cancel any ongoing fade-out\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n this._isFadingOut = false;\n this._isFadingIn = true;\n this._fadeProgress = 1; // Start from idle, fade toward full animation\n this.offset = 0;\n this.intervalId = setInterval(() => {\n this.offset += 0.03; // Speed: full sweep in ~55 ticks\n if (this._isFadingIn) {\n this._fadeProgress -= 0.06; // ~17 steps over ~500ms\n if (this._fadeProgress <= 0) {\n this._fadeProgress = 0;\n this._isFadingIn = false;\n }\n }\n this.onTick();\n }, 80);\n }\n\n /**\n * Smoothly fade the gradient to idle state over ~500ms.\n */\n fadeOut(): void {\n if (!this.intervalId) return;\n if (this._isFadingOut) return;\n this._isFadingOut = true;\n this._isFadingIn = false;\n this._fadeProgress = 0;\n // Replace the animation interval with a fade interval\n clearInterval(this.intervalId);\n this.intervalId = setInterval(() => {\n this._fadeProgress += 0.08; // ~12 steps over ~500ms\n if (this._fadeProgress >= 1) {\n this._fadeProgress = 1;\n this.stop();\n }\n this.onTick();\n }, 40);\n }\n\n stop(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n this._isFadingOut = false;\n this._isFadingIn = false;\n this._fadeProgress = 0;\n this.offset = 0;\n }\n\n getOffset(): number {\n return this.offset;\n }\n\n /** 0 = full animation, 1 = fully idle. Use to interpolate colors. */\n getFadeProgress(): number {\n return this._fadeProgress;\n }\n\n isFadingOut(): boolean {\n return this._isFadingOut;\n }\n\n isFadingIn(): boolean {\n return this._isFadingIn;\n }\n\n isRunning(): boolean {\n return this.intervalId !== null;\n }\n}\n","/**\n * Observational Memory progress indicator component.\n * Shows when OM is observing or reflecting on conversation history.\n */\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport { defaultOMProgressState } from '@mastra/core/harness';\nimport type { OMBufferedStatus, OMProgressState, OMStatus } from '@mastra/core/harness';\nimport chalk from 'chalk';\nimport { theme, mastra } from '../theme.js';\n\n// Re-export types from core for backward compatibility\nexport type { OMBufferedStatus, OMProgressState, OMStatus };\nexport { defaultOMProgressState };\n\n/**\n * Component that displays OM progress in the status line area.\n * Shows a compact indicator when observation/reflection is happening.\n */\nexport class OMProgressComponent extends Container {\n private state: OMProgressState = defaultOMProgressState();\n private statusText: Text;\n\n constructor() {\n super();\n this.statusText = new Text('');\n this.children.push(this.statusText);\n }\n\n updateProgress(progress: {\n pendingTokens: number;\n threshold: number;\n thresholdPercent: number;\n observationTokens: number;\n reflectionThreshold: number;\n reflectionThresholdPercent: number;\n }): void {\n this.state.pendingTokens = progress.pendingTokens;\n this.state.threshold = progress.threshold;\n this.state.thresholdPercent = progress.thresholdPercent;\n this.state.observationTokens = progress.observationTokens;\n this.state.reflectionThreshold = progress.reflectionThreshold;\n this.state.reflectionThresholdPercent = progress.reflectionThresholdPercent;\n this.updateDisplay();\n }\n\n startObservation(cycleId: string, _tokensToObserve: number): void {\n this.state.status = 'observing';\n this.state.cycleId = cycleId;\n this.state.startTime = Date.now();\n this.updateDisplay();\n }\n\n endObservation(): void {\n this.state.status = 'idle';\n this.state.cycleId = undefined;\n this.state.startTime = undefined;\n this.updateDisplay();\n }\n\n startReflection(cycleId: string): void {\n this.state.status = 'reflecting';\n this.state.cycleId = cycleId;\n this.state.startTime = Date.now();\n this.updateDisplay();\n }\n\n endReflection(): void {\n this.state.status = 'idle';\n this.state.cycleId = undefined;\n this.state.startTime = undefined;\n this.updateDisplay();\n }\n\n failOperation(): void {\n this.state.status = 'idle';\n this.state.cycleId = undefined;\n this.state.startTime = undefined;\n this.updateDisplay();\n }\n\n getStatus(): OMStatus {\n return this.state.status;\n }\n\n private updateDisplay(): void {\n if (this.state.status === 'idle') {\n // Show threshold progress when idle (if any pending tokens)\n if (this.state.thresholdPercent > 0) {\n const percent = Math.round(this.state.thresholdPercent);\n const bar = this.renderProgressBar(percent, 10);\n this.statusText.setText(theme.fg('muted', `OM ${bar} ${percent}%`));\n } else {\n this.statusText.setText('');\n }\n } else if (this.state.status === 'observing') {\n const elapsed = this.state.startTime ? Math.round((Date.now() - this.state.startTime) / 1000) : 0;\n const spinner = this.getSpinner();\n this.statusText.setText(chalk.hex(mastra.orange)(`${spinner} Observing... ${elapsed}s`));\n } else if (this.state.status === 'reflecting') {\n const elapsed = this.state.startTime ? Math.round((Date.now() - this.state.startTime) / 1000) : 0;\n const spinner = this.getSpinner();\n this.statusText.setText(chalk.hex(mastra.pink)(`${spinner} Reflecting... ${elapsed}s`));\n }\n }\n\n private renderProgressBar(percent: number, width: number): string {\n const filled = Math.min(width, Math.round((percent / 100) * width));\n const empty = width - filled;\n const bar = '━'.repeat(filled) + '─'.repeat(empty);\n\n // Color based on threshold proximity — Mastra brand colors\n if (percent >= 90) {\n return chalk.hex(mastra.red)(bar); // Mastra red\n } else if (percent >= 70) {\n return chalk.hex(mastra.orange)(bar); // Mastra orange\n } else {\n return chalk.hex(mastra.darkGray)(bar); // Mastra dark gray\n }\n }\n private spinnerFrame = 0;\n private getSpinner(): string {\n const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n this.spinnerFrame = (this.spinnerFrame + 1) % frames.length;\n return frames[this.spinnerFrame]!;\n }\n\n render(maxWidth: number): string[] {\n this.updateDisplay();\n return this.statusText.render(maxWidth);\n }\n}\n\n/** Format token count without k suffix (e.g., 7234 -> \"7.2\", 200 -> \"0.2\", 0 -> \"0\") */\nfunction formatTokensValue(n: number): string {\n if (n === 0) return '0';\n const k = n / 1000;\n const s = k.toFixed(1);\n return s.endsWith('.0') ? s.slice(0, -2) : s;\n}\n\n/** Format token threshold with k suffix (e.g., 30000 -> \"30k\", 40000 -> \"40k\") */\nfunction formatTokensThreshold(n: number): string {\n const k = n / 1000;\n const s = k.toFixed(1);\n return (s.endsWith('.0') ? s.slice(0, -2) : s) + 'k';\n}\n\nfunction colorByPercent(text: string, percent: number): string {\n if (percent >= 90) return chalk.hex(mastra.red)(text); // Mastra red\n if (percent >= 70) return chalk.hex(mastra.orange)(text); // Mastra orange\n return chalk.hex('#71717a')(text); // Zinc-500\n}\n/**\n * Format OM observation threshold for status bar.\n * Compact levels (most → least info):\n * \"full\": messages 12.5k/30k ↓2.1k\n * undefined: msg 12.5k/30k ↓2.1k\n * \"noBuffer\": msg 12.5k/30k\n * \"percentOnly\": msg 42%\n *\n * @param labelStyler - Optional function to style the label text (for animation).\n * Receives the raw label string, returns styled string.\n */\nexport function formatObservationStatus(\n state: OMProgressState,\n compact?: 'percentOnly' | 'noBuffer' | 'full',\n labelStyler?: (label: string) => string,\n): string {\n // Status is now shown in the mode badge, so just show the metrics\n const percent = Math.round(state.thresholdPercent);\n const pct = colorByPercent(`${percent}%`, percent);\n const defaultStyler = (s: string) => chalk.hex(mastra.specialGray)(s);\n const styleLabel = labelStyler ?? defaultStyler;\n if (compact === 'percentOnly') {\n return styleLabel('msg ') + pct;\n }\n const label = compact === 'full' ? 'messages' : 'msg';\n const fraction = `${formatTokensValue(state.pendingTokens)}/${formatTokensThreshold(state.threshold)}`;\n const buffered =\n compact !== 'noBuffer' && state.buffered.observations.projectedMessageRemoval > 0\n ? chalk.italic(\n theme.fg('muted', ` ↓${formatTokensThreshold(state.buffered.observations.projectedMessageRemoval)}`),\n )\n : '';\n return styleLabel(`${label} `) + colorByPercent(fraction, percent) + buffered;\n}\n/**\n * Format OM reflection threshold for status bar.\n * Compact levels (most → least info):\n * \"full\": memory 8.2k/40k ↓1.2k\n * undefined: mem 8.2k/40k ↓1.2k\n * \"noBuffer\": mem 8.2k/40k\n * \"percentOnly\": mem 21%\n *\n * @param labelStyler - Optional function to style the label text (for animation).\n * Receives the raw label string, returns styled string.\n */\nexport function formatReflectionStatus(\n state: OMProgressState,\n compact?: 'percentOnly' | 'noBuffer' | 'full',\n labelStyler?: (label: string) => string,\n): string {\n // Status is now shown in the mode badge, so just show the metrics\n const percent = Math.round(state.reflectionThresholdPercent);\n const pct = colorByPercent(`${percent}%`, percent);\n const defaultStyler = (s: string) => chalk.hex(mastra.specialGray)(s);\n const styleLabel = labelStyler ?? defaultStyler;\n const label = styleLabel(compact === 'full' ? 'memory' : 'mem') + ' ';\n if (compact === 'percentOnly') {\n return label + pct;\n }\n const fraction = `${formatTokensValue(state.observationTokens)}/${formatTokensThreshold(state.reflectionThreshold)}`;\n const savings = state.buffered.reflection.inputObservationTokens - state.buffered.reflection.observationTokens;\n const buffered =\n compact !== 'noBuffer' && state.buffered.reflection.status === 'complete' && savings > 0\n ? chalk.italic(theme.fg('muted', ` ↓${formatTokensThreshold(savings)}`))\n : '';\n return label + colorByPercent(fraction, percent) + buffered;\n}\n\n/**\n * @deprecated Use formatObservationStatus and formatReflectionStatus instead\n */\nexport function formatOMStatus(state: OMProgressState): string {\n return formatObservationStatus(state);\n}\n","/**\n * Status line rendering — builds the bottom-of-screen status bar\n * showing model, mode, memory progress, and project path.\n */\nimport { visibleWidth } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { applyGradientSweep } from './components/obi-loader.js';\nimport { formatObservationStatus, formatReflectionStatus } from './components/om-progress.js';\nimport type { GithubPrSubscriptionBadge, TUIState } from './state.js';\nimport { theme, mastra, tintHex, getTermWidth, extendedColors } from './theme.js';\n\n// Colors for OM modes — read from proxy at render time so they pick up contrast adaptation\nconst getObserverColor = () => mastra.orange;\nconst getReflectorColor = () => mastra.pink;\n\n/** Returns true if a thread title is generic/auto-generated and should not be displayed. */\nfunction isGenericTitle(title: string): boolean {\n const lower = title.toLowerCase().trim();\n return (\n lower === 'new thread' ||\n lower.startsWith('new thread') ||\n lower.startsWith('clone of') ||\n lower.startsWith('untitled')\n );\n}\n\nfunction formatGithubPrLabel(\n state: TUIState,\n subscription: GithubPrSubscriptionBadge,\n): { plain: string; styled: string } {\n const plain = `PR#${subscription.prNumber}`;\n const label = plain;\n const color = subscription.lastNotificationPriority === 'high' ? mastra.orange : extendedColors.skyBlue;\n if (state.githubPrPollingActive && state.githubPrGradientAnimator?.isRunning()) {\n return {\n plain: label,\n styled: applyGradientSweep(\n label,\n state.githubPrGradientAnimator.getOffset(),\n color,\n state.githubPrGradientAnimator.getFadeProgress(),\n ),\n };\n }\n return { plain: label, styled: chalk.hex(color)(label) };\n}\n\nfunction formatGoalDuration(goal: { startedAt: string; activeStartedAt?: string; activeDurationMs?: number }): string {\n const activeStartedAt = goal.activeStartedAt ?? (goal.activeDurationMs === undefined ? goal.startedAt : undefined);\n const startedMs = activeStartedAt ? Date.parse(activeStartedAt) : NaN;\n const activeRunMs = Number.isFinite(startedMs) ? Math.max(0, Date.now() - startedMs) : 0;\n const elapsedMinutes = Math.floor(((goal.activeDurationMs ?? 0) + activeRunMs) / 60_000);\n if (elapsedMinutes < 1) return '<1m';\n\n const days = Math.floor(elapsedMinutes / 1_440);\n const hours = Math.floor((elapsedMinutes % 1_440) / 60);\n const minutes = elapsedMinutes % 60;\n\n if (days > 0) return hours > 0 ? `${days}days${hours}hr` : `${days}days`;\n if (hours > 0) return minutes > 0 ? `${hours}hr${minutes}m` : `${hours}hr`;\n return `${minutes}m`;\n}\n\n/**\n * Update the status line at the bottom of the TUI.\n * Progressively reduces content to fit the terminal width.\n */\nexport function updateStatusLine(state: TUIState): void {\n if (!state.statusLine) return;\n const termWidth = getTermWidth();\n const SEP = ' '; // double-space separator between parts\n\n // --- Determine if we're showing observer/reflector instead of main mode ---\n const omStatus = state.harness.getDisplayState().omProgress.status;\n const isJudging = Boolean(state.activeGoalJudge);\n const isObserving = omStatus === 'observing';\n const isReflecting = omStatus === 'reflecting';\n const showOMMode = !isJudging && (isObserving || isReflecting);\n\n // --- Mode badge ---\n let modeBadge = '';\n let modeBadgeWidth = 0;\n const modes = state.harness.listModes();\n const currentMode = modes.length > 1 ? state.harness.getCurrentMode() : undefined;\n const judgeModeColor = mastra.blue;\n // Use judge color for goal judge activity, OM color for OM activity, otherwise mode color\n const currentModeColor = currentMode?.metadata?.color;\n const mainModeColor = typeof currentModeColor === 'string' ? currentModeColor : undefined;\n const modeColor = isJudging\n ? judgeModeColor\n : showOMMode\n ? isObserving\n ? getObserverColor()\n : getReflectorColor()\n : mainModeColor;\n // Tinted near-black background from mode color (shared between badge and model ID)\n const tintBg = modeColor ? tintHex(modeColor, 0.15) : undefined;\n // Badge name: use judge/OM mode name for background activity, otherwise main mode name\n const badgeName = isJudging\n ? 'judge'\n : showOMMode\n ? isObserving\n ? 'observe'\n : 'reflect'\n : currentMode\n ? currentMode.name || currentMode.id || 'unknown'\n : undefined;\n if (badgeName && modeColor) {\n const [mcr, mcg, mcb] = [\n parseInt(modeColor.slice(1, 3), 16),\n parseInt(modeColor.slice(3, 5), 16),\n parseInt(modeColor.slice(5, 7), 16),\n ];\n // Pulse the badge bg brightness opposite to the gradient sweep\n let badgeBrightness = 0.9;\n if (state.gradientAnimator?.isRunning()) {\n const fade = state.gradientAnimator.getFadeProgress();\n const easedFade = fade * fade * (3 - 2 * fade); // smoothstep\n const offset = state.gradientAnimator.getOffset() % 1;\n // Inverted phase (+ PI), range 0.65-0.95\n const animBrightness = 0.65 + 0.3 * (0.5 + 0.5 * Math.sin(offset * Math.PI * 2 + Math.PI));\n // Interpolate toward idle (0.9) as fade progresses\n badgeBrightness = animBrightness + (0.9 - animBrightness) * easedFade;\n }\n const mr = Math.floor(mcr * badgeBrightness);\n const mg = Math.floor(mcg * badgeBrightness);\n const mb = Math.floor(mcb * badgeBrightness);\n const rightHalf = tintBg ? chalk.rgb(mr, mg, mb).bgHex(tintBg)('▌') : chalk.rgb(mr, mg, mb)('▌');\n modeBadge =\n chalk.rgb(mr, mg, mb)('▐') + chalk.bgRgb(mr, mg, mb).hex('#000000').bold(badgeName.toLowerCase()) + rightHalf;\n modeBadgeWidth = badgeName.length + 2;\n } else if (badgeName) {\n modeBadge = ' ' + theme.fg('dim', badgeName) + ' ';\n modeBadgeWidth = badgeName.length + 2;\n }\n\n // --- Collect raw data ---\n // Show judge/OM model during background activity, otherwise main model\n const rawModelId =\n (isJudging\n ? state.activeGoalJudge?.modelId\n : showOMMode\n ? isObserving\n ? state.harness.getObserverModelId()\n : state.harness.getReflectorModelId()\n : state.harness.getFullModelId()) ?? '';\n // Rewrite Fireworks AI long paths: fireworks-ai/accounts/fireworks/models/<name> → fireworks/<name>\n let fullModelId = rawModelId.startsWith('fireworks-ai/accounts/fireworks/models/')\n ? 'fireworks/' + rawModelId.slice('fireworks-ai/accounts/fireworks/models/'.length)\n : rawModelId;\n // Rewrite version separators where 'p' stands for '.': e.g. kimi-k2p6 → kimi-k2.6, minimax-m2p7 → minimax-m2.7\n fullModelId = fullModelId.replace(/\\b([a-z]+-[a-z])(\\d+)p(\\d+)\\b/g, '$1$2.$3');\n const compactModelId = (modelId: string): string => {\n const parts = modelId.split('/');\n if (parts.length >= 3) {\n return `${parts[0]}/${parts.at(-1)!}`;\n }\n if (parts.length === 2) {\n return parts[1] ?? modelId;\n }\n return modelId;\n };\n\n // e.g. \"anthropic/claude-sonnet-4-20250514\" → \"claude-sonnet-4-20250514\"\n // e.g. \"mastra/anthropic/claude-opus-4.6\" → \"mastra/claude-opus-4.6\"\n const shortModelId = compactModelId(fullModelId);\n // e.g. \"claude-opus-4-6\" → \"opus 4.6\", \"mastra/anthropic/claude-opus-4.6\" → \"mastra/claude-opus-4.6\"\n const tinyModelId = shortModelId.includes('/')\n ? shortModelId\n : shortModelId.replace(/^claude-/, '').replace(/^(\\w+)-(\\d+)-(\\d{1,2})$/, '$1 $2.$3');\n\n const homedir = process.env.HOME || process.env.USERPROFILE || '';\n // Use thread title if available and not generic, otherwise use project root path\n const threadTitle =\n state.currentThreadTitle && !isGenericTitle(state.currentThreadTitle) ? state.currentThreadTitle : null;\n let displayPath = threadTitle || state.projectInfo.rootPath;\n if (!threadTitle && homedir && displayPath.startsWith(homedir)) {\n displayPath = '~' + displayPath.slice(homedir.length);\n }\n const branch = state.projectInfo.gitBranch;\n const queuedCount = state.pendingQueuedActions.length + state.harness.getFollowUpCount();\n const queuedLabel = queuedCount > 0 ? `${queuedCount} queued` : null;\n const goalState = state.goalManager?.getGoal();\n const goalDuration = !isJudging && goalState?.status === 'active' ? formatGoalDuration(goalState) : null;\n const goalLabel = goalDuration ? `pursuing goal (${goalDuration})` : null;\n const shortGoalLabel = goalDuration ? `goal (${goalDuration})` : null;\n const activeGithubPr = state.activeGithubPrSubscriptions?.[0];\n const githubPrLabel = activeGithubPr ? formatGithubPrLabel(state, activeGithubPr) : null;\n const formatDirPart = (value: string) => {\n if (!githubPrLabel) return { plain: value, styled: theme.fg('dim', value) };\n return {\n plain: `${githubPrLabel.plain} ${value}`,\n styled: `${githubPrLabel.styled} ${theme.fg('dim', value)}`,\n };\n };\n // Build progressively shorter directory strings for layout fallback\n // Only show branch when not showing thread title (thread title takes priority)\n const dirFull = !threadTitle && branch ? `${displayPath} (${branch})` : displayPath;\n const dirBranchOnly = !threadTitle && branch ? branch : null;\n // Abbreviate long branches: keep first 12 + last 8 chars with \"..\" in between\n const dirBranchShort =\n !threadTitle && branch && branch.length > 24 ? branch.slice(0, 12) + '..' + branch.slice(-8) : dirBranchOnly;\n\n // --- Helper to style the model ID ---\n const modelTrail = tintBg ? chalk.hex(tintBg)('▌') : '';\n const styleModelId = (id: string): string => {\n if (!state.modelAuthStatus.hasAuth) {\n const envVar = state.modelAuthStatus.apiKeyEnvVar;\n return theme.fg('dim', id) + theme.fg('error', ' ✗') + theme.fg('muted', envVar ? ` (${envVar})` : ' (no key)');\n }\n\n if (state.gradientAnimator?.isRunning() && modeColor) {\n const fade = state.gradientAnimator.getFadeProgress();\n const easedFade = fade * fade * (3 - 2 * fade); // smoothstep\n const text = applyGradientSweep(id, state.gradientAnimator.getOffset(), modeColor, easedFade);\n const styled = chalk.italic(text);\n const bg = tintBg ? chalk.bgHex(tintBg)(styled) : styled;\n return bg + modelTrail;\n }\n if (modeColor) {\n // Use same idle brightness as gradient animation convergence (0.8)\n // so there's no color jump when animation stops\n const [cr, cg, cb] = [\n parseInt(modeColor.slice(1, 3), 16),\n parseInt(modeColor.slice(3, 5), 16),\n parseInt(modeColor.slice(5, 7), 16),\n ];\n const idleBright = 0.8;\n const fgStyled = chalk\n .rgb(Math.floor(cr * idleBright), Math.floor(cg * idleBright), Math.floor(cb * idleBright))\n .bold.italic(id);\n const bg = tintBg ? chalk.bgHex(tintBg)(fgStyled) : fgStyled;\n return bg + modelTrail;\n }\n return chalk.hex(mastra.specialGray).bold.italic(id);\n };\n\n // --- Build line with progressive reduction ---\n // Strategy: progressively drop less-important elements to fit terminal width.\n // Each attempt assembles plain-text parts, measures, and if it fits, styles and renders.\n\n // Short badge: first letter only (e.g., \"build\" → \"b\", \"observe\" → \"o\")\n let shortModeBadge = '';\n let shortModeBadgeWidth = 0;\n if (badgeName && modeColor) {\n const shortName = badgeName.toLowerCase().charAt(0);\n const [mcr, mcg, mcb] = [\n parseInt(modeColor.slice(1, 3), 16),\n parseInt(modeColor.slice(3, 5), 16),\n parseInt(modeColor.slice(5, 7), 16),\n ];\n let sBadgeBrightness = 0.9;\n if (state.gradientAnimator?.isRunning()) {\n const fade = state.gradientAnimator.getFadeProgress();\n if (fade < 1) {\n const offset = state.gradientAnimator.getOffset() % 1;\n const animBrightness = 0.65 + 0.3 * (0.5 + 0.5 * Math.sin(offset * Math.PI * 2 + Math.PI));\n sBadgeBrightness = animBrightness + (0.9 - animBrightness) * fade;\n }\n }\n const sr = Math.floor(mcr * sBadgeBrightness);\n const sg = Math.floor(mcg * sBadgeBrightness);\n const sb = Math.floor(mcb * sBadgeBrightness);\n const shortRightHalf = tintBg ? chalk.rgb(sr, sg, sb).bgHex(tintBg)('▌') : chalk.rgb(sr, sg, sb)('▌');\n shortModeBadge =\n chalk.rgb(sr, sg, sb)('▐') + chalk.bgRgb(sr, sg, sb).hex('#000000').bold(shortName) + shortRightHalf;\n shortModeBadgeWidth = shortName.length + 2;\n } else if (badgeName) {\n const shortName = badgeName.toLowerCase().charAt(0);\n shortModeBadge = ' ' + theme.fg('dim', shortName) + ' ';\n shortModeBadgeWidth = shortName.length + 2;\n }\n\n const buildLine = (opts: {\n modelId: string;\n memCompact?: 'percentOnly' | 'noBuffer' | 'full';\n showDir: boolean;\n dir?: string | null;\n allowDirTruncation?: boolean;\n badge?: 'full' | 'short';\n showQueue?: boolean;\n compactGoal?: boolean;\n }): { plain: string; styled: string } | null => {\n const parts: Array<{ plain: string; styled: string }> = [];\n // Model ID (always present) — styleModelId adds padding spaces\n parts.push({\n plain: `${opts.modelId}${tintBg ? ' ' : ''}`,\n styled: styleModelId(opts.modelId),\n });\n const useBadge = opts.badge === 'short' ? shortModeBadge : modeBadge;\n const useBadgeWidth = opts.badge === 'short' ? shortModeBadgeWidth : modeBadgeWidth;\n // Memory info — animate label text when buffering is active\n const ds = state.harness.getDisplayState();\n const msgLabelStyler =\n ds.bufferingMessages && state.gradientAnimator?.isRunning()\n ? (label: string) =>\n applyGradientSweep(\n label,\n state.gradientAnimator!.getOffset(),\n getObserverColor(),\n state.gradientAnimator!.getFadeProgress(),\n )\n : undefined;\n const obsLabelStyler =\n ds.bufferingObservations && state.gradientAnimator?.isRunning()\n ? (label: string) =>\n applyGradientSweep(\n label,\n state.gradientAnimator!.getOffset(),\n getReflectorColor(),\n state.gradientAnimator!.getFadeProgress(),\n )\n : undefined;\n const omProg = state.harness.getDisplayState().omProgress;\n const obs = isJudging ? '' : formatObservationStatus(omProg, opts.memCompact, msgLabelStyler);\n const ref = isJudging ? '' : formatReflectionStatus(omProg, opts.memCompact, obsLabelStyler);\n if (obs) {\n parts.push({ plain: obs, styled: obs });\n }\n if (ref) {\n parts.push({ plain: ref, styled: ref });\n }\n if (opts.showQueue && queuedLabel) {\n parts.push({\n plain: queuedLabel,\n styled: theme.fg('warning', queuedLabel),\n });\n }\n const renderedGoalLabel = opts.compactGoal ? shortGoalLabel : goalLabel;\n if (opts.showQueue && renderedGoalLabel) {\n parts.push({\n plain: renderedGoalLabel,\n styled: theme.fg('accent', renderedGoalLabel),\n });\n }\n // Directory / branch / thread title (lowest priority on line 1)\n let dirText = opts.dir !== undefined ? opts.dir : opts.showDir ? dirFull : null;\n\n // Measure width of everything except dir to know how much space remains\n const nonDirWidth =\n useBadgeWidth + parts.reduce((sum, p, i) => sum + visibleWidth(p.plain) + (i > 0 ? SEP.length : 0), 0);\n\n if (dirText) {\n const dirPart = formatDirPart(dirText);\n const availableForDir = termWidth - nonDirWidth - SEP.length - 1; // -1 buffer for ambiguous-width chars\n const dirWidth = visibleWidth(dirPart.plain);\n const MIN_TRUNCATED_DIR = 10; // don't show a tiny sliver\n if (dirWidth > availableForDir && opts.allowDirTruncation === false) {\n return null;\n }\n if (dirWidth > availableForDir && availableForDir >= MIN_TRUNCATED_DIR) {\n const reservedPrefix = githubPrLabel ? `${githubPrLabel.plain} ` : '';\n const availableForText = availableForDir - visibleWidth(reservedPrefix);\n dirText = availableForText > 1 ? dirText.slice(0, availableForText - 1) + '…' : null;\n } else if (dirWidth > availableForDir) {\n // Not enough room even for a truncated version — drop it\n dirText = null;\n }\n }\n\n if (dirText) {\n parts.push(formatDirPart(dirText));\n }\n const totalPlain =\n useBadgeWidth + parts.reduce((sum, p, i) => sum + visibleWidth(p.plain) + (i > 0 ? SEP.length : 0), 0);\n\n if (totalPlain + 1 > termWidth) return null; // +1 buffer for ambiguous-width chars (▐▌)\n\n let styledLine: string;\n const hasDir = !!dirText;\n if (hasDir && parts.length >= 3) {\n // Three groups: left (model), center (mem/tokens/thinking), right (dir)\n const leftPart = parts[0]!; // model\n const centerParts = parts.slice(1, -1); // mem, tokens, thinking\n const dirPart = parts[parts.length - 1]!; // dir\n\n const leftWidth = useBadgeWidth + visibleWidth(leftPart.plain);\n const centerWidth = centerParts.reduce((sum, p, i) => sum + visibleWidth(p.plain) + (i > 0 ? SEP.length : 0), 0);\n const rightWidth = visibleWidth(dirPart.plain);\n const totalContent = leftWidth + centerWidth + rightWidth;\n const freeSpace = termWidth - totalContent;\n const gapLeft = Math.floor(freeSpace / 2);\n const gapRight = freeSpace - gapLeft;\n\n styledLine =\n useBadge +\n leftPart.styled +\n ' '.repeat(Math.max(gapLeft, 1)) +\n centerParts.map(p => p.styled).join(SEP) +\n ' '.repeat(Math.max(gapRight, 1)) +\n dirPart.styled;\n } else if (hasDir && parts.length === 2) {\n // Just model + dir, right-align dir\n const mainStr = useBadge + parts[0]!.styled;\n const dirPart = parts[parts.length - 1]!;\n const gap = termWidth - totalPlain;\n styledLine = mainStr + ' '.repeat(gap + SEP.length) + dirPart.styled;\n } else {\n styledLine = useBadge + parts.map(p => p.styled).join(SEP);\n }\n return { plain: '', styled: styledLine };\n };\n // Try progressively more compact layouts.\n // Priority: token fractions + buffer > labels > provider > badge > buffer > fractions\n const result =\n // 1. Full badge + full model + long labels + queue count + full dir\n buildLine({\n modelId: fullModelId,\n memCompact: 'full',\n showDir: false,\n dir: dirFull,\n allowDirTruncation: false,\n showQueue: true,\n }) ??\n // 2. Full badge + full model + queue count + branch only (drop path)\n buildLine({\n modelId: fullModelId,\n memCompact: 'full',\n showDir: false,\n dir: dirBranchOnly,\n allowDirTruncation: false,\n showQueue: true,\n }) ??\n // 3. Full badge + full model + queue count + abbreviated branch\n buildLine({ modelId: fullModelId, memCompact: 'full', showDir: false, dir: dirBranchShort, showQueue: true }) ??\n // 4. Drop directory entirely\n buildLine({ modelId: fullModelId, memCompact: 'full', showDir: false, showQueue: true }) ??\n // 5. Drop provider + \"claude-\" prefix, keep full labels + queue count\n buildLine({ modelId: tinyModelId, memCompact: 'full', showDir: false, showQueue: true }) ??\n // 6. Short labels (msg/mem) + queue count\n buildLine({ modelId: tinyModelId, showDir: false, showQueue: true }) ??\n // 7. Short badge + short labels + queue count\n buildLine({ modelId: tinyModelId, showDir: false, badge: 'short', showQueue: true }) ??\n // 8. Short badge + short labels + compact goal label\n buildLine({ modelId: tinyModelId, showDir: false, badge: 'short', showQueue: true, compactGoal: true }) ??\n // 9. Short badge + fractions (drop buffer indicator, keep queue count)\n buildLine({\n modelId: tinyModelId,\n memCompact: 'noBuffer',\n showDir: false,\n badge: 'short',\n showQueue: true,\n }) ??\n // 10. Short badge + fractions + compact goal label\n buildLine({\n modelId: tinyModelId,\n memCompact: 'noBuffer',\n showDir: false,\n badge: 'short',\n showQueue: true,\n compactGoal: true,\n }) ??\n // 11. Full badge + percent only + queue count\n buildLine({\n modelId: tinyModelId,\n memCompact: 'percentOnly',\n showDir: false,\n badge: 'full',\n showQueue: true,\n }) ??\n // 12. Full badge + percent only + compact goal label\n buildLine({\n modelId: tinyModelId,\n memCompact: 'percentOnly',\n showDir: false,\n badge: 'full',\n showQueue: true,\n compactGoal: true,\n }) ??\n // 13. Short badge + percent only + queue count\n buildLine({\n modelId: tinyModelId,\n memCompact: 'percentOnly',\n showDir: false,\n badge: 'short',\n showQueue: true,\n }) ??\n // 14. Short badge + percent only + compact goal label\n buildLine({\n modelId: tinyModelId,\n memCompact: 'percentOnly',\n showDir: false,\n badge: 'short',\n showQueue: true,\n compactGoal: true,\n }) ??\n // 15. Model only + queue count\n buildLine({ modelId: tinyModelId, showDir: false, badge: undefined, showQueue: true }) ??\n // 16. Model only + compact goal label\n buildLine({ modelId: tinyModelId, showDir: false, badge: undefined, showQueue: true, compactGoal: true }) ??\n // 17. Badge only + queue count\n buildLine({ modelId: '', showDir: false, badge: 'short', showQueue: true }) ??\n // 13. Model only\n buildLine({ modelId: tinyModelId, showDir: false, badge: undefined }) ??\n // 14. Badge only\n buildLine({ modelId: '', showDir: false, badge: 'short' });\n\n state.statusLine.setText(result?.styled ?? shortModeBadge + styleModelId(tinyModelId));\n\n // Line 2: hidden — dir only shows on line 1 when it fits\n if (state.memoryStatusLine) {\n state.memoryStatusLine.setText('');\n }\n\n state.ui.requestRender();\n}\n","import { Box, SelectList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { SelectItem } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\n\nimport { setClipboardText } from '../../clipboard/index.js';\nimport type { ModePack, ProviderAccess, ProviderAccessLevel } from '../../onboarding/packs.js';\nimport { getAvailableModePacks } from '../../onboarding/packs.js';\nimport {\n loadSettings,\n resolveThreadActiveModelPackId,\n saveSettings,\n THREAD_ACTIVE_MODEL_PACK_ID_KEY,\n} from '../../onboarding/settings.js';\nimport type { GlobalSettings } from '../../onboarding/settings.js';\nimport { AskQuestionDialogComponent } from '../components/ask-question-dialog.js';\nimport { ModelSelectorComponent } from '../components/model-selector.js';\nimport type { ModelItem } from '../components/model-selector.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { promptForApiKeyIfNeeded } from '../prompt-api-key.js';\nimport { updateStatusLine } from '../status-line.js';\nimport { getSelectListTheme, mastra, theme } from '../theme.js';\nimport type { SlashCommandContext } from './types.js';\n\n// ---------------------------------------------------------------------------\n// Pack sharing — serialize/deserialize\n// ---------------------------------------------------------------------------\n\nconst SHARE_PREFIX = 'mastra-pack:';\n\ninterface SharedPackPayload {\n name: string;\n models: { build: string; plan: string; fast: string };\n}\n\nexport function serializePack(pack: ModePack): string {\n const payload: SharedPackPayload = {\n name: pack.name,\n models: { build: pack.models.build, plan: pack.models.plan, fast: pack.models.fast },\n };\n return SHARE_PREFIX + Buffer.from(JSON.stringify(payload), 'utf-8').toString('base64');\n}\n\nexport function deserializePack(input: string): ModePack | null {\n try {\n const trimmed = input.trim();\n if (!trimmed.startsWith(SHARE_PREFIX)) return null;\n const json = Buffer.from(trimmed.slice(SHARE_PREFIX.length), 'base64').toString('utf-8');\n const parsed = JSON.parse(json) as Record<string, unknown>;\n\n const name = typeof parsed.name === 'string' ? parsed.name.trim() : '';\n if (!name) return null;\n\n const models = parsed.models as Record<string, unknown> | undefined;\n if (!models || typeof models !== 'object') return null;\n\n const build = typeof models.build === 'string' ? models.build : '';\n const plan = typeof models.plan === 'string' ? models.plan : '';\n const fast = typeof models.fast === 'string' ? models.fast : '';\n if (!build || !plan || !fast) return null;\n\n return {\n id: `custom:${name}`,\n name,\n description: 'Imported custom pack',\n models: { build, plan, fast },\n };\n } catch {\n return null;\n }\n}\n\nasync function selectModel(\n ctx: SlashCommandContext,\n title: string,\n modeColor?: string,\n currentModelId?: string,\n): Promise<string | undefined> {\n const availableModels = await ctx.state.harness.listAvailableModels();\n if (availableModels.length === 0) return undefined;\n\n return new Promise<string | undefined>(resolve => {\n const selector = new ModelSelectorComponent({\n tui: ctx.state.ui,\n models: availableModels,\n currentModelId,\n title,\n titleColor: modeColor,\n onSelect: async (model: ModelItem) => {\n ctx.state.ui.hideOverlay();\n await promptForApiKeyIfNeeded(ctx.state.ui, model, ctx.authStorage);\n resolve(model.id);\n },\n onCancel: () => {\n ctx.state.ui.hideOverlay();\n resolve(undefined);\n },\n });\n\n showModalOverlay(ctx.state.ui, selector, { maxHeight: '75%' });\n selector.focused = true;\n });\n}\n\nasync function askCustomPackName(ctx: SlashCommandContext, defaultName?: string): Promise<string | null> {\n return new Promise(resolve => {\n const question = new AskQuestionDialogComponent({\n question: 'Name this custom pack',\n tui: ctx.state.ui,\n onSubmit: answer => {\n ctx.state.ui.hideOverlay();\n const trimmed = answer.trim();\n resolve(trimmed.length > 0 ? trimmed : null);\n },\n onCancel: () => {\n ctx.state.ui.hideOverlay();\n resolve(null);\n },\n });\n\n if (defaultName) {\n (question as any).input?.setValue?.(defaultName);\n }\n\n showModalOverlay(ctx.state.ui, question, { maxHeight: '50%' });\n question.focused = true;\n });\n}\n\nasync function askCustomPackAction(\n ctx: SlashCommandContext,\n pack: ModePack,\n): Promise<'activate' | 'edit' | 'share' | 'delete' | null> {\n const actions = [\n { id: 'activate', label: 'Activate', description: 'Use this pack as-is' },\n { id: 'edit', label: 'Edit', description: 'Update this pack' },\n { id: 'share', label: 'Share', description: 'Copy to clipboard' },\n { id: 'delete', label: 'Delete', description: 'Remove this custom pack' },\n ] as const;\n\n return new Promise(resolve => {\n const container = new Box(4, 2, text => theme.bg('overlayBg', text));\n container.addChild(new Text(theme.bold(theme.fg('accent', `Custom pack: ${pack.name}`)), 0, 0));\n container.addChild(new Spacer(1));\n\n const items: SelectItem[] = actions.map(action => ({\n value: action.id,\n label: ` ${action.label} ${theme.fg('dim', action.description)}`,\n }));\n\n const selectList = new SelectList(items, items.length, getSelectListTheme());\n const detailText = new Text('', 0, 0);\n const detailById: Record<string, string> = {\n activate: getPackDetail(pack),\n edit: theme.fg('dim', ' Edit one setting at a time (Rename, plan, build, fast).'),\n share: theme.fg('dim', ' Copy shareable config to clipboard. Paste it to import elsewhere.'),\n delete: theme.fg('error', ' Permanently removes this custom pack from settings.'),\n };\n\n const closeOverlay = () => {\n ctx.state.ui.hideOverlay();\n ctx.state.ui.requestRender();\n };\n\n selectList.onSelectionChange = item => {\n detailText.setText(detailById[item.value] ?? '');\n ctx.state.ui.requestRender();\n };\n\n selectList.onSelect = item => {\n closeOverlay();\n resolve(item.value as 'activate' | 'edit' | 'share' | 'delete');\n };\n\n selectList.onCancel = () => {\n closeOverlay();\n resolve(null);\n };\n\n detailText.setText(detailById['activate']!);\n container.addChild(selectList);\n container.addChild(new Spacer(1));\n container.addChild(detailText);\n container.addChild(new Spacer(1));\n container.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc cancel'), 0, 0));\n (container as Box & { handleInput: (data: string) => void }).handleInput = (data: string) =>\n selectList.handleInput(data);\n\n showModalOverlay(ctx.state.ui, container, { maxHeight: '75%' });\n });\n}\n\nasync function askCustomPackEditTarget(\n ctx: SlashCommandContext,\n pack: ModePack,\n): Promise<'rename' | 'plan' | 'build' | 'fast' | 'save' | null> {\n return new Promise(resolve => {\n const container = new Box(4, 2, text => theme.bg('overlayBg', text));\n container.addChild(new Text(theme.bold(theme.fg('accent', `Edit custom pack: ${pack.name}`)), 0, 0));\n container.addChild(new Spacer(1));\n\n const selectList = new SelectList(\n [\n { value: 'rename', label: ` Rename → ${theme.fg('text', pack.name)}` },\n { value: 'plan', label: ` ${chalk.hex(mastra.purple)('plan')} → ${theme.fg('text', pack.models.plan)}` },\n { value: 'build', label: ` ${chalk.hex(mastra.green)('build')} → ${theme.fg('text', pack.models.build)}` },\n { value: 'fast', label: ` ${chalk.hex(mastra.orange)('fast')} → ${theme.fg('text', pack.models.fast)}` },\n { value: 'save', label: ` ${theme.fg('success', 'Save')}` },\n ],\n 5,\n getSelectListTheme(),\n );\n\n const closeOverlay = () => {\n ctx.state.ui.hideOverlay();\n ctx.state.ui.requestRender();\n };\n\n selectList.onSelect = item => {\n closeOverlay();\n resolve(item.value as 'rename' | 'plan' | 'build' | 'fast' | 'save');\n };\n\n selectList.onCancel = () => {\n closeOverlay();\n resolve(null);\n };\n\n container.addChild(selectList);\n container.addChild(new Spacer(1));\n container.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc cancel'), 0, 0));\n (container as Box & { handleInput: (data: string) => void }).handleInput = (data: string) =>\n selectList.handleInput(data);\n\n showModalOverlay(ctx.state.ui, container, { maxHeight: '75%' });\n });\n}\n\nasync function runCustomFlow(\n ctx: SlashCommandContext,\n options?: { name?: string; models?: ModePack['models']; skipNamePrompt?: boolean },\n): Promise<ModePack | null> {\n const modes: Array<{ id: 'plan' | 'build' | 'fast'; label: string; metadata: { color: string } }> = [\n { id: 'plan', label: 'plan', metadata: { color: mastra.purple } },\n { id: 'build', label: 'build', metadata: { color: mastra.green } },\n { id: 'fast', label: 'fast', metadata: { color: mastra.orange } },\n ];\n\n const name = options?.skipNamePrompt\n ? options?.name\n : await askCustomPackName(ctx, options?.name && options.name !== 'Custom' ? options.name : undefined);\n if (!name) return null;\n\n const existing = options?.models ?? { build: '', plan: '', fast: '' };\n const models: Record<string, string> = {\n build: existing.build ?? '',\n plan: existing.plan ?? '',\n fast: existing.fast ?? '',\n };\n\n for (const mode of modes) {\n const modelId = await selectModel(\n ctx,\n `Select model for ${mode.label} mode`,\n mode.metadata.color,\n models[mode.id] || undefined,\n );\n if (!modelId) return null;\n models[mode.id] = modelId;\n }\n\n return {\n id: `custom:${name}`,\n name,\n description: 'Saved custom pack',\n models: models as ModePack['models'],\n };\n}\n\nasync function runCustomPackEditFlow(\n ctx: SlashCommandContext,\n pack: ModePack,\n): Promise<{ pack: ModePack; previousPackId?: string } | null> {\n let workingPack: ModePack = { ...pack, models: { ...pack.models } };\n let previousPackId: string | undefined;\n\n while (true) {\n const editTarget = await askCustomPackEditTarget(ctx, workingPack);\n if (!editTarget) return null;\n if (editTarget === 'save') return { pack: workingPack, previousPackId };\n\n if (editTarget === 'rename') {\n const renamed = await askCustomPackName(ctx, workingPack.name);\n if (!renamed) continue;\n const renamedPack: ModePack = {\n ...workingPack,\n id: `custom:${renamed}`,\n name: renamed,\n };\n if (renamedPack.id !== pack.id && !previousPackId) previousPackId = pack.id;\n workingPack = renamedPack;\n continue;\n }\n\n const modeColors: Record<'plan' | 'build' | 'fast', string> = {\n plan: mastra.purple,\n build: mastra.green,\n fast: mastra.orange,\n };\n\n const modelId = await selectModel(\n ctx,\n `Select model for ${editTarget} mode`,\n modeColors[editTarget],\n workingPack.models[editTarget],\n );\n if (!modelId) continue;\n\n workingPack = {\n ...workingPack,\n models: {\n ...workingPack.models,\n [editTarget]: modelId,\n },\n };\n }\n}\n\nexport function upsertCustomPackInSettings(\n settings: GlobalSettings,\n pack: ModePack,\n modeDefaults: Record<string, string>,\n previousPackId?: string,\n setActive = true,\n): void {\n if (!pack.id.startsWith('custom:')) return;\n\n if (previousPackId && previousPackId.startsWith('custom:') && previousPackId !== pack.id) {\n removeCustomPackFromSettings(settings, previousPackId);\n }\n\n const customName = pack.id.slice('custom:'.length);\n const entry = { name: customName, models: modeDefaults, createdAt: new Date().toISOString() };\n const idx = settings.customModelPacks.findIndex(p => p.name === customName);\n if (idx >= 0) {\n settings.customModelPacks[idx] = entry;\n } else {\n settings.customModelPacks.push(entry);\n }\n if (setActive) {\n settings.models.activeModelPackId = pack.id;\n settings.models.modeDefaults = modeDefaults;\n }\n}\n\nexport function removeCustomPackFromSettings(settings: GlobalSettings, packId: string): void {\n if (!packId.startsWith('custom:')) return;\n const packName = packId.slice('custom:'.length);\n const removedPack = settings.customModelPacks.find(p => p.name === packName);\n settings.customModelPacks = settings.customModelPacks.filter(p => p.name !== packName);\n\n const modeDefaultsMatchRemovedPack =\n !!removedPack &&\n settings.models.modeDefaults.plan === removedPack.models.plan &&\n settings.models.modeDefaults.build === removedPack.models.build &&\n settings.models.modeDefaults.fast === removedPack.models.fast;\n\n if (settings.models.activeModelPackId === packId) {\n settings.models.activeModelPackId = null;\n settings.models.modeDefaults = {};\n } else if (modeDefaultsMatchRemovedPack) {\n settings.models.modeDefaults = {};\n }\n\n if (settings.onboarding.modePackId === packId) {\n settings.onboarding.modePackId = null;\n }\n}\n\nasync function applyPack(ctx: SlashCommandContext, pack: ModePack, previousPackId?: string): Promise<void> {\n const harness = ctx.state.harness;\n const modes = harness.listModes();\n\n for (const mode of modes) {\n const modelId = (pack.models as Record<string, string>)[mode.id];\n if (modelId) {\n (mode as any).defaultModelId = modelId;\n await harness.setThreadSetting({ key: `modeModelId_${mode.id}`, value: modelId });\n }\n }\n\n const currentModeId = harness.getCurrentModeId();\n const currentModeModel = (pack.models as Record<string, string>)[currentModeId];\n if (currentModeModel) {\n await harness.switchModel({ modelId: currentModeModel });\n }\n\n const subagentModeMap: Record<string, string> = { explore: 'fast', plan: 'plan', execute: 'build' };\n for (const [agentType, modeId] of Object.entries(subagentModeMap)) {\n const saModelId = (pack.models as Record<string, string>)[modeId];\n if (saModelId) {\n await harness.setSubagentModelId({ modelId: saModelId, agentType });\n }\n }\n\n await harness.setThreadSetting({ key: THREAD_ACTIVE_MODEL_PACK_ID_KEY, value: pack.id });\n\n const s = loadSettings();\n const modeDefaults: Record<string, string> = {};\n for (const mode of modes) {\n const modelId = (pack.models as Record<string, string>)[mode.id];\n if (modelId) modeDefaults[mode.id] = modelId;\n }\n\n if (pack.id.startsWith('custom:')) {\n upsertCustomPackInSettings(s, pack, modeDefaults, previousPackId);\n } else {\n s.models.activeModelPackId = pack.id;\n s.models.modeDefaults = {};\n }\n\n s.models.subagentModels = {};\n\n const hasOpenAI = Object.values(pack.models).some(m => m.startsWith('openai/'));\n const currentThinking = ((harness.getState() as any)?.thinkingLevel ?? 'off') as string;\n if (hasOpenAI && currentThinking === 'off') {\n await harness.setState({ thinkingLevel: 'low' } as any);\n s.preferences.thinkingLevel = 'low';\n }\n\n saveSettings(s);\n updateStatusLine(ctx.state);\n}\n\nfunction getPackDetail(pack: ModePack): string {\n if (pack.id === 'custom') {\n return theme.fg('dim', ' Create a named custom pack and pick a model for each mode.');\n }\n return [\n ` ${chalk.hex(mastra.purple)('plan')} → ${theme.fg('text', pack.models.plan)}`,\n ` ${chalk.hex(mastra.green)('build')} → ${theme.fg('text', pack.models.build)}`,\n ` ${chalk.hex(mastra.orange)('fast')} → ${theme.fg('text', pack.models.fast)}`,\n ].join('\\n');\n}\n\nasync function saveCustomPackEdits(ctx: SlashCommandContext, pack: ModePack, previousPackId?: string): Promise<void> {\n const settings = loadSettings();\n const wasActive = previousPackId\n ? settings.models.activeModelPackId === previousPackId\n : settings.models.activeModelPackId === pack.id;\n const wasOnboarding = previousPackId\n ? settings.onboarding.modePackId === previousPackId\n : settings.onboarding.modePackId === pack.id;\n\n const modeDefaults: Record<string, string> = {\n plan: pack.models.plan,\n build: pack.models.build,\n fast: pack.models.fast,\n };\n\n upsertCustomPackInSettings(settings, pack, modeDefaults, previousPackId, false);\n\n if (wasActive) {\n settings.models.activeModelPackId = pack.id;\n }\n if (wasOnboarding) {\n settings.onboarding.modePackId = pack.id;\n }\n\n saveSettings(settings);\n\n if (previousPackId && previousPackId !== pack.id) {\n const harness = ctx.state.harness;\n const threadId = harness.getCurrentThreadId();\n const thread = threadId ? (await harness.listThreads()).find(t => t.id === threadId) : undefined;\n const threadPackId = (thread?.metadata?.[THREAD_ACTIVE_MODEL_PACK_ID_KEY] as string | undefined) ?? null;\n if (threadPackId === previousPackId) {\n await harness.setThreadSetting({ key: THREAD_ACTIVE_MODEL_PACK_ID_KEY, value: pack.id });\n }\n }\n}\n\nasync function deleteCustomPack(ctx: SlashCommandContext, pack: ModePack): Promise<void> {\n if (!pack.id.startsWith('custom:')) return;\n\n const harness = ctx.state.harness;\n const threadId = harness.getCurrentThreadId();\n const thread = threadId ? (await harness.listThreads()).find(t => t.id === threadId) : undefined;\n const threadPackId = (thread?.metadata?.[THREAD_ACTIVE_MODEL_PACK_ID_KEY] as string | undefined) ?? null;\n\n const settings = loadSettings();\n removeCustomPackFromSettings(settings, pack.id);\n saveSettings(settings);\n\n if (threadPackId === pack.id) {\n await harness.setThreadSetting({ key: THREAD_ACTIVE_MODEL_PACK_ID_KEY, value: null });\n }\n}\n\nfunction sharePack(ctx: SlashCommandContext, pack: ModePack): void {\n const serialized = serializePack(pack);\n const copied = setClipboardText(serialized);\n if (copied) {\n ctx.showInfo(`Copied ${pack.name} pack to clipboard`);\n } else {\n ctx.showInfo(`Share string for ${pack.name}:\\n${serialized}`);\n }\n}\n\nasync function askImportPackString(ctx: SlashCommandContext): Promise<string | null> {\n return new Promise(resolve => {\n const question = new AskQuestionDialogComponent({\n question: 'Paste the shared model pack string',\n tui: ctx.state.ui,\n onSubmit: answer => {\n ctx.state.ui.hideOverlay();\n const trimmed = answer.trim();\n resolve(trimmed.length > 0 ? trimmed : null);\n },\n onCancel: () => {\n ctx.state.ui.hideOverlay();\n resolve(null);\n },\n });\n\n showModalOverlay(ctx.state.ui, question, { maxHeight: '50%' });\n question.focused = true;\n });\n}\n\nasync function askImportCollision(\n ctx: SlashCommandContext,\n existingName: string,\n): Promise<'overwrite' | 'rename' | 'cancel'> {\n const actions = [\n { id: 'overwrite', label: 'Overwrite', description: `Replace the existing \"${existingName}\" pack` },\n { id: 'rename', label: 'Rename', description: 'Choose a different name for the imported pack' },\n { id: 'cancel', label: 'Cancel', description: 'Abort import' },\n ] as const;\n\n return new Promise(resolve => {\n const container = new Box(4, 2, text => theme.bg('overlayBg', text));\n container.addChild(new Text(theme.bold(theme.fg('accent', `A pack named \"${existingName}\" already exists`)), 0, 0));\n container.addChild(new Spacer(1));\n\n const items: SelectItem[] = actions.map(a => ({\n value: a.id,\n label: ` ${a.label} ${theme.fg('dim', a.description)}`,\n }));\n\n const selectList = new SelectList(items, items.length, getSelectListTheme());\n\n const closeOverlay = () => {\n ctx.state.ui.hideOverlay();\n ctx.state.ui.requestRender();\n };\n\n selectList.onSelect = (selected: SelectItem) => {\n closeOverlay();\n resolve(selected.value as 'overwrite' | 'rename' | 'cancel');\n };\n\n selectList.onCancel = () => {\n closeOverlay();\n resolve('cancel');\n };\n\n container.addChild(selectList);\n (container as Box & { handleInput: (data: string) => void }).handleInput = (data: string) =>\n selectList.handleInput(data);\n\n showModalOverlay(ctx.state.ui, container, { maxHeight: '75%' });\n });\n}\n\nexport async function handleModelsPackCommand(ctx: SlashCommandContext): Promise<void> {\n const harness = ctx.state.harness;\n const models = await harness.listAvailableModels();\n\n const hasEnv = (provider: string) => models.some(m => m.provider === provider && m.hasApiKey);\n const accessLevel = (storageProviderId: string): ProviderAccessLevel => {\n const cred = ctx.authStorage?.get(storageProviderId);\n if (cred?.type === 'oauth') return 'oauth';\n if (cred?.type === 'api_key' && cred.key.trim().length > 0) return 'apikey';\n return false;\n };\n const access: ProviderAccess = {\n anthropic: accessLevel('anthropic'),\n openai: accessLevel('openai-codex'),\n cerebras: hasEnv('cerebras') ? ('apikey' as const) : false,\n google: hasEnv('google') ? ('apikey' as const) : false,\n deepseek: hasEnv('deepseek') ? ('apikey' as const) : false,\n 'github-copilot': accessLevel('github-copilot'),\n };\n // Include all other providers that have API keys configured\n const seen = new Set(Object.keys(access));\n for (const m of models) {\n if (!seen.has(m.provider) && m.hasApiKey) {\n access[m.provider] = 'apikey';\n seen.add(m.provider);\n }\n }\n\n const settings = loadSettings();\n const packs = getAvailableModePacks(access, settings.customModelPacks);\n if (packs.length === 0) {\n ctx.showInfo('No model packs available. Configure provider auth first.');\n return;\n }\n\n const threadId = harness.getCurrentThreadId();\n const thread = threadId ? (await harness.listThreads()).find(t => t.id === threadId) : undefined;\n const currentPackId = resolveThreadActiveModelPackId(\n settings,\n packs,\n thread?.metadata as Record<string, unknown> | undefined,\n );\n\n const items: SelectItem[] = packs.map(p => ({\n value: p.id,\n label: ` ${p.name} ${theme.fg('dim', p.description)}${p.id === currentPackId ? theme.fg('dim', ' (current)') : ''}`,\n }));\n items.push({\n value: '__import__',\n label: ` Import Pack ${theme.fg('dim', 'Paste a shared pack config')}`,\n });\n\n return new Promise<void>(resolve => {\n const container = new Box(4, 2, text => theme.bg('overlayBg', text));\n container.addChild(new Text(theme.bold(theme.fg('accent', 'Switch model pack')), 0, 0));\n container.addChild(new Spacer(1));\n\n const selectList = new SelectList(items, items.length, getSelectListTheme());\n const detailText = new Text('', 0, 0);\n\n const closeOverlay = () => {\n ctx.state.ui.hideOverlay();\n ctx.state.ui.requestRender();\n };\n\n const updateDetail = (packId: string) => {\n if (packId === '__import__') {\n detailText.setText(theme.fg('dim', ' Paste a mastra-pack:... string from someone else to import their pack.'));\n ctx.state.ui.requestRender();\n return;\n }\n const pack = packs.find(p => p.id === packId);\n if (!pack) return;\n detailText.setText(getPackDetail(pack));\n ctx.state.ui.requestRender();\n };\n\n selectList.onSelect = async (item: SelectItem) => {\n closeOverlay();\n\n if (item.value === '__import__') {\n const importStr = await askImportPackString(ctx);\n if (!importStr) {\n resolve();\n return;\n }\n const imported = deserializePack(importStr);\n if (!imported) {\n ctx.showInfo('Invalid pack string. Expected a mastra-pack:... value.');\n resolve();\n return;\n }\n\n // Validate that the imported model IDs are available in this environment\n const availableModelIds = new Set(models.map(m => m.id));\n const unavailable = Object.entries(imported.models)\n .filter(([, modelId]) => !availableModelIds.has(modelId))\n .map(([mode, modelId]) => `${mode}: ${modelId}`);\n if (unavailable.length > 0) {\n ctx.showInfo(`Can't import — these models aren't available:\\n${unavailable.join('\\n')}`);\n resolve();\n return;\n }\n\n // Handle name collision with existing custom pack\n const s = loadSettings();\n const existing = s.customModelPacks.find(p => p.name === imported.name);\n if (existing) {\n const collision = await askImportCollision(ctx, imported.name);\n if (collision === 'cancel') {\n resolve();\n return;\n }\n if (collision === 'rename') {\n const newName = await askCustomPackName(ctx, imported.name);\n if (!newName) {\n resolve();\n return;\n }\n if (s.customModelPacks.some(p => p.name === newName)) {\n ctx.showInfo(`A custom pack named \"${newName}\" already exists. Rename or delete it first.`);\n resolve();\n return;\n }\n imported.name = newName;\n imported.id = `custom:${newName}`;\n }\n // collision === 'overwrite' falls through\n }\n\n await applyPack(ctx, imported);\n ctx.showInfo(`Imported and activated ${imported.name} pack`);\n resolve();\n return;\n }\n\n let pack: ModePack | null | undefined = packs.find(p => p.id === item.value);\n let previousPackId: string | undefined;\n if (!pack) {\n resolve();\n return;\n }\n\n if (pack.id === 'custom') {\n pack = await runCustomFlow(ctx);\n } else if (pack.id.startsWith('custom:')) {\n while (true) {\n const action = await askCustomPackAction(ctx, pack);\n if (action === null) {\n await handleModelsPackCommand(ctx);\n resolve();\n return;\n }\n\n if (action === 'delete') {\n await deleteCustomPack(ctx, pack);\n ctx.showInfo(`Deleted custom pack: ${pack.name}`);\n resolve();\n return;\n }\n\n if (action === 'share') {\n sharePack(ctx, pack);\n continue;\n }\n\n if (action === 'activate') {\n break;\n }\n\n const edited = await runCustomPackEditFlow(ctx, pack);\n if (!edited) {\n continue;\n }\n\n previousPackId = edited.previousPackId;\n pack = edited.pack;\n await saveCustomPackEdits(ctx, pack, previousPackId);\n previousPackId = undefined;\n ctx.showInfo(`Updated custom pack: ${pack.name}`);\n }\n }\n\n if (!pack) {\n resolve();\n return;\n }\n\n await applyPack(ctx, pack, previousPackId);\n ctx.showInfo(`Switched to ${pack.name} pack`);\n resolve();\n };\n\n selectList.onCancel = () => {\n closeOverlay();\n resolve();\n };\n\n selectList.onSelectionChange = (item: SelectItem) => {\n updateDetail(item.value);\n };\n\n container.addChild(selectList);\n container.addChild(new Spacer(1));\n container.addChild(detailText);\n container.addChild(new Spacer(1));\n container.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter select · Esc cancel'), 0, 0));\n\n const currentIdx = packs.findIndex(p => p.id === currentPackId);\n const initialIdx = currentIdx >= 0 ? currentIdx : 0;\n if (initialIdx > 0) selectList.setSelectedIndex(initialIdx);\n updateDetail(packs[initialIdx]!.id);\n (container as Box & { handleInput: (data: string) => void }).handleInput = (data: string) =>\n selectList.handleInput(data);\n\n showModalOverlay(ctx.state.ui, container, { maxHeight: '80%' });\n });\n}\n","import { getCustomProviderId, loadSettings, saveSettings, toCustomProviderModelId } from '../../onboarding/settings.js';\nimport type { CustomProviderSetting, GlobalSettings } from '../../onboarding/settings.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport type { SlashCommandContext } from './types.js';\n\nfunction isValidUrl(value: string): boolean {\n try {\n const parsed = new URL(value);\n return parsed.protocol === 'http:' || parsed.protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nfunction normalizeProvider(input: CustomProviderSetting): CustomProviderSetting {\n return {\n name: input.name.trim(),\n url: input.url.trim(),\n apiKey: input.apiKey?.trim() || undefined,\n models: [...new Set(input.models.map(model => model.trim()).filter(Boolean))],\n };\n}\n\nexport function upsertCustomProviderInSettings(\n settings: GlobalSettings,\n provider: CustomProviderSetting,\n previousProviderId?: string,\n): void {\n const next = normalizeProvider(provider);\n const nextProviderId = getCustomProviderId(next.name);\n const filteredProviders = settings.customProviders.filter(existing => {\n const id = getCustomProviderId(existing.name);\n return id !== nextProviderId && (!previousProviderId || id !== previousProviderId);\n });\n settings.customProviders = [...filteredProviders, next];\n}\n\nexport function removeCustomProviderFromSettings(settings: GlobalSettings, providerId: string): void {\n settings.customProviders = settings.customProviders.filter(\n provider => getCustomProviderId(provider.name) !== providerId,\n );\n}\n\nexport function addModelToCustomProviderInSettings(\n settings: GlobalSettings,\n providerId: string,\n modelName: string,\n): boolean {\n const trimmed = modelName.trim();\n if (!trimmed) return false;\n const provider = settings.customProviders.find(entry => getCustomProviderId(entry.name) === providerId);\n if (!provider) return false;\n provider.models = [...new Set([...provider.models, trimmed])];\n return true;\n}\n\nexport function removeModelFromCustomProviderInSettings(\n settings: GlobalSettings,\n providerId: string,\n modelName: string,\n): boolean {\n const provider = settings.customProviders.find(entry => getCustomProviderId(entry.name) === providerId);\n if (!provider) return false;\n const before = provider.models.length;\n provider.models = provider.models.filter(model => model !== modelName);\n return provider.models.length < before;\n}\n\nasync function askText(\n ctx: SlashCommandContext,\n question: string,\n defaultValue?: string,\n allowEmptyInput = false,\n): Promise<string | null> {\n const answer = await askModalQuestion(ctx.state.ui, { question, defaultValue, allowEmptyInput });\n const trimmed = answer?.trim() ?? '';\n return trimmed.length > 0 ? trimmed : null;\n}\n\nasync function askOptionalText(\n ctx: SlashCommandContext,\n question: string,\n defaultValue?: string,\n): Promise<string | undefined> {\n const answer = await askText(ctx, `${question} (leave blank to skip)`, defaultValue, true);\n return answer?.trim() || undefined;\n}\n\nasync function askSelect(\n ctx: SlashCommandContext,\n question: string,\n options: Array<{ label: string; value: string; description?: string }>,\n): Promise<string | null> {\n const answer = await askModalQuestion(ctx.state.ui, {\n question,\n options: options.map(option => ({ label: option.label, description: option.description })),\n });\n const selected = options.find(option => option.label === answer);\n return selected?.value ?? null;\n}\n\nasync function createProviderFlow(ctx: SlashCommandContext): Promise<void> {\n const settings = loadSettings();\n const name = await askText(ctx, 'Custom provider name');\n if (!name) return;\n\n const providerId = getCustomProviderId(name);\n if (settings.customProviders.some(provider => getCustomProviderId(provider.name) === providerId)) {\n ctx.showError(`Provider already exists: ${name}`);\n return;\n }\n\n const url = await askText(ctx, 'Base URL (OpenAI-compatible endpoint)');\n if (!url) return;\n if (!isValidUrl(url)) {\n ctx.showError('Invalid URL. Use a full http(s) URL.');\n return;\n }\n\n const apiKey = await askOptionalText(ctx, 'API key');\n upsertCustomProviderInSettings(settings, { name, url, apiKey, models: [] });\n saveSettings(settings);\n ctx.showInfo(`Added custom provider: ${name}`);\n\n await manageProviderFlow(ctx, providerId);\n}\n\nasync function editProviderFlow(ctx: SlashCommandContext, providerId: string): Promise<void> {\n const settings = loadSettings();\n const provider = settings.customProviders.find(entry => getCustomProviderId(entry.name) === providerId);\n if (!provider) {\n ctx.showError('Provider not found.');\n return;\n }\n\n const name = await askText(ctx, 'Provider name', provider.name);\n if (!name) return;\n const nextProviderId = getCustomProviderId(name);\n if (\n nextProviderId !== providerId &&\n settings.customProviders.some(entry => getCustomProviderId(entry.name) === nextProviderId)\n ) {\n ctx.showError(`Provider already exists: ${name}`);\n return;\n }\n\n const url = await askText(ctx, 'Base URL', provider.url);\n if (!url) return;\n if (!isValidUrl(url)) {\n ctx.showError('Invalid URL. Use a full http(s) URL.');\n return;\n }\n\n const apiKey = await askOptionalText(ctx, 'API key', provider.apiKey);\n upsertCustomProviderInSettings(\n settings,\n {\n ...provider,\n name,\n url,\n apiKey,\n },\n providerId,\n );\n saveSettings(settings);\n ctx.showInfo(`Updated custom provider: ${name}`);\n}\n\nasync function addProviderModelFlow(ctx: SlashCommandContext, providerId: string): Promise<void> {\n const settings = loadSettings();\n const provider = settings.customProviders.find(entry => getCustomProviderId(entry.name) === providerId);\n if (!provider) {\n ctx.showError('Provider not found.');\n return;\n }\n\n const modelName = await askText(ctx, `Model ID for ${provider.name}`);\n if (!modelName) return;\n const added = addModelToCustomProviderInSettings(settings, providerId, modelName);\n if (!added) {\n ctx.showError('Unable to add model to provider.');\n return;\n }\n\n saveSettings(settings);\n ctx.showInfo(`Added model: ${toCustomProviderModelId(provider.name, modelName)}`);\n}\n\nasync function removeProviderModelFlow(ctx: SlashCommandContext, providerId: string): Promise<void> {\n const settings = loadSettings();\n const provider = settings.customProviders.find(entry => getCustomProviderId(entry.name) === providerId);\n if (!provider) {\n ctx.showError('Provider not found.');\n return;\n }\n if (provider.models.length === 0) {\n ctx.showInfo(`No custom models configured for ${provider.name}.`);\n return;\n }\n\n const modelName = await askSelect(\n ctx,\n `Remove model from ${provider.name}`,\n provider.models.map(model => ({\n label: model,\n value: model,\n description: toCustomProviderModelId(provider.name, model),\n })),\n );\n\n if (!modelName) return;\n\n const removed = removeModelFromCustomProviderInSettings(settings, providerId, modelName);\n if (!removed) {\n ctx.showError('Unable to remove model from provider.');\n return;\n }\n\n saveSettings(settings);\n ctx.showInfo(`Removed model: ${toCustomProviderModelId(provider.name, modelName)}`);\n}\n\nasync function manageProviderFlow(ctx: SlashCommandContext, providerId: string): Promise<void> {\n const settings = loadSettings();\n const provider = settings.customProviders.find(entry => getCustomProviderId(entry.name) === providerId);\n if (!provider) {\n ctx.showError('Provider not found.');\n return;\n }\n\n const action = await askSelect(ctx, `Manage provider: ${provider.name}`, [\n { label: 'Add model', value: 'add-model', description: 'Attach a model ID to this provider' },\n { label: 'Remove model', value: 'remove-model', description: 'Remove a model ID from this provider' },\n { label: 'Edit provider', value: 'edit-provider', description: 'Rename, change URL, or update API key' },\n { label: 'Delete provider', value: 'delete-provider', description: 'Remove provider and all its model IDs' },\n ]);\n\n switch (action) {\n case 'add-model':\n await addProviderModelFlow(ctx, providerId);\n break;\n case 'remove-model':\n await removeProviderModelFlow(ctx, providerId);\n break;\n case 'edit-provider':\n await editProviderFlow(ctx, providerId);\n break;\n case 'delete-provider': {\n const confirm = await askSelect(ctx, `Delete ${provider.name}?`, [\n { label: 'Delete', value: 'delete', description: 'This cannot be undone' },\n ]);\n if (confirm !== 'delete') return;\n const latest = loadSettings();\n removeCustomProviderFromSettings(latest, providerId);\n saveSettings(latest);\n ctx.showInfo(`Deleted custom provider: ${provider.name}`);\n break;\n }\n default:\n break;\n }\n}\n\nexport async function handleCustomProvidersCommand(ctx: SlashCommandContext): Promise<void> {\n const settings = loadSettings();\n const providerOptions = settings.customProviders.map(provider => {\n const providerId = getCustomProviderId(provider.name);\n const modelCount = provider.models.length;\n return {\n label: provider.name,\n value: providerId,\n description: `${provider.url} · ${modelCount} model${modelCount === 1 ? '' : 's'} · ${provider.apiKey ? 'api key set' : 'no api key'}`,\n };\n });\n\n const action = await askSelect(ctx, 'Custom providers', [\n { label: 'Add provider', value: 'add-provider', description: 'Create an OpenAI-compatible provider' },\n ...providerOptions,\n ]);\n\n if (!action) return;\n if (action === 'add-provider') {\n await createProviderFlow(ctx);\n return;\n }\n\n await manageProviderFlow(ctx, action);\n}\n","import { loadSettings, saveSettings } from '../../onboarding/settings.js';\nimport { ModelSelectorComponent } from '../components/model-selector.js';\nimport type { ModelItem } from '../components/model-selector.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { promptForApiKeyIfNeeded } from '../prompt-api-key.js';\nimport type { SlashCommandContext } from './types.js';\n\nconst BUILT_IN_SUBAGENT_TYPES: Array<{ id: string; label: string; description: string }> = [\n {\n id: 'explore',\n label: 'Explore',\n description: 'Read-only codebase exploration',\n },\n {\n id: 'plan',\n label: 'Plan',\n description: 'Read-only analysis and planning',\n },\n {\n id: 'execute',\n label: 'Execute',\n description: 'Task execution with write access',\n },\n];\n\nasync function showSubagentModelListForScope(\n ctx: SlashCommandContext,\n scope: 'global' | 'thread',\n agentType: string,\n agentTypeLabel: string,\n): Promise<void> {\n const availableModels = await ctx.state.harness.listAvailableModels();\n\n if (availableModels.length === 0) {\n ctx.showInfo('No models available. Check your Mastra configuration.');\n return;\n }\n\n const currentSubagentModel = ctx.state.harness.getSubagentModelId({ agentType });\n const scopeLabel = scope === 'global' ? `${agentTypeLabel} · Global` : `${agentTypeLabel} · Thread`;\n\n return new Promise(resolve => {\n const selector = new ModelSelectorComponent({\n tui: ctx.state.ui,\n models: availableModels,\n currentModelId: currentSubagentModel ?? undefined,\n title: `Select subagent model (${scopeLabel})`,\n onSelect: async (model: ModelItem) => {\n ctx.state.ui.hideOverlay();\n await promptForApiKeyIfNeeded(ctx.state.ui, model, ctx.authStorage);\n try {\n await ctx.state.harness.setSubagentModelId({ modelId: model.id, agentType });\n if (scope === 'global') {\n const settings = loadSettings();\n settings.models.subagentModels[agentType] = model.id;\n saveSettings(settings);\n }\n ctx.showInfo(`Subagent model set for ${scopeLabel}: ${model.id}`);\n } catch (err) {\n ctx.showError(`Failed to set subagent model: ${err instanceof Error ? err.message : String(err)}`);\n }\n resolve();\n },\n onCancel: () => {\n ctx.state.ui.hideOverlay();\n resolve();\n },\n });\n\n showModalOverlay(ctx.state.ui, selector, { widthPercent: 0.8, maxHeight: '60%' });\n selector.focused = true;\n });\n}\n\nasync function showSubagentScopeThenList(\n ctx: SlashCommandContext,\n agentType: string,\n agentTypeLabel: string,\n): Promise<void> {\n const scopes = [\n {\n label: 'Thread default',\n description: `Default for ${agentTypeLabel} subagents in this thread`,\n scope: 'thread' as const,\n },\n {\n label: 'Global default',\n description: `Default for ${agentTypeLabel} subagents in all threads`,\n scope: 'global' as const,\n },\n ];\n\n const answer = await askModalQuestion(ctx.state.ui, {\n question: `Select scope for ${agentTypeLabel} subagents`,\n options: scopes.map(s => ({\n label: s.label,\n description: s.description,\n })),\n });\n\n try {\n const selected = scopes.find(s => s.label === answer);\n if (selected) {\n await showSubagentModelListForScope(ctx, selected.scope, agentType, agentTypeLabel);\n }\n } catch (err) {\n ctx.showError(`Subagent selection failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nfunction getConfiguredSubagentTypes(\n ctx: SlashCommandContext,\n): Array<{ id: string; label: string; description: string }> {\n const harnessWithConfig = ctx.state.harness as unknown as {\n config?: {\n subagents?: Array<{ id: string; name: string; description: string }>;\n };\n };\n const configuredSubagents = harnessWithConfig.config?.subagents;\n\n return configuredSubagents && configuredSubagents.length > 0\n ? configuredSubagents.map(subagent => ({\n id: subagent.id,\n label: subagent.name,\n description: subagent.description,\n }))\n : BUILT_IN_SUBAGENT_TYPES;\n}\n\nexport async function handleSubagentsCommand(ctx: SlashCommandContext): Promise<void> {\n const agentTypes = getConfiguredSubagentTypes(ctx);\n\n const answer = await askModalQuestion(ctx.state.ui, {\n question: 'Select subagent type',\n options: agentTypes.map(t => ({\n label: t.label,\n description: t.description,\n })),\n });\n\n try {\n const selected = agentTypes.find(t => t.label === answer);\n if (selected) {\n await showSubagentScopeThenList(ctx, selected.id, selected.label);\n }\n } catch (err) {\n ctx.showError(`Subagent selection failed: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n","/**\n * Observational Memory settings component.\n * Uses pi-tui's SettingsList for a clean settings UI with\n * threshold configuration and model selection submenus.\n *\n * Changes apply immediately — Esc closes the panel.\n */\n\nimport { Box, Container, Input, SelectList, SettingsList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable, SelectItem, SettingItem, TUI } from '@earendil-works/pi-tui';\nimport { theme, getSettingsListTheme, getSelectListTheme } from '../theme.js';\nimport { ModelSelectorComponent } from './model-selector.js';\nimport type { ModelItem } from './model-selector.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface OMSettingsConfig {\n observerModelId: string;\n reflectorModelId: string;\n observationThreshold: number;\n reflectionThreshold: number;\n cavemanObservations: boolean;\n observeAttachments: 'auto' | boolean;\n}\n\nexport interface OMSettingsCallbacks {\n onObserverModelChange: (model: ModelItem) => void | Promise<void>;\n onReflectorModelChange: (model: ModelItem) => void | Promise<void>;\n onObservationThresholdChange: (value: number) => void;\n onReflectionThresholdChange: (value: number) => void;\n onCavemanObservationsChange: (enabled: boolean) => void;\n onObserveAttachmentsChange: (value: 'auto' | boolean) => void | Promise<void>;\n onClose: () => void;\n}\n\ninterface BooleanSubmenuLabels {\n onLabel?: string;\n offLabel?: string;\n onDescription?: string;\n offDescription?: string;\n}\n\n// =============================================================================\n// Threshold presets (in tokens)\n// =============================================================================\n\nconst OBSERVATION_THRESHOLDS = [5_000, 10_000, 15_000, 20_000, 30_000, 50_000, 75_000, 100_000];\n\nconst REFLECTION_THRESHOLDS = [10_000, 20_000, 30_000, 40_000, 60_000, 80_000, 100_000, 150_000];\n\nfunction formatTokens(n: number): string {\n if (n >= 1000) return `${(n / 1000).toFixed(0)}k`;\n return String(n);\n}\n\nfunction parseTokenInput(input: string): number | null {\n const trimmed = input.trim().toLowerCase();\n if (!trimmed) return null;\n\n // Match patterns like \"30k\", \"30\", \"30000\", \"1.5k\"\n const match = trimmed.match(/^(\\d+(?:\\.\\d+)?)\\s*k?$/);\n if (!match) return null;\n\n const num = parseFloat(match[1]!);\n if (isNaN(num) || num <= 0) return null;\n\n // \"30k\" → 30,000\n if (trimmed.endsWith('k')) {\n return num * 1000;\n }\n // Small numbers (< 500) assumed to be in thousands: \"30\" → 30,000\n if (num < 500) {\n return num * 1000;\n }\n // Large numbers used as-is: \"30000\" → 30,000\n return num;\n}\n\n// =============================================================================\n// Threshold Input Submenu\n// =============================================================================\n\nclass ThresholdSubmenu extends Container {\n private input: Input;\n private selectList: SelectList;\n private onDone: (value: number) => void;\n private onBack: () => void;\n private inInputMode = true;\n\n constructor(\n title: string,\n currentValue: number,\n presets: number[],\n onDone: (value: number) => void,\n onBack: () => void,\n ) {\n super();\n this.onDone = onDone;\n this.onBack = onBack;\n\n this.addChild(new Text(theme.bold(theme.fg('accent', title)), 0, 0));\n this.addChild(new Spacer(1));\n\n // Input for custom value — type a number like 30 for 30k\n this.addChild(new Text(theme.fg('muted', ' _k tokens (type a number, e.g. 30 for 30k):'), 0, 0));\n this.input = new Input();\n this.addChild(this.input);\n this.addChild(new Spacer(1));\n\n // Preset list\n this.addChild(new Text(theme.fg('muted', ' Or pick a preset:'), 0, 0));\n\n const items: SelectItem[] = presets.map(p => ({\n value: String(p),\n label: ` ${formatTokens(p)} tokens`,\n }));\n\n this.selectList = new SelectList(items, Math.min(items.length, 8), getSelectListTheme());\n\n // Pre-select current value\n const currentIndex = presets.indexOf(currentValue);\n if (currentIndex !== -1) {\n this.selectList.setSelectedIndex(currentIndex);\n }\n\n this.selectList.onSelect = (item: SelectItem) => {\n this.onDone(parseInt(item.value, 10));\n };\n this.selectList.onCancel = onBack;\n\n this.addChild(this.selectList);\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('dim', ' Enter to confirm · ↓ for presets · Esc to go back'), 0, 0));\n }\n\n handleInput(data: string): void {\n if (this.inInputMode) {\n // Enter — submit the typed value\n if (data === '\\r' || data === '\\n') {\n const parsed = parseTokenInput(this.input.getValue());\n if (parsed) {\n this.onDone(parsed);\n }\n return;\n }\n\n // Escape\n if (data === '\\x1b' || data === '\\x1b\\x1b') {\n this.onBack();\n return;\n }\n\n // Down arrow — switch to preset list\n if (data === '\\x1b[B') {\n this.inInputMode = false;\n return;\n }\n\n // Delegate to input (numbers, backspace, etc.)\n this.input.handleInput(data);\n } else {\n // In preset list mode\n // Escape — go back (handled by selectList.onCancel)\n this.selectList.handleInput(data);\n }\n }\n}\n\n// =============================================================================\n// Boolean Submenu\n// =============================================================================\n\nclass BooleanSubmenu extends SelectList {\n constructor(\n currentValue: boolean,\n onSelect: (value: boolean) => void,\n onBack: () => void,\n labels?: BooleanSubmenuLabels,\n ) {\n const items: SelectItem[] = [\n { value: 'on', label: ` ${labels?.onLabel ?? 'On'}`, description: labels?.onDescription ?? '' },\n { value: 'off', label: ` ${labels?.offLabel ?? 'Off'}`, description: labels?.offDescription ?? '' },\n ];\n super(items, items.length, getSelectListTheme());\n\n this.setSelectedIndex(currentValue ? 0 : 1);\n\n this.onSelect = (item: SelectItem) => {\n onSelect(item.value === 'on');\n };\n this.onCancel = onBack;\n }\n}\n\n// =============================================================================\n// OM Settings Component\n// =============================================================================\n\nexport class OMSettingsComponent extends Box implements Focusable {\n private settingsList: SettingsList;\n\n // Focusable implementation\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n }\n\n constructor(config: OMSettingsConfig, callbacks: OMSettingsCallbacks, models: ModelItem[], tui: TUI) {\n super(2, 1, (text: string) => theme.bg('overlayBg', text));\n\n // Title\n this.addChild(new Text(theme.bold(theme.fg('accent', 'Observational Memory Settings')), 0, 0));\n this.addChild(new Spacer(1));\n\n // Build settings items\n const items: SettingItem[] = [\n {\n id: 'observer-model',\n label: 'Observer model',\n description: 'Model used for observing and summarizing message history',\n currentValue: getShortModelName(config.observerModelId),\n submenu: (_currentValue, done) =>\n new ModelSelectorComponent({\n tui,\n models,\n currentModelId: config.observerModelId,\n title: 'Observer Model',\n onSelect: async model => {\n await callbacks.onObserverModelChange(model);\n config.observerModelId = model.id;\n done(getShortModelName(model.id));\n },\n onCancel: () => done(),\n }),\n },\n {\n id: 'reflector-model',\n label: 'Reflector model',\n description: 'Model used for compressing observations when they grow too large',\n currentValue: getShortModelName(config.reflectorModelId),\n submenu: (_currentValue, done) =>\n new ModelSelectorComponent({\n tui,\n models,\n currentModelId: config.reflectorModelId,\n title: 'Reflector Model',\n onSelect: async model => {\n await callbacks.onReflectorModelChange(model);\n config.reflectorModelId = model.id;\n done(getShortModelName(model.id));\n },\n onCancel: () => done(),\n }),\n },\n {\n id: 'obs-threshold',\n label: 'Observation threshold',\n description:\n 'Token count before triggering observation. ' +\n 'Lower = more frequent, higher = more context before observing',\n currentValue: formatTokens(config.observationThreshold),\n submenu: (_currentValue, done) =>\n new ThresholdSubmenu(\n 'Observation Threshold',\n config.observationThreshold,\n OBSERVATION_THRESHOLDS,\n value => {\n config.observationThreshold = value;\n callbacks.onObservationThresholdChange(value);\n done(formatTokens(value));\n },\n () => done(),\n ),\n },\n {\n id: 'ref-threshold',\n label: 'Reflection threshold',\n description:\n 'Token count of observations before triggering compression. ' +\n 'Lower = more frequent, higher = more observations before compressing',\n currentValue: formatTokens(config.reflectionThreshold),\n submenu: (_currentValue, done) =>\n new ThresholdSubmenu(\n 'Reflection Threshold',\n config.reflectionThreshold,\n REFLECTION_THRESHOLDS,\n value => {\n config.reflectionThreshold = value;\n callbacks.onReflectionThresholdChange(value);\n done(formatTokens(value));\n },\n () => done(),\n ),\n },\n {\n id: 'caveman-observations',\n label: 'Caveman observations',\n description:\n 'Optional. Use terse caveman-style compression for observations and reflections ' +\n 'instead of standard prose. Off by default; turn on if you prefer the more compact style',\n currentValue: config.cavemanObservations ? 'On' : 'Off',\n submenu: (_currentValue, done) =>\n new BooleanSubmenu(\n config.cavemanObservations,\n value => {\n config.cavemanObservations = value;\n callbacks.onCavemanObservationsChange(value);\n done(value ? 'On' : 'Off');\n },\n () => done(),\n {\n onDescription: 'Caveman-style terse compression',\n offDescription: 'Standard prose observations',\n },\n ),\n },\n {\n id: 'observe-attachments',\n label: 'Observe attachments',\n description:\n 'Forward image and file attachments to the Observer LLM. ' + 'Auto checks model capabilities to decide',\n currentValue: formatAttachmentValue(config.observeAttachments),\n submenu: (_currentValue, done) => {\n const items: SelectItem[] = [\n { value: 'auto', label: ' Auto', description: 'Use model capabilities to decide' },\n { value: 'on', label: ' On', description: 'Always forward attachments' },\n { value: 'off', label: ' Off', description: 'Drop attachments (placeholder text only)' },\n ];\n const list = new SelectList(items, items.length, getSelectListTheme());\n const currentIndex = config.observeAttachments === 'auto' ? 0 : config.observeAttachments ? 1 : 2;\n list.setSelectedIndex(currentIndex);\n list.onSelect = async (item: SelectItem) => {\n const value: 'auto' | boolean = item.value === 'auto' ? 'auto' : item.value === 'on';\n try {\n await callbacks.onObserveAttachmentsChange(value);\n config.observeAttachments = value;\n done(formatAttachmentValue(value));\n } catch (error) {\n console.error('Failed to update observe attachments setting:', error);\n }\n };\n list.onCancel = () => done();\n return list;\n },\n },\n ];\n\n this.settingsList = new SettingsList(\n items,\n 11,\n getSettingsListTheme(),\n (_id, _newValue) => {\n // All changes handled via submenu callbacks\n },\n callbacks.onClose,\n );\n\n this.addChild(this.settingsList);\n }\n\n handleInput(data: string): void {\n this.settingsList.handleInput(data);\n }\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction getShortModelName(modelId: string): string {\n if (!modelId) return '(none)';\n const parts = modelId.split('/');\n return parts.length > 1 ? parts.slice(1).join('/') : modelId;\n}\n\nfunction formatAttachmentValue(value: 'auto' | boolean): string {\n if (value === 'auto') return 'Auto';\n return value ? 'On' : 'Off';\n}\n","import type { GlobalSettings } from '../../onboarding/settings.js';\nimport { loadSettings, saveSettings } from '../../onboarding/settings.js';\nimport { OMSettingsComponent } from '../components/om-settings.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { promptForApiKeyIfNeeded } from '../prompt-api-key.js';\nimport type { SlashCommandContext } from './types.js';\n\n/**\n * Apply a role-specific OM model override to an in-memory `GlobalSettings`.\n *\n * When switching `activeOmPackId` from a built-in pack to `'custom'` we also\n * snapshot the *other* role's currently-resolved model into its override\n * field. Without this, the other role would silently lose its model on next\n * startup because `resolveOmRoleModel` would no longer resolve it from the\n * (now-overridden) pack.\n *\n * Exported for unit testing; `persistOmRoleOverride` is the disk-backed wrapper.\n */\nexport function applyOmRoleOverride(\n settings: GlobalSettings,\n role: 'observer' | 'reflector',\n modelId: string,\n otherRoleCurrentModelId: string | null,\n): void {\n const wasBuiltinPack = settings.models.activeOmPackId !== null && settings.models.activeOmPackId !== 'custom';\n\n if (role === 'observer') {\n if (wasBuiltinPack && otherRoleCurrentModelId && !settings.models.reflectorModelOverride) {\n settings.models.reflectorModelOverride = otherRoleCurrentModelId;\n }\n settings.models.observerModelOverride = modelId;\n } else {\n if (wasBuiltinPack && otherRoleCurrentModelId && !settings.models.observerModelOverride) {\n settings.models.observerModelOverride = otherRoleCurrentModelId;\n }\n settings.models.reflectorModelOverride = modelId;\n }\n\n settings.models.activeOmPackId = 'custom';\n}\n\nfunction persistOmRoleOverride(\n role: 'observer' | 'reflector',\n modelId: string,\n otherRoleCurrentModelId: string | null,\n): void {\n const settings = loadSettings();\n applyOmRoleOverride(settings, role, modelId, otherRoleCurrentModelId);\n saveSettings(settings);\n}\n\nfunction persistOmThresholds({\n observationThreshold,\n reflectionThreshold,\n}: {\n observationThreshold?: number;\n reflectionThreshold?: number;\n}): void {\n const settings = loadSettings();\n if (observationThreshold !== undefined) {\n settings.models.omObservationThreshold = observationThreshold;\n }\n if (reflectionThreshold !== undefined) {\n settings.models.omReflectionThreshold = reflectionThreshold;\n }\n saveSettings(settings);\n}\n\nfunction persistOmCavemanObservations(enabled: boolean): void {\n const settings = loadSettings();\n settings.models.omCavemanObservations = enabled;\n saveSettings(settings);\n}\n\nexport function persistOmObserveAttachments(value: 'auto' | boolean): void {\n const settings = loadSettings();\n settings.models.omObserveAttachments = value;\n saveSettings(settings);\n}\n\nexport async function handleOMCommand(ctx: SlashCommandContext): Promise<void> {\n const availableModels = await ctx.state.harness.listAvailableModels();\n\n const config = {\n observerModelId: ctx.state.harness.getObserverModelId() ?? '',\n reflectorModelId: ctx.state.harness.getReflectorModelId() ?? '',\n observationThreshold: ctx.state.harness.getObservationThreshold() ?? 30_000,\n reflectionThreshold: ctx.state.harness.getReflectionThreshold() ?? 40_000,\n cavemanObservations:\n ((ctx.state.harness.getState() as Record<string, unknown>).cavemanObservations as boolean | undefined) ?? false,\n observeAttachments:\n ((ctx.state.harness.getState() as Record<string, unknown>).observeAttachments as 'auto' | boolean | undefined) ??\n 'auto',\n };\n\n return new Promise<void>(resolve => {\n const settings = new OMSettingsComponent(\n config,\n {\n onObserverModelChange: async model => {\n await promptForApiKeyIfNeeded(ctx.state.ui, model, ctx.authStorage);\n const currentReflector = ctx.state.harness.getReflectorModelId() ?? null;\n await ctx.state.harness.switchObserverModel({ modelId: model.id });\n persistOmRoleOverride('observer', model.id, currentReflector);\n ctx.showInfo(`Observer model → ${model.id}`);\n },\n onReflectorModelChange: async model => {\n await promptForApiKeyIfNeeded(ctx.state.ui, model, ctx.authStorage);\n const currentObserver = ctx.state.harness.getObserverModelId() ?? null;\n await ctx.state.harness.switchReflectorModel({ modelId: model.id });\n persistOmRoleOverride('reflector', model.id, currentObserver);\n ctx.showInfo(`Reflector model → ${model.id}`);\n },\n onObservationThresholdChange: async value => {\n await ctx.state.harness.setState({ observationThreshold: value } as any);\n await ctx.state.harness.setThreadSetting({ key: 'observationThreshold', value });\n persistOmThresholds({ observationThreshold: value });\n },\n onReflectionThresholdChange: async value => {\n await ctx.state.harness.setState({ reflectionThreshold: value } as any);\n await ctx.state.harness.setThreadSetting({ key: 'reflectionThreshold', value });\n persistOmThresholds({ reflectionThreshold: value });\n },\n onCavemanObservationsChange: async enabled => {\n await ctx.state.harness.setState({ cavemanObservations: enabled } as any);\n await ctx.state.harness.setThreadSetting({ key: 'cavemanObservations', value: enabled });\n persistOmCavemanObservations(enabled);\n ctx.showInfo(`Caveman observations → ${enabled ? 'on' : 'off'}`);\n },\n onObserveAttachmentsChange: async value => {\n await ctx.state.harness.setState({ observeAttachments: value } as any);\n await ctx.state.harness.setThreadSetting({ key: 'observeAttachments', value });\n persistOmObserveAttachments(value);\n const label = value === 'auto' ? 'auto' : value ? 'on' : 'off';\n ctx.showInfo(`Observe attachments → ${label}`);\n },\n onClose: () => {\n ctx.state.ui.hideOverlay();\n ctx.updateStatusLine();\n resolve();\n },\n },\n availableModels,\n ctx.state.ui,\n );\n\n showModalOverlay(ctx.state.ui, settings, { widthPercent: 0.8, maxHeight: '70%' });\n settings.focused = true;\n });\n}\n","/**\n * General settings component.\n * Uses pi-tui's SettingsList for a clean overlay with\n * notifications, YOLO mode, and thinking level configuration.\n *\n * Changes apply immediately — Esc closes the panel.\n */\n\nimport { Box, Container, SelectList, SettingsList, Spacer, Text, matchesKey } from '@earendil-works/pi-tui';\nimport type { Focusable, SelectItem, SettingItem } from '@earendil-works/pi-tui';\nimport type { StorageBackend } from '../../onboarding/settings.js';\nimport type { NotificationMode } from '../notify.js';\nimport { theme, getSettingsListTheme, getSelectListTheme } from '../theme.js';\nimport { MaskedInput } from './masked-input.js';\nimport { getThinkingLevelsForModel } from './thinking-settings.js';\n\n// =============================================================================\n// Types\n// =============================================================================\nexport interface SettingsConfig {\n notifications: NotificationMode;\n yolo: boolean;\n thinkingLevel: string;\n currentModelId: string;\n escapeAsCancel: boolean;\n quietMode: boolean;\n quietModeMaxToolPreviewLines: number;\n storageBackend: StorageBackend;\n pgConnectionString: string;\n libsqlUrl: string;\n experimentalGithubSignals: boolean;\n}\n\nexport interface SettingsCallbacks {\n onNotificationsChange: (mode: NotificationMode) => void;\n onYoloChange: (enabled: boolean) => void;\n onThinkingLevelChange: (level: string) => void;\n onEscapeAsCancelChange: (enabled: boolean) => void;\n onQuietModeChange: (enabled: boolean) => void;\n onQuietModeMaxToolPreviewLinesChange: (lines: number) => void;\n onStorageBackendChange: (backend: StorageBackend, connectionUrl?: string) => void;\n onExperimentalGithubSignalsChange: (enabled: boolean) => boolean | void | Promise<boolean | void>;\n onApiKeys?: () => void;\n onClose: () => void;\n}\n\n// =============================================================================\n// Select Submenu (reusable for any enum-style setting)\n// =============================================================================\n\nclass SelectSubmenu extends SelectList {\n constructor(\n items: SelectItem[],\n currentValue: string,\n onSelect: (value: string) => void | Promise<void>,\n onBack: () => void,\n ) {\n super(items, Math.min(items.length, 8), getSelectListTheme());\n\n const currentIndex = items.findIndex(i => i.value === currentValue);\n if (currentIndex !== -1) {\n this.setSelectedIndex(currentIndex);\n }\n\n this.onSelect = async (item: SelectItem) => {\n await onSelect(item.value);\n };\n this.onCancel = onBack;\n }\n}\n\n// =============================================================================\n// Storage Backend Submenu (backend selector → optional PG connection input)\n// =============================================================================\n\nclass StorageBackendSubmenu extends Container {\n private phase: 'select' | 'connection' = 'select';\n private pendingBackend: StorageBackend = 'libsql';\n private selectList: SelectList;\n private input!: MaskedInput;\n private onDone: (backend: StorageBackend, connectionUrl?: string) => void;\n private onBack: () => void;\n private currentPgConnectionString: string;\n private currentLibsqlUrl: string;\n\n constructor(\n currentBackend: StorageBackend,\n currentPgConnectionString: string,\n currentLibsqlUrl: string,\n onDone: (backend: StorageBackend, connectionUrl?: string) => void,\n onBack: () => void,\n ) {\n super();\n this.onDone = onDone;\n this.onBack = onBack;\n this.currentPgConnectionString = currentPgConnectionString;\n this.currentLibsqlUrl = currentLibsqlUrl;\n\n // Phase 1: backend selection\n const items: SelectItem[] = [\n {\n value: 'libsql',\n label: ' LibSQL',\n description: 'Local file-based SQLite or remote Turso URL',\n },\n {\n value: 'pg',\n label: ' PostgreSQL',\n description: 'Remote PostgreSQL (requires connection string)',\n },\n ];\n\n this.selectList = new SelectList(items, items.length, getSelectListTheme());\n const currentIndex = items.findIndex(i => i.value === currentBackend);\n if (currentIndex !== -1) this.selectList.setSelectedIndex(currentIndex);\n\n this.selectList.onSelect = (item: SelectItem) => {\n this.pendingBackend = item.value as StorageBackend;\n this.showConnectionInput();\n };\n this.selectList.onCancel = onBack;\n\n this.addChild(this.selectList);\n }\n\n private showConnectionInput(): void {\n this.phase = 'connection';\n this.clear();\n\n if (this.pendingBackend === 'pg') {\n this.addChild(new Text(theme.bold(theme.fg('accent', 'PostgreSQL Connection')), 0, 0));\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('muted', 'Enter a connection string:'), 0, 0));\n this.addChild(new Text(theme.fg('dim', 'e.g. postgresql://user:pass@localhost:5432/mydb'), 0, 0));\n } else {\n this.addChild(new Text(theme.bold(theme.fg('accent', 'LibSQL Connection')), 0, 0));\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('muted', 'Enter a URL or leave empty for default local file:'), 0, 0));\n this.addChild(new Text(theme.fg('dim', 'e.g. libsql://your-db.turso.io'), 0, 0));\n }\n this.addChild(new Spacer(1));\n\n this.input = new MaskedInput();\n const currentValue = this.pendingBackend === 'pg' ? this.currentPgConnectionString : this.currentLibsqlUrl;\n if (currentValue) {\n this.input.setValue(currentValue);\n }\n this.addChild(this.input);\n\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('dim', 'Enter to save · Esc to go back'), 0, 0));\n }\n\n handleInput(data: string): void {\n if (this.phase === 'select') {\n this.selectList.handleInput(data);\n return;\n }\n\n // Connection string input phase\n if (matchesKey(data, 'enter') || data === '\\r' || data === '\\n') {\n const value = this.input.getValue().trim();\n if (this.pendingBackend === 'pg') {\n // PG requires a connection string\n if (value) {\n this.onDone('pg', value);\n }\n } else {\n // LibSQL: empty = default local file, non-empty = custom URL\n this.onDone('libsql', value || undefined);\n }\n return;\n }\n\n if (matchesKey(data, 'escape') || data === '\\x1b' || data === '\\x1b\\x1b') {\n this.onBack();\n return;\n }\n\n this.input.handleInput(data);\n }\n}\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\nfunction quietPreviewLinesLabel(lines: number): string {\n return lines === 0 ? 'None' : `${lines} line${lines === 1 ? '' : 's'}`;\n}\n\nfunction storageLabel(config: SettingsConfig): string {\n if (config.storageBackend === 'pg') return 'PostgreSQL';\n if (config.libsqlUrl) return `LibSQL (${config.libsqlUrl})`;\n return 'LibSQL (local file)';\n}\n\n// =============================================================================\n// Settings Component\n// =============================================================================\n\nexport class SettingsComponent extends Box implements Focusable {\n private settingsList: SettingsList;\n private _focused = false;\n\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n }\n\n constructor(config: SettingsConfig, callbacks: SettingsCallbacks) {\n super(4, 2, (text: string) => theme.bg('overlayBg', text));\n\n // Title\n this.addChild(new Text(theme.bold(theme.fg('accent', 'Settings')), 0, 0));\n this.addChild(new Spacer(1));\n\n // Build settings items\n const notificationModes: {\n value: NotificationMode;\n label: string;\n desc: string;\n }[] = [\n { value: 'off', label: 'Off', desc: 'No notifications' },\n { value: 'bell', label: 'Bell', desc: 'Terminal bell (\\\\x07)' },\n { value: 'system', label: 'System', desc: 'Native OS notification' },\n { value: 'both', label: 'Both', desc: 'Bell + system notification' },\n ];\n\n const thinkingLevels = getThinkingLevelsForModel(config.currentModelId).map(level => ({\n value: level.id,\n label: level.label,\n desc: level.description,\n }));\n\n const getNotifLabel = (mode: NotificationMode) => notificationModes.find(m => m.value === mode)?.label ?? mode;\n\n const getThinkingLabel = (level: string) => thinkingLevels.find(l => l.value === level)?.label ?? level;\n\n const items: SettingItem[] = [\n {\n id: 'notifications',\n label: 'Notifications',\n description: 'How to alert when the agent needs attention',\n currentValue: getNotifLabel(config.notifications),\n submenu: (_currentValue, done) =>\n new SelectSubmenu(\n notificationModes.map(m => ({\n value: m.value,\n label: ` ${m.label}`,\n description: m.desc,\n })),\n config.notifications,\n value => {\n config.notifications = value as NotificationMode;\n callbacks.onNotificationsChange(config.notifications);\n done(getNotifLabel(config.notifications));\n },\n () => done(),\n ),\n },\n {\n id: 'yolo',\n label: 'YOLO mode',\n description: 'Auto-approve all tool calls without confirmation',\n currentValue: config.yolo ? 'On' : 'Off',\n submenu: (_currentValue, done) =>\n new SelectSubmenu(\n [\n {\n value: 'on',\n label: ' On',\n description: 'Auto-approve all tools',\n },\n {\n value: 'off',\n label: ' Off',\n description: 'Require approval for tools',\n },\n ],\n config.yolo ? 'on' : 'off',\n value => {\n config.yolo = value === 'on';\n callbacks.onYoloChange(config.yolo);\n done(config.yolo ? 'On' : 'Off');\n },\n () => done(),\n ),\n },\n {\n id: 'thinking',\n label: 'Thinking level',\n description: 'Reasoning depth level',\n currentValue: getThinkingLabel(config.thinkingLevel),\n submenu: (_currentValue, done) =>\n new SelectSubmenu(\n thinkingLevels.map(l => ({\n value: l.value,\n label: ` ${l.label}`,\n description: l.desc,\n })),\n config.thinkingLevel,\n value => {\n config.thinkingLevel = value;\n callbacks.onThinkingLevelChange(value);\n done(getThinkingLabel(value));\n },\n () => done(),\n ),\n },\n {\n id: 'escapeAsCancel',\n label: 'Escape cancels',\n description: 'Use Escape to cancel/clear (Ctrl+C always works).',\n currentValue: config.escapeAsCancel ? 'On' : 'Off',\n submenu: (_currentValue, done) =>\n new SelectSubmenu(\n [\n {\n value: 'on',\n label: ' On',\n description: 'Escape clears input / aborts',\n },\n {\n value: 'off',\n label: ' Off',\n description: 'Only Ctrl+C clears / aborts',\n },\n ],\n config.escapeAsCancel ? 'on' : 'off',\n value => {\n config.escapeAsCancel = value === 'on';\n callbacks.onEscapeAsCancelChange(config.escapeAsCancel);\n done(config.escapeAsCancel ? 'On' : 'Off');\n },\n () => done(),\n ),\n },\n {\n id: 'quietMode',\n label: 'Quiet mode',\n description: 'Render tool calls compactly and collapse subagent output after completion.',\n currentValue: config.quietMode ? 'On' : 'Off',\n submenu: (_currentValue, done) =>\n new SelectSubmenu(\n [\n {\n value: 'on',\n label: ' On',\n description: 'Compact older tool calls and completed subagents',\n },\n {\n value: 'off',\n label: ' Off',\n description: 'Keep normal tool and subagent rendering',\n },\n ],\n config.quietMode ? 'on' : 'off',\n value => {\n config.quietMode = value === 'on';\n callbacks.onQuietModeChange(config.quietMode);\n done(config.quietMode ? 'On' : 'Off');\n },\n () => done(),\n ),\n },\n ...(config.quietMode\n ? [\n {\n id: 'quietModeMaxToolPreviewLines',\n label: 'Quiet mode tool preview lines',\n description: 'Maximum compact tool detail preview lines. Set to None to hide previews.',\n currentValue: quietPreviewLinesLabel(config.quietModeMaxToolPreviewLines),\n submenu: (_currentValue: string, done: (value?: string) => void) =>\n new SelectSubmenu(\n [0, 1, 2, 4, 8].map(lines => ({\n value: String(lines),\n label: ` ${quietPreviewLinesLabel(lines)}`,\n description:\n lines === 0\n ? 'Hide compact tool detail previews'\n : `Show up to ${lines} preview line${lines === 1 ? '' : 's'}`,\n })),\n String(config.quietModeMaxToolPreviewLines),\n value => {\n config.quietModeMaxToolPreviewLines = Number(value);\n callbacks.onQuietModeMaxToolPreviewLinesChange(config.quietModeMaxToolPreviewLines);\n done(quietPreviewLinesLabel(config.quietModeMaxToolPreviewLines));\n },\n () => done(),\n ),\n },\n ]\n : []),\n {\n id: 'experimentalGithubSignals',\n label: 'Experimental GitHub signals',\n description: 'Enable local-first GitHub PR subscriptions with gitcrawl (restart required).',\n currentValue: config.experimentalGithubSignals ? 'On' : 'Off',\n submenu: (_currentValue, done) =>\n new SelectSubmenu(\n [\n {\n value: 'on',\n label: ' On',\n description: 'Enable GitHub signal processor and PR subscription tools',\n },\n {\n value: 'off',\n label: ' Off',\n description: 'Disable GitHub signal processor and tools',\n },\n ],\n config.experimentalGithubSignals ? 'on' : 'off',\n async value => {\n const nextValue = value === 'on';\n const accepted = await callbacks.onExperimentalGithubSignalsChange(nextValue);\n config.experimentalGithubSignals = accepted === false ? !nextValue : nextValue;\n done(config.experimentalGithubSignals ? 'On' : 'Off');\n },\n () => done(),\n ),\n },\n {\n id: 'storageBackend',\n label: 'Storage backend',\n description: 'Database backend for threads, memory, and agent data (restart required)',\n currentValue: storageLabel(config),\n submenu: (_currentValue, done) =>\n new StorageBackendSubmenu(\n config.storageBackend,\n config.pgConnectionString,\n config.libsqlUrl,\n (backend: StorageBackend, connectionUrl?: string) => {\n config.storageBackend = backend;\n if (backend === 'pg' && connectionUrl !== undefined) {\n config.pgConnectionString = connectionUrl;\n } else if (backend === 'libsql') {\n config.libsqlUrl = connectionUrl ?? '';\n }\n callbacks.onStorageBackendChange(backend, connectionUrl);\n done(storageLabel(config));\n },\n () => done(),\n ),\n },\n ];\n\n if (callbacks.onApiKeys) {\n items.push({\n id: 'apiKeys',\n label: 'API Keys',\n description: 'Add, update, or remove API keys for model providers',\n currentValue: 'Manage →',\n submenu: (_currentValue, done) => {\n done();\n callbacks.onApiKeys!();\n return new Text('', 0, 0);\n },\n });\n }\n\n this.settingsList = new SettingsList(\n items,\n 10,\n getSettingsListTheme(),\n (_id, _newValue) => {\n // All changes handled via submenu callbacks\n },\n callbacks.onClose,\n );\n\n this.addChild(this.settingsList);\n }\n\n handleInput(data: string): void {\n this.settingsList.handleInput(data);\n }\n}\n","/**\n * /api-keys command: manage API keys for model providers.\n * Lists known providers with their key status and allows adding, updating, or removing keys.\n */\n\nimport { Box, SelectList, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { SelectItem } from '@earendil-works/pi-tui';\n\nimport { ApiKeyDialogComponent } from '../components/api-key-dialog.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { getSelectListTheme, theme } from '../theme.js';\nimport type { SlashCommandContext } from './types.js';\n\ninterface ProviderInfo {\n provider: string;\n envVar?: string;\n source: 'env' | 'stored' | 'none';\n}\n\n/**\n * Build a deduplicated list of providers from available models,\n * annotated with their current key source.\n */\nfunction getProviderList(\n ctx: SlashCommandContext,\n models: { provider: string; hasApiKey: boolean; apiKeyEnvVar?: string }[],\n): ProviderInfo[] {\n const seen = new Map<string, ProviderInfo>();\n\n for (const model of models) {\n if (seen.has(model.provider)) continue;\n\n let source: ProviderInfo['source'] = 'none';\n if (ctx.authStorage?.hasStoredApiKey(model.provider)) {\n source = 'stored';\n } else if (model.apiKeyEnvVar && process.env[model.apiKeyEnvVar]) {\n source = 'env';\n } else if (model.hasApiKey) {\n source = 'env';\n }\n\n seen.set(model.provider, {\n provider: model.provider,\n envVar: model.apiKeyEnvVar,\n source,\n });\n }\n\n return Array.from(seen.values()).sort((a, b) => a.provider.localeCompare(b.provider));\n}\n\nfunction statusLabel(info: ProviderInfo): string {\n switch (info.source) {\n case 'env':\n return theme.fg('success', '✓') + theme.fg('dim', ' (env)');\n case 'stored':\n return theme.fg('success', '✓') + theme.fg('dim', ' (stored)');\n case 'none':\n return theme.fg('error', '✗') + theme.fg('dim', ' (not set)');\n }\n}\n\nfunction buildItems(providers: ProviderInfo[]): SelectItem[] {\n return providers.map(info => ({\n value: info.provider,\n label: ` ${info.provider} ${statusLabel(info)}${info.envVar ? theme.fg('dim', ` ${info.envVar}`) : ''}`,\n }));\n}\n\nexport async function handleApiKeysCommand(ctx: SlashCommandContext): Promise<void> {\n const models = await ctx.state.harness.listAvailableModels();\n let providers = getProviderList(ctx, models);\n\n if (providers.length === 0) {\n ctx.showInfo('No model providers found.');\n return;\n }\n\n return new Promise<void>(resolve => {\n const container = new Box(4, 2, text => theme.bg('overlayBg', text));\n container.addChild(new Text(theme.bold(theme.fg('accent', 'API Keys')), 0, 0));\n container.addChild(new Spacer(1));\n\n const detailText = new Text('', 0, 0);\n\n // Track which provider is currently highlighted\n let currentSelection = providers[0]!.provider;\n\n const updateDetail = (providerName: string) => {\n const info = providers.find(p => p.provider === providerName);\n if (!info) return;\n if (info.source === 'env') {\n detailText.setText(\n theme.fg('dim', ' Key set via environment variable. To change it, update your shell environment.'),\n );\n } else if (info.source === 'stored') {\n detailText.setText(theme.fg('dim', ' Key stored locally. Press Enter to update or Delete to remove.'));\n } else {\n detailText.setText(theme.fg('dim', ' No key configured. Press Enter to add one.'));\n }\n ctx.state.ui.requestRender();\n };\n\n // Build a SelectList with all event handlers wired up.\n // Called on initial render and again after save/remove to refresh status labels.\n let selectList: SelectList;\n const buildSelectList = (): SelectList => {\n const items = buildItems(providers);\n const list = new SelectList(items, Math.min(items.length, 15), getSelectListTheme());\n\n list.onSelect = (item: SelectItem) => {\n const info = providers.find(p => p.provider === item.value);\n if (!info) return;\n\n if (info.source === 'env') {\n ctx.showInfo(\n `${info.provider} key is set via environment variable${info.envVar ? ` (${info.envVar})` : ''}. Update it in your shell environment.`,\n );\n return;\n }\n\n showKeyDialog(info);\n };\n\n list.onCancel = () => {\n ctx.state.ui.hideOverlay();\n resolve();\n };\n\n list.onSelectionChange = (item: SelectItem) => {\n currentSelection = item.value;\n updateDetail(item.value);\n };\n\n // Handle Delete key to remove stored keys\n const originalHandleInput = list.handleInput.bind(list);\n list.handleInput = (data: string) => {\n // Delete or Backspace\n if (data === '\\x7f' || data === '\\x1b[3~') {\n const info = providers.find(p => p.provider === currentSelection);\n if (info?.source === 'stored' && ctx.authStorage) {\n ctx.authStorage.remove(`apikey:${info.provider}`);\n if (info.envVar) {\n delete process.env[info.envVar];\n }\n providers = getProviderList(ctx, models);\n ctx.showInfo(`API key removed for ${info.provider}`);\n rebuildList();\n }\n return;\n }\n originalHandleInput(data);\n };\n\n return list;\n };\n\n const rebuildList = () => {\n const selectedIdx = Math.max(\n 0,\n providers.findIndex(p => p.provider === currentSelection),\n );\n container.clear();\n container.addChild(new Text(theme.bold(theme.fg('accent', 'API Keys')), 0, 0));\n container.addChild(new Spacer(1));\n selectList = buildSelectList();\n selectList.setSelectedIndex(selectedIdx);\n currentSelection = providers[selectedIdx]?.provider ?? providers[0]!.provider;\n container.addChild(selectList);\n container.addChild(new Spacer(1));\n container.addChild(detailText);\n container.addChild(new Spacer(1));\n container.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter add/update · Delete remove · Esc close'), 0, 0));\n updateDetail(currentSelection);\n ctx.state.ui.requestRender();\n };\n\n const showKeyDialog = (info: ProviderInfo) => {\n const dialog = new ApiKeyDialogComponent({\n providerName: info.provider,\n apiKeyEnvVar: info.envVar,\n onSubmit: (key: string) => {\n ctx.state.ui.hideOverlay();\n if (ctx.authStorage) {\n ctx.authStorage.setStoredApiKey(info.provider, key, info.envVar);\n ctx.showInfo(`API key saved for ${info.provider}`);\n providers = getProviderList(ctx, models);\n rebuildList();\n } else {\n ctx.showError('Unable to save API key: storage unavailable');\n }\n },\n onCancel: () => {\n ctx.state.ui.hideOverlay();\n },\n });\n\n showModalOverlay(ctx.state.ui, dialog, { widthPercent: 0.7, maxHeight: '50%' });\n dialog.focused = true;\n };\n\n selectList = buildSelectList();\n container.addChild(selectList);\n container.addChild(new Spacer(1));\n container.addChild(detailText);\n container.addChild(new Spacer(1));\n container.addChild(new Text(theme.fg('dim', '↑↓ navigate · Enter add/update · Delete remove · Esc close'), 0, 0));\n\n updateDetail(providers[0]!.provider);\n\n const modal = container as Box & { handleInput: (data: string) => void };\n modal.handleInput = (data: string) => selectList.handleInput(data);\n showModalOverlay(ctx.state.ui, modal, { maxHeight: '75%' });\n });\n}\n","import { execFile, spawn } from 'node:child_process';\nimport { access } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\n\nimport { Box, Spacer, Text, matchesKey } from '@earendil-works/pi-tui';\nimport type { TUI } from '@earendil-works/pi-tui';\nimport type { StorageBackend, ThinkingLevelSetting } from '../../onboarding/settings.js';\nimport { loadSettings, saveSettings } from '../../onboarding/settings.js';\nimport { SettingsComponent } from '../components/settings.js';\nimport type { IToolExecutionComponent } from '../components/tool-execution-interface.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport type { NotificationMode } from '../notify.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { handleApiKeysCommand } from './api-keys.js';\nimport type { SlashCommandContext } from './types.js';\n\nfunction getCurrentModeColor(ctx: SlashCommandContext): string | undefined {\n const color = ctx.state.harness.getCurrentMode?.()?.metadata?.color;\n return typeof color === 'string' ? color : undefined;\n}\n\nfunction commandExists(command: string): Promise<boolean> {\n return new Promise(resolve => {\n execFile('/bin/sh', ['-lc', `command -v ${command}`], error => resolve(!error));\n });\n}\n\nclass GitcrawlSetupProgress extends Box {\n private lines: string[] = [];\n private _focused = false;\n\n constructor(\n private title: string,\n private command: string,\n private onCancel: () => void,\n ) {\n super(2, 1);\n this.rebuild();\n }\n\n get focused(): boolean {\n return this._focused;\n }\n\n set focused(value: boolean) {\n this._focused = value;\n }\n\n handleInput(data: string): void {\n if (matchesKey(data, 'escape') || data === '\\x1b' || data === '\\x1b\\x1b') {\n this.onCancel();\n }\n }\n\n addOutput(chunk: Buffer | string): void {\n const text = chunk.toString();\n const lines = text\n .split(/\\r?\\n/)\n .map(line => line.trimEnd())\n .filter(Boolean);\n this.lines = [...this.lines, ...lines].slice(-4);\n this.rebuild();\n }\n\n private rebuild(): void {\n this.clear();\n this.addChild(new Text(this.title, 0, 0));\n this.addChild(new Text(this.command, 0, 0));\n this.addChild(new Text('Press Esc to cancel.', 0, 0));\n this.addChild(new Spacer(1));\n const output = this.lines.length > 0 ? this.lines : ['Waiting for Homebrew output...'];\n for (const line of output) {\n this.addChild(new Text(line, 0, 0));\n }\n }\n}\n\nfunction runGitcrawlSetupCommand(\n tui: TUI,\n title: string,\n command: string,\n executable: string,\n args: string[],\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawn(executable, args, { stdio: ['ignore', 'pipe', 'pipe'] });\n let settled = false;\n const finish = (callback: () => void) => {\n if (settled) return;\n settled = true;\n overlay.hide();\n callback();\n };\n const progress = new GitcrawlSetupProgress(title, command, () => {\n child.kill('SIGTERM');\n finish(() => reject(new Error(`${title} cancelled`)));\n });\n const overlay = showModalOverlay(tui, progress, { maxHeight: '50%' });\n overlay.focus();\n\n child.stdout.on('data', chunk => {\n progress.addOutput(chunk);\n tui.requestRender();\n });\n child.stderr.on('data', chunk => {\n progress.addOutput(chunk);\n tui.requestRender();\n });\n child.on('error', error => finish(() => reject(error)));\n child.on('close', code => {\n finish(() => {\n if (code === 0) resolve();\n else reject(new Error(`${command} exited with code ${code}`));\n });\n });\n });\n}\n\nfunction installGitcrawl(tui: TUI): Promise<void> {\n return runGitcrawlSetupCommand(tui, 'Installing gitcrawl', 'brew install openclaw/tap/gitcrawl', 'brew', [\n 'install',\n 'openclaw/tap/gitcrawl',\n ]);\n}\n\nfunction gitcrawlConfigPath(): string {\n return join(homedir(), '.config', 'gitcrawl', 'config.toml');\n}\n\nasync function gitcrawlConfigExists(): Promise<boolean> {\n try {\n await access(gitcrawlConfigPath());\n return true;\n } catch {\n return false;\n }\n}\n\nfunction initGitcrawl(tui: TUI): Promise<void> {\n return runGitcrawlSetupCommand(tui, 'Configuring gitcrawl', 'gitcrawl init --json', 'gitcrawl', ['init', '--json']);\n}\n\nasync function ensureGitcrawlInstalled(ctx: SlashCommandContext): Promise<boolean> {\n if (await commandExists('gitcrawl')) return true;\n\n const answer = await askModalQuestion(ctx.state.ui, {\n question: 'gitcrawl is required for GitHub signals. Install it with Homebrew now?',\n options: [\n { label: 'Install', description: 'Run: brew install openclaw/tap/gitcrawl' },\n { label: 'Cancel', description: 'Leave GitHub signals disabled' },\n ],\n });\n if (answer !== 'Install') return false;\n\n await installGitcrawl(ctx.state.ui);\n return true;\n}\n\nasync function ensureGitcrawlConfigured(ctx: SlashCommandContext): Promise<boolean> {\n if (await gitcrawlConfigExists()) return true;\n\n await initGitcrawl(ctx.state.ui);\n return true;\n}\n\nasync function ensureGitcrawlReady(ctx: SlashCommandContext): Promise<boolean> {\n try {\n return (await ensureGitcrawlInstalled(ctx)) && (await ensureGitcrawlConfigured(ctx));\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.endsWith(' cancelled')) ctx.showInfo(`${message}.`);\n else ctx.showError(`Failed to set up gitcrawl: ${message}`);\n return false;\n }\n}\n\nfunction applyQuietModeToRenderedTools(ctx: SlashCommandContext, enabled: boolean, previewLineLimit: number): void {\n const tools = ctx.state.allToolComponents.filter(\n (tool): tool is IToolExecutionComponent => typeof tool.setQuietModeDisplay === 'function',\n );\n\n tools.forEach(tool => {\n tool.setCompactToolModeColor?.(getCurrentModeColor(ctx));\n tool.setQuietModeDisplay?.(enabled ? 'quiet' : 'normal');\n tool.setQuietPreviewLineLimit?.(previewLineLimit);\n });\n\n ctx.state.ui.requestRender();\n}\n\nexport async function handleSettingsCommand(ctx: SlashCommandContext): Promise<void> {\n const state = ctx.state.harness.getState() as any;\n const globalSettings = loadSettings();\n const config = {\n notifications: (state?.notifications ?? 'off') as NotificationMode,\n yolo: state?.yolo === true,\n thinkingLevel: (state?.thinkingLevel ?? 'off') as string,\n currentModelId: ctx.state.harness.getCurrentModelId() ?? '',\n escapeAsCancel: ctx.state.editor.escapeEnabled,\n quietMode: globalSettings.preferences.quietMode,\n quietModeMaxToolPreviewLines: globalSettings.preferences.quietModeMaxToolPreviewLines,\n storageBackend: globalSettings.storage.backend,\n pgConnectionString: globalSettings.storage.pg?.connectionString ?? '',\n libsqlUrl: globalSettings.storage.libsql?.url ?? '',\n experimentalGithubSignals: globalSettings.signals.experimentalGithubSignals,\n };\n\n return new Promise<void>(resolve => {\n const settings = new SettingsComponent(config, {\n onNotificationsChange: async mode => {\n await ctx.state.harness.setState({ notifications: mode });\n ctx.showInfo(`Notifications: ${mode}`);\n },\n onYoloChange: async enabled => {\n await ctx.state.harness.setState({ yolo: enabled } as any);\n },\n onThinkingLevelChange: async level => {\n await ctx.state.harness.setState({ thinkingLevel: level } as any);\n const current = loadSettings();\n current.preferences.thinkingLevel = level as ThinkingLevelSetting;\n saveSettings(current);\n },\n onEscapeAsCancelChange: async enabled => {\n ctx.state.editor.escapeEnabled = enabled;\n await ctx.state.harness.setState({ escapeAsCancel: enabled });\n await ctx.state.harness.setThreadSetting({ key: 'escapeAsCancel', value: enabled });\n },\n onQuietModeChange: enabled => {\n const current = loadSettings();\n current.preferences.quietMode = enabled;\n current.onboarding.quietModePreferenceSelected = true;\n saveSettings(current);\n ctx.state.quietMode = enabled;\n ctx.state.taskProgress?.setQuietMode(enabled);\n applyQuietModeToRenderedTools(ctx, enabled, ctx.state.quietModeMaxToolPreviewLines);\n },\n onQuietModeMaxToolPreviewLinesChange: lines => {\n const current = loadSettings();\n current.preferences.quietModeMaxToolPreviewLines = lines;\n saveSettings(current);\n ctx.state.quietModeMaxToolPreviewLines = lines;\n applyQuietModeToRenderedTools(ctx, ctx.state.quietMode, lines);\n },\n onStorageBackendChange: (backend: StorageBackend, connectionUrl?: string) => {\n const current = loadSettings();\n current.storage.backend = backend;\n if (backend === 'pg' && connectionUrl !== undefined) {\n current.storage.pg = { ...current.storage.pg, connectionString: connectionUrl };\n } else if (backend === 'libsql') {\n current.storage.libsql = { ...current.storage.libsql, url: connectionUrl || undefined };\n }\n saveSettings(current);\n ctx.state.ui.hideOverlay();\n ctx.stop();\n const label = backend === 'pg' ? 'PostgreSQL' : 'LibSQL';\n console.info(`\\nStorage backend changed to ${label}. Restarting is required.\\n`);\n process.exit(0);\n },\n onExperimentalGithubSignalsChange: async enabled => {\n if (enabled && !(await ensureGitcrawlReady(ctx))) return false;\n const current = loadSettings();\n current.signals.experimentalGithubSignals = enabled;\n saveSettings(current);\n ctx.showInfo(`Experimental GitHub signals: ${enabled ? 'on' : 'off'} (restart required)`);\n return true;\n },\n onApiKeys: () => {\n ctx.state.ui.hideOverlay();\n resolve();\n handleApiKeysCommand(ctx);\n },\n onClose: () => {\n ctx.state.ui.hideOverlay();\n resolve();\n },\n });\n\n showModalOverlay(ctx.state.ui, settings, { maxHeight: '75%' });\n settings.focused = true;\n });\n}\n","import type { MastraBrowser } from '@mastra/core/browser';\n\nimport type { BrowserProvider, BrowserSettings, StagehandEnv } from '../../onboarding/settings.js';\nimport {\n checkProfileProviderMismatch,\n createBrowserFromSettings,\n loadSettings,\n saveSettings,\n setProfileProvider,\n} from '../../onboarding/settings.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport type { SlashCommandContext } from './types.js';\n\n/**\n * Key used to store the active browser settings in harness state.\n * This tracks what browser config is actually running in this instance,\n * which may differ from the settings file if another instance changed it.\n */\nconst ACTIVE_BROWSER_KEY = 'activeBrowserSettings';\n\ntype StorageStateExportBrowser = MastraBrowser & { exportStorageState: (path: string) => Promise<void> };\n\n/**\n * /browser command - Configure browser automation for agents.\n *\n * Usage:\n * /browser - Interactive setup wizard\n * /browser status - Show current browser configuration\n * /browser on - Enable browser with current settings\n * /browser off - Disable browser\n * /browser set <k> <v> - Set a specific setting (profile, executablePath, storageState, cdpUrl)\n */\n\n/**\n * Helper to show an inline question and return the answer.\n */\nfunction askInline(\n ctx: SlashCommandContext,\n question: string,\n options: Array<{ label: string; description?: string }>,\n): Promise<string | null> {\n return askModalQuestion(ctx.state.ui, { question, options });\n}\n\n/**\n * Helper to show an inline text input and return the answer.\n */\nasync function askText(ctx: SlashCommandContext, question: string, defaultValue?: string): Promise<string | null> {\n const answer = await askModalQuestion(ctx.state.ui, { question, defaultValue, allowEmptyInput: true });\n const trimmed = answer?.trim() ?? '';\n return trimmed.length > 0 ? trimmed : null;\n}\n\n/**\n * Check for provider mismatch in profile and prompt for confirmation.\n * Returns true if we should proceed, false if user cancelled.\n */\nasync function checkAndConfirmProviderMismatch(\n ctx: SlashCommandContext,\n profile: string | undefined,\n targetProvider: BrowserProvider,\n): Promise<boolean> {\n if (!profile) return true;\n\n const existingProvider = checkProfileProviderMismatch(profile, targetProvider);\n if (!existingProvider) return true;\n\n const targetLabel = targetProvider === 'stagehand' ? 'Stagehand' : 'AgentBrowser';\n const existingLabel = existingProvider === 'stagehand' ? 'Stagehand' : 'AgentBrowser';\n\n ctx.showInfo(\n `⚠️ Warning: This profile was last used by ${existingLabel}, but you're now using ${targetLabel}.\\n` +\n 'Using the same profile across different providers can cause compatibility issues.',\n );\n\n const proceed = await askInline(ctx, 'Continue anyway?', [\n { label: 'No', description: 'Cancel and use a different profile' },\n { label: 'Yes', description: 'Proceed (may cause issues)' },\n ]);\n\n return proceed === 'Yes';\n}\n\n/**\n * Apply browser settings to all mode agents and track the active settings.\n */\nfunction applyBrowserToAgents(\n ctx: SlashCommandContext,\n browser: MastraBrowser | undefined,\n browserSettings?: BrowserSettings,\n): void {\n const modes = ctx.harness.listModes();\n let harnessState: unknown;\n for (const mode of modes) {\n const modeAgent = (mode as { agent?: unknown }).agent;\n const agent =\n typeof modeAgent === 'function'\n ? (modeAgent((harnessState ??= ctx.state.harness.getState())) as {\n setBrowser?: (browser?: MastraBrowser) => void;\n })\n : (modeAgent as { setBrowser?: (browser?: MastraBrowser) => void } | undefined);\n agent?.setBrowser?.(browser);\n }\n // Track the active browser settings in harness state\n ctx.harness.setState({ [ACTIVE_BROWSER_KEY]: browserSettings } as any);\n}\n\n/**\n * Get a summary key for browser settings to detect config drift.\n */\nfunction getBrowserConfigKey(settings: BrowserSettings): string {\n if (!settings.enabled) return 'disabled';\n const parts: string[] = [settings.provider];\n if (settings.provider === 'stagehand' && settings.stagehand?.env) {\n parts.push(settings.stagehand.env);\n }\n parts.push(settings.headless ? 'headless' : 'headed');\n if (settings.profile) parts.push(`profile:${settings.profile}`);\n if (settings.executablePath) parts.push(`exec:${settings.executablePath}`);\n if (settings.cdpUrl) parts.push(`cdp:${settings.cdpUrl}`);\n if (settings.agentBrowser?.storageState) parts.push(`storage:${settings.agentBrowser.storageState}`);\n return parts.join(':');\n}\n\n/**\n * /browser — Configure browser automation settings.\n *\n * Interactive flow to set up browser provider (Stagehand or AgentBrowser),\n * headless mode, and provider-specific options.\n *\n * Changes are applied immediately to the current session.\n */\nexport async function handleBrowserCommand(ctx: SlashCommandContext, args: string[] = []): Promise<void> {\n const settings = loadSettings();\n const browser = settings.browser;\n\n // Handle quick commands\n const arg = args[0]?.toLowerCase();\n\n // /browser set <key> <value> - set a specific setting\n if (arg === 'set') {\n const key = args[1]?.toLowerCase();\n const value = args.slice(2).join(' '); // Allow spaces in paths\n\n if (!key) {\n ctx.showInfo(\n 'Usage: /browser set <key> <value>\\n\\n' +\n 'Keys:\\n' +\n ' profile <path> - Browser profile directory\\n' +\n ' executablePath <path> - Browser executable path\\n' +\n ' storageState <path> - Playwright storage state file (agent-browser only)\\n' +\n ' cdpUrl <url> - CDP WebSocket URL\\n\\n' +\n 'To remove a setting, use: /browser clear <key>\\n\\n' +\n 'Examples:\\n' +\n ' /browser set profile ~/.mastracode/browser-profile-stagehand\\n' +\n ' /browser set executablePath /Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\n );\n return;\n }\n\n const validKeys = ['profile', 'executablepath', 'storagestate', 'cdpurl'];\n if (!validKeys.includes(key)) {\n ctx.showError(`Unknown key: ${args[1]}. Valid keys: profile, executablePath, storageState, cdpUrl`);\n return;\n }\n\n if (!value) {\n ctx.showError(\n `Missing value. Use: /browser set ${args[1]} <value>\\nTo remove a setting, use: /browser clear ${args[1]}`,\n );\n return;\n }\n\n const expandedValue = value.trim().replace(/^~/, process.env.HOME || '~');\n\n switch (key) {\n case 'profile':\n settings.browser.profile = expandedValue;\n // Auto-set preserveUserDataDir for Stagehand when profile is configured\n settings.browser.stagehand = {\n ...settings.browser.stagehand,\n env: settings.browser.stagehand?.env ?? 'LOCAL',\n preserveUserDataDir: true,\n };\n // Profile is a launch option — incompatible with CDP connection\n if (settings.browser.cdpUrl) {\n delete settings.browser.cdpUrl;\n ctx.showInfo(`Note: Cleared cdpUrl (incompatible with profile).`);\n }\n break;\n case 'executablepath':\n settings.browser.executablePath = expandedValue;\n // ExecutablePath is a launch option — incompatible with CDP connection\n if (settings.browser.cdpUrl) {\n delete settings.browser.cdpUrl;\n ctx.showInfo(`Note: Cleared cdpUrl (incompatible with executablePath).`);\n }\n break;\n case 'storagestate':\n if (browser.provider !== 'agent-browser') {\n ctx.showError('storageState is only supported by agent-browser provider.');\n return;\n }\n settings.browser.agentBrowser = {\n ...settings.browser.agentBrowser,\n storageState: expandedValue,\n };\n break;\n case 'cdpurl':\n settings.browser.cdpUrl = expandedValue;\n // CDP connects to an existing browser — launch options are ignored\n if (settings.browser.profile || settings.browser.executablePath) {\n delete settings.browser.profile;\n delete settings.browser.executablePath;\n if (settings.browser.stagehand) {\n delete settings.browser.stagehand.preserveUserDataDir;\n }\n ctx.showInfo(`Note: Cleared profile and executablePath (ignored when using cdpUrl).`);\n }\n if (settings.browser.agentBrowser?.storageState) {\n delete settings.browser.agentBrowser.storageState;\n }\n break;\n }\n\n saveSettings(settings);\n ctx.showInfo(`Set ${args[1]} = ${expandedValue}\\nRun /browser on to apply.`);\n return;\n }\n\n if (arg === 'status') {\n // Get the active browser settings from harness state (what's actually running)\n const state = ctx.harness.getState() as any;\n const activeSettings = state?.[ACTIVE_BROWSER_KEY] as BrowserSettings | undefined;\n\n // Check for config drift between file and active instance\n const hasDrift = activeSettings && getBrowserConfigKey(browser) !== getBrowserConfigKey(activeSettings);\n\n if (hasDrift && activeSettings) {\n // Show both active and file settings when they differ\n const lines: string[] = [];\n\n // Active session settings\n const activeProvider =\n activeSettings.provider === 'stagehand' ? 'Stagehand (AI-powered)' : 'AgentBrowser (deterministic)';\n const activeIsBrowserbase =\n activeSettings.provider === 'stagehand' && activeSettings.stagehand?.env === 'BROWSERBASE';\n lines.push('Browser (active):');\n lines.push(` Provider: ${activeProvider}`);\n if (activeSettings.provider === 'stagehand' && activeSettings.stagehand) {\n lines.push(` Environment: ${activeSettings.stagehand.env}`);\n }\n if (!activeIsBrowserbase) {\n lines.push(` Headless: ${activeSettings.headless ? 'yes' : 'no'}`);\n }\n if (activeSettings.executablePath) lines.push(` Executable: ${activeSettings.executablePath}`);\n if (activeSettings.profile) lines.push(` Profile: ${activeSettings.profile}`);\n if (activeSettings.agentBrowser?.storageState)\n lines.push(` Storage State: ${activeSettings.agentBrowser.storageState}`);\n if (activeSettings.cdpUrl) lines.push(` CDP URL: ${activeSettings.cdpUrl}`);\n\n lines.push('');\n\n // Pending changes from file\n const fileProvider = browser.provider === 'stagehand' ? 'Stagehand (AI-powered)' : 'AgentBrowser (deterministic)';\n const fileIsBrowserbase = browser.provider === 'stagehand' && browser.stagehand?.env === 'BROWSERBASE';\n lines.push('Pending changes (not yet applied):');\n lines.push(` Provider: ${fileProvider}`);\n if (browser.provider === 'stagehand' && browser.stagehand) {\n lines.push(` Environment: ${browser.stagehand.env}`);\n }\n if (!fileIsBrowserbase) {\n lines.push(` Headless: ${browser.headless ? 'yes' : 'no'}`);\n }\n if (browser.executablePath) lines.push(` Executable: ${browser.executablePath}`);\n if (browser.profile) lines.push(` Profile: ${browser.profile}`);\n if (browser.agentBrowser?.storageState) lines.push(` Storage State: ${browser.agentBrowser.storageState}`);\n if (browser.cdpUrl) lines.push(` CDP URL: ${browser.cdpUrl}`);\n\n lines.push('');\n lines.push('⚠️ /browser on to apply, /browser to reconfigure, or restart.');\n\n ctx.showInfo(lines.join('\\n'));\n } else if (!browser.enabled) {\n ctx.showInfo('Browser: disabled');\n } else {\n // Normal status (no drift)\n const providerLabel =\n browser.provider === 'stagehand' ? 'Stagehand (AI-powered)' : 'AgentBrowser (deterministic)';\n const isBrowserbase = browser.provider === 'stagehand' && browser.stagehand?.env === 'BROWSERBASE';\n const lines = [`Browser: enabled`, ` Provider: ${providerLabel}`];\n if (browser.provider === 'stagehand' && browser.stagehand) {\n lines.push(` Environment: ${browser.stagehand.env}`);\n }\n if (!isBrowserbase) {\n lines.push(` Headless: ${browser.headless ? 'yes' : 'no'}`);\n }\n if (browser.executablePath) {\n lines.push(` Executable: ${browser.executablePath}`);\n }\n if (browser.profile) {\n lines.push(` Profile: ${browser.profile}`);\n }\n if (browser.agentBrowser?.storageState) {\n lines.push(` Storage State: ${browser.agentBrowser.storageState}`);\n }\n if (browser.cdpUrl) {\n lines.push(` CDP URL: ${browser.cdpUrl}`);\n }\n ctx.showInfo(lines.join('\\n'));\n }\n return;\n }\n\n if (arg === 'off' || arg === 'disable') {\n const disabledSettings = { ...settings.browser, enabled: false };\n settings.browser = disabledSettings;\n saveSettings(settings);\n applyBrowserToAgents(ctx, undefined, disabledSettings);\n ctx.showInfo('Browser disabled.');\n return;\n }\n\n if (arg === 'on' || arg === 'enable') {\n const nextBrowser = { ...settings.browser, enabled: true };\n\n // Check for provider mismatch in profile\n const shouldProceed = await checkAndConfirmProviderMismatch(ctx, nextBrowser.profile, nextBrowser.provider);\n if (!shouldProceed) {\n ctx.showInfo('Browser enable cancelled.');\n return;\n }\n\n try {\n const browserInstance = await createBrowserFromSettings(nextBrowser);\n applyBrowserToAgents(ctx, browserInstance, nextBrowser);\n if (nextBrowser.profile && nextBrowser.provider) {\n setProfileProvider(nextBrowser.profile, nextBrowser.provider);\n }\n settings.browser = nextBrowser;\n saveSettings(settings);\n const providerLabel = browser.provider === 'stagehand' ? 'Stagehand' : 'AgentBrowser';\n ctx.showInfo(`Browser enabled (${providerLabel}).`);\n } catch (err) {\n ctx.showError(`Failed to enable browser: ${err instanceof Error ? err.message : String(err)}`);\n }\n return;\n }\n\n // /browser clear [field] - reset all or specific setting (preserves enabled state)\n if (arg === 'clear') {\n const field = args[1]?.toLowerCase();\n\n if (!field) {\n // Clear all - reset to defaults but preserve enabled state\n const wasEnabled = settings.browser.enabled;\n settings.browser = {\n enabled: wasEnabled,\n provider: 'stagehand',\n headless: false,\n viewport: { width: 1280, height: 720 },\n };\n saveSettings(settings);\n // If it was enabled, we need to recreate the browser with new settings\n if (wasEnabled) {\n try {\n const browserInstance = await createBrowserFromSettings(settings.browser);\n applyBrowserToAgents(ctx, browserInstance, settings.browser);\n } catch (err) {\n // If recreation fails, disable and report\n settings.browser.enabled = false;\n saveSettings(settings);\n applyBrowserToAgents(ctx, undefined);\n ctx.showError(\n `Browser settings reset, but failed to restart: ${err instanceof Error ? err.message : String(err)}`,\n );\n return;\n }\n } else {\n applyBrowserToAgents(ctx, undefined);\n }\n ctx.showInfo('Browser settings reset to defaults.');\n return;\n }\n\n // Clear specific field\n switch (field) {\n case 'profile':\n delete settings.browser.profile;\n if (settings.browser.stagehand) {\n delete settings.browser.stagehand.preserveUserDataDir;\n }\n break;\n case 'executablepath':\n delete settings.browser.executablePath;\n break;\n case 'storagestate':\n if (settings.browser.agentBrowser) {\n delete settings.browser.agentBrowser.storageState;\n }\n break;\n case 'cdpurl':\n delete settings.browser.cdpUrl;\n break;\n default:\n ctx.showError(`Unknown field: ${field}. Valid fields: profile, executablePath, storageState, cdpUrl`);\n return;\n }\n\n saveSettings(settings);\n ctx.showInfo(`Cleared ${field}. Run /browser on to apply.`);\n return;\n }\n\n // /browser export storageState <path> - export current session's storage state\n if (arg === 'export') {\n const what = args[1]?.toLowerCase();\n const exportPath = args.slice(2).join(' ').trim();\n\n if (what !== 'storagestate' && what !== 'storage-state') {\n ctx.showError('Usage: /browser export storageState <path>');\n return;\n }\n\n if (!exportPath) {\n ctx.showError('Missing path. Usage: /browser export storageState <path>');\n return;\n }\n\n if (browser.provider !== 'agent-browser') {\n ctx.showError('export storageState is only supported by agent-browser provider.');\n return;\n }\n\n // Get browser instance from the current mode's agent\n const currentMode = ctx.harness.getCurrentMode();\n const browserInstance = currentMode.agent?.browser;\n\n if (!browserInstance) {\n ctx.showError('Browser not enabled. Run /browser on first.');\n return;\n }\n\n const { AgentBrowser } = await import('@mastra/agent-browser');\n if (!(browserInstance instanceof AgentBrowser)) {\n ctx.showError('Current browser instance does not support exporting storage state.');\n return;\n }\n const exportableBrowser = browserInstance as StorageStateExportBrowser;\n\n const expandedPath = exportPath.replace(/^~/, process.env.HOME || '~');\n\n try {\n await exportableBrowser.exportStorageState(expandedPath);\n ctx.showInfo(`Storage state exported to: ${expandedPath}`);\n } catch (error) {\n ctx.showError(`Failed to export storage state: ${error instanceof Error ? error.message : String(error)}`);\n }\n return;\n }\n\n // /browser help, --help, -h, or unrecognized command\n if (arg && !['set', 'status', 'on', 'off', 'enable', 'disable', 'export'].includes(arg)) {\n const help = [\n 'usage: /browser <command> [options]',\n '',\n ' (no command) Interactive setup wizard',\n ' on, enable Enable browser with current settings',\n ' off, disable Disable browser',\n ' status Show current configuration',\n ' clear Reset all settings to defaults',\n ' clear <key> Clear: profile, executablePath, storageState, cdpUrl',\n ' set <key> <v> Set: profile, executablePath, storageState, cdpUrl',\n ' export storageState <path> Export session cookies/localStorage (agent-browser)',\n ];\n ctx.showInfo(help.join('\\n'));\n return;\n }\n\n // Step 1: Enable/disable browser (interactive)\n const enableChoice = await askInline(ctx, 'Enable browser automation?', [\n { label: 'Yes', description: 'Give the agent browser tools for web automation' },\n { label: 'No', description: 'Disable browser automation' },\n ]);\n\n // Cancel preserves current state\n if (!enableChoice) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n\n if (enableChoice === 'No') {\n if (browser.enabled) {\n settings.browser.enabled = false;\n saveSettings(settings);\n applyBrowserToAgents(ctx, undefined);\n ctx.showInfo('Browser automation disabled.');\n } else {\n ctx.showInfo('Browser automation remains disabled.');\n }\n return;\n }\n\n // Step 2: Select provider\n const providerChoice = await askInline(ctx, 'Select browser provider:', [\n { label: 'Stagehand', description: 'AI-powered (natural language instructions, recommended)' },\n { label: 'AgentBrowser', description: 'Deterministic (explicit selectors, requires Playwright)' },\n ]);\n\n if (!providerChoice) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n\n const provider: BrowserProvider = providerChoice === 'AgentBrowser' ? 'agent-browser' : 'stagehand';\n\n // Step 3: Stagehand-specific settings (ask environment first)\n let stagehandSettings: BrowserSettings['stagehand'];\n let isBrowserbase = false;\n if (provider === 'stagehand') {\n const envChoice = await askInline(ctx, 'Stagehand environment:', [\n { label: 'LOCAL', description: 'Run browser locally' },\n { label: 'BROWSERBASE', description: 'Use Browserbase cloud (requires API key)' },\n ]);\n\n if (!envChoice) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n\n const env = envChoice as StagehandEnv;\n isBrowserbase = env === 'BROWSERBASE';\n\n if (isBrowserbase) {\n ctx.showInfo(\n 'Browserbase requires BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID.\\n' +\n 'Set these in your shell profile (~/.zshrc) or pass them when starting MastraCode.',\n );\n }\n\n stagehandSettings = { env };\n }\n\n // Step 4: Headless mode (skip for Browserbase - runs in cloud)\n let headless = false;\n if (!isBrowserbase) {\n const headlessChoice = await askInline(ctx, 'Run in headless mode?', [\n { label: 'No', description: 'Show browser window (easier to debug)' },\n { label: 'Yes', description: 'Hide browser window (faster, less resource usage)' },\n ]);\n\n if (!headlessChoice) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n\n headless = headlessChoice === 'Yes';\n }\n\n // Step 5: Launch mode (bundled, custom executable, or CDP)\n let profile = browser.profile;\n let executablePath = browser.executablePath;\n let storageState = browser.agentBrowser?.storageState;\n let cdpUrl = browser.cdpUrl;\n\n // Only show launch mode options for local browsers (not Browserbase)\n if (!isBrowserbase) {\n const launchMode = await askInline(ctx, 'How do you want to launch the browser?', [\n { label: 'Bundled browser', description: 'Use built-in Chromium (recommended)' },\n { label: 'Custom executable', description: 'Use Chrome, Brave, Edge, etc.' },\n { label: 'Connect via CDP', description: 'Connect to an already-running browser' },\n ]);\n\n if (!launchMode) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n\n if (launchMode === 'Custom executable') {\n // Clear cdpUrl when using custom browser (mutually exclusive)\n cdpUrl = undefined;\n\n const execPath = await askText(ctx, 'Browser executable path:', executablePath);\n if (execPath === null) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n executablePath = execPath.replace(/^~/, process.env.HOME || '~');\n } else if (launchMode === 'Connect via CDP') {\n const cdpUrlInput = await askText(ctx, 'CDP WebSocket URL (e.g., ws://localhost:9222):', cdpUrl);\n if (cdpUrlInput === null) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n cdpUrl = cdpUrlInput;\n // Clear launch options when using CDP (they don't apply)\n profile = undefined;\n executablePath = undefined;\n storageState = undefined;\n } else {\n // Bundled browser - clear custom paths\n cdpUrl = undefined;\n executablePath = undefined;\n }\n\n // Step 6: Profile option (only for bundled or custom executable, not CDP)\n if (launchMode !== 'Connect via CDP') {\n const useProfile = await askInline(ctx, 'Use a browser profile?', [\n { label: 'No', description: 'Fresh session each time' },\n { label: 'Yes', description: 'Persist logins, cookies, extensions' },\n ]);\n\n if (!useProfile) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n\n if (useProfile === 'Yes') {\n const defaultProfile = `~/.mastracode/browser-profile-${provider}`;\n const profilePath = await askText(ctx, 'Profile directory path:', profile || defaultProfile);\n if (profilePath === null) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n profile = profilePath.replace(/^~/, process.env.HOME || '~');\n } else {\n profile = undefined;\n }\n }\n }\n\n // Build new browser settings\n // Auto-set preserveUserDataDir when profile is configured for Stagehand\n if (provider === 'stagehand' && profile && stagehandSettings) {\n stagehandSettings.preserveUserDataDir = true;\n }\n\n const nextBrowser: BrowserSettings = {\n enabled: true,\n provider,\n headless,\n viewport: browser.viewport ?? { width: 1280, height: 720 },\n cdpUrl,\n profile,\n executablePath,\n stagehand: stagehandSettings,\n agentBrowser: storageState ? { storageState } : undefined,\n };\n\n // Check for provider mismatch in profile\n const shouldProceed = await checkAndConfirmProviderMismatch(ctx, profile, provider);\n if (!shouldProceed) {\n ctx.showInfo('Browser setup cancelled.');\n return;\n }\n\n // Apply browser to agents first, then persist on success\n try {\n const browserInstance = await createBrowserFromSettings(nextBrowser);\n applyBrowserToAgents(ctx, browserInstance, nextBrowser);\n if (nextBrowser.profile && nextBrowser.provider) {\n setProfileProvider(nextBrowser.profile, nextBrowser.provider);\n }\n settings.browser = nextBrowser;\n saveSettings(settings);\n } catch (err) {\n ctx.showError(`Failed to create browser: ${err instanceof Error ? err.message : String(err)}`);\n return;\n }\n\n // Summary\n const summary = [\n 'Browser automation enabled:',\n ` Provider: ${provider === 'stagehand' ? 'Stagehand (AI-powered)' : 'AgentBrowser (deterministic)'}`,\n ];\n\n if (provider === 'stagehand' && stagehandSettings) {\n summary.push(` Environment: ${stagehandSettings.env}`);\n }\n\n // Only show headless for local browsers\n if (!isBrowserbase) {\n summary.push(` Headless: ${headless ? 'yes' : 'no'}`);\n }\n\n // Show advanced options if configured\n if (cdpUrl) {\n summary.push(` CDP URL: ${cdpUrl}`);\n }\n if (executablePath) {\n summary.push(` Executable: ${executablePath}`);\n }\n if (profile) {\n summary.push(` Profile: ${profile}`);\n }\n if (storageState) {\n summary.push(` Storage State: ${storageState}`);\n }\n\n ctx.showInfo(summary.join('\\n'));\n}\n","/**\n * Login dialog component - handles OAuth login flow UI\n */\n\nimport { exec } from 'node:child_process';\nimport { Box, Container, getKeybindings, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { Focusable, TUI } from '@earendil-works/pi-tui';\nimport { getOAuthProviders } from '../../auth/index.js';\nimport { theme } from '../theme.js';\nimport { MaskedInput } from './masked-input.js';\n\nexport class LoginDialogComponent extends Box implements Focusable {\n private contentContainer: Container;\n private input: MaskedInput;\n private tui: TUI;\n private abortController = new AbortController();\n private inputResolver?: (value: string) => void;\n private inputRejecter?: (error: Error) => void;\n\n // Focusable implementation\n private _focused = false;\n get focused(): boolean {\n return this._focused;\n }\n set focused(value: boolean) {\n this._focused = value;\n this.input.focused = value;\n }\n\n constructor(\n tui: TUI,\n providerId: string,\n private onComplete: (success: boolean, message?: string) => void,\n ) {\n // Box with padding and background\n super(2, 1, text => theme.bg('overlayBg', text));\n this.tui = tui;\n\n const providerInfo = getOAuthProviders().find(p => p.id === providerId);\n const providerName = providerInfo?.name || providerId;\n\n // Title\n this.addChild(new Text(theme.fg('warning', `Login to ${providerName}`)));\n this.addChild(new Spacer(1));\n\n // Dynamic content area\n this.contentContainer = new Container();\n this.addChild(this.contentContainer);\n\n // Input (always present, used when needed)\n this.input = new MaskedInput();\n this.input.onSubmit = () => {\n if (this.inputResolver) {\n this.inputResolver(this.input.getValue());\n this.inputResolver = undefined;\n this.inputRejecter = undefined;\n }\n };\n this.input.onEscape = () => {\n this.cancel();\n };\n }\n\n get signal(): AbortSignal {\n return this.abortController.signal;\n }\n\n private cancel(): void {\n try {\n this.abortController.abort();\n } catch {}\n if (this.inputRejecter) {\n this.inputRejecter(new Error('Login cancelled'));\n this.inputResolver = undefined;\n this.inputRejecter = undefined;\n }\n this.onComplete(false, 'Login cancelled');\n }\n\n /**\n * Called by onAuth callback - show URL and optional instructions\n */\n showAuth(url: string, instructions?: string): void {\n this.contentContainer.clear();\n\n this.contentContainer.addChild(new Text(theme.fg('accent', url)));\n\n const clickHint = process.platform === 'darwin' ? 'Cmd+click to open' : 'Ctrl+click to open';\n const hyperlink = `\\x1b]8;;${url}\\x07${clickHint}\\x1b]8;;\\x07`;\n this.contentContainer.addChild(new Text(theme.fg('muted', hyperlink)));\n\n if (instructions) {\n this.contentContainer.addChild(new Spacer(1));\n this.contentContainer.addChild(new Text(theme.fg('warning', instructions)));\n }\n\n // Try to open browser\n const openCmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';\n exec(`${openCmd} \"${url}\"`);\n\n this.tui.requestRender();\n }\n\n /**\n * Called by onPrompt callback - show prompt and wait for input\n */\n showPrompt(message: string, placeholder?: string): Promise<string> {\n this.contentContainer.addChild(new Spacer(1));\n this.contentContainer.addChild(new Text(theme.fg('text', message)));\n if (placeholder) {\n this.contentContainer.addChild(new Text(theme.fg('muted', `e.g., ${placeholder}`)));\n }\n this.contentContainer.addChild(this.input);\n this.contentContainer.addChild(new Text(theme.fg('muted', '(Escape to cancel, Enter to submit)')));\n\n this.input.setValue('');\n this.tui.requestRender();\n\n return new Promise((resolve, reject) => {\n this.inputResolver = resolve;\n this.inputRejecter = reject;\n });\n }\n\n /**\n * Show progress message\n */\n showProgress(message: string): void {\n this.contentContainer.addChild(new Text(theme.fg('muted', message)));\n this.tui.requestRender();\n }\n\n handleInput(data: string): void {\n const kb = getKeybindings();\n\n if (kb.matches(data, 'tui.select.cancel')) {\n this.cancel();\n return;\n }\n\n // Pass to input\n this.input.handleInput(data);\n }\n}\n","/**\n * Auth-mode selector component used between the provider selector and the login dialog\n * when an OAuth provider advertises more than one `authModes` entry. Lets the user pick\n * (for example) \"Browser (local callback)\" vs \"Device code (headless)\" without setting\n * an env var.\n */\n\nimport { Box, Container, getKeybindings, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { TUI } from '@earendil-works/pi-tui';\nimport type { AuthMode } from '../../auth/types.js';\nimport { showModalOverlay } from '../overlay.js';\nimport { theme } from '../theme.js';\n\nexport class LoginModeSelectorComponent extends Box {\n private listContainer: Container;\n private modes: ReadonlyArray<AuthMode>;\n private selectedIndex = 0;\n private onSelectCallback: (modeId: string) => void;\n private onCancelCallback: () => void;\n\n constructor(\n providerName: string,\n modes: ReadonlyArray<AuthMode>,\n onSelect: (modeId: string) => void,\n onCancel: () => void,\n ) {\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.modes = modes;\n this.onSelectCallback = onSelect;\n this.onCancelCallback = onCancel;\n\n this.addChild(new Text(theme.fg('text', `How do you want to sign in to ${providerName}?`)));\n this.addChild(new Spacer(1));\n\n this.listContainer = new Container();\n this.addChild(this.listContainer);\n\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('muted', 'Press Enter to select, Escape to cancel')));\n\n this.updateList();\n }\n\n private updateList(): void {\n this.listContainer.clear();\n\n for (let i = 0; i < this.modes.length; i++) {\n const mode = this.modes[i];\n if (!mode) continue;\n\n const isSelected = i === this.selectedIndex;\n const prefix = isSelected ? theme.fg('accent', '→ ') : ' ';\n const label = isSelected ? theme.fg('accent', mode.name) : mode.name;\n this.listContainer.addChild(new Text(`${prefix}${label}`));\n\n if (mode.description) {\n this.listContainer.addChild(new Text(theme.fg('muted', ` ${mode.description}`)));\n }\n }\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n\n if (kb.matches(keyData, 'tui.select.up')) {\n this.selectedIndex = Math.max(0, this.selectedIndex - 1);\n this.updateList();\n } else if (kb.matches(keyData, 'tui.select.down')) {\n this.selectedIndex = Math.min(this.modes.length - 1, this.selectedIndex + 1);\n this.updateList();\n } else if (kb.matches(keyData, 'tui.select.confirm')) {\n const selected = this.modes[this.selectedIndex];\n if (selected) {\n this.onSelectCallback(selected.id);\n }\n } else if (kb.matches(keyData, 'tui.select.cancel')) {\n this.onCancelCallback();\n }\n }\n}\n\n/**\n * Prompt the user to pick an auth mode if the provider advertises more than one.\n * Returns the chosen mode id, `undefined` when the provider has 0/1 modes (no prompt),\n * or `null` when the user cancelled.\n */\nexport async function promptAuthMode(\n tui: TUI,\n providerName: string,\n modes: ReadonlyArray<AuthMode> | undefined,\n): Promise<string | undefined | null> {\n if (!modes || modes.length < 2) {\n return modes && modes.length === 1 ? modes[0]!.id : undefined;\n }\n\n return new Promise(resolve => {\n const selector = new LoginModeSelectorComponent(\n providerName,\n modes,\n modeId => {\n tui.hideOverlay();\n resolve(modeId);\n },\n () => {\n tui.hideOverlay();\n resolve(null);\n },\n );\n\n showModalOverlay(tui, selector, { widthPercent: 0.8, maxHeight: '60%' });\n });\n}\n","/**\n * OAuth provider selector component for /login and /logout commands\n */\n\nimport { Box, Container, getKeybindings, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { OAuthProviderInterface } from '../../auth/types.js';\nimport { theme } from '../theme.js';\n\n/**\n * Interface for auth provider that the selector needs.\n * Can be satisfied by Harness or AuthStorage.\n */\nexport interface AuthProviderSource {\n getOAuthProviders(): OAuthProviderInterface[];\n isLoggedIn(providerId: string): boolean;\n}\n\nexport class LoginSelectorComponent extends Box {\n private listContainer: Container;\n private allProviders: { id: string; name: string }[] = [];\n private selectedIndex: number = 0;\n private mode: 'login' | 'logout';\n private authSource: AuthProviderSource;\n private onSelectCallback: (providerId: string) => void;\n private onCancelCallback: () => void;\n\n constructor(\n mode: 'login' | 'logout',\n authSource: AuthProviderSource,\n onSelect: (providerId: string) => void,\n onCancel: () => void,\n ) {\n // Box with padding and background\n super(2, 1, text => theme.bg('overlayBg', text));\n\n this.mode = mode;\n this.authSource = authSource;\n this.onSelectCallback = onSelect;\n this.onCancelCallback = onCancel;\n\n // Load all OAuth providers\n this.loadProviders();\n\n // Add title\n const title = mode === 'login' ? 'Select provider to login:' : 'Select provider to logout:';\n this.addChild(new Text(theme.fg('text', title)));\n this.addChild(new Spacer(1));\n\n // Create list container\n this.listContainer = new Container();\n this.addChild(this.listContainer);\n\n this.addChild(new Spacer(1));\n this.addChild(new Text(theme.fg('muted', 'Press Enter to select, Escape to cancel')));\n\n // Initial render\n this.updateList();\n }\n\n private loadProviders(): void {\n this.allProviders = this.authSource.getOAuthProviders().map(p => ({ id: p.id, name: p.name }));\n }\n\n private updateList(): void {\n this.listContainer.clear();\n\n for (let i = 0; i < this.allProviders.length; i++) {\n const provider = this.allProviders[i];\n if (!provider) continue;\n\n const isSelected = i === this.selectedIndex;\n\n // Check if user is logged in for this provider\n const isLoggedIn = this.authSource.isLoggedIn(provider.id);\n const statusIndicator = isLoggedIn ? theme.fg('success', ' ✓ logged in') : '';\n\n let line = '';\n if (isSelected) {\n line = theme.fg('accent', '→ ' + provider.name) + statusIndicator;\n } else {\n line = ' ' + provider.name + statusIndicator;\n }\n\n this.listContainer.addChild(new Text(line));\n }\n\n // Show \"no providers\" if empty\n if (this.allProviders.length === 0) {\n const message =\n this.mode === 'login' ? 'No OAuth providers available' : 'No OAuth providers logged in. Use /login first.';\n this.listContainer.addChild(new Text(theme.fg('muted', message)));\n }\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n\n // Up arrow\n if (kb.matches(keyData, 'tui.select.up')) {\n this.selectedIndex = Math.max(0, this.selectedIndex - 1);\n this.updateList();\n }\n // Down arrow\n else if (kb.matches(keyData, 'tui.select.down')) {\n this.selectedIndex = Math.min(this.allProviders.length - 1, this.selectedIndex + 1);\n this.updateList();\n }\n // Enter\n else if (kb.matches(keyData, 'tui.select.confirm')) {\n const selectedProvider = this.allProviders[this.selectedIndex];\n if (selectedProvider) {\n this.onSelectCallback(selectedProvider.id);\n }\n }\n // Escape or Ctrl+C\n else if (kb.matches(keyData, 'tui.select.cancel')) {\n this.onCancelCallback();\n }\n }\n}\n","import { getOAuthProviders, PROVIDER_DEFAULT_MODELS } from '../../auth/storage.js';\nimport { LoginDialogComponent } from '../components/login-dialog.js';\nimport { promptAuthMode } from '../components/login-mode-selector.js';\nimport { LoginSelectorComponent } from '../components/login-selector.js';\nimport { showModalOverlay } from '../overlay.js';\nimport type { SlashCommandContext } from './types.js';\n\nasync function performLogin(ctx: SlashCommandContext, providerId: string): Promise<void> {\n const provider = getOAuthProviders().find(p => p.id === providerId);\n const providerName = provider?.name || providerId;\n\n if (!ctx.authStorage) {\n ctx.showError('Auth storage not configured');\n return;\n }\n\n const authMode = await promptAuthMode(ctx.state.ui, providerName, provider?.authModes);\n if (authMode === null) {\n // User cancelled at the mode-selection step.\n return;\n }\n\n return new Promise(resolve => {\n const dialog = new LoginDialogComponent(ctx.state.ui, providerId, (success, message) => {\n ctx.state.ui.hideOverlay();\n if (success) {\n ctx.showInfo(`Successfully logged in to ${providerName}`);\n } else if (message) {\n ctx.showInfo(message);\n }\n resolve();\n });\n\n showModalOverlay(ctx.state.ui, dialog, { widthPercent: 0.8, maxHeight: '60%' });\n dialog.focused = true;\n\n ctx\n .authStorage!.login(providerId, {\n onAuth: (info: { url: string; instructions?: string }) => {\n dialog.showAuth(info.url, info.instructions);\n },\n onPrompt: async (prompt: { message: string; placeholder?: string }) => {\n return dialog.showPrompt(prompt.message, prompt.placeholder);\n },\n onProgress: (message: string) => {\n dialog.showProgress(message);\n },\n signal: dialog.signal,\n authMode,\n })\n .then(async () => {\n ctx.state.ui.hideOverlay();\n\n const defaultModel = PROVIDER_DEFAULT_MODELS[providerId as keyof typeof PROVIDER_DEFAULT_MODELS];\n if (defaultModel) {\n await ctx.state.harness.switchModel({ modelId: defaultModel });\n ctx.showInfo(`Logged in to ${providerName} - switched to ${defaultModel}`);\n } else {\n ctx.showInfo(`Successfully logged in to ${providerName}`);\n }\n\n resolve();\n })\n .catch((error: Error) => {\n ctx.state.ui.hideOverlay();\n if (error.message !== 'Login cancelled') {\n ctx.showError(`Failed to login: ${error.message}`);\n }\n resolve();\n });\n });\n}\n\nexport async function handleLoginCommand(ctx: SlashCommandContext, mode: 'login' | 'logout'): Promise<void> {\n const allProviders = getOAuthProviders();\n const loggedInIds = allProviders.filter(p => ctx.authStorage?.isLoggedIn(p.id)).map(p => p.id);\n\n if (mode === 'logout') {\n if (loggedInIds.length === 0) {\n ctx.showInfo('No OAuth providers logged in. Use /login first.');\n return;\n }\n }\n\n const providers = mode === 'logout' ? allProviders.filter(p => loggedInIds.includes(p.id)) : allProviders;\n\n if (providers.length === 0) {\n ctx.showInfo('No OAuth providers available.');\n return;\n }\n\n if (mode === 'login') {\n ctx.analytics?.trackInteractivePrompt('login_provider_selector', {\n threadId: ctx.state.harness.getCurrentThreadId(),\n resourceId: ctx.state.harness.getResourceId(),\n mode: ctx.state.harness.getCurrentModeId(),\n });\n }\n\n return new Promise<void>(resolve => {\n const selector = new LoginSelectorComponent(\n mode,\n {\n getOAuthProviders: () => providers,\n isLoggedIn: providerId => loggedInIds.includes(providerId),\n },\n async providerId => {\n ctx.state.ui.hideOverlay();\n const provider = providers.find(p => p.id === providerId);\n if (provider) {\n if (mode === 'login') {\n await performLogin(ctx, provider.id);\n } else {\n if (ctx.authStorage) {\n ctx.authStorage.logout(provider.id);\n ctx.showInfo(`Logged out from ${provider.name}`);\n } else {\n ctx.showError('Auth storage not configured');\n }\n }\n }\n resolve();\n },\n () => {\n ctx.state.ui.hideOverlay();\n resolve();\n },\n );\n\n showModalOverlay(ctx.state.ui, selector, { widthPercent: 0.8, maxHeight: '60%' });\n });\n}\n","import { sendSlashCommandMessage } from './send-slash-command-message.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport async function handleReviewCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n if (!ctx.state.harness.hasModelSelected()) {\n ctx.showInfo('No model selected. Use /models to select a model, or /login to authenticate.');\n return;\n }\n\n // Ensure thread exists\n if (ctx.state.pendingNewThread) {\n await ctx.state.harness.createThread();\n ctx.state.pendingNewThread = false;\n }\n\n const prNumber = args[0];\n const focusArea = args.slice(1).join(' ');\n\n let prompt: string;\n\n if (!prNumber) {\n prompt =\n `List the open pull requests for this repository using \\`gh pr list --limit 20\\`. ` +\n `Present them in a clear table with PR number, title, and author. ` +\n `Then ask me which PR I'd like you to review.`;\n } else {\n prompt =\n `Do a thorough code review of PR #${prNumber}. Follow these steps:\\n\\n` +\n `1. Run \\`gh pr view ${prNumber}\\` to get the PR description and metadata.\\n` +\n `2. Run \\`gh pr diff ${prNumber}\\` to get the full diff.\\n` +\n `3. Run \\`gh pr checks ${prNumber}\\` to check CI status.\\n` +\n `4. Read any relevant source files for full context on the changes.\\n` +\n `5. Provide a detailed code review covering:\\n` +\n ` - Overview of what the PR does\\n` +\n ` - Root cause analysis (if it's a fix)\\n` +\n ` - Code quality assessment\\n` +\n ` - Potential concerns or edge cases\\n` +\n ` - CI status\\n` +\n ` - Suggestions for improvement\\n` +\n ` - Final verdict (approve/request changes/comment)\\n`;\n\n if (focusArea) {\n prompt += `\\nPay special attention to: ${focusArea}\\n`;\n }\n }\n\n const displayText = prNumber ? `/review ${args.join(' ')}` : '/review';\n sendSlashCommandMessage(ctx, displayText, prompt).catch(error => {\n ctx.showError(error instanceof Error ? error.message : 'Review failed');\n });\n}\n","import { sendSlashCommandMessage } from './send-slash-command-message.js';\nimport type { SlashCommandContext } from './types.js';\n\nconst MASTRA_REPO = 'mastra-ai/mastra';\nconst MASTRA_LABEL = 'mastracode';\n\nexport async function handleReportIssueCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n if (!ctx.state.harness.hasModelSelected()) {\n ctx.showInfo('No model selected. Use /models to select a model, or /login to authenticate.');\n return;\n }\n\n // Ensure thread exists\n if (ctx.state.pendingNewThread) {\n await ctx.state.harness.createThread();\n ctx.state.pendingNewThread = false;\n }\n\n const extraContext = args.join(' ').trim();\n\n const prompt =\n `The user wants to report a GitHub issue on ${MASTRA_REPO}. Help them through this process.\\n\\n` +\n (extraContext ? `The user provided this initial context: \"${extraContext}\"\\n\\n` : '') +\n `## Step 1: Understand the problem\\n\\n` +\n `Ask the user to describe the issue in their own words. Ask follow-up questions to gather:\\n` +\n `- What happened / what's wrong\\n` +\n `- What they expected to happen\\n` +\n `- Steps to reproduce (if applicable)\\n\\n` +\n `Also gather environment info by running:\\n` +\n '```\\n' +\n `mastracode --version 2>/dev/null || echo \"unknown\"\\n` +\n `node --version\\n` +\n `uname -s\\n` +\n '```\\n\\n' +\n `Use the conversation history for additional context about what the user was working on when they hit this issue.\\n\\n` +\n `## Step 2: Check for duplicates\\n\\n` +\n `Once you understand the problem, search for similar existing issues:\\n` +\n '```\\n' +\n `gh issue list --repo ${MASTRA_REPO} --label ${MASTRA_LABEL} --state open --limit 50 --json number,title,body\\n` +\n '```\\n\\n' +\n `Also search more broadly:\\n` +\n '```\\n' +\n `gh search issues --repo ${MASTRA_REPO} --state open \"<relevant keywords>\" --limit 20 --json number,title,body,labels\\n` +\n '```\\n\\n' +\n `If you find similar issue(s):\\n` +\n `- Present them with their number, title, and a brief summary\\n` +\n `- Ask the user whether they'd like to add a comment on an existing issue instead of opening a new one\\n` +\n `- If they choose to comment, draft the comment, show it to the user for approval, then run:\\n` +\n '```\\n' +\n `gh issue comment <number> --repo ${MASTRA_REPO} --body \"<comment>\"\\n` +\n '```\\n' +\n `Then stop here.\\n\\n` +\n `## Step 3: Draft the issue\\n\\n` +\n `Based on what you've gathered, write a clear, well-structured issue with:\\n` +\n `- A concise, descriptive title\\n` +\n `- A body covering: description, expected behavior, steps to reproduce, and environment info\\n\\n` +\n `**Show the full title and body to the user and ask for their approval before creating it.** Let them suggest edits.\\n\\n` +\n `## Step 4: Create the issue\\n\\n` +\n `Only after the user approves, create the issue:\\n` +\n '```\\n' +\n `gh issue create --repo ${MASTRA_REPO} --label ${MASTRA_LABEL} --title \"<title>\" --body \"<body>\"\\n` +\n '```\\n\\n' +\n `Report the created issue URL back to the user.`;\n\n const displayText = extraContext ? `/report-issue ${extraContext}` : '/report-issue';\n sendSlashCommandMessage(ctx, displayText, prompt).catch(error => {\n ctx.showError(error instanceof Error ? error.message : 'Report issue command failed');\n });\n}\n","import type { SlashCommandContext } from './types.js';\n\nexport async function handleSetupCommand(ctx: SlashCommandContext): Promise<void> {\n await ctx.showOnboarding();\n}\n","/**\n * Terminal theme detection for Mastra Code TUI.\n *\n * Detection priority:\n * 1. MASTRA_THEME env var (explicit override)\n * 2. OSC 11 query — asks the terminal for its actual background color\n * 3. COLORFGBG env var (set by some terminal emulators)\n * 4. Default: 'dark'\n */\n\nimport { luminance } from './theme.js';\nimport type { ThemeMode } from './theme.js';\n\n/**\n * Query the terminal's background color via OSC 11 and compute luminance.\n * Returns 'dark' or 'light', or null if the terminal doesn't respond.\n *\n * The query sends `\\x1b]11;?\\x07` to stdout. Terminals that support\n * xterm-style OSC queries reply on stdin with something like:\n * \\x1b]11;rgb:0000/0000/0000\\x07 (black background → dark)\n * \\x1b]11;rgb:ffff/ffff/ffff\\x07 (white background → light)\n *\n * We parse the rgb components, compute relative luminance (WCAG),\n * and classify as dark (luma < 0.5) or light (luma >= 0.5).\n */\nfunction queryTerminalBackground(timeoutMs = 200): Promise<ThemeDetectionResult | null> {\n return new Promise(resolve => {\n // Can't query if stdin isn't a TTY\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n resolve(null);\n return;\n }\n\n let settled = false;\n let buffer = '';\n let wasRaw: boolean;\n let wasResumed = false;\n let timer: NodeJS.Timeout | undefined;\n\n const cleanup = () => {\n if (settled) return;\n settled = true;\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n process.stdin.removeListener('data', onData);\n // Restore original raw mode state\n try {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(wasRaw);\n }\n } catch {\n // ignore\n }\n // Only pause stdin if we were the ones who resumed it\n if (wasResumed) {\n process.stdin.pause();\n }\n };\n\n const onData = (data: Buffer) => {\n buffer += data.toString();\n\n // Look for the OSC 11 response: \\x1b]11;rgb:RRRR/GGGG/BBBB\\x07 or \\x1b]11;rgb:RRRR/GGGG/BBBB\\x1b\\\\\n const match = buffer.match(/\\x1b\\]11;rgb:([0-9a-fA-F]+)\\/([0-9a-fA-F]+)\\/([0-9a-fA-F]+)/);\n if (match) {\n cleanup();\n\n // Parse RGB components — terminals may respond with 2 or 4 hex digits per component\n const rHex = match[1]!;\n const gHex = match[2]!;\n const bHex = match[3]!;\n\n // Normalize to 0–1 range. If 4 digits: max is 0xFFFF. If 2 digits: max is 0xFF.\n const normalize = (hex: string) => {\n const val = parseInt(hex, 16);\n return hex.length <= 2 ? val / 0xff : val / 0xffff;\n };\n\n const r = normalize(rHex);\n const g = normalize(gHex);\n const b = normalize(bHex);\n\n // Convert to hex and compute WCAG relative luminance\n const toHexByte = (v: number) =>\n Math.round(v * 255)\n .toString(16)\n .padStart(2, '0');\n const detectedBgHex = `#${toHexByte(r)}${toHexByte(g)}${toHexByte(b)}`;\n const luma = luminance(detectedBgHex);\n\n resolve({ mode: luma >= 0.5 ? 'light' : 'dark', detectedBgHex });\n return;\n }\n };\n\n // Timeout — terminal didn't respond (or doesn't support OSC 11)\n timer = setTimeout(() => {\n cleanup();\n resolve(null);\n }, timeoutMs);\n\n // Ensure the timeout doesn't keep the process alive\n if (timer.unref) timer.unref();\n\n try {\n // Save current state and switch to raw mode for reading the response\n wasRaw = process.stdin.isRaw ?? false;\n process.stdin.setRawMode(true);\n if (process.stdin.isPaused()) {\n process.stdin.resume();\n wasResumed = true;\n }\n process.stdin.on('data', onData);\n\n // Send OSC 11 query — use BEL (\\x07) terminator for broadest compatibility\n process.stdout.write('\\x1b]11;?\\x07');\n } catch {\n // If we can't set raw mode, give up on this method\n cleanup();\n resolve(null);\n }\n });\n}\n\n/**\n * Detect COLORFGBG env var.\n * Format: \"fg;bg\" where bg is an ANSI color index.\n * Color indices 0-6 are dark, 7+ are light.\n */\nfunction detectFromColorFgBg(): ThemeMode | null {\n const colorFgBg = process.env.COLORFGBG;\n if (!colorFgBg) return null;\n\n const parts = colorFgBg.split(';');\n const bgPart = parts[parts.length - 1];\n if (bgPart === undefined) return null;\n\n const bgIndex = parseInt(bgPart, 10);\n if (isNaN(bgIndex)) return null;\n\n // Standard ANSI: 0-6 are dark colors, 7+ are light (7 = white/light gray, 15 = bright white)\n return bgIndex >= 7 ? 'light' : 'dark';\n}\n\n/**\n * Detect the terminal's color scheme.\n * Returns 'dark' or 'light'. Does not check persisted settings —\n * the caller should check settings first and only call this for 'auto' mode.\n */\nexport interface ThemeDetectionResult {\n mode: ThemeMode;\n /** The actual terminal background hex color, if detected via OSC 11. */\n detectedBgHex?: string;\n}\n\nexport async function detectTerminalTheme(): Promise<ThemeDetectionResult> {\n // 1. Explicit env var override\n const envTheme = process.env.MASTRA_THEME?.toLowerCase();\n if (envTheme === 'light') return { mode: 'light' };\n if (envTheme === 'dark') return { mode: 'dark' };\n\n // 2. OSC 11 query — ask the terminal for its actual background color\n const oscResult = await queryTerminalBackground(200);\n if (oscResult) return oscResult;\n\n // 3. COLORFGBG env var fallback\n const fgbgResult = detectFromColorFgBg();\n if (fgbgResult) return { mode: fgbgResult };\n\n // 4. Default to dark\n return { mode: 'dark' };\n}\n","import { loadSettings, saveSettings } from '../../onboarding/settings.js';\nimport { detectTerminalTheme } from '../detect-theme.js';\nimport { applyThemeMode, getThemeMode } from '../theme.js';\nimport type { SlashCommandContext } from './types.js';\n\n/**\n * /theme [auto|dark|light] — show or change the color theme.\n */\nexport async function handleThemeCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const arg = args[0]?.toLowerCase();\n\n if (!arg) {\n const mode = getThemeMode();\n const settings = loadSettings();\n const pref = settings.preferences.theme ?? 'auto';\n ctx.showInfo(`Theme: ${mode} (preference: ${pref})`);\n return;\n }\n\n if (arg !== 'auto' && arg !== 'dark' && arg !== 'light') {\n ctx.showError('Usage: /theme [auto|dark|light]');\n return;\n }\n\n // Persist the preference\n const settings = loadSettings();\n settings.preferences.theme = arg;\n saveSettings(settings);\n\n // Apply immediately\n if (arg === 'auto') {\n const detection = await detectTerminalTheme();\n applyThemeMode(detection.mode, detection.detectedBgHex);\n ctx.showInfo(`Theme set to auto (detected: ${detection.mode})`);\n } else {\n applyThemeMode(arg);\n ctx.showInfo(`Theme set to ${arg}`);\n }\n ctx.state.ui.requestRender();\n}\n","import { loadSettings, saveSettings } from '../../onboarding/settings.js';\nimport {\n detectPackageManager,\n fetchChangelog,\n fetchLatestVersion,\n getInstallCommand,\n isNewerVersion,\n runUpdate,\n} from '../../utils/update-check.js';\nimport { AskQuestionInlineComponent } from '../components/ask-question-inline.js';\nimport type { SlashCommandContext } from './types.js';\n\nexport async function handleUpdateCommand(ctx: SlashCommandContext): Promise<void> {\n const currentVersion = ctx.state.options.version;\n if (!currentVersion) {\n ctx.showError('Could not determine the current version.');\n return;\n }\n\n ctx.showInfo('Checking for updates…');\n\n const latestVersion = await fetchLatestVersion();\n if (!latestVersion) {\n ctx.showError('Could not reach the npm registry. Check your network connection.');\n return;\n }\n\n if (!isNewerVersion(currentVersion, latestVersion)) {\n ctx.showInfo(`You are already on the latest version (v${currentVersion}).`);\n return;\n }\n\n const [pm, changelog] = await Promise.all([detectPackageManager(), fetchChangelog(latestVersion)]);\n\n // Clear any previously dismissed version so the prompt always shows\n const settings = loadSettings();\n if (settings.updateDismissedVersion) {\n settings.updateDismissedVersion = null;\n saveSettings(settings);\n }\n\n // Build question text with optional changelog\n let question = `A new version is available: v${latestVersion} (current: v${currentVersion}).`;\n if (changelog) {\n question += `\\n\\nWhat's new:\\n${changelog}`;\n }\n question += `\\n\\nWould you like to update now?`;\n\n const answer = await new Promise<string | null>(resolve => {\n const component = new AskQuestionInlineComponent(\n {\n question,\n options: [\n { label: 'Yes', description: 'Update and restart' },\n { label: 'No', description: 'Skip this version' },\n ],\n allowCustomResponse: false,\n onSubmit: answer => {\n ctx.state.activeInlineQuestion = undefined;\n resolve(answer);\n },\n onCancel: () => {\n ctx.state.activeInlineQuestion = undefined;\n resolve(null);\n },\n },\n ctx.state.ui,\n );\n\n ctx.state.chatContainer.addChild(component);\n ctx.state.activeInlineQuestion = component;\n component.focused = true;\n ctx.state.ui.requestRender();\n });\n\n if (answer === 'Yes') {\n ctx.showInfo(`Updating to v${latestVersion}…`);\n const ok = await runUpdate(pm, latestVersion);\n if (ok) {\n ctx.showInfo(`Updated to v${latestVersion}. Please restart Mastra Code.`);\n ctx.stop();\n process.exit(0);\n } else {\n const cmd = getInstallCommand(pm, latestVersion);\n ctx.showError(`Auto-update failed. Run \\`${cmd}\\` manually.`);\n }\n } else if (answer === 'No') {\n const s = loadSettings();\n s.updateDismissedVersion = latestVersion;\n saveSettings(s);\n ctx.showInfo('Update skipped.');\n }\n}\n","import { GatewayRegistry } from '@mastra/core/llm';\nimport {\n loadSettings,\n saveSettings,\n MEMORY_GATEWAY_PROVIDER,\n MEMORY_GATEWAY_DEFAULT_URL,\n} from '../../onboarding/settings.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport type { SlashCommandContext } from './types.js';\n\nasync function askText(ctx: SlashCommandContext, question: string, defaultValue?: string): Promise<string | null> {\n const answer = await askModalQuestion(ctx.state.ui, { question, defaultValue });\n const trimmed = answer?.trim() ?? '';\n return trimmed.length > 0 ? trimmed : null;\n}\n\nasync function askSelect(\n ctx: SlashCommandContext,\n question: string,\n options: Array<{ label: string; value: string; description?: string }>,\n): Promise<string | null> {\n const answer = await askModalQuestion(ctx.state.ui, {\n question,\n options: options.map(option => ({ label: option.label, description: option.description })),\n });\n const selected = options.find(option => option.label === answer);\n const trimmed = answer?.trim() ?? '';\n return selected?.value ?? (trimmed.length > 0 ? trimmed : null);\n}\n\nasync function refreshGatewayModels(ctx: SlashCommandContext): Promise<void> {\n try {\n await GatewayRegistry.getInstance({ useDynamicLoading: true }).syncGateways(true);\n } catch (error) {\n ctx.showError(`Failed to refresh gateway models: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nexport async function handleMemoryGatewayCommand(ctx: SlashCommandContext): Promise<void> {\n const authStorage = ctx.authStorage;\n if (!authStorage) {\n ctx.showError('Auth storage not available');\n return;\n }\n\n // Resolve effective state from storage + env\n const currentKey = authStorage.getStoredApiKey(MEMORY_GATEWAY_PROVIDER) ?? process.env['MASTRA_GATEWAY_API_KEY'];\n const settings = loadSettings();\n const effectiveUrl =\n settings.memoryGateway?.baseUrl ?? process.env['MASTRA_GATEWAY_URL'] ?? MEMORY_GATEWAY_DEFAULT_URL;\n\n if (currentKey) {\n const masked = currentKey.length > 6 ? `****${currentKey.slice(-4)}` : '****';\n ctx.showInfo(`Current API key: ${masked} | URL: ${effectiveUrl}`);\n } else {\n ctx.showInfo(`No API key set | URL: ${effectiveUrl}`);\n }\n\n // Ask for API key\n const keyAnswer = await askText(\n ctx,\n currentKey\n ? `API key (ENTER to keep current, 'clear' to remove, ESC to skip):`\n : `API key (or 'clear' to remove, ESC to cancel):`,\n currentKey,\n );\n if (keyAnswer === null) {\n // ESC with no key — abort; ESC with existing key — proceed to URL prompt\n if (!currentKey) return;\n } else if (keyAnswer.toLowerCase() === 'clear') {\n authStorage.remove(`apikey:${MEMORY_GATEWAY_PROVIDER}`);\n delete process.env['MASTRA_GATEWAY_API_KEY'];\n delete process.env['MASTRA_GATEWAY_URL'];\n settings.memoryGateway = {};\n saveSettings(settings);\n await refreshGatewayModels(ctx);\n ctx.showInfo('Memory gateway cleared. Memory mode changes take effect on next restart.');\n return;\n } else if (keyAnswer.length > 0) {\n authStorage.setStoredApiKey(MEMORY_GATEWAY_PROVIDER, keyAnswer, 'MASTRA_GATEWAY_API_KEY');\n }\n\n const urlChoice = await askSelect(ctx, 'Gateway URL', [\n {\n label: MEMORY_GATEWAY_DEFAULT_URL,\n value: MEMORY_GATEWAY_DEFAULT_URL,\n description: effectiveUrl === MEMORY_GATEWAY_DEFAULT_URL ? 'current' : 'hosted default',\n },\n {\n label: 'http://localhost:4111',\n value: 'http://localhost:4111',\n description: effectiveUrl === 'http://localhost:4111' ? 'current' : 'local development',\n },\n ]);\n\n if (urlChoice === null) {\n return;\n }\n\n const urlAnswer = urlChoice;\n\n if (urlAnswer && urlAnswer !== MEMORY_GATEWAY_DEFAULT_URL) {\n settings.memoryGateway = { baseUrl: urlAnswer };\n process.env['MASTRA_GATEWAY_URL'] = urlAnswer;\n } else {\n settings.memoryGateway = {};\n delete process.env['MASTRA_GATEWAY_URL'];\n }\n saveSettings(settings);\n await refreshGatewayModels(ctx);\n\n ctx.showInfo('Memory gateway configured. Memory mode changes take effect on next restart.');\n}\n","import { getUserName } from '../../utils/project.js';\nimport type { SlashCommandContext } from './types.js';\n\n/**\n * /feedback command — annotate the most recent trace with user feedback.\n *\n * Feedback is emitted through the observability event bus so it reaches all\n * configured exporters (DuckDB, cloud, Langfuse, etc.) without requiring\n * direct storage access. A minimal correlationContext is supplied so the\n * observability layer does not need to re-hydrate the trace from storage —\n * this keeps the command working even when the local DuckDB is locked by\n * another process.\n *\n * Usage:\n * /feedback up — thumbs up\n * /feedback down — thumbs down\n * /feedback down Bad tool selection — thumbs down with comment\n * /feedback 4 — numeric rating (0–10)\n * /feedback comment Great response — text comment only\n */\nexport async function handleFeedbackCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n if (args.length === 0) {\n ctx.showInfo(`Usage:\n /feedback up — thumbs up\n /feedback down — thumbs down\n /feedback down <comment> — thumbs down with comment\n /feedback <0-10> — numeric rating\n /feedback comment <text> — text comment only`);\n return;\n }\n\n // Resolve trace context.\n // getCurrentTraceId() returns the actual observability traceId (OTel 32-hex-char ID)\n // captured from the stream response. getCurrentRunId() returns the agent's runId (UUID).\n // We pass both so the cloud endpoint can correlate feedback to the correct trace.\n const traceId = ctx.harness.getCurrentTraceId() ?? undefined;\n const runId = ctx.harness.getCurrentRunId() ?? undefined;\n const threadId = ctx.harness.getCurrentThreadId() ?? undefined;\n\n if (!traceId && !runId && !threadId) {\n ctx.showError('No active session to attach feedback to.');\n return;\n }\n\n // Get observability from the Mastra instance so feedback flows through the\n // event bus to all exporters (cloud, DuckDB, etc.).\n const mastra = ctx.harness.getMastra();\n const observability = mastra?.observability;\n if (!observability?.addFeedback) {\n ctx.showError('Observability not configured — cannot save feedback.');\n return;\n }\n\n // Parse the feedback input\n const subcommand = args[0]!.toLowerCase();\n const rest = args.slice(1).join(' ').trim();\n\n let feedbackType: string;\n let value: number | string;\n let comment: string | undefined;\n\n if (subcommand === 'up') {\n feedbackType = 'thumbs';\n value = 1;\n comment = rest || undefined;\n } else if (subcommand === 'down') {\n feedbackType = 'thumbs';\n value = 0;\n comment = rest || undefined;\n } else if (subcommand === 'comment') {\n if (!rest) {\n ctx.showError('Please provide a comment: /feedback comment <text>');\n return;\n }\n feedbackType = 'comment';\n value = rest;\n comment = rest;\n } else {\n // Try numeric rating\n const num = Number(subcommand);\n if (!Number.isNaN(num) && num >= 0 && num <= 10) {\n feedbackType = 'rating';\n value = num;\n comment = rest || undefined;\n } else {\n ctx.showError(`Unknown feedback type: \"${subcommand}\". Use up, down, comment, or a number 0-10.`);\n return;\n }\n }\n\n try {\n await observability.addFeedback({\n // Pass the actual traceId so the feedback is correlated to the trace.\n traceId,\n // Supply a correlationContext so the observability layer emits the event\n // directly without looking up the trace from storage (which may be locked).\n correlationContext: {\n traceId,\n runId,\n },\n feedback: {\n feedbackType,\n feedbackSource: 'mastracode',\n feedbackUserId: getUserName(),\n value,\n comment,\n metadata: {\n ...(threadId ? { threadId } : {}),\n ...(runId ? { runId } : {}),\n },\n },\n });\n\n // Build confirmation message\n let msg: string;\n if (feedbackType === 'thumbs') {\n msg = value === 1 ? 'Feedback recorded: 👍' : 'Feedback recorded: 👎';\n } else if (feedbackType === 'rating') {\n msg = `Feedback recorded: ${value}/10`;\n } else {\n msg = 'Comment recorded.';\n }\n if (comment && feedbackType !== 'comment') {\n msg += ` — \"${comment}\"`;\n }\n\n ctx.showInfo(msg);\n } catch (err) {\n ctx.showError(`Failed to save feedback: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n","import { loadSettings, OBSERVABILITY_AUTH_PREFIX, saveSettings } from '../../onboarding/settings.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport { theme } from '../theme.js';\nimport type { SlashCommandContext } from './types.js';\n\nconst VALID_PROJECT_ID = /^[a-zA-Z0-9_-]+$/;\n\nfunction showStatus(ctx: SlashCommandContext): void {\n const resourceId = ctx.harness.getResourceId();\n const settings = loadSettings();\n const resourceConfig = settings.observability.resources[resourceId];\n const hasToken = ctx.authStorage?.hasStoredApiKey(`${OBSERVABILITY_AUTH_PREFIX}${resourceId}`) ?? false;\n\n const lines: string[] = [theme.bold(theme.fg('accent', 'Observability')), ''];\n\n // Cloud status\n lines.push(theme.bold('Cloud'));\n if (resourceConfig && hasToken) {\n lines.push(` ${theme.fg('success', '●')} Connected`);\n lines.push(` Project: ${resourceConfig.projectId}`);\n lines.push(` Resource: ${resourceId}`);\n lines.push(` Since: ${new Date(resourceConfig.configuredAt).toLocaleDateString()}`);\n } else if (resourceConfig && !hasToken) {\n lines.push(` ${theme.fg('warning', '●')} Partially configured (missing token)`);\n lines.push(` Project: ${resourceConfig.projectId}`);\n lines.push('');\n lines.push(theme.fg('dim', ' Run /observability connect to re-enter credentials.'));\n } else {\n const envToken = process.env.MASTRA_CLOUD_ACCESS_TOKEN;\n const envProject = process.env.MASTRA_PROJECT_ID;\n if (envToken) {\n lines.push(` ${theme.fg('success', '●')} Connected ${theme.fg('dim', '(via environment variables)')}`);\n if (envProject) {\n lines.push(` Project: ${envProject}`);\n }\n lines.push(` Resource: ${resourceId}`);\n } else {\n lines.push(` ${theme.fg('dim', '●')} Not configured`);\n lines.push(` Resource: ${resourceId}`);\n }\n }\n\n // Local tracing status\n lines.push('');\n lines.push(theme.bold('Local tracing (DuckDB)'));\n if (settings.observability.localTracing) {\n lines.push(` ${theme.fg('success', '●')} Enabled`);\n } else {\n lines.push(` ${theme.fg('dim', '●')} Disabled`);\n }\n\n lines.push('');\n lines.push(theme.fg('dim', 'Commands:'));\n lines.push(theme.fg('dim', ' /observability connect — configure cloud project'));\n lines.push(theme.fg('dim', ' /observability disconnect — remove cloud configuration'));\n lines.push(theme.fg('dim', ' /observability local on — enable local DuckDB tracing'));\n lines.push(theme.fg('dim', ' /observability local off — disable local DuckDB tracing'));\n\n ctx.showInfo(lines.join('\\n'));\n}\n\nasync function handleConnect(ctx: SlashCommandContext): Promise<void> {\n if (!ctx.authStorage) {\n ctx.showError('Auth storage not available. Cannot store credentials.');\n return;\n }\n\n const resourceId = ctx.harness.getResourceId();\n const projectId = await askModalQuestion(ctx.state.ui, { question: 'Enter your cloud project ID:' });\n if (!projectId) return;\n\n if (!VALID_PROJECT_ID.test(projectId)) {\n ctx.showError('Invalid project ID. Only letters, numbers, hyphens, and underscores are allowed.');\n return;\n }\n\n const token = await askModalQuestion(ctx.state.ui, { question: 'Enter your cloud access token:' });\n if (!token) return;\n\n const settings = loadSettings();\n settings.observability.resources[resourceId] = {\n projectId,\n configuredAt: new Date().toISOString(),\n };\n saveSettings(settings);\n\n ctx.authStorage.setStoredApiKey(`${OBSERVABILITY_AUTH_PREFIX}${resourceId}`, token);\n\n ctx.showInfo(\n `${theme.fg('success', '✓')} Cloud observability configured.\\n` +\n ` Project: ${projectId}\\n` +\n ` Resource: ${resourceId}\\n\\n` +\n theme.fg('dim', 'Restart MastraCode for the new configuration to take effect.'),\n );\n}\n\nfunction handleLocal(ctx: SlashCommandContext, args: string[]): void {\n const toggle = args[1]?.trim().toLowerCase();\n if (toggle !== 'on' && toggle !== 'off') {\n const settings = loadSettings();\n const current = settings.observability.localTracing ? 'on' : 'off';\n ctx.showInfo(\n `Local DuckDB tracing is currently ${theme.bold(current)}.\\n\\n` +\n theme.fg('dim', 'Usage:\\n /observability local on — enable\\n /observability local off — disable'),\n );\n return;\n }\n\n const enable = toggle === 'on';\n const settings = loadSettings();\n if (settings.observability.localTracing === enable) {\n ctx.showInfo(`Local tracing is already ${theme.bold(toggle)}.`);\n return;\n }\n\n settings.observability.localTracing = enable;\n saveSettings(settings);\n\n if (enable) {\n ctx.showInfo(\n `${theme.fg('success', '✓')} Local DuckDB tracing enabled.\\n` +\n theme.fg('dim', 'Restart MastraCode for changes to take effect.'),\n );\n } else {\n ctx.showInfo(\n `${theme.fg('success', '✓')} Local DuckDB tracing disabled.\\n` +\n theme.fg(\n 'dim',\n 'Restart MastraCode for changes to take effect.\\nExisting data remains at the DuckDB path — delete manually if needed.',\n ),\n );\n }\n}\n\nfunction handleDisconnect(ctx: SlashCommandContext): void {\n const resourceId = ctx.harness.getResourceId();\n const settings = loadSettings();\n\n const hadConfig = resourceId in settings.observability.resources;\n const hadToken = ctx.authStorage?.hasStoredApiKey(`${OBSERVABILITY_AUTH_PREFIX}${resourceId}`) ?? false;\n\n if (!hadConfig && !hadToken) {\n ctx.showInfo(`No cloud observability configured for resource \"${resourceId}\".`);\n return;\n }\n\n delete settings.observability.resources[resourceId];\n saveSettings(settings);\n\n if (ctx.authStorage) {\n ctx.authStorage.remove(`apikey:${OBSERVABILITY_AUTH_PREFIX}${resourceId}`);\n }\n\n ctx.showInfo(\n `${theme.fg('success', '✓')} Cloud observability disconnected for resource \"${resourceId}\".\\n` +\n theme.fg('dim', 'Restart MastraCode for changes to take effect.'),\n );\n}\n\nexport async function handleObservabilityCommand(ctx: SlashCommandContext, args: string[]): Promise<void> {\n const sub = args[0]?.trim().toLowerCase();\n\n switch (sub) {\n case 'connect':\n await handleConnect(ctx);\n break;\n case 'disconnect':\n handleDisconnect(ctx);\n break;\n case 'local':\n handleLocal(ctx, args);\n break;\n case 'status':\n case undefined:\n showStatus(ctx);\n break;\n default:\n ctx.showInfo(\n 'Usage:\\n' +\n ' /observability — show current status\\n' +\n ' /observability connect — configure cloud observability\\n' +\n ' /observability disconnect — remove cloud configuration\\n' +\n ' /observability local on — enable local DuckDB tracing\\n' +\n ' /observability local off — disable local DuckDB tracing',\n );\n }\n}\n","import { GITHUB_SIGNALS_METADATA_KEY } from '@mastra/github-signals';\nimport type { GithubPRSignalInput } from '@mastra/github-signals';\nimport { loadSettings } from '../../onboarding/settings.js';\nimport { askModalQuestion } from '../modal-question.js';\nimport type { SlashCommandContext } from './types.js';\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction formatLocalTimestamp(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: 'medium',\n timeStyle: 'medium',\n hour12: true,\n }).format(date);\n}\n\nfunction formatPollInterval(value: number): string {\n if (value % 60_000 === 0) return `${value / 60_000}m`;\n return `${Math.round(value / 1000)}s`;\n}\n\nfunction parseGithubPRReference(input: string): GithubPRSignalInput | undefined {\n const trimmed = input.trim();\n if (!trimmed) return undefined;\n\n const numberOnly = /^#?(\\d+)$/.exec(trimmed);\n if (numberOnly?.[1]) return Number(numberOnly[1]);\n\n const repoReference = /^(?:https:\\/\\/github\\.com\\/)?([^\\s/#]+)\\/([^\\s/#]+)(?:\\/pull\\/|#)(\\d+)$/.exec(trimmed);\n if (repoReference?.[1] && repoReference[2] && repoReference[3]) {\n return { owner: repoReference[1], repo: repoReference[2], number: Number(repoReference[3]) };\n }\n\n return undefined;\n}\n\nasync function getCurrentGithubThread(ctx: SlashCommandContext): Promise<{\n threadId?: string;\n resourceId?: string;\n metadata?: Record<string, unknown>;\n}> {\n const harness = ctx.harness as unknown as {\n getCurrentThreadId?: () => string | undefined;\n getResourceId?: () => string | undefined;\n listThreads?: (input?: {\n allResources?: boolean;\n }) => Promise<Array<{ id: string; resourceId?: string; metadata?: Record<string, unknown> }>>;\n };\n const threadId = harness.getCurrentThreadId?.();\n if (!threadId) return {};\n\n const thread = (await harness.listThreads?.({ allResources: true }))?.find(item => item.id === threadId);\n return { threadId, resourceId: thread?.resourceId ?? harness.getResourceId?.(), metadata: thread?.metadata };\n}\n\nfunction getGithubSubscriptionsFromThreadMetadata(metadata: Record<string, unknown> | undefined): Array<{\n owner?: string;\n repo?: string;\n number: number;\n}> {\n const mastra = isPlainObject(metadata?.mastra) ? metadata.mastra : {};\n const githubSignals = isPlainObject(mastra[GITHUB_SIGNALS_METADATA_KEY]) ? mastra[GITHUB_SIGNALS_METADATA_KEY] : {};\n const subscriptions = Array.isArray(githubSignals.subscriptions) ? githubSignals.subscriptions : [];\n return subscriptions.flatMap(subscription => {\n if (!isPlainObject(subscription) || typeof subscription.number !== 'number') return [];\n return [\n {\n ...(typeof subscription.owner === 'string' ? { owner: subscription.owner } : {}),\n ...(typeof subscription.repo === 'string' ? { repo: subscription.repo } : {}),\n number: subscription.number,\n },\n ];\n });\n}\n\nasync function describeGithubSubscriptions(ctx: SlashCommandContext): Promise<string> {\n const { threadId, resourceId, metadata } = await getCurrentGithubThread(ctx);\n if (!threadId) return 'GitHub Signals debug: no current thread.';\n\n const thread = { resourceId, metadata };\n const mastra = isPlainObject(thread?.metadata?.mastra) ? thread.metadata.mastra : {};\n const githubSignals = isPlainObject(mastra[GITHUB_SIGNALS_METADATA_KEY]) ? mastra[GITHUB_SIGNALS_METADATA_KEY] : {};\n const subscriptions = Array.isArray(githubSignals.subscriptions) ? githubSignals.subscriptions : [];\n if (subscriptions.length === 0) return `GitHub Signals debug for ${threadId}: no subscribed PRs.`;\n\n const githubSignalsProcessor = ctx.state.options?.githubSignals;\n const pollingActive = thread?.resourceId\n ? (githubSignalsProcessor?.isPollingThread({ threadId, resourceId: thread.resourceId }) ?? false)\n : false;\n const pollIntervalMs = githubSignalsProcessor?.getPollIntervalMs?.();\n const header = `GitHub Signals debug for ${threadId}: ${subscriptions.length} subscription${subscriptions.length === 1 ? '' : 's'}, polling=${pollingActive ? 'active' : 'inactive'}${pollIntervalMs ? `, interval=${formatPollInterval(pollIntervalMs)}` : ''}`;\n\n const lines = subscriptions.map(subscription => {\n if (!isPlainObject(subscription)) return '- invalid subscription metadata';\n const pr = `${subscription.owner}/${subscription.repo}#${subscription.number}`;\n const sync = subscription.lastSyncStatus ? `sync=${subscription.lastSyncStatus}` : 'sync=unknown';\n const poll = subscription.lastSyncAt\n ? `lastPoll=${formatLocalTimestamp(subscription.lastSyncAt)}`\n : 'lastPoll=never';\n const observed = [\n subscription.lastObservedGithubUpdatedAt\n ? `githubUpdated=${formatLocalTimestamp(subscription.lastObservedGithubUpdatedAt)}`\n : undefined,\n subscription.lastObservedState ? `state=${subscription.lastObservedState}` : undefined,\n subscription.lastObservedCiState ? `ci=${subscription.lastObservedCiState}` : undefined,\n subscription.lastObservedMergeableState ? `merge=${subscription.lastObservedMergeableState}` : undefined,\n subscription.lastObservedReviewStateHash ? `reviews=${subscription.lastObservedReviewStateHash}` : undefined,\n ].filter(Boolean);\n const notificationTime = formatLocalTimestamp(subscription.lastNotificationAt) ?? 'unknown time';\n const notification = subscription.lastNotificationKind\n ? `lastNotification=${subscription.lastNotificationKind}/${subscription.lastNotificationPriority ?? 'unknown'} at ${notificationTime}: ${subscription.lastNotificationSummary ?? ''}`\n : 'lastNotification=none';\n return `- ${pr} ${sync} ${poll}${subscription.lastSyncError ? ` error=${subscription.lastSyncError}` : ''}${observed.length ? ` (${observed.join(', ')})` : ''}\\n ${notification}`;\n });\n return [header, ...lines].join('\\n');\n}\n\nasync function syncGithubSubscriptions(ctx: SlashCommandContext): Promise<void> {\n const githubSignalsProcessor = ctx.state.options?.githubSignals;\n if (!githubSignalsProcessor?.syncThreadNow) {\n ctx.showError('GitHub signals are not available. Enable them in /settings and restart MastraCode.');\n return;\n }\n\n const { threadId, resourceId } = await getCurrentGithubThread(ctx);\n if (!threadId || !resourceId) {\n ctx.showError('GitHub sync requires a current thread.');\n return;\n }\n\n try {\n const count = await githubSignalsProcessor.syncThreadNow({ threadId, resourceId });\n if (count === 0) {\n ctx.showInfo('No GitHub PR subscriptions to sync.');\n }\n } catch (error) {\n ctx.showError(`Failed to sync GitHub PR subscriptions: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nasync function detectCurrentPullRequest(ctx: SlashCommandContext): Promise<string> {\n const { execFile } = await import('node:child_process');\n return new Promise(resolve => {\n execFile(\n 'gh',\n ['pr', 'view', '--json', 'url', '--jq', '.url'],\n { cwd: ctx.state.projectInfo.rootPath },\n (error, stdout) => {\n resolve(error ? '' : stdout.trim());\n },\n );\n });\n}\n\nexport async function handleGithubCommand(ctx: SlashCommandContext, args: string[] = []): Promise<void> {\n if (!loadSettings().signals.experimentalGithubSignals) {\n ctx.showError('Experimental GitHub signals are disabled. Enable them in /settings and restart MastraCode.');\n return;\n }\n\n const [maybeAction, ...restArgs] = args;\n if (maybeAction === 'debug') {\n ctx.showInfo(await describeGithubSubscriptions(ctx));\n return;\n }\n if (maybeAction === 'sync') {\n await syncGithubSubscriptions(ctx);\n return;\n }\n const explicitSubscribe = maybeAction === 'subscribe' || maybeAction === 'sub';\n const action = maybeAction === 'unsubscribe' || maybeAction === 'unsub' ? 'unsubscribe' : 'subscribe';\n const referenceArgs = action === 'unsubscribe' || explicitSubscribe ? restArgs : args;\n const inlineReference = referenceArgs.join(' ').trim();\n const currentThread = await getCurrentGithubThread(ctx);\n const existingSubscriptions = getGithubSubscriptionsFromThreadMetadata(currentThread.metadata);\n const reference = inlineReference\n ? inlineReference\n : action === 'unsubscribe' && existingSubscriptions.length === 1\n ? existingSubscriptions[0]!\n : await askModalQuestion(ctx.state.ui, {\n question: `GitHub PR to ${action} ${action === 'subscribe' ? 'to' : 'from'}`,\n defaultValue: await detectCurrentPullRequest(ctx),\n });\n if (reference === null) return;\n\n const parsed = typeof reference === 'string' ? parseGithubPRReference(reference) : reference;\n if (!parsed) {\n ctx.showError(\n 'Usage: /github 123, /github owner/repo#123, /github unsubscribe 123, /github sync, /github debug, or /github https://github.com/owner/repo/pull/123',\n );\n return;\n }\n if (!currentThread.threadId || !currentThread.resourceId) {\n ctx.showError(`GitHub ${action} requires a current thread.`);\n return;\n }\n\n const githubSignalsProcessor = ctx.state.options?.githubSignals;\n const runOperation =\n action === 'unsubscribe'\n ? githubSignalsProcessor?.unsubscribeThreadFromPR\n : githubSignalsProcessor?.subscribeThreadToPR;\n if (!runOperation) {\n ctx.showError('GitHub signals are not available. Enable them in /settings and restart MastraCode.');\n return;\n }\n\n try {\n const result = await runOperation.call(githubSignalsProcessor, {\n threadId: currentThread.threadId,\n resourceId: currentThread.resourceId,\n pr: parsed,\n });\n const prefix =\n action === 'unsubscribe' ? (result.removed ? 'Unsubscribed from' : 'No subscription found for') : 'Subscribed to';\n ctx.showInfo(`${prefix} ${result.owner}/${result.repo}#${result.number}.`);\n } catch (error) {\n ctx.showError(`Failed to ${action} GitHub PR: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","import { showInfo } from './display.js';\nimport type { TUIState } from './state.js';\n\nexport const GOAL_JUDGE_INPUT_LOCK_MESSAGE = 'Goal judge is evaluating; wait a moment or press Esc to pause the goal.';\n\nexport function isGoalJudgeInputLocked(state: TUIState): boolean {\n return Boolean(state.activeGoalJudge);\n}\n\nexport function showGoalJudgeInputLockInfo(state: TUIState): void {\n showInfo(state, GOAL_JUDGE_INPUT_LOCK_MESSAGE);\n}\n\nexport function canRunSlashCommandDuringGoalJudge(command: string, args: string[]): boolean {\n if (command === 'exit') return true;\n if (command !== 'goal') return false;\n return args[0] === 'pause' || args[0] === 'clear';\n}\n","/**\n * Slash command dispatcher: routes command strings to extracted handlers.\n */\nimport { processSlashCommand } from '../utils/slash-command-processor.js';\nimport { insertChatComponentWithBoundarySpacing } from './chat-boundary-reconciliation.js';\nimport { startGoalWithDefaults } from './commands/goal.js';\nimport {\n handleHelpCommand,\n handleCostCommand,\n handleYoloCommand,\n handleThinkCommand,\n handlePermissionsCommand,\n handleNameCommand,\n handleExitCommand,\n handleHooksCommand,\n handleMcpCommand,\n handleModeCommand,\n handleSkillCommand,\n handleSkillsCommand,\n handleNewCommand,\n handleCloneCommand,\n handleResourceCommand,\n handleDiffCommand,\n handleThreadsCommand,\n handleThreadCommand,\n handleThreadTagDirCommand,\n handleSandboxCommand as handleSandboxCmd,\n handleModelsPackCommand,\n handleCustomProvidersCommand,\n handleSubagentsCommand,\n handleOMCommand,\n handleSettingsCommand,\n handleLoginCommand,\n handleReviewCommand as handleReviewCmd,\n handleReportIssueCommand as handleReportIssueCmd,\n handleSetupCommand,\n handleBrowserCommand,\n handleThemeCommand,\n handleUpdateCommand,\n handleMemoryGatewayCommand,\n handleApiKeysCommand,\n handleFeedbackCommand,\n handleObservabilityCommand,\n handleGithubCommand,\n handleGoalCommand,\n} from './commands/index.js';\nimport { isCurrentThreadActive, sendSlashCommandMessage } from './commands/send-slash-command-message.js';\nimport type { SlashCommandContext } from './commands/types.js';\nimport { SlashCommandComponent } from './components/slash-command.js';\nimport { showError, showInfo } from './display.js';\nimport {\n canRunSlashCommandDuringGoalJudge,\n isGoalJudgeInputLocked,\n showGoalJudgeInputLockInfo,\n} from './goal-input-lock.js';\nimport type { TUIState } from './state.js';\n\nconst TRACKED_COMMANDS = new Set(['login', 'models', 'mode', 'memory-gateway', 'custom-providers', 'threads', 'new']);\n\n/**\n * Dispatch a slash command input to the appropriate handler.\n * Returns true if the command was handled (or was unknown), false if not a command.\n */\nexport async function dispatchSlashCommand(\n input: string,\n state: TUIState,\n buildCtx: () => SlashCommandContext,\n): Promise<boolean> {\n const trackCommand = (ctx: SlashCommandContext, command: string) => {\n if (!TRACKED_COMMANDS.has(command)) return;\n ctx.analytics?.trackCommand(command, {\n action: 'attempted',\n threadId: state.harness.getCurrentThreadId(),\n resourceId: state.harness.getResourceId(),\n mode: state.harness.getCurrentModeId(),\n });\n };\n const trimmedInput = input.trim();\n\n const slashMatch = trimmedInput.match(/^(\\/\\/?)([\\s\\S]*)$/);\n const slashPrefix = slashMatch?.[1] ?? '';\n const withoutSlashes = slashMatch?.[2] ?? trimmedInput;\n const firstWhitespaceIndex = withoutSlashes.search(/\\s/);\n const commandText = firstWhitespaceIndex === -1 ? withoutSlashes : withoutSlashes.slice(0, firstWhitespaceIndex);\n const rawArgsText = firstWhitespaceIndex === -1 ? '' : withoutSlashes.slice(firstWhitespaceIndex).trim();\n const parsedArgs = rawArgsText ? rawArgsText.split(/\\s+/) : [];\n\n if (slashPrefix === '//') {\n if (isGoalJudgeInputLocked(state)) {\n showGoalJudgeInputLockInfo(state);\n return true;\n }\n\n const cmdName = commandText;\n const cmdArgs = parsedArgs;\n const customCommand = state.customSlashCommands.find(cmd => cmd.name === cmdName);\n if (customCommand) {\n await handleCustomSlashCommand(\n state,\n customCommand,\n cmdArgs,\n buildCtx(),\n `//${cmdName}${rawArgsText ? ` ${rawArgsText}` : ''}`,\n );\n return true;\n }\n\n showError(state, `Unknown custom command: ${cmdName}`);\n return true;\n }\n\n const command = commandText;\n const goalSubcommands = new Set(['status', 'pause', 'resume', 'clear']);\n const firstGoalArg = parsedArgs[0]?.toLowerCase();\n const args =\n command === 'goal' && rawArgsText && !goalSubcommands.has(firstGoalArg ?? '') ? [rawArgsText] : parsedArgs;\n\n if (!command) {\n return true;\n }\n\n if (isGoalJudgeInputLocked(state) && !canRunSlashCommandDuringGoalJudge(command, args)) {\n showGoalJudgeInputLockInfo(state);\n return true;\n }\n\n const ctx = buildCtx();\n trackCommand(ctx, command);\n\n if (command.startsWith('goal/')) {\n await handleGoalSourceCommand(state, command.slice('goal/'.length), args, ctx);\n return true;\n }\n\n if (command.startsWith('skill/')) {\n await handleSkillCommand(buildCtx(), command.slice('skill/'.length), args);\n return true;\n }\n\n switch (command) {\n case 'new':\n await handleNewCommand(ctx);\n return true;\n case 'clone':\n await handleCloneCommand(ctx);\n return true;\n case 'threads':\n await handleThreadsCommand(ctx);\n return true;\n case 'thread':\n await handleThreadCommand(ctx);\n return true;\n case 'skills':\n await handleSkillsCommand(ctx);\n return true;\n case 'thread:tag-dir':\n await handleThreadTagDirCommand(ctx);\n return true;\n case 'sandbox':\n await handleSandboxCmd(ctx, args);\n return true;\n case 'mode':\n await handleModeCommand(ctx, args);\n return true;\n case 'models':\n await handleModelsPackCommand(ctx);\n return true;\n case 'custom-providers':\n await handleCustomProvidersCommand(ctx);\n return true;\n case 'subagents':\n await handleSubagentsCommand(ctx);\n return true;\n case 'om':\n await handleOMCommand(ctx);\n return true;\n case 'think':\n await handleThinkCommand(ctx, args);\n return true;\n case 'permissions':\n await handlePermissionsCommand(ctx, args);\n return true;\n case 'yolo':\n handleYoloCommand(ctx);\n return true;\n case 'settings':\n await handleSettingsCommand(ctx);\n return true;\n case 'login':\n await handleLoginCommand(ctx, 'login');\n return true;\n case 'logout':\n await handleLoginCommand(ctx, 'logout');\n return true;\n case 'cost':\n handleCostCommand(ctx);\n return true;\n case 'diff':\n await handleDiffCommand(ctx, args[0]);\n return true;\n case 'name':\n await handleNameCommand(ctx, args);\n return true;\n case 'resource':\n await handleResourceCommand(ctx, args);\n return true;\n case 'exit':\n handleExitCommand(ctx);\n return true;\n case 'help':\n handleHelpCommand(ctx);\n return true;\n case 'hooks':\n handleHooksCommand(ctx, args);\n return true;\n case 'mcp':\n await handleMcpCommand(ctx, args);\n return true;\n case 'review':\n await handleReviewCmd(ctx, args);\n return true;\n case 'report-issue':\n await handleReportIssueCmd(ctx, args);\n return true;\n case 'setup':\n await handleSetupCommand(ctx);\n return true;\n case 'browser':\n await handleBrowserCommand(ctx, args);\n return true;\n case 'theme':\n await handleThemeCommand(ctx, args);\n return true;\n case 'update':\n await handleUpdateCommand(ctx);\n return true;\n case 'memory-gateway':\n await handleMemoryGatewayCommand(ctx);\n return true;\n case 'api-keys':\n await handleApiKeysCommand(buildCtx());\n return true;\n case 'feedback':\n await handleFeedbackCommand(buildCtx(), args);\n return true;\n case 'observability':\n await handleObservabilityCommand(buildCtx(), args);\n return true;\n case 'github':\n await handleGithubCommand(buildCtx(), args);\n return true;\n case 'goal':\n await handleGoalCommand(buildCtx(), args);\n return true;\n default: {\n const customCommand = state.customSlashCommands.find(cmd => cmd.name === command);\n if (customCommand) {\n await handleCustomSlashCommand(\n state,\n customCommand,\n args,\n ctx,\n `/${command}${rawArgsText ? ` ${rawArgsText}` : ''}`,\n );\n return true;\n }\n showError(state, `Unknown command: ${command}`);\n return true;\n }\n }\n}\n\n/**\n * Handle a custom slash command by processing its template and adding to context.\n */\nasync function handleGoalSourceCommand(\n state: TUIState,\n sourceName: string,\n args: string[],\n ctx: SlashCommandContext,\n): Promise<void> {\n const customCommand = state.customSlashCommands.find(cmd => cmd.name === sourceName && cmd.goal === true);\n if (customCommand) {\n try {\n const processedContent = await processSlashCommand(customCommand, args, process.cwd());\n const objective = processedContent.trim();\n if (!objective) {\n showInfo(state, `Goal command /goal/${customCommand.name} produced no output.`);\n return;\n }\n await startGoalWithDefaults(ctx, objective);\n } catch (error) {\n showError(\n state,\n `Error executing /goal/${sourceName}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n return;\n }\n\n const goalSkill = state.goalSkillCommands.find(skill => skill.name === sourceName);\n if (goalSkill) {\n try {\n let workspace = ctx.getResolvedWorkspace();\n if (!workspace && ctx.harness?.hasWorkspace?.()) {\n workspace = await ctx.harness.resolveWorkspace();\n }\n const skill = await workspace?.skills?.get(goalSkill.path || goalSkill.name);\n if (!skill || skill.metadata?.goal !== true) {\n showError(state, `Unknown goal command: ${sourceName}`);\n return;\n }\n const trimmedArgs = args.join(' ').trim();\n const objective = `# Skill goal: ${skill.name}\\n\\n${skill.instructions}${\n trimmedArgs ? `\\n\\nARGUMENTS: ${trimmedArgs}` : ''\n }`;\n await startGoalWithDefaults(ctx, objective);\n } catch (error) {\n showError(\n state,\n `Error executing /goal/${sourceName}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n return;\n }\n\n showError(state, `Unknown goal command: ${sourceName}`);\n}\n\nasync function handleCustomSlashCommand(\n state: TUIState,\n command: { name: string; template: string; description?: string },\n args: string[],\n ctx: SlashCommandContext,\n displayText: string,\n): Promise<void> {\n try {\n // Process the command template\n const processedContent = await processSlashCommand(command as any, args, process.cwd());\n // Add the processed content as a system message / context\n if (processedContent.trim()) {\n const commandCtx = { ...ctx, state, harness: ctx.harness ?? state.harness } as SlashCommandContext;\n if (!isCurrentThreadActive(commandCtx)) {\n const slashComp = new SlashCommandComponent(command.name, processedContent.trim());\n state.allSlashCommandComponents.push(slashComp);\n insertChatComponentWithBoundarySpacing(state.chatContainer, slashComp);\n state.ui.requestRender();\n }\n\n // Wrap in <slash-command> tags so the assistant sees the full\n // content but addUserMessage won't double-render it.\n const wrapped = `<slash-command name=\"${command.name}\">\\n${processedContent.trim()}\\n</slash-command>`;\n await sendSlashCommandMessage(commandCtx, displayText, wrapped, { renderIdleUserMessage: false });\n } else {\n showInfo(state, `Executed //${command.name} (no output)`);\n }\n } catch (error) {\n showError(state, `Error executing //${command.name}: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n","/**\n * JudgeDisplayComponent — renders the goal judge's decision inline in the chat.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport type { GoalEvaluationPayload } from '@mastra/core/stream';\nimport chalk from 'chalk';\nimport stripAnsi from 'strip-ansi';\n\nimport { BOX_INDENT, getTermWidth, mastraBrand, theme } from '../theme.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\n/** Display-only decision derived from a goal evaluation. `waiting` is retained\n * for rendering compatibility but is not produced by the in-loop goal step. */\nexport interface GoalJudgeResult {\n decision: 'done' | 'continue' | 'waiting' | 'paused';\n reason: string;\n}\n\n/** Map a core {@link GoalEvaluationPayload} to a display decision. */\nexport function evaluationToJudgeResult(payload: GoalEvaluationPayload): GoalJudgeResult {\n const decision: GoalJudgeResult['decision'] = payload.passed\n ? 'done'\n : payload.status === 'paused'\n ? 'paused'\n : 'continue';\n return { decision, reason: payload.reason ?? '' };\n}\n\nconst JUDGE_COLOR = mastraBrand.blue;\nconst MUTED_COLOR = '#8a8a8a';\nconst PAUSED_COLOR = '#f5a524';\nconst WAITING_COLOR = '#8a8a8a';\n\nexport class JudgeDisplayComponent extends Container {\n private result: GoalJudgeResult | null;\n private turnsUsed: number;\n private maxTurns: number;\n private activity: string[] = [];\n\n constructor(result: GoalJudgeResult | null = null, turnsUsed = 0, maxTurns = 0) {\n super();\n this.result = result;\n this.turnsUsed = turnsUsed;\n this.maxTurns = maxTurns;\n this.renderContent();\n }\n\n addActivity(line: string): void {\n if (this.activity[this.activity.length - 1] !== line) {\n this.activity.push(line);\n }\n if (this.activity.length > 6) {\n this.activity = this.activity.slice(-6);\n }\n this.renderContent();\n }\n\n setResult(result: GoalJudgeResult, turnsUsed: number, maxTurns: number): void {\n this.result = result;\n this.turnsUsed = turnsUsed;\n this.maxTurns = maxTurns;\n this.renderContent();\n }\n\n /** Render the result of an in-loop goal evaluation chunk. */\n setEvaluation(payload: GoalEvaluationPayload): void {\n this.setResult(evaluationToJudgeResult(payload), payload.iteration, payload.maxRuns);\n }\n\n setInterrupted(): void {\n this.setResult({ decision: 'paused', reason: 'Judge evaluation was interrupted.' }, this.turnsUsed, this.maxTurns);\n }\n\n private renderContent(): void {\n this.clear();\n\n const border = (char: string) => chalk.hex(JUDGE_COLOR)(char);\n const title = chalk.hex(JUDGE_COLOR).bold('Goal');\n const termWidth = getTermWidth();\n const innerWidth = Math.max(20, termWidth - BOX_INDENT * 2 - 4);\n const horizontal = '─'.repeat(innerWidth + 1);\n\n this.addChild(new Text(`${border('╭')}${border(horizontal)}${border('╮')}`, BOX_INDENT, 0));\n this.addChild(new Text(this.renderRow(this.renderHeader(title), innerWidth, border), BOX_INDENT, 0));\n\n if (!this.result && this.activity.length === 0) {\n this.addChild(new Text(this.renderRow(chalk.dim('evaluating…'), innerWidth, border), BOX_INDENT, 0));\n }\n\n for (const line of this.activity) {\n this.addChild(new Text(this.renderRow(this.renderActivityLine(line), innerWidth, border), BOX_INDENT, 0));\n }\n\n if (this.activity.length > 0 && this.result) {\n this.addChild(new Text(this.renderRow('', innerWidth, border), BOX_INDENT, 0));\n }\n\n if (this.result) {\n for (const line of this.wrapLine(this.result.reason, innerWidth)) {\n this.addChild(new Text(this.renderRow(chalk.dim(line), innerWidth, border), BOX_INDENT, 0));\n }\n }\n\n this.addChild(new Text(`${border('╰')}${border(horizontal)}${border('╯')}`, BOX_INDENT, 0));\n }\n\n private renderActivityLine(line: string): string {\n const toolName = getActivityToolName(line);\n if (!toolName) return theme.fg('dim', `• ${line}`);\n\n const rest = line.slice(toolName.length);\n return `${theme.fg('dim', '• ')}${theme.fg('dim', theme.italic(toolName))}${theme.fg('dim', rest)}`;\n }\n\n private renderHeader(title: string): string {\n if (!this.result) {\n return `${title} ◌ ${chalk.hex(WAITING_COLOR).bold('evaluating')}`;\n }\n\n const decisionIcon =\n this.result.decision === 'done'\n ? '●'\n : this.result.decision === 'paused'\n ? '!'\n : this.result.decision === 'waiting'\n ? '◌'\n : '○';\n const decisionText = getDecisionText(this.result.decision);\n const turnInfo = this.maxTurns > 0 ? chalk.hex(MUTED_COLOR)(`(${this.turnsUsed}/${this.maxTurns})`) : '';\n return `${title} ${decisionIcon} ${decisionText}${turnInfo ? ` ${turnInfo}` : ''}`;\n }\n\n private renderRow(text: string, width: number, border: (char: string) => string): string {\n const content = this.padLine(text, width);\n return `${border('│')} ${content}${border('│')}`;\n }\n\n private wrapLine(text: string, width: number): string[] {\n const lines: string[] = [];\n let remaining = text;\n while (remaining.length > width) {\n const breakAt = remaining.lastIndexOf(' ', width);\n const splitAt = breakAt > 0 ? breakAt : width;\n lines.push(remaining.slice(0, splitAt));\n remaining = remaining.slice(splitAt).trimStart();\n }\n lines.push(remaining);\n return lines;\n }\n\n private padLine(text: string, width: number): string {\n const visibleLength = stripAnsi(text).length;\n if (visibleLength >= width) {\n return stripAnsi(text).slice(0, width);\n }\n return text + ' '.repeat(width - visibleLength);\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\n\nfunction getActivityToolName(line: string): string | null {\n if (line.startsWith('find files ')) return 'find files';\n const [toolName] = line.split(' ');\n return toolName || null;\n}\n\nfunction getDecisionText(decision: GoalJudgeResult['decision']): string {\n if (decision === 'done') return chalk.hex('#16c858').bold('done');\n if (decision === 'paused') return chalk.hex(PAUSED_COLOR).bold('paused');\n if (decision === 'waiting') return chalk.hex(WAITING_COLOR).bold('waiting');\n return chalk.hex(JUDGE_COLOR).bold('continue');\n}\n","import type { Component } from '@earendil-works/pi-tui';\n\nimport type { TUIState } from './state.js';\n\nconst MAX_CHILDREN = 5000;\nconst KEEP_CHILDREN = 3000;\n\nexport function pruneChatContainer(state: TUIState): void {\n const children = state.chatContainer.children as Component[];\n if (children.length <= MAX_CHILDREN) {\n return;\n }\n\n const removeCount = children.length - KEEP_CHILDREN;\n const removed = new Set(children.slice(0, removeCount));\n\n children.splice(0, removeCount);\n state.chatContainer.invalidate();\n\n state.allToolComponents = state.allToolComponents.filter(\n component => !removed.has(component as unknown as Component),\n );\n state.allSlashCommandComponents = state.allSlashCommandComponents.filter(component => !removed.has(component));\n state.allSystemReminderComponents = state.allSystemReminderComponents.filter(component => !removed.has(component));\n state.allShellComponents = state.allShellComponents.filter(\n component => !removed.has(component as unknown as Component),\n );\n for (const [id, pending] of state.pendingSignalMessageComponentsById) {\n if (removed.has(pending.component as unknown as Component)) {\n state.pendingSignalMessageComponentsById.delete(id);\n }\n }\n}\n","/**\n * Event handlers for agent lifecycle events:\n * agent_start, agent_end (normal / aborted / error).\n */\nimport type { GoalEvaluationPayload } from '@mastra/core/stream';\n\nimport { getCurrentGitBranchAsync } from '../../utils/project.js';\nimport { insertChatComponentWithBoundarySpacing } from '../chat-boundary-reconciliation.js';\nimport { JudgeDisplayComponent } from '../components/judge-display.js';\nimport { GradientAnimator } from '../components/obi-loader.js';\nimport { showError } from '../display.js';\nimport { pruneChatContainer } from '../prune-chat.js';\nimport { clearPendingUserMessages, removePendingUserMessage } from '../render-messages.js';\n\nimport type { EventHandlerContext } from './types.js';\n\nexport function handleAgentStart(ctx: EventHandlerContext): void {\n const { state } = ctx;\n state.goalManager.startActiveTimer();\n\n // Refresh git branch async to avoid blocking the event loop\n getCurrentGitBranchAsync(state.projectInfo.rootPath).then(freshBranch => {\n if (freshBranch) {\n state.projectInfo.gitBranch = freshBranch;\n ctx.updateStatusLine();\n }\n });\n\n if (!state.gradientAnimator) {\n state.gradientAnimator = new GradientAnimator(() => {\n ctx.updateStatusLine();\n });\n }\n state.gradientAnimator.start();\n}\n\nexport function handleAgentEnd(ctx: EventHandlerContext): void {\n const { state } = ctx;\n // Stop the goal active-timer on normal completion too (not just abort/error),\n // otherwise the elapsed-time display keeps counting while idle between turns.\n state.goalManager.stopActiveTimer();\n if (state.gradientAnimator) {\n state.gradientAnimator.fadeOut();\n }\n\n // Refresh git branch async — tool calls during this turn may have switched branches\n getCurrentGitBranchAsync(state.projectInfo.rootPath).then(freshBranch => {\n if (freshBranch) {\n state.projectInfo.gitBranch = freshBranch;\n ctx.updateStatusLine();\n }\n });\n\n if (state.streamingComponent) {\n state.streamingComponent = undefined;\n state.streamingMessage = undefined;\n }\n state.followUpComponents = [];\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n pruneChatContainer(state);\n ctx.updateStatusLine();\n state.ui.requestRender();\n\n ctx.notify('agent_done');\n\n drainQueuedAction(ctx);\n}\n\nfunction drainQueuedAction(ctx: EventHandlerContext): boolean {\n const { state } = ctx;\n\n // Drain queued follow-up actions once all harness-level follow-ups are done.\n // Each queued action that starts a new agent operation will eventually trigger\n // handleAgentEnd again, which drains the next FIFO item.\n if (state.harness.getFollowUpCount() > 0) {\n return true;\n }\n\n // User-queued actions preempt the goal loop — if the user typed something\n // while the agent was running, process that first.\n const nextAction = state.pendingQueuedActions.shift();\n ctx.updateStatusLine();\n if (!nextAction) {\n return false;\n }\n\n if (nextAction === 'message') {\n const nextMessage = state.pendingFollowUpMessages.shift();\n if (!nextMessage) {\n return true;\n }\n\n ctx.addUserMessage({\n id: `user-${Date.now()}`,\n role: 'user',\n content: [\n { type: 'text', text: nextMessage.content },\n ...(nextMessage.images?.map(img => ({\n type: 'image' as const,\n data: img.data,\n mimeType: img.mimeType,\n })) ?? []),\n ],\n createdAt: new Date(),\n });\n // Track the text so the subscription echo is suppressed in addUserMessage.\n const key = nextMessage.content.trim();\n const counts = (state.firedQueuedMessageTexts ??= new Map<string, number>());\n counts.set(key, (counts.get(key) ?? 0) + 1);\n state.ui.requestRender();\n ctx.fireMessage(nextMessage.content, nextMessage.images);\n return true;\n }\n\n const nextCommand = state.pendingSlashCommands.shift();\n const pendingMessageId = state.pendingSlashCommandMessageIds.shift();\n if (!nextCommand) {\n if (pendingMessageId) {\n removePendingUserMessage(state, pendingMessageId);\n }\n return true;\n }\n\n if (pendingMessageId) {\n removePendingUserMessage(state, pendingMessageId);\n }\n ctx.handleSlashCommand(nextCommand).catch(error => {\n ctx.showError(error instanceof Error ? error.message : 'Queued slash command failed');\n });\n return true;\n}\n\nexport function handleAgentAborted(ctx: EventHandlerContext): void {\n const { state } = ctx;\n state.goalManager.stopActiveTimer();\n if (state.gradientAnimator) {\n state.gradientAnimator.fadeOut();\n }\n\n // Update streaming message to show it was interrupted\n if (state.streamingComponent && state.streamingMessage) {\n state.streamingMessage.stopReason = 'aborted';\n state.streamingMessage.errorMessage = 'Interrupted';\n state.streamingComponent.updateContent(state.streamingMessage);\n state.streamingComponent = undefined;\n state.streamingMessage = undefined;\n } else if (state.userInitiatedAbort) {\n // Show standalone \"Interrupted\" if user pressed Ctrl+C but no streaming component\n showError(state, 'Interrupted');\n }\n state.userInitiatedAbort = false;\n if (state.activeGoalJudge) {\n removeJudgeComponent(state, state.activeGoalJudge.component);\n state.activeGoalJudge = undefined;\n }\n\n state.followUpComponents = [];\n state.pendingFollowUpMessages = [];\n state.pendingQueuedActions = [];\n state.pendingSlashCommands = [];\n state.pendingSlashCommandMessageIds = [];\n clearPendingUserMessages(state);\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n pruneChatContainer(state);\n ctx.updateStatusLine();\n state.ui.requestRender();\n}\n\nexport function handleAgentError(ctx: EventHandlerContext): void {\n const { state } = ctx;\n state.goalManager.stopActiveTimer();\n if (state.gradientAnimator) {\n state.gradientAnimator.fadeOut();\n }\n\n if (state.streamingComponent) {\n state.streamingComponent = undefined;\n state.streamingMessage = undefined;\n }\n if (state.activeGoalJudge) {\n removeJudgeComponent(state, state.activeGoalJudge.component);\n state.activeGoalJudge = undefined;\n }\n\n state.followUpComponents = [];\n state.pendingFollowUpMessages = [];\n state.pendingQueuedActions = [];\n state.pendingSlashCommands = [];\n state.pendingSlashCommandMessageIds = [];\n clearPendingUserMessages(state);\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n pruneChatContainer(state);\n ctx.updateStatusLine();\n state.ui.requestRender();\n}\n\n// =============================================================================\n// Goal Evaluation\n// =============================================================================\n\n/** Remove the judge display component from the chat container if present. */\nfunction removeJudgeComponent(state: EventHandlerContext['state'], component: JudgeDisplayComponent): void {\n // Use the container's removal API so parent/layout bookkeeping stays\n // consistent, rather than splicing `children` directly.\n if (state.chatContainer.children.includes(component)) {\n state.chatContainer.removeChild(component);\n }\n}\n\n/**\n * Render an in-loop goal evaluation surfaced by the core goal step as a `goal`\n * stream chunk (bridged to a `goal_evaluation` harness event). The core loop\n * owns continuation — this handler only mirrors the judge's decision into the\n * UI, syncs the adapter's progress, and runs the plan-mode auto-switch when a\n * plan-started goal completes.\n */\nexport function handleGoalEvaluation(ctx: EventHandlerContext, payload: GoalEvaluationPayload): void {\n const { state } = ctx;\n\n // Reuse the existing judge component for this turn, or create one inline so\n // the judge's progress appears alongside the agent's response.\n let activeGoalJudge = state.activeGoalJudge;\n if (!activeGoalJudge) {\n const goal = state.goalManager.getGoal();\n const component = new JudgeDisplayComponent(null, payload.iteration, payload.maxRuns);\n activeGoalJudge = {\n modelId: goal?.judgeModelId ?? '',\n abortController: new AbortController(),\n component,\n };\n state.activeGoalJudge = activeGoalJudge;\n insertChatComponentWithBoundarySpacing(state.chatContainer, component);\n }\n\n activeGoalJudge.component.setEvaluation(payload);\n\n // Mirror the loop's progress into the synchronous adapter view so the status\n // line and modal reflect the latest run count and lifecycle status.\n state.goalManager.applyEvaluation({ runsUsed: payload.iteration, status: payload.status });\n\n ctx.updateStatusLine();\n state.ui.requestRender();\n\n if (payload.status !== 'active') {\n // The goal reached a terminal/parked state this turn. Drop the live judge\n // reference so the next turn starts a fresh display.\n state.activeGoalJudge = undefined;\n }\n\n if (payload.status === 'done') {\n const goal = state.goalManager.getGoal();\n if (goal && goal.id === state.planStartedGoalId) {\n const goalId = state.planStartedGoalId;\n state.planStartedGoalId = undefined;\n state.harness.switchMode({ modeId: 'plan' }).catch(error => {\n ctx.showError(`Failed to switch to Plan mode: ${error instanceof Error ? error.message : String(error)}`);\n state.planStartedGoalId = goalId;\n });\n }\n }\n}\n","/**\n * Event handlers for message streaming events:\n * message_start, message_update, message_end.\n *\n * Also includes pure helper functions for content partitioning.\n */\nimport type { HarnessMessage, HarnessMessageContent } from '@mastra/core/harness';\nimport { TASKS_STATE_ID } from '@mastra/core/tools';\n\nimport {\n insertChatComponentWithBoundarySpacing,\n reconcileChatBoundarySpacers,\n} from '../chat-boundary-reconciliation.js';\nimport { AssistantMessageComponent } from '../components/assistant-message.js';\nimport { NotificationSummaryComponent } from '../components/notification-summary.js';\nimport { NotificationComponent } from '../components/notification.js';\nimport { ReactiveSignalComponent } from '../components/reactive-signal.js';\nimport { StateSignalComponent } from '../components/state-signal.js';\nimport { SystemReminderComponent } from '../components/system-reminder.js';\nimport { TemporalGapComponent } from '../components/temporal-gap.js';\nimport { ToolExecutionComponentEnhanced } from '../components/tool-execution-enhanced.js';\nimport { UserMessageComponent } from '../components/user-message.js';\nimport { addChildBeforeMessageOrFollowUps } from '../render-messages.js';\nimport { getMarkdownTheme } from '../theme.js';\n\nimport type { EventHandlerContext } from './types.js';\n\nfunction getCurrentModeColor(ctx: EventHandlerContext): string | undefined {\n const color = ctx.state.harness.getCurrentMode?.()?.metadata?.color;\n return typeof color === 'string' ? color : undefined;\n}\n\n/**\n * Get content parts after the last tool_call/tool_result in the message.\n * These are the parts that should be rendered in the current streaming component.\n */\nfunction getTrailingContentParts(message: HarnessMessage): HarnessMessage['content'] {\n let lastToolIndex = -1;\n for (let i = message.content.length - 1; i >= 0; i--) {\n const c = message.content[i]!;\n if (isInlineBoundary(c)) {\n lastToolIndex = i;\n break;\n }\n }\n if (lastToolIndex === -1) {\n // No tool calls — return all content\n return message.content;\n }\n // Return everything after the last tool-related part\n return message.content.slice(lastToolIndex + 1);\n}\n\n/**\n * Get content parts between the last processed tool call and this one (text/thinking only).\n */\ntype StreamedSystemReminderPart = {\n type: 'system_reminder';\n message?: string;\n reminderType?: string;\n path?: string;\n precedesMessageId?: string;\n gapText?: string;\n goalMaxTurns?: number;\n judgeModelId?: string;\n};\n\ntype StreamedStateSignalPart = {\n type: 'state_signal';\n stateId: string;\n mode: 'snapshot' | 'delta';\n cacheKey?: string;\n version?: number;\n message?: string;\n};\n\ntype StreamedReactiveSignalPart = {\n type: 'reactive_signal';\n tagName: string;\n message?: string;\n};\n\n// These are internal control-plane signals handled by GithubSignals. The user-visible\n// result is rendered by github-sync-status, so showing these would duplicate the UI.\nconst HIDDEN_REACTIVE_SIGNAL_TAGS = new Set(['github-subscribe-pr', 'github-unsubscribe-pr']);\nconst GOAL_STATE_SIGNAL_ID = 'goal';\n\nfunction shouldRenderReactiveSignal(tagName: string): boolean {\n return !HIDDEN_REACTIVE_SIGNAL_TAGS.has(tagName);\n}\n\ntype StreamedNotificationSummaryPart = {\n type: 'notification_summary';\n message: string;\n pending: number;\n bySource: Record<string, number>;\n};\n\ntype StreamedNotificationPart = {\n type: 'notification';\n message: string;\n source?: string;\n kind?: string;\n priority?: string;\n status?: string;\n};\n\nfunction isInlineBoundary(part: HarnessMessageContent): boolean {\n return (\n part.type === 'tool_call' ||\n part.type === 'tool_result' ||\n (part as { type?: string }).type === 'system_reminder' ||\n (part as { type?: string }).type === 'state_signal' ||\n (part as { type?: string }).type === 'reactive_signal' ||\n (part as { type?: string }).type === 'notification_summary' ||\n (part as { type?: string }).type === 'notification'\n );\n}\n\nfunction isSystemReminderPart(part: HarnessMessageContent): boolean {\n return (part as { type?: string }).type === 'system_reminder';\n}\n\nfunction isStateSignalPart(part: HarnessMessageContent): boolean {\n return (part as { type?: string }).type === 'state_signal';\n}\n\nfunction isReactiveSignalPart(part: HarnessMessageContent): boolean {\n return (part as { type?: string }).type === 'reactive_signal';\n}\n\nfunction isNotificationSummaryPart(part: HarnessMessageContent): boolean {\n return (part as { type?: string }).type === 'notification_summary';\n}\n\nfunction isNotificationPart(part: HarnessMessageContent): boolean {\n return (part as { type?: string }).type === 'notification';\n}\n\nfunction toStreamedSystemReminderPart(part: HarnessMessageContent): StreamedSystemReminderPart | undefined {\n if (!isSystemReminderPart(part)) return undefined;\n const reminder = part as unknown as Partial<StreamedSystemReminderPart>;\n\n return {\n type: 'system_reminder',\n message: typeof reminder.message === 'string' ? reminder.message : undefined,\n reminderType: reminder.reminderType,\n path: reminder.path,\n precedesMessageId: typeof reminder.precedesMessageId === 'string' ? reminder.precedesMessageId : undefined,\n gapText: typeof reminder.gapText === 'string' ? reminder.gapText : undefined,\n goalMaxTurns: typeof reminder.goalMaxTurns === 'number' ? reminder.goalMaxTurns : undefined,\n judgeModelId: typeof reminder.judgeModelId === 'string' ? reminder.judgeModelId : undefined,\n };\n}\n\nfunction toStreamedStateSignalPart(part: HarnessMessageContent): StreamedStateSignalPart | undefined {\n if (!isStateSignalPart(part)) return undefined;\n const stateSignal = part as unknown as Partial<StreamedStateSignalPart>;\n if (typeof stateSignal.stateId !== 'string') return undefined;\n\n return {\n type: 'state_signal',\n stateId: stateSignal.stateId,\n mode: stateSignal.mode === 'delta' ? 'delta' : 'snapshot',\n cacheKey:\n typeof (stateSignal as Record<string, unknown>).cacheKey === 'string'\n ? ((stateSignal as Record<string, unknown>).cacheKey as string)\n : undefined,\n version: typeof stateSignal.version === 'number' ? stateSignal.version : undefined,\n message: typeof stateSignal.message === 'string' ? stateSignal.message : undefined,\n };\n}\n\nfunction toStreamedReactiveSignalPart(part: HarnessMessageContent): StreamedReactiveSignalPart | undefined {\n if (!isReactiveSignalPart(part)) return undefined;\n const reactiveSignal = part as unknown as Partial<StreamedReactiveSignalPart>;\n if (typeof reactiveSignal.tagName !== 'string') return undefined;\n\n return {\n type: 'reactive_signal',\n tagName: reactiveSignal.tagName,\n message: typeof reactiveSignal.message === 'string' ? reactiveSignal.message : undefined,\n };\n}\n\nfunction toStreamedNotificationSummaryPart(part: HarnessMessageContent): StreamedNotificationSummaryPart | undefined {\n if (!isNotificationSummaryPart(part)) return undefined;\n const summary = part as unknown as Partial<StreamedNotificationSummaryPart>;\n if (typeof summary.message !== 'string' || typeof summary.pending !== 'number') return undefined;\n\n return {\n type: 'notification_summary',\n message: summary.message,\n pending: summary.pending,\n bySource: summary.bySource && typeof summary.bySource === 'object' ? summary.bySource : {},\n };\n}\n\nfunction toStreamedNotificationPart(part: HarnessMessageContent): StreamedNotificationPart | undefined {\n if (!isNotificationPart(part)) return undefined;\n const notification = part as unknown as Partial<StreamedNotificationPart>;\n if (typeof notification.message !== 'string') return undefined;\n\n return {\n type: 'notification',\n message: notification.message,\n source: typeof notification.source === 'string' ? notification.source : undefined,\n kind: typeof notification.kind === 'string' ? notification.kind : undefined,\n priority: typeof notification.priority === 'string' ? notification.priority : undefined,\n status: typeof notification.status === 'string' ? notification.status : undefined,\n };\n}\n\nfunction createReminderComponent(reminder: StreamedSystemReminderPart): SystemReminderComponent | TemporalGapComponent {\n if (reminder.reminderType === 'temporal-gap') {\n return new TemporalGapComponent({\n message: reminder.message,\n gapText: reminder.gapText,\n });\n }\n\n return new SystemReminderComponent({\n message: reminder.message,\n reminderType: reminder.reminderType,\n path: reminder.path,\n goalMaxTurns: reminder.goalMaxTurns,\n judgeModelId: reminder.judgeModelId,\n });\n}\n\nfunction addInlineStateSignal(ctx: EventHandlerContext, stateSignal: StreamedStateSignalPart): void {\n const { state } = ctx;\n const component = new StateSignalComponent({\n stateId: stateSignal.stateId,\n mode: stateSignal.mode,\n version: stateSignal.version,\n message: stateSignal.message,\n });\n\n if (state.streamingComponent) {\n const idx = state.chatContainer.children.indexOf(state.streamingComponent as never);\n if (idx >= 0) {\n insertChatComponentWithBoundarySpacing(state.chatContainer, component, idx);\n return;\n }\n }\n\n ctx.addChildBeforeFollowUps(component);\n}\n\nfunction addInlineReactiveSignal(ctx: EventHandlerContext, reactiveSignal: StreamedReactiveSignalPart): void {\n const component = new ReactiveSignalComponent({\n tagName: reactiveSignal.tagName,\n message: reactiveSignal.message,\n });\n ctx.addChildBeforeFollowUps(component);\n}\n\nfunction addInlineNotificationSummary(ctx: EventHandlerContext, summary: StreamedNotificationSummaryPart): void {\n ctx.addChildBeforeFollowUps(\n new NotificationSummaryComponent({\n message: summary.message,\n pending: summary.pending,\n bySource: summary.bySource,\n }),\n );\n}\n\nfunction addInlineNotification(ctx: EventHandlerContext, notification: StreamedNotificationPart): void {\n ctx.addChildBeforeFollowUps(\n new NotificationComponent({\n message: notification.message,\n source: notification.source,\n kind: notification.kind,\n priority: notification.priority,\n status: notification.status,\n }),\n );\n}\n\nfunction addInlineReminder(ctx: EventHandlerContext, reminder: StreamedSystemReminderPart): void {\n const { state } = ctx;\n const component = createReminderComponent(reminder);\n component.setExpanded(state.toolOutputExpanded);\n state.allSystemReminderComponents.push(component);\n\n if (reminder.precedesMessageId && !state.messageComponentsById.has(reminder.precedesMessageId)) {\n const latestUserComponent = [...state.chatContainer.children]\n .reverse()\n .find(child => child instanceof UserMessageComponent);\n\n if (latestUserComponent) {\n const idx = state.chatContainer.children.indexOf(latestUserComponent as never);\n if (idx >= 0) {\n insertChatComponentWithBoundarySpacing(state.chatContainer, component, idx);\n return;\n }\n }\n }\n\n if (state.streamingComponent && !reminder.precedesMessageId) {\n const idx = state.chatContainer.children.indexOf(state.streamingComponent as never);\n if (idx >= 0) {\n insertChatComponentWithBoundarySpacing(state.chatContainer, component, idx);\n return;\n }\n }\n\n addChildBeforeMessageOrFollowUps(state, component, reminder.precedesMessageId);\n}\n\nfunction getContentBeforeToolCall(\n message: HarnessMessage,\n toolCallId: string,\n seenToolCallIds: Set<string>,\n): HarnessMessage['content'] {\n const idx = message.content.findIndex(c => c.type === 'tool_call' && c.id === toolCallId);\n if (idx === -1) return message.content;\n // Find the start: after the last tool_call/tool_result that we've already seen\n let startIdx = 0;\n for (let i = idx - 1; i >= 0; i--) {\n const c = message.content[i]!;\n if (\n (c.type === 'tool_call' && 'id' in c && seenToolCallIds.has(c.id)) ||\n (c.type === 'tool_result' && 'id' in c && seenToolCallIds.has(c.id))\n ) {\n startIdx = i + 1;\n break;\n }\n }\n\n return message.content.slice(startIdx, idx).filter(c => c.type === 'text' || c.type === 'thinking');\n}\n\nexport function handleMessageStart(ctx: EventHandlerContext, message: HarnessMessage): void {\n const { state } = ctx;\n if (message.role === 'user') {\n ctx.addUserMessage(message);\n } else if (message.role === 'assistant') {\n // Clear tool component references when starting a new assistant message\n state.lastAskUserComponent = undefined;\n state.lastSubmitPlanComponent = undefined;\n if (!state.streamingComponent) {\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n state.streamingMessage = message;\n const trailingParts = getTrailingContentParts(message);\n state.streamingComponent.updateContent({\n ...message,\n content: trailingParts,\n });\n reconcileChatBoundarySpacers(state.chatContainer);\n }\n state.ui.requestRender();\n }\n}\n\nexport function handleMessageUpdate(ctx: EventHandlerContext, message: HarnessMessage): void {\n const { state } = ctx;\n if (message.role !== 'assistant') return;\n\n const systemReminderParts = message.content\n .map(toStreamedSystemReminderPart)\n .filter((part): part is StreamedSystemReminderPart => part !== undefined);\n const stateSignalParts = message.content\n .map(toStreamedStateSignalPart)\n .filter((part): part is StreamedStateSignalPart => part !== undefined);\n const reactiveSignalParts = message.content\n .map(toStreamedReactiveSignalPart)\n .filter((part): part is StreamedReactiveSignalPart => part !== undefined);\n const notificationSummaryParts = message.content\n .map(toStreamedNotificationSummaryPart)\n .filter((part): part is StreamedNotificationSummaryPart => part !== undefined);\n const notificationParts = message.content\n .map(toStreamedNotificationPart)\n .filter((part): part is StreamedNotificationPart => part !== undefined);\n\n for (const stateSignal of stateSignalParts) {\n // The `tasks` state signal is already rendered by the pinned task list UI\n // (driven by the `task_updated` display event), so don't also echo its raw\n // <current-task-list> snapshot into the transcript. The `goal` state signal\n // is surfaced by the goal/judge UI (driven by the `goal` chunk), so likewise\n // don't echo its raw <current-objective> snapshot. Other state-signal\n // categories still render inline.\n if (stateSignal.stateId === TASKS_STATE_ID || stateSignal.stateId === GOAL_STATE_SIGNAL_ID) continue;\n const stateSignalKey = `state:${message.id}:${stateSignal.cacheKey ?? ''}:${stateSignal.stateId}:${stateSignal.mode}:${stateSignal.version ?? ''}:${stateSignal.message ?? ''}`;\n if (!state.currentRunSystemReminderKeys.has(stateSignalKey)) {\n state.currentRunSystemReminderKeys.add(stateSignalKey);\n addInlineStateSignal(ctx, stateSignal);\n }\n }\n\n for (const reminder of systemReminderParts) {\n if (reminder.reminderType === 'goal-judge') continue;\n\n const reminderKey = `${message.id}:${reminder.reminderType ?? ''}:${reminder.path ?? ''}:${reminder.message}`;\n if (!state.currentRunSystemReminderKeys.has(reminderKey)) {\n state.currentRunSystemReminderKeys.add(reminderKey);\n addInlineReminder(ctx, reminder);\n }\n }\n\n for (const reactiveSignal of reactiveSignalParts) {\n if (!shouldRenderReactiveSignal(reactiveSignal.tagName)) continue;\n const reactiveSignalKey = `${message.id}:${reactiveSignal.tagName}:${reactiveSignal.message ?? ''}`;\n if (!state.currentRunSystemReminderKeys.has(reactiveSignalKey)) {\n state.currentRunSystemReminderKeys.add(reactiveSignalKey);\n addInlineReactiveSignal(ctx, reactiveSignal);\n }\n }\n\n for (const summary of notificationSummaryParts) {\n const summaryKey = `${message.id}:notification-summary:${summary.pending}:${summary.message}`;\n if (!state.currentRunSystemReminderKeys.has(summaryKey)) {\n state.currentRunSystemReminderKeys.add(summaryKey);\n addInlineNotificationSummary(ctx, summary);\n }\n }\n\n for (const notification of notificationParts) {\n const notificationKey = `${message.id}:notification:${notification.source ?? ''}:${notification.kind ?? ''}:${notification.message}`;\n if (!state.currentRunSystemReminderKeys.has(notificationKey)) {\n state.currentRunSystemReminderKeys.add(notificationKey);\n addInlineNotification(ctx, notification);\n }\n }\n\n if (!state.streamingComponent) {\n const trailingParts = getTrailingContentParts(message);\n const hasToolCalls = message.content.some(content => content.type === 'tool_call');\n if (trailingParts.length === 0 && !hasToolCalls) {\n if (\n systemReminderParts.length > 0 ||\n stateSignalParts.length > 0 ||\n reactiveSignalParts.length > 0 ||\n notificationSummaryParts.length > 0 ||\n notificationParts.length > 0\n ) {\n state.ui.requestRender();\n }\n return;\n }\n\n state.streamingComponent = new AssistantMessageComponent(undefined, state.hideThinkingBlock, getMarkdownTheme());\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n }\n\n state.streamingMessage = message;\n // Check for new tool calls\n for (const content of message.content) {\n if (content.type === 'tool_call') {\n // For subagent calls, freeze the current streaming component\n // with content before the tool call, then create a new one.\n // SubagentExecutionComponent handles the visual rendering.\n // Check subagentToolCallIds separately since handleToolStart\n // may have already added the ID to seenToolCallIds.\n if (content.name === 'subagent' && !state.subagentToolCallIds.has(content.id)) {\n state.seenToolCallIds.add(content.id);\n state.subagentToolCallIds.add(content.id);\n // Freeze current component with pre-subagent content\n const preContent = getContentBeforeToolCall(message, content.id, state.seenToolCallIds);\n state.streamingComponent.updateContent({\n ...message,\n content: preContent,\n });\n state.streamingComponent = new AssistantMessageComponent(\n undefined,\n state.hideThinkingBlock,\n getMarkdownTheme(),\n );\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n continue;\n }\n\n if (!state.seenToolCallIds.has(content.id)) {\n state.seenToolCallIds.add(content.id);\n\n const component = new ToolExecutionComponentEnhanced(\n content.name,\n content.args,\n { showImages: false, collapsedByDefault: !state.toolOutputExpanded },\n state.ui,\n );\n component.setExpanded(state.toolOutputExpanded);\n if (state.quietMode) {\n component.setCompactToolModeColor(getCurrentModeColor(ctx));\n component.setQuietModeDisplay('quiet');\n component.setQuietPreviewLineLimit(state.quietModeMaxToolPreviewLines);\n }\n ctx.addChildBeforeFollowUps(component);\n state.pendingTools.set(content.id, component);\n state.allToolComponents.push(component);\n reconcileChatBoundarySpacers(state.chatContainer);\n\n state.streamingComponent = new AssistantMessageComponent(\n undefined,\n state.hideThinkingBlock,\n getMarkdownTheme(),\n );\n ctx.addChildBeforeFollowUps(state.streamingComponent);\n } else {\n const component = state.pendingTools.get(content.id);\n if (component) {\n component.updateArgs(content.args);\n reconcileChatBoundarySpacers(state.chatContainer);\n }\n }\n }\n }\n\n const trailingParts = getTrailingContentParts(message);\n // Avoid replacing visible assistant text with an empty trailing segment\n // (commonly happens immediately after tool_result-only updates).\n if (trailingParts.length > 0) {\n state.streamingComponent.updateContent({\n ...message,\n content: trailingParts,\n });\n reconcileChatBoundarySpacers(state.chatContainer);\n }\n\n state.ui.requestRender();\n}\n\nexport function handleMessageEnd(ctx: EventHandlerContext, message: HarnessMessage): void {\n const { state } = ctx;\n if (message.role === 'user') return;\n\n if (state.streamingComponent && message.role === 'assistant') {\n state.streamingMessage = message;\n const trailingParts = getTrailingContentParts(message);\n // If the final assistant chunk has no trailing text/thinking after tools,\n // keep the last rendered content instead of blanking the component.\n if (trailingParts.length > 0 || message.stopReason === 'aborted' || message.stopReason === 'error') {\n state.streamingComponent.updateContent({\n ...message,\n content: trailingParts,\n });\n reconcileChatBoundarySpacers(state.chatContainer);\n }\n\n if (message.stopReason === 'aborted' || message.stopReason === 'error') {\n const errorMessage = message.errorMessage || 'Operation aborted';\n for (const [, component] of state.pendingTools) {\n component.updateResult(\n {\n content: [{ type: 'text', text: errorMessage }],\n isError: true,\n },\n false,\n );\n }\n reconcileChatBoundarySpacers(state.chatContainer);\n state.pendingTools.clear();\n state.pendingTaskToolIds?.clear();\n }\n\n state.streamingComponent = undefined;\n state.streamingMessage = undefined;\n state.seenToolCallIds.clear();\n state.subagentToolCallIds.clear();\n state.currentRunSystemReminderKeys.clear();\n }\n state.ui.requestRender();\n}\n","/**\n * Event handlers for Observational Memory (OM) events:\n * om_status, om_observation_start/end, om_reflection_start/end,\n * om_buffering_start/end/failed, om_activation, and om_*_failed.\n *\n * All omProgress state updates are handled by the Harness display state.\n * These handlers focus on UI component creation/removal.\n */\nimport type { Component } from '@earendil-works/pi-tui';\n\nimport {\n insertChatComponentWithBoundarySpacing,\n reconcileChatBoundarySpacers,\n} from '../chat-boundary-reconciliation.js';\nimport { isChatBoundarySpacer } from '../components/chat-boundary-spacer.js';\nimport { OMMarkerComponent } from '../components/om-marker.js';\nimport type { OMMarkerData } from '../components/om-marker.js';\nimport { OMOutputComponent } from '../components/om-output.js';\n\nimport type { EventHandlerContext } from './types.js';\n\n/**\n * Insert a child component *before* the current streaming component so it\n * doesn't get pushed down as text streams in. Falls back to a normal\n * append when nothing is streaming.\n */\nfunction getInsertIndexBeforeStreaming(ctx: EventHandlerContext): number {\n const { state } = ctx;\n if (state.streamingComponent) {\n const idx = state.chatContainer.children.indexOf(state.streamingComponent);\n if (idx >= 0) return idx;\n }\n return state.chatContainer.children.length;\n}\n\nfunction addChildBeforeStreaming(ctx: EventHandlerContext, child: Component): void {\n const insertIndex = getInsertIndexBeforeStreaming(ctx);\n insertChatComponentWithBoundarySpacing(ctx.state.chatContainer, child, insertIndex);\n}\n\nfunction isImmediatelyBeforeStreamingInsert(ctx: EventHandlerContext, child: Component): boolean {\n const insertIndex = getInsertIndexBeforeStreaming(ctx);\n // Walk backward from the insert point, skipping boundary spacers,\n // to find the actual preceding component.\n for (let i = insertIndex - 1; i >= 0; i--) {\n if (!isChatBoundarySpacer(ctx.state.chatContainer.children[i]!)) {\n return ctx.state.chatContainer.children[i] === child;\n }\n }\n return false;\n}\n\nfunction removeChatChild(ctx: EventHandlerContext, child: Component | undefined): void {\n if (!child) return;\n const idx = ctx.state.chatContainer.children.indexOf(child);\n if (idx >= 0) {\n ctx.state.chatContainer.children.splice(idx, 1);\n reconcileChatBoundarySpacers(ctx.state.chatContainer);\n }\n}\n\nexport function handleOMObservationStart(ctx: EventHandlerContext, cycleId: string, tokensToObserve: number): void {\n const { state } = ctx;\n // Show in-progress marker in chat\n state.activeOMMarker = new OMMarkerComponent({\n type: 'om_observation_start',\n tokensToObserve,\n operationType: 'observation',\n });\n addChildBeforeStreaming(ctx, state.activeOMMarker);\n state.ui.requestRender();\n}\n\nexport function handleOMObservationEnd(\n ctx: EventHandlerContext,\n _cycleId: string,\n durationMs: number,\n tokensObserved: number,\n observationTokens: number,\n observations?: string,\n currentTask?: string,\n suggestedResponse?: string,\n): void {\n const { state } = ctx;\n // Remove in-progress marker — the output box replaces it\n if (state.activeOMMarker) {\n const idx = state.chatContainer.children.indexOf(state.activeOMMarker);\n if (idx >= 0) {\n state.chatContainer.children.splice(idx, 1);\n state.chatContainer.invalidate();\n }\n state.activeOMMarker = undefined;\n }\n // Show observation output in a bordered box (includes marker info in footer)\n const outputComponent = new OMOutputComponent({\n type: 'observation',\n observations: observations ?? '',\n currentTask,\n suggestedResponse,\n durationMs,\n tokensObserved,\n observationTokens,\n });\n addChildBeforeStreaming(ctx, outputComponent);\n state.ui.requestRender();\n}\n\nexport function handleOMReflectionStart(ctx: EventHandlerContext, cycleId: string, tokensToReflect: number): void {\n const { state } = ctx;\n // Show in-progress marker in chat\n state.activeOMMarker = new OMMarkerComponent({\n type: 'om_observation_start',\n tokensToObserve: tokensToReflect,\n operationType: 'reflection',\n });\n addChildBeforeStreaming(ctx, state.activeOMMarker);\n state.ui.requestRender();\n}\n\nexport function handleOMReflectionEnd(\n ctx: EventHandlerContext,\n _cycleId: string,\n durationMs: number,\n compressedTokens: number,\n observations?: string,\n): void {\n const { state } = ctx;\n // Read pre-compression tokens from display state (set during om_reflection_start)\n // Note: Harness has already updated observationTokens to compressedTokens,\n // so we use tokensToReflect from the start event via the cycleId context.\n // For display purposes, we read the event parameter directly.\n const ds = state.harness.getDisplayState();\n // Remove in-progress marker — the output box replaces it\n if (state.activeOMMarker) {\n const idx = state.chatContainer.children.indexOf(state.activeOMMarker);\n if (idx >= 0) {\n state.chatContainer.children.splice(idx, 1);\n state.chatContainer.invalidate();\n }\n state.activeOMMarker = undefined;\n }\n // Show reflection output in a bordered box (includes marker info in footer)\n const outputComponent = new OMOutputComponent({\n type: 'reflection',\n observations: observations ?? '',\n durationMs,\n compressedTokens,\n // preReflectionTokens captures observationTokens before compression started\n tokensObserved: ds.omProgress.preReflectionTokens,\n });\n addChildBeforeStreaming(ctx, outputComponent);\n state.ui.requestRender();\n}\n\nexport function handleOMFailed(\n ctx: EventHandlerContext,\n _cycleId: string,\n error: string,\n operation: 'observation' | 'reflection',\n): void {\n const { state } = ctx;\n // Update existing marker in-place, or create new one\n const failData: OMMarkerData = {\n type: 'om_observation_failed',\n error,\n operationType: operation,\n };\n if (state.activeOMMarker) {\n state.activeOMMarker.update(failData);\n state.activeOMMarker = undefined;\n } else {\n addChildBeforeStreaming(ctx, new OMMarkerComponent(failData));\n }\n state.ui.requestRender();\n}\n\nexport function handleOMBufferingStart(\n ctx: EventHandlerContext,\n operationType: 'observation' | 'reflection',\n tokensToBuffer: number,\n): void {\n const { state } = ctx;\n state.activeActivationMarker = undefined;\n state.activeActivationData = undefined;\n state.activeActivationProviderChangeMarker = undefined;\n if (state.quietMode) {\n removeChatChild(ctx, state.activeBufferingMarker);\n state.activeBufferingMarker = undefined;\n state.ui.requestRender();\n return;\n }\n state.activeBufferingMarker = new OMMarkerComponent({\n type: 'om_buffering_start',\n operationType,\n tokensToBuffer,\n });\n addChildBeforeStreaming(ctx, state.activeBufferingMarker);\n state.ui.requestRender();\n}\n\nexport function handleOMBufferingEnd(\n ctx: EventHandlerContext,\n operationType: 'observation' | 'reflection',\n tokensBuffered: number,\n bufferedTokens: number,\n observations?: string,\n): void {\n const { state } = ctx;\n if (state.quietMode) {\n removeChatChild(ctx, state.activeBufferingMarker);\n state.activeBufferingMarker = undefined;\n state.ui.requestRender();\n return;\n }\n if (state.activeBufferingMarker) {\n state.activeBufferingMarker.update({\n type: 'om_buffering_end',\n operationType,\n tokensBuffered,\n bufferedTokens,\n observations,\n });\n }\n state.activeBufferingMarker = undefined;\n state.ui.requestRender();\n}\n\nexport function handleOMBufferingFailed(\n ctx: EventHandlerContext,\n operationType: 'observation' | 'reflection',\n error: string,\n): void {\n const { state } = ctx;\n if (state.quietMode) {\n removeChatChild(ctx, state.activeBufferingMarker);\n state.activeBufferingMarker = undefined;\n state.ui.requestRender();\n return;\n }\n if (state.activeBufferingMarker) {\n state.activeBufferingMarker.update({\n type: 'om_buffering_failed',\n operationType,\n error,\n });\n }\n state.activeBufferingMarker = undefined;\n state.ui.requestRender();\n}\n\nexport function handleOMActivation(\n ctx: EventHandlerContext,\n operationType: 'observation' | 'reflection',\n tokensActivated: number,\n observationTokens: number,\n triggeredBy?: 'threshold' | 'ttl' | 'provider_change',\n activateAfterIdle?: number,\n ttlExpiredMs?: number,\n previousModel?: string,\n currentModel?: string,\n): void {\n const { state } = ctx;\n\n if (triggeredBy === 'provider_change' && previousModel && currentModel) {\n const providerChangeData: OMMarkerData = {\n type: 'om_activation_provider_change',\n previousModel,\n currentModel,\n };\n\n if (state.activeActivationProviderChangeMarker) {\n state.activeActivationProviderChangeMarker.update(providerChangeData);\n } else {\n state.activeActivationProviderChangeMarker = new OMMarkerComponent(providerChangeData);\n addChildBeforeStreaming(ctx, state.activeActivationProviderChangeMarker);\n }\n }\n\n const previousActivationData = state.activeActivationData;\n const canCombineActivation =\n previousActivationData?.type === 'om_activation' &&\n previousActivationData.operationType === operationType &&\n state.activeActivationMarker !== undefined &&\n isImmediatelyBeforeStreamingInsert(ctx, state.activeActivationMarker);\n\n const activationData: OMMarkerData = canCombineActivation\n ? {\n type: 'om_activation',\n operationType,\n tokensActivated: previousActivationData.tokensActivated + tokensActivated,\n observationTokens: previousActivationData.observationTokens + observationTokens,\n activationCount: (previousActivationData.activationCount ?? 1) + 1,\n activateAfterIdle: previousActivationData.activateAfterIdle ?? activateAfterIdle,\n }\n : {\n type: 'om_activation',\n operationType,\n tokensActivated,\n observationTokens,\n ...(triggeredBy === 'ttl' && activateAfterIdle !== undefined ? { activateAfterIdle } : {}),\n };\n\n if (canCombineActivation && state.activeActivationMarker) {\n state.activeActivationMarker.update(activationData);\n } else {\n state.activeActivationMarker = new OMMarkerComponent(activationData);\n addChildBeforeStreaming(ctx, state.activeActivationMarker);\n }\n\n state.activeActivationData = activationData;\n state.activeBufferingMarker = undefined;\n state.ui.requestRender();\n}\n\nexport function handleOMThreadTitleUpdated(ctx: EventHandlerContext, newTitle: string, oldTitle?: string): void {\n if (ctx.state.quietMode) return;\n const marker = new OMMarkerComponent({\n type: 'om_thread_title_updated',\n newTitle,\n oldTitle,\n });\n addChildBeforeStreaming(ctx, marker);\n ctx.state.ui.requestRender();\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { getAppDataDir } from './project.js';\n\nfunction slugify(str: string): string {\n const slug = str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n return slug || 'untitled';\n}\n\nexport async function savePlanToDisk(opts: {\n title: string;\n plan: string;\n resourceId: string;\n plansDir?: string;\n}): Promise<void> {\n const { title, plan, resourceId } = opts;\n const plansDir = opts.plansDir ?? process.env.MASTRA_PLANS_DIR ?? path.join(getAppDataDir(), 'plans');\n const dir = path.join(plansDir, resourceId);\n\n await fs.mkdir(dir, { recursive: true });\n\n const now = new Date();\n const timestamp = now.toISOString().replace(/:/g, '-');\n const slug = slugify(title);\n const filename = `${timestamp}-${slug}.md`;\n\n const content = `# ${title}\\n\\nApproved: ${now.toISOString()}\\n\\n${plan}\\n`;\n\n await fs.writeFile(path.join(dir, filename), content, 'utf-8');\n}\n","/**\n * Event handlers for interactive prompt events:\n * tool_suspended (ask_user / request_access / submit_plan).\n */\nimport type { AskUserSelectionMode } from '@mastra/core/tools';\nimport { savePlanToDisk } from '../../utils/plans.js';\nimport { AskQuestionDialogComponent } from '../components/ask-question-dialog.js';\nimport { AskQuestionInlineComponent } from '../components/ask-question-inline.js';\nimport { PlanApprovalInlineComponent } from '../components/plan-approval-inline.js';\nimport { showModalOverlay } from '../overlay.js';\nimport type { TUIState } from '../state.js';\nimport { theme } from '../theme.js';\n\nimport type { EventHandlerContext } from './types.js';\n\n/**\n * Process the next pending inline question from the queue.\n * Called when the current active question is resolved (submitted or cancelled).\n */\nfunction processNextInlineQuestion(state: TUIState): void {\n const next = state.pendingInlineQuestions.shift();\n if (next) {\n next();\n }\n}\n\n/**\n * Handle an ask_question event from the ask_user tool.\n * Shows a dialog overlay and resolves the tool's pending promise.\n *\n * If another inline question is already active, the new question is queued\n * and will be shown once the current one is answered.\n */\nexport async function handleAskQuestion(\n ctx: EventHandlerContext,\n toolCallId: string,\n question: string,\n options?: Array<{ label: string; description?: string }>,\n selectionMode?: AskUserSelectionMode,\n): Promise<void> {\n const { state } = ctx;\n\n return new Promise(resolve => {\n if (state.options.inlineQuestions) {\n // Look up the streaming component created for THIS tool call. Using the\n // per-toolCallId map (instead of the single lastAskUserComponent field)\n // keeps parallel ask_user suspensions bound to their own components so\n // each question renders distinctly (#13642).\n const askUserComponent = state.pendingAskUserComponents?.get(toolCallId) ?? state.lastAskUserComponent;\n state.pendingAskUserComponents?.delete(toolCallId);\n\n const activate = () => {\n try {\n let questionComponent: AskQuestionInlineComponent;\n\n if (askUserComponent) {\n // Activate the existing streaming component with interactive elements.\n // ask_user is the agent's free-text channel — opt into multiline so users\n // can paste logs / write paragraph-length replies.\n askUserComponent.activate({\n question,\n options,\n selectionMode,\n multiline: true,\n tui: state.ui,\n onSubmit: answer => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: answer });\n resolve();\n processNextInlineQuestion(state);\n },\n onSubmitMulti: answers => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: answers });\n resolve();\n processNextInlineQuestion(state);\n },\n onCancel: () => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: '(skipped)' });\n resolve();\n processNextInlineQuestion(state);\n },\n });\n questionComponent = askUserComponent;\n } else {\n // Fallback: create a new component if no streaming one exists.\n // Multiline opt-in matches the streaming branch above.\n questionComponent = new AskQuestionInlineComponent(\n {\n question,\n options,\n selectionMode,\n multiline: true,\n onSubmit: answer => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: answer });\n resolve();\n processNextInlineQuestion(state);\n },\n onSubmitMulti: answers => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: answers });\n resolve();\n processNextInlineQuestion(state);\n },\n onCancel: () => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: '(skipped)' });\n resolve();\n processNextInlineQuestion(state);\n },\n },\n state.ui,\n );\n state.chatContainer.addChild(questionComponent);\n }\n\n // Store as active question\n state.activeInlineQuestion = questionComponent;\n\n state.ui.requestRender();\n\n // Ensure the chat scrolls to show the question\n state.chatContainer.invalidate();\n\n // Focus the question component\n questionComponent.focused = true;\n } catch {\n // Don't let ask_user errors crash the process — skip the question\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: '(skipped)' });\n resolve();\n processNextInlineQuestion(state);\n }\n };\n\n // If another inline question is already active, queue this one\n if (state.activeInlineQuestion) {\n state.pendingInlineQuestions.push(activate);\n } else {\n activate();\n }\n } else {\n // Dialog mode: Show overlay. Multiline opt-in matches the inline branch.\n const dialog = new AskQuestionDialogComponent({\n question,\n options,\n selectionMode,\n multiline: true,\n tui: state.ui,\n onSubmit: answer => {\n state.ui.hideOverlay();\n state.harness.respondToToolSuspension({ toolCallId, resumeData: answer });\n resolve();\n },\n onSubmitMulti: answers => {\n state.ui.hideOverlay();\n state.harness.respondToToolSuspension({ toolCallId, resumeData: answers });\n resolve();\n },\n onCancel: () => {\n state.ui.hideOverlay();\n state.harness.respondToToolSuspension({ toolCallId, resumeData: '(skipped)' });\n resolve();\n },\n });\n showModalOverlay(state.ui, dialog, { widthPercent: 0.7 });\n dialog.focused = true;\n }\n\n ctx.notify('ask_question', question);\n });\n}\n\n/**\n * Handle a sandbox_access_request event from the request_access tool.\n * Shows an inline prompt for the user to approve or deny directory access.\n *\n * If another inline question is already active, the new prompt is queued\n * and will be shown once the current one is answered.\n */\nexport async function handleSandboxAccessRequest(\n ctx: EventHandlerContext,\n toolCallId: string,\n requestedPath: string,\n reason: string,\n): Promise<void> {\n const { state } = ctx;\n return new Promise(resolve => {\n const activate = () => {\n const questionComponent = new AskQuestionInlineComponent(\n {\n question: `Grant sandbox access to \"${requestedPath}\"?\\n${theme.fg('dim', `Reason: ${reason}`)}`,\n options: [\n { label: 'Yes', description: 'Allow access to this directory' },\n { label: 'No', description: 'Deny access' },\n ],\n onSubmit: answer => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: answer });\n resolve();\n processNextInlineQuestion(state);\n },\n onCancel: () => {\n state.activeInlineQuestion = undefined;\n state.harness.respondToToolSuspension({ toolCallId, resumeData: 'No' });\n resolve();\n processNextInlineQuestion(state);\n },\n formatResult: answer => {\n const approved = answer.toLowerCase().startsWith('y');\n return approved ? `Granted access to ${requestedPath}` : `Denied access to ${requestedPath}`;\n },\n isNegativeAnswer: answer => !answer.toLowerCase().startsWith('y'),\n },\n state.ui,\n );\n\n // Store as active question so input routing works\n state.activeInlineQuestion = questionComponent;\n\n // Add to chat\n state.chatContainer.addChild(questionComponent);\n questionComponent.focused = true;\n state.ui.requestRender();\n state.chatContainer.invalidate();\n };\n\n // If another inline question is already active, queue this one\n if (state.activeInlineQuestion) {\n state.pendingInlineQuestions.push(activate);\n } else {\n activate();\n }\n\n ctx.notify('sandbox_access', `Sandbox access requested: ${requestedPath}`);\n });\n}\n\n/**\n * Handle a suspended submit_plan tool call.\n * Shows the plan inline with Approve/Reject/Request Changes options.\n */\nasync function approvePlan(ctx: EventHandlerContext, toolCallId: string, title: string, plan: string): Promise<void> {\n const { state } = ctx;\n await state.harness.setState({\n activePlan: {\n title,\n plan,\n approvedAt: new Date().toISOString(),\n },\n });\n savePlanToDisk({\n title,\n plan,\n resourceId: state.harness.getResourceId(),\n }).catch(() => {});\n await state.harness.respondToToolSuspension({\n toolCallId,\n resumeData: { action: 'approved' },\n });\n}\n\nfunction formatPlanGoalObjective(title: string, plan: string): string {\n return `# ${title}\\n\\n${plan}`;\n}\n\nexport async function handlePlanApproval(\n ctx: EventHandlerContext,\n toolCallId: string,\n title: string,\n plan: string,\n): Promise<void> {\n const { state } = ctx;\n return new Promise(resolve => {\n const approvalOptions = {\n toolCallId,\n title,\n plan,\n onApprove: async () => {\n state.activeInlinePlanApproval = undefined;\n state.ui.setFocus(state.editor);\n await approvePlan(ctx, toolCallId, title, plan);\n\n // Fire a structured system-reminder signal to wake the freshly\n // switched-to default-mode agent. The signal echoes back as a\n // `system_reminder` content part and renders through the same\n // path as any other reminder — no legacy XML regex, no companion\n // `addUserMessage` call, so the reminder shows up exactly once.\n //\n // `approvePlan` (via `respondToToolSuspension` → `switchMode`) waits\n // for the aborted plan-mode run to fully idle before returning, so\n // this signal always starts a fresh build-mode run instead of\n // queuing onto the dying one.\n try {\n await state.harness.sendSignal({\n type: 'system-reminder',\n contents: 'The user has approved the plan, begin executing.',\n }).accepted;\n } catch (err) {\n ctx.showError(`Failed to start build agent: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n resolve();\n },\n onGoal: async () => {\n state.activeInlinePlanApproval = undefined;\n state.ui.setFocus(state.editor);\n await approvePlan(ctx, toolCallId, title, plan);\n\n // `approvePlan` waits for plan mode to idle before `startGoal` sends\n // the canonical goal reminder, so this starts a fresh build-mode run.\n const objective = formatPlanGoalObjective(title, plan);\n await ctx.startGoal(objective, 'Goal cancelled.');\n\n const goal = state.goalManager.getGoal();\n if (goal?.id) {\n state.planStartedGoalId = goal.id;\n }\n\n resolve();\n },\n onReject: async (feedback?: string) => {\n state.activeInlinePlanApproval = undefined;\n state.ui.setFocus(state.editor);\n await state.harness.respondToToolSuspension({\n toolCallId,\n resumeData: { action: 'rejected', feedback },\n });\n resolve();\n },\n };\n\n const approvalComponent =\n state.lastSubmitPlanComponent instanceof PlanApprovalInlineComponent\n ? state.lastSubmitPlanComponent\n : new PlanApprovalInlineComponent(approvalOptions, state.ui);\n approvalComponent.activate(approvalOptions);\n\n // Store as active plan approval\n state.activeInlinePlanApproval = approvalComponent;\n\n // Insert after the submit_plan placeholder; if streaming already created the\n // plan box, activate that component in place instead of rendering a duplicate.\n if (state.lastSubmitPlanComponent) {\n const children = [...state.chatContainer.children];\n const submitPlanIndex = children.indexOf(state.lastSubmitPlanComponent as any);\n if (submitPlanIndex >= 0) {\n state.chatContainer.clear();\n for (let i = 0; i <= submitPlanIndex; i++) {\n state.chatContainer.addChild(children[i]!);\n }\n if (state.lastSubmitPlanComponent !== approvalComponent) {\n state.chatContainer.addChild(approvalComponent);\n }\n for (let i = submitPlanIndex + 1; i < children.length; i++) {\n state.chatContainer.addChild(children[i]!);\n }\n } else {\n state.chatContainer.addChild(approvalComponent);\n }\n } else {\n state.chatContainer.addChild(approvalComponent);\n }\n state.ui.requestRender();\n state.chatContainer.invalidate();\n state.ui.setFocus(approvalComponent);\n\n ctx.notify('plan_approval', `Plan \"${title}\" requires approval`);\n });\n}\n","/**\n * Event handlers for subagent delegation events:\n * subagent_start, subagent_tool_start, subagent_tool_end, subagent_end.\n */\nimport { insertChatComponentWithBoundarySpacing } from '../chat-boundary-reconciliation.js';\nimport { SubagentExecutionComponent } from '../components/subagent-execution.js';\n\nimport type { EventHandlerContext } from './types.js';\n\nexport function handleSubagentStart(\n ctx: EventHandlerContext,\n toolCallId: string,\n agentType: string,\n task: string,\n modelId?: string,\n forked?: boolean,\n): void {\n const { state } = ctx;\n const component = new SubagentExecutionComponent(agentType, task, state.ui, modelId, {\n collapseOnComplete: false,\n expandOnComplete: state.quietMode,\n forked,\n });\n state.pendingSubagents.set(toolCallId, component);\n state.allToolComponents.push(component as any);\n\n // Insert before the current streamingComponent so subagent box\n // appears between pre-subagent text and post-subagent text\n if (state.streamingComponent) {\n const idx = state.chatContainer.children.indexOf(state.streamingComponent as any);\n if (idx >= 0) {\n insertChatComponentWithBoundarySpacing(state.chatContainer, component, idx);\n } else {\n insertChatComponentWithBoundarySpacing(state.chatContainer, component);\n }\n } else {\n insertChatComponentWithBoundarySpacing(state.chatContainer, component);\n }\n\n state.ui.requestRender();\n}\n\nexport function handleSubagentToolStart(\n ctx: EventHandlerContext,\n toolCallId: string,\n subToolName: string,\n subToolArgs: unknown,\n): void {\n const component = ctx.state.pendingSubagents.get(toolCallId);\n if (component) {\n component.addToolStart(subToolName, subToolArgs);\n ctx.state.ui.requestRender();\n }\n}\n\nexport function handleSubagentToolEnd(\n ctx: EventHandlerContext,\n toolCallId: string,\n subToolName: string,\n subToolResult: unknown,\n isError: boolean,\n): void {\n const component = ctx.state.pendingSubagents.get(toolCallId);\n if (component) {\n component.addToolEnd(subToolName, subToolResult, isError);\n ctx.state.ui.requestRender();\n }\n}\n\nexport function handleSubagentEnd(\n ctx: EventHandlerContext,\n toolCallId: string,\n isError: boolean,\n durationMs: number,\n result?: string,\n): void {\n const component = ctx.state.pendingSubagents.get(toolCallId);\n if (component) {\n component.finish(isError, durationMs, result);\n ctx.state.pendingSubagents.delete(toolCallId);\n ctx.state.ui.requestRender();\n }\n}\n","/**\n * Drop-in replacement for pi-tui's `SelectList` used by the editor's\n * slash-command / autocomplete dropdown. Behaves like `SelectList` (same\n * prefix, primary column, and description styling) but word-wraps long\n * descriptions across multiple terminal rows instead of truncating them on a\n * single line. Continuation rows are indented under the description column so\n * the full command/skill description stays readable without widening the\n * terminal.\n *\n * Arrow keys move item-to-item (not row-to-row), so navigation stays\n * predictable regardless of how many rows a description wraps onto.\n */\n\nimport { getKeybindings, truncateToWidth, visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';\nimport type { Component, SelectItem, SelectListTheme } from '@earendil-works/pi-tui';\n\nconst DEFAULT_PRIMARY_COLUMN_WIDTH = 32;\nconst PRIMARY_COLUMN_GAP = 2;\nconst MIN_DESCRIPTION_WIDTH = 10;\nconst DESCRIPTION_WIDTH_THRESHOLD = 40;\n\nexport interface WrappingAutocompleteListLayout {\n minPrimaryColumnWidth?: number;\n maxPrimaryColumnWidth?: number;\n}\n\nconst normalizeToSingleLine = (text: string): string => text.replace(/[\\r\\n]+/g, ' ').trim();\nconst clamp = (value: number, min: number, max: number): number => Math.max(min, Math.min(value, max));\n\nexport class WrappingAutocompleteList implements Component {\n private items: SelectItem[];\n private filteredItems: SelectItem[];\n private selectedIndex = 0;\n private maxVisible: number;\n private theme: SelectListTheme;\n private layout: WrappingAutocompleteListLayout;\n\n onSelect?: (item: SelectItem) => void;\n onCancel?: () => void;\n onSelectionChange?: (item: SelectItem) => void;\n\n constructor(\n items: SelectItem[],\n maxVisible: number,\n theme: SelectListTheme,\n layout: WrappingAutocompleteListLayout = {},\n ) {\n this.items = items;\n this.filteredItems = items;\n this.maxVisible = maxVisible;\n this.theme = theme;\n this.layout = layout;\n }\n\n setFilter(filter: string): void {\n this.filteredItems = this.items.filter(item => item.value.toLowerCase().startsWith(filter.toLowerCase()));\n this.selectedIndex = 0;\n }\n\n setSelectedIndex(index: number): void {\n this.selectedIndex = Math.max(0, Math.min(index, this.filteredItems.length - 1));\n }\n\n invalidate(): void {}\n\n getSelectedItem(): SelectItem | null {\n return this.filteredItems[this.selectedIndex] ?? null;\n }\n\n render(width: number): string[] {\n const lines: string[] = [];\n\n if (this.filteredItems.length === 0) {\n lines.push(this.theme.noMatch(' No matching commands'));\n return lines;\n }\n\n const primaryColumnWidth = this.getPrimaryColumnWidth();\n const startIndex = Math.max(\n 0,\n Math.min(this.selectedIndex - Math.floor(this.maxVisible / 2), this.filteredItems.length - this.maxVisible),\n );\n const endIndex = Math.min(startIndex + this.maxVisible, this.filteredItems.length);\n\n for (let i = startIndex; i < endIndex; i++) {\n const item = this.filteredItems[i];\n if (!item) continue;\n const isSelected = i === this.selectedIndex;\n const description = item.description ? normalizeToSingleLine(item.description) : undefined;\n for (const row of this.renderItem(item, isSelected, width, description, primaryColumnWidth)) {\n lines.push(row);\n }\n }\n\n if (startIndex > 0 || endIndex < this.filteredItems.length) {\n const scrollText = ` (${this.selectedIndex + 1}/${this.filteredItems.length})`;\n lines.push(this.theme.scrollInfo(truncateToWidth(scrollText, width - 2, '')));\n }\n\n return lines;\n }\n\n handleInput(keyData: string): void {\n const kb = getKeybindings();\n\n if (kb.matches(keyData, 'tui.select.up')) {\n this.selectedIndex = this.selectedIndex === 0 ? this.filteredItems.length - 1 : this.selectedIndex - 1;\n this.notifySelectionChange();\n } else if (kb.matches(keyData, 'tui.select.down')) {\n this.selectedIndex = this.selectedIndex === this.filteredItems.length - 1 ? 0 : this.selectedIndex + 1;\n this.notifySelectionChange();\n } else if (kb.matches(keyData, 'tui.select.confirm')) {\n const selected = this.filteredItems[this.selectedIndex];\n if (selected && this.onSelect) this.onSelect(selected);\n } else if (kb.matches(keyData, 'tui.select.cancel')) {\n this.onCancel?.();\n }\n }\n\n private renderItem(\n item: SelectItem,\n isSelected: boolean,\n width: number,\n description: string | undefined,\n primaryColumnWidth: number,\n ): string[] {\n const prefix = isSelected ? '→ ' : ' ';\n const prefixWidth = visibleWidth(prefix);\n\n if (description && width > DESCRIPTION_WIDTH_THRESHOLD) {\n const effectivePrimaryColumnWidth = Math.max(1, Math.min(primaryColumnWidth, width - prefixWidth - 4));\n const maxPrimaryWidth = Math.max(1, effectivePrimaryColumnWidth - PRIMARY_COLUMN_GAP);\n const truncatedValue = this.truncatePrimary(item, maxPrimaryWidth);\n const truncatedValueWidth = visibleWidth(truncatedValue);\n const spacing = ' '.repeat(Math.max(1, effectivePrimaryColumnWidth - truncatedValueWidth));\n const descriptionStart = prefixWidth + truncatedValueWidth + spacing.length;\n const remainingWidth = width - descriptionStart - 2; // -2 for safety, mirrors SelectList\n\n if (remainingWidth > MIN_DESCRIPTION_WIDTH) {\n // Wrap the description across rows instead of truncating it. The first\n // row keeps the primary column; continuation rows indent under the\n // description column so the wrapped text aligns.\n const wrapped = wrapTextWithAnsi(description, remainingWidth);\n const continuationIndent = ' '.repeat(descriptionStart);\n\n return wrapped.map((chunk, index) => {\n if (index === 0) {\n if (isSelected) {\n return this.theme.selectedText(`${prefix}${truncatedValue}${spacing}${chunk}`);\n }\n return prefix + truncatedValue + this.theme.description(spacing + chunk);\n }\n if (isSelected) {\n return this.theme.selectedText(`${continuationIndent}${chunk}`);\n }\n return this.theme.description(continuationIndent + chunk);\n });\n }\n }\n\n const maxWidth = width - prefixWidth - 2;\n const truncatedValue = this.truncatePrimary(item, maxWidth);\n if (isSelected) {\n return [this.theme.selectedText(`${prefix}${truncatedValue}`)];\n }\n return [prefix + truncatedValue];\n }\n\n private getPrimaryColumnWidth(): number {\n const { min, max } = this.getPrimaryColumnBounds();\n const widestPrimary = this.filteredItems.reduce(\n (widest, item) => Math.max(widest, visibleWidth(this.getDisplayValue(item)) + PRIMARY_COLUMN_GAP),\n 0,\n );\n return clamp(widestPrimary, min, max);\n }\n\n private getPrimaryColumnBounds(): { min: number; max: number } {\n const rawMin =\n this.layout.minPrimaryColumnWidth ?? this.layout.maxPrimaryColumnWidth ?? DEFAULT_PRIMARY_COLUMN_WIDTH;\n const rawMax =\n this.layout.maxPrimaryColumnWidth ?? this.layout.minPrimaryColumnWidth ?? DEFAULT_PRIMARY_COLUMN_WIDTH;\n return {\n min: Math.max(1, Math.min(rawMin, rawMax)),\n max: Math.max(1, Math.max(rawMin, rawMax)),\n };\n }\n\n private truncatePrimary(item: SelectItem, maxWidth: number): string {\n return truncateToWidth(this.getDisplayValue(item), maxWidth, '');\n }\n\n private getDisplayValue(item: SelectItem): string {\n return item.label || item.value;\n }\n\n private notifySelectionChange(): void {\n const selected = this.filteredItems[this.selectedIndex];\n if (selected && this.onSelectionChange) this.onSelectionChange(selected);\n }\n}\n","/**\n * Custom editor that handles app-level keybindings for Mastra Code.\n */\n\nimport { readFileSync, statSync } from 'node:fs';\nimport { extname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Editor, matchesKey } from '@earendil-works/pi-tui';\nimport type { EditorTheme, SelectItem, TUI } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport { getClipboardImage, getClipboardText } from '../../clipboard/index.js';\nimport type { ClipboardImage } from '../../clipboard/index.js';\nimport { mastra, theme } from '../theme.js';\nimport type { GradientAnimator } from './obi-loader.js';\nimport { WrappingAutocompleteList } from './wrapping-autocomplete-list.js';\n\n// Mirrors pi-tui's SLASH_COMMAND_SELECT_LIST_LAYOUT so slash-command rows keep\n// the same primary-column sizing as the upstream SelectList.\nconst SLASH_COMMAND_LIST_LAYOUT = {\n minPrimaryColumnWidth: 12,\n maxPrimaryColumnWidth: 32,\n};\n\nconst PASTE_START = '\\x1b[200~';\nconst PASTE_END = '\\x1b[201~';\nconst IMAGE_MIME_TYPES_BY_EXTENSION: Record<string, string> = {\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.gif': 'image/gif',\n '.webp': 'image/webp',\n '.bmp': 'image/bmp',\n '.tif': 'image/tiff',\n '.tiff': 'image/tiff',\n '.heic': 'image/heic',\n '.heif': 'image/heif',\n};\n\nexport type AppAction =\n | 'clear'\n | 'exit'\n | 'suspend'\n | 'undo'\n | 'toggleThinking'\n | 'expandTools'\n | 'followUp'\n | 'queueFollowUp'\n | 'cycleMode'\n | 'toggleYolo';\n\n// Pre-compiled constants (avoid re-creation per render)\nconst ANSI_STRIP_RE = /\\x1b\\[[0-9;]*m/g;\nconst SLASH_CURSOR_RE = /\\x1b\\[7m\\/\\x1b\\[0m/;\nconst AT_CURSOR_RE = /\\x1b\\[7m@\\x1b\\[0m/;\nfunction parseHex(hex: string): [number, number, number] {\n const h = hex.replace('#', '');\n return [parseInt(h.slice(0, 2), 16), parseInt(h.slice(2, 4), 16), parseInt(h.slice(4, 6), 16)];\n}\n\nconst DEFAULT_PROMPT_ICON = '•';\nconst PROMPT_ICON_CHOICES = [\n '☯',\n '✺',\n '☻',\n '✿',\n '◒',\n '◓',\n '♞',\n '☘',\n '☸',\n '❂',\n '❁',\n '✽',\n '❉',\n '✹',\n '❨',\n '❩',\n '✚',\n '⚉',\n '❣',\n '❥',\n '♫',\n '❤',\n] as const;\n\nfunction getRandomPromptIcon(currentIcon: string): string {\n if (Math.random() < 0.99) {\n return DEFAULT_PROMPT_ICON;\n }\n\n const nextChoices = PROMPT_ICON_CHOICES.filter(icon => icon !== currentIcon);\n const choices = nextChoices.length > 0 ? nextChoices : PROMPT_ICON_CHOICES;\n return choices[Math.floor(Math.random() * choices.length)]!;\n}\n\nexport class CustomEditor extends Editor {\n private actionHandlers: Map<AppAction, () => unknown> = new Map();\n\n public onCtrlD?: () => void;\n public escapeEnabled = true;\n public onImagePaste?: (image: ClipboardImage) => void;\n public getModeColor?: () => string | undefined;\n public getPromptAnimator?: () => GradientAnimator | undefined;\n private pendingBracketedPaste: string | null = null;\n\n private _cachedModeColorHex?: string;\n private _cachedColorFn?: (s: string) => string;\n private promptIcon = DEFAULT_PROMPT_ICON;\n private lastPromptWasInvisible = false;\n\n constructor(tui: TUI, theme: EditorTheme) {\n super(tui, theme);\n (this as any).getBestAutocompleteMatchIndex = (items: Array<{ value: string }>, prefix: string): number => {\n if (!prefix) {\n return -1;\n }\n\n const normalizeSlashCommandValue = (value: string) => value.replace(/^\\/+/, '');\n const shouldNormalizeSlashCommand = prefix.startsWith('/');\n const normalizedPrefix = shouldNormalizeSlashCommand ? normalizeSlashCommandValue(prefix) : prefix;\n\n let firstPrefixIndex = -1;\n for (let i = 0; i < items.length; i++) {\n const value = items[i]?.value ?? '';\n const comparableValue = shouldNormalizeSlashCommand ? normalizeSlashCommandValue(value) : value;\n\n if (comparableValue === normalizedPrefix) {\n return i;\n }\n\n if (firstPrefixIndex === -1 && comparableValue.startsWith(normalizedPrefix)) {\n firstPrefixIndex = i;\n }\n }\n\n return firstPrefixIndex;\n };\n\n // Override pi-tui's private `createAutocompleteList` so the slash-command /\n // autocomplete dropdown uses WrappingAutocompleteList. This wraps long\n // command/skill descriptions across multiple rows instead of truncating\n // them on a single line. Wired here (rather than as a class method) because\n // the base declares it `private`, so a normal override would be a type clash.\n (this as any).createAutocompleteList = (prefix: string, items: SelectItem[]) => {\n const layout = prefix.startsWith('/') ? SLASH_COMMAND_LIST_LAYOUT : undefined;\n const internals = this as unknown as { autocompleteMaxVisible: number; theme: EditorTheme };\n return new WrappingAutocompleteList(items, internals.autocompleteMaxVisible, internals.theme.selectList, layout);\n };\n }\n\n onAction(action: AppAction, handler: () => unknown): void {\n this.actionHandlers.set(action, handler);\n }\n\n render(width: number): string[] {\n const text = this.getText().trimStart();\n const isSlash = text.startsWith('/');\n const isAt = text.startsWith('@');\n const color = this.getModeColor?.() || mastra.green;\n const promptAnimator = this.getPromptAnimator?.();\n const shouldAnimatePrompt = !isSlash && !isAt;\n const isPromptAnimated = shouldAnimatePrompt && Boolean(promptAnimator?.isRunning());\n const fadeProgress = isPromptAnimated ? promptAnimator!.getFadeProgress() : 1;\n const isTransitioningIn = isPromptAnimated && promptAnimator!.isFadingIn();\n const isTransitioningOut = isPromptAnimated && promptAnimator!.isFadingOut();\n const promptOffset = isPromptAnimated ? promptAnimator!.getOffset() : 0;\n const pulseWave = isPromptAnimated ? (Math.sin(promptOffset * Math.PI * 2) + 1) / 2 : 0;\n const transitionPhase = isTransitioningIn || isTransitioningOut ? 1 - fadeProgress : 1;\n const chevronBrightness = isPromptAnimated\n ? isTransitioningIn\n ? transitionPhase < 0.5\n ? Math.max(0, 1 - transitionPhase * 2)\n : 0\n : isTransitioningOut\n ? transitionPhase <= 0.5\n ? Math.max(0, 1 - transitionPhase * 2)\n : 0\n : 0\n : 1;\n const dotBrightness = isPromptAnimated\n ? isTransitioningIn\n ? transitionPhase <= 0.5\n ? 0\n : Math.max(0, (transitionPhase - 0.5) * 2)\n : isTransitioningOut\n ? transitionPhase < 0.5\n ? 0\n : Math.max(0, (transitionPhase - 0.5) * 2)\n : pulseWave\n : 0;\n\n const isSteadyPulse = isPromptAnimated && !isTransitioningIn && !isTransitioningOut;\n if (!isPromptAnimated) {\n this.promptIcon = DEFAULT_PROMPT_ICON;\n this.lastPromptWasInvisible = false;\n } else if (!isSteadyPulse) {\n this.lastPromptWasInvisible = false;\n }\n\n const promptIsInvisible = isSteadyPulse && dotBrightness <= 0.05;\n if (promptIsInvisible && !this.lastPromptWasInvisible) {\n this.promptIcon = getRandomPromptIcon(this.promptIcon);\n }\n this.lastPromptWasInvisible = promptIsInvisible;\n\n const promptChar = isSlash\n ? '/'\n : isAt\n ? '@'\n : chevronBrightness > 0.05\n ? '›'\n : dotBrightness > 0.05\n ? this.promptIcon\n : ' ';\n const promptBrightness = isPromptAnimated ? Math.max(chevronBrightness, dotBrightness) : 1;\n\n // Cache colorFn and prompt — only recreate when color changes\n if (this._cachedModeColorHex !== color) {\n this._cachedModeColorHex = color;\n this._cachedColorFn = chalk.hex(color);\n }\n const colorFn = this._cachedColorFn!;\n const b = colorFn;\n const [r, g, bValue] = parseHex(color);\n const prompt = chalk.bold.rgb(\n Math.round(r * promptBrightness),\n Math.round(g * promptBrightness),\n Math.round(bValue * promptBrightness),\n )(promptChar);\n\n // Box structure: \"│ > content │\" or \"│ content │\"\n // Left: \"│ > \" (4) or \"│ \" (4), Right: \" │\" (2) = 6 chars total\n const promptWidth = 4; // \"│ > \" or \"│ \"\n const contentWidth = width - 6;\n // Editor renders at content width (prompt char space is separate)\n const editorLines = super.render(contentWidth);\n\n // Extract content lines (skip editor's invisible borders)\n const contentLines: string[] = [];\n const scrollIndicators: string[] = [];\n let isTop = true;\n for (const line of editorLines) {\n const stripped = line.replace(ANSI_STRIP_RE, '');\n if (stripped.length > 0 && stripped[0] === '─') {\n if (isTop) {\n isTop = false;\n continue;\n }\n if (stripped.includes('↑') || stripped.includes('↓')) {\n scrollIndicators.push(b(stripped));\n continue;\n }\n continue;\n }\n contentLines.push(line);\n }\n\n // Strip leading \"/\" or \"@\" from first content line when shown in prompt\n if ((isSlash || isAt) && contentLines.length > 0) {\n let l = contentLines[0]!;\n const char = isSlash ? '/' : '@';\n // Handle cursor-highlighted char (reverse video)\n l = l.replace(isSlash ? SLASH_CURSOR_RE : AT_CURSOR_RE, '');\n // Remove the first plain occurrence\n const idx = l.indexOf(char);\n if (idx !== -1) {\n l = l.slice(0, idx) + l.slice(idx + 1);\n }\n contentLines[0] = l;\n }\n\n // Build rounded box\n const result: string[] = [];\n const hBarLen = width - 2;\n\n // Solid mode-color border\n const top = b('╭') + b('─').repeat(hBarLen) + b('╮');\n const leftBorder = b('│');\n const rightBorder = b('│');\n const bottom = b('╰') + b('─').repeat(hBarLen) + b('╯');\n\n // Assemble box\n const textColorOpen = `\\x1b[38;2;${parseHex(theme.getTheme().text).join(';')}m`;\n const textColorClose = '\\x1b[39m';\n result.push(top);\n\n for (let i = 0; i < contentLines.length; i++) {\n const line = `${textColorOpen}${contentLines[i]!}${textColorClose}`;\n if (i === 0) {\n result.push(`${leftBorder} ${prompt} ${line} ${rightBorder}`);\n } else {\n result.push(`${leftBorder}${' '.repeat(promptWidth - 1)}${line} ${rightBorder}`);\n }\n }\n\n result.push(bottom);\n\n // Scroll indicators below the box\n for (const ind of scrollIndicators) {\n result.push(ind);\n }\n\n return result;\n }\n\n private maybeHandleBracketedPaste(data: string): boolean {\n const pasteStartIndex = this.pendingBracketedPaste ? -1 : data.indexOf(PASTE_START);\n if (!this.pendingBracketedPaste && pasteStartIndex === -1) {\n return false;\n }\n\n const beforePaste = this.pendingBracketedPaste ? '' : data.slice(0, pasteStartIndex);\n const pasteChunk = this.pendingBracketedPaste\n ? `${this.pendingBracketedPaste}${data}`\n : data.slice(pasteStartIndex);\n\n if (beforePaste) {\n super.handleInput(beforePaste);\n }\n\n const pasteEndIndex = pasteChunk.indexOf(PASTE_END);\n if (pasteEndIndex === -1) {\n this.pendingBracketedPaste = pasteChunk;\n return true;\n }\n\n this.pendingBracketedPaste = null;\n\n const pasteContent = pasteChunk.slice(PASTE_START.length, pasteEndIndex);\n const afterPaste = pasteChunk.slice(pasteEndIndex + PASTE_END.length);\n\n if (this.shouldPasteClipboardImage(pasteContent)) {\n const clipboardImage = getClipboardImage();\n if (clipboardImage) {\n this.onImagePaste?.(clipboardImage);\n if (afterPaste.length > 0) {\n this.handleInput(afterPaste);\n }\n return true;\n }\n }\n\n const clipboardImageForRemoteUrl = this.getClipboardImageForPastedRemoteImageUrl(pasteContent);\n if (clipboardImageForRemoteUrl) {\n this.onImagePaste?.(clipboardImageForRemoteUrl);\n if (afterPaste.length > 0) {\n this.handleInput(afterPaste);\n }\n return true;\n }\n\n const pastedImageSource = this.readPastedImageSource(pasteContent);\n if (pastedImageSource) {\n this.onImagePaste?.(pastedImageSource);\n if (afterPaste.length > 0) {\n this.handleInput(afterPaste);\n }\n return true;\n }\n\n super.handleInput(`${PASTE_START}${pasteContent}${PASTE_END}`);\n if (afterPaste.length > 0) {\n this.handleInput(afterPaste);\n }\n return true;\n }\n\n private shouldPasteClipboardImage(pasteContent: string): boolean {\n return Boolean(this.onImagePaste) && pasteContent.trim().length === 0;\n }\n\n private getClipboardImageForPastedRemoteImageUrl(pasteContent: string): ClipboardImage | null {\n if (!this.onImagePaste) {\n return null;\n }\n\n if (!this.normalizePastedImageUrl(this.normalizePastedPathLike(pasteContent) ?? '')) {\n return null;\n }\n\n return getClipboardImage();\n }\n\n private readPastedImageSource(pasteContent: string): ClipboardImage | null {\n if (!this.onImagePaste) {\n return null;\n }\n\n const normalizedPaste = this.normalizePastedPathLike(pasteContent);\n if (!normalizedPaste) {\n return null;\n }\n\n const imageUrl = this.normalizePastedImageUrl(normalizedPaste);\n if (imageUrl) {\n const mimeType = this.getImageMimeType(imageUrl);\n return mimeType\n ? {\n data: imageUrl,\n mimeType,\n }\n : null;\n }\n\n const filePath = this.normalizePastedFilePath(normalizedPaste);\n if (!filePath) {\n return null;\n }\n\n const mimeType = this.getImageMimeType(filePath);\n if (!mimeType) {\n return null;\n }\n\n try {\n if (!statSync(filePath).isFile()) {\n return null;\n }\n\n return {\n data: readFileSync(filePath).toString('base64'),\n mimeType,\n };\n } catch {\n return null;\n }\n }\n\n private normalizePastedPathLike(pasteContent: string): string | null {\n const trimmed = pasteContent.trim();\n if (!trimmed || trimmed.includes('\\n')) {\n return null;\n }\n\n const unquoted =\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) || (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ? trimmed.slice(1, -1)\n : trimmed;\n\n return unquoted.replace(/\\\\([ !$&'()\\[\\]{}])/g, '$1');\n }\n\n private normalizePastedImageUrl(pasteContent: string): string | null {\n if (!/^https?:\\/\\//i.test(pasteContent)) {\n return null;\n }\n\n try {\n const url = new URL(pasteContent);\n return this.getImageMimeType(url.toString()) ? url.toString() : null;\n } catch {\n return null;\n }\n }\n\n private normalizePastedFilePath(pasteContent: string): string | null {\n if (/^https?:\\/\\//i.test(pasteContent)) {\n return null;\n }\n\n if (/^file:\\/\\//i.test(pasteContent)) {\n try {\n return fileURLToPath(pasteContent);\n } catch {\n return null;\n }\n }\n\n return pasteContent;\n }\n\n private getImageMimeType(pathOrUrl: string): string | null {\n const extensionSource = /^https?:\\/\\//i.test(pathOrUrl) ? new URL(pathOrUrl).pathname : pathOrUrl;\n return IMAGE_MIME_TYPES_BY_EXTENSION[extname(extensionSource).toLowerCase()] ?? null;\n }\n\n private handleExplicitPaste(): boolean {\n if (this.onImagePaste) {\n const clipboardImage = getClipboardImage();\n if (clipboardImage) {\n this.onImagePaste(clipboardImage);\n return true;\n }\n }\n\n const clipboardText = getClipboardText();\n if (clipboardText) {\n const syntheticPaste = `${PASTE_START}${clipboardText}${PASTE_END}`;\n super.handleInput(syntheticPaste);\n return true;\n }\n\n return true;\n }\n\n private completeAutocompleteSelection(): boolean {\n if (!this.isShowingAutocomplete()) {\n return false;\n }\n\n const wasSlashCommand = this.getText().trimStart().startsWith('/');\n super.handleInput('\\t');\n const completedText = this.getText();\n if (wasSlashCommand && !completedText.trimStart().startsWith('/')) {\n this.setText(`/${completedText.trimStart()}`);\n }\n return wasSlashCommand;\n }\n\n handleInput(data: string): void {\n if (this.maybeHandleBracketedPaste(data)) {\n return;\n }\n\n if (matchesKey(data, 'ctrl+v') || matchesKey(data, 'alt+v')) {\n this.handleExplicitPaste();\n return;\n }\n\n if (matchesKey(data, 'ctrl+c')) {\n const handler = this.actionHandlers.get('clear');\n if (handler) {\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'escape') && this.escapeEnabled) {\n const handler = this.actionHandlers.get('clear');\n if (handler) {\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'ctrl+d')) {\n if (this.getText().length === 0) {\n const handler = this.onCtrlD ?? this.actionHandlers.get('exit');\n if (handler) handler();\n }\n return;\n }\n\n if (matchesKey(data, 'ctrl+z')) {\n const handler = this.actionHandlers.get('suspend');\n if (handler) {\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'alt+z')) {\n const handler = this.actionHandlers.get('undo');\n if (handler) {\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'ctrl+t')) {\n const handler = this.actionHandlers.get('toggleThinking');\n if (handler) {\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'ctrl+e')) {\n const handler = this.actionHandlers.get('expandTools');\n if (handler) {\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'ctrl+f')) {\n const handler = this.actionHandlers.get('queueFollowUp');\n if (handler) {\n this.completeAutocompleteSelection();\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'enter')) {\n // Let pi-tui handle \\+Enter newline workaround\n const lines = (this as any).state?.lines;\n const cursorCol = (this as any).state?.cursorCol;\n const currentLine = lines?.[(this as any).state?.cursorLine] || '';\n if (cursorCol > 0 && currentLine[cursorCol - 1] === '\\\\') {\n super.handleInput(data);\n return;\n }\n const handler = this.actionHandlers.get('followUp');\n if (handler) {\n if (this.isShowingAutocomplete()) {\n if (this.completeAutocompleteSelection() && handler() !== false) {\n return;\n }\n return;\n }\n if (handler() !== false) {\n return;\n }\n }\n }\n\n if (matchesKey(data, 'shift+tab')) {\n const handler = this.actionHandlers.get('cycleMode');\n if (handler) {\n handler();\n return;\n }\n }\n\n if (matchesKey(data, 'ctrl+y')) {\n const handler = this.actionHandlers.get('toggleYolo');\n if (handler) {\n handler();\n return;\n }\n }\n\n super.handleInput(data);\n }\n}\n","/**\n * Shared TUI state — the single source of truth for all mutable state\n * in the Mastra TUI. Extracted so that slash commands, event handlers,\n * and other modules can operate on the state without coupling to the\n * MastraTUI class.\n */\nimport { Container, TUI, ProcessTerminal } from '@earendil-works/pi-tui';\nimport type { CombinedAutocompleteProvider, Component, Text } from '@earendil-works/pi-tui';\nimport type { Harness, HarnessMessage } from '@mastra/core/harness';\nimport type { SkillMetadata, Workspace } from '@mastra/core/workspace';\nimport type { GithubSignals } from '@mastra/github-signals';\nimport type { MastraCodeAnalytics } from '../analytics.js';\nimport type { AuthStorage } from '../auth/storage.js';\nimport type { HookManager } from '../hooks/index.js';\nimport type { McpManager } from '../mcp/manager.js';\nimport type { OnboardingInlineComponent } from '../onboarding/onboarding-inline.js';\nimport { detectProject } from '../utils/project.js';\nimport type { ProjectInfo } from '../utils/project.js';\nimport type { SlashCommandMetadata } from '../utils/slash-command-loader.js';\nimport type { AskQuestionInlineComponent } from './components/ask-question-inline.js';\nimport type { AssistantMessageComponent } from './components/assistant-message.js';\nimport { CustomEditor } from './components/custom-editor.js';\nimport type { IdleCounterComponent } from './components/idle-counter.js';\nimport type { JudgeDisplayComponent } from './components/judge-display.js';\nimport type { GradientAnimator } from './components/obi-loader.js';\nimport type { OMMarkerComponent, OMMarkerData } from './components/om-marker.js';\nimport type { OMProgressComponent } from './components/om-progress.js';\nimport type { PlanApprovalInlineComponent } from './components/plan-approval-inline.js';\nimport type { ShellStreamComponent } from './components/shell-output.js';\nimport type { SlashCommandComponent } from './components/slash-command.js';\nimport type { SubagentExecutionComponent } from './components/subagent-execution.js';\nimport type { SystemReminderComponent } from './components/system-reminder.js';\nimport type { TaskProgressComponent } from './components/task-progress.js';\nimport type { TemporalGapComponent } from './components/temporal-gap.js';\nimport type { IToolExecutionComponent } from './components/tool-execution-interface.js';\nimport type { UserMessageComponent } from './components/user-message.js';\n\nimport { GoalManager } from './goal-manager.js';\nimport { getEditorTheme, mastra, TERM_WIDTH_BUFFER } from './theme.js';\n\nexport interface PendingSignalMessage {\n component: Component;\n text: string;\n isInterjection?: boolean;\n}\n\nexport interface GithubPrSubscriptionBadge {\n owner?: string;\n repo?: string;\n prNumber: number;\n lastSyncStatus?: string;\n lastNotificationKind?: string;\n lastNotificationPriority?: string;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function getGithubPrSubscriptionsFromMetadata(\n metadata: Record<string, unknown> | undefined,\n): GithubPrSubscriptionBadge[] {\n const mastraMetadata = isRecord(metadata?.mastra) ? metadata.mastra : undefined;\n const githubSignals = isRecord(mastraMetadata?.githubSignals) ? mastraMetadata.githubSignals : undefined;\n const subscriptions = Array.isArray(githubSignals?.subscriptions) ? githubSignals.subscriptions : [];\n const result: GithubPrSubscriptionBadge[] = [];\n for (const subscription of subscriptions) {\n if (!isRecord(subscription)) continue;\n const prNumber = typeof subscription.number === 'number' ? subscription.number : undefined;\n if (!prNumber) continue;\n result.push({\n prNumber,\n ...(typeof subscription.owner === 'string' ? { owner: subscription.owner } : {}),\n ...(typeof subscription.repo === 'string' ? { repo: subscription.repo } : {}),\n ...(typeof subscription.lastSyncStatus === 'string' ? { lastSyncStatus: subscription.lastSyncStatus } : {}),\n ...(typeof subscription.lastNotificationKind === 'string'\n ? { lastNotificationKind: subscription.lastNotificationKind }\n : {}),\n ...(typeof subscription.lastNotificationPriority === 'string'\n ? { lastNotificationPriority: subscription.lastNotificationPriority }\n : {}),\n });\n }\n return result.sort((a, b) => a.prNumber - b.prNumber);\n}\n// =============================================================================\n// MastraTUIOptions\n// =============================================================================\n\nexport interface MastraTUIOptions {\n /** The harness instance to control */\n harness: Harness<any>;\n\n /** Hook manager for session lifecycle hooks */\n hookManager?: HookManager;\n\n /** Analytics client for product telemetry */\n analytics?: MastraCodeAnalytics;\n\n /** Auth storage for OAuth login/logout */\n authStorage?: AuthStorage;\n\n /** MCP manager for server status and reload */\n mcpManager?: McpManager;\n\n /**\n * @deprecated Workspace is now obtained from the Harness.\n * Configure workspace via HarnessConfig.workspace instead.\n * Kept as fallback for backward compatibility.\n */\n workspace?: Workspace;\n\n /** Initial message to send on startup */\n initialMessage?: string;\n\n /** Whether to show verbose startup info */\n verbose?: boolean;\n\n /** App name for header */\n appName?: string;\n\n /** App version for header */\n version?: string;\n\n /** Use inline questions instead of dialog overlays */\n inlineQuestions?: boolean;\n\n /** GitHub PR signal processor used for status-line polling state. */\n githubSignals?: GithubSignals;\n}\n\n// =============================================================================\n// TUIState\n// =============================================================================\n\nexport interface TUIState {\n // ── Core dependencies (set once) ──────────────────────────────────────\n harness: Harness<any>;\n options: MastraTUIOptions;\n hookManager?: HookManager;\n analytics?: MastraCodeAnalytics;\n authStorage?: AuthStorage;\n mcpManager?: McpManager;\n workspace?: Workspace;\n\n // ── TUI framework (set once) ──────────────────────────────────────────\n ui: TUI;\n chatContainer: Container;\n editorContainer: Container;\n idleCounter?: IdleCounterComponent;\n idleStartedAt?: number;\n lastRenderedMessageAt?: number;\n editor: CustomEditor;\n footer: Container;\n terminal: ProcessTerminal;\n\n // ── Agent / streaming ─────────────────────────────────────────────────\n isInitialized: boolean;\n gradientAnimator?: GradientAnimator;\n streamingComponent?: AssistantMessageComponent;\n streamingMessage?: HarnessMessage;\n pendingTools: Map<string, IToolExecutionComponent>;\n /** Task tools are hidden on success but promoted to normal tool boxes on errors */\n pendingTaskToolIds: Set<string>;\n /** Position hint for inline task-tool rendering when streaming */\n taskToolInsertIndex: number;\n /** Track all tool IDs seen during current stream (prevents duplicates) */\n seenToolCallIds: Set<string>;\n /** Track subagent tool call IDs to skip in trailing content logic */\n subagentToolCallIds: Set<string>;\n /** Track streamed system reminders for the active assistant run */\n currentRunSystemReminderKeys: Set<string>;\n /** Track all tools for expand/collapse */\n allToolComponents: IToolExecutionComponent[];\n /** Track slash command boxes for expand/collapse */\n allSlashCommandComponents: SlashCommandComponent[];\n /** Track inline system reminders for expand/collapse */\n allSystemReminderComponents: Array<SystemReminderComponent | TemporalGapComponent>;\n /** Track rendered message components by message id for anchored inserts */\n messageComponentsById: Map<string, Component>;\n /** Track shell passthrough components for expand/collapse */\n allShellComponents: ShellStreamComponent[];\n /** Track active subagent tasks */\n pendingSubagents: Map<string, SubagentExecutionComponent>;\n toolOutputExpanded: boolean;\n hideThinkingBlock: boolean;\n quietMode: boolean;\n quietModeMaxToolPreviewLines: number;\n /** Active goal judge status-line override while evaluating the last turn. */\n activeGoalJudge?: { modelId: string; abortController: AbortController; component: JudgeDisplayComponent };\n\n // ── Thread / conversation ─────────────────────────────────────────────\n /** True when we want a new thread but haven't created it yet */\n pendingNewThread: boolean;\n /** Current thread title (for display in status line) */\n currentThreadTitle?: string;\n /** GitHub PR subscriptions for the current thread. */\n activeGithubPrSubscriptions: GithubPrSubscriptionBadge[];\n /** Cached thread previews for the current TUI session */\n threadPreviewCache: Map<string, { preview: string; updatedAt: number }>;\n /** Threads whose preview lookup already returned empty during this session */\n attemptedThreadPreviewIds: Set<string>;\n\n // ── Inline interaction ────────────────────────────────────────────────\n /** Track the most recent ask_user component for inline question activation */\n lastAskUserComponent?: AskQuestionInlineComponent;\n /** Map toolCallId → AskQuestionInlineComponent for streaming arg updates */\n pendingAskUserComponents: Map<string, AskQuestionInlineComponent>;\n /** Saved editor text for Alt+Z undo */\n lastClearedText: string;\n activeInlineQuestion?: AskQuestionInlineComponent;\n /** Queue of pending inline questions waiting to be shown (when one is already active) */\n pendingInlineQuestions: Array<() => void>;\n activeInlinePlanApproval?: PlanApprovalInlineComponent;\n activeOnboarding?: OnboardingInlineComponent;\n lastSubmitPlanComponent?: Component;\n pendingSubmitPlanComponents: Map<string, PlanApprovalInlineComponent>;\n /** User-message follow-ups queued while the agent is running */\n pendingFollowUpMessages: Array<{ content: string; images?: Array<{ data: string; mimeType: string }> }>;\n /** FIFO ordering across queued follow-up messages and slash commands */\n pendingQueuedActions: Array<'message' | 'slash'>;\n /** Follow-up messages rendered while streaming so tool output stays above them */\n followUpComponents: UserMessageComponent[];\n /** Pending signal messages waiting for the stream echo */\n pendingSignalMessageComponentsById: Map<string, PendingSignalMessage>;\n /** Slash commands queued while the agent is running */\n pendingSlashCommands: string[];\n /** Pending user-message component ids for queued slash commands */\n pendingSlashCommandMessageIds: string[];\n /** Active approval dialog dismiss callback — called on Ctrl+C to unblock the dialog */\n pendingApprovalDismiss: (() => void) | null;\n\n // ── Status line ───────────────────────────────────────────────────────\n projectInfo: ProjectInfo;\n statusLine?: Text;\n memoryStatusLine?: Text;\n modelAuthStatus: { hasAuth: boolean; apiKeyEnvVar?: string };\n githubPrGradientAnimator?: GradientAnimator;\n githubPrPollingActive: boolean;\n\n // ── Observational Memory ──────────────────────────────────────────────\n omProgressComponent?: OMProgressComponent;\n activeOMMarker?: OMMarkerComponent;\n activeBufferingMarker?: OMMarkerComponent;\n activeActivationMarker?: OMMarkerComponent;\n activeActivationData?: OMMarkerData;\n activeActivationProviderChangeMarker?: OMMarkerComponent;\n\n // ── Tasks ─────────────────────────────────────────────────────────────\n taskProgress?: TaskProgressComponent;\n\n // ── Goal loop ─────────────────────────────────────────────────────────\n goalManager: GoalManager;\n /** Track a goal started from plan approval — return to plan mode when it completes */\n planStartedGoalId?: string;\n\n // ── Input ─────────────────────────────────────────────────────────────\n autocompleteProvider?: CombinedAutocompleteProvider;\n customSlashCommands: SlashCommandMetadata[];\n skillCommands: SkillMetadata[];\n goalSkillCommands: SkillMetadata[];\n /** Pending images from clipboard paste */\n pendingImages: Array<{ data: string; mimeType: string }>;\n\n // ── Dedup ────────────────────────────────────────────────────────────\n /** Texts of queued messages that were locally rendered and fired — used to\n * suppress the subscription echo that would otherwise create a duplicate. */\n firedQueuedMessageTexts?: Map<string, number>;\n\n // ── Abort tracking ────────────────────────────────────────────────────\n lastCtrlCTime: number;\n /** Track user-initiated aborts (Ctrl+C/Esc) vs system aborts */\n userInitiatedAbort: boolean;\n\n // ── Cleanup ───────────────────────────────────────────────────────────\n unsubscribe?: () => void;\n}\n\n// =============================================================================\n// Factory\n// =============================================================================\n\n/**\n * Create the initial TUIState from options.\n * Instantiates TUI framework objects (terminal, containers, editor)\n * and sets all mutable fields to their defaults.\n */\nexport function createTUIState(options: MastraTUIOptions): TUIState {\n const terminal = new ProcessTerminal();\n // Override columns getter to prevent line wrapping in nested terminal emulators\n Object.defineProperty(terminal, 'columns', {\n get: () => (process.stdout.columns || 80) - TERM_WIDTH_BUFFER,\n });\n const ui = new TUI(terminal);\n\n // Perf profiling removed\n\n const chatContainer = new Container();\n const editorContainer = new Container();\n const footer = new Container();\n const editor = new CustomEditor(ui, getEditorTheme());\n const result: TUIState = {\n // Core dependencies\n harness: options.harness,\n options,\n hookManager: options.hookManager,\n analytics: options.analytics,\n authStorage: options.authStorage,\n mcpManager: options.mcpManager,\n workspace: options.workspace,\n\n // TUI framework\n ui,\n chatContainer,\n editorContainer,\n editor,\n footer,\n terminal,\n\n // Agent / streaming\n isInitialized: false,\n pendingTools: new Map(),\n pendingTaskToolIds: new Set(),\n taskToolInsertIndex: -1,\n seenToolCallIds: new Set(),\n subagentToolCallIds: new Set(),\n currentRunSystemReminderKeys: new Set(),\n allToolComponents: [],\n allSlashCommandComponents: [],\n allSystemReminderComponents: [],\n messageComponentsById: new Map(),\n allShellComponents: [],\n pendingSubagents: new Map(),\n toolOutputExpanded: false,\n hideThinkingBlock: true,\n quietMode: false,\n quietModeMaxToolPreviewLines: 2,\n\n // Thread / conversation\n pendingNewThread: false,\n currentThreadTitle: undefined,\n activeGithubPrSubscriptions: [],\n threadPreviewCache: new Map(),\n attemptedThreadPreviewIds: new Set(),\n\n // Inline interaction\n lastClearedText: '',\n pendingAskUserComponents: new Map(),\n pendingSubmitPlanComponents: new Map(),\n pendingInlineQuestions: [],\n pendingFollowUpMessages: [],\n pendingQueuedActions: [],\n followUpComponents: [],\n pendingSignalMessageComponentsById: new Map(),\n pendingSlashCommands: [],\n pendingSlashCommandMessageIds: [],\n pendingApprovalDismiss: null,\n\n // Status line\n projectInfo: detectProject(process.cwd()),\n modelAuthStatus: { hasAuth: true },\n githubPrPollingActive: false,\n\n // Goal loop\n goalManager: new GoalManager(),\n planStartedGoalId: undefined,\n\n // Input\n customSlashCommands: [],\n skillCommands: [],\n goalSkillCommands: [],\n pendingImages: [],\n\n // Abort tracking\n lastCtrlCTime: 0,\n userInitiatedAbort: false,\n };\n editor.getModeColor = () => {\n if (result.activeGoalJudge) {\n return mastra.blue;\n }\n const color = options.harness.getCurrentMode()?.metadata?.color;\n return typeof color === 'string' ? color : undefined;\n };\n return result;\n}\n","/**\n * Event dispatcher: maps HarnessEvent types to extracted handler functions.\n */\nimport type { HarnessEvent, HarnessThread, TaskItemSnapshot } from '@mastra/core/harness';\nimport type { AskUserSelectionMode } from '@mastra/core/tools';\n\nimport { getCurrentGitBranchAsync } from '../utils/project.js';\nimport {\n handleAgentStart,\n handleAgentEnd,\n handleAgentAborted,\n handleAgentError,\n handleGoalEvaluation,\n handleMessageStart,\n handleMessageUpdate,\n handleMessageEnd,\n handleOMObservationStart,\n handleOMObservationEnd,\n handleOMReflectionStart,\n handleOMReflectionEnd,\n handleOMFailed,\n handleOMBufferingStart,\n handleOMBufferingEnd,\n handleOMBufferingFailed,\n handleOMActivation,\n handleOMThreadTitleUpdated,\n handleAskQuestion,\n handleSandboxAccessRequest,\n handlePlanApproval,\n handleSubagentStart,\n handleSubagentToolStart,\n handleSubagentToolEnd,\n handleSubagentEnd,\n handleToolApprovalRequired,\n handleToolStart,\n handleToolUpdate,\n handleShellOutput,\n handleToolInputStart,\n handleToolInputDelta,\n handleToolInputEnd,\n handleToolEnd,\n} from './handlers/index.js';\nimport type { EventHandlerContext } from './handlers/types.js';\nimport type { TUIState } from './state.js';\nimport { getGithubPrSubscriptionsFromMetadata } from './state.js';\n\n/**\n * Dispatch a HarnessEvent to the appropriate handler.\n */\nfunction trackInteractivePrompt(\n ectx: EventHandlerContext,\n promptType: string,\n properties?: Record<string, unknown>,\n): void {\n ectx.analytics?.trackInteractivePrompt(promptType, properties);\n}\n\nexport async function dispatchEvent(event: HarnessEvent, ectx: EventHandlerContext, state: TUIState): Promise<void> {\n switch (event.type) {\n case 'agent_start':\n handleAgentStart(ectx);\n break;\n\n case 'agent_end':\n if (event.reason === 'aborted') {\n handleAgentAborted(ectx);\n } else if (event.reason === 'error') {\n handleAgentError(ectx);\n } else {\n handleAgentEnd(ectx);\n }\n break;\n\n case 'message_start':\n handleMessageStart(ectx, event.message);\n break;\n\n case 'message_update':\n handleMessageUpdate(ectx, event.message);\n break;\n\n case 'message_end':\n handleMessageEnd(ectx, event.message);\n break;\n\n case 'tool_start':\n handleToolStart(ectx, event.toolCallId, event.toolName, event.args);\n break;\n\n case 'tool_approval_required':\n trackInteractivePrompt(ectx, 'tool_approval_required', {\n toolName: event.toolName,\n threadId: state.harness.getCurrentThreadId(),\n resourceId: state.harness.getResourceId(),\n });\n handleToolApprovalRequired(ectx, event.toolCallId, event.toolName, event.args);\n break;\n\n case 'tool_update':\n handleToolUpdate(ectx, event.toolCallId, event.partialResult);\n break;\n\n case 'shell_output':\n handleShellOutput(ectx, event.toolCallId, event.output, event.stream);\n break;\n\n case 'tool_input_start':\n if (event.toolName === 'ask_user' || event.toolName === 'request_access' || event.toolName === 'submit_plan') {\n trackInteractivePrompt(ectx, event.toolName, {\n toolName: event.toolName,\n threadId: state.harness.getCurrentThreadId(),\n resourceId: state.harness.getResourceId(),\n });\n }\n handleToolInputStart(ectx, event.toolCallId, event.toolName);\n break;\n\n case 'tool_input_delta':\n handleToolInputDelta(ectx, event.toolCallId, event.argsTextDelta);\n break;\n\n case 'tool_input_end':\n handleToolInputEnd(ectx, event.toolCallId);\n break;\n\n case 'tool_end':\n handleToolEnd(ectx, event.toolCallId, event.result, event.isError);\n break;\n\n case 'info':\n ectx.showInfo(event.message);\n break;\n\n case 'error':\n ectx.showFormattedError(event);\n break;\n\n case 'mode_changed':\n await ectx.refreshModelAuthStatus();\n break;\n\n case 'model_changed':\n await ectx.refreshModelAuthStatus();\n break;\n\n case 'thread_changed': {\n ectx.showInfo(`Switched to thread: ${event.threadId}`);\n // Clear per-thread ephemeral state first so renderExistingMessages\n // and other downstream observers see clean state.\n await state.harness.setState({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n if (state.taskProgress) {\n state.taskProgress.updateTasks([]);\n state.ui.requestRender();\n }\n state.taskToolInsertIndex = -1;\n await ectx.renderExistingMessages();\n await state.harness.loadOMProgress();\n // Refresh git branch async so TUI status line reflects the current branch\n getCurrentGitBranchAsync(state.projectInfo.rootPath).then(freshBranch => {\n if (freshBranch) {\n state.projectInfo.gitBranch = freshBranch;\n ectx.updateStatusLine();\n }\n });\n // Update current thread title for status line display\n const threads = await state.harness.listThreads();\n const currentThread = threads.find((t: HarnessThread) => t.id === event.threadId);\n if (currentThread) {\n state.currentThreadTitle = currentThread.title;\n const metadata = currentThread.metadata as Record<string, unknown> | undefined;\n state.activeGithubPrSubscriptions = getGithubPrSubscriptionsFromMetadata(metadata);\n state.githubPrPollingActive = false;\n state.githubPrGradientAnimator?.stop();\n // Load the objective from the durable ThreadState slot, falling back to\n // the legacy thread-metadata goal for pre-migration threads.\n await state.goalManager.loadFromThread(state);\n if (!state.goalManager.getGoal()) {\n state.goalManager.loadFromThreadMetadata(metadata);\n }\n }\n break;\n }\n\n case 'thread_created': {\n ectx.showInfo(`Created thread: ${event.thread.id}`);\n // Update current thread title for status line display\n state.currentThreadTitle = event.thread.title;\n state.activeGithubPrSubscriptions = getGithubPrSubscriptionsFromMetadata(\n event.thread.metadata as Record<string, unknown> | undefined,\n );\n state.githubPrPollingActive = false;\n state.githubPrGradientAnimator?.stop();\n // If /goal started without an existing thread, save that pending goal to the\n // newly-created thread. Otherwise load the thread's own goal metadata so goals\n // do not bleed into unrelated new threads.\n const shouldPersistPendingGoal = state.goalManager?.consumePersistOnNextThreadCreate() ?? false;\n if (shouldPersistPendingGoal) {\n state.goalManager?.saveToThread(state).catch(() => {});\n } else {\n state.goalManager?.loadFromThreadMetadata(event.thread.metadata as Record<string, unknown> | undefined);\n }\n // Sync inherited resource-level settings\n const tState = state.harness.getState() as any;\n if (typeof tState?.escapeAsCancel === 'boolean') {\n state.editor.escapeEnabled = tState.escapeAsCancel;\n }\n // Clear per-thread ephemeral state so new threads start clean.\n await state.harness.setState({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n if (state.taskProgress) {\n state.taskProgress.updateTasks([]);\n }\n state.taskToolInsertIndex = -1;\n break;\n }\n\n case 'usage_update':\n // Token accumulation handled by Harness display state\n break;\n\n // Observational Memory events\n case 'om_status':\n // All state updates handled by Harness applyDisplayStateUpdate\n break;\n\n case 'om_observation_start':\n handleOMObservationStart(ectx, event.cycleId, event.tokensToObserve);\n break;\n\n case 'om_observation_end':\n handleOMObservationEnd(\n ectx,\n event.cycleId,\n event.durationMs,\n event.tokensObserved,\n event.observationTokens,\n event.observations,\n event.currentTask,\n event.suggestedResponse,\n );\n break;\n\n case 'om_observation_failed':\n handleOMFailed(ectx, event.cycleId, event.error, 'observation');\n break;\n\n case 'om_reflection_start':\n handleOMReflectionStart(ectx, event.cycleId, event.tokensToReflect);\n break;\n\n case 'om_reflection_end':\n handleOMReflectionEnd(ectx, event.cycleId, event.durationMs, event.compressedTokens, event.observations);\n break;\n\n case 'om_reflection_failed':\n handleOMFailed(ectx, event.cycleId, event.error, 'reflection');\n break;\n\n case 'om_buffering_start':\n handleOMBufferingStart(ectx, event.operationType, event.tokensToBuffer);\n break;\n\n case 'om_buffering_end':\n handleOMBufferingEnd(ectx, event.operationType, event.tokensBuffered, event.bufferedTokens, event.observations);\n break;\n\n case 'om_buffering_failed':\n handleOMBufferingFailed(ectx, event.operationType, event.error);\n break;\n\n case 'om_activation': {\n const activationEvent = event as Extract<HarnessEvent, { type: 'om_activation' }> & {\n triggeredBy?: 'threshold' | 'ttl' | 'provider_change';\n lastActivityAt?: number;\n ttlExpiredMs?: number;\n activateAfterIdle?: number;\n previousModel?: string;\n currentModel?: string;\n };\n handleOMActivation(\n ectx,\n activationEvent.operationType,\n activationEvent.tokensActivated,\n activationEvent.observationTokens,\n activationEvent.triggeredBy,\n activationEvent.activateAfterIdle,\n activationEvent.ttlExpiredMs,\n activationEvent.previousModel,\n activationEvent.currentModel,\n );\n break;\n }\n\n case 'om_thread_title_updated':\n state.currentThreadTitle = event.newTitle;\n handleOMThreadTitleUpdated(ectx, event.newTitle, event.oldTitle);\n ectx.updateStatusLine();\n break;\n\n case 'follow_up_queued': {\n ectx.updateStatusLine();\n break;\n }\n\n case 'workspace_ready':\n // Workspace initialized successfully - silent unless verbose\n break;\n\n case 'workspace_error':\n ectx.showError(`Workspace: ${event.error.message}`);\n break;\n\n case 'workspace_status_changed':\n if (event.status === 'error' && event.error) {\n ectx.showError(`Workspace: ${event.error.message}`);\n }\n break;\n\n // Subagent / Task delegation events\n case 'subagent_start':\n handleSubagentStart(ectx, event.toolCallId, event.agentType, event.task, event.modelId, event.forked);\n break;\n\n case 'subagent_tool_start':\n handleSubagentToolStart(ectx, event.toolCallId, event.subToolName, event.subToolArgs);\n break;\n\n case 'subagent_tool_end':\n handleSubagentToolEnd(ectx, event.toolCallId, event.subToolName, event.subToolResult, event.isError);\n break;\n\n case 'subagent_text_delta':\n // Text deltas are streamed but we don't render them incrementally\n // (the final result is shown via tool_end for the parent tool call)\n break;\n\n case 'subagent_end':\n handleSubagentEnd(ectx, event.toolCallId, event.isError, event.durationMs, event.result);\n break;\n\n case 'task_updated': {\n const tasks = event.tasks as TaskItemSnapshot[];\n if (state.taskProgress) {\n state.taskProgress.updateTasks(tasks ?? []);\n\n // Defensive cleanup for older or non-streaming task_write components.\n // Current task tools update the pinned component directly through task_updated.\n let insertIndex = -1;\n for (let i = state.allToolComponents.length - 1; i >= 0; i--) {\n const comp = state.allToolComponents[i];\n if ((comp as any).toolName === 'task_write') {\n insertIndex = state.chatContainer.children.indexOf(comp as any);\n state.chatContainer.removeChild(comp as any);\n state.allToolComponents.splice(i, 1);\n break;\n }\n }\n // Fall back to the position recorded during streaming (when no inline component was created)\n if (insertIndex === -1 && state.taskToolInsertIndex >= 0) {\n insertIndex = state.taskToolInsertIndex;\n state.taskToolInsertIndex = -1;\n }\n\n // When every task is completed the pinned list hides itself (the agent\n // narrates completion), so we don't leave a redundant completed-task\n // receipt in the transcript that reads like a second live list. We only\n // render an inline receipt when the list is explicitly cleared.\n const previousTasks = state.harness.getDisplayState().previousTasks;\n if (previousTasks.length > 0 && (!tasks || tasks.length === 0)) {\n // Tasks were cleared\n ectx.renderClearedTasksInline(previousTasks, insertIndex);\n }\n\n state.ui.requestRender();\n }\n break;\n }\n\n case 'goal_evaluation': {\n handleGoalEvaluation(ectx, event.payload);\n break;\n }\n\n case 'tool_suspended': {\n // Interactive built-in tools pause via the native tool-suspension primitive.\n // Route the suspension to the matching prompt UI using the suspend payload;\n // the UI resumes the tool by calling harness.respondToToolSuspension({ toolCallId }).\n const payload = (event.suspendPayload ?? {}) as Record<string, unknown>;\n if (event.toolName === 'request_access' || payload.kind === 'sandbox_access_request') {\n await handleSandboxAccessRequest(\n ectx,\n event.toolCallId,\n String(payload.path ?? ''),\n String(payload.reason ?? ''),\n );\n } else if (event.toolName === 'ask_user') {\n await handleAskQuestion(\n ectx,\n event.toolCallId,\n String(payload.question ?? ''),\n payload.options as Array<{ label: string; description?: string }> | undefined,\n payload.selectionMode as AskUserSelectionMode | undefined,\n );\n } else if (event.toolName === 'submit_plan') {\n await handlePlanApproval(ectx, event.toolCallId, String(payload.title ?? ''), String(payload.plan ?? ''));\n }\n break;\n }\n\n case 'display_state_changed':\n // The Harness emits this after every event with the updated display state.\n // Use it as the single trigger for status-line re-renders since all the\n // fields it reads (isRunning, omProgress, buffering flags) are now\n // maintained by the Harness.\n ectx.updateStatusLine();\n break;\n }\n}\n","import { promises as fs } from 'node:fs';\nimport * as path from 'node:path';\nimport { parse as parseYaml } from 'yaml';\nimport { DEFAULT_CONFIG_DIR } from '../constants.js';\n\n/**\n * Metadata for a slash command\n */\nexport interface SlashCommandMetadata {\n /** Command name (e.g., \"git:commit\") */\n name: string;\n /** Human-readable description */\n description: string;\n /** The command template with variables */\n template: string;\n /** Source file path */\n sourcePath: string;\n /** Namespace derived from directory structure */\n namespace?: string;\n /** Whether this command should also be exposed as /goal/<name> */\n goal?: boolean;\n}\n\n/**\n * Parse a command file and extract metadata and template\n * Supports both frontmatter-based and plain markdown files\n */\nexport async function parseCommandFile(filePath: string, baseDir?: string): Promise<SlashCommandMetadata | null> {\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n const trimmedContent = content.trim();\n\n // Check if file has frontmatter (starts with ---)\n if (!trimmedContent.startsWith('---')) {\n // No frontmatter - treat entire file as template\n // Derive name from file path\n const name = baseDir ? extractCommandName(filePath, baseDir) : path.basename(filePath, '.md');\n\n return {\n name,\n description: '',\n template: content,\n sourcePath: filePath,\n };\n }\n\n // Split frontmatter and template\n const parts = content.split('---');\n if (parts.length < 3) {\n return null;\n }\n\n const frontmatter = parts[1]!.trim();\n const template = parts.slice(2).join('---').trim();\n\n // Parse YAML frontmatter\n const metadata = parseYaml(frontmatter) as Record<string, unknown>;\n\n // Derive name from file path if not specified in frontmatter\n let name: string;\n if (typeof metadata?.name === 'string' && metadata.name) {\n name = metadata.name;\n } else if (baseDir) {\n name = extractCommandName(filePath, baseDir);\n } else {\n name = path.basename(filePath, '.md');\n }\n\n return {\n name,\n description: typeof metadata?.description === 'string' ? metadata.description : '',\n template,\n sourcePath: filePath,\n namespace: typeof metadata?.namespace === 'string' ? metadata.namespace : undefined,\n goal: metadata?.goal === true,\n };\n } catch (error) {\n console.error(`Error parsing command file ${filePath}:`, error);\n return null;\n }\n}\n\n/**\n * Extract command name from file path\n * Converts path like \"git/commit.md\" to \"git:commit\"\n */\nexport function extractCommandName(filePath: string, baseDir: string): string {\n const relativePath = path.relative(baseDir, filePath);\n const dirName = path.dirname(relativePath);\n const baseName = path.basename(relativePath, '.md');\n\n if (dirName === '.' || dirName === '') {\n return baseName;\n }\n\n // Replace path separators with colons for namespacing\n const namespace = dirName.replace(/[\\\\/]/g, ':');\n return `${namespace}:${baseName}`;\n}\n\n/**\n * Recursively scan a directory for command files.\n * @param dirPath - Current directory to scan\n * @param rootDir - Original root commands directory (used for namespace derivation).\n * When omitted the first call sets it to dirPath.\n */\nexport async function scanCommandDirectory(dirPath: string, rootDir?: string): Promise<SlashCommandMetadata[]> {\n const baseDir = rootDir ?? dirPath;\n const commands: SlashCommandMetadata[] = [];\n\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n\n if (entry.isDirectory()) {\n // Recursively scan subdirectories, preserving the root directory for namespace derivation\n const subCommands = await scanCommandDirectory(fullPath, baseDir);\n commands.push(...subCommands);\n } else if (entry.isFile() && entry.name.endsWith('.md')) {\n // Parse markdown command files, passing the root commands dir as baseDir for name derivation\n const command = await parseCommandFile(fullPath, baseDir);\n if (command) {\n commands.push(command);\n }\n }\n }\n } catch {\n // Directory doesn't exist or can't be read - silently skip\n }\n\n return commands;\n}\n/**\n * Load custom slash commands from all configured directories\n * Priority: mastra project > claude project > opencode project > mastra user > claude user > opencode user\n */\nexport async function loadCustomCommands(\n projectDir?: string,\n configDirName = DEFAULT_CONFIG_DIR,\n): Promise<SlashCommandMetadata[]> {\n // Use a Map so later (higher priority) sources override earlier ones with the same name\n const commandMap = new Map<string, SlashCommandMetadata>();\n\n const addCommands = (newCommands: SlashCommandMetadata[]) => {\n for (const cmd of newCommands) {\n commandMap.set(cmd.name, cmd);\n }\n };\n\n const homeDir = process.env.HOME || process.env.USERPROFILE;\n\n // 1. Load from opencode user directory ~/.opencode/command (lowest priority)\n if (homeDir) {\n const opencodeUserDir = path.join(homeDir, '.opencode', 'command');\n const opencodeUserCommands = await scanCommandDirectory(opencodeUserDir);\n addCommands(opencodeUserCommands);\n }\n\n // 2. Load from claude user directory ~/.claude/commands (Claude Code compat)\n if (homeDir) {\n const claudeUserDir = path.join(homeDir, '.claude', 'commands');\n const claudeUserCommands = await scanCommandDirectory(claudeUserDir);\n addCommands(claudeUserCommands);\n }\n\n // 3. Load from mastra user directory ~/<configDirName>/commands\n if (homeDir) {\n const mastraUserDir = path.join(homeDir, configDirName, 'commands');\n const mastraUserCommands = await scanCommandDirectory(mastraUserDir);\n addCommands(mastraUserCommands);\n }\n\n // 4. Load from opencode project directory .opencode/command\n if (projectDir) {\n const opencodeProjectDir = path.join(projectDir, '.opencode', 'command');\n const opencodeProjectCommands = await scanCommandDirectory(opencodeProjectDir);\n addCommands(opencodeProjectCommands);\n }\n\n // 5. Load from claude project directory .claude/commands (Claude Code compat)\n if (projectDir) {\n const claudeProjectDir = path.join(projectDir, '.claude', 'commands');\n const claudeProjectCommands = await scanCommandDirectory(claudeProjectDir);\n addCommands(claudeProjectCommands);\n }\n\n // 6. Load from mastra project directory <configDirName>/commands (highest priority)\n if (projectDir) {\n const mastraProjectDir = path.join(projectDir, configDirName, 'commands');\n const mastraProjectCommands = await scanCommandDirectory(mastraProjectDir);\n addCommands(mastraProjectCommands);\n }\n\n return Array.from(commandMap.values());\n}\n\n/**\n * Get the commands directory path for a project\n */\nexport function getProjectCommandsDir(projectDir: string, configDirName = DEFAULT_CONFIG_DIR): string {\n return path.join(projectDir, configDirName, 'commands');\n}\n\n/**\n * Initialize a commands directory with an example command\n */\nexport async function initCommandsDirectory(projectDir: string, configDirName = DEFAULT_CONFIG_DIR): Promise<void> {\n const commandsDir = getProjectCommandsDir(projectDir, configDirName);\n\n try {\n await fs.mkdir(commandsDir, { recursive: true });\n\n // Create an example command\n const examplePath = path.join(commandsDir, 'example.md');\n const exampleContent = `---\nname: example\ndescription: An example slash command\n---\n\nThis is an example slash command template.\nYou can use variables like \\$ARGUMENTS or \\$1, \\$2 for positional args.\nYou can also include file content with @filename.\nShell commands with !command will be executed and output included.\n`;\n\n try {\n await fs.access(examplePath);\n // File already exists, don't overwrite\n } catch {\n await fs.writeFile(examplePath, exampleContent, 'utf-8');\n }\n } catch (error) {\n console.error('Error initializing commands directory:', error);\n }\n}\n","/**\n * ASCII art banner for the Mastra Code TUI header.\n * Renders \"MASTRA CODE\" or \"MASTRA\" in block-letter art with a green gradient.\n */\nimport chalk from 'chalk';\n\nimport { theme } from '../theme.js';\n\n// Mastra brand green gradient stops (left → right)\nconst GRADIENT_STOPS = ['#085314', '#0d8020', '#16c858', '#62f69d', '#a1fac7'];\n\n// Full \"MASTRA CODE\" banner (42 chars wide)\nconst FULL_ART = [\n '█▀▄▀█ ▄▀█ █▀ ▀█▀ █▀█ ▄▀█ █▀▀ █▀█ █▀▄ █▀▀',\n '█ ▀ █ █▀█ ▀█ █ █▀▄ █▀█ █ █ █ █ █ █▀▀',\n '▀ ▀ ▀ ▀ ▀▀ ▀ ▀ ▀ ▀ ▀ ▀▀▀ ▀▀▀ ▀▀ ▀▀▀',\n];\n\n// Short \"MASTRA\" banner (24 chars wide)\nconst SHORT_ART = ['█▀▄▀█ ▄▀█ █▀ ▀█▀ █▀█ ▄▀█', '█ ▀ █ █▀█ ▀█ █ █▀▄ █▀█', '▀ ▀ ▀ ▀ ▀▀ ▀ ▀ ▀ ▀ ▀'];\n\n/**\n * Interpolate between two hex colors.\n */\nfunction lerpColor(hex1: string, hex2: string, t: number): [number, number, number] {\n const r1 = parseInt(hex1.slice(1, 3), 16);\n const g1 = parseInt(hex1.slice(3, 5), 16);\n const b1 = parseInt(hex1.slice(5, 7), 16);\n const r2 = parseInt(hex2.slice(1, 3), 16);\n const g2 = parseInt(hex2.slice(3, 5), 16);\n const b2 = parseInt(hex2.slice(5, 7), 16);\n return [Math.round(r1 + (r2 - r1) * t), Math.round(g1 + (g2 - g1) * t), Math.round(b1 + (b2 - b1) * t)];\n}\n\n/**\n * Color a single character based on its horizontal position in the gradient.\n */\nfunction gradientChar(ch: string, colIdx: number, totalCols: number): string {\n if (ch === ' ') return ' ';\n const t = totalCols <= 1 ? 0.5 : colIdx / (totalCols - 1);\n const segmentCount = GRADIENT_STOPS.length - 1;\n const segment = Math.min(Math.floor(t * segmentCount), segmentCount - 1);\n const frac = t * segmentCount - segment;\n const [r, g, b] = lerpColor(GRADIENT_STOPS[segment]!, GRADIENT_STOPS[segment + 1]!, frac);\n return chalk.rgb(r, g, b)(ch);\n}\n\n/**\n * Apply left-to-right purple gradient to a line of text.\n */\nfunction colorLine(line: string): string {\n const chars = [...line];\n return chars.map((ch, i) => gradientChar(ch, i, chars.length)).join('');\n}\n\n/**\n * Render the banner header for the TUI.\n *\n * @param version - App version string (e.g. \"0.2.0\")\n * @param appName - App name. Block art is only used for \"Mastra Code\" (default).\n * @returns Styled multi-line string ready for display.\n */\nexport function renderBanner(version: string, appName?: string): string {\n const name = appName || 'Mastra Code';\n\n // Custom app names get the simple text format (no Mastra branding)\n if (name !== 'Mastra Code') {\n return theme.fg('accent', '◆') + ' ' + theme.bold(theme.fg('accent', name)) + theme.fg('dim', ` v${version}`);\n }\n\n const cols = process.stdout.columns || 80;\n\n // Narrow terminal — compact single line\n if (cols < 30) {\n return (\n theme.fg('accent', '◆') + ' ' + theme.bold(theme.fg('accent', 'Mastra Code')) + theme.fg('dim', ` v${version}`)\n );\n }\n\n // Select art based on available width\n const art = cols >= 50 ? FULL_ART : SHORT_ART;\n const coloredLines = art.map(line => colorLine(line));\n\n // Append version below the art\n coloredLines.push(theme.fg('dim', `v${version}`));\n\n return coloredLines.join('\\n');\n}\n","/**\n * Live idle-time indicator shown above the user input after an agent run completes.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport { BOX_INDENT, theme } from '../theme.js';\n\nconst MINUTE_MS = 60_000;\nconst HOUR_MINUTES = 60;\nconst DAY_MINUTES = HOUR_MINUTES * 24;\nconst MONTH_MINUTES = DAY_MINUTES * 30;\nconst YEAR_MINUTES = DAY_MINUTES * 365;\n\nexport class IdleCounterComponent extends Container {\n private idleStartedAt?: number;\n private textChild: Text;\n\n constructor() {\n super();\n this.textChild = new Text('', BOX_INDENT, 0);\n this.addChild(this.textChild);\n }\n\n setIdleStartedAt(idleStartedAt: number | undefined, now = Date.now()): void {\n this.idleStartedAt = idleStartedAt;\n this.update(now);\n }\n\n update(now = Date.now()): void {\n if (this.idleStartedAt === undefined) {\n this.textChild.setText('');\n return;\n }\n\n const idleMinutes = Math.floor((now - this.idleStartedAt) / MINUTE_MS);\n if (idleMinutes < 1) {\n this.textChild.setText('');\n return;\n }\n\n this.textChild.setText(theme.fg('dim', ` ${formatIdleDuration(idleMinutes)} idle`));\n }\n\n render(width: number): string[] {\n const rendered = super.render(width);\n return rendered.length > 0 ? rendered : [''];\n }\n}\n\nexport function formatIdleDuration(totalMinutes: number): string {\n const minutes = Math.max(1, Math.floor(totalMinutes));\n const units = [\n { name: 'year', minutes: YEAR_MINUTES },\n { name: 'month', minutes: MONTH_MINUTES },\n { name: 'day', minutes: DAY_MINUTES },\n { name: 'hour', minutes: HOUR_MINUTES },\n { name: 'minute', minutes: 1 },\n ];\n\n let remaining = minutes;\n const parts: string[] = [];\n\n for (const unit of units) {\n const value = Math.floor(remaining / unit.minutes);\n if (value === 0) continue;\n\n parts.push(formatUnit(value, unit.name));\n remaining %= unit.minutes;\n\n if (parts.length === 2) break;\n }\n\n return parts.join(' ');\n}\n\nfunction formatUnit(value: number, unit: string): string {\n return `${value} ${unit}${value === 1 ? '' : 's'}`;\n}\n","/**\n * Task progress component for the TUI.\n * Shows a persistent, compact display of the current task list.\n * Hidden when no tasks exist OR when all tasks are completed.\n * Renders between status and editor.\n */\nimport { Container, Text, Spacer, visibleWidth } from '@earendil-works/pi-tui';\nimport type { TaskItemInput } from '@mastra/core/harness';\nimport chalk from 'chalk';\nimport { getTermWidth, theme } from '../theme.js';\nimport { truncateAnsi } from './ansi.js';\n\nexport class TaskProgressComponent extends Container {\n private tasks: TaskItemInput[] = [];\n private quietMode = false;\n\n constructor() {\n super();\n this.rebuildDisplay();\n }\n\n /**\n * Replace the entire task list and re-render.\n */\n updateTasks(tasks: TaskItemInput[]): void {\n this.tasks = tasks;\n this.rebuildDisplay();\n }\n\n setQuietMode(enabled: boolean): void {\n this.quietMode = enabled;\n this.rebuildDisplay();\n }\n\n /**\n * Get the current task list (read-only copy).\n */\n getTasks(): TaskItemInput[] {\n return [...this.tasks];\n }\n\n private rebuildDisplay(): void {\n this.clear();\n\n const completed = this.tasks.filter(t => t.status === 'completed').length;\n const total = this.tasks.length;\n const hasVisibleTasks = total > 0 && completed !== total;\n\n if (!hasVisibleTasks) {\n this.addChild(new Spacer(1));\n return;\n }\n\n this.addChild(new Spacer(1));\n\n if (this.quietMode) {\n for (const line of this.formatQuietTaskLines(completed, total)) {\n this.addChild(new Text(line, 0, 0));\n }\n return;\n }\n\n // Progress header\n const headerText =\n ' ' + theme.bold(theme.fg('accent', 'Tasks')) + theme.fg('dim', ` [${completed}/${total} completed]`);\n\n this.addChild(new Text(headerText, 0, 0));\n\n // Render each task\n for (const task of this.tasks) {\n this.addChild(new Text(this.formatTaskLine(task), 0, 0));\n }\n }\n\n private formatQuietTaskLines(completed: number, total: number): string[] {\n const prefix = ' ' + theme.fg('muted', `${completed}/${total}`);\n const prefixWidth = visibleWidth(prefix);\n const continuationPrefix = ' '.repeat(prefixWidth);\n const maxWidth = Math.max(20, getTermWidth());\n const itemSeparator = ' ';\n const separatorWidth = itemSeparator.length;\n const lines: string[] = [prefix];\n\n for (const task of this.tasks) {\n const item = this.formatQuietTaskItem(task);\n const currentLine = lines[lines.length - 1]!;\n const currentWidth = visibleWidth(currentLine);\n const separator = currentWidth === 0 ? '' : itemSeparator;\n const sepWidth = currentWidth === 0 ? 0 : separatorWidth;\n const candidateWidth = currentWidth + sepWidth + visibleWidth(item);\n\n if (candidateWidth <= maxWidth) {\n lines[lines.length - 1] = `${currentLine}${separator}${item}`;\n continue;\n }\n\n const itemLineWidth = maxWidth - prefixWidth - separatorWidth;\n lines.push(`${continuationPrefix}${itemSeparator}${truncateAnsi(item, itemLineWidth)}`);\n }\n\n return lines;\n }\n\n private formatQuietTaskItem(task: TaskItemInput): string {\n switch (task.status) {\n case 'completed': {\n const icon = theme.fg('dim', '✓');\n const text = chalk.strikethrough(theme.fg('dim', task.content));\n return `${icon} ${text}`;\n }\n case 'in_progress': {\n const icon = theme.fg('warning', '▶');\n const text = theme.bold(theme.fg('warning', task.activeForm));\n return `${icon} ${text}`;\n }\n case 'pending': {\n const icon = theme.fg('dim', '○');\n const text = theme.fg('muted', task.content);\n return `${icon} ${text}`;\n }\n }\n }\n\n private formatTaskLine(task: TaskItemInput): string {\n const indent = ' ';\n\n switch (task.status) {\n case 'completed': {\n const icon = theme.fg('success', '\\u2713');\n const text = chalk.hex(theme.getTheme().success).strikethrough(task.content);\n return `${indent}${icon} ${text}`;\n }\n case 'in_progress': {\n const icon = theme.fg('warning', '\\u25B6');\n const text = theme.bold(theme.fg('warning', task.activeForm));\n return `${indent}${icon} ${text}`;\n }\n case 'pending': {\n const icon = theme.fg('dim', '\\u25CB');\n const text = theme.fg('dim', task.content);\n return `${indent}${icon} ${text}`;\n }\n }\n }\n}\n","/**\n * TUI setup: keyboard shortcuts, layout building, autocomplete, key handlers.\n */\nimport { execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\n\nimport { CombinedAutocompleteProvider, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { SlashCommand } from '@earendil-works/pi-tui';\nimport type { HarnessEventListener } from '@mastra/core/harness';\n\nimport { getUserId } from '../utils/project.js';\nimport { loadCustomCommands } from '../utils/slash-command-loader.js';\nimport { ThreadLockError } from '../utils/thread-lock.js';\nimport { isUserInvocable } from './commands/skill-filters.js';\nimport { renderBanner } from './components/banner.js';\nimport { IdleCounterComponent } from './components/idle-counter.js';\nimport { TaskProgressComponent } from './components/task-progress.js';\nimport { showError, showInfo } from './display.js';\nimport { isGoalJudgeInputLocked, showGoalJudgeInputLockInfo } from './goal-input-lock.js';\nimport type { TUIState } from './state.js';\nimport { updateStatusLine } from './status-line.js';\nimport { theme } from './theme.js';\n\n// =============================================================================\n// Keyboard Shortcuts\n// =============================================================================\n\nexport function setupKeyboardShortcuts(\n state: TUIState,\n callbacks: {\n stop: () => void;\n doubleCtrlCMs: number;\n queueFollowUpMessage: (text: string) => void;\n },\n): void {\n // Ctrl+C / Escape - abort if running, clear input if idle, double-tap always exits\n state.editor.onAction('clear', () => {\n const now = Date.now();\n if (now - state.lastCtrlCTime < callbacks.doubleCtrlCMs) {\n // Double Ctrl+C → exit\n callbacks.stop();\n process.exit(0);\n }\n state.lastCtrlCTime = now;\n\n if (abortActiveGoalJudge(state)) {\n return;\n }\n\n if (state.pendingApprovalDismiss) {\n // Dismiss active approval dialog and abort\n state.pendingApprovalDismiss();\n state.activeInlinePlanApproval = undefined;\n state.activeInlineQuestion = undefined;\n state.pendingInlineQuestions.length = 0;\n state.userInitiatedAbort = true;\n state.harness.abort();\n } else if (state.harness.isRunning() || state.harness.hasPendingSuspensions()) {\n // Clean up active inline components on abort. hasPendingSuspensions covers\n // the case where the run is parked in a tool suspend() (e.g. ask_user) —\n // isRunning() is false there because the AbortController was nulled, but the\n // run is still pending and must be abortable.\n state.activeInlinePlanApproval = undefined;\n state.activeInlineQuestion = undefined;\n state.pendingInlineQuestions.length = 0;\n state.pendingAskUserComponents?.clear();\n state.userInitiatedAbort = true;\n state.harness.abort();\n } else {\n const current = state.editor.getText();\n if (current.length > 0) {\n state.lastClearedText = current;\n state.editor.setText('');\n }\n state.ui.requestRender();\n }\n });\n\n // Ctrl+Z - suspend process (SIGTSTP)\n state.editor.onAction('suspend', () => {\n if (process.platform === 'win32') {\n showInfo(state, 'Suspend is not supported on Windows');\n return;\n }\n\n state.ui.stop();\n const onContinue = () => {\n state.ui.start();\n state.ui.requestRender();\n };\n process.once('SIGCONT', onContinue);\n try {\n process.kill(process.pid, 'SIGTSTP');\n } catch {\n process.off('SIGCONT', onContinue);\n state.ui.start();\n state.ui.requestRender();\n showError(state, 'Unable to suspend in the current terminal');\n }\n });\n\n // Alt+Z - undo last clear (restore editor text)\n state.editor.onAction('undo', () => {\n if (state.lastClearedText && state.editor.getText().length === 0) {\n state.editor.setText(state.lastClearedText);\n state.lastClearedText = '';\n state.ui.requestRender();\n }\n });\n\n // Ctrl+D - exit when editor is empty\n state.editor.onCtrlD = () => {\n callbacks.stop();\n process.exit(0);\n };\n\n // Ctrl+T - toggle thinking blocks visibility\n state.editor.onAction('toggleThinking', () => {\n state.hideThinkingBlock = !state.hideThinkingBlock;\n state.ui.requestRender();\n });\n\n // Ctrl+E - expand/collapse tool outputs\n state.editor.onAction('expandTools', () => {\n state.toolOutputExpanded = !state.toolOutputExpanded;\n for (const tool of state.allToolComponents) {\n tool.setExpanded(state.toolOutputExpanded);\n }\n for (const sc of state.allSlashCommandComponents) {\n sc.setExpanded(state.toolOutputExpanded);\n }\n for (const reminder of state.allSystemReminderComponents) {\n reminder.setExpanded(state.toolOutputExpanded);\n }\n for (const shell of state.allShellComponents) {\n shell.setExpanded(state.toolOutputExpanded);\n }\n state.ui.requestRender();\n });\n\n // Shift+Tab - cycle harness modes\n state.editor.onAction('cycleMode', async () => {\n // Block mode switching while the agent is active or plan approval is pending\n if (state.harness.isRunning()) {\n showInfo(state, 'Wait for the agent to finish first');\n return;\n }\n if (state.activeInlinePlanApproval) {\n showInfo(state, 'Resolve the plan approval first');\n return;\n }\n\n const modes = state.harness.listModes();\n if (modes.length <= 1) return;\n const currentId = state.harness.getCurrentModeId();\n const currentIndex = modes.findIndex(m => m.id === currentId);\n const nextIndex = (currentIndex + 1) % modes.length;\n const nextMode = modes[nextIndex]!;\n await state.harness.switchMode({ modeId: nextMode.id });\n });\n\n // Ctrl+Y - toggle YOLO mode\n state.editor.onAction('toggleYolo', () => {\n const current = (state.harness.getState() as any).yolo === true;\n state.harness.setState({ yolo: !current } as any);\n showInfo(state, current ? 'YOLO mode off' : 'YOLO mode on');\n });\n\n // Enter - submit immediately. The submit handler decides whether active input\n // should be sent as a signal or queued for cases signals cannot handle.\n state.editor.onAction('followUp', () => {\n if (isGoalJudgeInputLocked(state)) {\n showGoalJudgeInputLockInfo(state);\n state.ui.requestRender();\n return true;\n }\n\n state.editor.onSubmit?.(state.editor.getExpandedText());\n return true;\n });\n\n // Ctrl+F - explicitly queue a follow-up while a run is active. Enter now sends\n // normal messages as signals during active runs; this preserves manual FIFO\n // queueing for slash commands, image messages, and messages the user wants to\n // hold until the current run finishes.\n state.editor.onAction('queueFollowUp', () => {\n if (isGoalJudgeInputLocked(state)) {\n showGoalJudgeInputLockInfo(state);\n state.ui.requestRender();\n return true;\n }\n\n const text = state.editor.getExpandedText();\n if (!state.harness.isRunning()) {\n state.editor.onSubmit?.(text);\n return true;\n }\n\n const trimmedText = text.trim();\n if (!trimmedText) {\n return true;\n }\n\n state.editor.addToHistory(text);\n state.editor.setText('');\n callbacks.queueFollowUpMessage(text);\n return true;\n });\n}\n\nfunction abortActiveGoalJudge(state: TUIState): boolean {\n const activeGoalJudge = state.activeGoalJudge;\n if (!activeGoalJudge) return false;\n\n state.userInitiatedAbort = true;\n activeGoalJudge.abortController.abort();\n activeGoalJudge.component.setInterrupted();\n // Esc during an in-loop goal evaluation pauses the goal so it does not\n // continue on the next iteration. Persist the paused state immediately so a\n // thread switch or exit before the next save does not reload the old active\n // objective and effectively undo the pause. `saveToThread` is best-effort, so\n // run it fire-and-forget to keep this abort handler synchronous.\n state.goalManager.pause();\n void state.goalManager.saveToThread(state);\n state.activeGoalJudge = undefined;\n state.ui.requestRender();\n return true;\n}\n\n// =============================================================================\n// Layout\n// =============================================================================\n\nexport function buildLayout(state: TUIState, refreshModelAuthStatus: () => Promise<void>): void {\n // Add header\n const appName = state.options.appName || 'Mastra Code';\n const version = state.options.version || '0.1.0';\n\n const banner = renderBanner(version, appName);\n\n // Project frontmatter\n const frontmatter = [\n `Project: ${state.projectInfo.name}`,\n `Resource ID: ${state.projectInfo.resourceId}`,\n state.projectInfo.gitBranch ? `Branch: ${state.projectInfo.gitBranch}` : null,\n state.projectInfo.isWorktree ? `Worktree of: ${state.projectInfo.mainRepoPath}` : null,\n `User: ${getUserId(state.projectInfo.rootPath)}`,\n ]\n .filter(Boolean)\n .map(line => theme.fg('muted', line as string))\n .join('\\n');\n\n const sep = theme.fg('dim', ' · ');\n const hintParts: string[] = [];\n if (state.harness.listModes().length > 1) {\n hintParts.push(`${theme.fg('accent', '⇧+Tab')} ${theme.fg('muted', 'cycle modes')}`);\n }\n hintParts.push(`${theme.fg('accent', '/help')} ${theme.fg('muted', 'info & shortcuts')}`);\n const instructions = ` ${hintParts.join(sep)}`;\n\n state.ui.addChild(new Spacer(1));\n state.ui.addChild(new Text(banner, 1, 0));\n state.ui.addChild(new Text(frontmatter, 1, 0));\n state.ui.addChild(new Spacer(1));\n state.ui.addChild(new Text(instructions, 0, 0));\n state.ui.addChild(new Spacer(1));\n\n // Add main containers\n state.ui.addChild(state.chatContainer);\n // Task progress (between chat and editor, visible only when tasks exist)\n state.taskProgress = new TaskProgressComponent();\n state.taskProgress.setQuietMode(state.quietMode);\n state.ui.addChild(state.taskProgress);\n state.ui.addChild(state.editorContainer);\n state.idleCounter = new IdleCounterComponent();\n state.editorContainer.addChild(state.idleCounter);\n state.editorContainer.addChild(state.editor);\n\n // Add footer with two-line status\n state.statusLine = new Text('', 0, 0);\n state.memoryStatusLine = new Text('', 0, 0);\n state.footer.addChild(state.statusLine);\n state.footer.addChild(state.memoryStatusLine);\n state.ui.addChild(state.footer);\n updateStatusLine(state);\n refreshModelAuthStatus();\n\n // Set focus to editor\n state.ui.setFocus(state.editor);\n}\n\n// =============================================================================\n// Autocomplete\n// =============================================================================\n\n/** Detect the fd binary (fast file finder) for @ fuzzy file autocomplete */\nfunction detectFdPath(): string | null {\n const whichCmd = process.platform === 'win32' ? 'where' : 'which';\n for (const bin of ['fd', 'fdfind']) {\n try {\n const resolved = execFileSync(whichCmd, [bin], { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] })\n .trim()\n .split(/\\r?\\n/)[0];\n if (resolved) return resolved;\n } catch {\n // not found, try next\n }\n }\n return null;\n}\n\nexport function setupAutocomplete(state: TUIState): void {\n const slashCommands: SlashCommand[] = [\n { name: 'new', description: 'Start a new thread' },\n { name: 'clone', description: 'Clone the current thread' },\n { name: 'thread', description: 'Show current thread info' },\n { name: 'threads', description: 'Switch between threads' },\n { name: 'models', description: 'Switch model pack' },\n { name: 'custom-providers', description: 'Manage custom providers and models' },\n { name: 'subagents', description: 'Configure subagent model defaults' },\n { name: 'om', description: 'Configure Observational Memory models' },\n { name: 'think', description: 'Set thinking (off|low|medium|high|xhigh|status)' },\n { name: 'login', description: 'Login with OAuth provider' },\n { name: 'skills', description: 'List available skills' },\n { name: 'skill/', description: 'Activate a skill by name' },\n { name: 'cost', description: 'Show token usage and estimated costs' },\n { name: 'diff', description: 'Show modified files or git diff' },\n { name: 'name', description: 'Rename current thread' },\n {\n name: 'resource',\n description: 'Show/switch resource ID (tag for sharing)',\n },\n { name: 'logout', description: 'Logout from OAuth provider' },\n { name: 'hooks', description: 'Show/reload configured hooks' },\n { name: 'mcp', description: 'Show/reload MCP server connections' },\n {\n name: 'thread:tag-dir',\n description: 'Tag current thread with this directory',\n },\n {\n name: 'sandbox',\n description: 'Manage allowed paths (add/remove directories)',\n },\n {\n name: 'permissions',\n description: 'View/manage tool approval permissions',\n },\n {\n name: 'settings',\n description: 'General settings (notifications, YOLO, thinking)',\n },\n {\n name: 'yolo',\n description: 'Toggle YOLO mode (auto-approve all tools)',\n },\n { name: 'review', description: 'Review a GitHub pull request' },\n { name: 'report-issue', description: 'Open or browse mastracode issues' },\n { name: 'setup', description: 'Re-run the setup wizard' },\n { name: 'browser', description: 'Configure browser automation' },\n { name: 'theme', description: 'Switch color theme (auto/dark/light)' },\n { name: 'update', description: 'Check for and install updates' },\n { name: 'api-keys', description: 'Manage API keys for model providers' },\n { name: 'observability', description: 'Configure cloud observability' },\n {\n name: 'github',\n description: 'Subscribe/sync/debug GitHub PR signals',\n getArgumentCompletions: (argumentPrefix: string) =>\n [\n { value: 'subscribe', label: 'subscribe', description: 'Subscribe this thread to a GitHub PR' },\n { value: 'unsubscribe', label: 'unsubscribe', description: 'Unsubscribe this thread from a GitHub PR' },\n { value: 'sync', label: 'sync', description: 'Immediately sync subscribed GitHub PRs' },\n { value: 'debug', label: 'debug', description: 'Show GitHub signal subscription debug info' },\n ].filter(command => command.value.startsWith(argumentPrefix.toLowerCase())),\n },\n {\n name: 'goal',\n description: 'Set/manage persistent goal (Ralph loop)',\n getArgumentCompletions: (argumentPrefix: string) =>\n [\n { value: 'status', label: 'status', description: 'Show current goal status' },\n { value: 'pause', label: 'pause', description: 'Pause the goal continuation loop' },\n { value: 'resume', label: 'resume', description: 'Resume the current goal' },\n { value: 'clear', label: 'clear', description: 'Clear the current goal' },\n { value: 'judge', label: 'judge', description: 'Set the goal judge model and max attempts' },\n ].filter(command => command.value.startsWith(argumentPrefix.toLowerCase())),\n },\n { name: 'exit', description: 'Exit the TUI' },\n { name: 'help', description: 'Show available commands' },\n ];\n\n // Only show /mode if there's more than one mode\n const modes = state.harness.listModes();\n if (modes.length > 1) {\n slashCommands.push({ name: 'mode', description: 'Switch agent mode' });\n }\n\n // Add custom slash commands to the list with // prefixes so they remain\n // visually distinct from built-in slash commands in autocomplete.\n for (const customCmd of state.customSlashCommands) {\n slashCommands.push({\n name: `/${customCmd.name}`,\n description: customCmd.description || `Custom: ${customCmd.name}`,\n });\n if (customCmd.goal) {\n slashCommands.push({\n name: `goal/${customCmd.name}`,\n description: customCmd.description ? `Goal: ${customCmd.description}` : `Goal: ${customCmd.name}`,\n });\n }\n }\n\n for (const skill of state.skillCommands) {\n slashCommands.push({\n name: `skill/${skill.name}`,\n description: skill.description ? `Skill: ${skill.description}` : `Skill: ${skill.name}`,\n });\n }\n\n for (const skill of state.goalSkillCommands) {\n slashCommands.push({\n name: `goal/${skill.name}`,\n description: skill.description ? `Goal skill: ${skill.description}` : `Goal skill: ${skill.name}`,\n });\n }\n\n const fdPath = detectFdPath();\n state.autocompleteProvider = new CombinedAutocompleteProvider(slashCommands, process.cwd(), fdPath);\n state.editor.setAutocompleteProvider(state.autocompleteProvider);\n}\n\n// =============================================================================\n// Custom Slash Commands Loading\n// =============================================================================\n\nexport async function loadCustomSlashCommands(state: TUIState): Promise<void> {\n try {\n // Load from all sources (global and local)\n const globalCommands = await loadCustomCommands();\n const localCommands = await loadCustomCommands(process.cwd());\n\n // Merge commands, with local taking precedence over global for same names\n const commandMap = new Map<string, (typeof globalCommands)[number]>();\n\n // Add global commands first\n for (const cmd of globalCommands) {\n commandMap.set(cmd.name, cmd);\n }\n\n // Add local commands (will override global if same name)\n for (const cmd of localCommands) {\n commandMap.set(cmd.name, cmd);\n }\n\n state.customSlashCommands = Array.from(commandMap.values());\n } catch {\n state.customSlashCommands = [];\n }\n // Skills load via `refreshSkillsAutocomplete` so this never blocks on workspace resolution.\n}\n\n/**\n * Populate `state.skillCommands` and `state.goalSkillCommands` from the\n * workspace. Safe to call before the workspace is resolved (returns empty\n * lists) and again later once it is (resolves and refreshes).\n */\nexport async function loadSkillCommands(state: TUIState): Promise<void> {\n try {\n let workspace = state.harness.getWorkspace() ?? state.workspace;\n if (!workspace && state.harness.hasWorkspace()) {\n workspace = await state.harness.resolveWorkspace();\n }\n if (!workspace?.skills) {\n state.skillCommands = [];\n state.goalSkillCommands = [];\n return;\n }\n const skills = (await workspace.skills.list()).filter(isUserInvocable);\n state.skillCommands = skills;\n state.goalSkillCommands = skills.filter(skill => skill.metadata?.goal === true);\n } catch {\n state.skillCommands = [];\n state.goalSkillCommands = [];\n }\n}\n\n/** Reload skills and rebuild the autocomplete provider. */\nexport async function refreshSkillsAutocomplete(state: TUIState): Promise<void> {\n await loadSkillCommands(state);\n setupAutocomplete(state);\n}\n\n// =============================================================================\n// Key Handlers\n// =============================================================================\n\nexport function setupKeyHandlers(\n state: TUIState,\n callbacks: {\n stop: () => void;\n doubleCtrlCMs: number;\n },\n): void {\n // Handle Ctrl+C via process signal (backup for when editor doesn't capture it)\n process.on('SIGINT', () => {\n const now = Date.now();\n if (now - state.lastCtrlCTime < callbacks.doubleCtrlCMs) {\n callbacks.stop();\n process.exit(0);\n }\n state.lastCtrlCTime = now;\n if (abortActiveGoalJudge(state)) {\n return;\n }\n if (state.pendingApprovalDismiss) {\n state.pendingApprovalDismiss();\n }\n state.activeInlinePlanApproval = undefined;\n state.activeInlineQuestion = undefined;\n state.pendingInlineQuestions.length = 0;\n state.pendingAskUserComponents?.clear();\n state.userInitiatedAbort = true;\n state.harness.abort();\n });\n\n // Use onDebug callback for Shift+Ctrl+D\n state.ui.onDebug = () => {\n // Toggle debug mode or show debug info\n // Currently unused - could add debug panel in future\n };\n}\n\n// =============================================================================\n// Harness Subscription\n// =============================================================================\n\nexport function subscribeToHarness(state: TUIState, handleEvent: (event: any) => Promise<void>): void {\n const listener: HarnessEventListener = async event => {\n try {\n await handleEvent(event);\n } catch (err) {\n // Log but don't crash — individual event errors shouldn't kill the process\n const msg = err instanceof Error ? err.message : String(err);\n const stack = err instanceof Error ? err.stack : undefined;\n process.stderr.write(`[event error] ${event.type}: ${msg}\\n`);\n if (stack) process.stderr.write(stack + '\\n');\n }\n };\n state.unsubscribe = state.harness.subscribe(listener);\n}\n\n// =============================================================================\n// Terminal Title\n// =============================================================================\n\nexport function updateTerminalTitle(state: TUIState): void {\n const appName = state.options.appName || 'Mastra Code';\n const cwd = process.cwd().split('/').pop() || '';\n state.ui.terminal.setTitle(`${appName} - ${cwd}`);\n}\n\n// =============================================================================\n// Thread Selection\n// =============================================================================\n\nexport async function promptForThreadSelection(state: TUIState): Promise<void> {\n const allThreads = await state.harness.listThreads();\n\n // Filter to threads matching the current working directory.\n const currentPath = state.projectInfo.rootPath;\n let dirCreatedAt: Date | undefined;\n try {\n const stat = fs.statSync(currentPath);\n dirCreatedAt = stat.birthtime;\n } catch {\n // fall through – treat all untagged threads as candidates\n }\n const threads = allThreads.filter(t => {\n const threadPath = t.metadata?.projectPath as string | undefined;\n if (threadPath) return threadPath === currentPath;\n if (dirCreatedAt) return t.createdAt >= dirCreatedAt;\n return true;\n });\n\n if (threads.length === 0) {\n // No existing threads for this path - defer creation until first message\n state.pendingNewThread = true;\n return;\n }\n\n // Sort by most recent\n const sortedThreads = [...threads].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n\n // If there's only one thread, auto-resume it directly\n if (sortedThreads.length === 1) {\n const thread = sortedThreads[0]!;\n try {\n await state.harness.switchThread({ threadId: thread.id });\n if (!thread.metadata?.projectPath) {\n await state.harness.setThreadSetting({ key: 'projectPath', value: currentPath });\n }\n return;\n } catch (error) {\n if (error instanceof ThreadLockError) {\n // Thread is locked by another process — silently start a new thread.\n // The lock prompt only appears when the user intentionally picks a\n // locked thread from the /threads selector.\n state.pendingNewThread = true;\n return;\n }\n throw error;\n }\n }\n\n // Multiple threads — try each in order until one is unlocked\n for (const thread of sortedThreads) {\n try {\n await state.harness.switchThread({ threadId: thread.id });\n if (!thread.metadata?.projectPath) {\n await state.harness.setThreadSetting({ key: 'projectPath', value: currentPath });\n }\n return;\n } catch (error) {\n if (error instanceof ThreadLockError) {\n continue; // Try the next one\n }\n throw error;\n }\n }\n\n // All directory threads are locked — silently start a new thread\n state.pendingNewThread = true;\n}\n\n// =============================================================================\n// Existing Tasks\n// =============================================================================\n\nexport async function renderExistingTasks(state: TUIState): Promise<void> {\n try {\n const tasks = state.harness.getDisplayState().tasks;\n\n if (tasks.length > 0 && state.taskProgress) {\n state.taskProgress.updateTasks(tasks);\n state.ui.requestRender();\n }\n } catch {\n // Silently ignore task rendering errors\n }\n}\n","/**\n * Streaming shell output component for the shell passthrough (! command).\n * Shows a bordered box with live stdout/stderr and a status footer.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport { getTermWidth, theme } from '../theme.js';\nimport { truncateAnsi } from './ansi.js';\nimport type { ChatSpacingKind } from './chat-spacing.js';\n\nconst MAX_LINES = 200;\nconst COLLAPSED_LINES = 20;\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n const seconds = ms / 1000;\n return seconds < 60 ? `${seconds.toFixed(1)}s` : `${Math.floor(seconds / 60)}m${Math.floor(seconds % 60)}s`;\n}\n\nexport class ShellStreamComponent extends Container {\n private command: string;\n private lines: string[] = [];\n private trailingPartial = '';\n private exitCode?: number;\n private startTime = Date.now();\n private expanded = false;\n\n constructor(command: string) {\n super();\n this.command = command;\n this.rebuild();\n }\n\n appendOutput(text: string): void {\n const combined = this.trailingPartial + text;\n const parts = combined.split('\\n');\n // Last element is either '' (if text ended with \\n) or an incomplete line\n this.trailingPartial = parts.pop()!;\n this.lines.push(...parts);\n if (this.lines.length > MAX_LINES) {\n this.lines = this.lines.slice(-MAX_LINES);\n }\n this.rebuild();\n }\n\n setExpanded(expanded: boolean): void {\n this.expanded = expanded;\n this.rebuild();\n }\n\n isExpanded(): boolean {\n return this.expanded;\n }\n\n finish(exitCode: number): void {\n // Flush any trailing partial line\n if (this.trailingPartial) {\n this.lines.push(this.trailingPartial);\n this.trailingPartial = '';\n if (this.lines.length > MAX_LINES) {\n this.lines = this.lines.slice(-MAX_LINES);\n }\n }\n this.exitCode = exitCode;\n this.rebuild();\n }\n\n private rebuild(): void {\n this.clear();\n\n const border = (char: string) => theme.bold(theme.fg('accent', char));\n const termWidth = getTermWidth();\n const maxLineWidth = termWidth - 6;\n\n const done = this.exitCode !== undefined;\n const statusIcon = done\n ? this.exitCode === 0\n ? theme.fg('success', ' ✓')\n : theme.fg('error', ' ✗')\n : theme.fg('muted', ' ⋯');\n\n const durationStr = done ? theme.fg('muted', ` ${formatDuration(Date.now() - this.startTime)}`) : '';\n const footerText = `${theme.bold(theme.fg('toolTitle', '$'))} ${theme.fg('accent', this.command)}${durationStr}${statusIcon}`;\n\n // Top border\n this.addChild(new Text(border('╭──'), 0, 0));\n\n // Output lines with left border\n const displayLines = [...this.lines];\n // Include trailing partial if still streaming\n if (this.trailingPartial && !done) {\n displayLines.push(this.trailingPartial);\n }\n // Remove leading empty lines\n while (displayLines.length > 0 && displayLines[0] === '') displayLines.shift();\n\n if (displayLines.length > 0) {\n const maxVisible = this.expanded ? MAX_LINES : COLLAPSED_LINES;\n const truncated = displayLines.length > maxVisible;\n const visibleLines = truncated ? displayLines.slice(-maxVisible) : displayLines;\n\n const borderedLines = visibleLines.map(line => {\n const truncatedLine = truncateAnsi(line, maxLineWidth);\n return border('│') + ' ' + truncatedLine;\n });\n\n if (truncated) {\n const remaining = displayLines.length - maxVisible;\n const action = this.expanded ? 'collapse' : 'expand';\n borderedLines.push(border('│') + ' ' + theme.fg('muted', `... ${remaining} more lines (Ctrl+E to ${action})`));\n }\n\n const displayOutput = borderedLines.join('\\n');\n if (displayOutput.trim()) {\n this.addChild(new Text(displayOutput, 0, 0));\n }\n }\n\n // Bottom border with command info\n this.addChild(new Text(`${border('╰──')} ${footerText}`, 0, 0));\n\n // Show exit code if non-zero\n if (done && this.exitCode !== 0) {\n this.addChild(new Text(theme.fg('error', ` Exit code: ${this.exitCode}`), 0, 0));\n }\n\n this.invalidate();\n }\n\n getChatSpacingKind(): ChatSpacingKind {\n return 'other';\n }\n}\n","export interface ShellPassthroughResult {\n exitCode?: number | null;\n failed?: boolean;\n stderr?: string;\n shortMessage?: string;\n message?: string;\n}\n\nexport interface ShellPassthroughCompletion {\n exitCode: number;\n diagnostic?: string;\n}\n\nfunction nonEmptyMessage(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function resolveShellPassthroughCompletion(result: ShellPassthroughResult): ShellPassthroughCompletion {\n if (typeof result.exitCode === 'number') {\n return { exitCode: result.exitCode };\n }\n\n if (!result.failed) {\n return { exitCode: 0 };\n }\n\n return {\n exitCode: 1,\n diagnostic:\n nonEmptyMessage(result.shortMessage) ?? nonEmptyMessage(result.message) ?? nonEmptyMessage(result.stderr),\n };\n}\n","import type { ShellPassthroughSettings } from '../onboarding/settings.js';\nimport { resolveShellPassthroughInvocation } from './shell-config.js';\n\nconst SHELL_COMMAND_TIMEOUT_MS = 30_000;\n\nexport async function createShellPassthroughSubprocess(\n command: string,\n settings: ShellPassthroughSettings,\n env: NodeJS.ProcessEnv = process.env,\n platform: NodeJS.Platform | string = process.platform,\n cwd: string = process.cwd(),\n) {\n const { execa } = await import('execa');\n const invocation = resolveShellPassthroughInvocation(command, settings, env, platform);\n const options = {\n cwd,\n reject: false,\n timeout: SHELL_COMMAND_TIMEOUT_MS,\n env: {\n ...env,\n FORCE_COLOR: '1',\n },\n };\n\n if (invocation.kind === 'default') {\n return {\n invocation,\n subprocess: execa(command, {\n ...options,\n shell: true,\n }),\n };\n }\n\n return {\n invocation,\n subprocess: execa(invocation.executable, invocation.args, {\n ...options,\n shell: false,\n ...(invocation.family === 'cmd' && platform === 'win32' ? { windowsVerbatimArguments: true } : {}),\n }),\n };\n}\n","/**\n * Shell passthrough: execute a shell command and display the output in the TUI.\n * Streams stdout/stderr in real-time using a bordered box that rebuilds on each chunk.\n */\nimport { loadSettings } from '../onboarding/settings.js';\nimport { insertChatComponentWithBoundarySpacing } from './chat-boundary-reconciliation.js';\nimport { ShellStreamComponent } from './components/shell-output.js';\nimport { showError, showInfo } from './display.js';\nimport { resolveShellPassthroughCompletion } from './shell-result.js';\nimport { createShellPassthroughSubprocess } from './shell-runner.js';\nimport type { TUIState } from './state.js';\n\nexport async function handleShellPassthrough(state: TUIState, command: string): Promise<void> {\n if (!command) {\n showInfo(state, 'Usage: !<command> (e.g., !ls -la)');\n return;\n }\n\n const component = new ShellStreamComponent(command);\n if (state.toolOutputExpanded) {\n component.setExpanded(true);\n }\n state.allShellComponents.push(component);\n insertChatComponentWithBoundarySpacing(state.chatContainer, component);\n state.ui.requestRender();\n\n try {\n const { invocation, subprocess } = await createShellPassthroughSubprocess(command, loadSettings().shellPassthrough);\n for (const warning of invocation.warnings) {\n showInfo(state, `Shell passthrough: ${warning}`);\n }\n\n // Stream stdout/stderr as it arrives\n if (subprocess.stdout) {\n subprocess.stdout.setEncoding('utf8');\n subprocess.stdout.on('data', (chunk: string) => {\n component.appendOutput(chunk);\n state.ui.requestRender();\n });\n }\n if (subprocess.stderr) {\n subprocess.stderr.setEncoding('utf8');\n subprocess.stderr.on('data', (chunk: string) => {\n component.appendOutput(chunk);\n state.ui.requestRender();\n });\n }\n\n // Wait for the process to complete\n const result = await subprocess;\n const completion = resolveShellPassthroughCompletion(result);\n if (completion.diagnostic) {\n component.appendOutput(`${completion.diagnostic}\\n`);\n }\n\n component.finish(completion.exitCode);\n state.ui.requestRender();\n } catch (error) {\n component.finish(1);\n state.ui.requestRender();\n showError(state, error instanceof Error ? error.message : 'Shell command failed');\n }\n}\n","/**\n * Main TUI class for Mastra Code.\n * Wires the Harness to pi-tui components for a full interactive experience.\n */\nimport { spawn } from 'node:child_process';\nimport type { ChildProcess } from 'node:child_process';\nimport type { Component } from '@earendil-works/pi-tui';\nimport type { AgentSignalAttributes } from '@mastra/core/agent';\nimport type { HarnessEvent, HarnessMessage } from '@mastra/core/harness';\nimport type { Workspace } from '@mastra/core/workspace';\nimport { getOAuthProviders } from '../auth/storage.js';\nimport {\n OnboardingInlineComponent,\n getAvailableModePacks,\n getAvailableOmPacks,\n ONBOARDING_VERSION,\n loadSettings,\n saveSettings,\n} from '../onboarding/index.js';\nimport type { OnboardingResult, ProviderAccess, ProviderAccessLevel } from '../onboarding/index.js';\nimport {\n resolveThreadActiveModelPackId,\n THREAD_ACTIVE_MODEL_PACK_ID_KEY,\n MEMORY_GATEWAY_PROVIDER,\n} from '../onboarding/settings.js';\nimport {\n detectPackageManager,\n fetchChangelog,\n fetchLatestVersion,\n getInstallCommand,\n isNewerVersion,\n runUpdate,\n} from '../utils/update-check.js';\nimport { insertChatComponentWithBoundarySpacing } from './chat-boundary-reconciliation.js';\nimport { dispatchSlashCommand } from './command-dispatch.js';\nimport { startGoalWithDefaults } from './commands/goal.js';\n\nimport type { SlashCommandContext } from './commands/types.js';\nimport { AskQuestionInlineComponent } from './components/ask-question-inline.js';\nimport { LoginDialogComponent } from './components/login-dialog.js';\nimport { promptAuthMode } from './components/login-mode-selector.js';\nimport { ModelSelectorComponent } from './components/model-selector.js';\nimport type { ModelItem } from './components/model-selector.js';\nimport { GradientAnimator } from './components/obi-loader.js';\nimport type { IToolExecutionComponent } from './components/tool-execution-interface.js';\nimport { showError, showInfo, showFormattedError, notify } from './display.js';\nimport { dispatchEvent } from './event-dispatch.js';\nimport { isGoalJudgeInputLocked, showGoalJudgeInputLockInfo } from './goal-input-lock.js';\nimport type { EventHandlerContext } from './handlers/types.js';\nimport { askModalQuestion } from './modal-question.js';\nimport { showModalOverlay } from './overlay.js';\nimport { promptForApiKeyIfNeeded } from './prompt-api-key.js';\n\nimport {\n addPendingUserMessage,\n addUserMessage,\n removePendingUserMessage,\n renderClearedTasksInline,\n renderExistingMessages,\n} from './render-messages.js';\nimport {\n setupKeyboardShortcuts,\n buildLayout,\n setupAutocomplete,\n loadCustomSlashCommands,\n refreshSkillsAutocomplete,\n setupKeyHandlers,\n subscribeToHarness,\n updateTerminalTitle,\n promptForThreadSelection,\n renderExistingTasks,\n} from './setup.js';\nimport { handleShellPassthrough } from './shell.js';\nimport type { MastraTUIOptions, TUIState } from './state.js';\nimport { createTUIState, getGithubPrSubscriptionsFromMetadata } from './state.js';\nimport { updateStatusLine } from './status-line.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type { MastraTUIOptions } from './state.js';\n\n// =============================================================================\n// MastraTUI Class\n// =============================================================================\n\n/**\n * Delivery option attributes applied to user-message signals. When the signal is delivered to an\n * active run it is tagged as while-active; when it starts a new run it is a message.\n * The LLM sees these as XML attributes on the `<user-message>` element.\n */\ntype GithubPollingChangedHandler = (event: { threadId: string; resourceId: string; running: boolean }) => void;\ntype GithubSignalsWithPollingEvents = { onPollingChanged?: (handler: GithubPollingChangedHandler) => void };\n\nconst USER_SIGNAL_DELIVERY_OPTIONS: {\n ifActive: { attributes: AgentSignalAttributes };\n ifIdle: { attributes: AgentSignalAttributes };\n} = {\n ifActive: { attributes: { delivery: 'while-active' } },\n ifIdle: { attributes: { delivery: 'message' } },\n};\n\n/** How often to recheck for updates during a long-running session (ms). */\nconst UPDATE_RECHECK_INTERVAL_MS = 45 * 60 * 1_000; // 45 minutes\nconst IMAGE_PLACEHOLDER_PATTERN = /\\[image\\]\\s*/g;\nconst CAFFEINATE_ARGS = ['-i', '-m'];\n\nexport async function syncInitialThreadState(state: TUIState): Promise<void> {\n const initThreadId = state.harness.getCurrentThreadId();\n if (!initThreadId) return;\n\n const initThreads = await state.harness.listThreads();\n const initThread = initThreads.find(t => t.id === initThreadId);\n if (initThread?.title) {\n state.currentThreadTitle = initThread.title;\n }\n const metadata = initThread?.metadata as Record<string, unknown> | undefined;\n state.activeGithubPrSubscriptions = getGithubPrSubscriptionsFromMetadata(metadata);\n // Prefer the durable ThreadState objective; fall back to the legacy\n // thread-metadata goal for threads created before the migration.\n await state.goalManager.loadFromThread(state);\n if (!state.goalManager.getGoal()) {\n state.goalManager.loadFromThreadMetadata(metadata);\n }\n}\n\nfunction shouldUseCaffeinate(): boolean {\n return process.platform === 'darwin' && process.env.MASTRACODE_DISABLE_CAFFEINATE !== '1';\n}\n\nexport function consumePendingImages(\n text: string,\n pendingImages: TUIState['pendingImages'],\n): { content: string; images?: TUIState['pendingImages'] } {\n const imageMarkerCount = text.match(/\\[image\\]/g)?.length ?? 0;\n const images = imageMarkerCount > 0 ? pendingImages.slice(0, imageMarkerCount) : undefined;\n\n return {\n content: text.replace(IMAGE_PLACEHOLDER_PATTERN, '').trim(),\n images: images && images.length > 0 ? images : undefined,\n };\n}\n\nexport class MastraTUI {\n private state: TUIState;\n private updateCheckTimer: ReturnType<typeof setInterval> | null = null;\n private idleCounterTimer: ReturnType<typeof setInterval> | null = null;\n private hasShownUpdateBanner = false;\n private caffeinateProcess: ChildProcess | null = null;\n private lastStreamError: string | null = null;\n\n private static readonly DOUBLE_CTRL_C_MS = 500;\n\n constructor(options: MastraTUIOptions) {\n this.state = createTUIState(options);\n\n options.githubSignals?.onSubscriptionsChanged(event => {\n const currentThreadId = this.state.harness.getCurrentThreadId?.();\n const currentResourceId = this.state.harness.getResourceId?.();\n if (event.threadId !== currentThreadId || (currentResourceId && event.resourceId !== currentResourceId)) return;\n this.state.activeGithubPrSubscriptions = event.subscriptions.map(subscription => ({\n owner: subscription.owner,\n repo: subscription.repo,\n prNumber: subscription.number,\n lastSyncStatus: subscription.lastSyncStatus,\n lastNotificationKind: subscription.lastNotificationKind,\n lastNotificationPriority: subscription.lastNotificationPriority,\n }));\n updateStatusLine(this.state);\n this.state.ui.requestRender();\n });\n\n (options.githubSignals as GithubSignalsWithPollingEvents | undefined)?.onPollingChanged?.(event => {\n const currentThreadId = this.state.harness.getCurrentThreadId?.();\n const currentResourceId = this.state.harness.getResourceId?.();\n if (event.threadId !== currentThreadId || (currentResourceId && event.resourceId !== currentResourceId)) return;\n if (!this.state.githubPrGradientAnimator) {\n this.state.githubPrGradientAnimator = new GradientAnimator(() => {\n updateStatusLine(this.state);\n });\n }\n this.state.githubPrPollingActive = event.running;\n if (event.running) this.state.githubPrGradientAnimator.start();\n else this.state.githubPrGradientAnimator.stop();\n updateStatusLine(this.state);\n this.state.ui.requestRender();\n });\n\n // Load user preferences\n const savedSettings = loadSettings();\n this.state.quietMode = savedSettings.preferences.quietMode;\n this.state.quietModeMaxToolPreviewLines = savedSettings.preferences.quietModeMaxToolPreviewLines;\n\n // Override editor input handling to check for active inline components\n const originalHandleInput = this.state.editor.handleInput.bind(this.state.editor);\n this.state.editor.handleInput = (data: string) => {\n // If there's an active plan approval, route input to it. Ctrl+C still\n // aborts: in raw mode the terminal delivers it as \\x03 to the editor (the\n // process SIGINT never fires), so the inline component would otherwise\n // swallow it and leave the suspended submit_plan run parked. Fall through\n // to the editor's Ctrl+C handler (which clears inline state and aborts).\n if (this.state.activeInlinePlanApproval) {\n if (data !== '\\x03') {\n this.state.activeInlinePlanApproval.handleInput(data);\n return;\n }\n }\n // If there's an active inline question, route input to it (same Ctrl+C\n // pass-through as plan approval above).\n else if (this.state.activeInlineQuestion) {\n if (data !== '\\x03') {\n this.state.activeInlineQuestion.handleInput(data);\n return;\n }\n }\n // If onboarding is active, route input there\n if (this.state.activeOnboarding) {\n // Ctrl+C during onboarding — cancel it\n if (data === '\\x03') {\n this.state.activeOnboarding.cancel();\n this.state.activeOnboarding = undefined;\n // Fall through to let the editor's 'clear' action fire\n } else {\n this.state.activeOnboarding.handleInput(data);\n return;\n }\n }\n // Otherwise, handle normally\n originalHandleInput(data);\n };\n\n // Wire clipboard image paste\n this.state.editor.onImagePaste = image => {\n this.state.pendingImages.push(image);\n this.state.editor.insertTextAtCursor?.('[image] ');\n this.state.ui.requestRender();\n };\n this.state.editor.getPromptAnimator = () => this.state.gradientAnimator;\n\n setupKeyboardShortcuts(this.state, {\n stop: () => this.stop(),\n doubleCtrlCMs: MastraTUI.DOUBLE_CTRL_C_MS,\n queueFollowUpMessage: text => this.queueFollowUpMessage(text),\n });\n }\n\n // ===========================================================================\n // Public API\n // ===========================================================================\n\n /**\n * Run the TUI. This is the main entry point.\n */\n async run(): Promise<void> {\n await this.init();\n\n // Run SessionStart hooks (fire and forget)\n const hookMgr = this.state.hookManager;\n if (hookMgr) {\n hookMgr.runSessionStart().catch(() => {});\n }\n\n // Process initial message if provided (e.g. piped stdin content).\n // Runs the same validation as interactive input: model check, prompt hooks.\n if (this.state.options.initialMessage) {\n const msg = this.state.options.initialMessage;\n\n if (!this.state.harness.hasModelSelected()) {\n showInfo(this.state, 'No model selected. Use /models to select a model, or /login to authenticate.');\n } else {\n const messageId = `user-${Date.now()}`;\n addUserMessage(this.state, {\n id: messageId,\n role: 'user',\n content: [{ type: 'text', text: msg }],\n createdAt: new Date(),\n });\n this.state.ui.requestRender();\n\n const allowed = await this.runUserPromptHook(msg);\n if (!allowed) {\n const comp = this.state.messageComponentsById.get(messageId);\n if (comp) {\n this.state.chatContainer.removeChild(comp as never);\n this.state.messageComponentsById.delete(messageId);\n this.state.ui.requestRender();\n }\n } else {\n try {\n if (this.state.pendingNewThread) {\n await this.state.harness.createThread();\n this.state.pendingNewThread = false;\n }\n this.fireMessage(msg);\n } catch (error) {\n this.state.pendingNewThread = false;\n showError(this.state, error instanceof Error ? error.message : 'Failed to start thread');\n }\n }\n }\n }\n\n // Main interactive loop — never blocks on streaming,\n // so the editor stays responsive for queued follow-ups.\n while (true) {\n const userInput = await this.getUserInput();\n // allow space as transparent continue (for recovering from api errors manually)\n if (!userInput.trim() && userInput !== ' ') continue;\n\n try {\n const pendingNewThread = this.state.pendingNewThread;\n\n // Handle slash commands\n if (userInput.startsWith('/')) {\n const handled = await this.handleSlashCommand(userInput);\n if (handled) continue;\n }\n\n // Handle shell passthrough (! prefix)\n if (userInput.startsWith('!')) {\n await handleShellPassthrough(this.state, userInput.slice(1).trim());\n continue;\n }\n\n // Check if a model is selected (sync — fast, no reason to defer)\n if (!this.state.harness.hasModelSelected()) {\n showInfo(this.state, 'No model selected. Use /models to select a model, or /login to authenticate.');\n continue;\n }\n\n const { content, images } = consumePendingImages(userInput, this.state.pendingImages);\n this.state.pendingImages = [];\n\n const optimisticMessageId = this.renderOptimisticUserMessage(content, images);\n const allowed = await this.runUserPromptHook(userInput);\n if (!allowed) {\n this.removeOptimisticUserMessage(optimisticMessageId);\n continue;\n }\n\n this.sendOptimisticSignal(content, images, optimisticMessageId, pendingNewThread);\n } catch (error) {\n showError(this.state, error instanceof Error ? error.message : 'Unknown error');\n }\n }\n }\n\n /**\n * Fire off a message without blocking the main loop.\n * Errors are handled via harness events.\n */\n private fireMessage(content: string, images?: Array<{ data: string; mimeType: string }>): void {\n this.clearIdleCounter();\n const files = images?.map(img => ({ data: img.data, mediaType: img.mimeType }));\n this.state.harness.sendMessage({ content, files }).catch(error => {\n showError(this.state, error instanceof Error ? error.message : 'Unknown error');\n });\n }\n\n private createUserSignalMessage(\n content: string,\n images?: Array<{ data: string; mimeType: string }>,\n id = '',\n ): HarnessMessage {\n return {\n id,\n role: 'user',\n content: [\n { type: 'text', text: content },\n ...(images?.map(img => ({ type: 'image' as const, data: img.data, mimeType: img.mimeType })) ?? []),\n ],\n createdAt: new Date(),\n };\n }\n\n private createUserSignalContent(content: string, images?: Array<{ data: string; mimeType: string }>) {\n return images?.length\n ? [\n { type: 'text' as const, text: content },\n ...images.map(img => ({ type: 'file' as const, data: img.data, mediaType: img.mimeType })),\n ]\n : content;\n }\n\n private renderOptimisticUserMessage(content: string, images?: Array<{ data: string; mimeType: string }>): string {\n const messageId = `user-${Date.now()}`;\n const isInterjection = this.state.harness.isCurrentThreadStreamActive();\n addUserMessage(this.state, this.createUserSignalMessage(content, images, messageId), {\n ...(isInterjection ? { label: 'steer' } : {}),\n });\n this.state.ui.requestRender();\n return messageId;\n }\n\n private removeOptimisticUserMessage(messageId: string): void {\n const component = this.state.messageComponentsById.get(messageId);\n if (!component) return;\n this.state.chatContainer.removeChild(component as never);\n this.state.messageComponentsById.delete(messageId);\n this.state.ui.requestRender();\n }\n\n private remapOptimisticUserMessage(optimisticMessageId: string, signalId: string): void {\n if (optimisticMessageId === signalId) return;\n const component = this.state.messageComponentsById.get(optimisticMessageId);\n if (!component) return;\n this.state.messageComponentsById.delete(optimisticMessageId);\n this.state.messageComponentsById.set(signalId, component);\n }\n\n private createPendingNewThread(): Promise<void> | undefined {\n if (!this.state.pendingNewThread) return undefined;\n this.state.pendingNewThread = false;\n return this.state.harness.createThread().then(() => undefined);\n }\n\n private sendOptimisticSignal(\n content: string,\n images: Array<{ data: string; mimeType: string }> | undefined,\n optimisticMessageId: string,\n pendingNewThread: boolean,\n ): void {\n const send = () => {\n this.clearIdleCounter();\n this.state.analytics?.capture('mastracode_prompt_submitted', {\n threadId: this.state.harness.getCurrentThreadId(),\n resourceId: this.state.harness.getResourceId(),\n mode: this.state.harness.getCurrentModeId(),\n hasImages: Boolean(images?.length),\n isFirstPromptInThread: pendingNewThread,\n pendingNewThread,\n });\n\n const signal = this.state.harness.sendSignal({\n content: this.createUserSignalContent(content, images),\n ...USER_SIGNAL_DELIVERY_OPTIONS,\n });\n this.remapOptimisticUserMessage(optimisticMessageId, signal.id);\n signal.accepted.catch((error: unknown) => {\n this.removeOptimisticUserMessage(signal.id);\n showError(this.state, error instanceof Error ? error.message : 'Unknown error');\n });\n };\n\n const pendingThread = this.createPendingNewThread();\n if (!pendingThread) {\n send();\n return;\n }\n\n pendingThread.then(send).catch((error: unknown) => {\n this.removeOptimisticUserMessage(optimisticMessageId);\n showError(this.state, error instanceof Error ? error.message : 'Unknown error');\n });\n }\n\n private signalMessage(content: string, images?: Array<{ data: string; mimeType: string }>): void {\n const hasActiveRun = this.state.harness.isCurrentThreadStreamActive();\n\n const send = () => {\n this.clearIdleCounter();\n const signal = this.state.harness.sendSignal({\n content: this.createUserSignalContent(content, images),\n ...USER_SIGNAL_DELIVERY_OPTIONS,\n });\n\n if (hasActiveRun) {\n addPendingUserMessage(this.state, signal.id, content, images, { isInterjection: true });\n } else {\n addUserMessage(this.state, this.createUserSignalMessage(content, images, signal.id));\n }\n\n signal.accepted.catch((error: unknown) => {\n if (hasActiveRun) {\n removePendingUserMessage(this.state, signal.id);\n } else {\n this.removeOptimisticUserMessage(signal.id);\n }\n showError(this.state, error instanceof Error ? error.message : 'Unknown error');\n });\n };\n\n const pendingThread = this.createPendingNewThread();\n if (!pendingThread) {\n send();\n return;\n }\n\n pendingThread.then(send).catch((error: unknown) => {\n showError(this.state, error instanceof Error ? error.message : 'Unknown error');\n });\n }\n\n private queueFollowUpMessage(text: string): void {\n if (text.startsWith('/')) {\n const messageId = `queued-slash-${Date.now()}-${this.state.pendingSlashCommands.length}`;\n this.state.pendingSlashCommands.push(text);\n this.state.pendingSlashCommandMessageIds.push(messageId);\n this.state.pendingQueuedActions.push('slash');\n addPendingUserMessage(this.state, messageId, text);\n updateStatusLine(this.state);\n return;\n }\n\n const { content, images } = consumePendingImages(text, this.state.pendingImages);\n this.state.pendingImages = [];\n\n this.state.pendingFollowUpMessages.push({ content, images });\n this.state.pendingQueuedActions.push('message');\n updateStatusLine(this.state);\n this.state.ui.requestRender();\n }\n\n /**\n * Stop the TUI and clean up.\n */\n stop(): void {\n this.stopCaffeinate();\n\n // Run SessionEnd hooks (best-effort, don't await)\n const hookMgr = this.state.hookManager;\n if (hookMgr) {\n hookMgr.runSessionEnd().catch(() => {});\n }\n\n if (this.updateCheckTimer) {\n clearInterval(this.updateCheckTimer);\n this.updateCheckTimer = null;\n }\n\n if (this.idleCounterTimer) {\n clearInterval(this.idleCounterTimer);\n this.idleCounterTimer = null;\n }\n\n if (this.state.unsubscribe) {\n this.state.unsubscribe();\n }\n this.state.ui.stop();\n }\n\n // ===========================================================================\n // Initialization\n // ===========================================================================\n\n private async init(): Promise<void> {\n if (this.state.isInitialized) return;\n\n // Initialize harness (but don't select thread yet)\n await this.state.harness.init();\n await this.state.harness.getMastra()?.startWorkers();\n\n // Check for existing threads and prompt for resume\n await promptForThreadSelection(this.state);\n\n // Load custom slash commands\n await loadCustomSlashCommands(this.state);\n\n // Install autocomplete immediately; refresh once the workspace resolves.\n setupAutocomplete(this.state);\n refreshSkillsAutocomplete(this.state).catch(err => {\n const msg = err instanceof Error ? err.message : String(err);\n process.stderr.write(`[skill autocomplete refresh] ${msg}\\n`);\n });\n\n // Build UI layout\n buildLayout(this.state, () => this.refreshModelAuthStatus());\n\n // Setup key handlers\n setupKeyHandlers(this.state, {\n stop: () => this.stop(),\n doubleCtrlCMs: MastraTUI.DOUBLE_CTRL_C_MS,\n });\n\n // Subscribe to harness events\n subscribeToHarness(this.state, event => this.handleEvent(event));\n // Restore escape-as-cancel setting from persisted state\n const escState = this.state.harness.getState() as any;\n if (escState?.escapeAsCancel === false) {\n this.state.editor.escapeEnabled = false;\n }\n\n // Load OM progress now that we're subscribed (the event during\n // thread selection fired before we were listening).\n // This emits om_status → display_state_changed → updateStatusLine.\n await this.state.harness.loadOMProgress();\n\n // Sync current thread metadata — the thread_changed event from\n // promptForThreadSelection fired before we subscribed above.\n await syncInitialThreadState(this.state);\n\n // Start the UI\n this.state.ui.start();\n this.state.isInitialized = true;\n\n // Start MCP connections now that the TUI owns the terminal.\n if (this.state.mcpManager?.hasServers()) {\n this.state.mcpManager\n .initInBackground()\n .then(result => {\n for (const s of result.failed) {\n showInfo(this.state, `MCP: Failed to connect to \"${s.name}\": ${s.error}`);\n }\n for (const s of result.skipped) {\n showInfo(this.state, `MCP: Skipped \"${s.name}\": ${s.reason}`);\n }\n })\n .catch(error => {\n showInfo(this.state, `MCP: Initialization failed: ${error instanceof Error ? error.message : String(error)}`);\n });\n }\n\n // Set terminal title\n updateTerminalTitle(this.state);\n // Render existing messages\n await this.renderExistingMessagesAndSeedIdleCounter();\n // Render existing tasks if any\n await renderExistingTasks(this.state);\n\n if (this.shouldShowOnboarding()) {\n await this.showOnboarding();\n }\n\n await this.showQuietModePreferencePromptIfNeeded();\n\n // Check for updates after first render so network latency never blocks startup.\n void this.checkForUpdate().catch(() => {});\n\n // Periodically recheck for updates during long-running sessions (passive only)\n this.updateCheckTimer = setInterval(() => {\n void this.checkForUpdate(/* passive */ true);\n }, UPDATE_RECHECK_INTERVAL_MS);\n }\n\n private async refreshModelAuthStatus(): Promise<void> {\n this.state.modelAuthStatus = await this.state.harness.getCurrentModelAuthStatus();\n updateStatusLine(this.state);\n }\n\n private startIdleCounter(idleStartedAt = Date.now(), now = Date.now()): void {\n this.state.idleStartedAt = idleStartedAt;\n this.state.idleCounter?.setIdleStartedAt(idleStartedAt, now);\n this.state.ui.requestRender?.();\n\n if (this.idleCounterTimer) {\n clearInterval(this.idleCounterTimer);\n }\n\n this.idleCounterTimer = setInterval(() => {\n this.state.idleCounter?.update();\n this.state.ui.requestRender?.();\n }, 60_000);\n }\n\n private async renderExistingMessagesAndSeedIdleCounter(): Promise<void> {\n await renderExistingMessages(this.state);\n\n if (this.state.harness.isRunning()) {\n this.clearIdleCounter();\n return;\n }\n\n if (this.state.lastRenderedMessageAt === undefined) {\n this.clearIdleCounter();\n return;\n }\n\n this.startIdleCounter(this.state.lastRenderedMessageAt);\n }\n\n private clearIdleCounter(): void {\n this.state.idleStartedAt = undefined;\n this.state.idleCounter?.setIdleStartedAt(undefined);\n if (this.idleCounterTimer) {\n clearInterval(this.idleCounterTimer);\n this.idleCounterTimer = null;\n }\n this.state.ui.requestRender?.();\n }\n\n // ===========================================================================\n // Event Handling\n // ===========================================================================\n\n /** Cached event context – built once, reused for every event. */\n private _ectx: EventHandlerContext | undefined;\n\n private getEventContext(): EventHandlerContext {\n if (!this._ectx) {\n this._ectx = this.buildEventContext();\n }\n return this._ectx;\n }\n\n private async handleEvent(event: HarnessEvent): Promise<void> {\n if (event.type === 'agent_start') {\n this.clearIdleCounter();\n this.startCaffeinate();\n this.lastStreamError = null;\n }\n\n if (event.type === 'error' && 'error' in event && !event.retryable) {\n // Only capture errors that look like stream/agent failures, not OM or tool errors\n const msg = event.error?.message || String(event.error);\n const isOmError = /observational memory/i.test(msg);\n if (!isOmError) {\n this.lastStreamError = msg;\n }\n }\n\n try {\n await dispatchEvent(event, this.getEventContext(), this.state);\n this.captureHarnessAnalytics(event);\n\n if (event.type === 'thread_created') {\n await this.syncThreadActivePackMetadata(event.thread);\n } else if (event.type === 'thread_changed') {\n await this.syncThreadActivePackMetadata();\n }\n\n if (event.type === 'agent_end') {\n const stopReason = event.reason === 'aborted' ? 'aborted' : event.reason === 'error' ? 'error' : 'complete';\n this.startIdleCounter();\n await this.runStopHook(stopReason);\n\n if (event.reason === 'error' && this.lastStreamError) {\n this.emitErrorFeedback(this.lastStreamError);\n this.lastStreamError = null;\n }\n }\n } finally {\n if (event.type === 'agent_end') {\n this.stopCaffeinate();\n }\n }\n }\n\n private captureHarnessAnalytics(event: HarnessEvent): void {\n const analytics = this.state.analytics;\n if (!analytics) {\n return;\n }\n\n if (event.type === 'thread_created') {\n analytics.capture('mastracode_thread_changed', {\n action: 'created',\n threadId: event.thread.id,\n resourceId: event.thread.resourceId,\n mode: this.state.harness.getCurrentModeId(),\n hasTitle: Boolean(event.thread.title),\n });\n return;\n }\n\n if (event.type === 'thread_changed') {\n analytics.capture('mastracode_thread_changed', {\n action: 'switched',\n threadId: event.threadId,\n previousThreadId: event.previousThreadId,\n resourceId: this.state.harness.getResourceId(),\n mode: this.state.harness.getCurrentModeId(),\n });\n return;\n }\n\n if (event.type === 'model_changed') {\n analytics.capture('mastracode_model_changed', {\n modelId: event.modelId,\n scope: event.scope,\n mode: event.modeId ?? this.state.harness.getCurrentModeId(),\n threadId: this.state.harness.getCurrentThreadId(),\n resourceId: this.state.harness.getResourceId(),\n });\n }\n }\n\n private emitErrorFeedback(errorMessage: string): void {\n const harness = this.state.harness;\n const traceId = harness.getCurrentTraceId() ?? undefined;\n const runId = harness.getCurrentRunId() ?? undefined;\n const threadId = harness.getCurrentThreadId() ?? undefined;\n\n if (!traceId && !runId && !threadId) return;\n\n const mastra = harness.getMastra();\n const observability = mastra?.observability;\n if (!observability?.addFeedback) return;\n\n const comment = errorMessage.length > 500 ? errorMessage.slice(0, 500) + '…' : errorMessage;\n\n observability\n .addFeedback({\n traceId,\n correlationContext: { traceId, runId },\n feedback: {\n feedbackType: 'thumbs',\n feedbackSource: 'mastracode',\n feedbackUserId: 'system',\n value: 0,\n comment: `Stream error: ${comment}`,\n metadata: {\n ...(threadId ? { threadId } : {}),\n ...(runId ? { runId } : {}),\n autoGenerated: true,\n },\n },\n })\n .catch(() => {\n // Fire-and-forget — don't let feedback failures affect the TUI\n });\n }\n\n private startCaffeinate(): void {\n if (!shouldUseCaffeinate() || this.caffeinateProcess) {\n return;\n }\n\n try {\n const child = spawn('caffeinate', CAFFEINATE_ARGS, {\n stdio: 'ignore',\n });\n\n child.once('error', () => {\n if (this.caffeinateProcess === child) {\n this.caffeinateProcess = null;\n }\n });\n\n child.once('exit', () => {\n if (this.caffeinateProcess === child) {\n this.caffeinateProcess = null;\n }\n });\n\n this.caffeinateProcess = child;\n } catch {\n this.caffeinateProcess = null;\n }\n }\n\n private stopCaffeinate(): void {\n const child = this.caffeinateProcess;\n if (!child) {\n return;\n }\n\n this.caffeinateProcess = null;\n child.kill();\n }\n\n private async buildProviderAccess(): Promise<ProviderAccess> {\n const models = await this.state.harness.listAvailableModels();\n const hasEnv = (provider: string) => models.some(m => m.provider === provider && m.hasApiKey);\n const accessLevel = (storageProviderId: string): ProviderAccessLevel => {\n const cred = this.state.authStorage?.get(storageProviderId);\n if (cred?.type === 'oauth') return 'oauth';\n if (cred?.type === 'api_key' && cred.key.trim().length > 0) return 'apikey';\n return false;\n };\n const access: ProviderAccess = {\n anthropic: accessLevel('anthropic'),\n openai: accessLevel('openai-codex'),\n cerebras: hasEnv('cerebras') ? ('apikey' as const) : false,\n google: hasEnv('google') ? ('apikey' as const) : false,\n deepseek: hasEnv('deepseek') ? ('apikey' as const) : false,\n 'github-copilot': accessLevel('github-copilot'),\n };\n // Gateway covers all providers\n const mgKey =\n this.state.authStorage?.getStoredApiKey(MEMORY_GATEWAY_PROVIDER) ?? process.env['MASTRA_GATEWAY_API_KEY'];\n if (mgKey) {\n if (!access.anthropic) access.anthropic = 'apikey';\n if (!access.openai) access.openai = 'apikey';\n }\n // Include all other providers that have API keys configured\n const seen = new Set(Object.keys(access));\n for (const m of models) {\n if (!seen.has(m.provider) && m.hasApiKey) {\n access[m.provider] = 'apikey';\n seen.add(m.provider);\n }\n }\n return access;\n }\n\n private async syncThreadActivePackMetadata(thread?: {\n id: string;\n metadata?: Record<string, unknown>;\n }): Promise<void> {\n const settings = loadSettings();\n const currentThreadId = this.state.harness.getCurrentThreadId();\n if (!currentThreadId) return;\n\n const resolvedThread =\n thread?.id === currentThreadId\n ? thread\n : (await this.state.harness.listThreads()).find(t => t.id === currentThreadId);\n const access = await this.buildProviderAccess();\n const packs = getAvailableModePacks(access, settings.customModelPacks).filter(p => p.id !== 'custom');\n const resolvedPackId = resolveThreadActiveModelPackId(\n settings,\n packs,\n resolvedThread?.metadata as Record<string, unknown> | undefined,\n );\n\n if (resolvedPackId && settings.models.activeModelPackId !== resolvedPackId) {\n // Re-read settings to avoid overwriting concurrent changes\n const fresh = loadSettings();\n if (fresh.models.activeModelPackId !== resolvedPackId) {\n fresh.models.activeModelPackId = resolvedPackId;\n saveSettings(fresh);\n }\n }\n }\n\n private showHookWarnings(event: string, warnings: string[]): void {\n for (const warning of warnings) {\n showInfo(this.state, `[${event}] ${warning}`);\n }\n }\n\n private async runStopHook(stopReason: 'complete' | 'aborted' | 'error'): Promise<void> {\n const hookMgr = this.state.hookManager;\n if (!hookMgr) return;\n\n try {\n const result = await hookMgr.runStop(undefined, stopReason);\n this.showHookWarnings('Stop', result.warnings);\n if (!result.allowed && result.blockReason) {\n showError(this.state, `Stop hook blocked: ${result.blockReason}`);\n }\n } catch (error) {\n showError(this.state, `Stop hook failed: ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n private async runUserPromptHook(userInput: string): Promise<boolean> {\n const hookMgr = this.state.hookManager;\n if (!hookMgr) return true;\n\n try {\n const result = await hookMgr.runUserPromptSubmit(userInput);\n this.showHookWarnings('UserPromptSubmit', result.warnings);\n\n if (!result.allowed) {\n showError(this.state, result.blockReason || 'Blocked by UserPromptSubmit hook');\n return false;\n }\n\n return true;\n } catch (error) {\n showError(this.state, `UserPromptSubmit hook failed: ${error instanceof Error ? error.message : String(error)}`);\n return false;\n }\n }\n\n // ===========================================================================\n /**\n * Insert a child into the chat container before any follow-up user messages.\n * If no follow-ups are pending, appends to end.\n */\n private addChildBeforeFollowUps(child: Component): void {\n const firstPinned = [\n ...this.state.followUpComponents,\n ...this.state.pendingSignalMessageComponentsById.values(),\n ].find(pinned =>\n this.state.chatContainer.children.includes(('component' in pinned ? pinned.component : pinned) as any),\n );\n\n if (firstPinned) {\n const component = 'component' in firstPinned ? firstPinned.component : firstPinned;\n const idx = this.state.chatContainer.children.indexOf(component as any);\n if (idx >= 0) {\n insertChatComponentWithBoundarySpacing(this.state.chatContainer, child, idx);\n return;\n }\n }\n insertChatComponentWithBoundarySpacing(this.state.chatContainer, child);\n }\n\n // ===========================================================================\n // User Input\n // ===========================================================================\n\n private getUserInput(): Promise<string> {\n return new Promise(resolve => {\n this.state.editor.onSubmit = (text: string) => {\n if (isGoalJudgeInputLocked(this.state)) {\n this.state.editor.setText(text);\n showGoalJudgeInputLockInfo(this.state);\n this.state.ui.requestRender();\n return;\n }\n\n // Add to history for arrow up/down navigation (skip empty)\n if (text.trim()) {\n this.state.editor.addToHistory(text);\n }\n this.state.editor.setText('');\n\n if (this.state.harness.isRunning()) {\n if (text.startsWith('/')) {\n // Run slash commands immediately — they are either settings\n // commands (no agent interaction) or agent-facing commands the\n // user explicitly chose to run mid-stream. Use Ctrl+F to\n // queue instead.\n this.handleSlashCommand(text).catch(error => {\n showError(this.state, error instanceof Error ? error.message : 'Slash command failed');\n });\n return;\n }\n\n const { content, images } = consumePendingImages(text, this.state.pendingImages);\n this.state.pendingImages = [];\n if (images?.length) {\n this.state.pendingImages = images;\n this.queueFollowUpMessage(text);\n return;\n }\n\n this.signalMessage(content);\n return;\n }\n\n resolve(text);\n };\n });\n }\n\n /**\n * Get the workspace, preferring harness-owned workspace over the direct option.\n */\n private getResolvedWorkspace(): Workspace | undefined {\n return this.state.harness.getWorkspace() ?? this.state.workspace;\n }\n\n // ===========================================================================\n // Observational Memory Settings\n // ===========================================================================\n\n // ===========================================================================\n // Login Selector\n // ===========================================================================\n\n // ===========================================================================\n // Slash Commands\n // ===========================================================================\n\n private buildCommandContext(): SlashCommandContext {\n return {\n state: this.state,\n harness: this.state.harness,\n hookManager: this.state.hookManager,\n mcpManager: this.state.mcpManager,\n analytics: this.state.analytics,\n authStorage: this.state.authStorage,\n customSlashCommands: this.state.customSlashCommands,\n showInfo: msg => showInfo(this.state, msg),\n showError: msg => showError(this.state, msg),\n updateStatusLine: () => updateStatusLine(this.state),\n stop: () => this.stop(),\n getResolvedWorkspace: () => this.getResolvedWorkspace(),\n addUserMessage: msg => addUserMessage(this.state, msg),\n renderExistingMessages: () => this.renderExistingMessagesAndSeedIdleCounter(),\n showOnboarding: () => this.showOnboarding(),\n };\n }\n\n private buildEventContext(): EventHandlerContext {\n return {\n state: this.state,\n showInfo: msg => showInfo(this.state, msg),\n showError: msg => showError(this.state, msg),\n showFormattedError: event => showFormattedError(this.state, event),\n updateStatusLine: () => updateStatusLine(this.state),\n notify: (reason, message) => notify(this.state, reason, message),\n analytics: this.state.analytics,\n handleSlashCommand: input => this.handleSlashCommand(input),\n addUserMessage: msg => addUserMessage(this.state, msg),\n addChildBeforeFollowUps: child => this.addChildBeforeFollowUps(child),\n fireMessage: (content, images) => this.fireMessage(content, images),\n startGoal: (objective, cancelMessage, options) =>\n startGoalWithDefaults(this.buildCommandContext(), objective, cancelMessage, options),\n queueFollowUpMessage: content => this.queueFollowUpMessage(content),\n renderExistingMessages: () => this.renderExistingMessagesAndSeedIdleCounter(),\n renderClearedTasksInline: (clearedTasks, insertIndex) =>\n renderClearedTasksInline(this.state, clearedTasks, insertIndex),\n refreshModelAuthStatus: () => this.refreshModelAuthStatus(),\n };\n }\n\n private async handleSlashCommand(input: string): Promise<boolean> {\n return dispatchSlashCommand(input, this.state, () => this.buildCommandContext());\n }\n\n // ===========================================================================\n // Login (used by onboarding)\n // ===========================================================================\n\n async performLogin(providerId: string): Promise<void> {\n const provider = getOAuthProviders().find(p => p.id === providerId);\n const providerName = provider?.name || providerId;\n\n if (!this.state.authStorage) {\n showError(this.state, 'Auth storage not configured');\n return;\n }\n\n const authMode = await promptAuthMode(this.state.ui, providerName, provider?.authModes);\n if (authMode === null) {\n // User cancelled at the mode-selection step.\n return;\n }\n\n return new Promise(resolve => {\n const dialog = new LoginDialogComponent(this.state.ui, providerId, (success, message) => {\n this.state.ui.hideOverlay();\n if (success) {\n showInfo(this.state, `Successfully logged in to ${providerName}`);\n } else if (message) {\n showInfo(this.state, message);\n }\n resolve();\n });\n\n showModalOverlay(this.state.ui, dialog, { widthPercent: 0.8, maxHeight: '60%' });\n dialog.focused = true;\n\n this.state\n .authStorage!.login(providerId, {\n onAuth: (info: { url: string; instructions?: string }) => {\n dialog.showAuth(info.url, info.instructions);\n },\n onPrompt: async (prompt: { message: string; placeholder?: string }) => {\n return dialog.showPrompt(prompt.message, prompt.placeholder);\n },\n onProgress: (message: string) => {\n dialog.showProgress(message);\n },\n signal: dialog.signal,\n authMode,\n })\n .then(async () => {\n this.state.ui.hideOverlay();\n\n const { PROVIDER_DEFAULT_MODELS } = await import('../auth/storage.js');\n const defaultModel = PROVIDER_DEFAULT_MODELS[providerId as keyof typeof PROVIDER_DEFAULT_MODELS];\n if (defaultModel) {\n await this.state.harness.switchModel({ modelId: defaultModel });\n showInfo(this.state, `Logged in to ${providerName} - switched to ${defaultModel}`);\n } else {\n showInfo(this.state, `Successfully logged in to ${providerName}`);\n }\n\n resolve();\n })\n .catch((error: Error) => {\n this.state.ui.hideOverlay();\n if (error.message !== 'Login cancelled') {\n showError(this.state, `Failed to login: ${error.message}`);\n }\n resolve();\n });\n });\n }\n\n // ===========================================================================\n // Onboarding\n // ===========================================================================\n\n async showOnboarding(): Promise<void> {\n const allProviders = getOAuthProviders();\n const authProviders = allProviders.map(p => ({\n label: p.name,\n value: p.id,\n loggedIn: this.state.authStorage?.isLoggedIn(p.id) ?? false,\n }));\n\n const access = await this.buildProviderAccess();\n const hasProviderAccess = Object.values(access).some(Boolean);\n\n const savedSettings = loadSettings();\n const modePacks = getAvailableModePacks(access, savedSettings.customModelPacks);\n const omPacks = getAvailableOmPacks(access);\n\n let prevModePackId = savedSettings.onboarding.modePackId;\n if (prevModePackId === 'custom' && savedSettings.models.activeModelPackId?.startsWith('custom:')) {\n prevModePackId = savedSettings.models.activeModelPackId;\n }\n const previous = savedSettings.onboarding.completedAt\n ? {\n modePackId: prevModePackId,\n omPackId: savedSettings.onboarding.omPackId,\n yolo: savedSettings.preferences.yolo,\n }\n : undefined;\n\n return new Promise<void>(resolve => {\n const component = new OnboardingInlineComponent({\n tui: this.state.ui,\n authProviders,\n modePacks,\n omPacks,\n hasProviderAccess,\n previous,\n onComplete: async (result: OnboardingResult) => {\n this.state.activeOnboarding = undefined;\n this.state.ui.hideOverlay();\n await this.applyOnboardingResult(result);\n resolve();\n },\n onCancel: () => {\n this.state.activeOnboarding = undefined;\n this.state.ui.hideOverlay();\n const settings = loadSettings();\n if (!settings.onboarding.completedAt) {\n settings.onboarding.skippedAt = new Date().toISOString();\n settings.onboarding.version = ONBOARDING_VERSION;\n saveSettings(settings);\n }\n resolve();\n },\n onLogin: (providerId: string, done: () => void) => {\n this.performLogin(providerId).then(async () => {\n try {\n const updatedAccess = await this.buildProviderAccess();\n const updatedHasAccess = Object.values(updatedAccess).some(Boolean);\n component.updateModePacks(getAvailableModePacks(updatedAccess, savedSettings.customModelPacks));\n component.updateOmPacks(getAvailableOmPacks(updatedAccess));\n component.updateHasProviderAccess(updatedHasAccess);\n } catch (err) {\n console.error('Failed to refresh provider access after login:', err);\n } finally {\n done();\n }\n });\n },\n onSelectModel: async (title: string, modeColor?: string): Promise<string | undefined> => {\n const availableModels = await this.state.harness.listAvailableModels();\n if (availableModels.length === 0) return undefined;\n\n return new Promise<string | undefined>(resolveModel => {\n const selector = new ModelSelectorComponent({\n tui: this.state.ui,\n models: availableModels,\n currentModelId: undefined,\n title,\n titleColor: modeColor,\n onSelect: async (model: ModelItem) => {\n this.state.ui.hideOverlay();\n await promptForApiKeyIfNeeded(this.state.ui, model, this.state.authStorage);\n resolveModel(model.id);\n },\n onCancel: () => {\n this.state.ui.hideOverlay();\n resolveModel(undefined);\n },\n });\n\n showModalOverlay(this.state.ui, selector, { maxHeight: '75%' });\n selector.focused = true;\n });\n },\n });\n\n this.state.activeOnboarding = component;\n showModalOverlay(this.state.ui, component, { maxHeight: '80%' });\n component.focused = true;\n });\n }\n\n private async applyOnboardingResult(result: OnboardingResult): Promise<void> {\n const harness = this.state.harness;\n const modePack = result.modePack;\n const modes = harness.listModes();\n\n for (const mode of modes) {\n const modelId = (modePack.models as Record<string, string>)[mode.id];\n if (modelId) {\n (mode as any).defaultModelId = modelId;\n await harness.setThreadSetting({\n key: `modeModelId_${mode.id}`,\n value: modelId,\n });\n }\n }\n\n const currentModeId = harness.getCurrentModeId();\n const currentModeModel = (modePack.models as Record<string, string>)[currentModeId];\n if (currentModeModel) {\n await harness.switchModel({ modelId: currentModeModel });\n }\n\n const subagentModeMap: Record<string, string> = { explore: 'fast', plan: 'plan', execute: 'build' };\n for (const [agentType, modeId] of Object.entries(subagentModeMap)) {\n const saModelId = (modePack.models as Record<string, string>)[modeId];\n if (saModelId) {\n await harness.setSubagentModelId({ modelId: saModelId, agentType });\n }\n }\n\n const omPack = result.omPack;\n harness.setState({ observerModelId: omPack.modelId, reflectorModelId: omPack.modelId });\n harness.setState({ yolo: result.yolo });\n\n const settings = loadSettings();\n settings.onboarding.completedAt = new Date().toISOString();\n settings.onboarding.skippedAt = null;\n settings.onboarding.version = ONBOARDING_VERSION;\n settings.onboarding.omPackId = omPack.id;\n\n const modeDefaults: Record<string, string> = {};\n for (const mode of modes) {\n const modelId = (modePack.models as Record<string, string>)[mode.id];\n if (modelId) modeDefaults[mode.id] = modelId;\n }\n\n let activeModePackId = modePack.id;\n if (modePack.id === 'custom' || modePack.id.startsWith('custom:')) {\n const customName =\n modePack.id === 'custom' ? modePack.name?.trim() || 'Custom' : modePack.id.slice('custom:'.length) || 'Custom';\n activeModePackId = `custom:${customName}`;\n const entry = { name: customName, models: modeDefaults, createdAt: new Date().toISOString() };\n const idx = settings.customModelPacks.findIndex(p => p.name === customName);\n if (idx >= 0) {\n settings.customModelPacks[idx] = entry;\n } else {\n settings.customModelPacks.push(entry);\n }\n settings.models.modeDefaults = modeDefaults;\n } else {\n settings.models.modeDefaults = {};\n }\n\n settings.onboarding.modePackId = activeModePackId;\n settings.models.activeModelPackId = activeModePackId;\n if (harness.getCurrentThreadId()) {\n await harness.setThreadSetting({ key: THREAD_ACTIVE_MODEL_PACK_ID_KEY, value: activeModePackId });\n }\n\n settings.models.activeOmPackId = omPack.id;\n settings.models.omModelOverride = omPack.id === 'custom' ? omPack.modelId : null;\n // Clear any per-role overrides from prior /om use so the newly-selected\n // pack (or custom modelId above) applies to both observer and reflector.\n settings.models.observerModelOverride = null;\n settings.models.reflectorModelOverride = null;\n settings.preferences.yolo = result.yolo;\n\n // Clear any manual subagent overrides so they derive from the active pack\n settings.models.subagentModels = {};\n\n saveSettings(settings);\n\n updateStatusLine(this.state);\n await this.refreshModelAuthStatus();\n }\n\n private shouldShowOnboarding(): boolean {\n const settings = loadSettings();\n const ob = settings.onboarding;\n if (ob.completedAt || ob.skippedAt) {\n return ob.version < ONBOARDING_VERSION;\n }\n return true;\n }\n\n private applyQuietModePreference(enabled: boolean, previewLineLimit = this.state.quietModeMaxToolPreviewLines): void {\n const settings = loadSettings();\n settings.preferences.quietMode = enabled;\n settings.preferences.quietModeMaxToolPreviewLines = previewLineLimit;\n settings.onboarding.quietModePreferenceSelected = true;\n saveSettings(settings);\n\n this.state.quietMode = enabled;\n this.state.quietModeMaxToolPreviewLines = previewLineLimit;\n this.state.taskProgress?.setQuietMode(enabled);\n\n const tools = this.state.allToolComponents.filter(\n (tool): tool is IToolExecutionComponent => typeof tool.setQuietModeDisplay === 'function',\n );\n const color = this.state.harness?.getCurrentMode?.()?.metadata?.color;\n const modeColor = typeof color === 'string' ? color : undefined;\n for (const tool of tools) {\n tool.setCompactToolModeColor?.(modeColor);\n tool.setQuietModeDisplay?.(enabled ? 'quiet' : 'normal');\n tool.setQuietPreviewLineLimit?.(previewLineLimit);\n }\n this.state.ui.requestRender();\n }\n\n private parseQuietPreviewLineAnswer(answer: string | null): number {\n if (answer === 'None') return 0;\n const match = answer?.match(/^(\\d+)/);\n return match ? Number(match[1]) : this.state.quietModeMaxToolPreviewLines;\n }\n\n async showQuietModePreferencePromptIfNeeded(): Promise<void> {\n const settings = loadSettings();\n if (settings.onboarding.quietModePreferenceSelected) return;\n\n const answer = await askModalQuestion(this.state.ui, {\n question:\n 'Try compact quiet mode?\\n\\nQuiet mode keeps tool calls and task progress compact so long sessions are easier to scan.',\n options: [\n { label: 'Enable quiet mode', description: 'Use compact rendering by default' },\n { label: 'Keep classic mode', description: 'Keep the current full rendering' },\n ],\n allowCustomResponse: false,\n selectedOptionLabel: 'Enable quiet mode',\n overlay: { maxHeight: '50%' },\n });\n\n if (answer !== 'Enable quiet mode') {\n this.applyQuietModePreference(false);\n return;\n }\n\n const previewLineAnswer = await askModalQuestion(this.state.ui, {\n question: 'How many quiet-mode tool preview lines should be shown?\\n\\nYou can change this later in /settings.',\n options: [\n { label: 'None', description: 'Hide compact tool detail previews' },\n { label: '1 line', description: 'Show the latest preview line' },\n { label: '2 lines', description: 'Default' },\n { label: '4 lines', description: 'Show more streaming detail' },\n { label: '8 lines', description: 'Show the most detail' },\n ],\n allowCustomResponse: false,\n selectedOptionLabel: '2 lines',\n overlay: { maxHeight: '50%' },\n });\n\n this.applyQuietModePreference(true, this.parseQuietPreviewLineAnswer(previewLineAnswer));\n }\n\n // ===========================================================================\n // Auto-Update\n // ===========================================================================\n\n /**\n * Check npm for a newer version and prompt the user to update.\n * - If the user previously dismissed this version, show a passive note instead.\n * - If the fetch fails or we're already up-to-date, silently return.\n * @param passive When true, only show an info message (used for periodic rechecks).\n */\n private async checkForUpdate(passive = false): Promise<void> {\n const currentVersion = this.state.options.version;\n if (!currentVersion) return;\n\n const latestVersion = await fetchLatestVersion();\n if (!latestVersion || !isNewerVersion(currentVersion, latestVersion)) return;\n\n // Passive mode or previously dismissed — show info message only once\n if (passive) {\n if (!this.hasShownUpdateBanner) {\n this.hasShownUpdateBanner = true;\n showInfo(\n this.state,\n `Update available: v${latestVersion} (current: v${currentVersion}). Run /update to update.`,\n );\n }\n return;\n }\n\n const settings = loadSettings();\n\n // User previously dismissed this exact version — show passive banner note only once\n if (settings.updateDismissedVersion && !isNewerVersion(settings.updateDismissedVersion, latestVersion)) {\n if (!this.hasShownUpdateBanner) {\n this.hasShownUpdateBanner = true;\n showInfo(\n this.state,\n `Update available: v${latestVersion} (current: v${currentVersion}). Run /update to update.`,\n );\n }\n return;\n }\n\n const [pm, changelog] = await Promise.all([detectPackageManager(), fetchChangelog(latestVersion)]);\n\n // Prompt the user (and mark banner as shown so periodic checks don't repeat it)\n this.hasShownUpdateBanner = true;\n await this.showUpdatePrompt(currentVersion, latestVersion, pm, changelog);\n }\n\n /**\n * Show a Y/N prompt offering to auto-update (inline in the chat flow).\n */\n private async showUpdatePrompt(\n currentVersion: string,\n latestVersion: string,\n pm: Awaited<ReturnType<typeof detectPackageManager>>,\n changelog: string | null,\n ): Promise<void> {\n let question = `A new version of Mastra Code is available: v${latestVersion} (current: v${currentVersion}).`;\n if (changelog) {\n question += `\\n\\nWhat's new:\\n${changelog}`;\n }\n question += `\\n\\nWould you like to update now?`;\n\n const answer = await new Promise<string | null>(resolve => {\n const component = new AskQuestionInlineComponent(\n {\n question,\n options: [\n { label: 'Yes', description: 'Update and restart' },\n { label: 'No', description: 'Skip this version' },\n ],\n allowCustomResponse: false,\n onSubmit: answer => {\n this.state.activeInlineQuestion = undefined;\n resolve(answer);\n },\n onCancel: () => {\n this.state.activeInlineQuestion = undefined;\n resolve(null);\n },\n },\n this.state.ui,\n );\n\n insertChatComponentWithBoundarySpacing(this.state.chatContainer, component);\n this.state.activeInlineQuestion = component;\n component.focused = true;\n this.state.ui.requestRender();\n });\n\n if (answer === 'Yes') {\n showInfo(this.state, `Updating to v${latestVersion}…`);\n const ok = await runUpdate(pm, latestVersion);\n if (ok) {\n showInfo(this.state, `Updated to v${latestVersion}. Please restart Mastra Code.`);\n this.stop();\n process.exit(0);\n } else {\n const cmd = getInstallCommand(pm, latestVersion);\n showError(this.state, `Auto-update failed. Run \\`${cmd}\\` manually.`);\n }\n } else {\n // User declined — save the dismissed version\n const settings = loadSettings();\n settings.updateDismissedVersion = latestVersion;\n saveSettings(settings);\n if (answer === 'No') {\n showInfo(this.state, `Update skipped. Run /update to update later.`);\n }\n }\n }\n}\n"]}