@triedotdev/mcp 1.0.103 → 1.0.104
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/scan.ts","../src/utils/streaming.ts","../src/cli/dashboard/index.ts","../src/cli/dashboard/App.tsx","../src/cli/dashboard/state.tsx","../src/utils/output-manager.ts","../src/cli/dashboard/components/Header.tsx","../src/cli/dashboard/components/Footer.tsx","../src/cli/dashboard/components/Notification.tsx","../src/cli/dashboard/components/ConfigDialog.tsx","../src/cli/dashboard/views/OverviewView.tsx","../src/cli/dashboard/views/AgentView.tsx","../src/cli/dashboard/theme.ts","../src/cli/dashboard/views/GoalsView.tsx","../src/cli/dashboard/views/HypothesesView.tsx","../src/cli/dashboard/views/MemoryTreeView.tsx","../src/cli/dashboard/views/RawLogView.tsx"],"sourcesContent":["/**\n * Scan tool - simplified for decision ledger only\n * Note: Skills/scouts have been removed. Trie now focuses on:\n * - Learning from incidents (trie tell)\n * - Predicting risks (trie gotcha)\n * - Decision ledger (context graph)\n */\n\nexport interface ScanInput {\n files?: string[];\n directory?: string;\n forceAgents?: string[];\n cache?: boolean;\n parallel?: boolean;\n streaming?: boolean;\n format?: 'text' | 'json';\n output?: string;\n [key: string]: any;\n}\n\nexport class TrieScanTool {\n async execute(_input: ScanInput): Promise<any> {\n // Skills/scouts have been removed\n // Trie now focuses on decision ledger and learning from incidents\n console.error('ℹ️ Trie scan has been refocused on decision ledger');\n console.error(' Use: trie tell - to report incidents');\n console.error(' Use: trie gotcha - to predict risks');\n console.error(' Use: trie learn - to learn from history');\n \n return {\n content: [{\n type: 'text',\n text: 'Scan functionality has been refocused on decision ledger.\\n\\nUse:\\n- trie tell - to report incidents\\n- trie gotcha - to predict risks\\n- trie learn - to learn from history'\n }]\n };\n }\n}\n\n// Export for backward compatibility\nexport async function handleScanTool(input: ScanInput): Promise<any> {\n const tool = new TrieScanTool();\n return tool.execute(input);\n}\n","import type { Issue } from '../types/index.js';\nimport { isInteractiveMode } from './progress.js';\nimport type { \n BannerContent, \n SnippetContent, \n CostContent, \n ReadinessContent, \n SemanticContent, \n AttackSurfaceContent \n} from './output-manager.js';\n\n// Internal flag to suppress console output (used in emit error handler)\nconst shouldSuppressConsole = () => isInteractiveMode();\n\n// Rich content event types\nexport type RichContentType = \n | 'snippet' // Code snippet for issue\n | 'cost_report' // Moneybags cost estimate\n | 'readiness_report' // Production readiness\n | 'semantic_report' // Data flow analysis\n | 'attack_surface' // Endpoint analysis\n | 'skill_banner' // ASCII art + quote\n | 'raw_log'; // Raw console log capture\n\nexport interface StreamUpdate {\n type: 'progress' | 'agent_start' | 'agent_complete' | 'issue_found' | 'scan_complete' | 'error' | 'watch_status' | 'watch_change' | 'memory' | 'signal_extracted' | RichContentType;\n timestamp: number;\n data: any;\n}\n\n// Re-export rich content types for convenience\nexport type { BannerContent, SnippetContent, CostContent, ReadinessContent, SemanticContent, AttackSurfaceContent };\n\nexport interface ScanProgress {\n totalFiles: number;\n processedFiles: number;\n currentFile?: string;\n activeAgents: string[];\n completedAgents: string[];\n totalIssues: number;\n issuesBySeverity: {\n critical: number;\n serious: number;\n moderate: number;\n low: number;\n };\n}\n\n/**\n * Streaming scan results for real-time feedback\n */\nexport class StreamingManager {\n private listeners: Set<(update: StreamUpdate) => void> = new Set();\n private progress: ScanProgress = {\n totalFiles: 0,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 }\n };\n\n /**\n * Subscribe to scan updates\n */\n subscribe(callback: (update: StreamUpdate) => void): () => void {\n this.listeners.add(callback);\n return () => this.listeners.delete(callback);\n }\n\n /**\n * Emit an update to all listeners\n */\n private emit(type: StreamUpdate['type'], data: any): void {\n const update: StreamUpdate = {\n type,\n timestamp: Date.now(),\n data\n };\n\n this.listeners.forEach(listener => {\n try {\n listener(update);\n } catch (error) {\n if (!shouldSuppressConsole()) {\n console.warn('Stream listener error:', error);\n }\n }\n });\n }\n\n /**\n * Initialize scan with file count\n */\n startScan(totalFiles: number): void {\n this.progress = {\n totalFiles,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 }\n };\n\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Update current file being processed\n */\n updateCurrentFile(file: string): void {\n this.progress.currentFile = file;\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Mark file as processed\n */\n completeFile(): void {\n this.progress.processedFiles++;\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Start agent execution\n */\n startAgent(agentName: string): void {\n if (!this.progress.activeAgents.includes(agentName)) {\n this.progress.activeAgents.push(agentName);\n }\n this.emit('agent_start', { agent: agentName });\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Complete agent execution\n */\n completeAgent(agentName: string, issues: Issue[]): void {\n // Move from active to completed\n this.progress.activeAgents = this.progress.activeAgents.filter(a => a !== agentName);\n if (!this.progress.completedAgents.includes(agentName)) {\n this.progress.completedAgents.push(agentName);\n }\n\n // Update issue counts\n for (const issue of issues) {\n this.progress.issuesBySeverity[issue.severity]++;\n this.progress.totalIssues++;\n }\n\n this.emit('agent_complete', {\n agent: agentName,\n issueCount: issues.length,\n issues: issues.slice(0, 5) // Only send first 5 for streaming\n });\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Report new issue found\n */\n reportIssue(issue: Issue): void {\n this.progress.issuesBySeverity[issue.severity]++;\n this.progress.totalIssues++;\n this.emit('issue_found', issue);\n this.emit('progress', { ...this.progress });\n }\n\n /**\n * Complete the entire scan\n */\n completeScan(totalIssues: Issue[]): void {\n this.emit('scan_complete', {\n totalFiles: this.progress.totalFiles,\n totalIssues: totalIssues.length,\n issues: totalIssues, // Include all issues for the dashboard\n issuesBySeverity: this.progress.issuesBySeverity,\n completedAgents: this.progress.completedAgents\n });\n }\n\n /**\n * Report error\n */\n reportError(error: Error, context?: string): void {\n this.emit('error', {\n message: error.message,\n context,\n stack: error.stack\n });\n }\n\n /**\n * Get current progress\n */\n getProgress(): ScanProgress {\n return { ...this.progress };\n }\n\n /**\n * Reset state\n */\n reset(): void {\n this.progress = {\n totalFiles: 0,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 }\n };\n }\n\n /**\n * Report watch status (directories, debounce, last change)\n */\n reportWatchStatus(status: { watching: boolean; directories?: number; debounceMs?: number; lastChange?: string; recentChanges?: Array<{ file: string; time: string }> }): void {\n this.emit('watch_status', status);\n }\n\n /**\n * Report a specific file change when watching\n */\n reportWatchChange(file: string): void {\n this.emit('watch_change', { file });\n }\n\n /**\n * Report memory operations (saving context, learning patterns)\n */\n reportMemory(action: 'saving' | 'saved' | 'learning', details?: string): void {\n this.emit('memory', { action, details });\n }\n\n /**\n * Report signal extraction from watch mode\n */\n reportSignalExtraction(signals: { decisions: number; facts: number; blockers: number; questions: number }): void {\n this.emit('signal_extracted', signals);\n }\n\n // ============================================\n // Rich Content Events (for TUI panes)\n // ============================================\n\n /**\n * Report a code snippet for display\n */\n reportSnippet(snippet: SnippetContent): void {\n this.emit('snippet', snippet);\n }\n\n /**\n * Report cost estimate from Moneybags\n */\n reportCost(cost: CostContent): void {\n this.emit('cost_report', cost);\n }\n\n /**\n * Report production readiness score\n */\n reportReadiness(readiness: ReadinessContent): void {\n this.emit('readiness_report', readiness);\n }\n\n /**\n * Report semantic analysis results\n */\n reportSemantic(semantic: SemanticContent): void {\n this.emit('semantic_report', semantic);\n }\n\n /**\n * Report attack surface analysis\n */\n reportAttackSurface(attack: AttackSurfaceContent): void {\n this.emit('attack_surface', attack);\n }\n\n /**\n * Report skill banner (ASCII art + quote)\n */\n reportBanner(banner: BannerContent): void {\n this.emit('skill_banner', banner);\n }\n\n /**\n * Report raw log entry\n */\n reportRawLog(level: 'info' | 'warn' | 'error' | 'debug', message: string): void {\n this.emit('raw_log', { level, message, time: new Date().toLocaleTimeString('en-US', { hour12: false }) });\n }\n}\n\n/**\n * Format streaming updates for console output\n * Returns null if interactive mode is enabled (dashboard handles display)\n */\nexport function formatConsoleUpdate(update: StreamUpdate): string | null {\n // In interactive mode, the dashboard handles all display\n if (isInteractiveMode()) {\n return null;\n }\n\n switch (update.type) {\n case 'agent_start':\n // Suppress agent start messages - they're redundant with progress updates\n return null;\n\n case 'agent_complete':\n const label = update.data.issueCount > 0 ? '[WARN]' : '[OK]';\n const severityBreakdown: string[] = [];\n if (update.data.issues && Array.isArray(update.data.issues)) {\n const bySeverity = { critical: 0, serious: 0, moderate: 0, low: 0 };\n for (const issue of update.data.issues) {\n if (issue.severity && Object.prototype.hasOwnProperty.call(bySeverity, issue.severity)) {\n bySeverity[issue.severity as keyof typeof bySeverity]++;\n }\n }\n if (bySeverity.critical > 0) severityBreakdown.push(`${bySeverity.critical} critical`);\n if (bySeverity.serious > 0) severityBreakdown.push(`${bySeverity.serious} serious`);\n if (bySeverity.moderate > 0) severityBreakdown.push(`${bySeverity.moderate} moderate`);\n if (bySeverity.low > 0) severityBreakdown.push(`${bySeverity.low} low`);\n }\n const breakdown = severityBreakdown.length > 0 ? ` (${severityBreakdown.join(', ')})` : '';\n return `${label} ${update.data.agent}: ${update.data.issueCount} issues${breakdown}`;\n\n case 'progress':\n // Only show progress updates every 10% or when significant changes occur\n const { processedFiles, totalFiles, currentFile, activeAgents } = update.data;\n const progress = totalFiles > 0 ? Math.round((processedFiles / totalFiles) * 100) : 0;\n \n // Suppress frequent progress updates - only show at milestones\n if (totalFiles > 10 && progress % 10 !== 0 && processedFiles !== totalFiles) {\n return null;\n }\n \n const active = activeAgents.length > 0 ? ` (${activeAgents.join(', ')})` : '';\n const current = currentFile && totalFiles <= 10 ? ` - ${currentFile.split('/').pop()}` : '';\n return `Progress: ${progress}% (${processedFiles}/${totalFiles})${active}${current}`;\n\n case 'scan_complete':\n const { totalIssues, totalFiles: filesScanned, issuesBySeverity } = update.data;\n const severitySummary: string[] = [];\n if (issuesBySeverity) {\n if (issuesBySeverity.critical > 0) severitySummary.push(`${issuesBySeverity.critical} critical`);\n if (issuesBySeverity.serious > 0) severitySummary.push(`${issuesBySeverity.serious} serious`);\n if (issuesBySeverity.moderate > 0) severitySummary.push(`${issuesBySeverity.moderate} moderate`);\n if (issuesBySeverity.low > 0) severitySummary.push(`${issuesBySeverity.low} low`);\n }\n const summary = severitySummary.length > 0 ? ` [${severitySummary.join(', ')}]` : '';\n return `[COMPLETE] Scan finished: ${totalIssues} issues across ${filesScanned} files${summary}`;\n\n case 'error':\n return `[ERROR] ${update.data.message}`;\n\n default:\n return null;\n }\n}\n\n/**\n * Simple progress bar for terminal\n */\nexport function createProgressBar(current: number, total: number, width: number = 40): string {\n if (total === 0) return '█'.repeat(width);\n\n const progress = current / total;\n const filled = Math.round(width * progress);\n const empty = width - filled;\n\n return '█'.repeat(filled) + '░'.repeat(empty);\n}","import { render, type Instance } from 'ink';\nimport React from 'react';\nimport { App } from './App.js';\nimport type { StreamUpdate } from '../../utils/streaming.js';\n\nexport class InteractiveDashboard {\n private app: Instance | null = null;\n private updateHandler: ((update: StreamUpdate) => void) | null = null;\n private getConfigFn: (() => any) | null = null;\n\n async start(): Promise<void> {\n this.app = render(\n React.createElement(App, {\n onReady: (handler, getConfig) => {\n this.updateHandler = handler;\n this.getConfigFn = getConfig;\n },\n }),\n { exitOnCtrlC: false }\n );\n }\n\n stop(): void {\n if (this.app) {\n this.app.unmount();\n this.app = null;\n }\n }\n\n handleStreamUpdate(update: StreamUpdate): void {\n this.updateHandler?.(update);\n }\n\n getAgentConfig(): {\n agentSmith: { aiEnhancement: boolean; minSeverity: string; enabledCategories: Record<string, boolean>; memoryRetentionDays: number };\n performance: { parallel: boolean; cache: boolean; maxConcurrency: number; timeoutMs: number; workers: boolean; streaming: boolean };\n riskThresholds: { critical: number; high: number; medium: number };\n } {\n if (this.getConfigFn) return this.getConfigFn();\n return {\n agentSmith: { aiEnhancement: true, minSeverity: 'low', enabledCategories: { security: true, codeSmells: true, asyncBugs: true, reactPatterns: true, uxPatterns: true, backendPatterns: true }, memoryRetentionDays: 30 },\n performance: { parallel: true, cache: true, maxConcurrency: 4, timeoutMs: 120000, workers: true, streaming: true },\n riskThresholds: { critical: 70, high: 40, medium: 20 },\n };\n }\n}\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { Box, useInput, useApp } from 'ink';\nimport { DashboardProvider, useDashboard } from './state.js';\nimport type { DashboardView } from './types.js';\nimport type { StreamUpdate } from '../../utils/streaming.js';\nimport type { NudgeContent } from '../../utils/output-manager.js';\nimport { getOutputManager } from '../../utils/output-manager.js';\nimport { getWorkingDirectory, getTrieDirectory } from '../../utils/workspace.js';\nimport { getGuardian } from '../../guardian/guardian-agent.js';\nimport { getGuardianState } from '../../guardian/guardian-state.js';\nimport { existsSync } from 'fs';\nimport { readFile, writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\n\nimport { Header } from './components/Header.js';\nimport { Footer } from './components/Footer.js';\nimport { Notification } from './components/Notification.js';\nimport { ConfigDialog } from './components/ConfigDialog.js';\nimport { OverviewView } from './views/OverviewView.js';\nimport { AgentView } from './views/AgentView.js';\nimport { GoalsView } from './views/GoalsView.js';\nimport { HypothesesView } from './views/HypothesesView.js';\nimport { MemoryTreeView } from './views/MemoryTreeView.js';\nimport { RawLogView } from './views/RawLogView.js';\n\nconst MAIN_VIEWS: DashboardView[] = ['overview', 'memory', 'goals', 'hypotheses', 'agent'];\n\nfunction DashboardApp({ onReady }: {\n onReady: (handler: (update: StreamUpdate) => void, getConfig: () => any) => void;\n}): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { exit } = useApp();\n const [showConfig, setShowConfig] = useState(false);\n const dispatchRef = useRef(dispatch);\n dispatchRef.current = dispatch;\n const stateRef = useRef(state);\n stateRef.current = state;\n\n const configPath = join(getTrieDirectory(getWorkingDirectory(undefined, true)), 'agent.json');\n\n const loadConfig = useCallback(async () => {\n if (!existsSync(configPath)) return;\n try {\n const raw = await readFile(configPath, 'utf-8');\n const parsed = JSON.parse(raw);\n dispatchRef.current({ type: 'SET_AGENT_CONFIG', config: parsed });\n } catch { /* ignore */ }\n }, [configPath]);\n\n const persistConfig = useCallback(async () => {\n try {\n await mkdir(getTrieDirectory(getWorkingDirectory(undefined, true)), { recursive: true });\n await writeFile(configPath, JSON.stringify(stateRef.current.agentConfig, null, 2), 'utf-8');\n } catch { /* ignore */ }\n }, [configPath]);\n\n const processInsights = useCallback(async (issues: import('../../types/index.js').Issue[]) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const trieAgent = getGuardian(workDir);\n\n if (!stateRef.current.agentInitialized) {\n await trieAgent.initialize();\n dispatchRef.current({ type: 'SET_AGENT_INITIALIZED', initialized: true });\n const persisted = trieAgent.getActiveInsights();\n if (persisted.length > 0) {\n dispatchRef.current({ type: 'ADD_INSIGHTS', insights: persisted });\n }\n }\n\n const filesChanged = stateRef.current.watch.recentChanges.map(c => c.file);\n const newInsights = await trieAgent.processIssues(issues, { filesChanged, isWatchMode: stateRef.current.watch.watching });\n\n if (newInsights.length > 0) {\n dispatchRef.current({ type: 'ADD_INSIGHTS', insights: newInsights });\n }\n\n try {\n const agencyStatus = await trieAgent.getAgencyStatus();\n dispatchRef.current({ type: 'SET_AGENCY_STATUS', status: agencyStatus });\n } catch { /* optional */ }\n } catch (error) {\n dispatchRef.current({ type: 'ADD_ACTIVITY', message: `Trie Agent error: ${error instanceof Error ? error.message : 'unknown'}` });\n }\n }, []);\n\n const refreshGoals = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goals = agentState.getAllGoals();\n dispatchRef.current({\n type: 'SET_GOALS',\n goals: goals.map(g => {\n const base = { id: g.id, description: g.description, type: g.type, target: g.target, currentValue: g.currentValue, status: g.status, autoGenerated: g.autoGenerated, updatedAt: g.updatedAt };\n return g.category ? { ...base, category: g.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, []);\n\n const refreshHypotheses = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const hypotheses = agentState.getAllHypotheses();\n dispatchRef.current({\n type: 'SET_HYPOTHESES',\n hypotheses: hypotheses.map(h => {\n const base = { id: h.id, statement: h.statement, confidence: h.confidence, status: h.status, evidenceCount: h.evidence.length, updatedAt: h.updatedAt };\n return h.category ? { ...base, category: h.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, []);\n\n useEffect(() => {\n void loadConfig();\n void refreshGoals();\n void refreshHypotheses();\n\n const outputManager = getOutputManager();\n outputManager.setMode('tui');\n outputManager.registerTUICallbacks({\n onActivity: (message: string) => {\n dispatchRef.current({ type: 'ADD_ACTIVITY', message });\n },\n onLog: (level: string, message: string) => {\n const time = new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n dispatchRef.current({ type: 'STREAM_UPDATE', update: { type: 'raw_log', data: { time, level, message }, timestamp: Date.now() } });\n },\n onNudge: (nudge: NudgeContent) => {\n const action: import('./types.js').DashboardAction = { type: 'SHOW_NOTIFICATION', message: nudge.message, severity: nudge.severity };\n if (nudge.file !== undefined) (action as any).file = nudge.file;\n if (nudge.autoHideMs !== undefined) (action as any).autoHideMs = nudge.autoHideMs;\n dispatchRef.current(action);\n },\n });\n\n const handleUpdate = (update: StreamUpdate) => {\n dispatchRef.current({ type: 'STREAM_UPDATE', update });\n if (update.type === 'scan_complete' && update.data.issues) {\n void processInsights(update.data.issues);\n }\n };\n\n const getConfig = () => {\n const c = stateRef.current.agentConfig;\n return {\n agentSmith: { ...c.agentSmith, enabledCategories: { ...c.agentSmith.enabledCategories } },\n performance: { ...c.performance },\n riskThresholds: { ...c.riskThresholds },\n };\n };\n\n onReady(handleUpdate, getConfig);\n\n return () => {\n outputManager.clearTUICallbacks();\n outputManager.setMode('console');\n };\n }, [loadConfig, onReady, processInsights, refreshGoals, refreshHypotheses]);\n\n useEffect(() => {\n const interval = setInterval(() => {\n dispatchRef.current({ type: 'AUTO_DISMISS_NOTIFICATIONS' });\n }, 5000);\n return () => clearInterval(interval);\n }, []);\n\n useInput((input, key) => {\n if (showConfig) return;\n if (state.view === 'goals' && state.goalsPanel.inputMode === 'add') return;\n if (state.view === 'hypotheses' && state.hypothesesPanel.inputMode === 'add') return;\n\n if (input === 'q' || key.escape) {\n exit();\n process.exit(0);\n }\n\n if (key.tab) {\n const currentIndex = MAIN_VIEWS.indexOf(state.view);\n const nextIndex = currentIndex >= 0 ? (currentIndex + 1) % MAIN_VIEWS.length : 0;\n dispatch({ type: 'SET_VIEW', view: MAIN_VIEWS[nextIndex] || 'overview' });\n return;\n }\n\n if (input === 'c') { setShowConfig(true); return; }\n if (input === 'l') { dispatch({ type: 'SET_VIEW', view: 'rawlog' }); return; }\n if (input === 'g') { dispatch({ type: 'SET_VIEW', view: 'agent' }); return; }\n if (input === 'o') { dispatch({ type: 'SET_VIEW', view: 'goals' }); void refreshGoals(); return; }\n if (input === 'y') { dispatch({ type: 'SET_VIEW', view: 'hypotheses' }); void refreshHypotheses(); return; }\n if (input === 't') { dispatch({ type: 'SET_VIEW', view: 'memory' }); return; }\n\n if (state.view === 'agent' || state.view === 'memory') return;\n\n if (input === 'b') dispatch({ type: 'GO_BACK' });\n if (input === 'n') dispatch({ type: 'NEXT_PAGE' });\n if (input === 'p') dispatch({ type: 'PREV_PAGE' });\n });\n\n let viewComponent: React.ReactElement;\n switch (state.view) {\n case 'overview': viewComponent = <OverviewView />; break;\n case 'agent': viewComponent = <AgentView />; break;\n case 'goals': viewComponent = <GoalsView />; break;\n case 'hypotheses': viewComponent = <HypothesesView />; break;\n case 'memory': viewComponent = <MemoryTreeView />; break;\n case 'rawlog': viewComponent = <RawLogView />; break;\n default: viewComponent = <OverviewView />;\n }\n\n return (\n <Box flexDirection=\"column\" height={process.stdout.rows || 40}>\n <Header />\n <Notification />\n <Box flexGrow={1} flexDirection=\"column\" overflow=\"hidden\">\n {showConfig ? (\n <ConfigDialog onClose={() => { setShowConfig(false); void persistConfig(); }} />\n ) : (\n viewComponent\n )}\n </Box>\n <Footer />\n </Box>\n );\n}\n\nexport interface AppProps {\n onReady: (\n handler: (update: StreamUpdate) => void,\n getConfig: () => any,\n ) => void;\n}\n\nexport function App({ onReady }: AppProps): React.ReactElement {\n return (\n <DashboardProvider>\n <DashboardApp onReady={onReady} />\n </DashboardProvider>\n );\n}\n","import React, { createContext, useContext, useReducer, type Dispatch } from 'react';\nimport type {\n DashboardState,\n DashboardAction,\n AgentConfig,\n} from './types.js';\nimport type { StreamUpdate } from '../../utils/streaming.js';\n\nfunction addActivity(state: DashboardState, message: string): DashboardState {\n const time = new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n const activityLog = [{ time, message }, ...state.activityLog].slice(0, 50);\n return { ...state, activityLog };\n}\n\nfunction getVisibleInsights(state: DashboardState) {\n return state.agentInsights.filter(i => !i.dismissed);\n}\n\nfunction getMemoryTreeNodes(state: DashboardState): Array<{ id: string; level: number }> {\n const nodes: Array<{ id: string; level: number }> = [];\n const { expandedNodes, issues, globalPatterns } = state.memoryTree;\n\n nodes.push({ id: 'severity', level: 0 });\n if (expandedNodes.has('severity')) {\n nodes.push({ id: 'severity-critical', level: 1 });\n if (expandedNodes.has('severity-critical')) {\n issues.filter(i => i.severity === 'critical').slice(0, 5).forEach(issue => {\n nodes.push({ id: `severity-critical-${issue.id}`, level: 2 });\n });\n }\n nodes.push({ id: 'severity-serious', level: 1 });\n nodes.push({ id: 'severity-moderate', level: 1 });\n nodes.push({ id: 'severity-low', level: 1 });\n }\n\n nodes.push({ id: 'files', level: 0 });\n if (expandedNodes.has('files')) {\n const byFile = new Map<string, number>();\n for (const issue of issues) {\n byFile.set(issue.file, (byFile.get(issue.file) || 0) + 1);\n }\n Array.from(byFile.entries())\n .sort((a, b) => b[1] - a[1])\n .slice(0, 10)\n .forEach(([file]) => nodes.push({ id: `file-${file}`, level: 1 }));\n }\n\n nodes.push({ id: 'agents', level: 0 });\n if (expandedNodes.has('agents')) {\n const byAgent = new Map<string, number>();\n for (const issue of issues) {\n byAgent.set(issue.agent, (byAgent.get(issue.agent) || 0) + 1);\n }\n Array.from(byAgent.entries())\n .sort((a, b) => b[1] - a[1])\n .forEach(([agent]) => nodes.push({ id: `agent-${agent}`, level: 1 }));\n }\n\n nodes.push({ id: 'patterns', level: 0 });\n if (expandedNodes.has('patterns')) {\n globalPatterns.slice(0, 5).forEach(p => nodes.push({ id: `pattern-${p.id}`, level: 1 }));\n }\n\n return nodes;\n}\n\nfunction handleStreamUpdate(state: DashboardState, update: StreamUpdate): DashboardState {\n let s = { ...state, lastUpdate: Date.now() };\n\n switch (update.type) {\n case 'progress': {\n const oldProgress = s.progress;\n if ((oldProgress.totalFiles === 0 && update.data.totalFiles > 0) ||\n (oldProgress.processedFiles > 0 && update.data.processedFiles === 0)) {\n s.scanStartTime = Date.now();\n s.scanComplete = false;\n s = { ...s };\n delete s.scanEndTime;\n }\n s.progress = update.data;\n if (update.data.issuesBySeverity?.critical > 0) {\n s.alerts = { hasCritical: true, lastCriticalAt: update.timestamp };\n }\n if (update.data.currentFile && update.data.processedFiles % 10 === 0 &&\n update.data.processedFiles !== oldProgress.processedFiles) {\n s = addActivity(s, `Scanned ${update.data.processedFiles}/${update.data.totalFiles} files`);\n }\n break;\n }\n case 'agent_start':\n s = addActivity(s, `[*] Scout started: ${update.data.agent}`);\n break;\n case 'agent_complete':\n s = addActivity(s, `[+] Scout complete: ${update.data.agent} (${update.data.issueCount} issues)`);\n break;\n case 'issue_found':\n s.issues = [...s.issues, update.data];\n if (update.data.severity === 'critical' || update.data.severity === 'serious') {\n const icon = update.data.severity === 'critical' ? '[!]' : '[x]';\n const fileName = update.data.file?.split('/').pop() || 'unknown';\n s = addActivity(s, `${icon} ${update.data.severity.toUpperCase()}: ${update.data.message?.slice(0, 40) || fileName}`);\n if (update.data.severity === 'critical') {\n s.alerts = { hasCritical: true, lastCriticalAt: update.timestamp };\n }\n }\n break;\n case 'scan_complete':\n s.scanComplete = true;\n s.scanEndTime = update.timestamp;\n s.progress = { ...s.progress, processedFiles: s.progress.totalFiles };\n if (update.data.issues && Array.isArray(update.data.issues)) {\n s.issues = update.data.issues;\n }\n s = addActivity(s, `=== Scan complete - ${s.progress.totalIssues} issues ===`);\n break;\n case 'watch_status':\n s.watch = {\n watching: update.data.watching ?? s.watch.watching,\n directories: update.data.directories ?? s.watch.directories,\n debounceMs: update.data.debounceMs ?? s.watch.debounceMs,\n lastChange: update.data.lastChange ?? s.watch.lastChange,\n recentChanges: update.data.recentChanges ?? s.watch.recentChanges,\n };\n if (update.data.watching !== undefined) {\n s = addActivity(s, update.data.watching\n ? `[*] Watch mode: ACTIVE (${update.data.directories ?? 0} dirs)`\n : '[*] Watch mode: OFF');\n }\n break;\n case 'watch_change': {\n const entry = { file: update.data.file, time: new Date(update.timestamp).toLocaleTimeString('en-US', { hour12: false }) };\n s.watch = {\n ...s.watch,\n recentChanges: [entry, ...s.watch.recentChanges].slice(0, 5),\n lastChange: entry.time,\n };\n s = addActivity(s, `Change detected: ${update.data.file}`);\n break;\n }\n case 'signal_extracted': {\n const se = { ...s.signalExtraction };\n if (update.data.decisions) se.decisionsExtracted += update.data.decisions;\n if (update.data.facts) se.factsExtracted += update.data.facts;\n if (update.data.blockers) se.blockersExtracted += update.data.blockers;\n if (update.data.questions) se.questionsExtracted += update.data.questions;\n s.signalExtraction = se;\n const total = (update.data.decisions || 0) + (update.data.facts || 0) +\n (update.data.blockers || 0) + (update.data.questions || 0);\n if (total > 0) {\n s = addActivity(s, `[+] Extracted ${total} signals (${update.data.decisions}d, ${update.data.facts}f, ${update.data.blockers}b)`);\n }\n break;\n }\n case 'memory':\n if (update.data.action === 'saving') s = addActivity(s, '[~] Saving to memory...');\n else if (update.data.action === 'saved') s = addActivity(s, `[+] Memory updated: ${update.data.details || 'context saved'}`);\n else if (update.data.action === 'learning') s = addActivity(s, `[~] Learning: ${update.data.details || 'analyzing patterns'}`);\n break;\n case 'raw_log':\n s.rawLog = [{\n time: update.data.time || new Date(update.timestamp).toLocaleTimeString('en-US', { hour12: false }),\n level: update.data.level,\n message: update.data.message,\n }, ...s.rawLog].slice(0, 500);\n break;\n }\n\n return s;\n}\n\nfunction applyAgentConfigPatch(current: AgentConfig, patch: Partial<AgentConfig>): AgentConfig {\n const config = { ...current };\n if (patch.agentSmith) {\n config.agentSmith = {\n ...config.agentSmith,\n ...patch.agentSmith,\n enabledCategories: {\n ...config.agentSmith.enabledCategories,\n ...(patch.agentSmith.enabledCategories || {}),\n },\n };\n }\n if (patch.performance) config.performance = { ...config.performance, ...patch.performance };\n if (patch.riskThresholds) config.riskThresholds = { ...config.riskThresholds, ...patch.riskThresholds };\n return config;\n}\n\nexport function dashboardReducer(state: DashboardState, action: DashboardAction): DashboardState {\n switch (action.type) {\n case 'STREAM_UPDATE':\n return handleStreamUpdate(state, action.update);\n\n case 'SET_VIEW':\n return { ...state, previousView: state.view, view: action.view };\n\n case 'GO_BACK':\n return { ...state, view: state.previousView || 'overview', previousView: null };\n\n case 'ADD_ACTIVITY':\n return addActivity(state, action.message);\n\n case 'SHOW_NOTIFICATION': {\n const now = Date.now();\n const historyEntry: DashboardState['notificationHistory'][0] = {\n message: action.message,\n severity: action.severity,\n timestamp: now,\n dismissed: false,\n };\n if (action.file !== undefined) historyEntry.file = action.file;\n\n const notification: DashboardState['notification'] = {\n active: true,\n message: action.message,\n severity: action.severity,\n timestamp: now,\n };\n if (action.file !== undefined) notification.file = action.file;\n if (action.autoHideMs !== undefined) notification.autoHideAt = now + action.autoHideMs;\n\n let s: DashboardState = {\n ...state,\n notification,\n notificationHistory: [historyEntry, ...state.notificationHistory].slice(0, 50),\n };\n const prefix = action.severity === 'critical' ? '[!]' : action.severity === 'warning' ? '[!]' : '[>]';\n s = addActivity(s, `${prefix} ${action.message}`);\n return s;\n }\n\n case 'DISMISS_NOTIFICATION': {\n if (!state.notification) return state;\n const history = state.notificationHistory.map(h =>\n h.timestamp === state.notification?.timestamp ? { ...h, dismissed: true } : h\n );\n return { ...state, notification: null, notificationHistory: history };\n }\n\n case 'SET_INSIGHTS':\n return { ...state, agentInsights: action.insights };\n\n case 'ADD_INSIGHTS': {\n const existing = state.agentInsights;\n const newOnes = action.insights.filter(ni =>\n !existing.some(ei => ei.message === ni.message && !ei.dismissed)\n );\n const merged = [...newOnes, ...existing].slice(0, 50);\n let s = { ...state, agentInsights: merged };\n if (newOnes.length > 0) {\n s = addActivity(s, `Trie Agent: ${newOnes.length} new insight${newOnes.length > 1 ? 's' : ''}`);\n }\n return s;\n }\n\n case 'SET_AGENT_INITIALIZED':\n return { ...state, agentInitialized: action.initialized };\n\n case 'SET_AGENCY_STATUS':\n return { ...state, agencyStatus: action.status };\n\n case 'SELECT_INSIGHT':\n return { ...state, selectedInsight: action.index };\n\n case 'TOGGLE_INSIGHT':\n return {\n ...state,\n expandedInsight: state.expandedInsight === action.index ? null : action.index,\n };\n\n case 'DISMISS_INSIGHT': {\n const visible = getVisibleInsights(state);\n const insight = visible[action.index];\n if (!insight) return state;\n const insights = state.agentInsights.map(i =>\n i.id === insight.id ? { ...i, dismissed: true } : i\n );\n const remaining = insights.filter(i => !i.dismissed);\n return {\n ...state,\n agentInsights: insights,\n selectedInsight: Math.min(state.selectedInsight, Math.max(0, remaining.length - 1)),\n expandedInsight: state.expandedInsight === action.index ? null : state.expandedInsight,\n };\n }\n\n case 'IGNORE_INSIGHT': {\n const visible = getVisibleInsights(state);\n const insight = visible[action.index];\n if (!insight) return state;\n const insights = state.agentInsights.map(i =>\n i.id === insight.id ? { ...i, dismissed: true } : i\n );\n const remaining = insights.filter(i => !i.dismissed);\n let s = { ...state, agentInsights: insights };\n s.selectedInsight = Math.min(s.selectedInsight, Math.max(0, remaining.length - 1));\n s.expandedInsight = s.expandedInsight === action.index ? null : s.expandedInsight;\n s = addActivity(s, `Ignored: ${insight.message.slice(0, 40)}...`);\n return s;\n }\n\n case 'CLEAR_DISMISSED_INSIGHTS': {\n const dismissedCount = state.agentInsights.filter(i => i.dismissed).length;\n if (dismissedCount === 0) return addActivity(state, 'No dismissed insights to clear');\n const filtered = state.agentInsights.filter(i => !i.dismissed);\n let s: DashboardState = {\n ...state,\n agentInsights: filtered,\n notificationHistory: [] as DashboardState['notificationHistory'],\n expandedInsight: null,\n scrollPositions: { ...state.scrollPositions, agent: 0 },\n };\n s.selectedInsight = Math.min(s.selectedInsight, Math.max(0, filtered.length - 1));\n s = addActivity(s, `Cleared ${dismissedCount} dismissed insight${dismissedCount !== 1 ? 's' : ''}`);\n return s;\n }\n\n case 'SET_GOALS':\n return { ...state, goalsPanel: { ...state.goalsPanel, goals: action.goals } };\n\n case 'SET_GOALS_INPUT_MODE':\n return { ...state, goalsPanel: { ...state.goalsPanel, inputMode: action.mode, inputBuffer: action.mode === 'add' ? '' : state.goalsPanel.inputBuffer } };\n\n case 'SET_GOALS_INPUT_BUFFER':\n return { ...state, goalsPanel: { ...state.goalsPanel, inputBuffer: action.buffer } };\n\n case 'SELECT_GOAL':\n return { ...state, goalsPanel: { ...state.goalsPanel, selectedIndex: action.index } };\n\n case 'SET_HYPOTHESES':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, hypotheses: action.hypotheses } };\n\n case 'SET_HYPOTHESES_INPUT_MODE':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, inputMode: action.mode, inputBuffer: action.mode === 'add' ? '' : state.hypothesesPanel.inputBuffer } };\n\n case 'SET_HYPOTHESES_INPUT_BUFFER':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, inputBuffer: action.buffer } };\n\n case 'SELECT_HYPOTHESIS':\n return { ...state, hypothesesPanel: { ...state.hypothesesPanel, selectedIndex: action.index } };\n\n case 'SET_MEMORY_TREE':\n return {\n ...state,\n memoryTree: { ...state.memoryTree, loaded: true, issues: action.issues, stats: action.stats, globalPatterns: action.patterns },\n };\n\n case 'SELECT_MEMORY_NODE':\n return { ...state, memoryTree: { ...state.memoryTree, selectedNode: action.nodeId } };\n\n case 'TOGGLE_MEMORY_NODE': {\n const expandable = ['severity', 'files', 'agents', 'patterns', 'severity-critical', 'severity-serious', 'severity-moderate', 'severity-low'];\n if (!expandable.includes(action.nodeId)) return state;\n const expanded = new Set(state.memoryTree.expandedNodes);\n if (expanded.has(action.nodeId)) expanded.delete(action.nodeId);\n else expanded.add(action.nodeId);\n return { ...state, memoryTree: { ...state.memoryTree, expandedNodes: expanded } };\n }\n\n case 'SET_AGENT_CONFIG':\n return { ...state, agentConfig: applyAgentConfigPatch(state.agentConfig, action.config) };\n\n case 'NAVIGATE_UP': {\n if (state.view === 'agent') {\n const visible = getVisibleInsights(state);\n if (visible.length === 0) return state;\n const idx = Math.max(0, state.selectedInsight - 1);\n const scroll = Math.min(state.scrollPositions.agent, idx);\n return { ...state, selectedInsight: idx, scrollPositions: { ...state.scrollPositions, agent: scroll } };\n }\n if (state.view === 'memory') {\n const nodes = getMemoryTreeNodes(state);\n const cur = nodes.findIndex(n => n.id === state.memoryTree.selectedNode);\n if (cur > 0) {\n return { ...state, memoryTree: { ...state.memoryTree, selectedNode: nodes[cur - 1]?.id || 'severity' } };\n }\n return state;\n }\n return state;\n }\n\n case 'NAVIGATE_DOWN': {\n if (state.view === 'agent') {\n const visible = getVisibleInsights(state);\n if (visible.length === 0) return state;\n const maxIdx = Math.max(0, visible.length - 1);\n const idx = Math.min(maxIdx, state.selectedInsight + 1);\n const visibleItems = Math.floor(20 / 4);\n let scroll = state.scrollPositions.agent;\n if (idx >= scroll + visibleItems) scroll = idx - visibleItems + 1;\n return { ...state, selectedInsight: idx, scrollPositions: { ...state.scrollPositions, agent: scroll } };\n }\n if (state.view === 'memory') {\n const nodes = getMemoryTreeNodes(state);\n const cur = nodes.findIndex(n => n.id === state.memoryTree.selectedNode);\n if (cur < nodes.length - 1) {\n return { ...state, memoryTree: { ...state.memoryTree, selectedNode: nodes[cur + 1]?.id || 'severity' } };\n }\n return state;\n }\n return state;\n }\n\n case 'NEXT_PAGE':\n return { ...state, activityPage: Math.min(Math.max(1, Math.ceil(state.activityLog.length / 6)) - 1, state.activityPage + 1) };\n\n case 'PREV_PAGE':\n return { ...state, activityPage: Math.max(0, state.activityPage - 1) };\n\n case 'SET_RAW_LOG_PAGE':\n return { ...state, rawLogPage: action.page };\n\n case 'AUTO_DISMISS_NOTIFICATIONS': {\n const now = Date.now();\n let changed = false;\n const history = state.notificationHistory.map(n => {\n if (!n.dismissed && n.severity !== 'critical') {\n const age = now - n.timestamp;\n const autoHideMs = n.severity === 'info' ? 30000 : 60000;\n if (age > autoHideMs) { changed = true; return { ...n, dismissed: true }; }\n }\n return n;\n });\n if (!changed) return state;\n return { ...state, notificationHistory: history };\n }\n\n default:\n return state;\n }\n}\n\nexport function createInitialState(): DashboardState {\n return {\n issues: [],\n progress: {\n totalFiles: 0,\n processedFiles: 0,\n activeAgents: [],\n completedAgents: [],\n totalIssues: 0,\n issuesBySeverity: { critical: 0, serious: 0, moderate: 0, low: 0 },\n },\n filter: { severity: 'all', agent: 'all', search: '' },\n view: 'overview',\n previousView: null,\n lastUpdate: Date.now(),\n scanComplete: true,\n startTime: Date.now(),\n scanStartTime: Date.now(),\n activityLog: [],\n activityPage: 0,\n quietMode: false,\n signalExtraction: {\n enabled: !!process.env['ANTHROPIC_API_KEY'],\n decisionsExtracted: 0,\n factsExtracted: 0,\n blockersExtracted: 0,\n questionsExtracted: 0,\n },\n alerts: { hasCritical: false },\n watch: { watching: false, directories: 0, recentChanges: [] },\n rawLog: [],\n rawLogPage: 0,\n scrollPositions: { overview: 0, rawlog: 0, agent: 0, goals: 0, hypotheses: 0, memory: 0 },\n notification: null,\n notificationHistory: [],\n agentInsights: [],\n agentInitialized: false,\n agencyStatus: null,\n selectedInsight: 0,\n expandedInsight: null,\n agentConfig: {\n agentSmith: {\n aiEnhancement: true,\n minSeverity: 'low',\n enabledCategories: { security: true, codeSmells: true, asyncBugs: true, reactPatterns: true, uxPatterns: true, backendPatterns: true },\n memoryRetentionDays: 30,\n },\n performance: { parallel: true, cache: true, maxConcurrency: 4, timeoutMs: 120000, workers: true, streaming: true },\n riskThresholds: { critical: 70, high: 40, medium: 20 },\n },\n goalsPanel: { goals: [], selectedIndex: 0, selectedAchievedIndex: 0, inputMode: 'browse', inputBuffer: '', lastRefresh: 0 },\n hypothesesPanel: { hypotheses: [], selectedIndex: 0, selectedCompletedIndex: 0, inputMode: 'browse', inputBuffer: '', lastRefresh: 0 },\n memoryTree: { loaded: false, issues: [], stats: null, globalPatterns: [], expandedNodes: new Set(['severity', 'files']), selectedNode: 'severity', scrollPosition: 0, lastRefresh: 0 },\n };\n}\n\ninterface DashboardContextValue {\n state: DashboardState;\n dispatch: Dispatch<DashboardAction>;\n}\n\nconst DashboardContext = createContext<DashboardContextValue | null>(null);\n\nexport function DashboardProvider({ children, initialState }: { children: React.ReactNode; initialState?: DashboardState }) {\n const [state, dispatch] = useReducer(dashboardReducer, initialState || createInitialState());\n const value = React.useMemo(() => ({ state, dispatch }), [state, dispatch]);\n return <DashboardContext.Provider value={value}>{children}</DashboardContext.Provider>;\n}\n\nexport function useDashboard(): DashboardContextValue {\n const ctx = useContext(DashboardContext);\n if (!ctx) throw new Error('useDashboard must be used within DashboardProvider');\n return ctx;\n}\n\nexport function useDispatch(): Dispatch<DashboardAction> {\n return useDashboard().dispatch;\n}\n\nexport { getVisibleInsights, getMemoryTreeNodes };\n","/**\n * OutputManager - Unified output abstraction for all UI modes\n * \n * Routes content to the appropriate renderer based on current mode:\n * - TUI: Routes to InteractiveDashboard\n * - Console: Routes to console.error with ANSI colors\n * - MCP: Accumulates for markdown response\n * - JSON: Accumulates for JSON response\n * - Silent: Discards output\n * \n * This solves the problem of skills suppressing content in interactive mode\n * by redirecting it to the dashboard instead.\n */\n\nimport type { Issue } from '../types/index.js';\nimport type { StreamingManager } from './streaming.js';\nimport { isInteractiveMode } from './progress.js';\nimport pc from 'picocolors';\n\n// Output content types\nexport type OutputContentType = \n | 'banner' // ASCII art banner from skills\n | 'progress' // Progress update\n | 'issue' // Issue found\n | 'snippet' // Code snippet with context\n | 'cost' // Cost estimate from Moneybags\n | 'readiness' // Production readiness score\n | 'semantic' // Semantic analysis (data flow, race conditions)\n | 'attack' // Attack surface analysis\n | 'activity' // Activity log message\n | 'report' // Full markdown report section\n | 'log' // Raw log message\n | 'nudge'; // Proactive guardian notification\n\n// Nudge content for proactive notifications\nexport interface NudgeContent {\n message: string;\n severity: 'critical' | 'warning' | 'info';\n file?: string;\n autoHideMs?: number; // Auto-dismiss after this many milliseconds\n}\n\nexport interface BannerContent {\n skill: string;\n art: string;\n quote?: string;\n version?: string;\n}\n\nexport interface SnippetContent {\n file: string;\n lines: string[];\n highlightLine?: number;\n startLine: number;\n}\n\nexport interface CostContent {\n fixNowCost: number;\n productionCost: number;\n savings: number;\n perIssue?: Array<{ issue: string; cost: number }>;\n}\n\nexport interface ReadinessContent {\n score: number;\n requirementsMet: number;\n total: number;\n status: 'ready' | 'caution' | 'not-ready';\n requirements?: Array<{ name: string; met: boolean }>;\n}\n\nexport interface SemanticContent {\n dataFlowIssues: number;\n raceConditions: number;\n authIssues: number;\n details?: Array<{ type: string; description: string; file: string; line?: number }>;\n}\n\nexport interface AttackSurfaceContent {\n totalEndpoints: number;\n unprotected: number;\n riskScore: number;\n endpoints?: Array<{ path: string; method: string; auth: boolean; sensitive: boolean }>;\n}\n\nexport interface OutputContent {\n type: OutputContentType;\n content: any;\n timestamp?: number;\n metadata?: {\n severity?: 'critical' | 'serious' | 'moderate' | 'low';\n agent?: string;\n file?: string;\n };\n}\n\nexport type OutputMode = 'tui' | 'console' | 'mcp' | 'json' | 'silent';\n\n/**\n * Central output manager - singleton\n */\nclass OutputManagerImpl {\n private mode: OutputMode = 'console';\n private streamingManager?: StreamingManager;\n private markdownBuffer: string[] = [];\n private jsonBuffer: OutputContent[] = [];\n private rawLogBuffer: Array<{ time: string; level: string; message: string }> = [];\n \n // Callbacks for TUI integration (explicitly allow undefined for exactOptionalPropertyTypes)\n private onBanner: ((content: BannerContent) => void) | undefined = undefined;\n private onSnippet: ((content: SnippetContent) => void) | undefined = undefined;\n private onCost: ((content: CostContent) => void) | undefined = undefined;\n private onReadiness: ((content: ReadinessContent) => void) | undefined = undefined;\n private onSemantic: ((content: SemanticContent) => void) | undefined = undefined;\n private onAttack: ((content: AttackSurfaceContent) => void) | undefined = undefined;\n private onActivity: ((message: string) => void) | undefined = undefined;\n private onLog: ((level: string, message: string) => void) | undefined = undefined;\n private onNudge: ((content: NudgeContent) => void) | undefined = undefined;\n\n /**\n * Set the output mode\n */\n setMode(mode: OutputMode): void {\n this.mode = mode;\n }\n\n /**\n * Get current output mode\n */\n getMode(): OutputMode {\n return this.mode;\n }\n\n /**\n * Set streaming manager for TUI updates\n */\n setStreamingManager(manager: StreamingManager): void {\n this.streamingManager = manager;\n }\n\n /**\n * Register TUI callbacks for rich content\n */\n registerTUICallbacks(callbacks: {\n onBanner?: (content: BannerContent) => void;\n onSnippet?: (content: SnippetContent) => void;\n onCost?: (content: CostContent) => void;\n onReadiness?: (content: ReadinessContent) => void;\n onSemantic?: (content: SemanticContent) => void;\n onAttack?: (content: AttackSurfaceContent) => void;\n onActivity?: (message: string) => void;\n onLog?: (level: string, message: string) => void;\n onNudge?: (content: NudgeContent) => void;\n }): void {\n this.onBanner = callbacks.onBanner;\n this.onSnippet = callbacks.onSnippet;\n this.onCost = callbacks.onCost;\n this.onReadiness = callbacks.onReadiness;\n this.onSemantic = callbacks.onSemantic;\n this.onAttack = callbacks.onAttack;\n this.onActivity = callbacks.onActivity;\n this.onLog = callbacks.onLog;\n this.onNudge = callbacks.onNudge;\n }\n\n /**\n * Clear TUI callbacks (when dashboard stops)\n */\n clearTUICallbacks(): void {\n this.onBanner = undefined;\n this.onSnippet = undefined;\n this.onCost = undefined;\n this.onReadiness = undefined;\n this.onSemantic = undefined;\n this.onAttack = undefined;\n this.onActivity = undefined;\n this.onLog = undefined;\n this.onNudge = undefined;\n }\n\n /**\n * Emit content - routes to appropriate handler based on mode\n */\n emit(content: OutputContent): void {\n content.timestamp = content.timestamp ?? Date.now();\n \n switch (this.mode) {\n case 'tui':\n this.routeToTUI(content);\n break;\n case 'console':\n this.routeToConsole(content);\n break;\n case 'mcp':\n this.routeToMarkdown(content);\n break;\n case 'json':\n this.routeToJson(content);\n break;\n case 'silent':\n // Discard\n break;\n }\n \n // Always capture in raw log buffer\n this.captureRawLog(content);\n }\n\n /**\n * Route content to TUI (dashboard callbacks)\n */\n private routeToTUI(content: OutputContent): void {\n switch (content.type) {\n case 'banner':\n this.onBanner?.(content.content as BannerContent);\n break;\n case 'snippet':\n this.onSnippet?.(content.content as SnippetContent);\n break;\n case 'cost':\n this.onCost?.(content.content as CostContent);\n break;\n case 'readiness':\n this.onReadiness?.(content.content as ReadinessContent);\n break;\n case 'semantic':\n this.onSemantic?.(content.content as SemanticContent);\n break;\n case 'attack':\n this.onAttack?.(content.content as AttackSurfaceContent);\n break;\n case 'activity':\n this.onActivity?.(content.content as string);\n break;\n case 'log':\n const level = content.metadata?.severity ?? 'info';\n this.onLog?.(level, content.content as string);\n break;\n case 'issue':\n // Issues go through streaming manager\n this.streamingManager?.reportIssue(content.content as Issue);\n break;\n case 'progress':\n // Progress goes through streaming manager\n break;\n case 'report':\n // Reports are captured but not directly displayed\n break;\n case 'nudge':\n // Proactive notifications go to dashboard\n this.onNudge?.(content.content as NudgeContent);\n break;\n }\n }\n\n /**\n * Route content to console (ANSI formatted)\n */\n private routeToConsole(content: OutputContent): void {\n switch (content.type) {\n case 'banner':\n const banner = content.content as BannerContent;\n console.error('\\n' + '='.repeat(60));\n console.error(banner.art);\n if (banner.version) {\n console.error(` ${banner.skill} v${banner.version}`);\n }\n console.error('');\n if (banner.quote) {\n console.error(` \"${banner.quote}\"`);\n }\n console.error('='.repeat(60) + '\\n');\n break;\n \n case 'snippet':\n const snippet = content.content as SnippetContent;\n console.error(`\\n${pc.dim('File:')} ${snippet.file}`);\n for (let i = 0; i < snippet.lines.length; i++) {\n const lineNum = snippet.startLine + i;\n const isHighlight = lineNum === snippet.highlightLine;\n const prefix = isHighlight ? pc.red('→') : ' ';\n const lineNumStr = pc.dim(lineNum.toString().padStart(4));\n const line = isHighlight ? pc.yellow(snippet.lines[i]) : snippet.lines[i];\n console.error(`${prefix} ${lineNumStr} | ${line}`);\n }\n console.error('');\n break;\n \n case 'cost':\n const cost = content.content as CostContent;\n console.error('\\n' + pc.cyan('[$] Cost Estimate:'));\n console.error(` Fix now: ${pc.green(this.formatCurrency(cost.fixNowCost))}`);\n console.error(` If production: ${pc.red(this.formatCurrency(cost.productionCost))}`);\n console.error(` Savings: ${pc.yellow(this.formatCurrency(cost.savings))}`);\n console.error('');\n break;\n \n case 'readiness':\n const readiness = content.content as ReadinessContent;\n const statusColor = readiness.status === 'ready' ? pc.green : \n readiness.status === 'caution' ? pc.yellow : pc.red;\n console.error('\\n' + pc.cyan('[%] Production Readiness:'));\n console.error(` Score: ${statusColor(readiness.score + '/100')}`);\n console.error(` Requirements: ${readiness.requirementsMet}/${readiness.total}`);\n console.error(` Status: ${statusColor(readiness.status.toUpperCase())}`);\n console.error('');\n break;\n \n case 'semantic':\n const semantic = content.content as SemanticContent;\n console.error('\\n' + pc.cyan('[?] Semantic Analysis:'));\n if (semantic.dataFlowIssues > 0) {\n console.error(` ${pc.red('[!]')} ${semantic.dataFlowIssues} data flow vulnerabilities`);\n }\n if (semantic.raceConditions > 0) {\n console.error(` ${pc.yellow('[~]')} ${semantic.raceConditions} race conditions`);\n }\n if (semantic.authIssues > 0) {\n console.error(` ${pc.red('[!]')} ${semantic.authIssues} authentication issues`);\n }\n console.error('');\n break;\n \n case 'attack':\n const attack = content.content as AttackSurfaceContent;\n console.error('\\n' + pc.cyan('[>] Attack Surface:'));\n console.error(` Endpoints: ${attack.totalEndpoints}`);\n if (attack.unprotected > 0) {\n console.error(` ${pc.red('Unprotected:')} ${attack.unprotected}`);\n }\n console.error(` Risk Score: ${attack.riskScore}/100`);\n console.error('');\n break;\n \n case 'activity':\n console.error(pc.dim(`[${this.formatTime()}]`) + ` ${content.content}`);\n break;\n \n case 'log':\n // For log content, severity can be any string (info, warn, error, debug)\n const logLevel = String(content.metadata?.severity ?? 'info');\n const levelColor = logLevel === 'error' || logLevel === 'critical' ? pc.red :\n logLevel === 'warn' || logLevel === 'serious' ? pc.yellow :\n logLevel === 'info' || logLevel === 'moderate' ? pc.blue : pc.dim;\n console.error(levelColor(`[${logLevel.toUpperCase()}]`) + ` ${content.content}`);\n break;\n \n case 'issue':\n const issue = content.content as Issue;\n const sevColor = issue.severity === 'critical' ? pc.red :\n issue.severity === 'serious' ? pc.yellow :\n issue.severity === 'moderate' ? pc.blue : pc.dim;\n console.error(`${sevColor(`[${issue.severity.toUpperCase()}]`)} ${issue.issue}`);\n console.error(` ${pc.dim('File:')} ${issue.file}:${issue.line ?? '?'}`);\n break;\n \n case 'report':\n // Reports are printed as-is (already formatted)\n console.error(content.content);\n break;\n \n case 'nudge':\n // Proactive notifications in console mode\n const nudge = content.content as NudgeContent;\n const nudgeColor = nudge.severity === 'critical' ? pc.red :\n nudge.severity === 'warning' ? pc.yellow : pc.cyan;\n const nudgeIcon = nudge.severity === 'critical' ? '[!!!]' :\n nudge.severity === 'warning' ? '[!]' : '[>]';\n console.error('');\n console.error(nudgeColor('━'.repeat(60)));\n console.error(nudgeColor(`${nudgeIcon} TRIE AGENT SAYS:`));\n console.error(nudgeColor('━'.repeat(60)));\n console.error('');\n console.error(` ${pc.bold(nudge.message)}`);\n if (nudge.file) {\n console.error(` ${pc.dim('File:')} ${nudge.file}`);\n }\n console.error('');\n console.error(nudgeColor('━'.repeat(60)));\n console.error('');\n break;\n }\n }\n\n /**\n * Route content to markdown buffer\n */\n private routeToMarkdown(content: OutputContent): void {\n switch (content.type) {\n case 'banner':\n const banner = content.content as BannerContent;\n this.markdownBuffer.push(`## ${banner.skill}\\n`);\n if (banner.quote) {\n this.markdownBuffer.push(`> ${banner.quote}\\n`);\n }\n break;\n \n case 'snippet':\n const snippet = content.content as SnippetContent;\n this.markdownBuffer.push(`\\n**File:** \\`${snippet.file}\\`\\n`);\n this.markdownBuffer.push('```\\n');\n for (let i = 0; i < snippet.lines.length; i++) {\n const lineNum = snippet.startLine + i;\n const prefix = lineNum === snippet.highlightLine ? '→' : ' ';\n this.markdownBuffer.push(`${prefix} ${lineNum.toString().padStart(4)} | ${snippet.lines[i]}\\n`);\n }\n this.markdownBuffer.push('```\\n');\n break;\n \n case 'cost':\n const cost = content.content as CostContent;\n this.markdownBuffer.push(`\\n### Cost Estimate\\n`);\n this.markdownBuffer.push(`- Fix now: ${this.formatCurrency(cost.fixNowCost)}\\n`);\n this.markdownBuffer.push(`- If production: ${this.formatCurrency(cost.productionCost)}\\n`);\n this.markdownBuffer.push(`- Savings: ${this.formatCurrency(cost.savings)}\\n`);\n break;\n \n case 'readiness':\n const readiness = content.content as ReadinessContent;\n this.markdownBuffer.push(`\\n### Production Readiness\\n`);\n this.markdownBuffer.push(`- Score: ${readiness.score}/100\\n`);\n this.markdownBuffer.push(`- Requirements: ${readiness.requirementsMet}/${readiness.total}\\n`);\n this.markdownBuffer.push(`- Status: **${readiness.status.toUpperCase()}**\\n`);\n break;\n \n case 'semantic':\n const semantic = content.content as SemanticContent;\n this.markdownBuffer.push(`\\n### Semantic Analysis\\n`);\n if (semantic.dataFlowIssues > 0) {\n this.markdownBuffer.push(`- [CRITICAL] ${semantic.dataFlowIssues} data flow vulnerabilities\\n`);\n }\n if (semantic.raceConditions > 0) {\n this.markdownBuffer.push(`- [WARN] ${semantic.raceConditions} race conditions\\n`);\n }\n if (semantic.authIssues > 0) {\n this.markdownBuffer.push(`- [CRITICAL] ${semantic.authIssues} authentication issues\\n`);\n }\n break;\n \n case 'attack':\n const attack = content.content as AttackSurfaceContent;\n this.markdownBuffer.push(`\\n### Attack Surface\\n`);\n this.markdownBuffer.push(`- Endpoints: ${attack.totalEndpoints}\\n`);\n this.markdownBuffer.push(`- Unprotected: ${attack.unprotected}\\n`);\n this.markdownBuffer.push(`- Risk Score: ${attack.riskScore}/100\\n`);\n break;\n \n case 'report':\n this.markdownBuffer.push(content.content);\n break;\n \n default:\n // Other types are captured in JSON buffer\n this.jsonBuffer.push(content);\n }\n }\n\n /**\n * Route content to JSON buffer\n */\n private routeToJson(content: OutputContent): void {\n this.jsonBuffer.push(content);\n }\n\n /**\n * Capture content in raw log buffer\n */\n private captureRawLog(content: OutputContent): void {\n const time = this.formatTime(content.timestamp);\n const level = content.metadata?.severity ?? content.type;\n let message = '';\n \n switch (content.type) {\n case 'banner':\n message = `[BANNER] ${(content.content as BannerContent).skill}`;\n break;\n case 'activity':\n case 'log':\n message = content.content as string;\n break;\n case 'issue':\n const issue = content.content as Issue;\n message = `[${issue.severity.toUpperCase()}] ${issue.issue}`;\n break;\n default:\n message = `[${content.type.toUpperCase()}] Content received`;\n }\n \n this.rawLogBuffer.push({ time, level, message });\n \n // Keep buffer size reasonable\n if (this.rawLogBuffer.length > 500) {\n this.rawLogBuffer = this.rawLogBuffer.slice(-500);\n }\n }\n\n /**\n * Get raw log buffer for display\n */\n getRawLog(): Array<{ time: string; level: string; message: string }> {\n return [...this.rawLogBuffer];\n }\n\n /**\n * Get accumulated markdown output\n */\n getMarkdown(): string {\n return this.markdownBuffer.join('\\n');\n }\n\n /**\n * Get accumulated JSON output\n */\n getJson(): OutputContent[] {\n return [...this.jsonBuffer];\n }\n\n /**\n * Clear buffers\n */\n clearBuffers(): void {\n this.markdownBuffer = [];\n this.jsonBuffer = [];\n }\n\n // ============================================\n // Convenience methods for common output types\n // ============================================\n\n /**\n * Display a skill banner\n */\n banner(skill: string, art: string, options?: { quote?: string; version?: string }): void {\n this.emit({\n type: 'banner',\n content: { skill, art, quote: options?.quote, version: options?.version } as BannerContent,\n metadata: { agent: skill }\n });\n }\n\n /**\n * Display a code snippet\n */\n snippet(file: string, lines: string[], startLine: number, highlightLine?: number): void {\n this.emit({\n type: 'snippet',\n content: { file, lines, startLine, highlightLine } as SnippetContent,\n metadata: { file }\n });\n }\n\n /**\n * Display cost estimate\n */\n cost(fixNowCost: number, productionCost: number, savings: number, perIssue?: Array<{ issue: string; cost: number }>): void {\n this.emit({\n type: 'cost',\n content: { fixNowCost, productionCost, savings, perIssue } as CostContent\n });\n }\n\n /**\n * Display production readiness\n */\n readiness(\n score: number, \n requirementsMet: number, \n total: number, \n status: 'ready' | 'caution' | 'not-ready',\n requirements?: Array<{ name: string; met: boolean }>\n ): void {\n const content: ReadinessContent = { score, requirementsMet, total, status };\n if (requirements) {\n content.requirements = requirements;\n }\n this.emit({\n type: 'readiness',\n content\n });\n }\n\n /**\n * Display semantic analysis results\n */\n semantic(dataFlowIssues: number, raceConditions: number, authIssues: number): void {\n this.emit({\n type: 'semantic',\n content: { dataFlowIssues, raceConditions, authIssues } as SemanticContent\n });\n }\n\n /**\n * Display attack surface analysis\n */\n attack(totalEndpoints: number, unprotected: number, riskScore: number): void {\n this.emit({\n type: 'attack',\n content: { totalEndpoints, unprotected, riskScore } as AttackSurfaceContent\n });\n }\n\n /**\n * Log an activity message\n */\n activity(message: string): void {\n this.emit({\n type: 'activity',\n content: message\n });\n }\n\n /**\n * Log a message at specified level\n */\n log(level: 'info' | 'warn' | 'error' | 'debug', message: string): void {\n this.emit({\n type: 'log',\n content: message,\n metadata: { severity: level as any }\n });\n }\n\n /**\n * Log info message\n */\n info(message: string): void {\n this.log('info', message);\n }\n\n /**\n * Log warning message\n */\n warn(message: string): void {\n this.log('warn', message);\n }\n\n /**\n * Log error message\n */\n error(message: string): void {\n this.log('error', message);\n }\n\n /**\n * Log debug message\n */\n debug(message: string): void {\n this.log('debug', message);\n }\n\n /**\n * Report an issue\n */\n issue(issue: Issue): void {\n this.emit({\n type: 'issue',\n content: issue,\n metadata: { severity: issue.severity, agent: issue.agent, file: issue.file }\n });\n }\n\n /**\n * Add a report section\n */\n report(content: string): void {\n this.emit({\n type: 'report',\n content\n });\n }\n\n /**\n * Send a proactive notification/nudge to the user\n * This creates a prominent popup in TUI mode or a boxed message in console mode\n */\n nudge(message: string, severity: 'critical' | 'warning' | 'info' = 'warning', file?: string, autoHideMs?: number): void {\n const metadata: { severity?: 'critical' | 'serious' | 'moderate' | 'low'; agent?: string; file?: string } = {};\n // Map nudge severity to issue severity\n if (severity === 'critical') metadata.severity = 'critical';\n else if (severity === 'warning') metadata.severity = 'moderate';\n else metadata.severity = 'low';\n if (file !== undefined) metadata.file = file;\n this.emit({\n type: 'nudge',\n content: { message, severity, file, autoHideMs } as NudgeContent,\n metadata,\n });\n }\n\n // ============================================\n // Helpers\n // ============================================\n\n private formatCurrency(amount: number): string {\n if (amount >= 1000000) return `$${(amount / 1000000).toFixed(2)}M`;\n if (amount >= 1000) return `$${(amount / 1000).toFixed(1)}k`;\n return `$${amount}`;\n }\n\n private formatTime(timestamp?: number): string {\n const date = timestamp ? new Date(timestamp) : new Date();\n return date.toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n }\n}\n\n// Singleton instance\nlet instance: OutputManagerImpl | null = null;\n\n/**\n * Get the OutputManager instance\n */\nexport function getOutputManager(): OutputManagerImpl {\n if (!instance) {\n instance = new OutputManagerImpl();\n \n // Auto-detect mode based on interactive mode flag\n if (isInteractiveMode()) {\n instance.setMode('tui');\n }\n }\n return instance;\n}\n\n/**\n * Convenience function - shorthand for getOutputManager()\n */\nexport function output(): OutputManagerImpl {\n return getOutputManager();\n}\n\n/**\n * Reset the OutputManager (for testing)\n */\nexport function resetOutputManager(): void {\n instance = null;\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\n\nexport function Header(): React.ReactElement {\n const { state } = useDashboard();\n const time = new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });\n\n const { signalExtraction, watch, alerts } = state;\n const totalExtracted = signalExtraction.decisionsExtracted + signalExtraction.factsExtracted +\n signalExtraction.blockersExtracted + signalExtraction.questionsExtracted;\n\n let statusLabel: React.ReactElement;\n if (watch.watching) {\n statusLabel = totalExtracted > 0\n ? <Text><Text color=\"green\" bold>● LEARNING</Text> <Text dimColor>{totalExtracted} signals</Text></Text>\n : <Text><Text color=\"yellow\" bold>● WATCHING</Text></Text>;\n } else {\n statusLabel = <Text dimColor>○ IDLE</Text>;\n }\n\n return (\n <Box borderStyle=\"round\" borderColor=\"gray\" paddingX={1} justifyContent=\"space-between\">\n <Box>\n <Text color=\"green\" bold>trie</Text>\n </Box>\n <Box gap={2}>\n {statusLabel}\n {alerts.hasCritical && <Text color=\"red\" bold>│ ALERT</Text>}\n <Text dimColor>{time}</Text>\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\nimport type { DashboardView } from '../types.js';\n\nconst VIEW_LABELS: Record<DashboardView, string> = {\n overview: 'Overview',\n rawlog: 'Log',\n agent: 'Agent',\n goals: 'Goals',\n hypotheses: 'Hypotheses',\n memory: 'Memory',\n};\n\nfunction Hint({ k, label }: { k: string; label: string }): React.ReactElement {\n return (\n <Text>\n <Text dimColor>[</Text><Text bold>{k}</Text><Text dimColor>]</Text>\n <Text dimColor> {label}</Text>\n </Text>\n );\n}\n\nexport function Footer(): React.ReactElement {\n const { state } = useDashboard();\n const { view } = state;\n\n const viewTabs = (['overview', 'memory', 'goals', 'hypotheses', 'agent'] as DashboardView[]).map(v => {\n const isActive = v === view;\n const label = VIEW_LABELS[v];\n return isActive\n ? <Text key={v} color=\"green\" bold>{` ${label} `}</Text>\n : <Text key={v} dimColor>{` ${label} `}</Text>;\n });\n\n let hints: React.ReactElement;\n if (view === 'goals' && state.goalsPanel.inputMode === 'add') {\n hints = <Box gap={2}><Hint k=\"Enter\" label=\"Save\" /><Hint k=\"Esc\" label=\"Cancel\" /></Box>;\n } else if (view === 'hypotheses' && state.hypothesesPanel.inputMode === 'add') {\n hints = <Box gap={2}><Hint k=\"Enter\" label=\"Save\" /><Hint k=\"Esc\" label=\"Cancel\" /></Box>;\n } else if (view === 'goals') {\n hints = <Box gap={2}><Hint k=\"j/k\" label=\"Nav\" /><Hint k=\"a\" label=\"Add\" /><Hint k=\"Enter\" label=\"Complete\" /><Hint k=\"d\" label=\"Delete\" /></Box>;\n } else if (view === 'hypotheses') {\n hints = <Box gap={2}><Hint k=\"j/k\" label=\"Nav\" /><Hint k=\"a\" label=\"Add\" /><Hint k=\"v\" label=\"Validate\" /><Hint k=\"x\" label=\"Invalidate\" /></Box>;\n } else if (view === 'agent') {\n hints = <Box gap={2}><Hint k=\"j/k\" label=\"Nav\" /><Hint k=\"Enter\" label=\"Expand\" /><Hint k=\"d\" label=\"Dismiss\" /><Hint k=\"i\" label=\"Ignore\" /><Hint k=\"x\" label=\"Clear\" /></Box>;\n } else if (view === 'memory') {\n hints = <Box gap={2}><Hint k=\"j/k\" label=\"Nav\" /><Hint k=\"Enter\" label=\"Expand\" /><Hint k=\"b\" label=\"Back\" /></Box>;\n } else if (view === 'rawlog') {\n hints = <Box gap={2}><Hint k=\"n/p\" label=\"Pages\" /><Hint k=\"b\" label=\"Back\" /></Box>;\n } else {\n hints = <Box gap={2}><Hint k=\"Tab\" label=\"Views\" /><Hint k=\"n/p\" label=\"Pages\" /><Hint k=\"h\" label=\"Help\" /></Box>;\n }\n\n return (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"single\" borderColor=\"gray\" borderTop={false} borderLeft={false} borderRight={false}>\n <Box gap={0}>{viewTabs}</Box>\n </Box>\n <Box paddingX={1} justifyContent=\"space-between\">\n {hints}\n <Hint k=\"q\" label=\"Quit\" />\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\n\nexport function Notification(): React.ReactElement | null {\n const { state } = useDashboard();\n const { notification } = state;\n\n if (!notification || !notification.active) return null;\n\n if (notification.autoHideAt && Date.now() > notification.autoHideAt) return null;\n\n const bgColor = notification.severity === 'critical' ? 'red'\n : notification.severity === 'warning' ? 'yellow'\n : 'blue';\n\n const icon = notification.severity === 'critical' ? '[!]'\n : notification.severity === 'warning' ? '[!]'\n : '[>]';\n\n return (\n <Box paddingX={1}>\n <Text backgroundColor={bgColor} color=\"white\" bold>\n {` ${icon} ${notification.message} `}\n </Text>\n {notification.file && <Text dimColor> ({notification.file})</Text>}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport type { AgentConfig } from '../types.js';\n\ntype ConfigSection = 'main' | 'agentSmith' | 'performance' | 'riskThresholds';\n\ninterface ConfigItem {\n label: string;\n key: string;\n value: string;\n section: ConfigSection;\n}\n\nexport function ConfigDialog({ onClose }: { onClose: () => void }): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const [section, setSection] = useState<ConfigSection>('main');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [editing, setEditing] = useState(false);\n const [editBuffer, setEditBuffer] = useState('');\n\n const config = state.agentConfig;\n\n const mainMenu: ConfigItem[] = [\n { label: 'Agent Smith Settings', key: 'agentSmith', value: config.agentSmith.aiEnhancement ? 'AI Enhanced' : 'Basic', section: 'main' },\n { label: 'Performance Settings', key: 'performance', value: `${config.performance.maxConcurrency} concurrent`, section: 'main' },\n { label: 'Risk Thresholds', key: 'riskThresholds', value: `critical: ${config.riskThresholds.critical}%`, section: 'main' },\n ];\n\n const performanceItems: ConfigItem[] = [\n { label: 'Max Concurrency', key: 'maxConcurrency', value: String(config.performance.maxConcurrency), section: 'performance' },\n { label: 'Timeout (ms)', key: 'timeoutMs', value: String(config.performance.timeoutMs), section: 'performance' },\n { label: 'Parallel', key: 'parallel', value: config.performance.parallel ? 'on' : 'off', section: 'performance' },\n { label: 'Cache', key: 'cache', value: config.performance.cache ? 'on' : 'off', section: 'performance' },\n { label: 'Workers', key: 'workers', value: config.performance.workers ? 'on' : 'off', section: 'performance' },\n ];\n\n const riskItems: ConfigItem[] = [\n { label: 'Critical Threshold', key: 'critical', value: String(config.riskThresholds.critical), section: 'riskThresholds' },\n { label: 'High Threshold', key: 'high', value: String(config.riskThresholds.high), section: 'riskThresholds' },\n { label: 'Medium Threshold', key: 'medium', value: String(config.riskThresholds.medium), section: 'riskThresholds' },\n ];\n\n const items = section === 'main' ? mainMenu\n : section === 'performance' ? performanceItems\n : section === 'riskThresholds' ? riskItems\n : mainMenu;\n\n useInput((_input, key) => {\n if (editing) {\n if (key.escape) { setEditing(false); setEditBuffer(''); }\n else if (key.return) {\n const item = items[selectedIndex];\n if (item) {\n const val = parseInt(editBuffer, 10);\n if (!isNaN(val)) {\n const patch: Partial<AgentConfig> = {};\n if (section === 'performance') {\n if (item.key === 'maxConcurrency' || item.key === 'timeoutMs') {\n patch.performance = { ...config.performance, [item.key]: val };\n }\n } else if (section === 'riskThresholds') {\n patch.riskThresholds = { ...config.riskThresholds, [item.key]: val };\n }\n if (Object.keys(patch).length > 0) {\n dispatch({ type: 'SET_AGENT_CONFIG', config: patch });\n dispatch({ type: 'ADD_ACTIVITY', message: `Config: ${item.label} set to ${val}` });\n }\n }\n }\n setEditing(false);\n setEditBuffer('');\n } else if (key.backspace || key.delete) {\n setEditBuffer(editBuffer.slice(0, -1));\n } else if (_input && /\\d/.test(_input)) {\n setEditBuffer(editBuffer + _input);\n }\n return;\n }\n\n if (key.escape || _input === 'b') {\n if (section === 'main') onClose();\n else { setSection('main'); setSelectedIndex(0); }\n } else if (key.upArrow || _input === 'k') {\n setSelectedIndex(Math.max(0, selectedIndex - 1));\n } else if (key.downArrow || _input === 'j') {\n setSelectedIndex(Math.min(items.length - 1, selectedIndex + 1));\n } else if (key.return) {\n if (section === 'main') {\n const item = items[selectedIndex];\n if (item) {\n setSection(item.key as ConfigSection);\n setSelectedIndex(0);\n }\n } else {\n const item = items[selectedIndex];\n if (item) {\n if (['parallel', 'cache', 'workers'].includes(item.key)) {\n const patch: Partial<AgentConfig> = {\n performance: { ...config.performance, [item.key]: !config.performance[item.key as keyof typeof config.performance] },\n };\n dispatch({ type: 'SET_AGENT_CONFIG', config: patch });\n } else {\n setEditing(true);\n setEditBuffer(item.value);\n }\n }\n }\n }\n });\n\n const sectionTitle = section === 'main' ? 'TRIE AGENT CONFIGURATION'\n : section === 'performance' ? 'PERFORMANCE SETTINGS'\n : section === 'riskThresholds' ? 'RISK THRESHOLDS'\n : section === 'agentSmith' ? 'AGENT SMITH SETTINGS'\n : 'CONFIGURATION';\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" paddingX={1} paddingY={0}>\n <Text bold>{sectionTitle}</Text>\n <Text> </Text>\n {items.map((item, idx) => {\n const isSelected = selectedIndex === idx;\n return (\n <Text key={item.key}>\n {isSelected ? <Text bold color=\"green\">▶ </Text> : <Text> </Text>}\n <Text bold={isSelected}>{item.label}: </Text>\n {editing && isSelected\n ? <Text>{editBuffer}<Text bold color=\"green\">▌</Text></Text>\n : <Text dimColor>{item.value}</Text>}\n </Text>\n );\n })}\n <Text> </Text>\n <Text dimColor>{section === 'main' ? 'Enter to select • Esc to close' : 'Enter to edit • Esc/b to go back'}</Text>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useDashboard } from '../state.js';\n\nexport function OverviewView(): React.ReactElement {\n const { state } = useDashboard();\n const { progress, signalExtraction, watch, issues, activityLog, activityPage } = state;\n const { totalIssues, processedFiles } = progress;\n\n const endTime = state.scanComplete && state.scanEndTime ? state.scanEndTime : Date.now();\n const elapsed = ((endTime - state.scanStartTime) / 1000).toFixed(1);\n\n const criticalIssues = issues.filter(i => i.severity === 'critical').slice(0, 3);\n const activityRows = 8;\n const startIdx = activityPage * activityRows;\n const pageActivities = activityLog.slice(startIdx, startIdx + activityRows);\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>{processedFiles}</Text><Text dimColor> files scanned in {elapsed}s</Text></Text>\n\n {watch.watching && signalExtraction.enabled && (\n <>\n <Text> </Text>\n <Box flexDirection=\"column\">\n <Text bold>Decision Ledger</Text>\n <Text><Text bold>Agent Learning</Text><Text dimColor> - Building institutional knowledge</Text></Text>\n <Text> </Text>\n <Text dimColor>Signals Extracted:</Text>\n <Text> <Text bold>{signalExtraction.decisionsExtracted}</Text><Text dimColor> decisions</Text></Text>\n <Text> <Text bold>{signalExtraction.factsExtracted}</Text><Text dimColor> facts</Text></Text>\n <Text> <Text bold>{signalExtraction.blockersExtracted}</Text><Text dimColor> blockers</Text></Text>\n <Text> <Text bold>{signalExtraction.questionsExtracted}</Text><Text dimColor> questions</Text></Text>\n <Text> </Text>\n <Text><Text dimColor>Use </Text><Text bold>trie gotcha</Text><Text dimColor> to query the ledger</Text></Text>\n </Box>\n </>\n )}\n\n {criticalIssues.length > 0 && (\n <>\n <Text> </Text>\n <Box flexDirection=\"column\">\n <Text color=\"red\" bold>TOP CRITICAL ISSUES</Text>\n {criticalIssues.map((issue, i) => {\n const filename = issue.file.split('/').pop() || issue.file;\n const lineNum = issue.line ? `:${issue.line}` : '';\n const desc = issue.issue.slice(0, 50) + (issue.issue.length > 50 ? '...' : '');\n return (\n <Box key={i} flexDirection=\"column\">\n <Text><Text color=\"red\">▸</Text> <Text color=\"red\">{desc}</Text></Text>\n <Text dimColor> {filename}{lineNum}</Text>\n </Box>\n );\n })}\n </Box>\n </>\n )}\n\n {totalIssues === 0 && criticalIssues.length === 0 && (\n <>\n <Text> </Text>\n <Text color=\"green\">[ok] No issues found</Text>\n </>\n )}\n\n <Text> </Text>\n <Box flexDirection=\"column\">\n <Text bold>Activity</Text>\n {pageActivities.map((entry, i) => (\n <Text key={i}><Text dimColor>{entry.time}</Text> {entry.message}</Text>\n ))}\n {pageActivities.length === 0 && <Text dimColor>No activity yet.</Text>}\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard, getVisibleInsights } from '../state.js';\nimport { formatTimeAgo, insightIcon, stripEmojis } from '../theme.js';\nimport { isAIAvailable } from '../../../ai/client.js';\n\nexport function AgentView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { agentInsights, agencyStatus, selectedInsight, expandedInsight } = state;\n\n const totalInsights = agentInsights.length;\n const visibleInsights = getVisibleInsights(state);\n const activeCount = visibleInsights.length;\n\n useInput((input, key) => {\n if (key.upArrow || input === 'k') {\n dispatch({ type: 'NAVIGATE_UP' });\n } else if (key.downArrow || input === 'j') {\n dispatch({ type: 'NAVIGATE_DOWN' });\n } else if (key.return) {\n dispatch({ type: 'TOGGLE_INSIGHT', index: selectedInsight });\n } else if (input === 'd') {\n dispatch({ type: 'DISMISS_INSIGHT', index: selectedInsight });\n } else if (input === 'i') {\n dispatch({ type: 'IGNORE_INSIGHT', index: selectedInsight });\n } else if (input === 'x') {\n dispatch({ type: 'CLEAR_DISMISSED_INSIGHTS' });\n }\n });\n\n const agency = agencyStatus;\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text>\n <Text bold>Agent Insights</Text>\n {activeCount > 0\n ? <Text color=\"red\" bold> ({activeCount} active)</Text>\n : <Text dimColor> ({totalInsights} total)</Text>}\n {' '}<Text dimColor>Your autonomous code companion</Text>\n </Text>\n\n {agency && (\n <Box gap={2}>\n <Text><Text dimColor>Goals:</Text> <Text bold>{agency.goals.active}</Text>/{agency.goals.completed + agency.goals.active}</Text>\n <Text><Text dimColor>Hypo:</Text> <Text bold>{agency.hypotheses.testing}</Text> testing</Text>\n <Text><Text dimColor>Risk:</Text> <Text color={agency.riskLevel === 'critical' ? 'red' : agency.riskLevel === 'high' ? 'yellow' : agency.riskLevel === 'medium' ? 'yellow' : 'green'}>{agency.riskLevel.toUpperCase()}</Text></Text>\n <Text><Text dimColor>Effect:</Text> <Text color={agency.effectiveness >= 80 ? 'green' : agency.effectiveness >= 50 ? 'yellow' : 'yellow'}>{agency.effectiveness}%</Text></Text>\n {agency.isQuietHours && <Text dimColor>[quiet]</Text>}\n </Box>\n )}\n\n <Text> </Text>\n\n {visibleInsights.length === 0 && state.notificationHistory.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text bold>The Trie Agent is watching over your code.</Text>\n <Text> </Text>\n <Text dimColor>Unlike a log viewer, the Trie Agent:</Text>\n <Text dimColor> • Synthesizes insights from all skills</Text>\n <Text dimColor> • Speaks conversationally about what matters</Text>\n <Text dimColor> • Suggests specific actions to take</Text>\n <Text dimColor> • Celebrates when you fix issues</Text>\n <Text dimColor> • Tracks patterns over time</Text>\n <Text> </Text>\n <Text dimColor>When the Trie Agent has something to say, it'll appear here.</Text>\n <Text> </Text>\n {isAIAvailable()\n ? <Text><Text color=\"green\">[+]</Text><Text dimColor> AI-enhanced insights enabled</Text></Text>\n : <Text><Text dimColor>Want smarter insights? Set </Text><Text bold>ANTHROPIC_API_KEY</Text><Text dimColor> for AI enhancement</Text></Text>}\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n {visibleInsights.map((insight, idx) => {\n const isSelected = idx === selectedInsight;\n const isExpanded = idx === expandedInsight;\n const ago = formatTimeAgo(insight.timestamp);\n const { icon, color } = insightIcon(insight.type);\n const cleanMessage = stripEmojis(insight.message);\n const msgMaxLen = 70;\n const msg = cleanMessage.length > msgMaxLen ? cleanMessage.slice(0, msgMaxLen - 3) + '...' : cleanMessage;\n const status = isExpanded ? 'v' : '>';\n\n return (\n <Box key={insight.id} flexDirection=\"column\" marginBottom={1}>\n <Text>\n {isSelected ? <Text bold color=\"green\">▶ </Text> : <Text> </Text>}\n <Text dimColor>{status} </Text>\n {isSelected\n ? <Text inverse>{` ${icon} ${msg} `}</Text>\n : <Text>{icon} {color(msg)}</Text>}\n </Text>\n <Text dimColor> {ago} • {insight.category}{isSelected && !isExpanded ? ' • Press Enter to expand' : ''}</Text>\n\n {isExpanded && insight.details && (\n <Box flexDirection=\"column\" marginLeft={7}>\n {insight.details.issueBreakdown && Object.keys(insight.details.issueBreakdown).length > 0 && (\n <Text>\n {insight.details.issueBreakdown['critical'] ? <Text color=\"red\">{insight.details.issueBreakdown['critical']} critical</Text> : null}\n {insight.details.issueBreakdown['serious'] ? <Text color=\"yellow\"> • {insight.details.issueBreakdown['serious']} serious</Text> : null}\n {insight.details.issueBreakdown['moderate'] ? <Text color=\"blue\"> • {insight.details.issueBreakdown['moderate']} moderate</Text> : null}\n </Text>\n )}\n {insight.details.affectedFiles && insight.details.affectedFiles.length > 0 && (\n <Box flexDirection=\"column\">\n <Text bold>Files:</Text>\n {insight.details.affectedFiles.slice(0, 8).map((f, fi) => (\n <Text key={fi} dimColor> • {f}</Text>\n ))}\n {insight.details.affectedFiles.length > 8 && (\n <Text dimColor> ... +{insight.details.affectedFiles.length - 8} more</Text>\n )}\n </Box>\n )}\n {insight.details.examples && insight.details.examples.length > 0 && (\n <Box flexDirection=\"column\">\n <Text bold>Examples:</Text>\n {insight.details.examples.slice(0, 5).map((ex, ei) => (\n <Text key={ei} dimColor> • {ex.slice(0, 60)}{ex.length > 60 ? '...' : ''}</Text>\n ))}\n </Box>\n )}\n {insight.details.comparison && (\n <Text dimColor>\n {insight.details.trend === 'improving' ? '↓' : insight.details.trend === 'worsening' ? '↑' : '→'}{' '}\n {insight.details.comparison}\n </Text>\n )}\n </Box>\n )}\n\n {insight.suggestedAction && (isExpanded || isSelected) && (\n <Text> <Text dimColor>→ </Text><Text bold>{insight.suggestedAction}</Text></Text>\n )}\n\n {insight.actionCommand && isExpanded && (\n <Text>\n {' '}<Text dimColor>$ </Text><Text color=\"green\">{insight.actionCommand}</Text>\n {isSelected && <Text dimColor> </Text>}\n {isSelected && <Text bold>[Enter to run]</Text>}\n </Text>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n\n <Text> </Text>\n <Box gap={2}>\n {agentInsights.filter(i => i.type === 'warning').length > 0 && (\n <Text color=\"red\">{agentInsights.filter(i => i.type === 'warning').length} warnings</Text>\n )}\n {agentInsights.filter(i => i.type === 'suggestion').length > 0 && (\n <Text bold>{agentInsights.filter(i => i.type === 'suggestion').length} suggestions</Text>\n )}\n {agentInsights.filter(i => i.type === 'celebration').length > 0 && (\n <Text color=\"green\">{agentInsights.filter(i => i.type === 'celebration').length} wins</Text>\n )}\n <Text dimColor>│</Text>\n {isAIAvailable() ? <Text color=\"green\">AI ✓</Text> : <Text dimColor>AI off</Text>}\n </Box>\n </Box>\n );\n}\n","import pc from 'picocolors';\n\nexport const colors = {\n border: (s: string) => pc.dim(s),\n header: (s: string) => pc.bold(pc.white(s)),\n brand: (s: string) => pc.bold(pc.green(s)),\n dim: (s: string) => pc.dim(s),\n\n critical: (s: string) => pc.bold(pc.red(s)),\n serious: (s: string) => pc.yellow(s),\n moderate: (s: string) => pc.blue(s),\n low: (s: string) => pc.dim(s),\n\n success: (s: string) => pc.green(s),\n running: (s: string) => pc.yellow(s),\n waiting: (s: string) => pc.dim(s),\n alert: (s: string) => pc.bold(pc.red(s)),\n\n selected: (s: string) => pc.bold(pc.green(s)),\n highlight: (s: string) => pc.bold(pc.white(s)),\n\n yellow: (s: string) => pc.yellow(s),\n} as const;\n\nexport const box = {\n topLeft: '┌',\n topRight: '┐',\n bottomLeft: '└',\n bottomRight: '┘',\n horizontal: '─',\n vertical: '│',\n leftT: '├',\n rightT: '┤',\n topT: '┬',\n bottomT: '┴',\n cross: '┼',\n} as const;\n\nexport function formatTimeAgo(timestamp: number): string {\n const seconds = Math.floor((Date.now() - timestamp) / 1000);\n if (seconds < 10) return 'just now';\n if (seconds < 60) return `${seconds}s ago`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n return `${hours}h ago`;\n}\n\nexport function severityColor(severity: string): (s: string) => string {\n switch (severity) {\n case 'critical': return colors.critical;\n case 'serious': return colors.serious;\n case 'moderate': return colors.moderate;\n case 'low': return colors.low;\n default: return colors.dim;\n }\n}\n\nexport function severityIcon(severity: string): string {\n switch (severity) {\n case 'critical': return '[!]';\n case 'serious': return '[x]';\n case 'moderate': return '[~]';\n case 'low': return '[-]';\n default: return '[-]';\n }\n}\n\nexport function insightIcon(type: string): { icon: string; color: (s: string) => string } {\n switch (type) {\n case 'warning': return { icon: '[!]', color: colors.critical };\n case 'observation': return { icon: '[>]', color: colors.serious };\n case 'suggestion': return { icon: '[?]', color: colors.highlight };\n case 'celebration': return { icon: '[+]', color: colors.success };\n case 'question': return { icon: '[?]', color: colors.moderate };\n default: return { icon: '[>]', color: colors.dim };\n }\n}\n\nexport function hotkey(k: string): string {\n return colors.border('[') + colors.highlight(k) + colors.border(']');\n}\n\nexport function hintLabel(key: string, label: string): string {\n return hotkey(key) + colors.dim(` ${label}`);\n}\n\nexport function progressBar(current: number, total: number, width: number = 10): string {\n if (total <= 0) return colors.dim('[' + '░'.repeat(width) + ']');\n const progress = Math.min(1, current / total);\n const filled = Math.round(width * progress);\n const empty = width - filled;\n return colors.dim('[') +\n colors.success('█'.repeat(filled)) +\n colors.dim('░'.repeat(empty)) +\n colors.dim(']');\n}\n\n// eslint-disable-next-line no-control-regex\nexport function stripEmojis(s: string): string {\n return s.replace(/[\\u{1F300}-\\u{1F9FF}\\u{2600}-\\u{26FF}\\u{2700}-\\u{27BF}\\u{FE00}-\\u{FE0F}\\u{200D}\\u{20E3}\\u{FE0F}\\u{E0020}-\\u{E007F}]/gu, '').trim();\n}\n","import React, { useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport { progressBar } from '../theme.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { getGuardianState, type Goal } from '../../../guardian/guardian-state.js';\n\nfunction calculateGoalProgress(goal: { startValue?: number; currentValue: number; target: number }): number {\n if (goal.target <= 0) return 0;\n const startValue = goal.startValue ?? goal.currentValue;\n if (startValue > goal.target) {\n const totalReduction = startValue - goal.target;\n const actualReduction = startValue - goal.currentValue;\n return Math.round((actualReduction / totalReduction) * 100);\n }\n return Math.round((goal.currentValue / goal.target) * 100);\n}\n\nexport function GoalsView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { goalsPanel } = state;\n const activeGoals = goalsPanel.goals.filter(g => g.status === 'active');\n const achievedGoals = goalsPanel.goals.filter(g => g.status === 'achieved');\n const otherGoals = goalsPanel.goals.filter(g => g.status !== 'active' && g.status !== 'achieved');\n\n const refreshGoals = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goals = agentState.getAllGoals();\n dispatch({\n type: 'SET_GOALS',\n goals: goals.map(g => {\n const base = { id: g.id, description: g.description, type: g.type, target: g.target, currentValue: g.currentValue, status: g.status, autoGenerated: g.autoGenerated, updatedAt: g.updatedAt };\n return g.category ? { ...base, category: g.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, [dispatch]);\n\n const addGoal = useCallback(async (description: string) => {\n if (!description.trim()) return;\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goal: Goal = {\n id: `goal-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n description: description.trim(),\n type: 'reduction',\n metric: 'semantic',\n target: 0,\n currentValue: 0,\n startValue: 0,\n status: 'active',\n autoGenerated: false,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n deadline: new Date(Date.now() + 14 * 86400000).toISOString(),\n };\n await agentState.addGoal(goal);\n dispatch({ type: 'ADD_ACTIVITY', message: `Goal added: ${description.slice(0, 40)}` });\n await refreshGoals();\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n const completeGoal = useCallback(async (goalId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const goals = agentState.getAllGoals();\n const goal = goals.find(g => g.id === goalId);\n if (goal) {\n await agentState.updateGoal(goalId, { status: 'achieved', currentValue: goal.target, achievedAt: new Date().toISOString() });\n dispatch({ type: 'ADD_ACTIVITY', message: `Goal achieved: ${goal.description.slice(0, 30)}` });\n await refreshGoals();\n }\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n const deleteGoal = useCallback(async (goalId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n await agentState.updateGoal(goalId, { status: 'rejected' });\n dispatch({ type: 'ADD_ACTIVITY', message: 'Goal removed' });\n await refreshGoals();\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n const reactivateGoal = useCallback(async (goalId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n await agentState.updateGoal(goalId, { status: 'active', achievedAt: undefined });\n dispatch({ type: 'ADD_ACTIVITY', message: 'Goal reactivated' });\n await refreshGoals();\n } catch { /* ignore */ }\n }, [dispatch, refreshGoals]);\n\n useInput((_input, key) => {\n if (goalsPanel.inputMode === 'add') {\n if (key.escape) {\n dispatch({ type: 'SET_GOALS_INPUT_MODE', mode: 'browse' });\n } else if (key.return) {\n void addGoal(goalsPanel.inputBuffer);\n dispatch({ type: 'SET_GOALS_INPUT_MODE', mode: 'browse' });\n } else if (key.backspace || key.delete) {\n dispatch({ type: 'SET_GOALS_INPUT_BUFFER', buffer: goalsPanel.inputBuffer.slice(0, -1) });\n } else if (_input && _input.length === 1 && !key.ctrl && !key.meta) {\n dispatch({ type: 'SET_GOALS_INPUT_BUFFER', buffer: goalsPanel.inputBuffer + _input });\n }\n return;\n }\n\n if (_input === 'a') dispatch({ type: 'SET_GOALS_INPUT_MODE', mode: 'add' });\n else if (key.upArrow || _input === 'k') dispatch({ type: 'SELECT_GOAL', index: Math.max(0, goalsPanel.selectedIndex - 1) });\n else if (key.downArrow || _input === 'j') dispatch({ type: 'SELECT_GOAL', index: Math.min(activeGoals.length - 1, goalsPanel.selectedIndex + 1) });\n else if (key.return) {\n const selected = activeGoals[goalsPanel.selectedIndex];\n if (selected) void completeGoal(selected.id);\n } else if (_input === 'd') {\n const selected = activeGoals[goalsPanel.selectedIndex];\n if (selected) void deleteGoal(selected.id);\n } else if (_input === 'x') {\n const completed = goalsPanel.goals.filter(g => g.status === 'achieved' || g.status === 'failed');\n if (completed[0]) void deleteGoal(completed[0].id);\n } else if (_input === 'u') {\n const recent = goalsPanel.goals.filter(g => g.status === 'achieved').sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());\n if (recent[0]) void reactivateGoal(recent[0].id);\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Goals</Text> <Text dimColor>Track progress, achieve targets</Text></Text>\n <Text> </Text>\n\n {goalsPanel.inputMode === 'add' ? (\n <Box flexDirection=\"column\">\n <Text><Text bold>New goal:</Text> {goalsPanel.inputBuffer}<Text bold color=\"green\">▌</Text></Text>\n <Text dimColor>Examples: \"Reduce auth bugs by 50%\", \"Eliminate critical issues\"</Text>\n <Text dimColor>Press Enter to add, Escape to cancel</Text>\n </Box>\n ) : (\n <>\n {goalsPanel.goals.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text dimColor>No goals yet.</Text>\n <Text dimColor>Press [a] to add your first goal, or wait for auto-generated goals.</Text>\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n {activeGoals.length > 0 && (\n <Box flexDirection=\"column\">\n <Text bold>Active:</Text>\n {activeGoals.map((goal, idx) => {\n const isSelected = goalsPanel.selectedIndex === idx;\n const progress = calculateGoalProgress(goal);\n const bar = progressBar(progress, 100, 10);\n const source = goal.autoGenerated ? <Text dimColor>[auto]</Text> : <Text dimColor>[manual]</Text>;\n return (\n <Text key={goal.id}>\n {isSelected ? <Text bold color=\"green\">▶ </Text> : <Text> </Text>}\n {bar} {goal.description.slice(0, 50)} {source}\n </Text>\n );\n })}\n <Text> </Text>\n </Box>\n )}\n\n {achievedGoals.length > 0 && (\n <Box flexDirection=\"column\">\n <Text><Text color=\"green\">Achieved:</Text><Text dimColor> [x to remove]</Text></Text>\n {achievedGoals.slice(0, 5).map(g => (\n <Text key={g.id} color=\"green\"> [+] {g.description.slice(0, 50)}</Text>\n ))}\n {achievedGoals.length > 5 && <Text dimColor> +{achievedGoals.length - 5} more</Text>}\n <Text> </Text>\n </Box>\n )}\n\n {otherGoals.length > 0 && (\n <Box flexDirection=\"column\">\n <Text dimColor>Other:</Text>\n {otherGoals.slice(0, 2).map(g => {\n const icon = g.status === 'failed' ? '[X]' : g.status === 'paused' ? '[P]' : '•';\n return <Text key={g.id}> {icon} {g.description.slice(0, 50)}<Text dimColor> ({g.status})</Text></Text>;\n })}\n </Box>\n )}\n </Box>\n )}\n </>\n )}\n </Box>\n );\n}\n","import React, { useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { getGuardianState, type Hypothesis } from '../../../guardian/guardian-state.js';\n\nexport function HypothesesView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { hypothesesPanel } = state;\n const testing = hypothesesPanel.hypotheses.filter(h => h.status === 'testing');\n const validated = hypothesesPanel.hypotheses.filter(h => h.status === 'validated');\n const invalidated = hypothesesPanel.hypotheses.filter(h => h.status === 'invalidated');\n\n const refreshHypotheses = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const hypotheses = agentState.getAllHypotheses();\n dispatch({\n type: 'SET_HYPOTHESES',\n hypotheses: hypotheses.map(h => {\n const base = { id: h.id, statement: h.statement, confidence: h.confidence, status: h.status, evidenceCount: h.evidence.length, updatedAt: h.updatedAt };\n return h.category ? { ...base, category: h.category } : base;\n }),\n });\n } catch { /* ignore */ }\n }, [dispatch]);\n\n const addHypothesis = useCallback(async (statement: string) => {\n if (!statement.trim()) return;\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n const hypothesis: Hypothesis = {\n id: `hypo-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n statement: statement.trim(),\n confidence: 0.5,\n status: 'testing',\n evidence: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n testCriteria: 'Collect evidence from scans',\n };\n await agentState.addHypothesis(hypothesis);\n dispatch({ type: 'ADD_ACTIVITY', message: `Hypothesis added: ${statement.slice(0, 40)}` });\n await refreshHypotheses();\n } catch { /* ignore */ }\n }, [dispatch, refreshHypotheses]);\n\n const updateHypothesis = useCallback(async (hypoId: string, action: 'validate' | 'invalidate' | 'delete') => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n if (action === 'validate') await agentState.updateHypothesis(hypoId, { status: 'validated', confidence: 0.9 });\n else if (action === 'invalidate') await agentState.updateHypothesis(hypoId, { status: 'invalidated', confidence: 0.1 });\n else await agentState.updateHypothesis(hypoId, { status: 'retired' });\n dispatch({ type: 'ADD_ACTIVITY', message: `Hypothesis ${action === 'validate' ? 'validated' : action === 'invalidate' ? 'invalidated' : 'removed'}` });\n await refreshHypotheses();\n } catch { /* ignore */ }\n }, [dispatch, refreshHypotheses]);\n\n const reactivateHypothesis = useCallback(async (hypoId: string) => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const agentState = getGuardianState(workDir);\n await agentState.load();\n await agentState.updateHypothesis(hypoId, { status: 'testing', confidence: 0.5, validatedAt: undefined });\n dispatch({ type: 'ADD_ACTIVITY', message: 'Hypothesis reactivated' });\n await refreshHypotheses();\n } catch { /* ignore */ }\n }, [dispatch, refreshHypotheses]);\n\n useInput((_input, key) => {\n if (hypothesesPanel.inputMode === 'add') {\n if (key.escape) {\n dispatch({ type: 'SET_HYPOTHESES_INPUT_MODE', mode: 'browse' });\n } else if (key.return) {\n void addHypothesis(hypothesesPanel.inputBuffer);\n dispatch({ type: 'SET_HYPOTHESES_INPUT_MODE', mode: 'browse' });\n } else if (key.backspace || key.delete) {\n dispatch({ type: 'SET_HYPOTHESES_INPUT_BUFFER', buffer: hypothesesPanel.inputBuffer.slice(0, -1) });\n } else if (_input && _input.length === 1 && !key.ctrl && !key.meta) {\n dispatch({ type: 'SET_HYPOTHESES_INPUT_BUFFER', buffer: hypothesesPanel.inputBuffer + _input });\n }\n return;\n }\n\n if (_input === 'a') dispatch({ type: 'SET_HYPOTHESES_INPUT_MODE', mode: 'add' });\n else if (key.upArrow || _input === 'k') dispatch({ type: 'SELECT_HYPOTHESIS', index: Math.max(0, hypothesesPanel.selectedIndex - 1) });\n else if (key.downArrow || _input === 'j') dispatch({ type: 'SELECT_HYPOTHESIS', index: Math.min(testing.length - 1, hypothesesPanel.selectedIndex + 1) });\n else if (_input === 'v') {\n const selected = testing[hypothesesPanel.selectedIndex];\n if (selected) void updateHypothesis(selected.id, 'validate');\n } else if (_input === 'x') {\n const selected = testing[hypothesesPanel.selectedIndex];\n if (selected) void updateHypothesis(selected.id, 'invalidate');\n } else if (_input === 'd') {\n const selected = testing[hypothesesPanel.selectedIndex];\n if (selected) void updateHypothesis(selected.id, 'delete');\n } else if (_input === 'r') {\n const completed = hypothesesPanel.hypotheses.filter(h => h.status === 'validated' || h.status === 'invalidated');\n if (completed[0]) void updateHypothesis(completed[0].id, 'delete');\n } else if (_input === 'u') {\n const recent = hypothesesPanel.hypotheses.filter(h => h.status === 'validated' || h.status === 'invalidated')\n .sort((a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime());\n if (recent[0]) void reactivateHypothesis(recent[0].id);\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Hypotheses</Text> <Text dimColor>Test theories about your codebase</Text></Text>\n <Text> </Text>\n\n {hypothesesPanel.inputMode === 'add' ? (\n <Box flexDirection=\"column\">\n <Text><Text bold>New hypothesis:</Text> {hypothesesPanel.inputBuffer}<Text bold color=\"green\">▌</Text></Text>\n <Text dimColor>Examples: \"Mondays have more bugs\", \"Code reviews reduce issues\"</Text>\n <Text dimColor>Press Enter to add, Escape to cancel</Text>\n </Box>\n ) : (\n <>\n {hypothesesPanel.hypotheses.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text dimColor>No hypotheses yet.</Text>\n <Text dimColor>Press [a] to add your first hypothesis.</Text>\n <Text dimColor>The agent will collect evidence and update confidence over time.</Text>\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n {testing.length > 0 && (\n <Box flexDirection=\"column\">\n <Text bold>Testing:</Text>\n {testing.map((hypo, idx) => {\n const isSelected = hypothesesPanel.selectedIndex === idx;\n const conf = Math.round(hypo.confidence * 100);\n return (\n <Box key={hypo.id} flexDirection=\"column\">\n <Text>\n {isSelected ? <Text bold color=\"green\">▶ </Text> : <Text> </Text>}\n [?] \"{hypo.statement.slice(0, 50)}\" <Text color={conf >= 70 ? 'green' : conf >= 40 ? 'yellow' : 'yellow'}>({conf}%)</Text>\n </Text>\n <Text dimColor> Evidence: {hypo.evidenceCount} points</Text>\n </Box>\n );\n })}\n <Text> </Text>\n </Box>\n )}\n\n {validated.length > 0 && (\n <Box flexDirection=\"column\">\n <Text><Text color=\"green\">Validated:</Text><Text dimColor> [r to remove]</Text></Text>\n {validated.slice(0, 3).map(h => (\n <Text key={h.id} color=\"green\"> [+] \"{h.statement.slice(0, 50)}\"</Text>\n ))}\n {validated.length > 3 && <Text dimColor> +{validated.length - 3} more</Text>}\n <Text> </Text>\n </Box>\n )}\n\n {invalidated.length > 0 && (\n <Box flexDirection=\"column\">\n <Text><Text color=\"yellow\">Invalidated:</Text><Text dimColor> [r to remove]</Text></Text>\n {invalidated.slice(0, 2).map(h => (\n <Text key={h.id}><Text color=\"yellow\"> [X] \"{h.statement.slice(0, 50)}\"</Text></Text>\n ))}\n {invalidated.length > 2 && <Text dimColor> +{invalidated.length - 2} more</Text>}\n </Box>\n )}\n </Box>\n )}\n </>\n )}\n </Box>\n );\n}\n","import React, { useEffect, useCallback } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\nimport type { StoredIssue } from '../../../memory/issue-store.js';\nimport { getWorkingDirectory } from '../../../utils/workspace.js';\nimport { getRecentIssues, getMemoryStats } from '../../../memory/issue-store.js';\nimport { findCrossProjectPatterns } from '../../../memory/global-memory.js';\n\nfunction severityBar(count: number, max: number, width: number = 16): string {\n const filled = max > 0 ? Math.round((count / max) * width) : 0;\n return '█'.repeat(filled) + '░'.repeat(width - filled);\n}\n\nexport function MemoryTreeView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { memoryTree } = state;\n const { issues, stats, globalPatterns, expandedNodes, selectedNode, loaded } = memoryTree;\n\n const loadData = useCallback(async () => {\n try {\n const workDir = getWorkingDirectory(undefined, true);\n const [issueList, memStats, patterns] = await Promise.all([\n getRecentIssues({ workDir, limit: 200, daysBack: 30 }),\n getMemoryStats(workDir),\n findCrossProjectPatterns(2),\n ]);\n dispatch({ type: 'SET_MEMORY_TREE', issues: issueList, stats: memStats, patterns });\n } catch {\n dispatch({ type: 'ADD_ACTIVITY', message: 'Memory load error' });\n }\n }, [dispatch]);\n\n useEffect(() => {\n if (!loaded) { void loadData(); }\n }, [loaded, loadData]);\n\n useInput((_input, key) => {\n if (key.upArrow || _input === 'k') dispatch({ type: 'NAVIGATE_UP' });\n else if (key.downArrow || _input === 'j') dispatch({ type: 'NAVIGATE_DOWN' });\n else if (key.return) dispatch({ type: 'TOGGLE_MEMORY_NODE', nodeId: selectedNode });\n });\n\n const bySeverity: Record<string, StoredIssue[]> = { critical: [], serious: [], moderate: [], low: [] };\n for (const issue of issues) {\n const arr = bySeverity[issue.severity];\n if (arr) arr.push(issue);\n }\n\n const byFile = new Map<string, StoredIssue[]>();\n for (const issue of issues) {\n if (!byFile.has(issue.file)) byFile.set(issue.file, []);\n byFile.get(issue.file)!.push(issue);\n }\n const sortedFiles = Array.from(byFile.entries()).sort((a, b) => b[1].length - a[1].length).slice(0, 10);\n\n const byAgent = new Map<string, StoredIssue[]>();\n for (const issue of issues) {\n if (!byAgent.has(issue.agent)) byAgent.set(issue.agent, []);\n byAgent.get(issue.agent)!.push(issue);\n }\n const sortedAgents = Array.from(byAgent.entries()).sort((a, b) => b[1].length - a[1].length);\n\n const maxCount = Math.max(bySeverity['critical']?.length || 0, bySeverity['serious']?.length || 0, bySeverity['moderate']?.length || 0, bySeverity['low']?.length || 0, 1);\n\n const totalIssues = stats?.totalIssues || issues.length;\n\n const sel = (nodeId: string) => selectedNode === nodeId;\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text><Text bold>Memory</Text> <Text dimColor>[{totalIssues} issues]</Text></Text>\n <Text> </Text>\n\n {!loaded ? (\n <Text dimColor>Loading memory data...</Text>\n ) : issues.length === 0 && globalPatterns.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text dimColor>No issues in memory yet.</Text>\n <Text dimColor>Run a scan to populate the memory tree.</Text>\n </Box>\n ) : (\n <Box flexDirection=\"column\">\n {/* Severity section */}\n <Text>\n {sel('severity') ? <Text bold color=\"green\">▶ </Text> : <Text> </Text>}\n {expandedNodes.has('severity') ? '▼' : '▶'}{' '}\n {sel('severity') ? <Text bold color=\"green\">By Severity</Text> : <Text bold>By Severity</Text>}\n </Text>\n {expandedNodes.has('severity') && (['critical', 'serious', 'moderate', 'low'] as const).map(sev => {\n const count = bySeverity[sev]?.length || 0;\n const nodeId = `severity-${sev}`;\n const barStr = severityBar(count, maxCount);\n const isLow = sev === 'low';\n const sevColorMap = { critical: 'red', serious: 'yellow', moderate: 'blue' } as const;\n const sevColor = isLow ? undefined : sevColorMap[sev as keyof typeof sevColorMap];\n const SevText = ({ children }: { children: React.ReactNode }) =>\n isLow ? <Text dimColor>{children}</Text>\n : sevColor ? <Text color={sevColor}>{children}</Text>\n : <Text>{children}</Text>;\n return (\n <Box key={sev} flexDirection=\"column\">\n <Text>\n {sel(nodeId) ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {' │ '}\n {sel(nodeId) ? <Text bold color=\"green\">{sev}</Text> : <SevText>{sev}</SevText>}\n {` (${count}) `}\n <SevText>{barStr}</SevText>\n </Text>\n {expandedNodes.has(nodeId) && (bySeverity[sev] || []).slice(0, 5).map((issue, i) => {\n const issueId = `severity-${sev}-${issue.id}`;\n const filename = issue.file.split('/').pop() || issue.file;\n const line = issue.line ? `:${issue.line}` : '';\n const desc = issue.issue.slice(0, 35) + (issue.issue.length > 35 ? '...' : '');\n return (\n <Text key={i}>\n {sel(issueId) ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {' │ '}\n {i === (Math.min(5, (bySeverity[sev]?.length || 0)) - 1) ? '└─ ' : '├─ '}\n <Text dimColor>{filename}{line}</Text> - <SevText>{desc}</SevText>\n </Text>\n );\n })}\n </Box>\n );\n })}\n\n {/* Files section */}\n <Text>\n {sel('files') ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {expandedNodes.has('files') ? '▼' : '▶'}{' '}\n {sel('files') ? <Text bold color=\"green\">By File (Hot Spots)</Text> : <Text bold>By File (Hot Spots)</Text>}\n </Text>\n {expandedNodes.has('files') && sortedFiles.map(([file, fileIssues], idx) => {\n const fileId = `file-${file}`;\n const filename = file.split('/').pop() || file;\n const count = fileIssues.length;\n const isLast = idx === sortedFiles.length - 1;\n return (\n <Text key={file}>\n {sel(fileId) ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {' '}{isLast ? '└─ ' : '├─ '}\n {sel(fileId) ? <Text bold color=\"green\">{filename}</Text> : <Text>{filename}</Text>}\n {` (${count})`}\n </Text>\n );\n })}\n\n {/* Agents section */}\n <Text>\n {sel('agents') ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {expandedNodes.has('agents') ? '▼' : '▶'}{' '}\n {sel('agents') ? <Text bold color=\"green\">By Agent</Text> : <Text bold>By Agent</Text>}\n </Text>\n {expandedNodes.has('agents') && sortedAgents.map(([agent, agentIssues], idx) => {\n const agentId = `agent-${agent}`;\n const isLast = idx === sortedAgents.length - 1;\n return (\n <Text key={agent}>\n {sel(agentId) ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {' '}{isLast ? '└─ ' : '├─ '}\n {sel(agentId) ? <Text bold color=\"green\">{agent}</Text> : <Text>{agent}</Text>}\n {` (${agentIssues.length})`}\n </Text>\n );\n })}\n\n {/* Patterns section */}\n <Text>\n {sel('patterns') ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {expandedNodes.has('patterns') ? '▼' : '▶'}{' '}\n {sel('patterns') ? <Text bold color=\"green\">Patterns ({globalPatterns.length} recurring)</Text> : <Text bold>Patterns ({globalPatterns.length} recurring)</Text>}\n </Text>\n {expandedNodes.has('patterns') && globalPatterns.slice(0, 5).map((pattern, idx) => {\n const patternId = `pattern-${pattern.id}`;\n const isLast = idx === Math.min(4, globalPatterns.length - 1);\n const desc = pattern.pattern.slice(0, 40) + (pattern.pattern.length > 40 ? '...' : '');\n return (\n <Text key={pattern.id}>\n {sel(patternId) ? <Text bold color=\"green\">→ </Text> : <Text> </Text>}\n {' '}{isLast ? '└─ ' : '├─ '}\n <Text dimColor>\"{desc}\" - seen in {pattern.projects.length} projects</Text>\n </Text>\n );\n })}\n\n <Text> </Text>\n <Box gap={2}>\n <Text>\n <Text dimColor>Trend: </Text>\n {stats?.improvementTrend === 'improving'\n ? <Text color=\"green\">↑ Improving</Text>\n : stats?.improvementTrend === 'declining'\n ? <Text color=\"red\">↓ Declining</Text>\n : <Text dimColor>→ Stable</Text>}\n </Text>\n <Text><Text dimColor>Resolved:</Text> <Text color=\"green\">{stats?.resolvedCount || 0}</Text></Text>\n <Text><Text dimColor>Historical:</Text> <Text dimColor>{stats?.historicalIssues || 0}</Text></Text>\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useDashboard } from '../state.js';\n\nexport function RawLogView(): React.ReactElement {\n const { state, dispatch } = useDashboard();\n const { rawLog, rawLogPage } = state;\n\n const pageSize = Math.max(10, (process.stdout.rows || 40) - 15);\n const totalPages = Math.max(1, Math.ceil(rawLog.length / pageSize));\n\n useInput((input, _key) => {\n if (input === 'n') {\n dispatch({ type: 'SET_RAW_LOG_PAGE', page: Math.min(totalPages - 1, rawLogPage + 1) });\n } else if (input === 'p') {\n dispatch({ type: 'SET_RAW_LOG_PAGE', page: Math.max(0, rawLogPage - 1) });\n }\n });\n\n const startIdx = rawLogPage * pageSize;\n const logs = rawLog.slice(startIdx, startIdx + pageSize);\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text>\n <Text bold>Log</Text>{' '}\n <Text dimColor>Page {rawLogPage + 1}/{totalPages}</Text>{' '}\n <Text bold>{rawLog.length}</Text><Text dimColor> entries</Text>\n </Text>\n <Text> </Text>\n\n {rawLog.length === 0 ? (\n <Text dimColor>No log entries yet.</Text>\n ) : (\n <Box flexDirection=\"column\">\n {logs.map((entry, i) => {\n const levelTag = `[${entry.level.toUpperCase().padEnd(5)}]`;\n const levelEl = entry.level === 'error' ? <Text color=\"red\">{levelTag}</Text>\n : entry.level === 'warn' ? <Text color=\"yellow\">{levelTag}</Text>\n : entry.level === 'info' ? <Text color=\"green\">{levelTag}</Text>\n : <Text dimColor>{levelTag}</Text>;\n return (\n <Text key={i}>\n <Text dimColor>{entry.time}</Text>{' '}\n {levelEl}{' '}\n {entry.message.slice(0, 80)}\n </Text>\n );\n })}\n </Box>\n )}\n </Box>\n );\n}\n"],"mappings":"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","names":["React","useState","useEffect","useCallback","Box","useInput","jsx","Box","Text","jsx","jsxs","Text","Box","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","useInput","pc","jsx","jsxs","useInput","Box","Text","Box","Text","useInput","Fragment","jsx","jsxs","useInput","Box","Text","useCallback","Box","Text","useInput","Fragment","jsx","jsxs","useCallback","useInput","Box","Text","useCallback","Box","Text","useInput","jsx","jsxs","useCallback","useInput","Box","Text","Box","Text","useInput","jsx","jsxs","useInput","Box","Text","jsx","jsxs","useState","useCallback","useEffect","useInput","Box","React"]}
|
package/dist/cli/yolo-daemon.js
CHANGED
package/dist/index.js
CHANGED