{"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/judge-display.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/utils/plan-diff.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/ansi.ts","../src/tui/components/task-progress.ts","../src/tui/components/temporal-gap.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/prune-chat.ts","../src/tui/handlers/agent-lifecycle.ts","../src/tui/handlers/message.ts","../src/tui/handlers/om.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/simple-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":["Editor","matchesKey","theme","getKeybindings","wrapTextWithAnsi","BOX_INDENT_STR","truncateToWidth","visibleWidth","continuationPrefix","Container","getSelectListTheme","getEditorTheme","Input","Box","BOX_INDENT","Spacer","Text","chalk","SelectList","mastra","resolve","realpathSync","execFile","execSync","path","fs","fuzzyFilter","isSelected","line","randomUUID","loadSettings","saveSettings","basename","TOOL_CATEGORIES","parseKey","s","exec","getTermWidth","getMarkdownTheme","Markdown","CHAT_INDENT","mastraBrand","stripAnsi","label","formatTokens","i","j","COLLAPSED_LINES","safeStringify","formatDuration","MAX_COLLAPSED_LINES","padLine","process","truncateAnsi","fitted","MC_TOOLS","tintHex","os","highlight","ensureTerminalGlyphContrast","status","pathDisplay","footerText","termWidth","output","border","maxLineWidth","fixedParts","availableForPath","text","getToolCategory","component","parsePartialJson","getCurrentModeColor","TASKS_STATE_ID","assignTaskIds","parseSubagentMeta","resolvePlanPath","readPlanFile","workspace","formatSkillActivation","ThreadLockError","lines","join","tmpdir","readFileSync","unlinkSync","getThemeMode","defaultOMProgressState","getObserverColor","getReflectorColor","extendedColors","homedir","THREAD_ACTIVE_MODEL_PACK_ID_KEY","access","getAvailableModePacks","resolveThreadActiveModelPackId","getCustomProviderId","toCustomProviderModelId","items","SettingsList","getSettingsListTheme","spawn","askText","checkProfileProviderMismatch","isBrowserbase","nextBrowser","shouldProceed","createBrowserFromSettings","setProfileProvider","getOAuthProviders","PROVIDER_DEFAULT_MODELS","luminance","settings","applyThemeMode","answer","askSelect","GatewayRegistry","MEMORY_GATEWAY_PROVIDER","MEMORY_GATEWAY_DEFAULT_URL","getUserName","OBSERVABILITY_AUTH_PREFIX","githubSignals","GITHUB_SIGNALS_METADATA_KEY","ctx","command","getCurrentGitBranchAsync","HIDDEN_REACTIVE_SIGNAL_TAGS","GOAL_STATE_SIGNAL_ID","shouldRenderReactiveSignal","createReminderComponent","trailingParts","approvePlanFile","truncatedValue","ANSI_STRIP_RE","mimeType","statSync","fileURLToPath","extname","ProcessTerminal","TERM_WIDTH_BUFFER","TUI","detectProject","name","path4","parseYaml","DEFAULT_CONFIG_DIR","getUserId","execFileSync","CombinedAutocompleteProvider","getAvailableOmPacks","ONBOARDING_VERSION"],"mappings":"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","file":"chunk-NUKVNLFS.cjs","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  if (process.env.MASTRACODE_UPDATE_LATEST_VERSION) return process.env.MASTRACODE_UPDATE_LATEST_VERSION;\n\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  if (process.env.MASTRACODE_UPDATE_CHANGELOG) return process.env.MASTRACODE_UPDATE_CHANGELOG;\n\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\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 nextCompactToolGroupKeys = new Array<string | undefined>(components.length);\n  let nextSpacingComponentGroupKey: string | undefined;\n  for (let i = components.length - 1; i >= 0; i--) {\n    nextCompactToolGroupKeys[i] = nextSpacingComponentGroupKey;\n    const component = components[i];\n    if (component && getChatSpacingKind(component)) {\n      nextSpacingComponentGroupKey = (component as CompactToolGroupingParticipant).getCompactToolGroupKey?.();\n    }\n  }\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 nextCompactToolGroupKey = nextCompactToolGroupKeys[i];\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.session.thread.getId();\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        id,\n        threadId,\n        resourceId: state.session.identity.getResourceId(),\n        ...(judgeModelId ? { judgeModelId } : {}),\n        maxRuns: maxTurns,\n      });\n      this.record = persisted\n        ? { ...persisted, id: persisted.id ?? id }\n        : 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.session.thread.getId();\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(reason?: string): GoalState | null {\n    if (this.record && this.record.status === 'active') {\n      this.stopActiveTimer();\n      this.record = { ...this.record, status: 'paused', pausedReason: reason, 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', pausedReason: undefined, 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.session.thread.getId();\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.pausedReason ? { pausedReason: this.record.pausedReason } : {}),\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              id: this.record.id,\n              threadId,\n              resourceId: state.session.identity.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({\n                threadId,\n                status: desiredStatus,\n                ...(this.record.pausedReason ? { pausedReason: this.record.pausedReason } : {}),\n              });\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.session.thread.setSetting({ 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.session.thread.getId();\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: 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.controller.getCurrentAgent(state.session);\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 { AgentControllerMessage } from '@mastra/core/agent-controller';\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.updateStatusLine();\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    ctx.updateStatusLine();\n\n    // Kick off the next turn using the same goal-reminder signal format used by\n    // startGoal, so the model receives a structured system-reminder rather than\n    // a plain user message.\n    const resumedGoal = goalManager.getGoal();\n    try {\n      await state.session.sendSignal(createGoalReminderSignal(resumedGoal!)).accepted;\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    // Abort any in-flight turn. The cleared objective stops the core loop from\n    // driving *new* goal continuations, but a turn that was already running when\n    // the user cleared keeps going to completion — which reads as \"it's still\n    // attempting the goal\". Stop it immediately so clear means stop. Mirrors the\n    // Esc/abort cleanup so a turn parked in a tool suspension (e.g. ask_user) is\n    // also aborted cleanly.\n    if (state.session.run.isRunning() || state.session.suspensions.hasPending()) {\n      state.activeInlineQuestion = undefined;\n      state.pendingInlineQuestions.length = 0;\n      state.pendingAskUserComponents?.clear();\n      state.userInitiatedAbort = true;\n      state.session.abort();\n    }\n    ctx.updateStatusLine();\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.controller.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.session.model.get() ?? 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.session.thread.create();\n    state.pendingNewThread = false;\n  }\n\n  const shouldPersistToCreatedThread = !state.session.thread.getId();\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  ctx.updateStatusLine();\n\n  if (options.trigger === 'none') {\n    return;\n  }\n\n  try {\n    await state.session.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): AgentControllerMessage {\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 AgentControllerMessage;\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 controller 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.controller.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 AgentController display state (canonical source)\n  const ds = ctx.state.session.displayState.get();\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.state.session.state.get() as any)?.yolo === true;\n  void ctx.state.session.state.set({ 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.session.model.get() ?? '';\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.state.session.state.get() as any)?.thinkingLevel ?? 'off') as string;\n  const modelId = ctx.state.session.model.get() ?? '';\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.state.session.state.set({ 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.state.session.state.set({ 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    await ctx.state.session.permissions.setForCategory({ 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.state.session.permissions.getRules();\n  const grants = ctx.state.session.getGrants();\n  const isYolo = (ctx.state.session.state.get() 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.state.session.thread.getId()) {\n    ctx.showInfo('No active thread. Send a message first.');\n    return;\n  }\n  await ctx.state.session.thread.rename({ 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.session.state.get() 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.state.session.mode.resolve().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.controller.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.state.session.mode.switch({ 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.state.session.mode.resolve();\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 { AgentControllerMessage } from '@mastra/core/agent-controller';\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?: AgentControllerMessage;\n  private _id: number;\n\n  constructor(\n    message?: AgentControllerMessage,\n    hideThinkingBlock = false,\n    markdownTheme: MarkdownTheme = getMarkdownTheme(),\n  ) {\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: AgentControllerMessage): void {\n    // Deep copy the message to prevent mutation from the controller'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","/**\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. */\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.waitingForUser\n      ? 'waiting'\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  private streamingReason = '';\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  setStreamingReason(reason: string): void {\n    this.streamingReason = reason;\n    this.renderContent();\n  }\n\n  setResult(result: GoalJudgeResult, turnsUsed: number, maxTurns: number): void {\n    this.result = result;\n    this.streamingReason = '';\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 && !this.streamingReason) {\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 || this.streamingReason)) {\n      this.addChild(new Text(this.renderRow('', innerWidth, border), BOX_INDENT, 0));\n    }\n\n    const reason = this.result?.reason ?? this.streamingReason;\n    if (reason) {\n      for (const line of this.wrapLine(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 { 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 * Line-level diffing for plan revisions.\n *\n * Uses a real LCS (longest common subsequence) diff so that inserting or deleting a few\n * lines doesn't mark everything after it as changed. Both the rendered approval diff and\n * the \"is a diff worth showing\" heuristic share this so the heuristic measures the actual\n * diff rather than predicting one.\n */\n\nexport interface DiffEntry {\n  type: 'added' | 'removed' | 'context';\n  text: string;\n}\n\n/** Produce structured diff entries between two plan texts using an LCS diff. */\nexport function generatePlanDiff(oldText: string, newText: string): DiffEntry[] {\n  const oldLines = oldText.split(/\\r?\\n/);\n  const newLines = newText.split(/\\r?\\n/);\n  const n = oldLines.length;\n  const m = newLines.length;\n\n  // LCS length table.\n  const lcs: number[][] = Array.from({ length: n + 1 }, () => new Array<number>(m + 1).fill(0));\n  for (let i = n - 1; i >= 0; i--) {\n    for (let j = m - 1; j >= 0; j--) {\n      lcs[i]![j] = oldLines[i] === newLines[j] ? lcs[i + 1]![j + 1]! + 1 : Math.max(lcs[i + 1]![j]!, lcs[i]![j + 1]!);\n    }\n  }\n\n  const entries: DiffEntry[] = [];\n  let i = 0;\n  let j = 0;\n  while (i < n && j < m) {\n    if (oldLines[i] === newLines[j]) {\n      entries.push({ type: 'context', text: oldLines[i]! });\n      i++;\n      j++;\n    } else if (lcs[i + 1]![j]! >= lcs[i]![j + 1]!) {\n      entries.push({ type: 'removed', text: oldLines[i]! });\n      i++;\n    } else {\n      entries.push({ type: 'added', text: newLines[j]! });\n      j++;\n    }\n  }\n  while (i < n) entries.push({ type: 'removed', text: oldLines[i++]! });\n  while (j < m) entries.push({ type: 'added', text: newLines[j++]! });\n\n  return entries;\n}\n\n/**\n * Decide whether a diff is worth rendering instead of just showing the full new plan.\n *\n * We generate the real diff and compare its size (added + removed lines) against the size\n * of the whole diff (added + removed + unchanged context). When most of the diff is changes\n * rather than shared context, the diff is no clearer than the full text, so callers fall\n * back to rendering the whole plan. A genuinely new plan (no previous text, or no shared\n * lines) is therefore shown in full.\n */\nexport function shouldShowDiff(previousPlan: string, plan: string, maxChangedRatio = 0.5): boolean {\n  if (!previousPlan || previousPlan === plan) return false;\n\n  const entries = generatePlanDiff(previousPlan, plan);\n  const changed = entries.filter(e => e.type !== 'context').length;\n  if (changed === 0) return false;\n\n  // changed / total entries == diff size relative to the full plan view.\n  return changed / Math.max(entries.length, 1) <= maxChangedRatio;\n}\n","/**\n * Inline plan approval component.\n * Shows a submitted plan as rendered markdown with Approve/Use as Goal/Request Changes options\n * directly in the conversation flow. When a previous plan exists, shows a diff of changes.\n *\n * \"Request changes\" rejects the plan and stops the agent — the user provides\n * revision feedback via a regular chat message rather than inline input.\n */\n\nimport {\n  Box,\n  Container,\n  Markdown,\n  SelectList,\n  Spacer,\n  Text,\n  visibleWidth,\n  wrapTextWithAnsi,\n} from '@earendil-works/pi-tui';\nimport type { Component, Focusable, SelectItem, TUI } from '@earendil-works/pi-tui';\nimport chalk from 'chalk';\nimport type { DiffEntry } from '../../utils/plan-diff.js';\nimport { generatePlanDiff } from '../../utils/plan-diff.js';\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  /** Filename on disk (e.g. `add-dark-mode.md`). */\n  planFilename?: string;\n  /** Previous plan content for diff display on resubmission. */\n  previousPlan?: string;\n  onApprove: () => void;\n  onGoal: () => void;\n  onReject: () => 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: string[] = [];\n    for (const line of rendered) {\n      // Always wrap every line to innerWidth using the library's ANSI-aware\n      // wrapper. This handles paragraphs that the Markdown renderer outputs\n      // as single long lines without wrapping.\n      const wrapped = wrapTextWithAnsi(line, innerWidth);\n      for (const chunk of wrapped) {\n        const chunkVis = visibleWidth(chunk);\n        const padding = ' '.repeat(Math.max(0, innerWidth - chunkVis));\n        body.push(`${border('│')} ${chunk}${padding} ${border('│')}`);\n      }\n    }\n    return [top, ...body, bottom];\n  }\n}\n\n/**\n * Renders a unified diff between two plan texts inside a bordered box.\n * Long lines are wrapped (not truncated) so the full plan text is visible.\n */\nclass PlanDiffBox implements Component {\n  private diffEntries: DiffEntry[];\n\n  constructor(oldPlan: string, newPlan: string) {\n    this.diffEntries = generatePlanDiff(oldPlan, newPlan);\n  }\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 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\n    const removedColor = chalk.hex(mastra.red);\n    const addedColor = chalk.hex(theme.getTheme().success);\n\n    const body: string[] = [];\n    for (const entry of this.diffEntries) {\n      const colorFn =\n        entry.type === 'added'\n          ? addedColor\n          : entry.type === 'removed'\n            ? removedColor\n            : (t: string) => theme.fg('muted', t);\n      const prefix = entry.type === 'added' ? '+ ' : entry.type === 'removed' ? '- ' : '  ';\n      const prefixWidth = 2;\n      const textWidth = innerWidth - prefixWidth;\n\n      // Use the library's ANSI-aware word-wrap on the raw text first, then\n      // colorize each resulting chunk. This guarantees every line fits.\n      const wrappedChunks = wrapTextWithAnsi(entry.text, textWidth);\n      for (let ci = 0; ci < wrappedChunks.length; ci++) {\n        const linePrefix = ci === 0 ? prefix : '  ';\n        const content = colorFn(`${linePrefix}${wrappedChunks[ci]}`);\n        const contentVis = visibleWidth(content);\n        const padding = ' '.repeat(Math.max(0, innerWidth - contentVis));\n        body.push(`${border('│')} ${content}${padding} ${border('│')}`);\n      }\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 onApprove?: () => void;\n  private onGoal?: () => void;\n  private onReject?: () => void;\n  private resolved = false;\n  private mode: 'streaming' | 'select' = 'select';\n  private planTitle: string;\n  private planContent: string;\n  private planFilename?: string;\n  private previousPlan?: 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  }\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.planFilename = options.planFilename;\n    this.previousPlan = options.previousPlan;\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.planFilename = options.planFilename;\n    this.previousPlan = options.previousPlan;\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 { path?: unknown };\n    // submit_plan streams only the `path` arg; title/plan are read from disk on suspend.\n    if (typeof partial.path === 'string' && partial.path) {\n      this.planFilename = partial.path;\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.renderPlanHeader();\n\n    // Show diff when this is a resubmission with a previous plan\n    if (this.previousPlan) {\n      this.contentBox.addChild(new Text(theme.fg('dim', 'Changes from previous plan:'), 0, 0));\n      this.contentBox.addChild(new Spacer(1));\n      this.contentBox.addChild(new PlanDiffBox(this.previousPlan, this.planContent));\n    } else {\n      this.renderPlanContent();\n    }\n    this.contentBox.addChild(new Spacer(1));\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: 'changes',\n        label: `  ${theme.fg('warning', 'Request changes')} ${theme.fg('dim', '— reject and provide feedback via chat')}`,\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.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    if (this.planFilename) {\n      this.contentBox.addChild(new Text(theme.fg('dim', this.planFilename), 0, 0));\n    }\n    this.contentBox.addChild(new Spacer(1));\n  }\n\n  private renderPlanContent(): void {\n    this.contentBox.addChild(new PlanContentBox(this.planContent));\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 'changes':\n        this.handleReject();\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(): void {\n    if (this.resolved) return;\n    this.resolved = true;\n    this.showResult('Changes requested', false);\n    this.onReject?.();\n  }\n\n  private showResult(status: string, isApproved: boolean): 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 Spacer(1));\n    this.contentBox.addChild(new Text(`${icon} ${theme.fg('dim', status)}`, 0, 0));\n    this.contentBox.addChild(new Spacer(1));\n    if (!isApproved) {\n      this.contentBox.addChild(new Text(theme.fg('dim', 'Send a message with your revision feedback'), 0, 0));\n      this.contentBox.addChild(new Spacer(1));\n    }\n  }\n\n  handleInput(data: string): void {\n    if (this.resolved) return;\n\n    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  /** Filename on disk (e.g. `add-dark-mode.md`). */\n  planFilename?: 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    if (options.planFilename) {\n      contentBox.addChild(new Text(theme.fg('dim', options.planFilename), 0, 0));\n    }\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 && options.feedback !== 'Revision requested') {\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 * 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 * 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/signals';\nimport chalk from 'chalk';\nimport { getTermWidth, theme } from '../theme.js';\nimport { truncateAnsi } from './ansi.js';\n\nexport function formatTaskProgressLine(task: TaskItemInput, indent = '    '): string {\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\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(formatTaskProgressLine(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","/**\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 * 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/signals';\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/signals';\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.session?.mode?.resolve?.()?.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.session.respondToToolApproval({ decision: 'approve' });\n      } else if (action.type === 'always_allow_category') {\n        state.session.respondToToolApproval({ decision: 'always_allow_category' });\n      } else if (action.type === 'yolo') {\n        void state.session.state.set({ yolo: true } as any);\n        state.session.respondToToolApproval({ decision: 'approve' });\n      } else {\n        state.session.respondToToolApproval({ decision: 'decline' });\n      }\n    },\n  });\n\n  // Set up dismissal to decline\n  state.pendingApprovalDismiss = declineContext => {\n    state.ui.hideOverlay();\n    state.pendingApprovalDismiss = null;\n    state.session.respondToToolApproval({ decision: 'decline', declineContext });\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 AgentController 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.session.displayState.get();\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 path arg 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 AgentController 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 AgentController 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 { AgentControllerMessage, AgentControllerMessageContent } from '@mastra/core/agent-controller';\nimport { parseSubagentMeta } from '@mastra/core/agent-controller';\nimport type { TaskItemInput, TaskItemSnapshot } from '@mastra/core/signals';\nimport { assignTaskIds } from '@mastra/core/signals';\nimport type { GoalEvaluationPayload } from '@mastra/core/stream';\nimport { TASKS_STATE_ID } from '@mastra/core/tools';\nimport { readPlanFile, resolvePlanPath } from '../utils/plans.js';\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 { JudgeDisplayComponent } from './components/judge-display.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 { formatTaskProgressLine } from './components/task-progress.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 } 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 = AgentControllerMessage & {\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.session.mode.resolve().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    container.addChild(new Text(formatTaskProgressLine(task, '  '), BOX_INDENT, 0));\n  }\n  insertTaskHistoryComponent(state, container, insertIndex);\n}\n\nexport function renderCompletedTasksInline(\n  state: TUIState,\n  completedTasks: TaskItemSnapshot[],\n  insertIndex = -1,\n): void {\n  const container = new TaskHistoryComponent();\n  const count = completedTasks.length;\n  container.addChild(\n    new Text(`${theme.fg('accent', 'Tasks')} ${theme.fg('dim', `[${count}/${count} completed]`)}`, BOX_INDENT, 0),\n  );\n  for (const task of completedTasks) {\n    container.addChild(new Text(formatTaskProgressLine(task, '  '), BOX_INDENT, 0));\n  }\n  insertTaskHistoryComponent(state, container, insertIndex);\n}\n\nfunction getTaskKey(task: TaskItemSnapshot): string {\n  return task.id || task.content;\n}\n\nexport function renderTaskDeltaInline(\n  state: TUIState,\n  previousTasks: TaskItemSnapshot[],\n  nextTasks: TaskItemSnapshot[],\n  insertIndex = -1,\n): boolean {\n  const previousByKey = new Map(previousTasks.map(task => [getTaskKey(task), task]));\n  const addedTasks = nextTasks.filter(task => !previousByKey.has(getTaskKey(task)));\n  const inProgressTasks = nextTasks.filter(task => {\n    const previous = previousByKey.get(getTaskKey(task));\n    return task.status === 'in_progress' && previous?.status !== 'in_progress';\n  });\n  const completedTasks = nextTasks.filter(task => {\n    const previous = previousByKey.get(getTaskKey(task));\n    return task.status === 'completed' && previous?.status !== 'completed';\n  });\n\n  if (addedTasks.length === 0 && inProgressTasks.length === 0 && completedTasks.length === 0) return false;\n\n  const changedTaskKeys = new Set([...addedTasks, ...inProgressTasks, ...completedTasks].map(getTaskKey));\n  const changedTasks = nextTasks.filter(task => changedTaskKeys.has(getTaskKey(task)));\n\n  const container = new TaskHistoryComponent();\n  container.addChild(new Text(theme.fg('accent', 'Tasks'), BOX_INDENT, 0));\n\n  for (const task of changedTasks) {\n    container.addChild(new Text(formatTaskProgressLine(task, '  '), BOX_INDENT, 0));\n  }\n\n  insertTaskHistoryComponent(state, container, insertIndex);\n  return true;\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    renderCompletedTasksInline(state, nextTasks);\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  renderTaskDeltaInline(state, previousTasks, nextTasks);\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, {\n    component,\n    text,\n    images,\n    isInterjection: options?.isInterjection,\n  });\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.session.displayState.get().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 imageCount = pending.images?.length ?? 0;\n  const prefix = imageCount > 0 ? `[${imageCount} image${imageCount > 1 ? 's' : ''}] ` : '';\n  const label = getPendingUserMessageLabel(pending.isInterjection);\n  const confirmed = new UserMessageComponent(prefix + 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 removeUserMessage(state: TUIState, messageId: string): void {\n  const component = state.messageComponentsById.get(messageId);\n  if (!component) return;\n  state.chatContainer.removeChild(component as never);\n  state.messageComponentsById.delete(messageId);\n  reconcileChatBoundarySpacers(state.chatContainer);\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: AgentControllerMessage, 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<AgentControllerMessageContent, { type: 'system_reminder' }> =>\n      content.type === 'system_reminder',\n  );\n\n  if (reminderPart) {\n    const goalMetadata = reminderPart as typeof reminderPart & {\n      goalMaxTurns?: number;\n      judgeModelId?: string;\n      goalEvaluation?: GoalEvaluationPayload;\n    };\n\n    if (reminderPart.reminderType === 'goal-judge' && goalMetadata.goalEvaluation) {\n      const judgeComponent = new JudgeDisplayComponent(\n        null,\n        goalMetadata.goalEvaluation.iteration,\n        goalMetadata.goalEvaluation.maxRuns,\n      );\n      judgeComponent.setEvaluation(goalMetadata.goalEvaluation);\n      addChildBeforeMessageOrFollowUps(state, judgeComponent, reminderPart.precedesMessageId);\n      state.messageComponentsById.set(message.id, judgeComponent);\n      state.ui.requestRender();\n      return;\n    }\n\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  const fileCount = message.content.filter(c => c.type === 'file').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 attachmentLabels = [\n    imageCount > 0 ? `[${imageCount} image${imageCount > 1 ? 's' : ''}]` : '',\n    fileCount > 0 ? `[${fileCount} file${fileCount > 1 ? 's' : ''}]` : '',\n  ].filter(Boolean);\n  const prefix = attachmentLabels.length > 0 ? `${attachmentLabels.join(' ')} ` : '';\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.session.displayState.get().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 = 200;\n\nfunction getLatestMessageTimestamp(messages: AgentControllerMessage[]): 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 controller 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.session.thread.listActiveMessages({ 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: AgentControllerMessageContent[] = [];\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: AgentControllerMessage = {\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 = state.session.model.get() || 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 { path?: string } | undefined;\n            // Result could be a string or an object with content property\n            let resultText = '';\n            let submittedPlan: { title?: string; path?: string; plan?: string } | undefined;\n            if (typeof toolResult.result === 'string') {\n              resultText = toolResult.result;\n            } else if (typeof toolResult.result === 'object' && toolResult.result !== null) {\n              if ('content' in toolResult.result && typeof (toolResult.result as any).content === 'string') {\n                resultText = (toolResult.result as any).content;\n              }\n              if (\n                'submittedPlan' in toolResult.result &&\n                typeof (toolResult.result as any).submittedPlan === 'object'\n              ) {\n                submittedPlan = (toolResult.result as any).submittedPlan;\n              }\n            }\n            // The approved result starts with \"Plan approved.\" while rejected\n            // results start with \"Plan was not approved\" — a naive `includes`\n            // would match both since \"not approved\" still contains \"approved\".\n            const isApproved = resultText.startsWith('Plan approved');\n            // Extract feedback if rejected with inline feedback\n            let feedback: string | undefined;\n            if (!isApproved && resultText.includes('not approved')) {\n              const feedbackMatch = resultText.match(/User feedback:\\s*(.+?)(?:\\n|$)/);\n              // Use extracted feedback or a generic marker so PlanResultComponent\n              // renders \"Changes requested\" (it checks truthiness of feedback).\n              feedback = feedbackMatch?.[1] || 'Revision requested';\n            }\n\n            const submittedPath = submittedPlan?.path || args?.path;\n            if (submittedPath) {\n              // Prefer the submitted plan snapshot persisted in the tool result.\n              // Older history entries may not have it, so fall back to reading the\n              // submitted file from disk.\n              const sessionState = state.session.state.get() as any;\n              const projectPath = sessionState?.projectPath as string | undefined;\n              const recoverAbsPath = !submittedPlan?.plan\n                ? resolvePlanPath(projectPath ?? process.cwd(), submittedPath)\n                : undefined;\n              const recovered = recoverAbsPath ? await readPlanFile(recoverAbsPath) : undefined;\n              const planBody = submittedPlan?.plan ?? recovered?.plan ?? '';\n              const planTitle = submittedPlan?.title || recovered?.title || 'Implementation Plan';\n              const planResult = new PlanResultComponent({\n                title: planTitle,\n                plan: planBody,\n                planFilename: submittedPath,\n                isApproved,\n                feedback,\n              });\n              state.chatContainer.addChild(planResult);\n              replacedWithInline = true;\n              // Restore previousPlanSnapshot (keyed by submitted path) so that if the\n              // agent resubmits after a restart, the diff can be computed against\n              // the last submitted plan body, not whatever the mutable file now contains.\n              state.previousPlanSnapshot = { path: submittedPath, plan: planBody };\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: AgentControllerMessage = {\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: AgentControllerMessage = {\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 = (state.session.state.get() as { tasks?: TaskItemSnapshot[] } | undefined)?.tasks;\n    if (!areTasksEqual(currentTasks, previousTasksAcc)) {\n      try {\n        await state.session.state.set({ tasks: previousTasksAcc });\n      } catch {\n        // Custom controller 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    state.session.displayState.restoreTasks(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.state.session?.stream?.isActive?.() ?? ctx.state.session?.displayState?.get?.().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.state.session.thread.create();\n    ctx.state.pendingNewThread = false;\n  }\n\n  if (isCurrentThreadActive(ctx)) {\n    const signal = ctx.state.session.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.state.session.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.controller.hasWorkspace()) {\n    workspace = await ctx.controller.resolveWorkspace({ session: ctx.state.session });\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.session.thread.detachFromCurrent();\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.session.displayState.get().modifiedFiles.clear();\n  // Clear per-thread ephemeral state from the global controller state\n  await state.session.state.set({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n  state.previousPlanSnapshot = undefined;\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 * `controller.session.thread.clone()` 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.session.displayState.clearModifiedFiles();\n  // Clear per-thread ephemeral state from the global controller state\n  await state.session.state.set({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n  state.previousPlanSnapshot = undefined;\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.session.thread.getId();\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.session.thread.clone({\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, controller } = ctx;\n  const { session } = state;\n  const sub = args[0]?.trim();\n  const current = session.identity.getResourceId();\n  const defaultId = session.identity.getDefaultResourceId();\n\n  if (!sub) {\n    const knownIds = await controller.getKnownResourceIds(session);\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  await controller.setResourceId(session, { resourceId: newId });\n\n  // Try to resume the most recent thread for this resource\n  const threads = await session.thread.list();\n  const latest = [...threads].sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime())[0];\n\n  if (latest) {\n    await session.thread.switch({ threadId: latest.id, emitEvent: false });\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 AgentController display state (canonical source for file modifications)\n  const modifiedFiles = state.session.displayState.get().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 { AgentControllerThread } from '@mastra/core/agent-controller';\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: AgentControllerThread[];\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: AgentControllerThread) => void;\n  onCancel: () => void;\n  /** Called when user presses 'c' to clone the selected thread */\n  onClone?: (thread: AgentControllerThread) => 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: AgentControllerThread[];\n  private filteredThreads: AgentControllerThread[];\n  private selectedIndex = 0;\n  private currentThreadId: string | null;\n  private currentResourceId: string | undefined;\n  private currentProjectPath: string | undefined;\n  private onSelectCallback: (thread: AgentControllerThread) => void;\n  private onCancelCallback: () => void;\n  private onCloneCallback: ((thread: AgentControllerThread) => 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(): AgentControllerThread[] {\n    const { startIndex, endIndex } = this.getVisibleRange();\n    return this.filteredThreads.slice(startIndex, endIndex);\n  }\n\n  private getPreviewCandidates(initialLoad: boolean): AgentControllerThread[] {\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: AgentControllerThread[], currentThreadId: string | null): AgentControllerThread[] {\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.session.thread.getId(),\n    resourceId: ctx.state.session.identity.getResourceId(),\n    mode: ctx.state.session.mode.get(),\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.session.thread.clone({\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.session.thread.list({ allResources: true });\n  const currentId = state.pendingNewThread ? null : state.session.thread.getId();\n  const currentResourceId = state.session.identity.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          ctx.showInfo(`Switched to: ${thread.title || thread.id}`);\n          resolve();\n          return;\n        }\n\n        if (thread.resourceId !== currentResourceId) {\n          await state.controller.setResourceId(state.session, { resourceId: thread.resourceId });\n        }\n        try {\n          await state.session.thread.switch({ 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.session.thread.clone({\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 { state } = ctx;\n  const currentThreadId = state.session.thread.getId();\n  const currentResourceId = state.session.identity.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 state.session.thread.list({ 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.session.thread.getId();\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.session.state.get() 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.session.thread.setSetting({ 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 controllerWithState = ctx.state.session.state.get() as\n    | {\n        sandboxAllowedPaths?: string[];\n      }\n    | undefined;\n  const currentPaths = controllerWithState?.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  await ctx.state.session.state.set({ sandboxAllowedPaths: updated } as any);\n  await ctx.state.session.thread.setSetting({ 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  await ctx.state.session.state.set({ sandboxAllowedPaths: updated } as any);\n  await ctx.state.session.thread.setSetting({ 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 agentControllerState = ctx.state.session.state.get() as\n    | {\n        sandboxAllowedPaths?: string[];\n      }\n    | undefined;\n  const currentPaths = agentControllerState?.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/agent-controller';\nimport type { OMBufferedStatus, OMProgressState, OMStatus } from '@mastra/core/agent-controller';\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.session.displayState.get().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.controller.listModes();\n  const currentMode = modes.length > 1 ? state.session.mode.resolve() : 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.session.om.observer.modelId()\n          : state.session.om.reflector.modelId()\n        : state.session.model.get()) ?? '';\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.session.followUps.count();\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.session.displayState.get();\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.session.displayState.get().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 (state.tokensPerSec > 0) {\n      const tpsLabel = `${state.tokensPerSec} tok/s`;\n      parts.push({\n        plain: tpsLabel,\n        styled: theme.fg('dim', tpsLabel),\n      });\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.controller.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 controller = ctx.state.controller;\n  const modes = controller.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 ctx.state.session.thread.setSetting({ key: `modeModelId_${mode.id}`, value: modelId });\n    }\n  }\n\n  const currentModeId = ctx.state.session.mode.get();\n  const currentModeModel = (pack.models as Record<string, string>)[currentModeId];\n  if (currentModeModel) {\n    await ctx.state.session.model.switch({ 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 ctx.state.session.subagents.model.set({ modelId: saModelId, agentType });\n    }\n  }\n\n  await ctx.state.session.thread.setSetting({ 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 = ((ctx.state.session.state.get() as any)?.thinkingLevel ?? 'off') as string;\n  if (hasOpenAI && currentThinking === 'off') {\n    await ctx.state.session.state.set({ 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 threadId = ctx.state.session.thread.getId();\n    const thread = threadId ? (await ctx.state.session.thread.list()).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 ctx.state.session.thread.setSetting({ 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 threadId = ctx.state.session.thread.getId();\n  const thread = threadId ? (await ctx.state.session.thread.list()).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 ctx.state.session.thread.setSetting({ 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 controller = ctx.state.controller;\n  const models = await controller.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 = ctx.state.session.thread.getId();\n  const thread = threadId ? (await ctx.state.session.thread.list()).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.controller.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.session.subagents.model.get({ 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.session.subagents.model.set({ 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 controllerWithConfig = ctx.state.controller as unknown as {\n    config?: {\n      subagents?: Array<{ id: string; name: string; description: string }>;\n    };\n  };\n  const configuredSubagents = controllerWithConfig.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.controller.listAvailableModels();\n\n  const agentControllerState = ctx.state.session.state.get() as Record<string, unknown> | undefined;\n  const config = {\n    observerModelId: ctx.state.session.om.observer.modelId() ?? '',\n    reflectorModelId: ctx.state.session.om.reflector.modelId() ?? '',\n    observationThreshold: ctx.state.session.om.observer.threshold() ?? 30_000,\n    reflectionThreshold: ctx.state.session.om.reflector.threshold() ?? 40_000,\n    cavemanObservations: (agentControllerState?.cavemanObservations as boolean | undefined) ?? false,\n    observeAttachments: (agentControllerState?.observeAttachments as 'auto' | boolean | undefined) ?? '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.session.om.reflector.modelId() ?? null;\n          await ctx.state.session.om.observer.switchModel({ 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.session.om.observer.modelId() ?? null;\n          await ctx.state.session.om.reflector.switchModel({ 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.session.state.set({ observationThreshold: value } as any);\n          await ctx.state.session.thread.setSetting({ key: 'observationThreshold', value });\n          persistOmThresholds({ observationThreshold: value });\n        },\n        onReflectionThresholdChange: async value => {\n          await ctx.state.session.state.set({ reflectionThreshold: value } as any);\n          await ctx.state.session.thread.setSetting({ key: 'reflectionThreshold', value });\n          persistOmThresholds({ reflectionThreshold: value });\n        },\n        onCavemanObservationsChange: async enabled => {\n          await ctx.state.session.state.set({ cavemanObservations: enabled } as any);\n          await ctx.state.session.thread.setSetting({ key: 'cavemanObservations', value: enabled });\n          persistOmCavemanObservations(enabled);\n          ctx.showInfo(`Caveman observations → ${enabled ? 'on' : 'off'}`);\n        },\n        onObserveAttachmentsChange: async value => {\n          await ctx.state.session.state.set({ observeAttachments: value } as any);\n          await ctx.state.session.thread.setSetting({ 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: 'oauth' | 'env' | 'stored' | 'none';\n}\n\n/**\n * OAuth credentials are stored under the auth provider id, which differs from\n * the catalog provider id for OpenAI (stored as `openai-codex`).\n */\nfunction getAuthProviderId(provider: string): string {\n  return provider === 'openai' ? 'openai-codex' : provider;\n}\n\n/**\n * Build a deduplicated list of providers from available models,\n * annotated with their current key source.\n */\nexport function 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?.isLoggedIn(getAuthProviderId(model.provider))) {\n      source = 'oauth';\n    } else 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 'oauth':\n      return theme.fg('success', '✓') + theme.fg('dim', ' (oauth)');\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  let models = await ctx.state.controller.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 === 'oauth') {\n        detailText.setText(theme.fg('dim', '  Authenticated via OAuth. Press Enter to add an API key override.'));\n      } else if (info.source === 'env') {\n        detailText.setText(\n          theme.fg('dim', '  Key set via environment variable. Press Enter to store a local override.'),\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        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 = async (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            const storedKey = ctx.authStorage.getStoredApiKey(info.provider);\n            ctx.authStorage.remove(`apikey:${info.provider}`);\n            if (info.envVar && process.env[info.envVar] === storedKey) {\n              delete process.env[info.envVar];\n            }\n            ctx.state.controller.invalidateAvailableModelsCache();\n            models = await ctx.state.controller.listAvailableModels();\n            providers = getProviderList(ctx, models);\n            ctx.showInfo(`API key removed for ${info.provider}`);\n            rebuildList();\n          } else if (info?.source === 'env') {\n            ctx.showInfo(\n              `${info.provider} key is set via environment variable${info.envVar ? ` (${info.envVar})` : ''}. Remove it from your shell environment to unset.`,\n            );\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.session.mode.resolve().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.session.state.get() 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.session.model.get() ?? '',\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.session.state.set({ notifications: mode });\n        ctx.showInfo(`Notifications: ${mode}`);\n      },\n      onYoloChange: async enabled => {\n        await ctx.state.session.state.set({ yolo: enabled } as any);\n      },\n      onThinkingLevelChange: async level => {\n        await ctx.state.session.state.set({ 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.session.state.set({ escapeAsCancel: enabled });\n        await ctx.state.session.thread.setSetting({ 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 controller 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 BrowserAgent = { browser?: MastraBrowser; setBrowser?: (browser?: MastraBrowser) => void };\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 resolveModeAgent(mode: unknown, agentControllerState: unknown): BrowserAgent | undefined {\n  const modeAgent = (mode as { agent?: unknown }).agent;\n  return typeof modeAgent === 'function'\n    ? (modeAgent(agentControllerState) as BrowserAgent)\n    : (modeAgent as BrowserAgent | undefined);\n}\n\nfunction applyBrowserToAgents(\n  ctx: SlashCommandContext,\n  browser: MastraBrowser | undefined,\n  browserSettings?: BrowserSettings,\n): void {\n  const modes = ctx.controller.listModes();\n  let agentControllerState: unknown;\n  for (const mode of modes) {\n    const agent = resolveModeAgent(mode, (agentControllerState ??= ctx.state.session.state.get()));\n    agent?.setBrowser?.(browser);\n  }\n  ctx.controller.setBrowser?.(browser);\n  // Track the active browser settings in controller state\n  void ctx.state.session.state.set({ [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 controller state (what's actually running)\n    const state = ctx.state.session.state.get() 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    const currentMode = ctx.state.session.mode.resolve();\n    const currentAgent = resolveModeAgent(currentMode, ctx.state.session.state.get());\n    let browserInstance = currentAgent?.browser;\n\n    if (!browserInstance && browser.enabled) {\n      browserInstance = await createBrowserFromSettings(browser);\n      applyBrowserToAgents(ctx, browserInstance, browser);\n    }\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  if (isBrowserbase) {\n    cdpUrl = undefined;\n    profile = undefined;\n    executablePath = undefined;\n    storageState = undefined;\n  }\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 AgentController 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.session.model.switch({ 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.session.thread.getId(),\n      resourceId: ctx.state.session.identity.getResourceId(),\n      mode: ctx.state.session.mode.get(),\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.session.model.hasSelection()) {\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.session.thread.create();\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.session.model.hasSelection()) {\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.session.thread.create();\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  // session.run.getTraceId() returns the actual observability traceId (OTel 32-hex-char ID)\n  // captured from the stream response. session.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.state.session.run.getTraceId() ?? undefined;\n  const runId = ctx.state.session.getCurrentRunId() ?? undefined;\n  const threadId = ctx.state.session.thread.getId() ?? undefined;\n\n  // Feedback correlates to an actual run/trace. A bound thread alone is not\n  // enough — every session has a thread, but there may be no run to rate yet.\n  if (!traceId && !runId) {\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.controller.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.state.session.identity.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.state.session.identity.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.state.session.identity.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 session = ctx.state.session as unknown as {\n    identity?: {\n      getResourceId?: () => string | undefined;\n    };\n    thread?: {\n      getId?: () => string | undefined;\n      list?: (input?: {\n        allResources?: boolean;\n      }) => Promise<Array<{ id: string; resourceId?: string; metadata?: Record<string, unknown> }>>;\n    };\n  };\n  const threadId = session?.thread?.getId?.();\n  if (!threadId) return {};\n\n  const thread = (await session?.thread?.list?.({ allResources: true }))?.find(item => item.id === threadId);\n  return {\n    threadId,\n    resourceId: thread?.resourceId ?? session?.identity?.getResourceId?.(),\n    metadata: thread?.metadata,\n  };\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.session.thread.getId(),\n      resourceId: state.session.identity.getResourceId(),\n      mode: state.session.mode.get(),\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.controller?.hasWorkspace?.()) {\n        workspace = await ctx.controller.resolveWorkspace({ session: ctx.state.session });\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, controller: ctx.controller ?? state.controller } 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","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  // Drop the live judge reference so that a continuation turn creates a fresh\n  // JudgeDisplayComponent *after* the new streaming text. Without this the\n  // reused component stays at the position of the previous turn's evaluation,\n  // causing the new turn's text to visually overwrite the old text + judge.\n  state.activeGoalJudge = undefined;\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 controller-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.session.followUps.count() > 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  // A plan \"Request Changes\" abort ends the run intentionally; clear any\n  // streaming state without surfacing an \"Interrupted\" error so the user can\n  // type revision feedback against a clean transcript.\n  if (state.planRejectionAbort) {\n    state.streamingComponent = undefined;\n    state.streamingMessage = undefined;\n  } else if (state.streamingComponent && state.streamingMessage) {\n    // Update streaming message to show it was interrupted\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  state.planRejectionAbort = 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` controller 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  // Esc/Ctrl+C pauses the goal and aborts the run. If a judge stream races in a\n  // late goal chunk after that, don't let it recreate UI or overwrite the\n  // user-paused objective with the stale active/continue result.\n  if (state.userInitiatedAbort && state.goalManager.getGoal()?.status === 'paused') {\n    return;\n  }\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  if (payload.activity?.length) {\n    for (const activity of payload.activity) {\n      if (activity.type === 'reason') {\n        activeGoalJudge.component.setStreamingReason(activity.message);\n      } else {\n        activeGoalJudge.component.addActivity(activity.message);\n      }\n    }\n  }\n\n  // A pending chunk signals that scoring has started but isn't finished yet.\n  // Show the loading indicator (the component already renders \"evaluating…\"\n  // when result is null) and wait for the follow-up chunk with the result.\n  if (payload.pending) {\n    ctx.updateStatusLine();\n    state.ui.requestRender();\n    return;\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  // A final (non-pending) goal chunk completes this judge display. Keep the\n  // rendered component in history, but drop the live reference so an in-loop\n  // continuation creates a fresh display after the next assistant output instead\n  // of updating the previous turn's component in place.\n  state.activeGoalJudge = undefined;\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.session.mode.switch({ 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 { AgentControllerMessage, AgentControllerMessageContent } from '@mastra/core/agent-controller';\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.session?.mode?.resolve?.()?.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: AgentControllerMessage): AgentControllerMessage['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: AgentControllerMessageContent): 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: AgentControllerMessageContent): boolean {\n  return (part as { type?: string }).type === 'system_reminder';\n}\n\nfunction isStateSignalPart(part: AgentControllerMessageContent): boolean {\n  return (part as { type?: string }).type === 'state_signal';\n}\n\nfunction isReactiveSignalPart(part: AgentControllerMessageContent): boolean {\n  return (part as { type?: string }).type === 'reactive_signal';\n}\n\nfunction isNotificationSummaryPart(part: AgentControllerMessageContent): boolean {\n  return (part as { type?: string }).type === 'notification_summary';\n}\n\nfunction isNotificationPart(part: AgentControllerMessageContent): boolean {\n  return (part as { type?: string }).type === 'notification';\n}\n\nfunction toStreamedSystemReminderPart(part: AgentControllerMessageContent): 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: AgentControllerMessageContent): 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: AgentControllerMessageContent): 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(\n  part: AgentControllerMessageContent,\n): 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: AgentControllerMessageContent): 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: AgentControllerMessage,\n  toolCallId: string,\n  seenToolCallIds: Set<string>,\n): AgentControllerMessage['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: AgentControllerMessage): 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: AgentControllerMessage): 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  let createdStreamingComponent = false;\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    createdStreamingComponent = true;\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        createdStreamingComponent = true;\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        createdStreamingComponent = true;\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    const wasSpacingParticipant = state.streamingComponent.getChatSpacingKind() !== undefined;\n    state.streamingComponent.updateContent({\n      ...message,\n      content: trailingParts,\n    });\n    if (\n      createdStreamingComponent ||\n      (!wasSpacingParticipant && state.streamingComponent.getChatSpacingKind() !== undefined)\n    ) {\n      reconcileChatBoundarySpacers(state.chatContainer);\n    }\n  }\n\n  state.ui.requestRender();\n}\n\nexport function handleMessageEnd(ctx: EventHandlerContext, message: AgentControllerMessage): 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    }\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 AgentController 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: AgentController 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.session.displayState.get();\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","/**\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 { shouldShowDiff } from '../../utils/plan-diff.js';\nimport { approvePlanFile, readPlanFile, resolvePlanPath } 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.session.respondToToolSuspension({ toolCallId, resumeData: answer });\n                resolve();\n                processNextInlineQuestion(state);\n              },\n              onSubmitMulti: answers => {\n                state.activeInlineQuestion = undefined;\n                state.session.respondToToolSuspension({ toolCallId, resumeData: answers });\n                resolve();\n                processNextInlineQuestion(state);\n              },\n              onCancel: () => {\n                state.activeInlineQuestion = undefined;\n                state.session.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.session.respondToToolSuspension({ toolCallId, resumeData: answer });\n                  resolve();\n                  processNextInlineQuestion(state);\n                },\n                onSubmitMulti: answers => {\n                  state.activeInlineQuestion = undefined;\n                  state.session.respondToToolSuspension({ toolCallId, resumeData: answers });\n                  resolve();\n                  processNextInlineQuestion(state);\n                },\n                onCancel: () => {\n                  state.activeInlineQuestion = undefined;\n                  state.session.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.session.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.session.respondToToolSuspension({ toolCallId, resumeData: answer });\n          resolve();\n        },\n        onSubmitMulti: answers => {\n          state.ui.hideOverlay();\n          state.session.respondToToolSuspension({ toolCallId, resumeData: answers });\n          resolve();\n        },\n        onCancel: () => {\n          state.ui.hideOverlay();\n          state.session.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.session.respondToToolSuspension({ toolCallId, resumeData: answer });\n            resolve();\n            processNextInlineQuestion(state);\n          },\n          onCancel: () => {\n            state.activeInlineQuestion = undefined;\n            state.session.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/Use as Goal/Request Changes options.\n *\n * On each submission the plan is saved to a `.md` file and the previous plan\n * content is snapshotted so that resubmissions can show a diff.\n *\n * \"Request changes\" rejects the tool call and aborts the agent so the user can\n * provide revision feedback via a normal chat message.\n */\nasync function approvePlan(\n  ctx: EventHandlerContext,\n  toolCallId: string,\n  title: string,\n  plan: string,\n  planPath: string | undefined,\n  submittedPath: string,\n): Promise<void> {\n  const { state } = ctx;\n  await state.session.state.set({\n    activePlan: {\n      title,\n      plan,\n      approvedAt: new Date().toISOString(),\n    },\n  });\n\n  // Archive the approved plan to the global plans dir so it's findable later. The\n  // local plan file is left in place so the user can review every plan made.\n  if (planPath) {\n    await approvePlanFile({\n      planPath,\n      title,\n      resourceId: state.session.identity.getResourceId(),\n    }).catch(() => {});\n  }\n\n  // Reset in-memory diff state so the next plan doesn't diff against this one.\n  state.previousPlanSnapshot = undefined;\n  state.lastSubmitPlanComponent = undefined;\n\n  await state.session.respondToToolSuspension({\n    toolCallId,\n    resumeData: { action: 'approved', path: submittedPath, title, plan },\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  submittedPath: string,\n): Promise<void> {\n  const { state } = ctx;\n\n  // submit_plan carries the plan file path. The agent can write the plan anywhere it\n  // has access, so read whatever path it submitted (resolved relative to the project)\n  // and parse the `# heading` as the title.\n  const projectPath = (state.session.state.get() as any)?.projectPath as string | undefined;\n  const planPath = submittedPath ? resolvePlanPath(projectPath ?? process.cwd(), submittedPath) : undefined;\n  const current = planPath ? await readPlanFile(planPath) : undefined;\n  if (!current) {\n    state.previousPlanSnapshot = undefined;\n  }\n\n  // Surface a clear error in the approval card when the plan file can't be read,\n  // instead of rendering an empty plan.\n  const plan =\n    current?.plan ??\n    `⚠️ Could not read the plan file at \\`${submittedPath}\\`. Make sure it exists before submitting it.`;\n  const resolvedTitle = current?.title || 'Implementation Plan';\n  // Snapshot history is keyed by the submitted path so a revision of the same file\n  // diffs against the prior submission, but a brand-new file renders in full.\n  const snapshotKey = submittedPath;\n\n  // A previous snapshot is only a valid diff base for a revision of the SAME\n  // plan file. A different path means a brand-new plan, so render it in full\n  // rather than diffing against an unrelated plan.\n  const snapshot = state.previousPlanSnapshot;\n  const snapshotPlan = snapshot && snapshot.path === snapshotKey ? snapshot.plan : undefined;\n  const previousPlan = snapshotPlan && shouldShowDiff(snapshotPlan, plan) ? snapshotPlan : undefined;\n\n  // Snapshot this submission (keyed by submitted path) so the next resubmission of\n  // the same file can diff against it. Skip seeding history when the file\n  // couldn't be read.\n  if (current) {\n    state.previousPlanSnapshot = { path: snapshotKey, plan };\n  }\n\n  return new Promise(resolve => {\n    const planFilename = snapshotKey;\n    const approvalOptions = {\n      toolCallId,\n      title: resolvedTitle,\n      plan,\n      planFilename,\n      previousPlan,\n      onApprove: async () => {\n        state.activeInlinePlanApproval = undefined;\n        state.ui.setFocus(state.editor);\n        await approvePlan(ctx, toolCallId, resolvedTitle, plan, planPath, snapshotKey);\n        resolve();\n      },\n      onGoal: async () => {\n        state.activeInlinePlanApproval = undefined;\n        state.ui.setFocus(state.editor);\n        await approvePlan(ctx, toolCallId, resolvedTitle, plan, planPath, snapshotKey);\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(resolvedTitle, 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: () => {\n        state.activeInlinePlanApproval = undefined;\n        state.ui.setFocus(state.editor);\n        // Resume the tool with a rejection so the rejection result is persisted\n        // in thread history (the next run sees it for context). For submit_plan,\n        // respondToToolSuspension resolves at the resumed tool's `tool_end`\n        // boundary — i.e. once the rejection result has been emitted and the\n        // suspension dropped — but BEFORE the follow-up LLM step runs. We await\n        // that boundary, then abort the run host-side so the model never gets to\n        // generate trailing text. This is deterministic and does not race the\n        // in-loop PlanRejectionAbortProcessor (which remains as a backstop). The\n        // planRejectionAbort flag suppresses the \"Interrupted\" abort UI so the\n        // transcript stays clean for the user's revision feedback.\n        void (async () => {\n          try {\n            await state.session.respondToToolSuspension({\n              toolCallId,\n              resumeData: { action: 'rejected', path: snapshotKey, title: resolvedTitle, plan },\n            });\n          } finally {\n            state.planRejectionAbort = true;\n            state.session.abort();\n          }\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 \"${resolvedTitle}\" 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, Terminal, Text } from '@earendil-works/pi-tui';\nimport type { AgentController, AgentControllerMessage, Session } from '@mastra/core/agent-controller';\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  images?: Array<{ data: string; mimeType: 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 controller instance */\n  controller: AgentController<any>;\n\n  /** The session created from the controller that all work runs through */\n  session: Session<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 AgentController.\n   * Configure workspace via AgentControllerConfig.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  /** Optional terminal injection for in-process tests. Defaults to ProcessTerminal. */\n  terminal?: Terminal;\n}\n\n// =============================================================================\n// TUIState\n// =============================================================================\n\nexport interface TUIState {\n  // ── Core dependencies (set once) ──────────────────────────────────────\n  controller: AgentController<any>;\n  session: Session<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: Terminal;\n\n  // ── Agent / streaming ─────────────────────────────────────────────────\n  isInitialized: boolean;\n  gradientAnimator?: GradientAnimator;\n  streamingComponent?: AssistantMessageComponent;\n  streamingMessage?: AgentControllerMessage;\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  /** Previous plan snapshot (keyed by plan file path) for diff display on resubmission */\n  previousPlanSnapshot?: { path: string; plan: string };\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 or user interruption to unblock the dialog */\n  pendingApprovalDismiss: ((context?: { reason?: string; message?: string }) => 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  // ── Tokens/sec tracking ────────────────────────────────────────────────\n  /**\n   * Timestamp (ms) of the first streamed content delta of the current step —\n   * i.e. when decoding began. tokens/sec is measured over decode time only\n   * (excludes TTFT and inter-step tool gaps). 0 means decode not yet started.\n   */\n  decodeStartedAt: number;\n  /** Current computed tokens/sec rate (0 when idle) */\n  tokensPerSec: number;\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   * Set when the run is aborted because the user clicked \"Request Changes\" on a\n   * plan approval. Suppresses the \"Interrupted\" abort UI so the rejection ends\n   * cleanly and the user can type revision feedback.\n   */\n  planRejectionAbort: 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 = options.terminal ?? new ProcessTerminal();\n  // Override columns getter to prevent line wrapping in nested terminal emulators\n  if (!options.terminal) {\n    Object.defineProperty(terminal, 'columns', {\n      get: () => (process.stdout.columns || 80) - TERM_WIDTH_BUFFER,\n    });\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    controller: options.controller,\n    session: options.session,\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    // Tokens/sec tracking\n    decodeStartedAt: 0,\n    tokensPerSec: 0,\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    planRejectionAbort: false,\n  };\n  editor.getModeColor = () => {\n    if (result.activeGoalJudge) {\n      return mastra.blue;\n    }\n    const color = result.session.mode.resolve()?.metadata?.color;\n    return typeof color === 'string' ? color : undefined;\n  };\n  return result;\n}\n","/**\n * Event dispatcher: maps AgentControllerEvent types to extracted handler functions.\n */\nimport type { AgentControllerEvent, AgentControllerThread } from '@mastra/core/agent-controller';\nimport type { TaskItemSnapshot } from '@mastra/core/signals';\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 AgentControllerEvent 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(\n  event: AgentControllerEvent,\n  ectx: EventHandlerContext,\n  state: TUIState,\n): Promise<void> {\n  switch (event.type) {\n    case 'agent_start':\n      // Reset tokens/sec at the start of a new turn (not at the end) so the\n      // last turn's reading stays visible while idle — short single-step turns\n      // would otherwise zero it before it could be read.\n      state.tokensPerSec = 0;\n      state.decodeStartedAt = 0;\n      handleAgentStart(ectx);\n      break;\n\n    case 'agent_end':\n      // Keep tokensPerSec as the last turn's reading; only clear the in-flight\n      // decode window so a stale start can't bleed into the next turn.\n      state.decodeStartedAt = 0;\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      // Mark when decoding began for the current step (first streamed content\n      // delta). tokens/sec is then measured over decode time only — excluding\n      // TTFT before this point and tool/scheduling gaps between steps.\n      if (state.decodeStartedAt === 0) {\n        state.decodeStartedAt = Date.now();\n      }\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.session.thread.getId(),\n        resourceId: state.session.identity.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.session.thread.getId(),\n          resourceId: state.session.identity.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.session.state.set({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n      state.previousPlanSnapshot = undefined;\n      if (state.taskProgress) {\n        state.taskProgress.updateTasks([]);\n        state.ui.requestRender();\n      }\n      state.taskToolInsertIndex = -1;\n      await ectx.renderExistingMessages();\n      await state.controller.loadOMProgress(state.session);\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.session.thread.list();\n      const currentThread = threads.find((t: AgentControllerThread) => 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.session.state.get() 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.session.state.set({ tasks: [], activePlan: null, sandboxAllowedPaths: [] });\n      state.previousPlanSnapshot = undefined;\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 AgentController display state.\n      // usage_update fires at step-finish and carries the completion (and any\n      // reasoning) tokens generated during this step. Measure tokens/sec over the\n      // decode window only — from this step's first content delta\n      // (state.decodeStartedAt) to now — which excludes TTFT and inter-step\n      // tool/scheduling time. Smooth with an exponential moving average (α=0.3).\n      const now = Date.now();\n      const stepTokens = (event.usage.completionTokens ?? 0) + (event.usage.reasoningTokens ?? 0);\n      if (state.decodeStartedAt > 0 && stepTokens > 0) {\n        const decodeSec = (now - state.decodeStartedAt) / 1000;\n        if (decodeSec > 0) {\n          const instantaneous = stepTokens / decodeSec;\n          const alpha = 0.3;\n          const ema = state.tokensPerSec > 0 ? alpha * instantaneous + (1 - alpha) * state.tokensPerSec : instantaneous;\n          state.tokensPerSec = Math.round(ema);\n        }\n      }\n      // Re-arm: the next step's decode window opens on its first content delta.\n      state.decodeStartedAt = 0;\n      ectx.updateStatusLine();\n      state.ui.requestRender();\n      break;\n    }\n\n    // Observational Memory events\n    case 'om_status':\n      // All state updates handled by AgentController 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<AgentControllerEvent, { 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        const previousTasks = state.session.displayState.get().previousTasks;\n        if (tasks?.length > 0 && tasks.every(task => task.status === 'completed')) {\n          ectx.renderCompletedTasksInline(tasks, insertIndex);\n        } else if (previousTasks.length > 0 && (!tasks || tasks.length === 0)) {\n          ectx.renderClearedTasksInline(previousTasks, insertIndex);\n        } else if (tasks?.length > 0) {\n          ectx.renderTaskDeltaInline(previousTasks, tasks, 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 controller.session.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.path ?? ''));\n      }\n      break;\n    }\n\n    case 'display_state_changed':\n      // The AgentController 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 AgentController.\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 * Simple progress indicator component for single operations.\n * Shows a compact progress display with spinner and status text.\n */\n\nimport { Container, Text } from '@earendil-works/pi-tui';\nimport { theme } from '../theme.js';\n\nexport interface SimpleProgressOptions {\n  prefix?: string;\n  showElapsed?: boolean;\n  showPercentage?: boolean;\n}\n\n/**\n * Lightweight progress indicator for simple operations.\n * Features:\n * - Animated spinner\n * - Custom status text\n * - Optional elapsed time\n * - Optional percentage display\n */\nexport class SimpleProgressComponent extends Container {\n  private status: string = '';\n  private progress?: number;\n  private startTime: number;\n  private spinnerFrame = 0;\n  private lastRenderTime = 0;\n  private isActive = false;\n  private options: Required<SimpleProgressOptions>;\n\n  constructor(options: SimpleProgressOptions = {}) {\n    super();\n    this.options = {\n      prefix: '',\n      showElapsed: true,\n      showPercentage: true,\n      ...options,\n    };\n    this.startTime = Date.now();\n  }\n\n  /**\n   * Start showing progress with initial status.\n   */\n  start(status: string): void {\n    this.status = status;\n    this.isActive = true;\n    this.startTime = Date.now();\n    this.rebuild();\n  }\n\n  /**\n   * Update the status text.\n   */\n  updateStatus(status: string): void {\n    this.status = status;\n    this.rebuild();\n  }\n\n  /**\n   * Update the progress percentage (0-100).\n   */\n  updateProgress(progress: number): void {\n    this.progress = Math.min(100, Math.max(0, progress));\n    this.rebuild();\n  }\n\n  /**\n   * Mark the operation as complete.\n   */\n  complete(message?: string): void {\n    this.isActive = false;\n    this.status = message || 'Complete';\n    this.progress = 100;\n    this.rebuild();\n  }\n\n  /**\n   * Mark the operation as failed.\n   */\n  fail(error: string): void {\n    this.isActive = false;\n    this.status = error;\n    this.rebuild();\n  }\n\n  private rebuild(): void {\n    this.clear();\n\n    if (!this.status) return;\n\n    const now = Date.now();\n\n    // Update spinner animation\n    if (this.isActive && now - this.lastRenderTime > 100) {\n      this.spinnerFrame = (this.spinnerFrame + 1) % 10;\n      this.lastRenderTime = now;\n    }\n\n    let text = '';\n\n    // Add prefix if provided\n    if (this.options.prefix) {\n      text += this.options.prefix + ' ';\n    }\n\n    // Add spinner or status icon\n    if (this.isActive) {\n      const spinner = this.getSpinner();\n      text += theme.fg('accent', spinner) + ' ';\n    } else if (this.progress === 100) {\n      text += theme.fg('success', '✓') + ' ';\n    } else {\n      text += theme.fg('error', '✗') + ' ';\n    }\n\n    // Add status text\n    text += this.status;\n\n    // Add progress percentage if enabled and available\n    if (this.options.showPercentage && this.progress !== undefined) {\n      text += theme.fg('dim', ` (${this.progress}%)`);\n    }\n\n    // Add elapsed time if enabled\n    if (this.options.showElapsed && this.isActive) {\n      const elapsed = Math.floor((now - this.startTime) / 1000);\n      text += theme.fg('dim', ` ${elapsed}s`);\n    }\n\n    this.addChild(new Text(text, 0, 0));\n  }\n  private getSpinner(): string {\n    const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n    return frames[this.spinnerFrame]!;\n  }\n\n  render(maxWidth: number): string[] {\n    this.rebuild();\n    return super.render(maxWidth);\n  }\n}\n\n/**\n * Create a temporary progress indicator that auto-hides when complete.\n * Useful for quick operations that need feedback.\n */\nexport class TemporaryProgressComponent extends SimpleProgressComponent {\n  private hideTimeout?: NodeJS.Timeout;\n  private hideDelay: number;\n\n  constructor(options: SimpleProgressOptions & { hideDelay?: number } = {}) {\n    super(options);\n    this.hideDelay = options.hideDelay || 2000;\n  }\n\n  complete(message?: string): void {\n    super.complete(message);\n    this.hideTimeout = setTimeout(() => {\n      this.clear();\n    }, this.hideDelay);\n  }\n\n  fail(error: string): void {\n    super.fail(error);\n    this.hideTimeout = setTimeout(() => {\n      this.clear();\n    }, this.hideDelay * 2); // Show errors longer\n  }\n\n  override clear(): void {\n    if (this.hideTimeout) {\n      clearTimeout(this.hideTimeout);\n      this.hideTimeout = undefined;\n    }\n    super.clear();\n  }\n}\n","/**\n * TUI setup: keyboard shortcuts, layout building, autocomplete, key handlers.\n */\nimport { execFileSync } from 'node:child_process';\n\nimport { CombinedAutocompleteProvider, Spacer, Text } from '@earendil-works/pi-tui';\nimport type { SlashCommand } from '@earendil-works/pi-tui';\nimport type { AgentControllerEventListener } from '@mastra/core/agent-controller';\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 { SimpleProgressComponent } from './components/simple-progress.js';\nimport { TaskProgressComponent } from './components/task-progress.js';\nimport { showError, showInfo } from './display.js';\nimport { isGoalJudgeInputLocked, showGoalJudgeInputLockInfo } from './goal-input-lock.js';\nimport { askModalQuestion } from './modal-question.js';\nimport { showModalOverlay } from './overlay.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 dialogs by declining the gated tool. Do not abort\n      // the run: the decline is delivered through the normal approval resume path.\n      state.pendingApprovalDismiss();\n      state.activeInlinePlanApproval = undefined;\n      state.activeInlineQuestion = undefined;\n      state.pendingInlineQuestions.length = 0;\n      return;\n    } else if (state.session.run.isRunning() || state.session.suspensions.hasPending()) {\n      // Clean up active inline components on abort. suspensions.hasPending() 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.session.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 controller modes\n  state.editor.onAction('cycleMode', async () => {\n    // Block mode switching while the agent is active or plan approval is pending\n    if (state.session.run.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.controller.listModes();\n    if (modes.length <= 1) return;\n    const currentId = state.session.mode.get();\n    const currentIndex = modes.findIndex(m => m.id === currentId);\n    const nextIndex = (currentIndex + 1) % modes.length;\n    const nextMode = modes[nextIndex]!;\n    await state.session.mode.switch({ modeId: nextMode.id });\n  });\n\n  // Ctrl+Y - toggle YOLO mode\n  state.editor.onAction('toggleYolo', () => {\n    const current = (state.session.state.get() as any)?.yolo === true;\n    void state.session.state.set({ 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.session.run.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. Abort the active controller run too: the core\n  // scorer owns the judge stream, so the TUI-local controller alone only changes\n  // the visual component and lets the judge continue in the background.\n  state.session.abort();\n  // Persist the paused state immediately so a thread switch or exit before the\n  // next save does not reload the old active objective and effectively undo the\n  // pause. `saveToThread` is best-effort, so run it fire-and-forget to keep this\n  // abort handler synchronous.\n  state.goalManager.pause('Judge evaluation was interrupted.');\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.controller.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.controller.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    const configDir = (state.session.state.get() as { configDir?: string } | undefined)?.configDir;\n    // Load from all sources (global and local)\n    const globalCommands = await loadCustomCommands(undefined, configDir);\n    const localCommands = await loadCustomCommands(process.cwd(), configDir);\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.controller.getWorkspace() ?? state.workspace;\n    if (!workspace && state.controller.hasWorkspace()) {\n      workspace = await state.controller.resolveWorkspace({ session: state.session });\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  const sigintHandler = () => {\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.session.abort();\n  };\n  process.on('SIGINT', sigintHandler);\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  return () => {\n    process.off('SIGINT', sigintHandler);\n  };\n}\n\n// =============================================================================\n// AgentController Subscription\n// =============================================================================\n\nexport function subscribeToAgentController(state: TUIState, handleEvent: (event: any) => Promise<void>): void {\n  let eventQueue = Promise.resolve();\n  const listener: AgentControllerEventListener = event => {\n    eventQueue = eventQueue.then(async () => {\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    return eventQueue;\n  };\n  state.unsubscribe = state.session.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 currentPath = state.projectInfo.rootPath;\n  const currentResourceId = state.session.identity.getResourceId();\n\n  const allThreads = await state.session.thread.list();\n  const activeThreadId = state.session.thread.getId();\n\n  // Filter to threads explicitly tagged for the current working directory.\n  const taggedThreads = allThreads.filter(t => {\n    const threadPath = t.metadata?.projectPath as string | undefined;\n    return !!threadPath && threadPath === currentPath;\n  });\n  const threads: typeof taggedThreads = [];\n  for (const thread of taggedThreads) {\n    const isActiveBlankThread = thread.id === activeThreadId && !thread.title;\n    if (isActiveBlankThread) {\n      const messages = await state.session.thread.listMessages({ threadId: thread.id, limit: 1 });\n      if (messages.length === 0) continue;\n    }\n    threads.push(thread);\n  }\n\n  if (threads.length === 0) {\n    const driftCandidates = (\n      await state.session.thread.list({\n        allResources: true,\n        metadata: { projectPath: currentPath },\n      })\n    ).filter(t => t.resourceId !== currentResourceId);\n    const [thread] = [...driftCandidates].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n\n    if (thread) {\n      const answer = await askModalQuestion(state.ui, {\n        question: [\n          'This directory is tagged on a different resource.',\n          '',\n          `Project: ${currentPath}`,\n          `Thread: ${thread.title || thread.id}`,\n          `Old resource: ${thread.resourceId}`,\n          `Current resource: ${currentResourceId}`,\n          '',\n          'Clone this thread into the current resource and resume the clone?',\n        ].join('\\n'),\n        options: [{ label: 'Clone and resume' }, { label: 'Start fresh' }],\n        selectedOptionLabel: 'Clone and resume',\n        allowCustomResponse: false,\n        overlay: { widthPercent: 80, maxHeight: '70%' },\n      });\n\n      if (answer === 'Clone and resume') {\n        const progress = new SimpleProgressComponent({ showElapsed: false, showPercentage: false });\n        progress.start('Cloning thread into the current resource...');\n        showModalOverlay(state.ui, progress, { widthPercent: 70, maxHeight: '40%', minHeightPercent: 0.35 });\n        state.ui.requestRender();\n\n        try {\n          await new Promise(resolve => setTimeout(resolve, 50));\n          progress.updateStatus('Loading cloned thread...');\n          state.ui.requestRender();\n          await state.session.thread.cloneToCurrentResource({\n            threadId: thread.id,\n            expectedResourceId: thread.resourceId,\n            expectedProjectPath: currentPath,\n          });\n        } finally {\n          state.ui.hideOverlay();\n          state.ui.requestRender();\n        }\n        return;\n      }\n    }\n\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  // Try each in order until one is unlocked\n  for (const thread of sortedThreads) {\n    try {\n      await state.session.thread.switch({ threadId: thread.id });\n      if (!thread.metadata?.projectPath) {\n        await state.session.thread.setSetting({ 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.session.displayState.get().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 AgentController 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 { AgentControllerEvent, AgentControllerMessage } from '@mastra/core/agent-controller';\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  renderCompletedTasksInline,\n  renderExistingMessages,\n  renderTaskDeltaInline,\n} from './render-messages.js';\nimport {\n  setupKeyboardShortcuts,\n  buildLayout,\n  setupAutocomplete,\n  loadCustomSlashCommands,\n  refreshSkillsAutocomplete,\n  setupKeyHandlers,\n  subscribeToAgentController,\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\nconst USER_MESSAGE_APPROVAL_INTERRUPT = {\n  reason: 'interrupted_by_user_message',\n  message: 'The pending tool approval was declined because the user sent a new 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.session.thread.getId();\n  if (!initThreadId) return;\n\n  const initThreads = await state.session.thread.list();\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 cleanupKeyHandlers?: () => void;\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.session?.thread?.getId?.();\n      const currentResourceId = this.state.session?.identity?.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.session?.thread?.getId?.();\n      const currentResourceId = this.state.session?.identity?.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.session.model.hasSelection()) {\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.session.thread.create();\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.session.model.hasSelection()) {\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 controller 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.session.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  ): AgentControllerMessage {\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.session.stream.isActive();\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.session.thread.create().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.session.thread.getId(),\n        resourceId: this.state.session.identity.getResourceId(),\n        mode: this.state.session.mode.get(),\n        hasImages: Boolean(images?.length),\n        isFirstPromptInThread: pendingNewThread,\n        pendingNewThread,\n      });\n\n      const signal = this.state.session.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.session.stream.isActive();\n\n    const send = () => {\n      this.clearIdleCounter();\n      if (hasActiveRun) {\n        this.state.pendingApprovalDismiss?.(USER_MESSAGE_APPROVAL_INTERRUPT);\n      }\n\n      const signal = this.state.session.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.cleanupKeyHandlers) {\n      this.cleanupKeyHandlers();\n      this.cleanupKeyHandlers = undefined;\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 controller (but don't select thread yet)\n    await this.state.controller.init();\n    await this.state.controller.getMastra()?.startWorkers();\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    this.cleanupKeyHandlers = setupKeyHandlers(this.state, {\n      stop: () => this.stop(),\n      doubleCtrlCMs: MastraTUI.DOUBLE_CTRL_C_MS,\n    });\n\n    // Start the UI before thread selection so resource-drift prompts can render.\n    this.state.ui.start();\n\n    // Check for existing threads and prompt for resume\n    await promptForThreadSelection(this.state);\n\n    // Subscribe to controller events\n    subscribeToAgentController(this.state, event => this.handleEvent(event));\n    // Restore escape-as-cancel setting from persisted state\n    const escState = this.state.session.state.get() 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.controller.loadOMProgress(this.state.session);\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    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.controller.getCurrentModelAuthStatus(this.state.session);\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.session.run.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: AgentControllerEvent): 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.captureAgentControllerAnalytics(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 captureAgentControllerAnalytics(event: AgentControllerEvent): 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.session.mode.get(),\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.session.identity.getResourceId(),\n        mode: this.state.session.mode.get(),\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.session.mode.get(),\n        threadId: this.state.session.thread.getId(),\n        resourceId: this.state.session.identity.getResourceId(),\n      });\n    }\n  }\n\n  private emitErrorFeedback(errorMessage: string): void {\n    const controller = this.state.controller;\n    const traceId = this.state.session.run.getTraceId() ?? undefined;\n    const runId = this.state.session.getCurrentRunId() ?? undefined;\n    const threadId = this.state.session.thread.getId() ?? undefined;\n\n    if (!traceId && !runId && !threadId) return;\n\n    const mastra = controller.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.controller.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.session.thread.getId();\n    if (!currentThreadId) return;\n\n    const resolvedThread =\n      thread?.id === currentThreadId\n        ? thread\n        : (await this.state.session.thread.list()).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.session.run.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 controller-owned workspace over the direct option.\n   */\n  private getResolvedWorkspace(): Workspace | undefined {\n    return this.state.controller.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      controller: this.state.controller,\n      session: this.state.session,\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      renderCompletedTasksInline: (completedTasks, insertIndex) =>\n        renderCompletedTasksInline(this.state, completedTasks, insertIndex),\n      renderTaskDeltaInline: (previousTasks, nextTasks, insertIndex) =>\n        renderTaskDeltaInline(this.state, previousTasks, nextTasks, 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.session.model.switch({ 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.controller.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 controller = this.state.controller;\n    const modePack = result.modePack;\n    const modes = controller.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 this.state.session.thread.setSetting({\n          key: `modeModelId_${mode.id}`,\n          value: modelId,\n        });\n      }\n    }\n\n    const currentModeId = this.state.session.mode.get();\n    const currentModeModel = (modePack.models as Record<string, string>)[currentModeId];\n    if (currentModeModel) {\n      await this.state.session.model.switch({ 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 this.state.session.subagents.model.set({ modelId: saModelId, agentType });\n      }\n    }\n\n    const omPack = result.omPack;\n    void this.state.session.state.set({ observerModelId: omPack.modelId, reflectorModelId: omPack.modelId });\n    void this.state.session.state.set({ 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 (this.state.session.thread.getId()) {\n      await this.state.session.thread.setSetting({ 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.session?.mode.resolve().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    if (process.env.MASTRACODE_DISABLE_UPDATE_CHECK === '1') return;\n\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"]}