{"version":3,"sources":["../src/analytics.ts","../src/error-classification.ts","../src/utils/debug-log.ts","../src/headless.ts","../src/utils/stdin-pipe.ts","../src/main.ts"],"names":["os","randomUUID","PostHog","fs","path","getAppDataDir","parseArgs","harness","existsSync","createMastraCode","mcpManager","releaseAllThreadLocks","fs2","tty","loadSettings","createBrowserFromSettings","settings","detectTerminalTheme","applyThemeMode","getCurrentVersion","MastraTUI","restoreTerminalForeground","msg"],"mappings":"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","file":"cli.cjs","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport os from 'node:os';\n\nimport { PostHog } from 'posthog-node';\n\nconst POSTHOG_API_KEY = 'phc_SBLpZVAB6jmHOct9CABq3PF0Yn5FU3G2FgT4xUr2XrT';\nconst POSTHOG_HOST = 'https://us.posthog.com';\nconst MASTRA_SOURCE = 'mastracode';\nconst TRUTHY_DISABLED_VALUES = new Set(['1', 'true', 'yes', 'on']);\n\nexport function getMastraAnalyticsDistinctId(hostname = os.hostname()): string {\n  return `mastra-${hostname}`;\n}\n\nfunction isAnalyticsDebugEnabled(): boolean {\n  return TRUTHY_DISABLED_VALUES.has(process.env.MASTRACODE_ANALYTICS_DEBUG?.trim().toLowerCase() ?? '');\n}\n\nfunction debugAnalytics(message: string, properties?: Record<string, unknown>): void {\n  if (!isAnalyticsDebugEnabled()) {\n    return;\n  }\n\n  const suffix = properties ? ` ${JSON.stringify(properties)}` : '';\n  process.stderr.write(`[mastracode analytics] ${message}${suffix}\\n`);\n}\n\nexport type MastraCodeAnalyticsEvent =\n  | 'mastracode_session_started'\n  | 'mastracode_prompt_submitted'\n  | 'mastracode_thread_changed'\n  | 'mastracode_model_changed'\n  | 'mastracode_command_used'\n  | 'mastracode_interactive_prompt_shown';\n\nexport interface MastraCodeAnalytics {\n  capture(event: MastraCodeAnalyticsEvent, properties?: Record<string, unknown>): void;\n  trackCommand(command: string, properties?: Record<string, unknown>): void;\n  trackInteractivePrompt(promptType: string, properties?: Record<string, unknown>): void;\n  shutdown(): Promise<void>;\n  isEnabled(): boolean;\n}\n\ninterface MastraCodeAnalyticsOptions {\n  version: string;\n  host?: string;\n  apiKey?: string;\n}\n\nclass NoopMastraCodeAnalytics implements MastraCodeAnalytics {\n  capture(event: MastraCodeAnalyticsEvent): void {\n    debugAnalytics('capture skipped: telemetry disabled', { event });\n  }\n  trackCommand(command: string): void {\n    debugAnalytics('command skipped: telemetry disabled', { command });\n  }\n  trackInteractivePrompt(promptType: string): void {\n    debugAnalytics('interactive prompt skipped: telemetry disabled', { promptType });\n  }\n  async shutdown(): Promise<void> {\n    debugAnalytics('shutdown skipped: telemetry disabled');\n  }\n  isEnabled(): boolean {\n    return false;\n  }\n}\n\nclass PostHogMastraCodeAnalytics implements MastraCodeAnalytics {\n  private readonly client: PostHog;\n  private readonly distinctId: string;\n  private readonly sessionId = randomUUID();\n  private readonly version: string;\n\n  constructor({ version, apiKey = POSTHOG_API_KEY, host = POSTHOG_HOST }: MastraCodeAnalyticsOptions) {\n    this.version = version;\n    this.distinctId = getMastraAnalyticsDistinctId();\n    this.client = new PostHog(apiKey, {\n      host,\n      flushAt: 1,\n      flushInterval: 0,\n      disableGeoip: false,\n    });\n    this.client.register({ mastraSource: MASTRA_SOURCE });\n    debugAnalytics('enabled', { host, distinctId: this.distinctId, version });\n  }\n\n  capture(event: MastraCodeAnalyticsEvent, properties?: Record<string, unknown>): void {\n    try {\n      const eventProperties = {\n        ...this.getBaseProperties(),\n        ...properties,\n      };\n      debugAnalytics('capture', { event, properties: eventProperties });\n      this.client.capture({\n        distinctId: this.distinctId,\n        event,\n        properties: eventProperties,\n      });\n    } catch (error) {\n      debugAnalytics('capture failed', { event, error: error instanceof Error ? error.message : String(error) });\n      // swallow analytics errors\n    }\n  }\n\n  trackCommand(command: string, properties?: Record<string, unknown>): void {\n    this.capture('mastracode_command_used', { command, ...properties });\n  }\n\n  trackInteractivePrompt(promptType: string, properties?: Record<string, unknown>): void {\n    this.capture('mastracode_interactive_prompt_shown', { promptType, ...properties });\n  }\n\n  async shutdown(): Promise<void> {\n    try {\n      debugAnalytics('shutdown start');\n      await this.client.shutdown();\n      debugAnalytics('shutdown complete');\n    } catch (error) {\n      debugAnalytics('shutdown failed', { error: error instanceof Error ? error.message : String(error) });\n      // swallow analytics errors\n    }\n  }\n\n  isEnabled(): boolean {\n    return true;\n  }\n\n  private getBaseProperties(): Record<string, unknown> {\n    return {\n      mastraSource: MASTRA_SOURCE,\n      sessionId: this.sessionId,\n      version: this.version,\n      os: process.platform,\n      osVersion: os.release(),\n      nodeVersion: process.version,\n      platform: process.arch,\n      machineId: os.hostname(),\n    };\n  }\n}\n\nexport function isTelemetryDisabled(env: NodeJS.ProcessEnv = process.env): boolean {\n  const value = env.MASTRA_TELEMETRY_DISABLED;\n  if (!value) {\n    return false;\n  }\n\n  return TRUTHY_DISABLED_VALUES.has(value.trim().toLowerCase());\n}\n\nexport function createMastraCodeAnalytics(options: MastraCodeAnalyticsOptions): MastraCodeAnalytics {\n  if (isTelemetryDisabled()) {\n    debugAnalytics('disabled by MASTRA_TELEMETRY_DISABLED', { value: process.env.MASTRA_TELEMETRY_DISABLED });\n    return new NoopMastraCodeAnalytics();\n  }\n\n  return new PostHogMastraCodeAnalytics(options);\n}\n","/**\n * Checks whether an error is an ERR_STREAM_DESTROYED error, which is a\n * non-fatal condition that occurs when code writes to a stream after it\n * has been closed (e.g., client disconnect, cancelled LLM stream, LSP\n * shutdown, killed subprocess).\n *\n * Walks the `.cause` chain up to a depth limit.\n */\nexport function isStreamDestroyedError(err: unknown, depth = 0): boolean {\n  if (!err || depth > 5) return false;\n  const e = err as any;\n  if (e.code === 'ERR_STREAM_DESTROYED') return true;\n  if (typeof e.message === 'string' && e.message.includes('stream was destroyed')) return true;\n  if (e.cause && isStreamDestroyedError(e.cause, depth + 1)) return true;\n  if (Array.isArray(e.errors) && e.errors.some((inner: unknown) => isStreamDestroyedError(inner, depth + 1)))\n    return true;\n  return false;\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { getAppDataDir } from './project.js';\n\nconst MAX_LOG_SIZE = 5 * 1024 * 1024; // 5 MB\nconst KEEP_SIZE = 4 * 1024 * 1024; // 4 MB\n\n/**\n * Truncate a log file to roughly {@link KEEP_SIZE} bytes if it exceeds\n * {@link MAX_LOG_SIZE}, cutting at the first newline so we don't start mid-line.\n */\nexport function truncateLogFile(logFile: string): void {\n  try {\n    const stat = fs.statSync(logFile);\n    if (stat.size > MAX_LOG_SIZE) {\n      const buf = Buffer.alloc(KEEP_SIZE);\n      const fd = fs.openSync(logFile, 'r');\n      fs.readSync(fd, buf, 0, KEEP_SIZE, stat.size - KEEP_SIZE);\n      fs.closeSync(fd);\n      const firstNewline = buf.indexOf(10);\n      const trimmed = firstNewline >= 0 ? buf.subarray(firstNewline + 1) : buf;\n      fs.writeFileSync(logFile, trimmed);\n    }\n  } catch {\n    // File may not exist yet — that's fine\n  }\n}\n\n/**\n * Set up debug logging. When {@link MASTRA_DEBUG} is `\"true\"`, redirects\n * `console.error` and `console.warn` to a log file (truncating it first if\n * oversized). Otherwise silences them to avoid corrupting the TUI.\n */\nexport function setupDebugLogging(): void {\n  const debugEnabled = ['true', '1'].includes(process.env.MASTRA_DEBUG ?? '');\n\n  if (debugEnabled) {\n    const logFile = path.join(getAppDataDir(), 'debug.log');\n    truncateLogFile(logFile);\n\n    const logStream = fs.createWriteStream(logFile, { flags: 'a' });\n    const fmt = (a: unknown): string => {\n      if (typeof a === 'string') return a;\n      if (a instanceof Error) return a.stack ?? `${a.name}: ${a.message}`;\n      try {\n        return JSON.stringify(a);\n      } catch {\n        return String(a);\n      }\n    };\n    console.error = (...args: unknown[]) => {\n      logStream.write(`[ERROR] ${new Date().toISOString()} ${args.map(fmt).join(' ')}\\n`);\n    };\n    console.warn = (...args: unknown[]) => {\n      logStream.write(`[WARN] ${new Date().toISOString()} ${args.map(fmt).join(' ')}\\n`);\n    };\n  } else {\n    const noop = () => {};\n    console.error = noop;\n    console.warn = noop;\n  }\n}\n","/**\n * Headless mode helpers — pure functions extracted for testability.\n */\nimport { existsSync } from 'node:fs';\nimport { parseArgs } from 'node:util';\n\nimport type { Harness, HarnessEvent, HarnessMessage } from '@mastra/core/harness';\n\nimport { setupDebugLogging } from './utils/debug-log.js';\nimport { releaseAllThreadLocks } from './utils/thread-lock.js';\nimport { createMastraCode } from './index.js';\n\nconst VALID_MODES = ['build', 'plan', 'fast'] as const;\nconst VALID_THINKING_LEVELS = ['off', 'low', 'medium', 'high', 'xhigh'] as const;\n\nexport interface HeadlessArgs {\n  prompt?: string;\n  timeout?: number;\n  format: 'default' | 'json';\n  outputFormat?: 'text' | 'json' | 'stream-json';\n  continue_: boolean;\n  model?: string;\n  mode?: 'build' | 'plan' | 'fast';\n  thinkingLevel?: 'off' | 'low' | 'medium' | 'high' | 'xhigh';\n  settings?: string;\n  thread?: string;\n  title?: string;\n  cloneThread: boolean;\n  resourceId?: string;\n}\n\n/** Returns true if argv contains --prompt or -p, indicating headless mode. */\nexport function hasHeadlessFlag(argv: string[]): boolean {\n  return argv.some(a => a === '--prompt' || a === '-p');\n}\n\nconst headlessOptions = {\n  prompt: { type: 'string', short: 'p' },\n  continue: { type: 'boolean', short: 'c', default: false },\n  thread: { type: 'string', short: 't' },\n  title: { type: 'string' },\n  'clone-thread': { type: 'boolean', default: false },\n  'resource-id': { type: 'string' },\n  timeout: { type: 'string' }, // parsed to number after validation\n  format: { type: 'string', default: 'default' },\n  'output-format': { type: 'string' },\n  model: { type: 'string', short: 'm' },\n  mode: { type: 'string' },\n  'thinking-level': { type: 'string' },\n  settings: { type: 'string' },\n  help: { type: 'boolean', short: 'h', default: false },\n} as const;\n\n/** Parse CLI arguments for headless mode (--prompt, --timeout, --format, --output-format, --continue, --model, --mode, --thinking-level, --settings). */\nexport function parseHeadlessArgs(argv: string[]): HeadlessArgs {\n  const { values, positionals } = parseArgs({\n    args: argv.slice(2),\n    options: headlessOptions,\n    strict: false,\n    allowPositionals: true,\n  });\n\n  const format = String(values.format ?? 'default');\n  if (format !== 'default' && format !== 'json') {\n    throw new Error('--format must be \"default\" or \"json\"');\n  }\n\n  let timeout: number | undefined;\n  if (values.timeout !== undefined) {\n    const raw = String(values.timeout);\n    const parsed = Number(raw);\n    if (!Number.isInteger(parsed) || parsed <= 0) {\n      throw new Error('--timeout must be a positive integer');\n    }\n    timeout = parsed;\n  }\n\n  const prompt = typeof values.prompt === 'string' ? values.prompt : positionals[0];\n  const model = typeof values.model === 'string' ? values.model : undefined;\n\n  let mode: HeadlessArgs['mode'];\n  if (values.mode !== undefined) {\n    const raw = String(values.mode);\n    if (!(VALID_MODES as readonly string[]).includes(raw)) {\n      throw new Error(`--mode must be ${VALID_MODES.map(m => `\"${m}\"`).join(', ')}`);\n    }\n    mode = raw as HeadlessArgs['mode'];\n  }\n\n  let thinkingLevel: HeadlessArgs['thinkingLevel'];\n  if (values['thinking-level'] !== undefined) {\n    const raw = String(values['thinking-level']);\n    if (!(VALID_THINKING_LEVELS as readonly string[]).includes(raw)) {\n      throw new Error(`--thinking-level must be ${VALID_THINKING_LEVELS.map(l => `\"${l}\"`).join(', ')}`);\n    }\n    thinkingLevel = raw as HeadlessArgs['thinkingLevel'];\n  }\n\n  let outputFormat: HeadlessArgs['outputFormat'];\n  if (values['output-format'] !== undefined) {\n    const raw = String(values['output-format']);\n    if (raw !== 'text' && raw !== 'json' && raw !== 'stream-json') {\n      throw new Error('--output-format must be one of: text, json, stream-json');\n    }\n    outputFormat = raw;\n  }\n\n  const settings = typeof values.settings === 'string' ? values.settings : undefined;\n  const thread = typeof values.thread === 'string' ? values.thread : undefined;\n  const title = typeof values.title === 'string' ? values.title : undefined;\n  const cloneThread = Boolean(values['clone-thread']);\n  const resourceId = typeof values['resource-id'] === 'string' ? values['resource-id'] : undefined;\n\n  if (values.continue && thread) {\n    throw new Error('--continue and --thread cannot be used together');\n  }\n\n  return {\n    prompt,\n    timeout,\n    format: format as 'default' | 'json',\n    outputFormat,\n    continue_: Boolean(values.continue),\n    model,\n    mode,\n    thinkingLevel,\n    settings,\n    thread,\n    title,\n    cloneThread,\n    resourceId,\n  };\n}\n\n/** Truncate a string to `max` characters, appending \"...\" if truncated. */\nexport function truncate(s: string, max: number): string {\n  return s.length > max ? s.slice(0, max) + '...' : s;\n}\n\nexport function printHeadlessUsage(): void {\n  process.stdout.write(`\nUsage: mastracode --prompt <text> [options]\n\nHeadless (non-interactive) mode options:\n  --prompt, -p <text>           The task to execute (required, or pipe via stdin)\n  --continue, -c                Resume the most recent thread instead of creating a new one\n  --thread, -t <id|title>       Resume a specific thread by ID or title\n  --title <title>               Set or rename the thread title\n  --clone-thread                Clone the current thread before running (work on a copy)\n  --resource-id <id>            Set the resource ID for thread scoping\n  --timeout <seconds>           Exit with code 2 if not complete within timeout\n  --format <type>               Output format: \"default\" or \"json\" (default: \"default\")\n  --output-format <type>        Automation output: \"text\", \"json\", or \"stream-json\"\n  --model, -m <id>              Model override (e.g., \"anthropic/claude-sonnet-4-5\")\n  --mode {build|plan|fast}      Execution mode — defaults to \"build\" if omitted\n  --thinking-level <level>      Thinking level: off, low, medium, high, xhigh\n  --settings <path>             Path to settings.json file (default: global settings)\n\nThread behavior:\n  By default, a new thread is created for each run.\n  Use --continue to resume the most recent thread, or --thread to target a specific one.\n  Use --clone-thread to branch off a copy before running.\n\nSettings file:\n  Uses the same settings.json as the interactive TUI. Pass --settings to use\n  a custom settings file (e.g., settings-ci.json for CI). All model, pack,\n  subagent, and OM configuration is resolved from settings at startup.\n\nExit codes:\n  0  Agent completed successfully\n  1  Error or aborted\n  2  Timeout\n\nExamples:\n  mastracode --prompt \"Fix the bug in auth.ts\"\n  mastracode --prompt \"Add tests\" --timeout 300\n  mastracode --prompt \"Fix the bug\" --mode fast --thinking-level high\n  mastracode --settings ./settings-ci.json --prompt \"Run tests\"\n  mastracode -c --prompt \"Continue where you left off\"\n  mastracode -t \"feature-auth\" --prompt \"Keep working on this\"\n  mastracode --thread abc123 --clone-thread --prompt \"Try a different approach\"\n  mastracode --prompt \"Refactor utils\" --title \"utils-refactor\"\n  mastracode --prompt \"Refactor utils\" --format json\n  mastracode --prompt \"Run tests and summarize pass/fail counts\" --output-format json\n  mastracode --prompt \"Find all TODO comments\" --output-format stream-json\n  mastracode --resource-id my-project --prompt \"Fix the bug\"\n  echo \"task description\" | mastracode --prompt -\n\nPiping without --prompt launches the interactive TUI with piped content\nas the first message:\n  cat file.txt | mastracode\n  git diff | mastracode\n  npm test 2>&1 | mastracode\n\nRun without --prompt for the interactive TUI.\n`);\n}\n\nfunction resolveExitCode(reason?: string): number {\n  return reason === 'error' || reason === 'aborted' ? 1 : 0;\n}\n\nfunction autoResolve<TState extends Record<string, unknown>>(\n  harness: Harness<TState>,\n  event: HarnessEvent,\n): { resolved: true; label: string; json: Record<string, unknown> } | { resolved: false } {\n  switch (event.type) {\n    case 'sandbox_access_request': {\n      harness.respondToQuestion({ questionId: event.questionId, answer: 'Yes' });\n      return { resolved: true, label: `[auto-approved sandbox] ${event.path}`, json: { ...event, autoApproved: true } };\n    }\n    case 'tool_approval_required': {\n      harness.respondToToolApproval({ decision: 'approve' });\n      return { resolved: true, label: `[auto-approved] ${event.toolName}`, json: { ...event, autoApproved: true } };\n    }\n    case 'ask_question': {\n      harness.respondToQuestion({\n        questionId: event.questionId,\n        answer: 'Proceed with your best judgment. Do not ask further questions.',\n      });\n      return {\n        resolved: true,\n        label: `[auto-answered] ${truncate(event.question, 100)}`,\n        json: { ...event, autoAnswered: true },\n      };\n    }\n    case 'plan_approval_required': {\n      void harness.respondToPlanApproval({ planId: event.planId, response: { action: 'approved' } });\n      return { resolved: true, label: `[auto-approved plan] ${event.title}`, json: { ...event, autoApproved: true } };\n    }\n    default:\n      return { resolved: false };\n  }\n}\n\nfunction formatDefault(event: HarnessEvent, ctx: { lastTextLength: number }): void {\n  switch (event.type) {\n    case 'agent_start':\n      ctx.lastTextLength = 0;\n      break;\n    case 'message_update': {\n      const fullText = event.message.content\n        .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\n        .map(p => p.text)\n        .join('');\n      if (fullText.length > ctx.lastTextLength) {\n        process.stdout.write(fullText.slice(ctx.lastTextLength));\n        ctx.lastTextLength = fullText.length;\n      }\n      break;\n    }\n    case 'message_end':\n      ctx.lastTextLength = 0;\n      process.stdout.write('\\n');\n      break;\n    case 'tool_start':\n      process.stderr.write(`[tool] ${event.toolName}\\n`);\n      break;\n    case 'tool_end':\n      if (event.isError) process.stderr.write(`[tool error] ${truncate(String(event.result), 200)}\\n`);\n      break;\n    case 'shell_output':\n      process.stderr.write(event.output);\n      break;\n    case 'subagent_start':\n      process.stderr.write(\n        `[subagent:${event.forked ? 'forked:' : ''}${event.agentType}] ${truncate(event.task, 100)}\\n`,\n      );\n      break;\n    case 'subagent_end':\n      if (event.isError) process.stderr.write(`[subagent error] ${truncate(event.result, 200)}\\n`);\n      break;\n    case 'error':\n      process.stderr.write(`[error] ${event.error.message}\\n`);\n      break;\n  }\n}\n\ninterface HeadlessSummary {\n  text: string;\n  finishReason?: string;\n  usage?: { inputTokens?: number; outputTokens?: number; totalTokens?: number };\n  toolCalls: Array<{ id: string; name: string; args: unknown }>;\n  toolResults: Array<{ id: string; name: string; result: unknown; isError: boolean }>;\n  error?: { name: string; message: string; stack?: string };\n  threadId?: string;\n}\n\nfunction createEmptySummary(): HeadlessSummary {\n  return { text: '', toolCalls: [], toolResults: [] };\n}\n\nfunction extractAssistantText(message: HarnessMessage): string {\n  return message.content\n    .filter((c): c is { type: 'text'; text: string } => c.type === 'text')\n    .map(c => c.text)\n    .join('');\n}\n\nfunction aggregateIntoSummary(event: HarnessEvent, summary: HeadlessSummary): void {\n  switch (event.type) {\n    case 'message_end':\n      if (event.message.role === 'assistant') {\n        summary.text += extractAssistantText(event.message);\n      }\n      break;\n    case 'tool_start':\n      summary.toolCalls.push({ id: event.toolCallId, name: event.toolName, args: event.args });\n      break;\n    case 'tool_end': {\n      const matching = summary.toolCalls.find(c => c.id === event.toolCallId);\n      summary.toolResults.push({\n        id: event.toolCallId,\n        name: matching?.name ?? '',\n        result: event.result,\n        isError: event.isError,\n      });\n      break;\n    }\n    case 'usage_update':\n      summary.usage = {\n        inputTokens: event.usage.promptTokens,\n        outputTokens: event.usage.completionTokens,\n        totalTokens: event.usage.totalTokens,\n      };\n      break;\n    case 'error':\n      summary.error = {\n        name: event.error.name,\n        message: event.error.message,\n        stack: event.error.stack,\n      };\n      break;\n  }\n}\n\nfunction finalizeSummary<TState extends Record<string, unknown>>(\n  summary: HeadlessSummary,\n  endEvent: Extract<HarnessEvent, { type: 'agent_end' }>,\n  harness: Harness<TState>,\n): void {\n  summary.finishReason = endEvent.reason;\n  summary.threadId = harness.getCurrentThreadId() ?? undefined;\n}\n\n/** Resolve a thread by ID or title. Tries exact ID match first, then title. */\nasync function resolveThread<TState extends Record<string, unknown>>(\n  harness: Harness<TState>,\n  threadIdOrTitle: string,\n): Promise<{ threadId: string; matchType: 'id' | 'title' } | { error: string }> {\n  const threads = await harness.listThreads();\n\n  const byId = threads.find(t => t.id === threadIdOrTitle);\n  if (byId) return { threadId: byId.id, matchType: 'id' };\n\n  const byTitle = threads\n    .filter(t => t.title === threadIdOrTitle)\n    .sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n  if (byTitle.length > 0) return { threadId: byTitle[0]!.id, matchType: 'title' };\n\n  return { error: `No thread found matching \"${threadIdOrTitle}\"` };\n}\n\n/**\n * Run headless mode: subscribe to harness events with auto-approval,\n * optionally resume a thread, send the prompt, and wait for completion.\n *\n * Returns the exit code (0 = success, 1 = error/aborted, 2 = timeout).\n */\nexport async function runHeadless<TState extends Record<string, unknown>>(\n  harness: Harness<TState>,\n  args: HeadlessArgs & { prompt: string },\n  effectiveDefaults?: Record<string, string>,\n): Promise<number> {\n  const outputFormat = args.outputFormat;\n  const emit =\n    outputFormat === 'stream-json' || (!outputFormat && args.format === 'json')\n      ? (data: Record<string, unknown>) => process.stdout.write(JSON.stringify(data) + '\\n')\n      : null;\n  const summary = outputFormat === 'json' ? createEmptySummary() : null;\n  let textBuffer: string | null = outputFormat === 'text' ? '' : null;\n\n  let timeoutId: ReturnType<typeof setTimeout> | undefined;\n  let timedOut = false;\n  if (args.timeout) {\n    timeoutId = setTimeout(() => {\n      timedOut = true;\n      if (emit) {\n        emit({ type: 'timeout', seconds: args.timeout });\n      } else {\n        process.stderr.write(`\\nTimeout: ${args.timeout}s elapsed. Aborting.\\n`);\n      }\n      harness.abort();\n    }, args.timeout * 1000);\n  }\n\n  function failEarly(msg: string): 1 {\n    if (emit) emit({ type: 'error', error: { message: msg } });\n    else process.stderr.write(`Error: ${msg}\\n`);\n    if (timeoutId) clearTimeout(timeoutId);\n    return 1;\n  }\n\n  // --- Pre-flight checks (before subscribing to events) ---\n\n  // --- Resolve model ---\n  if (args.model && args.mode) {\n    if (emit) {\n      emit({ type: 'warning', message: '--model overrides --mode, ignoring --mode' });\n    } else {\n      process.stderr.write('Warning: --model overrides --mode, ignoring --mode\\n');\n    }\n  }\n\n  if (args.model) {\n    // Highest priority: explicit --model flag\n    const available = await harness.listAvailableModels();\n    const match = available.find(m => m.id === args.model);\n    if (!match) {\n      return failEarly(`Unknown model: \"${args.model}\"`);\n    }\n    if (!match.hasApiKey) {\n      const keyHint = match.apiKeyEnvVar ? ` Set ${match.apiKeyEnvVar} to use this model.` : '';\n      return failEarly(`Model \"${args.model}\" has no API key configured.${keyHint}`);\n    }\n    await harness.switchModel({ modelId: args.model });\n    if (!emit) process.stderr.write(`[model] ${args.model}\\n`);\n  } else if (args.mode) {\n    // --mode flag: look up model from effectiveDefaults (resolved from settings at startup)\n    const modelId = effectiveDefaults?.[args.mode];\n    if (modelId) {\n      const available = await harness.listAvailableModels();\n      const match = available.find(m => m.id === modelId);\n      if (!match) {\n        return failEarly(`Unknown model \"${modelId}\" configured for mode \"${args.mode}\"`);\n      }\n      if (!match.hasApiKey) {\n        const keyHint = match.apiKeyEnvVar ? ` Set ${match.apiKeyEnvVar} to use this model.` : '';\n        return failEarly(`Model \"${modelId}\" (mode: ${args.mode}) has no API key configured.${keyHint}`);\n      }\n      await harness.switchModel({ modelId });\n      if (!emit) process.stderr.write(`[model] ${modelId} (mode: ${args.mode})\\n`);\n    } else {\n      const warnMsg = `--mode ${args.mode} has no configured model, using default`;\n      if (emit) emit({ type: 'warning', message: warnMsg });\n      else process.stderr.write(`Warning: ${warnMsg}\\n`);\n    }\n  }\n\n  // --- Resolve thinking level ---\n  if (args.thinkingLevel) {\n    await harness.setState({ thinkingLevel: args.thinkingLevel } as unknown as Partial<TState>);\n    if (!emit) process.stderr.write(`[thinking] ${args.thinkingLevel}\\n`);\n  }\n\n  // --- Subscribe and send ---\n  // Subscription is set up after preflight checks (model switching, thinking level) so that\n  // early-exit failures don't leave a dangling subscriber. The subscriber only handles\n  // runtime events (auto-resolution, streaming, agent_end).\n\n  const streamCtx = { lastTextLength: 0 };\n\n  const done = new Promise<number>(resolve => {\n    harness.subscribe(event => {\n      const result = autoResolve(harness, event);\n      if (result.resolved) {\n        if (emit) emit(result.json);\n        else if (!outputFormat) process.stderr.write(result.label + '\\n');\n        return;\n      }\n\n      // Aggregate into accumulators for text / json modes\n      if (summary) aggregateIntoSummary(event, summary);\n      if (textBuffer !== null && event.type === 'message_end' && event.message.role === 'assistant') {\n        textBuffer += extractAssistantText(event.message);\n      }\n\n      if (event.type === 'agent_end') {\n        if (summary) {\n          finalizeSummary(summary, event, harness);\n          process.stdout.write(JSON.stringify(summary) + '\\n');\n        } else if (textBuffer !== null) {\n          process.stdout.write(textBuffer);\n          if (!textBuffer.endsWith('\\n')) process.stdout.write('\\n');\n        } else if (emit) {\n          emit({ ...event });\n        }\n        resolve(resolveExitCode(event.reason));\n        return;\n      }\n\n      if (emit) {\n        emit({ ...event });\n      } else if (!outputFormat) {\n        formatDefault(event, streamCtx);\n      }\n    });\n  });\n\n  // --- Resource ID ---\n  if (args.resourceId) {\n    harness.setResourceId({ resourceId: args.resourceId });\n    if (!emit) process.stderr.write(`[resource] ${args.resourceId}\\n`);\n  }\n\n  // --- Thread selection ---\n  try {\n    if (args.thread) {\n      const result = await resolveThread(harness, args.thread);\n      if ('error' in result) {\n        const msg = result.error;\n        if (emit) emit({ type: 'error', error: { message: msg } });\n        else process.stderr.write(`Error: ${msg}\\n`);\n        if (timeoutId) clearTimeout(timeoutId);\n        return 1;\n      }\n      await harness.switchThread({ threadId: result.threadId });\n      if (!emit) process.stderr.write(`[thread] resumed ${result.threadId} (matched by ${result.matchType})\\n`);\n    } else if (args.continue_) {\n      const threads = await harness.listThreads();\n      if (threads.length > 0) {\n        const sorted = [...threads].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n        await harness.switchThread({ threadId: sorted[0]!.id });\n        if (!emit) process.stderr.write(`[continued] thread ${sorted[0]!.id}\\n`);\n      } else if (!emit) {\n        process.stderr.write(`[info] No existing threads found, starting new thread\\n`);\n      }\n    }\n    // else: no thread selection — sendMessage will auto-create a new thread\n  } catch (err) {\n    const msg = `Failed to select thread: ${(err as Error).message}`;\n    if (emit) emit({ type: 'error', error: { message: msg } });\n    else process.stderr.write(`Error: ${msg}\\n`);\n    if (timeoutId) clearTimeout(timeoutId);\n    return 1;\n  }\n\n  // --- Clone ---\n  if (args.cloneThread) {\n    try {\n      const cloned = await harness.cloneThread();\n      if (emit) emit({ type: 'thread_cloned', threadId: cloned.id });\n      else process.stderr.write(`[cloned] thread ${cloned.id}\\n`);\n    } catch (err) {\n      const msg = `Failed to clone thread: ${(err as Error).message}`;\n      if (emit) emit({ type: 'error', error: { message: msg } });\n      else process.stderr.write(`Error: ${msg}\\n`);\n      if (timeoutId) clearTimeout(timeoutId);\n      return 1;\n    }\n  }\n\n  // --- Title ---\n  if (args.title) {\n    try {\n      await harness.renameThread({ title: args.title });\n      if (!emit) process.stderr.write(`[title] \"${args.title}\"\\n`);\n    } catch (err) {\n      const msg = `Failed to set thread title: ${(err as Error).message}`;\n      if (emit) emit({ type: 'error', error: { message: msg } });\n      else process.stderr.write(`Error: ${msg}\\n`);\n      if (timeoutId) clearTimeout(timeoutId);\n      return 1;\n    }\n  }\n\n  await harness.sendMessage({ content: args.prompt });\n\n  const exitCode = await done;\n  if (timeoutId) clearTimeout(timeoutId);\n  return timedOut ? 2 : exitCode;\n}\n\n/**\n * Headless mode main entry point: parse arguments, read stdin, initialize\n * MastraCode, and run headless mode.\n */\nexport async function headlessMain(predrainedInput?: string | null): Promise<never> {\n  if (process.argv.includes('--help') || process.argv.includes('-h')) {\n    printHeadlessUsage();\n    process.exit(0);\n  }\n\n  let args;\n  try {\n    args = parseHeadlessArgs(process.argv);\n  } catch (e) {\n    process.stderr.write(`Error: ${(e as Error).message}\\n`);\n    process.exit(1);\n  }\n\n  let prompt = args.prompt;\n  if (predrainedInput !== undefined) {\n    // Stdin was already drained by the caller (e.g. TTY reopen failed after pipe drain)\n    prompt = predrainedInput ?? '';\n  } else if (prompt === '-' || (!prompt && !process.stdin.isTTY)) {\n    const chunks: Buffer[] = [];\n    for await (const chunk of process.stdin) {\n      chunks.push(chunk as Buffer);\n    }\n    prompt = Buffer.concat(chunks).toString('utf-8').trim();\n  }\n\n  if (!prompt) {\n    printHeadlessUsage();\n    process.stderr.write('Error: --prompt is required (or pipe via stdin)\\n');\n    process.exit(1);\n  }\n\n  if (args.settings && !existsSync(args.settings)) {\n    process.stderr.write(`Error: Settings file not found: ${args.settings}\\n`);\n    process.exit(1);\n  }\n\n  const result = await createMastraCode({ settingsPath: args.settings });\n  const { harness, mcpManager, effectiveDefaults } = result;\n\n  if (mcpManager?.hasServers()) {\n    mcpManager.initInBackground().catch(err => {\n      process.stderr.write(`Warning: MCP server initialization failed: ${(err as Error).message ?? err}\\n`);\n    });\n  }\n\n  setupDebugLogging();\n  await harness.init();\n\n  const exitCode = await runHeadless(harness, { ...args, prompt }, effectiveDefaults);\n\n  // Cleanup\n  releaseAllThreadLocks();\n  const closeSignalsPubSub = (result.signalsPubSub as { close?: () => Promise<void> | void } | undefined)?.close;\n  await Promise.allSettled([mcpManager?.disconnect(), harness?.stopHeartbeats(), closeSignalsPubSub?.()]);\n\n  process.exit(exitCode);\n}\n","import * as fs from 'node:fs';\nimport * as tty from 'node:tty';\n\n/** Maximum piped input size (1 MB). Content beyond this is truncated. */\nconst MAX_PIPE_BYTES = 1024 * 1024;\n\n/**\n * Matches all ANSI escape sequences — SGR (colors), cursor movement, line\n * clears, scrolling, window titles, etc.\n */\nconst ANSI_RE = /\\x1b(?:\\[[0-9;?]*[A-Za-z]|\\][^\\x07\\x1b]*(?:\\x07|\\x1b\\\\)?|\\([A-Z])/g;\n\n/**\n * Clean up raw piped output so the agent sees readable text, not terminal\n * control noise.\n *\n * 1. Strip all ANSI escape sequences (colors, cursor movement, line clears).\n * 2. Simulate carriage-return overwrites: for each line, split on `\\r` and\n *    keep only the last segment — this is what the terminal would display\n *    after a spinner/progress bar finishes.\n * 3. Collapse runs of blank lines.\n */\nexport function sanitizePipedOutput(raw: string): string {\n  // Strip ANSI escapes first\n  let text = raw.replace(ANSI_RE, '');\n\n  // Strip binary control characters (everything below 0x20 except \\t, \\n, \\r)\n  text = text.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]/g, '');\n\n  // Simulate \\r overwrites: for each line, the last \\r-segment wins\n  text = text\n    .split('\\n')\n    .map(line => {\n      if (!line.includes('\\r')) return line;\n      const segments = line.split('\\r');\n      // Walk backwards to find the last non-empty segment — a trailing \\r\n      // produces an empty final segment that would otherwise discard visible text.\n      for (let i = segments.length - 1; i >= 0; i--) {\n        if (segments[i]!.length > 0) return segments[i]!;\n      }\n      return '';\n    })\n    .join('\\n');\n\n  // Collapse 3+ consecutive blank lines into 2\n  text = text.replace(/\\n{3,}/g, '\\n\\n');\n\n  return text.trim();\n}\n\n/**\n * If stdin is a pipe (not a TTY), read **all** data until EOF and return it as\n * a string. The returned promise only resolves once the write end of the pipe\n * is closed — i.e. the sending process has fully exited — so callers are\n * guaranteed to receive the complete output, not a partial snapshot from a\n * program that writes progressively.\n *\n * Returns `null` when:\n * - stdin is a TTY (interactive terminal)\n * - the pipe was empty or contained only whitespace\n */\nexport async function drainPipedStdin(): Promise<string | null> {\n  if (process.stdin.isTTY) return null;\n\n  const chunks: Buffer[] = [];\n  let totalBytes = 0;\n  let truncated = false;\n\n  for await (const chunk of process.stdin) {\n    const buf = chunk as Buffer;\n\n    if (totalBytes + buf.length > MAX_PIPE_BYTES) {\n      // Take only what fits under the cap — copy so we don't retain the\n      // original backing buffer, then zero the source.\n      const remaining = MAX_PIPE_BYTES - totalBytes;\n      if (remaining > 0) {\n        chunks.push(Buffer.from(buf.subarray(0, remaining)));\n      }\n      buf.fill(0);\n      totalBytes = MAX_PIPE_BYTES;\n      truncated = true;\n      // Keep draining so we don't leave unread data in the pipe, but don't\n      // store it — we still need to wait for EOF.\n      continue;\n    }\n\n    chunks.push(buf);\n    totalBytes += buf.length;\n  }\n\n  if (truncated) {\n    process.stderr.write(`Warning: Piped input exceeded ${MAX_PIPE_BYTES / 1024 / 1024}MB and was truncated.\\n`);\n  }\n\n  const raw = Buffer.concat(chunks).toString('utf-8');\n\n  // Zero out raw buffers so piped secrets don't linger in memory\n  for (const buf of chunks) {\n    buf.fill(0);\n  }\n  chunks.length = 0;\n\n  const content = sanitizePipedOutput(raw);\n  return content.length > 0 ? content : null;\n}\n\n/**\n * Reopen `/dev/tty` (or `CON` on Windows) as `process.stdin` so that the\n * interactive TUI can read keyboard input after the original piped stdin has\n * been consumed.\n *\n * @returns `true` if the swap succeeded, `false` if a TTY could not be opened\n * (e.g. running in a headless CI container with no controlling terminal).\n */\nexport function reopenStdinFromTTY(): boolean {\n  const ttyPath = process.platform === 'win32' ? 'CON' : '/dev/tty';\n\n  let fd: number;\n  try {\n    fd = fs.openSync(ttyPath, 'r');\n  } catch {\n    return false;\n  }\n\n  const ttyStream = new tty.ReadStream(fd);\n\n  Object.defineProperty(process, 'stdin', {\n    value: ttyStream,\n    writable: true,\n    configurable: true,\n  });\n\n  return true;\n}\n","#!/usr/bin/env node\n/**\n * Main entry point for Mastra Code TUI.\n */\nimport fs from 'node:fs';\n\nimport { createMastraCodeAnalytics } from './analytics.js';\nimport { isStreamDestroyedError } from './error-classification.js';\nimport { hasHeadlessFlag, headlessMain } from './headless.js';\nimport { createBrowserFromSettings, loadSettings } from './onboarding/settings.js';\nimport { detectTerminalTheme } from './tui/detect-theme.js';\nimport { MastraTUI } from './tui/index.js';\nimport { applyThemeMode, restoreTerminalForeground } from './tui/theme.js';\nimport { setupDebugLogging } from './utils/debug-log.js';\nimport { drainPipedStdin, reopenStdinFromTTY } from './utils/stdin-pipe.js';\nimport { releaseAllThreadLocks } from './utils/thread-lock.js';\nimport { getCurrentVersion } from './utils/update-check.js';\nimport { createMastraCode } from './index.js';\n\nlet harness: Awaited<ReturnType<typeof createMastraCode>>['harness'];\nlet mcpManager: Awaited<ReturnType<typeof createMastraCode>>['mcpManager'];\nlet hookManager: Awaited<ReturnType<typeof createMastraCode>>['hookManager'];\nlet authStorage: Awaited<ReturnType<typeof createMastraCode>>['authStorage'];\nlet signalsPubSub: Awaited<ReturnType<typeof createMastraCode>>['signalsPubSub'];\nlet analytics: ReturnType<typeof createMastraCodeAnalytics> | undefined;\n\n// Global safety nets — catch any uncaught errors from storage init, etc.\nprocess.on('uncaughtException', error => {\n  // ERR_STREAM_DESTROYED is non-fatal — happens routinely when streams close\n  // during shutdown, cancelled LLM requests, or LSP/subprocess exits (#13548, #13549)\n  if (isStreamDestroyedError(error)) return;\n  handleFatalError(error);\n});\nprocess.on('unhandledRejection', reason => {\n  if (isStreamDestroyedError(reason)) return;\n  handleFatalError(reason instanceof Error ? reason : new Error(String(reason)));\n});\n\nasync function tuiMain(pipedInput?: string | null) {\n  const settings = loadSettings();\n  let browserPromise: ReturnType<typeof createBrowserFromSettings> | undefined;\n  const loadBrowser = () => {\n    browserPromise ??= createBrowserFromSettings(settings.browser);\n    return browserPromise;\n  };\n\n  const result = await createMastraCode({ unixSocketPubSub: true });\n  harness = result.harness;\n  mcpManager = result.mcpManager;\n  hookManager = result.hookManager;\n  authStorage = result.authStorage;\n  signalsPubSub = result.signalsPubSub;\n\n  if (result.storageWarning) {\n    console.info(`⚠ ${result.storageWarning}`);\n  }\n  if (result.observabilityWarning) {\n    console.info(`⚠ ${result.observabilityWarning}`);\n  }\n\n  // MCP connection is deferred to TUI.init() (after ui.start()) so that\n  // status messages use showInfo() instead of console.info(), which would\n  // corrupt the terminal.  Headless mode still inits from headless.ts.\n\n  setupDebugLogging();\n\n  // Detect and apply terminal theme\n  // MASTRA_THEME env var is the highest-priority override\n  const envTheme = process.env.MASTRA_THEME?.toLowerCase();\n  let themeMode: 'dark' | 'light';\n  let detectedBgHex: string | undefined;\n  if (envTheme === 'dark' || envTheme === 'light') {\n    themeMode = envTheme;\n  } else {\n    const settings = loadSettings();\n    const themePref = settings.preferences.theme;\n    if (themePref === 'dark' || themePref === 'light') {\n      themeMode = themePref;\n    } else {\n      const detection = await detectTerminalTheme();\n      themeMode = detection.mode;\n      detectedBgHex = detection.detectedBgHex;\n    }\n  }\n  applyThemeMode(themeMode, detectedBgHex);\n\n  analytics = createMastraCodeAnalytics({ version: getCurrentVersion() });\n  analytics.capture('mastracode_session_started', {\n    mode: harness.getCurrentModeId(),\n    resourceId: harness.getResourceId(),\n    hasAuthStorage: Boolean(authStorage),\n    hasMcp: Boolean(mcpManager),\n    theme: themeMode,\n  });\n\n  const tui = new MastraTUI({\n    harness,\n    hookManager,\n    analytics,\n    authStorage,\n    mcpManager,\n    appName: 'Mastra Code',\n    version: getCurrentVersion(),\n    inlineQuestions: true,\n    ...(pipedInput ? { initialMessage: `The following was piped via stdin:\\n\\n${pipedInput}` } : {}),\n  });\n  tui.run().catch(error => {\n    handleFatalError(error);\n  });\n\n  if (settings.browser.enabled) {\n    void loadBrowser()\n      .then(browser => {\n        if (!browser) return;\n        harness.setBrowser(browser);\n        void harness.setState({ activeBrowserSettings: settings.browser } as any).catch(() => {});\n      })\n      .catch(() => {});\n  }\n}\n\nconst asyncCleanup = async () => {\n  releaseAllThreadLocks();\n  const closeSignalsPubSub = (signalsPubSub as { close?: () => Promise<void> | void } | undefined)?.close;\n  await Promise.allSettled([\n    mcpManager?.disconnect(),\n    harness?.stopHeartbeats(),\n    closeSignalsPubSub?.(),\n    analytics?.shutdown(),\n  ]);\n};\n\nprocess.on('beforeExit', () => {\n  void asyncCleanup();\n});\nprocess.on('exit', () => {\n  restoreTerminalForeground();\n  releaseAllThreadLocks();\n});\nprocess.on('SIGINT', () => {\n  void asyncCleanup().finally(() => process.exit(0));\n});\nprocess.on('SIGTERM', () => {\n  void asyncCleanup().finally(() => process.exit(0));\n});\n\nfunction hasEconnrefused(err: unknown, depth = 0): boolean {\n  if (!err || depth > 5) return false;\n  const e = err as any;\n  if (e.code === 'ECONNREFUSED') return true;\n  if (e.cause) return hasEconnrefused(e.cause, depth + 1);\n  // AggregateError has .errors array\n  if (Array.isArray(e.errors)) return e.errors.some((inner: unknown) => hasEconnrefused(inner, depth + 1));\n  return false;\n}\n\nfunction handleFatalError(error: unknown): never {\n  // Always write to real stderr, even if console.error was overridden\n  const write = (msg: string) => process.stderr.write(msg + '\\n');\n\n  if (hasEconnrefused(error)) {\n    const settings = loadSettings();\n    const connStr = settings.storage?.pg?.connectionString;\n    const target = connStr ?? 'localhost:5432';\n    write(\n      `\\nFailed to connect to PostgreSQL at ${target}.` +\n        `\\nMake sure the database is running and accessible.` +\n        `\\n\\nTo switch back to LibSQL:` +\n        `\\n  Set MASTRA_STORAGE_BACKEND=libsql or change the backend in /settings\\n`,\n    );\n    process.exit(1);\n  }\n\n  const msg = `Fatal error: ${error instanceof Error ? error.message : String(error)}`;\n  write(msg);\n  // Write crash log to file so it persists even if terminal closes\n  try {\n    const crashLog = `[${new Date().toISOString()}] ${msg}\\n${error instanceof Error && error.stack ? error.stack + '\\n' : ''}`;\n    fs.appendFileSync('/tmp/mastra-crash.log', crashLog);\n  } catch {}\n  if (error instanceof Error && error.stack) {\n    write(error.stack);\n  }\n  process.exit(1);\n}\n\nasync function main() {\n  if (hasHeadlessFlag(process.argv) || process.argv.includes('--help') || process.argv.includes('-h')) {\n    return headlessMain();\n  }\n\n  // When stdin is piped (e.g. `cat foo | mastracode`), drain the pipe fully\n  // before starting the TUI.  The drain blocks until the sender process exits\n  // and closes its stdout, so we never see partial output.\n  let pipedInput: string | null = null;\n  if (!process.stdin.isTTY) {\n    process.stderr.write('Reading piped input...\\n');\n    pipedInput = await drainPipedStdin();\n\n    // Always reopen a real TTY — even if the pipe was empty, the original\n    // stdin is consumed/closed and the TUI needs a live TTY for keyboard input.\n    const reopenedStdin = reopenStdinFromTTY();\n    if (!reopenedStdin) {\n      process.stderr.write('No TTY available — falling back to headless mode.\\n');\n      return headlessMain(pipedInput);\n    }\n  }\n\n  return tuiMain(pipedInput);\n}\n\nmain().catch(error => {\n  handleFatalError(error);\n});\n"]}