@xagent/one-shot 1.1.87
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.
- package/LICENSE +21 -0
- package/README.md +1152 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +22089 -0
- package/dist/index.js.map +1 -0
- package/package.json +136 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/grok/client.ts","../src/mcp/transports.ts","../src/utils/settings-manager.ts","../src/mcp/config.ts","../src/mcp/client.ts","../src/grok/tools.ts","../src/utils/confirmation-service.ts","../src/tools/bash.ts","../src/tools/text-editor.ts","../src/tools/morph-editor.ts","../src/tools/todo-tool.ts","../src/tools/confirmation-tool.ts","../src/tools/search.ts","../src/tools/advanced/multi-file-editor.ts","../src/tools/advanced/advanced-search.ts","../src/tools/advanced/file-tree-operations.ts","../src/tools/advanced/code-aware-editor.ts","../src/tools/advanced/operation-history.ts","../src/tools/advanced/index.ts","../src/tools/intelligence/ast-parser.ts","../src/tools/intelligence/symbol-search.ts","../src/tools/intelligence/dependency-analyzer.ts","../src/tools/intelligence/code-context.ts","../src/tools/intelligence/refactoring-assistant.ts","../src/tools/intelligence/index.ts","../src/tools/index.ts","../src/utils/token-counter.ts","../src/utils/custom-instructions.ts","../src/services/execution-orchestrator.ts","../src/services/research-recommend.ts","../src/utils/context-loader.ts","../src/agent/grok-agent.ts","../src/utils/text-utils.ts","../src/hooks/use-input-history.ts","../src/services/paste-detection.ts","../src/hooks/use-enhanced-input.ts","../src/services/codebase-explorer.ts","../src/services/plan-generator.ts","../src/services/read-only-tool-executor.ts","../src/hooks/use-plan-mode.ts","../src/ui/components/command-suggestions.tsx","../src/utils/model-config.ts","../src/tools/documentation/claude-md-parser.ts","../src/tools/documentation/agent-system-generator.ts","../src/tools/documentation/docs-menu.ts","../src/tools/documentation/readme-generator.ts","../src/tools/documentation/comments-generator.ts","../src/tools/documentation/api-docs-generator.ts","../src/tools/documentation/changelog-generator.ts","../src/tools/documentation/update-agent-docs.ts","../src/subagents/subagent-framework.ts","../src/tools/documentation/self-healing-system.ts","../package.json","../src/utils/version-checker.ts","../src/hooks/use-input-handler.ts","../src/ui/components/api-key-input.tsx","../src/hooks/use-context-info.ts","../src/hooks/use-auto-read.ts","../src/hooks/use-streaming.ts","../src/hooks/use-confirmations.ts","../src/hooks/use-introduction.ts","../src/hooks/use-console-setup.ts","../src/hooks/use-session-logging.ts","../src/hooks/use-processing-timer.ts","../src/ui/colors.ts","../src/ui/components/context-status.tsx","../src/ui/components/banner.tsx","../src/ui/components/context-tooltip.tsx","../src/ui/components/chat-entries/user-message-entry.tsx","../src/ui/utils/markdown-renderer.tsx","../src/ui/components/chat-entries/assistant-message-entry.tsx","../src/ui/utils/colors.ts","../src/ui/shared/max-sized-box.tsx","../src/ui/components/diff-renderer.tsx","../src/ui/components/content-renderers/file-content-renderer.tsx","../src/ui/components/chat-entries/tool-call-entry.tsx","../src/ui/components/chat-entry-router.tsx","../src/ui/components/chat-history.tsx","../src/ui/components/loading-spinner.tsx","../src/ui/components/plan-mode-indicator.tsx","../src/ui/components/chat-input.tsx","../src/ui/components/version-notification.tsx","../src/ui/components/mcp-status.tsx","../src/ui/components/context-indicator.tsx","../src/ui/components/model-selection.tsx","../src/ui/components/confirmation-dialog.tsx","../src/ui/components/chat-interface-renderer.tsx","../src/ui/components/chat-interface.tsx","../src/commands/mcp.ts","../src/commands/set-name.ts","../src/commands/toggle-confirmations.ts","../src/index.ts"],"names":["apiKey","path","fs","config","resolve","path2","init_client","EventEmitter","loadMCPConfig","execAsync","promisify","exec","ops","path3","numberedLines","oldLines","newLines","writeFilePromise","replacementLines","pathExists","ops2","path4","axios","ops3","path5","ops4","path6","ops5","path7","ops7","path9","ops8","path10","ops9","parseTS","node","ops10","ops11","glob","ops12","ops13","init_tools","path15","fs3","fs4","path16","execSync","now","mcpManager","useState","useCallback","log","existsSync","ops14","ops15","ops16","ops17","ops18","ops19","ops20","ops21","error","useEffect","useMemo","input","useInput","jsxs","Box","jsx","Text","dirname","os","useRef","init_colors","Fragment","toolName","filePath","explanation","truncateContent","React","progress","cursorChar","formatTokenCount","manager","tools","Command","chalk","getSettingsManager","loadModel","GrokAgent","ChatInterface","printWelcomeBanner","ConfirmationService","createMCPCommand","createSetNameCommand","createToggleConfirmationsCommand","checkForUpdates","loadContext","formatContextStatus"],"mappings":"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","file":"index.js","sourcesContent":["import OpenAI from \"openai\";\nimport type { ChatCompletionMessageParam } from \"openai/resources/chat\";\nimport fs from \"fs\";\nimport path from \"path\";\n\nexport type GrokMessage = ChatCompletionMessageParam;\n\nexport interface GrokTool {\n type: \"function\";\n function: {\n name: string;\n description: string;\n parameters: {\n type: \"object\";\n properties: Record<string, any>;\n required: string[];\n };\n };\n}\n\nexport interface GrokToolCall {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\n\nexport interface SearchParameters {\n mode?: \"auto\" | \"on\" | \"off\";\n // sources removed - let API use default sources to avoid format issues\n}\n\nexport interface SearchOptions {\n search_parameters?: SearchParameters;\n}\n\nexport interface GrokResponse {\n choices: Array<{\n message: {\n role: string;\n content: string | null;\n tool_calls?: GrokToolCall[];\n };\n finish_reason: string;\n }>;\n}\n\nexport class GrokClient {\n private client: OpenAI;\n private currentModel: string = \"grok-4-fast-non-reasoning\";\n private defaultMaxTokens: number;\n\n constructor(apiKey?: string, model?: string, baseURL?: string) {\n apiKey = apiKey || process.env.OPENAI_API_KEY || process.env.GROK_API_KEY || process.env.XAI_API_KEY;\n this.client = new OpenAI({\n apiKey,\n baseURL: baseURL || process.env.GROK_BASE_URL || \"https://api.x.ai/v1\",\n timeout: 360000,\n });\n const envMax = Number(process.env.GROK_MAX_TOKENS);\n this.defaultMaxTokens = Number.isFinite(envMax) && envMax > 0 ? envMax : 1536;\n if (model) {\n this.currentModel = model;\n }\n }\n\n setModel(model: string): void {\n this.currentModel = model;\n }\n\n getCurrentModel(): string {\n return this.currentModel;\n }\n\n async chat(\n messages: GrokMessage[],\n tools?: GrokTool[],\n model?: string,\n searchOptions?: SearchOptions\n ): Promise<GrokResponse> {\n try {\n const requestPayload: any = {\n model: model || this.currentModel,\n messages,\n tools: tools || [],\n tool_choice: tools && tools.length > 0 ? \"auto\" : undefined,\n temperature: 0.7,\n max_tokens: this.defaultMaxTokens,\n };\n\n // Add search parameters if specified\n if (searchOptions?.search_parameters) {\n requestPayload.search_parameters = searchOptions.search_parameters;\n }\n\n const response =\n await this.client.chat.completions.create(requestPayload);\n\n // Log token usage for monitoring and optimization\n if (response.usage) {\n this.logTokenUsage(response.usage);\n }\n\n return response as GrokResponse;\n } catch (error: any) {\n throw new Error(`Grok API error: ${error.message}`);\n }\n }\n\n async *chatStream(\n messages: GrokMessage[],\n tools?: GrokTool[],\n model?: string,\n searchOptions?: SearchOptions,\n abortSignal?: AbortSignal\n ): AsyncGenerator<any, void, unknown> {\n try {\n const requestPayload: any = {\n model: model || this.currentModel,\n messages,\n tools: tools || [],\n tool_choice: tools && tools.length > 0 ? \"auto\" : undefined,\n temperature: 0.7,\n max_tokens: this.defaultMaxTokens,\n stream: true,\n };\n\n // Add search parameters if specified\n if (searchOptions?.search_parameters) {\n requestPayload.search_parameters = searchOptions.search_parameters;\n }\n\n const stream = (await this.client.chat.completions.create(\n requestPayload,\n { signal: abortSignal }\n )) as any;\n\n let finalUsage: any = null;\n for await (const chunk of stream) {\n // Capture usage data from final chunk if available\n if (chunk.usage) {\n finalUsage = chunk.usage;\n }\n yield chunk;\n }\n\n // Log token usage for streaming responses\n if (finalUsage) {\n this.logTokenUsage(finalUsage);\n }\n } catch (error: any) {\n throw new Error(`Grok API error: ${error.message}`);\n }\n }\n\n async search(\n query: string,\n searchParameters?: SearchParameters\n ): Promise<GrokResponse> {\n const searchMessage: GrokMessage = {\n role: \"user\",\n content: query,\n };\n\n const searchOptions: SearchOptions = {\n search_parameters: searchParameters || { mode: \"on\" },\n };\n\n return this.chat([searchMessage], [], undefined, searchOptions);\n }\n\n /**\n * Log token usage for monitoring and optimization\n */\n private logTokenUsage(usage: any): void {\n try {\n const tokenData = {\n timestamp: new Date().toISOString(),\n model: this.currentModel,\n prompt_tokens: usage.prompt_tokens || 0,\n completion_tokens: usage.completion_tokens || 0,\n total_tokens: usage.total_tokens || 0,\n reasoning_tokens: usage.reasoning_tokens || 0,\n };\n\n // Store in local JSON file for analysis (as specified in investigation)\n const logPath = process.env.XCLI_TOKEN_LOG || `${process.env.HOME}/.xcli/token-usage.jsonl`;\n\n // Ensure directory exists\n const dir = path.dirname(logPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Append to JSONL file\n const logLine = JSON.stringify(tokenData) + '\\n';\n fs.appendFileSync(logPath, logLine);\n\n } catch (error) {\n // Silently ignore logging errors to not disrupt API calls\n console.warn('Failed to log token usage:', error);\n }\n }\n}\n","import { Transport } from \"@modelcontextprotocol/sdk/shared/transport.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { ChildProcess } from \"child_process\";\nimport { EventEmitter } from \"events\";\nimport axios, { AxiosInstance } from \"axios\";\n\nexport type TransportType = 'stdio' | 'http' | 'sse' | 'streamable_http';\n\nexport interface TransportConfig {\n type: TransportType;\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n headers?: Record<string, string>;\n}\n\nexport interface MCPTransport {\n connect(): Promise<Transport>;\n disconnect(): Promise<void>;\n getType(): TransportType;\n}\n\nexport class StdioTransport implements MCPTransport {\n private transport?: StdioClientTransport;\n private process?: ChildProcess;\n\n constructor(private config: TransportConfig) {\n if (!config.command) {\n throw new Error('Command is required for stdio transport');\n }\n }\n\n async connect(): Promise<Transport> {\n // Create transport with environment variables to suppress verbose output\n const env = { \n ...process.env, \n ...this.config.env,\n // Try to suppress verbose output from mcp-remote\n MCP_REMOTE_QUIET: '1',\n MCP_REMOTE_SILENT: '1',\n DEBUG: '',\n NODE_ENV: 'production'\n };\n\n this.transport = new StdioClientTransport({\n command: this.config.command!,\n args: this.config.args || [],\n env\n });\n\n return this.transport;\n }\n\n async disconnect(): Promise<void> {\n if (this.transport) {\n await this.transport.close();\n this.transport = undefined;\n }\n\n if (this.process) {\n this.process.kill();\n this.process = undefined;\n }\n }\n\n getType(): TransportType {\n return 'stdio';\n }\n}\n\nexport class HttpTransport extends EventEmitter implements MCPTransport {\n private client?: AxiosInstance;\n private connected = false;\n\n constructor(private config: TransportConfig) {\n super();\n if (!config.url) {\n throw new Error('URL is required for HTTP transport');\n }\n }\n\n async connect(): Promise<Transport> {\n this.client = axios.create({\n baseURL: this.config.url,\n headers: {\n 'Content-Type': 'application/json',\n ...this.config.headers\n }\n });\n\n // Test connection\n try {\n await this.client.get('/health');\n this.connected = true;\n } catch (_error) {\n // If health endpoint doesn't exist, try a basic request\n this.connected = true;\n }\n\n return new HttpClientTransport(this.client);\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n this.client = undefined;\n }\n\n getType(): TransportType {\n return 'http';\n }\n}\n\nexport class SSETransport extends EventEmitter implements MCPTransport {\n private connected = false;\n\n constructor(private config: TransportConfig) {\n super();\n if (!config.url) {\n throw new Error('URL is required for SSE transport');\n }\n }\n\n async connect(): Promise<Transport> {\n return new Promise((resolve, reject) => {\n try {\n // For Node.js environment, we'll use a simple HTTP-based approach\n // In a real implementation, you'd use a proper SSE library like 'eventsource'\n this.connected = true;\n resolve(new SSEClientTransport(this.config.url!));\n } catch (error) {\n reject(error);\n }\n });\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n }\n\n getType(): TransportType {\n return 'sse';\n }\n}\n\n// Custom HTTP Transport implementation\nclass HttpClientTransport extends EventEmitter implements Transport {\n constructor(private client: AxiosInstance) {\n super();\n }\n\n async start(): Promise<void> {\n // HTTP transport is connection-less, so we're always \"started\"\n }\n\n async close(): Promise<void> {\n // Nothing to close for HTTP transport\n }\n\n async send(message: any): Promise<any> {\n try {\n const response = await this.client.post('/rpc', message);\n return response.data;\n } catch (error) {\n throw new Error(`HTTP transport error: ${error}`);\n }\n }\n}\n\n// Custom SSE Transport implementation\nclass SSEClientTransport extends EventEmitter implements Transport {\n constructor(private url: string) {\n super();\n }\n\n async start(): Promise<void> {\n // SSE transport is event-driven, so we're always \"started\"\n }\n\n async close(): Promise<void> {\n // Nothing to close for basic SSE transport\n }\n\n async send(message: any): Promise<any> {\n // For bidirectional communication over SSE, we typically use HTTP POST\n // for sending messages and SSE for receiving\n try {\n const response = await axios.post(this.url.replace('/sse', '/rpc'), message, {\n headers: { 'Content-Type': 'application/json' }\n });\n return response.data;\n } catch (error) {\n throw new Error(`SSE transport error: ${error}`);\n }\n }\n}\n\nexport class StreamableHttpTransport extends EventEmitter implements MCPTransport {\n private connected = false;\n\n constructor(private config: TransportConfig) {\n super();\n if (!config.url) {\n throw new Error('URL is required for streamable_http transport');\n }\n }\n\n async connect(): Promise<Transport> {\n return new Promise((resolve, reject) => {\n try {\n this.connected = true;\n resolve(new StreamableHttpClientTransport(this.config.url!, this.config.headers));\n } catch (error) {\n reject(error);\n }\n });\n }\n\n async disconnect(): Promise<void> {\n this.connected = false;\n }\n\n getType(): TransportType {\n return 'streamable_http';\n }\n}\n\n// Custom Streamable HTTP Transport implementation for GitHub Copilot MCP\nclass StreamableHttpClientTransport extends EventEmitter implements Transport {\n constructor(private url: string, private headers?: Record<string, string>) {\n super();\n }\n\n async start(): Promise<void> {\n // Streamable HTTP transport is connection-less, so we're always \"started\"\n }\n\n async close(): Promise<void> {\n // Nothing to close for streamable HTTP transport\n }\n\n async send(message: any): Promise<any> {\n console.log('StreamableHttpTransport: SSE endpoints require persistent connections, not suitable for MCP request-response pattern');\n console.log('StreamableHttpTransport: Message that would be sent:', JSON.stringify(message));\n \n // For now, return a mock response to indicate the transport type is not compatible\n // with the MCP protocol's request-response pattern\n throw new Error('StreamableHttpTransport: SSE endpoints are not compatible with MCP request-response pattern. GitHub Copilot MCP may require a different integration approach.');\n }\n}\n\nexport function createTransport(config: TransportConfig): MCPTransport {\n switch (config.type) {\n case 'stdio':\n return new StdioTransport(config);\n case 'http':\n return new HttpTransport(config);\n case 'sse':\n return new SSETransport(config);\n case 'streamable_http':\n return new StreamableHttpTransport(config);\n default:\n throw new Error(`Unsupported transport type: ${config.type}`);\n }\n}","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as os from \"os\";\n\n/**\n * User-level settings stored in ~/.xcli/config.json (or ~/.grok/user-settings.json for backwards compatibility)\n * These are global settings that apply across all projects\n */\nexport interface UserSettings {\n apiKey?: string; // X API key\n baseURL?: string; // API base URL\n defaultModel?: string; // User's preferred default model\n models?: string[]; // Available models list\n autoCompact?: boolean; // Enable automatic compact mode for long conversations\n compactThreshold?: {\n lines?: number; // Auto-compact when session exceeds this many lines (default: 800)\n bytes?: number; // Auto-compact when session exceeds this many bytes (default: 200000)\n };\n verbosityLevel?: 'quiet' | 'normal' | 'verbose'; // Output verbosity level\n explainLevel?: 'off' | 'brief' | 'detailed'; // Explanation detail level\n interactivityLevel?: 'chat' | 'balanced' | 'repl'; // Interaction mode\n assistantName?: string; // Custom name for the AI assistant\n requireConfirmation?: boolean; // Require user confirmation for file operations and commands\n operatorName?: string; // User's name for personalization\n agentName?: string; // Name for the AI assistant\n}\n\n/**\n * Project-level settings stored in .xcli/settings.json (or .grok/settings.json for backwards compatibility)\n * These are project-specific settings\n */\nexport interface ProjectSettings {\n model?: string; // Current model for this project\n mcpServers?: Record<string, any>; // MCP server configurations\n}\n\n/**\n * Default values for user settings\n */\nconst DEFAULT_USER_SETTINGS: Partial<UserSettings> = {\n baseURL: \"https://api.x.ai/v1\",\n defaultModel: \"grok-4-fast-non-reasoning\",\n models: [\n \"grok-4-fast-non-reasoning\",\n \"grok-4-fast-reasoning\",\n \"grok-4-0709\",\n \"grok-4-latest\",\n \"grok-3-latest\",\n \"grok-3-fast\",\n \"grok-3-mini-fast\",\n \"grok-3\",\n \"grok-2-vision-1212us-east-1\",\n \"grok-2-vision-1212eu-west-1\",\n \"grok-2-image-1212\"\n ],\n verbosityLevel: 'quiet',\n explainLevel: 'brief',\n requireConfirmation: true,\n};\n\n/**\n * Default values for project settings\n */\nconst DEFAULT_PROJECT_SETTINGS: Partial<ProjectSettings> = {\n model: \"grok-4-fast-non-reasoning\",\n};\n\n/**\n * Unified settings manager that handles both user-level and project-level settings\n */\nexport class SettingsManager {\n private static instance: SettingsManager;\n\n private userSettingsPath: string;\n private projectSettingsPath: string;\n\n private constructor() {\n // User settings path: try ~/.xcli first, fallback to ~/.grok for backwards compatibility\n const newUserDir = path.join(os.homedir(), \".xcli\");\n const oldUserDir = path.join(os.homedir(), \".grok\");\n\n if (fs.existsSync(newUserDir) || !fs.existsSync(oldUserDir)) {\n this.userSettingsPath = path.join(newUserDir, \"config.json\");\n } else {\n this.userSettingsPath = path.join(oldUserDir, \"user-settings.json\");\n }\n\n // Project settings path: try .xcli first, fallback to .grok for backwards compatibility\n const newProjectDir = path.join(process.cwd(), \".xcli\");\n const oldProjectDir = path.join(process.cwd(), \".grok\");\n\n if (fs.existsSync(newProjectDir) || !fs.existsSync(oldProjectDir)) {\n this.projectSettingsPath = path.join(newProjectDir, \"settings.json\");\n } else {\n this.projectSettingsPath = path.join(oldProjectDir, \"settings.json\");\n }\n }\n\n /**\n * Get singleton instance\n */\n public static getInstance(): SettingsManager {\n if (!SettingsManager.instance) {\n SettingsManager.instance = new SettingsManager();\n }\n return SettingsManager.instance;\n }\n\n /**\n * Ensure directory exists for a given file path\n */\n private ensureDirectoryExists(filePath: string): void {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n }\n\n /**\n * Load user settings from ~/.xcli/config.json or ~/.grok/user-settings.json\n */\n public loadUserSettings(): UserSettings {\n try {\n if (!fs.existsSync(this.userSettingsPath)) {\n // Create default user settings if file doesn't exist\n this.saveUserSettings(DEFAULT_USER_SETTINGS);\n return { ...DEFAULT_USER_SETTINGS };\n }\n\n const content = fs.readFileSync(this.userSettingsPath, \"utf-8\");\n const settings = JSON.parse(content);\n\n // Merge with defaults to ensure all required fields exist\n return { ...DEFAULT_USER_SETTINGS, ...settings };\n } catch (error) {\n console.warn(\n \"Failed to load user settings:\",\n error instanceof Error ? error.message : \"Unknown error\"\n );\n return { ...DEFAULT_USER_SETTINGS };\n }\n }\n\n /**\n * Save user settings to ~/.xcli/config.json or ~/.grok/user-settings.json\n */\n public saveUserSettings(settings: Partial<UserSettings>): void {\n try {\n this.ensureDirectoryExists(this.userSettingsPath);\n\n // Read existing settings directly to avoid recursion\n let existingSettings: UserSettings = { ...DEFAULT_USER_SETTINGS };\n if (fs.existsSync(this.userSettingsPath)) {\n try {\n const content = fs.readFileSync(this.userSettingsPath, \"utf-8\");\n const parsed = JSON.parse(content);\n existingSettings = { ...DEFAULT_USER_SETTINGS, ...parsed };\n } catch (_error) {\n // If file is corrupted, use defaults\n console.warn(\"Corrupted user settings file, using defaults\");\n }\n }\n\n const mergedSettings = { ...existingSettings, ...settings };\n\n fs.writeFileSync(\n this.userSettingsPath,\n JSON.stringify(mergedSettings, null, 2),\n { mode: 0o600 } // Secure permissions for API key\n );\n } catch (error) {\n console.error(\n \"Failed to save user settings:\",\n error instanceof Error ? error.message : \"Unknown error\"\n );\n throw error;\n }\n }\n\n /**\n * Update a specific user setting\n */\n public updateUserSetting<K extends keyof UserSettings>(\n key: K,\n value: UserSettings[K]\n ): void {\n const settings = { [key]: value } as Partial<UserSettings>;\n this.saveUserSettings(settings);\n }\n\n /**\n * Get a specific user setting\n */\n public getUserSetting<K extends keyof UserSettings>(key: K): UserSettings[K] {\n const settings = this.loadUserSettings();\n return settings[key];\n }\n\n /**\n * Load project settings from .x/settings.json\n */\n public loadProjectSettings(): ProjectSettings {\n try {\n if (!fs.existsSync(this.projectSettingsPath)) {\n // Create default project settings if file doesn't exist\n this.saveProjectSettings(DEFAULT_PROJECT_SETTINGS);\n return { ...DEFAULT_PROJECT_SETTINGS };\n }\n\n const content = fs.readFileSync(this.projectSettingsPath, \"utf-8\");\n const settings = JSON.parse(content);\n\n // Merge with defaults\n return { ...DEFAULT_PROJECT_SETTINGS, ...settings };\n } catch (error) {\n console.warn(\n \"Failed to load project settings:\",\n error instanceof Error ? error.message : \"Unknown error\"\n );\n return { ...DEFAULT_PROJECT_SETTINGS };\n }\n }\n\n /**\n * Save project settings to .x/settings.json\n */\n public saveProjectSettings(settings: Partial<ProjectSettings>): void {\n try {\n this.ensureDirectoryExists(this.projectSettingsPath);\n\n // Read existing settings directly to avoid recursion\n let existingSettings: ProjectSettings = { ...DEFAULT_PROJECT_SETTINGS };\n if (fs.existsSync(this.projectSettingsPath)) {\n try {\n const content = fs.readFileSync(this.projectSettingsPath, \"utf-8\");\n const parsed = JSON.parse(content);\n existingSettings = { ...DEFAULT_PROJECT_SETTINGS, ...parsed };\n } catch (_error) {\n // If file is corrupted, use defaults\n console.warn(\"Corrupted project settings file, using defaults\");\n }\n }\n\n const mergedSettings = { ...existingSettings, ...settings };\n\n fs.writeFileSync(\n this.projectSettingsPath,\n JSON.stringify(mergedSettings, null, 2)\n );\n } catch (error) {\n console.error(\n \"Failed to save project settings:\",\n error instanceof Error ? error.message : \"Unknown error\"\n );\n throw error;\n }\n }\n\n /**\n * Update a specific project setting\n */\n public updateProjectSetting<K extends keyof ProjectSettings>(\n key: K,\n value: ProjectSettings[K]\n ): void {\n const settings = { [key]: value } as Partial<ProjectSettings>;\n this.saveProjectSettings(settings);\n }\n\n /**\n * Get a specific project setting\n */\n public getProjectSetting<K extends keyof ProjectSettings>(\n key: K\n ): ProjectSettings[K] {\n const settings = this.loadProjectSettings();\n return settings[key];\n }\n\n /**\n * Get the current model with proper fallback logic:\n * 1. Environment variable XCLI_MODEL_DEFAULT\n * 2. Project-specific model setting\n * 3. User's default model\n * 4. System default\n */\n public getCurrentModel(): string {\n // First check environment variable for default model\n const envModel = process.env.XCLI_MODEL_DEFAULT;\n if (envModel) {\n return envModel;\n }\n\n const projectModel = this.getProjectSetting(\"model\");\n if (projectModel) {\n return projectModel;\n }\n\n const userDefaultModel = this.getUserSetting(\"defaultModel\");\n if (userDefaultModel) {\n return userDefaultModel;\n }\n\n return DEFAULT_PROJECT_SETTINGS.model || \"grok-4-fast-non-reasoning\";\n }\n\n /**\n * Get the appropriate model for a task based on its characteristics\n * Uses reasoning model for deep tasks, retries, or large contexts\n */\n public pickModel(options: { deep?: boolean; retries?: number; ctxTokens?: number } = {}): string {\n const { deep = false, retries = 0, ctxTokens = 0 } = options;\n\n // Use reasoning model for:\n // - Deep tasks requiring complex reasoning\n // - Tasks that have been retried (indicating complexity)\n // - Tasks with very large context (>150K tokens)\n if (deep || retries > 0 || ctxTokens > 150_000) {\n // First check for reasoning model environment variable\n const reasoningModel = process.env.XCLI_MODEL_REASONING;\n if (reasoningModel) {\n return reasoningModel;\n }\n\n // Default to grok-4-fast-reasoning for complex tasks\n return \"grok-4-fast-reasoning\";\n }\n\n // Use default model for standard tasks\n return this.getCurrentModel();\n }\n\n /**\n * Set the current model for the project\n */\n public setCurrentModel(model: string): void {\n this.updateProjectSetting(\"model\", model);\n }\n\n /**\n * Get available models list from user settings\n */\n public getAvailableModels(): string[] {\n const models = this.getUserSetting(\"models\");\n return models || DEFAULT_USER_SETTINGS.models || [];\n }\n\n /**\n * Get API key from user settings or environment\n */\n public getApiKey(): string | undefined {\n // First check environment variable\n const envApiKey = process.env.X_API_KEY || process.env.GROK_API_KEY;\n if (envApiKey) {\n return envApiKey;\n }\n\n // Then check user settings\n return this.getUserSetting(\"apiKey\");\n }\n\n /**\n * Get base URL from user settings or environment\n */\n public getBaseURL(): string {\n // First check environment variable\n const envBaseURL = process.env.GROK_BASE_URL;\n if (envBaseURL) {\n return envBaseURL;\n }\n\n // Then check user settings\n const userBaseURL = this.getUserSetting(\"baseURL\");\n return (\n userBaseURL || DEFAULT_USER_SETTINGS.baseURL || \"https://api.x.ai/v1\"\n );\n }\n}\n\n/**\n * Convenience function to get the singleton instance\n */\nexport function getSettingsManager(): SettingsManager {\n return SettingsManager.getInstance();\n}\n","import { getSettingsManager } from \"../utils/settings-manager.js\";\nimport { MCPServerConfig } from \"./client.js\";\n\nexport interface MCPConfig {\n servers: MCPServerConfig[];\n}\n\n/**\n * Load MCP configuration from project settings\n */\nexport function loadMCPConfig(): MCPConfig {\n const manager = getSettingsManager();\n const projectSettings = manager.loadProjectSettings();\n const servers = projectSettings.mcpServers ? Object.values(projectSettings.mcpServers) : [];\n return { servers };\n}\n\nexport function saveMCPConfig(config: MCPConfig): void {\n const manager = getSettingsManager();\n const mcpServers: Record<string, MCPServerConfig> = {};\n\n // Convert servers array to object keyed by name\n for (const server of config.servers) {\n mcpServers[server.name] = server;\n }\n\n manager.updateProjectSetting('mcpServers', mcpServers);\n}\n\nexport function addMCPServer(config: MCPServerConfig): void {\n const manager = getSettingsManager();\n const projectSettings = manager.loadProjectSettings();\n const mcpServers = projectSettings.mcpServers || {};\n\n mcpServers[config.name] = config;\n manager.updateProjectSetting('mcpServers', mcpServers);\n}\n\nexport function removeMCPServer(serverName: string): void {\n const manager = getSettingsManager();\n const projectSettings = manager.loadProjectSettings();\n const mcpServers = projectSettings.mcpServers;\n\n if (mcpServers) {\n delete mcpServers[serverName];\n manager.updateProjectSetting('mcpServers', mcpServers);\n }\n}\n\nexport function getMCPServer(serverName: string): MCPServerConfig | undefined {\n const manager = getSettingsManager();\n const projectSettings = manager.loadProjectSettings();\n return projectSettings.mcpServers?.[serverName];\n}\n\n// Predefined server configurations\nexport const PREDEFINED_SERVERS: Record<string, MCPServerConfig> = {};\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { CallToolResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { EventEmitter } from \"events\";\nimport { createTransport, MCPTransport, TransportType, TransportConfig } from \"./transports.js\";\n\nexport interface MCPServerConfig {\n name: string;\n transport: TransportConfig;\n // Legacy support for stdio-only configs\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n}\n\nexport interface MCPTool {\n name: string;\n description: string;\n inputSchema: any;\n serverName: string;\n}\n\nexport class MCPManager extends EventEmitter {\n private clients: Map<string, Client> = new Map();\n private transports: Map<string, MCPTransport> = new Map();\n private tools: Map<string, MCPTool> = new Map();\n\n async addServer(config: MCPServerConfig): Promise<void> {\n try {\n // Handle legacy stdio-only configuration\n let transportConfig = config.transport;\n if (!transportConfig && config.command) {\n transportConfig = {\n type: 'stdio',\n command: config.command,\n args: config.args,\n env: config.env\n };\n }\n\n if (!transportConfig) {\n throw new Error('Transport configuration is required');\n }\n\n // Create transport\n const transport = createTransport(transportConfig);\n this.transports.set(config.name, transport);\n\n // Create client\n const client = new Client(\n {\n name: \"x-cli\",\n version: \"1.0.0\"\n },\n {\n capabilities: {\n tools: {}\n }\n }\n );\n\n this.clients.set(config.name, client);\n\n // Connect\n const sdkTransport = await transport.connect();\n await client.connect(sdkTransport);\n\n // List available tools\n const toolsResult = await client.listTools();\n \n // Register tools\n for (const tool of toolsResult.tools) {\n const mcpTool: MCPTool = {\n name: `mcp__${config.name}__${tool.name}`,\n description: tool.description || `Tool from ${config.name} server`,\n inputSchema: tool.inputSchema,\n serverName: config.name\n };\n this.tools.set(mcpTool.name, mcpTool);\n }\n\n this.emit('serverAdded', config.name, toolsResult.tools.length);\n } catch (error) {\n this.emit('serverError', config.name, error);\n throw error;\n }\n }\n\n async removeServer(serverName: string): Promise<void> {\n // Remove tools\n for (const [toolName, tool] of this.tools.entries()) {\n if (tool.serverName === serverName) {\n this.tools.delete(toolName);\n }\n }\n\n // Disconnect client\n const client = this.clients.get(serverName);\n if (client) {\n await client.close();\n this.clients.delete(serverName);\n }\n\n // Close transport\n const transport = this.transports.get(serverName);\n if (transport) {\n await transport.disconnect();\n this.transports.delete(serverName);\n }\n\n this.emit('serverRemoved', serverName);\n }\n\n async callTool(toolName: string, arguments_: any): Promise<CallToolResult> {\n const tool = this.tools.get(toolName);\n if (!tool) {\n throw new Error(`Tool ${toolName} not found`);\n }\n\n const client = this.clients.get(tool.serverName);\n if (!client) {\n throw new Error(`Server ${tool.serverName} not connected`);\n }\n\n // Extract the original tool name (remove mcp__servername__ prefix)\n const originalToolName = toolName.replace(`mcp__${tool.serverName}__`, '');\n\n const result = await client.callTool({\n name: originalToolName,\n arguments: arguments_\n });\n \n // Ensure the result has the expected content structure\n return {\n ...result,\n content: result.content || []\n } as CallToolResult;\n }\n\n getTools(): MCPTool[] {\n return Array.from(this.tools.values());\n }\n\n getServers(): string[] {\n return Array.from(this.clients.keys());\n }\n\n async shutdown(): Promise<void> {\n const serverNames = Array.from(this.clients.keys());\n await Promise.all(serverNames.map(name => this.removeServer(name)));\n }\n\n getTransportType(serverName: string): TransportType | undefined {\n const transport = this.transports.get(serverName);\n return transport?.getType();\n }\n\n async ensureServersInitialized(): Promise<void> {\n if (this.clients.size > 0) {\n return; // Already initialized\n }\n\n const { loadMCPConfig } = await import('../mcp/config.js');\n const config = loadMCPConfig();\n \n // Initialize servers in parallel to avoid blocking\n const initPromises = config.servers.map(async (serverConfig) => {\n try {\n await this.addServer(serverConfig);\n } catch (error) {\n console.warn(`Failed to initialize MCP server ${serverConfig.name}:`, error);\n }\n });\n \n await Promise.all(initPromises);\n }\n}","import { GrokTool } from \"./client.js\";\nimport { MCPManager, MCPTool } from \"../mcp/client.js\";\nimport { loadMCPConfig } from \"../mcp/config.js\";\n\nconst BASE_GROK_TOOLS: GrokTool[] = [\n {\n type: \"function\",\n function: {\n name: \"view_file\",\n description: \"View file contents or list directories\",\n parameters: {\n type: \"object\",\n properties: {\n path: {\n type: \"string\",\n description: \"File or directory path\",\n },\n start_line: {\n type: \"number\",\n description: \"Optional start line for partial view\",\n },\n end_line: {\n type: \"number\",\n description: \"Optional end line for partial view\",\n },\n },\n required: [\"path\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"create_file\",\n description: \"Create new file with content\",\n parameters: {\n type: \"object\",\n properties: {\n path: {\n type: \"string\",\n description: \"Path where the file should be created\",\n },\n content: {\n type: \"string\",\n description: \"Content to write to the file\",\n },\n },\n required: [\"path\", \"content\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"str_replace_editor\",\n description: \"Replace text in file (single line edits)\",\n parameters: {\n type: \"object\",\n properties: {\n path: {\n type: \"string\",\n description: \"Path to the file to edit\",\n },\n old_str: {\n type: \"string\",\n description:\n \"Text to replace (must match exactly, or will use fuzzy matching for multi-line strings)\",\n },\n new_str: {\n type: \"string\",\n description: \"Text to replace with\",\n },\n replace_all: {\n type: \"boolean\",\n description:\n \"Replace all occurrences (default: false, only replaces first occurrence)\",\n },\n },\n required: [\"path\", \"old_str\", \"new_str\"],\n },\n },\n },\n\n {\n type: \"function\",\n function: {\n name: \"bash\",\n description: \"Execute a bash command\",\n parameters: {\n type: \"object\",\n properties: {\n command: {\n type: \"string\",\n description: \"The bash command to execute\",\n },\n },\n required: [\"command\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"search\",\n description: \"Search for text content or files\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Text to search for or file name/path pattern\",\n },\n search_type: {\n type: \"string\",\n enum: [\"text\", \"files\", \"both\"],\n description:\n \"Type of search: 'text' for content search, 'files' for file names, 'both' for both (default: 'both')\",\n },\n include_pattern: {\n type: \"string\",\n description:\n \"Glob pattern for files to include (e.g. '*.ts', '*.js')\",\n },\n exclude_pattern: {\n type: \"string\",\n description:\n \"Glob pattern for files to exclude (e.g. '*.log', 'node_modules')\",\n },\n case_sensitive: {\n type: \"boolean\",\n description:\n \"Whether search should be case sensitive (default: false)\",\n },\n whole_word: {\n type: \"boolean\",\n description: \"Whether to match whole words only (default: false)\",\n },\n regex: {\n type: \"boolean\",\n description: \"Whether query is a regex pattern (default: false)\",\n },\n max_results: {\n type: \"number\",\n description: \"Maximum number of results to return (default: 50)\",\n },\n file_types: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"File types to search (e.g. ['js', 'ts', 'py'])\",\n },\n include_hidden: {\n type: \"boolean\",\n description: \"Whether to include hidden files (default: false)\",\n },\n },\n required: [\"query\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"create_todo_list\",\n description: \"Create a new todo list for planning and tracking tasks\",\n parameters: {\n type: \"object\",\n properties: {\n todos: {\n type: \"array\",\n description: \"Array of todo items\",\n items: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n description: \"Unique identifier for the todo item\",\n },\n content: {\n type: \"string\",\n description: \"Description of the todo item\",\n },\n status: {\n type: \"string\",\n enum: [\"pending\", \"in_progress\", \"completed\"],\n description: \"Current status of the todo item\",\n },\n priority: {\n type: \"string\",\n enum: [\"high\", \"medium\", \"low\"],\n description: \"Priority level of the todo item\",\n },\n },\n required: [\"id\", \"content\", \"status\", \"priority\"],\n },\n },\n },\n required: [\"todos\"],\n },\n },\n },\n {\n type: \"function\",\n function: {\n name: \"update_todo_list\",\n description: \"Update existing todos in the todo list\",\n parameters: {\n type: \"object\",\n properties: {\n updates: {\n type: \"array\",\n description: \"Array of todo updates\",\n items: {\n type: \"object\",\n properties: {\n id: {\n type: \"string\",\n description: \"ID of the todo item to update\",\n },\n status: {\n type: \"string\",\n enum: [\"pending\", \"in_progress\", \"completed\"],\n description: \"New status for the todo item\",\n },\n content: {\n type: \"string\",\n description: \"New content for the todo item\",\n },\n priority: {\n type: \"string\",\n enum: [\"high\", \"medium\", \"low\"],\n description: \"New priority for the todo item\",\n },\n },\n required: [\"id\"],\n },\n },\n },\n required: [\"updates\"],\n },\n },\n },\n // Intelligence tools\n {\n type: \"function\",\n function: {\n name: \"ast_parser\",\n description: \"Parse source code to extract AST, symbols, imports, exports\",\n parameters: {\n type: \"object\",\n properties: {\n filePath: {\n type: \"string\",\n description: \"Path to the source code file to parse\"\n },\n includeSymbols: {\n type: \"boolean\",\n description: \"Whether to extract symbols (functions, classes, variables, etc.)\",\n default: true\n },\n includeImports: {\n type: \"boolean\", \n description: \"Whether to extract import/export information\",\n default: true\n },\n includeTree: {\n type: \"boolean\",\n description: \"Whether to include the full AST tree in response\",\n default: false\n },\n symbolTypes: {\n type: \"array\",\n items: {\n type: \"string\",\n enum: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\", \"method\", \"property\"]\n },\n description: \"Types of symbols to extract\",\n default: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\"]\n },\n scope: {\n type: \"string\",\n enum: [\"all\", \"global\", \"local\"],\n description: \"Scope of symbols to extract\",\n default: \"all\"\n }\n },\n required: [\"filePath\"]\n }\n }\n },\n {\n type: \"function\",\n function: {\n name: \"symbol_search\",\n description: \"Search for symbols across codebase with fuzzy matching\",\n parameters: {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query for symbol names\"\n },\n searchPath: {\n type: \"string\",\n description: \"Root path to search in\",\n default: \"current working directory\"\n },\n symbolTypes: {\n type: \"array\",\n items: {\n type: \"string\",\n enum: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\", \"method\", \"property\"]\n },\n description: \"Types of symbols to search for\",\n default: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\"]\n },\n includeUsages: {\n type: \"boolean\",\n description: \"Whether to find usages of matched symbols\",\n default: false\n },\n fuzzyMatch: {\n type: \"boolean\",\n description: \"Use fuzzy matching for symbol names\",\n default: true\n },\n caseSensitive: {\n type: \"boolean\", \n description: \"Case sensitive search\",\n default: false\n },\n maxResults: {\n type: \"integer\",\n description: \"Maximum number of results to return\",\n default: 50,\n minimum: 1,\n maximum: 1000\n }\n },\n required: [\"query\"]\n }\n }\n },\n {\n type: \"function\",\n function: {\n name: \"dependency_analyzer\",\n description: \"Analyze dependencies, detect circular imports, generate graphs\",\n parameters: {\n type: \"object\",\n properties: {\n rootPath: {\n type: \"string\",\n description: \"Root path to analyze dependencies from\",\n default: \"current working directory\"\n },\n filePatterns: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Glob patterns for files to include\",\n default: [\"**/*.{ts,tsx,js,jsx}\"]\n },\n excludePatterns: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Glob patterns for files to exclude\",\n default: [\"**/node_modules/**\", \"**/dist/**\", \"**/.git/**\"]\n },\n includeExternals: {\n type: \"boolean\",\n description: \"Include external module dependencies\",\n default: false\n },\n detectCircular: {\n type: \"boolean\",\n description: \"Detect circular dependencies\",\n default: true\n },\n findUnreachable: {\n type: \"boolean\",\n description: \"Find unreachable files from entry points\",\n default: true\n },\n generateGraph: {\n type: \"boolean\",\n description: \"Generate serialized dependency graph\",\n default: false\n }\n },\n required: []\n }\n }\n },\n {\n type: \"function\",\n function: {\n name: \"code_context\",\n description: \"Build code context, analyze relationships, semantic understanding\",\n parameters: {\n type: \"object\",\n properties: {\n filePath: {\n type: \"string\",\n description: \"Path to the file to analyze for context\"\n },\n rootPath: {\n type: \"string\",\n description: \"Root path of the project\",\n default: \"current working directory\"\n },\n includeRelationships: {\n type: \"boolean\",\n description: \"Include code relationships analysis\",\n default: true\n },\n includeMetrics: {\n type: \"boolean\",\n description: \"Include code quality metrics\",\n default: true\n },\n includeSemantics: {\n type: \"boolean\",\n description: \"Include semantic analysis and patterns\",\n default: true\n },\n maxRelatedFiles: {\n type: \"integer\",\n description: \"Maximum number of related files to analyze\",\n default: 10,\n minimum: 1,\n maximum: 50\n }\n },\n required: [\"filePath\"]\n }\n }\n },\n {\n type: \"function\",\n function: {\n name: \"refactoring_assistant\",\n description: \"Perform safe refactoring: rename, extract, inline, move\",\n parameters: {\n type: \"object\",\n properties: {\n operation: {\n type: \"string\",\n enum: [\"rename\", \"extract_function\", \"extract_variable\", \"inline_function\", \"inline_variable\", \"move_function\", \"move_class\"],\n description: \"Type of refactoring operation to perform\"\n },\n symbolName: {\n type: \"string\",\n description: \"Name of symbol to refactor (for rename, inline, move operations)\"\n },\n newName: {\n type: \"string\",\n description: \"New name for symbol (for rename operation)\"\n },\n filePath: {\n type: \"string\",\n description: \"Path to file containing the symbol\"\n },\n scope: {\n type: \"string\",\n enum: [\"file\", \"project\", \"global\"],\n description: \"Scope of refactoring operation\",\n default: \"project\"\n },\n includeComments: {\n type: \"boolean\",\n description: \"Include comments in rename operation\",\n default: false\n },\n includeStrings: {\n type: \"boolean\",\n description: \"Include string literals in rename operation\",\n default: false\n },\n startLine: {\n type: \"integer\",\n description: \"Start line for extract operations\"\n },\n endLine: {\n type: \"integer\",\n description: \"End line for extract operations\"\n },\n functionName: {\n type: \"string\",\n description: \"Name for extracted function\"\n },\n variableName: {\n type: \"string\",\n description: \"Name for extracted variable\"\n }\n },\n required: [\"operation\"]\n }\n }\n }\n];\n\n// Morph Fast Apply tool (conditional)\nconst MORPH_EDIT_TOOL: GrokTool = {\n type: \"function\",\n function: {\n name: \"edit_file\",\n description: \"Use this tool to make an edit to an existing file.\\n\\nThis will be read by a less intelligent model, which will quickly apply the edit. You should make it clear what the edit is, while also minimizing the unchanged code you write.\\nWhen writing the edit, you should specify each edit in sequence, with the special comment // ... existing code ... to represent unchanged code in between edited lines.\\n\\nFor example:\\n\\n// ... existing code ...\\nFIRST_EDIT\\n// ... existing code ...\\nSECOND_EDIT\\n// ... existing code ...\\nTHIRD_EDIT\\n// ... existing code ...\\n\\nYou should still bias towards repeating as few lines of the original file as possible to convey the change.\\nBut, each edit should contain sufficient context of unchanged lines around the code you're editing to resolve ambiguity.\\nDO NOT omit spans of pre-existing code (or comments) without using the // ... existing code ... comment to indicate its absence. If you omit the existing code comment, the model may inadvertently delete these lines.\\nIf you plan on deleting a section, you must provide context before and after to delete it. If the initial code is ```code \\\\n Block 1 \\\\n Block 2 \\\\n Block 3 \\\\n code```, and you want to remove Block 2, you would output ```// ... existing code ... \\\\n Block 1 \\\\n Block 3 \\\\n // ... existing code ...```.\\nMake sure it is clear what the edit should be, and where it should be applied.\\nMake edits to a file in a single edit_file call instead of multiple edit_file calls to the same file. The apply model can handle many distinct edits at once.\",\n parameters: {\n type: \"object\",\n properties: {\n target_file: {\n type: \"string\",\n description: \"The target file to modify.\"\n },\n instructions: {\n type: \"string\",\n description: \"A single sentence instruction describing what you are going to do for the sketched edit. This is used to assist the less intelligent model in applying the edit. Use the first person to describe what you are going to do. Use it to disambiguate uncertainty in the edit.\"\n },\n code_edit: {\n type: \"string\",\n description: \"Specify ONLY the precise lines of code that you wish to edit. NEVER specify or write out unchanged code. Instead, represent all unchanged code using the comment of the language you're editing in - example: // ... existing code ...\"\n }\n },\n required: [\"target_file\", \"instructions\", \"code_edit\"]\n }\n }\n};\n\n// Function to build tools array conditionally\nfunction buildGrokTools(): GrokTool[] {\n const tools = [...BASE_GROK_TOOLS];\n \n // Add Morph Fast Apply tool if API key is available\n if (process.env.MORPH_API_KEY) {\n tools.splice(3, 0, MORPH_EDIT_TOOL); // Insert after str_replace_editor\n }\n \n return tools;\n}\n\n// Export dynamic tools array\nexport const GROK_TOOLS: GrokTool[] = buildGrokTools();\n\n// Global MCP manager instance\nlet mcpManager: MCPManager | null = null;\n\nexport function getMCPManager(): MCPManager {\n if (!mcpManager) {\n mcpManager = new MCPManager();\n }\n return mcpManager;\n}\n\nexport async function initializeMCPServers(): Promise<void> {\n const manager = getMCPManager();\n const config = loadMCPConfig();\n \n // Store original stderr.write\n const originalStderrWrite = process.stderr.write;\n \n // Temporarily suppress stderr to hide verbose MCP connection logs\n process.stderr.write = function(chunk: any, encoding?: any, callback?: any): boolean {\n // Filter out mcp-remote verbose logs\n const chunkStr = chunk.toString();\n if (chunkStr.includes('[') && (\n chunkStr.includes('Using existing client port') ||\n chunkStr.includes('Connecting to remote server') ||\n chunkStr.includes('Using transport strategy') ||\n chunkStr.includes('Connected to remote server') ||\n chunkStr.includes('Local STDIO server running') ||\n chunkStr.includes('Proxy established successfully') ||\n chunkStr.includes('Local→Remote') ||\n chunkStr.includes('Remote→Local')\n )) {\n // Suppress these verbose logs\n if (callback) callback();\n return true;\n }\n \n // Allow other stderr output\n return originalStderrWrite.call(this, chunk, encoding, callback);\n };\n \n try {\n for (const serverConfig of config.servers) {\n try {\n await manager.addServer(serverConfig);\n } catch (error) {\n console.warn(`Failed to initialize MCP server ${serverConfig.name}:`, error);\n }\n }\n } finally {\n // Restore original stderr.write\n process.stderr.write = originalStderrWrite;\n }\n}\n\nexport function convertMCPToolToGrokTool(mcpTool: MCPTool): GrokTool {\n return {\n type: \"function\",\n function: {\n name: mcpTool.name,\n description: mcpTool.description,\n parameters: mcpTool.inputSchema || {\n type: \"object\",\n properties: {},\n required: []\n }\n }\n };\n}\n\nexport function addMCPToolsToGrokTools(baseTools: GrokTool[]): GrokTool[] {\n if (!mcpManager) {\n return baseTools;\n }\n \n const mcpTools = mcpManager.getTools();\n const grokMCPTools = mcpTools.map(convertMCPToolToGrokTool);\n \n return [...baseTools, ...grokMCPTools];\n}\n\nexport async function getAllGrokTools(): Promise<GrokTool[]> {\n const manager = getMCPManager();\n // Try to initialize servers if not already done, but don't block\n manager.ensureServersInitialized().catch(() => {\n // Ignore initialization errors to avoid blocking\n });\n return addMCPToolsToGrokTools(GROK_TOOLS);\n}\n","import { exec } from \"child_process\";\nimport { promisify } from \"util\";\nimport { EventEmitter } from \"events\";\n\nconst execAsync = promisify(exec);\n\nexport interface ConfirmationOptions {\n operation: string;\n filename: string;\n showVSCodeOpen?: boolean;\n content?: string; // Content to show in confirmation dialog\n}\n\nexport interface ConfirmationResult {\n confirmed: boolean;\n dontAskAgain?: boolean;\n feedback?: string;\n}\n\nexport class ConfirmationService extends EventEmitter {\n private static instance: ConfirmationService;\n private skipConfirmationThisSession = false;\n private pendingConfirmation: Promise<ConfirmationResult> | null = null;\n private resolveConfirmation: ((result: ConfirmationResult) => void) | null =\n null;\n\n // Session flags for different operation types\n private sessionFlags = {\n fileOperations: false,\n bashCommands: false,\n allOperations: false,\n };\n\n static getInstance(): ConfirmationService {\n if (!ConfirmationService.instance) {\n ConfirmationService.instance = new ConfirmationService();\n }\n return ConfirmationService.instance;\n }\n\n constructor() {\n super();\n }\n\n async requestConfirmation(\n options: ConfirmationOptions,\n operationType: \"file\" | \"bash\" = \"file\"\n ): Promise<ConfirmationResult> {\n // Check session flags\n if (\n this.sessionFlags.allOperations ||\n (operationType === \"file\" && this.sessionFlags.fileOperations) ||\n (operationType === \"bash\" && this.sessionFlags.bashCommands)\n ) {\n return { confirmed: true };\n }\n\n // If VS Code should be opened, try to open it\n if (options.showVSCodeOpen) {\n try {\n await this.openInVSCode(options.filename);\n } catch (_error) {\n // If VS Code opening fails, continue without it\n options.showVSCodeOpen = false;\n }\n }\n\n // Create a promise that will be resolved by the UI component\n this.pendingConfirmation = new Promise<ConfirmationResult>((resolve) => {\n this.resolveConfirmation = resolve;\n });\n\n // Emit custom event that the UI can listen to (using setImmediate to ensure the UI updates)\n setImmediate(() => {\n this.emit(\"confirmation-requested\", options);\n });\n\n const result = await this.pendingConfirmation;\n\n if (result.dontAskAgain) {\n // Set the appropriate session flag based on operation type\n if (operationType === \"file\") {\n this.sessionFlags.fileOperations = true;\n } else if (operationType === \"bash\") {\n this.sessionFlags.bashCommands = true;\n }\n // Could also set allOperations for global skip\n }\n\n return result;\n }\n\n confirmOperation(confirmed: boolean, dontAskAgain?: boolean): void {\n if (this.resolveConfirmation) {\n this.resolveConfirmation({ confirmed, dontAskAgain });\n this.resolveConfirmation = null;\n this.pendingConfirmation = null;\n }\n }\n\n rejectOperation(feedback?: string): void {\n if (this.resolveConfirmation) {\n this.resolveConfirmation({ confirmed: false, feedback });\n this.resolveConfirmation = null;\n this.pendingConfirmation = null;\n }\n }\n\n private async openInVSCode(filename: string): Promise<void> {\n // Try different VS Code commands\n const commands = [\"code\", \"code-insiders\", \"codium\"];\n\n for (const cmd of commands) {\n try {\n await execAsync(`which ${cmd}`);\n await execAsync(`${cmd} \"${filename}\"`);\n return;\n } catch (_error) {\n // Continue to next command\n continue;\n }\n }\n\n throw new Error(\"VS Code not found\");\n }\n\n isPending(): boolean {\n return this.pendingConfirmation !== null;\n }\n\n resetSession(): void {\n this.sessionFlags = {\n fileOperations: false,\n bashCommands: false,\n allOperations: false,\n };\n }\n\n getSessionFlags() {\n return { ...this.sessionFlags };\n }\n\n setSessionFlag(\n flagType: \"fileOperations\" | \"bashCommands\" | \"allOperations\",\n value: boolean\n ) {\n this.sessionFlags[flagType] = value;\n }\n}\n","import { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { ToolResult } from '../types/index.js';\nimport { ConfirmationService } from '../utils/confirmation-service.js';\n\nconst execAsync = promisify(exec);\n\nexport class BashTool {\n private currentDirectory: string = process.cwd();\n private confirmationService = ConfirmationService.getInstance();\n\n\n async execute(command: string, timeout: number = 60000): Promise<ToolResult> {\n try {\n // Check if user has already accepted bash commands for this session\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.bashCommands && !sessionFlags.allOperations) {\n // Request confirmation showing the command\n const confirmationResult = await this.confirmationService.requestConfirmation({\n operation: 'Run bash command',\n filename: command,\n showVSCodeOpen: false,\n content: `Command: ${command}\\nWorking directory: ${this.currentDirectory}`\n }, 'bash');\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || 'Command execution cancelled by user'\n };\n }\n }\n\n if (command.startsWith('cd ')) {\n const newDir = command.substring(3).trim();\n try {\n process.chdir(newDir);\n this.currentDirectory = process.cwd();\n return {\n success: true,\n output: `Changed directory to: ${this.currentDirectory}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Cannot change directory: ${error.message}`\n };\n }\n }\n\n const { stdout, stderr } = await execAsync(command, {\n cwd: this.currentDirectory,\n timeout,\n maxBuffer: 1024 * 1024 * 10\n });\n\n const output = stdout + (stderr ? `\\nSTDERR: ${stderr}` : '');\n \n return {\n success: true,\n output: output.trim() || 'Command executed successfully (no output)'\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Command failed: ${error.message}`\n };\n }\n }\n\n getCurrentDirectory(): string {\n return this.currentDirectory;\n }\n\n async listFiles(directory: string = '.'): Promise<ToolResult> {\n return this.execute(`ls -la ${directory}`);\n }\n\n async findFiles(pattern: string, directory: string = '.'): Promise<ToolResult> {\n return this.execute(`find ${directory} -name \"${pattern}\" -type f`);\n }\n\n async grep(pattern: string, files: string = '.'): Promise<ToolResult> {\n return this.execute(`grep -r \"${pattern}\" ${files}`);\n }\n}","import * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport * as path from \"path\";\nimport { writeFile as writeFilePromise } from \"fs/promises\";\n\n\nimport { ToolResult, EditorCommand } from \"../types/index.js\";\nimport { ConfirmationService } from \"../utils/confirmation-service.js\";\n\nexport class TextEditorTool {\n private editHistory: EditorCommand[] = [];\n private confirmationService = ConfirmationService.getInstance();\n\n async view(\n filePath: string,\n viewRange?: [number, number]\n ): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n\n if (await pathExists(resolvedPath)) {\n const stats = await ops.promises.stat(resolvedPath);\n\n if (stats.isDirectory()) {\n const files = await ops.promises.readdir(resolvedPath);\n return {\n success: true,\n output: `Directory contents of ${filePath}:\\n${files.join(\"\\n\")}`,\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n if (viewRange) {\n const [start, end] = viewRange;\n const selectedLines = lines.slice(start - 1, end);\n const numberedLines = selectedLines\n .map((line, idx) => `${start + idx}: ${line}`)\n .join(\"\\n\");\n\n return {\n success: true,\n output: `Lines ${start}-${end} of ${filePath}:\\n${numberedLines}`,\n };\n }\n\n const totalLines = lines.length;\n const displayLines = totalLines > 10 ? lines.slice(0, 10) : lines;\n const numberedLines = displayLines\n .map((line, idx) => `${idx + 1}: ${line}`)\n .join(\"\\n\");\n const additionalLinesMessage =\n totalLines > 10 ? `\\n... +${totalLines - 10} lines` : \"\";\n\n return {\n success: true,\n output: `Contents of ${filePath}:\\n${numberedLines}${additionalLinesMessage}`,\n };\n } else {\n return {\n success: false,\n error: `File or directory not found: ${filePath}`,\n };\n }\n } catch (error: any) {\n return {\n success: false,\n error: `Error viewing ${filePath}: ${error.message}`,\n };\n }\n }\n\n async strReplace(\n filePath: string,\n oldStr: string,\n newStr: string,\n replaceAll: boolean = false\n ): Promise<ToolResult> {\n try {\n if (oldStr === \"\") {\n return {\n success: false,\n error: \"oldStr cannot be an empty string\",\n };\n }\n\n const resolvedPath = path.resolve(filePath);\n\n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`,\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, \"utf-8\");\n\n if (!content.includes(oldStr)) {\n if (oldStr.includes('\\n')) {\n const fuzzyResult = this.findFuzzyMatch(content, oldStr);\n if (fuzzyResult) {\n oldStr = fuzzyResult;\n } else {\n return {\n success: false,\n error: `String not found in file. For multi-line replacements, consider using line-based editing.`,\n };\n }\n } else {\n return {\n success: false,\n error: `String not found in file: \"${oldStr}\"`,\n };\n }\n }\n\n const occurrences = (content.match(new RegExp(oldStr.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g')) || []).length;\n \n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const previewContent = replaceAll \n ? content.split(oldStr).join(newStr)\n : content.replace(oldStr, newStr);\n const oldLines = content.split(\"\\n\");\n const newLines = previewContent.split(\"\\n\");\n const diffContent = this.generateDiff(oldLines, newLines, filePath);\n\n const confirmationResult =\n await this.confirmationService.requestConfirmation(\n {\n operation: `Edit file${replaceAll && occurrences > 1 ? ` (${occurrences} occurrences)` : ''}`,\n filename: filePath,\n showVSCodeOpen: false,\n content: diffContent,\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"File edit cancelled by user\",\n };\n }\n }\n\n const newContent = replaceAll\n ? content.split(oldStr).join(newStr)\n : content.replace(oldStr, newStr);\n await writeFilePromise(resolvedPath, newContent, \"utf-8\");\n\n this.editHistory.push({\n command: \"str_replace\",\n path: filePath,\n old_str: oldStr,\n new_str: newStr,\n });\n\n const oldLines = content.split(\"\\n\");\n const newLines = newContent.split(\"\\n\");\n const diff = this.generateDiff(oldLines, newLines, filePath);\n\n return {\n success: true,\n output: diff,\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error replacing text in ${filePath}: ${error.message}`,\n };\n }\n }\n\n async create(filePath: string, content: string): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n\n if (await pathExists(resolvedPath)) {\n return {\n success: false,\n error: `File already exists: ${filePath}`,\n };\n }\n\n // Check if user has already accepted file operations for this session\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n // Create a diff-style preview for file creation\n const contentLines = content.split(\"\\n\");\n const diffContent = [\n `Created ${filePath}`,\n `--- /dev/null`,\n `+++ b/${filePath}`,\n `@@ -0,0 +1,${contentLines.length} @@`,\n ...contentLines.map((line) => `+${line}`),\n ].join(\"\\n\");\n\n const confirmationResult =\n await this.confirmationService.requestConfirmation(\n {\n operation: \"Write\",\n filename: filePath,\n showVSCodeOpen: false,\n content: diffContent,\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error:\n confirmationResult.feedback || \"File creation cancelled by user\",\n };\n }\n }\n\n const dir = path.dirname(resolvedPath);\n await ops.promises.mkdir(dir, { recursive: true });\n await writeFilePromise(resolvedPath, content, \"utf-8\");\n\n this.editHistory.push({\n command: \"create\",\n path: filePath,\n content,\n });\n\n // Generate diff output using the same method as str_replace\n const oldLines: string[] = []; // Empty for new files\n const newLines = content.split(\"\\n\");\n const diff = this.generateDiff(oldLines, newLines, filePath);\n\n return {\n success: true,\n output: diff,\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error creating ${filePath}: ${error.message}`,\n };\n }\n }\n\n async replaceLines(\n filePath: string,\n startLine: number,\n endLine: number,\n newContent: string\n ): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n\n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`,\n };\n }\n\n const fileContent = await ops.promises.readFile(resolvedPath, \"utf-8\");\n const lines = fileContent.split(\"\\n\");\n \n if (startLine < 1 || startLine > lines.length) {\n return {\n success: false,\n error: `Invalid start line: ${startLine}. File has ${lines.length} lines.`,\n };\n }\n \n if (endLine < startLine || endLine > lines.length) {\n return {\n success: false,\n error: `Invalid end line: ${endLine}. Must be between ${startLine} and ${lines.length}.`,\n };\n }\n\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const newLines = [...lines];\n const replacementLines = newContent.split(\"\\n\");\n newLines.splice(startLine - 1, endLine - startLine + 1, ...replacementLines);\n \n const diffContent = this.generateDiff(lines, newLines, filePath);\n\n const confirmationResult =\n await this.confirmationService.requestConfirmation(\n {\n operation: `Replace lines ${startLine}-${endLine}`,\n filename: filePath,\n showVSCodeOpen: false,\n content: diffContent,\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Line replacement cancelled by user\",\n };\n }\n }\n\n const replacementLines = newContent.split(\"\\n\");\n lines.splice(startLine - 1, endLine - startLine + 1, ...replacementLines);\n const newFileContent = lines.join(\"\\n\");\n\n await writeFilePromise(resolvedPath, newFileContent, \"utf-8\");\n\n this.editHistory.push({\n command: \"str_replace\",\n path: filePath,\n old_str: `lines ${startLine}-${endLine}`,\n new_str: newContent,\n });\n\n const oldLines = fileContent.split(\"\\n\");\n const diff = this.generateDiff(oldLines, lines, filePath);\n\n return {\n success: true,\n output: diff,\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error replacing lines in ${filePath}: ${error.message}`,\n };\n }\n }\n\n async insert(\n filePath: string,\n insertLine: number,\n content: string\n ): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n\n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`,\n };\n }\n\n const fileContent = await ops.promises.readFile(resolvedPath, \"utf-8\");\n const lines = fileContent.split(\"\\n\");\n\n lines.splice(insertLine - 1, 0, content);\n const newContent = lines.join(\"\\n\");\n\n await writeFilePromise(resolvedPath, newContent, \"utf-8\");\n\n this.editHistory.push({\n command: \"insert\",\n path: filePath,\n insert_line: insertLine,\n content,\n });\n\n return {\n success: true,\n output: `Successfully inserted content at line ${insertLine} in ${filePath}`,\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error inserting content in ${filePath}: ${error.message}`,\n };\n }\n }\n\n async undoEdit(): Promise<ToolResult> {\n if (this.editHistory.length === 0) {\n return {\n success: false,\n error: \"No edits to undo\",\n };\n }\n\n const lastEdit = this.editHistory.pop()!;\n\n try {\n switch (lastEdit.command) {\n case \"str_replace\":\n if (lastEdit.path && lastEdit.old_str && lastEdit.new_str) {\n const content = await ops.promises.readFile(lastEdit.path, \"utf-8\");\n const revertedContent = content.replace(\n lastEdit.new_str,\n lastEdit.old_str\n );\n await writeFilePromise(lastEdit.path, revertedContent, \"utf-8\");\n }\n break;\n\n case \"create\":\n if (lastEdit.path) {\n await ops.promises.rm(lastEdit.path);\n }\n break;\n\n case \"insert\":\n if (lastEdit.path && lastEdit.insert_line) {\n const content = await ops.promises.readFile(lastEdit.path, \"utf-8\");\n const lines = content.split(\"\\n\");\n lines.splice(lastEdit.insert_line - 1, 1);\n await writeFilePromise(lastEdit.path, lines.join(\"\\n\"), \"utf-8\");\n }\n break;\n }\n\n return {\n success: true,\n output: `Successfully undid ${lastEdit.command} operation`,\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error undoing edit: ${error.message}`,\n };\n }\n }\n\n private findFuzzyMatch(content: string, searchStr: string): string | null {\n const functionMatch = searchStr.match(/function\\s+(\\w+)/);\n if (!functionMatch) return null;\n \n const functionName = functionMatch[1];\n const contentLines = content.split('\\n');\n \n let functionStart = -1;\n for (let i = 0; i < contentLines.length; i++) {\n if (contentLines[i].includes(`function ${functionName}`) && contentLines[i].includes('{')) {\n functionStart = i;\n break;\n }\n }\n \n if (functionStart === -1) return null;\n \n let braceCount = 0;\n let functionEnd = functionStart;\n \n for (let i = functionStart; i < contentLines.length; i++) {\n const line = contentLines[i];\n for (const char of line) {\n if (char === '{') braceCount++;\n if (char === '}') braceCount--;\n }\n \n if (braceCount === 0 && i > functionStart) {\n functionEnd = i;\n break;\n }\n }\n \n const actualFunction = contentLines.slice(functionStart, functionEnd + 1).join('\\n');\n \n const searchNormalized = this.normalizeForComparison(searchStr);\n const actualNormalized = this.normalizeForComparison(actualFunction);\n \n if (this.isSimilarStructure(searchNormalized, actualNormalized)) {\n return actualFunction;\n }\n \n return null;\n }\n \n private normalizeForComparison(str: string): string {\n return str\n .replace(/[\"'`]/g, '\"')\n .replace(/\\s+/g, ' ')\n .replace(/{\\s+/g, '{ ')\n .replace(/\\s+}/g, ' }')\n .replace(/;\\s*/g, ';')\n .trim();\n }\n \n private isSimilarStructure(search: string, actual: string): boolean {\n const extractTokens = (str: string) => {\n const tokens = str.match(/\\b(function|console\\.log|return|if|else|for|while)\\b/g) || [];\n return tokens;\n };\n \n const searchTokens = extractTokens(search);\n const actualTokens = extractTokens(actual);\n \n if (searchTokens.length !== actualTokens.length) return false;\n \n for (let i = 0; i < searchTokens.length; i++) {\n if (searchTokens[i] !== actualTokens[i]) return false;\n }\n \n return true;\n }\n\n private generateDiff(\n oldLines: string[],\n newLines: string[],\n filePath: string\n ): string {\n const CONTEXT_LINES = 3;\n \n const changes: Array<{\n oldStart: number;\n oldEnd: number;\n newStart: number;\n newEnd: number;\n }> = [];\n \n let i = 0, j = 0;\n \n while (i < oldLines.length || j < newLines.length) {\n while (i < oldLines.length && j < newLines.length && oldLines[i] === newLines[j]) {\n i++;\n j++;\n }\n \n if (i < oldLines.length || j < newLines.length) {\n const changeStart = { old: i, new: j };\n \n let oldEnd = i;\n let newEnd = j;\n \n while (oldEnd < oldLines.length || newEnd < newLines.length) {\n let matchFound = false;\n let matchLength = 0;\n \n for (let k = 0; k < Math.min(2, oldLines.length - oldEnd, newLines.length - newEnd); k++) {\n if (oldEnd + k < oldLines.length && \n newEnd + k < newLines.length && \n oldLines[oldEnd + k] === newLines[newEnd + k]) {\n matchLength++;\n } else {\n break;\n }\n }\n \n if (matchLength >= 2 || (oldEnd >= oldLines.length && newEnd >= newLines.length)) {\n matchFound = true;\n }\n \n if (matchFound) {\n break;\n }\n \n if (oldEnd < oldLines.length) oldEnd++;\n if (newEnd < newLines.length) newEnd++;\n }\n \n changes.push({\n oldStart: changeStart.old,\n oldEnd: oldEnd,\n newStart: changeStart.new,\n newEnd: newEnd\n });\n \n i = oldEnd;\n j = newEnd;\n }\n }\n \n const hunks: Array<{\n oldStart: number;\n oldCount: number;\n newStart: number;\n newCount: number;\n lines: Array<{ type: '+' | '-' | ' '; content: string }>;\n }> = [];\n \n let accumulatedOffset = 0;\n \n for (let changeIdx = 0; changeIdx < changes.length; changeIdx++) {\n const change = changes[changeIdx];\n \n let contextStart = Math.max(0, change.oldStart - CONTEXT_LINES);\n let contextEnd = Math.min(oldLines.length, change.oldEnd + CONTEXT_LINES);\n \n if (hunks.length > 0) {\n const lastHunk = hunks[hunks.length - 1];\n const lastHunkEnd = lastHunk.oldStart + lastHunk.oldCount;\n \n if (lastHunkEnd >= contextStart) {\n const oldHunkEnd = lastHunk.oldStart + lastHunk.oldCount;\n const newContextEnd = Math.min(oldLines.length, change.oldEnd + CONTEXT_LINES);\n \n for (let idx = oldHunkEnd; idx < change.oldStart; idx++) {\n lastHunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n for (let idx = change.oldStart; idx < change.oldEnd; idx++) {\n lastHunk.lines.push({ type: '-', content: oldLines[idx] });\n }\n for (let idx = change.newStart; idx < change.newEnd; idx++) {\n lastHunk.lines.push({ type: '+', content: newLines[idx] });\n }\n \n for (let idx = change.oldEnd; idx < newContextEnd && idx < oldLines.length; idx++) {\n lastHunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n lastHunk.oldCount = newContextEnd - lastHunk.oldStart;\n lastHunk.newCount = lastHunk.oldCount + (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart);\n \n continue;\n }\n }\n \n const hunk: typeof hunks[0] = {\n oldStart: contextStart + 1,\n oldCount: contextEnd - contextStart,\n newStart: contextStart + 1 + accumulatedOffset,\n newCount: contextEnd - contextStart + (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart),\n lines: []\n };\n \n for (let idx = contextStart; idx < change.oldStart; idx++) {\n hunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n for (let idx = change.oldStart; idx < change.oldEnd; idx++) {\n hunk.lines.push({ type: '-', content: oldLines[idx] });\n }\n \n for (let idx = change.newStart; idx < change.newEnd; idx++) {\n hunk.lines.push({ type: '+', content: newLines[idx] });\n }\n \n for (let idx = change.oldEnd; idx < contextEnd && idx < oldLines.length; idx++) {\n hunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n hunks.push(hunk);\n \n accumulatedOffset += (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart);\n }\n \n let addedLines = 0;\n let removedLines = 0;\n \n for (const hunk of hunks) {\n for (const line of hunk.lines) {\n if (line.type === '+') addedLines++;\n if (line.type === '-') removedLines++;\n }\n }\n \n let summary = `Updated ${filePath}`;\n if (addedLines > 0 && removedLines > 0) {\n summary += ` with ${addedLines} addition${\n addedLines !== 1 ? \"s\" : \"\"\n } and ${removedLines} removal${removedLines !== 1 ? \"s\" : \"\"}`;\n } else if (addedLines > 0) {\n summary += ` with ${addedLines} addition${addedLines !== 1 ? \"s\" : \"\"}`;\n } else if (removedLines > 0) {\n summary += ` with ${removedLines} removal${\n removedLines !== 1 ? \"s\" : \"\"\n }`;\n } else if (changes.length === 0) {\n return `No changes in ${filePath}`;\n }\n \n let diff = summary + \"\\n\";\n diff += `--- a/${filePath}\\n`;\n diff += `+++ b/${filePath}\\n`;\n \n for (const hunk of hunks) {\n diff += `@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@\\n`;\n \n for (const line of hunk.lines) {\n diff += `${line.type}${line.content}\\n`;\n }\n }\n \n return diff.trim();\n }\n\n getEditHistory(): EditorCommand[] {\n return [...this.editHistory];\n }\n}\n","import * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport * as path from \"path\";\nimport axios from \"axios\";\nimport { ToolResult } from \"../types/index.js\";\nimport { ConfirmationService } from \"../utils/confirmation-service.js\";\n\nexport class MorphEditorTool {\n private confirmationService = ConfirmationService.getInstance();\n private morphApiKey: string;\n private morphBaseUrl: string = \"https://api.morphllm.com/v1\";\n\n constructor(apiKey?: string) {\n this.morphApiKey = apiKey || process.env.MORPH_API_KEY || \"\";\n if (!this.morphApiKey) {\n console.warn(\"MORPH_API_KEY not found. Morph editor functionality will be limited.\");\n }\n }\n\n /**\n * Use this tool to make an edit to an existing file.\n * \n * This will be read by a less intelligent model, which will quickly apply the edit. You should make it clear what the edit is, while also minimizing the unchanged code you write.\n * When writing the edit, you should specify each edit in sequence, with the special comment // ... existing code ... to represent unchanged code in between edited lines.\n * \n * For example:\n * \n * // ... existing code ...\n * FIRST_EDIT\n * // ... existing code ...\n * SECOND_EDIT\n * // ... existing code ...\n * THIRD_EDIT\n * // ... existing code ...\n * \n * You should still bias towards repeating as few lines of the original file as possible to convey the change.\n * But, each edit should contain sufficient context of unchanged lines around the code you're editing to resolve ambiguity.\n * DO NOT omit spans of pre-existing code (or comments) without using the // ... existing code ... comment to indicate its absence. If you omit the existing code comment, the model may inadvertently delete these lines.\n * If you plan on deleting a section, you must provide context before and after to delete it. If the initial code is ```code \\n Block 1 \\n Block 2 \\n Block 3 \\n code```, and you want to remove Block 2, you would output ```// ... existing code ... \\n Block 1 \\n Block 3 \\n // ... existing code ...```.\n * Make sure it is clear what the edit should be, and where it should be applied.\n * Make edits to a file in a single edit_file call instead of multiple edit_file calls to the same file. The apply model can handle many distinct edits at once.\n */\n async editFile(\n targetFile: string,\n instructions: string,\n codeEdit: string\n ): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(targetFile);\n\n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${targetFile}`,\n };\n }\n\n if (!this.morphApiKey) {\n return {\n success: false,\n error: \"MORPH_API_KEY not configured. Please set your Morph API key.\",\n };\n }\n\n // Read the initial code\n const initialCode = await ops.promises.readFile(resolvedPath, \"utf-8\");\n\n // Check user confirmation before proceeding\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: \"Edit file with Morph Fast Apply\",\n filename: targetFile,\n showVSCodeOpen: false,\n content: `Instructions: ${instructions}\\n\\nEdit:\\n${codeEdit}`,\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"File edit cancelled by user\",\n };\n }\n }\n\n // Call Morph Fast Apply API\n const mergedCode = await this.callMorphApply(instructions, initialCode, codeEdit);\n\n // Write the merged code back to file\n await ops.promises.writeFile(resolvedPath, mergedCode, \"utf-8\");\n\n // Generate diff for display\n const oldLines = initialCode.split(\"\\n\");\n const newLines = mergedCode.split(\"\\n\");\n const diff = this.generateDiff(oldLines, newLines, targetFile);\n\n return {\n success: true,\n output: diff,\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error editing ${targetFile} with Morph: ${error.message}`,\n };\n }\n }\n\n private async callMorphApply(\n instructions: string,\n initialCode: string,\n editSnippet: string\n ): Promise<string> {\n try {\n const response = await axios.post(`${this.morphBaseUrl}/chat/completions`, {\n model: \"morph-v3-large\",\n messages: [\n {\n role: \"user\",\n content: `<instruction>${instructions}</instruction>\\n<code>${initialCode}</code>\\n<update>${editSnippet}</update>`,\n },\n ],\n }, {\n headers: {\n \"Authorization\": `Bearer ${this.morphApiKey}`,\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (!response.data.choices || !response.data.choices[0] || !response.data.choices[0].message) {\n throw new Error(\"Invalid response format from Morph API\");\n }\n\n return response.data.choices[0].message.content;\n } catch (error: any) {\n if (error.response) {\n throw new Error(`Morph API error (${error.response.status}): ${error.response.data}`);\n }\n throw error;\n }\n }\n\n private generateDiff(\n oldLines: string[],\n newLines: string[],\n filePath: string\n ): string {\n const CONTEXT_LINES = 3;\n \n const changes: Array<{\n oldStart: number;\n oldEnd: number;\n newStart: number;\n newEnd: number;\n }> = [];\n \n let i = 0, j = 0;\n \n while (i < oldLines.length || j < newLines.length) {\n while (i < oldLines.length && j < newLines.length && oldLines[i] === newLines[j]) {\n i++;\n j++;\n }\n \n if (i < oldLines.length || j < newLines.length) {\n const changeStart = { old: i, new: j };\n \n let oldEnd = i;\n let newEnd = j;\n \n while (oldEnd < oldLines.length || newEnd < newLines.length) {\n let matchFound = false;\n let matchLength = 0;\n \n for (let k = 0; k < Math.min(2, oldLines.length - oldEnd, newLines.length - newEnd); k++) {\n if (oldEnd + k < oldLines.length && \n newEnd + k < newLines.length && \n oldLines[oldEnd + k] === newLines[newEnd + k]) {\n matchLength++;\n } else {\n break;\n }\n }\n \n if (matchLength >= 2 || (oldEnd >= oldLines.length && newEnd >= newLines.length)) {\n matchFound = true;\n }\n \n if (matchFound) {\n break;\n }\n \n if (oldEnd < oldLines.length) oldEnd++;\n if (newEnd < newLines.length) newEnd++;\n }\n \n changes.push({\n oldStart: changeStart.old,\n oldEnd: oldEnd,\n newStart: changeStart.new,\n newEnd: newEnd\n });\n \n i = oldEnd;\n j = newEnd;\n }\n }\n \n const hunks: Array<{\n oldStart: number;\n oldCount: number;\n newStart: number;\n newCount: number;\n lines: Array<{ type: '+' | '-' | ' '; content: string }>;\n }> = [];\n \n let accumulatedOffset = 0;\n \n for (let changeIdx = 0; changeIdx < changes.length; changeIdx++) {\n const change = changes[changeIdx];\n \n let contextStart = Math.max(0, change.oldStart - CONTEXT_LINES);\n let contextEnd = Math.min(oldLines.length, change.oldEnd + CONTEXT_LINES);\n \n if (hunks.length > 0) {\n const lastHunk = hunks[hunks.length - 1];\n const lastHunkEnd = lastHunk.oldStart + lastHunk.oldCount;\n \n if (lastHunkEnd >= contextStart) {\n const oldHunkEnd = lastHunk.oldStart + lastHunk.oldCount;\n const newContextEnd = Math.min(oldLines.length, change.oldEnd + CONTEXT_LINES);\n \n for (let idx = oldHunkEnd; idx < change.oldStart; idx++) {\n lastHunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n for (let idx = change.oldStart; idx < change.oldEnd; idx++) {\n lastHunk.lines.push({ type: '-', content: oldLines[idx] });\n }\n for (let idx = change.newStart; idx < change.newEnd; idx++) {\n lastHunk.lines.push({ type: '+', content: newLines[idx] });\n }\n \n for (let idx = change.oldEnd; idx < newContextEnd && idx < oldLines.length; idx++) {\n lastHunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n lastHunk.oldCount = newContextEnd - lastHunk.oldStart;\n lastHunk.newCount = lastHunk.oldCount + (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart);\n \n continue;\n }\n }\n \n const hunk: typeof hunks[0] = {\n oldStart: contextStart + 1,\n oldCount: contextEnd - contextStart,\n newStart: contextStart + 1 + accumulatedOffset,\n newCount: contextEnd - contextStart + (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart),\n lines: []\n };\n \n for (let idx = contextStart; idx < change.oldStart; idx++) {\n hunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n for (let idx = change.oldStart; idx < change.oldEnd; idx++) {\n hunk.lines.push({ type: '-', content: oldLines[idx] });\n }\n \n for (let idx = change.newStart; idx < change.newEnd; idx++) {\n hunk.lines.push({ type: '+', content: newLines[idx] });\n }\n \n for (let idx = change.oldEnd; idx < contextEnd && idx < oldLines.length; idx++) {\n hunk.lines.push({ type: ' ', content: oldLines[idx] });\n }\n \n hunks.push(hunk);\n \n accumulatedOffset += (change.newEnd - change.newStart) - (change.oldEnd - change.oldStart);\n }\n \n let addedLines = 0;\n let removedLines = 0;\n \n for (const hunk of hunks) {\n for (const line of hunk.lines) {\n if (line.type === '+') addedLines++;\n if (line.type === '-') removedLines++;\n }\n }\n \n let summary = `Updated ${filePath} with Morph Fast Apply`;\n if (addedLines > 0 && removedLines > 0) {\n summary += ` - ${addedLines} addition${\n addedLines !== 1 ? \"s\" : \"\"\n } and ${removedLines} removal${removedLines !== 1 ? \"s\" : \"\"}`;\n } else if (addedLines > 0) {\n summary += ` - ${addedLines} addition${addedLines !== 1 ? \"s\" : \"\"}`;\n } else if (removedLines > 0) {\n summary += ` - ${removedLines} removal${\n removedLines !== 1 ? \"s\" : \"\"\n }`;\n } else if (changes.length === 0) {\n return `No changes applied to ${filePath}`;\n }\n \n let diff = summary + \"\\n\";\n diff += `--- a/${filePath}\\n`;\n diff += `+++ b/${filePath}\\n`;\n \n for (const hunk of hunks) {\n diff += `@@ -${hunk.oldStart},${hunk.oldCount} +${hunk.newStart},${hunk.newCount} @@\\n`;\n \n for (const line of hunk.lines) {\n diff += `${line.type}${line.content}\\n`;\n }\n }\n \n return diff.trim();\n }\n\n async view(\n filePath: string,\n viewRange?: [number, number]\n ): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n\n if (await pathExists(resolvedPath)) {\n const stats = await ops.promises.stat(resolvedPath);\n\n if (stats.isDirectory()) {\n const files = await ops.promises.readdir(resolvedPath);\n return {\n success: true,\n output: `Directory contents of ${filePath}:\\n${files.join(\"\\n\")}`,\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n if (viewRange) {\n const [start, end] = viewRange;\n const selectedLines = lines.slice(start - 1, end);\n const numberedLines = selectedLines\n .map((line, idx) => `${start + idx}: ${line}`)\n .join(\"\\n\");\n\n return {\n success: true,\n output: `Lines ${start}-${end} of ${filePath}:\\n${numberedLines}`,\n };\n }\n\n const totalLines = lines.length;\n const displayLines = totalLines > 10 ? lines.slice(0, 10) : lines;\n const numberedLines = displayLines\n .map((line, idx) => `${idx + 1}: ${line}`)\n .join(\"\\n\");\n const additionalLinesMessage =\n totalLines > 10 ? `\\n... +${totalLines - 10} lines` : \"\";\n\n return {\n success: true,\n output: `Contents of ${filePath}:\\n${numberedLines}${additionalLinesMessage}`,\n };\n } else {\n return {\n success: false,\n error: `File or directory not found: ${filePath}`,\n };\n }\n } catch (error: any) {\n return {\n success: false,\n error: `Error viewing ${filePath}: ${error.message}`,\n };\n }\n }\n\n setApiKey(apiKey: string): void {\n this.morphApiKey = apiKey;\n }\n\n getApiKey(): string {\n return this.morphApiKey;\n }\n}","import { ToolResult } from '../types/index.js';\n\ninterface TodoItem {\n id: string;\n content: string;\n status: 'pending' | 'in_progress' | 'completed';\n priority: 'high' | 'medium' | 'low';\n}\n\nexport class TodoTool {\n private todos: TodoItem[] = [];\n\n formatTodoList(): string {\n if (this.todos.length === 0) {\n return 'No todos created yet';\n }\n\n const getCheckbox = (status: string): string => {\n switch (status) {\n case 'completed':\n return '●';\n case 'in_progress':\n return '◐';\n case 'pending':\n return '○';\n default:\n return '○';\n }\n };\n\n const getStatusColor = (status: string): string => {\n switch (status) {\n case 'completed':\n return '\\x1b[32m'; // Green\n case 'in_progress':\n return '\\x1b[36m'; // Cyan\n case 'pending':\n return '\\x1b[37m'; // White/default\n default:\n return '\\x1b[0m'; // Reset\n }\n };\n\n const reset = '\\x1b[0m';\n let output = '';\n\n this.todos.forEach((todo, index) => {\n const checkbox = getCheckbox(todo.status);\n const statusColor = getStatusColor(todo.status);\n const strikethrough = todo.status === 'completed' ? '\\x1b[9m' : '';\n const indent = index === 0 ? '' : ' ';\n \n output += `${indent}${statusColor}${strikethrough}${checkbox} ${todo.content}${reset}\\n`;\n });\n\n return output;\n }\n\n async createTodoList(todos: TodoItem[]): Promise<ToolResult> {\n try {\n // Validate todos\n for (const todo of todos) {\n if (!todo.id || !todo.content || !todo.status || !todo.priority) {\n return {\n success: false,\n error: 'Each todo must have id, content, status, and priority fields'\n };\n }\n\n if (!['pending', 'in_progress', 'completed'].includes(todo.status)) {\n return {\n success: false,\n error: `Invalid status: ${todo.status}. Must be pending, in_progress, or completed`\n };\n }\n\n if (!['high', 'medium', 'low'].includes(todo.priority)) {\n return {\n success: false,\n error: `Invalid priority: ${todo.priority}. Must be high, medium, or low`\n };\n }\n }\n\n this.todos = todos;\n \n return {\n success: true,\n output: this.formatTodoList()\n };\n } catch (error) {\n return {\n success: false,\n error: `Error creating todo list: ${error instanceof Error ? error.message : String(error)}`\n };\n }\n }\n\n async updateTodoList(updates: { id: string; status?: string; content?: string; priority?: string }[]): Promise<ToolResult> {\n try {\n const updatedIds: string[] = [];\n\n for (const update of updates) {\n const todoIndex = this.todos.findIndex(t => t.id === update.id);\n \n if (todoIndex === -1) {\n return {\n success: false,\n error: `Todo with id ${update.id} not found`\n };\n }\n\n const todo = this.todos[todoIndex];\n\n if (update.status && !['pending', 'in_progress', 'completed'].includes(update.status)) {\n return {\n success: false,\n error: `Invalid status: ${update.status}. Must be pending, in_progress, or completed`\n };\n }\n\n if (update.priority && !['high', 'medium', 'low'].includes(update.priority)) {\n return {\n success: false,\n error: `Invalid priority: ${update.priority}. Must be high, medium, or low`\n };\n }\n\n if (update.status) todo.status = update.status as any;\n if (update.content) todo.content = update.content;\n if (update.priority) todo.priority = update.priority as any;\n\n updatedIds.push(update.id);\n }\n\n return {\n success: true,\n output: this.formatTodoList()\n };\n } catch (error) {\n return {\n success: false,\n error: `Error updating todo list: ${error instanceof Error ? error.message : String(error)}`\n };\n }\n }\n\n async viewTodoList(): Promise<ToolResult> {\n return {\n success: true,\n output: this.formatTodoList()\n };\n }\n}","import { ToolResult } from '../types/index.js';\nimport { ConfirmationService, ConfirmationOptions } from '../utils/confirmation-service.js';\n\nexport interface ConfirmationRequest {\n operation: string;\n filename: string;\n description?: string;\n showVSCodeOpen?: boolean;\n autoAccept?: boolean;\n}\n\nexport class ConfirmationTool {\n private confirmationService: ConfirmationService;\n\n constructor() {\n this.confirmationService = ConfirmationService.getInstance();\n }\n\n async requestConfirmation(request: ConfirmationRequest): Promise<ToolResult> {\n try {\n // If autoAccept is true, skip the confirmation dialog\n if (request.autoAccept) {\n return {\n success: true,\n output: `Auto-accepted: ${request.operation}(${request.filename})${request.description ? ` - ${request.description}` : ''}`\n };\n }\n\n const options: ConfirmationOptions = {\n operation: request.operation,\n filename: request.filename,\n showVSCodeOpen: request.showVSCodeOpen || false\n };\n\n // Determine operation type based on operation name\n const operationType = request.operation.toLowerCase().includes('bash') ? 'bash' : 'file';\n const result = await this.confirmationService.requestConfirmation(options, operationType);\n\n if (result.confirmed) {\n return {\n success: true,\n output: `User confirmed: ${request.operation}(${request.filename})${request.description ? ` - ${request.description}` : ''}${result.dontAskAgain ? ' (Don\\'t ask again enabled)' : ''}`\n };\n } else {\n return {\n success: false,\n error: result.feedback || `User rejected: ${request.operation}(${request.filename})`\n };\n }\n } catch (error: any) {\n return {\n success: false,\n error: `Confirmation error: ${error.message}`\n };\n }\n }\n\n async checkSessionAcceptance(): Promise<ToolResult> {\n try {\n const sessionFlags = this.confirmationService.getSessionFlags();\n // Return structured data without JSON output to avoid displaying raw JSON\n return {\n success: true,\n data: {\n fileOperationsAccepted: sessionFlags.fileOperations,\n bashCommandsAccepted: sessionFlags.bashCommands,\n allOperationsAccepted: sessionFlags.allOperations,\n hasAnyAcceptance: sessionFlags.fileOperations || sessionFlags.bashCommands || sessionFlags.allOperations\n }\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error checking session acceptance: ${error.message}`\n };\n }\n }\n\n resetSession(): void {\n this.confirmationService.resetSession();\n }\n\n isPending(): boolean {\n return this.confirmationService.isPending();\n }\n}","import { spawn, execSync } from \"child_process\";\nimport { ToolResult } from \"../types/index.js\";\nimport { ConfirmationService } from \"../utils/confirmation-service.js\";\nimport * as ops from \"fs\";\n\n\nimport * as path from \"path\";\n\nexport interface SearchResult {\n file: string;\n line: number;\n column: number;\n text: string;\n match: string;\n}\n\nexport interface FileSearchResult {\n path: string;\n name: string;\n score: number;\n}\n\nexport interface UnifiedSearchResult {\n type: \"text\" | \"file\";\n file: string;\n line?: number;\n column?: number;\n text?: string;\n match?: string;\n score?: number;\n}\n\nexport class SearchTool {\n private confirmationService = ConfirmationService.getInstance();\n private currentDirectory: string = process.cwd();\n\n /**\n * Unified search method that can search for text content or find files\n */\n async search(\n query: string,\n options: {\n searchType?: \"text\" | \"files\" | \"both\";\n includePattern?: string;\n excludePattern?: string;\n caseSensitive?: boolean;\n wholeWord?: boolean;\n regex?: boolean;\n maxResults?: number;\n fileTypes?: string[];\n excludeFiles?: string[];\n includeHidden?: boolean;\n } = {}\n ): Promise<ToolResult> {\n try {\n const searchType = options.searchType || \"both\";\n const results: UnifiedSearchResult[] = [];\n\n // Search for text content if requested\n if (searchType === \"text\" || searchType === \"both\") {\n const textResults = await this.executeRipgrep(query, options);\n results.push(\n ...textResults.map((r) => ({\n type: \"text\" as const,\n file: r.file,\n line: r.line,\n column: r.column,\n text: r.text,\n match: r.match,\n }))\n );\n }\n\n // Search for files if requested\n if (searchType === \"files\" || searchType === \"both\") {\n const fileResults = await this.findFilesByPattern(query, options);\n results.push(\n ...fileResults.map((r) => ({\n type: \"file\" as const,\n file: r.path,\n score: r.score,\n }))\n );\n }\n\n if (results.length === 0) {\n return {\n success: true,\n output: `No results found for \"${query}\"`,\n };\n }\n\n const formattedOutput = this.formatUnifiedResults(\n results,\n query,\n searchType\n );\n\n return {\n success: true,\n output: formattedOutput,\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Search error: ${error.message}`,\n };\n }\n }\n\n /**\n * Execute ripgrep command with specified options\n */\n private async executeRipgrep(\n query: string,\n options: {\n includePattern?: string;\n excludePattern?: string;\n caseSensitive?: boolean;\n wholeWord?: boolean;\n regex?: boolean;\n maxResults?: number;\n fileTypes?: string[];\n excludeFiles?: string[];\n }\n ): Promise<SearchResult[]> {\n return new Promise((resolve, reject) => {\n // Check if ripgrep is installed\n try {\n execSync('which rg', { stdio: 'ignore' });\n } catch {\n reject(new Error('ripgrep is not installed. Please install it to use text search. Visit https://github.com/BurntSushi/ripgrep#installation'));\n return;\n }\n\n // If ripgrep is available, proceed with search\n const args = [\n \"--json\",\n \"--with-filename\",\n \"--line-number\",\n \"--column\",\n \"--no-heading\",\n \"--color=never\",\n ];\n\n // Add case sensitivity\n if (!options.caseSensitive) {\n args.push(\"--ignore-case\");\n }\n\n // Add whole word matching\n if (options.wholeWord) {\n args.push(\"--word-regexp\");\n }\n\n // Add regex mode\n if (!options.regex) {\n args.push(\"--fixed-strings\");\n }\n\n // Add max results limit\n if (options.maxResults) {\n args.push(\"--max-count\", options.maxResults.toString());\n }\n\n // Add file type filters\n if (options.fileTypes) {\n options.fileTypes.forEach((type) => {\n args.push(\"--type\", type);\n });\n }\n\n // Add include pattern\n if (options.includePattern) {\n args.push(\"--glob\", options.includePattern);\n }\n\n // Add exclude pattern\n if (options.excludePattern) {\n args.push(\"--glob\", `!${options.excludePattern}`);\n }\n\n // Add exclude files\n if (options.excludeFiles) {\n options.excludeFiles.forEach((file) => {\n args.push(\"--glob\", `!${file}`);\n });\n }\n\n // Respect gitignore and common ignore patterns\n args.push(\n \"--no-require-git\",\n \"--follow\",\n \"--glob\",\n \"!.git/**\",\n \"--glob\",\n \"!node_modules/**\",\n \"--glob\",\n \"!.DS_Store\",\n \"--glob\",\n \"!*.log\"\n );\n\n // Add query and search directory\n args.push(query, this.currentDirectory);\n\n const rg = spawn(\"rg\", args);\n let output = \"\";\n let errorOutput = \"\";\n\n rg.stdout.on(\"data\", (data) => {\n output += data.toString();\n });\n\n rg.stderr.on(\"data\", (data) => {\n errorOutput += data.toString();\n });\n\n rg.on(\"close\", (code) => {\n if (code === 0 || code === 1) {\n // 0 = found, 1 = not found\n const results = this.parseRipgrepOutput(output);\n resolve(results);\n } else {\n reject(new Error(`Ripgrep failed with code ${code}: ${errorOutput}`));\n }\n });\n\n rg.on(\"error\", (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Parse ripgrep JSON output into SearchResult objects\n */\n private parseRipgrepOutput(output: string): SearchResult[] {\n const results: SearchResult[] = [];\n const lines = output\n .trim()\n .split(\"\\n\")\n .filter((line) => line.length > 0);\n\n for (const line of lines) {\n try {\n const parsed = JSON.parse(line);\n if (parsed.type === \"match\") {\n const data = parsed.data;\n results.push({\n file: data.path.text,\n line: data.line_number,\n column: data.submatches[0]?.start || 0,\n text: data.lines.text.trim(),\n match: data.submatches[0]?.match?.text || \"\",\n });\n }\n } catch (_e) {\n // Skip invalid JSON lines\n continue;\n }\n }\n\n return results;\n }\n\n /**\n * Find files by pattern using a simple file walking approach\n */\n private async findFilesByPattern(\n pattern: string,\n options: {\n maxResults?: number;\n includeHidden?: boolean;\n excludePattern?: string;\n }\n ): Promise<FileSearchResult[]> {\n const files: FileSearchResult[] = [];\n const maxResults = options.maxResults || 50;\n const searchPattern = pattern.toLowerCase();\n\n const walkDir = async (dir: string, depth: number = 0): Promise<void> => {\n if (depth > 10 || files.length >= maxResults) return; // Prevent infinite recursion and limit results\n\n try {\n const entries = await ops.promises.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (files.length >= maxResults) break;\n\n const fullPath = path.join(dir, entry.name);\n const relativePath = path.relative(this.currentDirectory, fullPath);\n\n // Skip hidden files unless explicitly included\n if (!options.includeHidden && entry.name.startsWith(\".\")) {\n continue;\n }\n\n // Skip common directories\n if (\n entry.isDirectory() &&\n [\n \"node_modules\",\n \".git\",\n \".svn\",\n \".hg\",\n \"dist\",\n \"build\",\n \".next\",\n \".cache\",\n ].includes(entry.name)\n ) {\n continue;\n }\n\n // Apply exclude pattern\n if (\n options.excludePattern &&\n relativePath.includes(options.excludePattern)\n ) {\n continue;\n }\n\n if (entry.isFile()) {\n const score = this.calculateFileScore(\n entry.name,\n relativePath,\n searchPattern\n );\n if (score > 0) {\n files.push({\n path: relativePath,\n name: entry.name,\n score,\n });\n }\n } else if (entry.isDirectory()) {\n await walkDir(fullPath, depth + 1);\n }\n }\n } catch (_error) {\n // Skip directories we can't read\n }\n };\n\n await walkDir(this.currentDirectory);\n\n // Sort by score (descending) and return top results\n return files.sort((a, b) => b.score - a.score).slice(0, maxResults);\n }\n\n /**\n * Calculate fuzzy match score for file names\n */\n private calculateFileScore(\n fileName: string,\n filePath: string,\n pattern: string\n ): number {\n const lowerFileName = fileName.toLowerCase();\n const lowerFilePath = filePath.toLowerCase();\n\n // Exact matches get highest score\n if (lowerFileName === pattern) return 100;\n if (lowerFileName.includes(pattern)) return 80;\n\n // Path matches get medium score\n if (lowerFilePath.includes(pattern)) return 60;\n\n // Fuzzy matching - check if all characters of pattern exist in order\n let patternIndex = 0;\n for (\n let i = 0;\n i < lowerFileName.length && patternIndex < pattern.length;\n i++\n ) {\n if (lowerFileName[i] === pattern[patternIndex]) {\n patternIndex++;\n }\n }\n\n if (patternIndex === pattern.length) {\n // All characters found in order - score based on how close they are\n return Math.max(10, 40 - (fileName.length - pattern.length));\n }\n\n return 0;\n }\n\n /**\n * Format unified search results for display\n */\n private formatUnifiedResults(\n results: UnifiedSearchResult[],\n query: string,\n _searchType: string\n ): string {\n if (results.length === 0) {\n return `No results found for \"${query}\"`;\n }\n\n let output = `Search results for \"${query}\":\\n`;\n\n // Separate text and file results\n const textResults = results.filter((r) => r.type === \"text\");\n const fileResults = results.filter((r) => r.type === \"file\");\n\n // Show all unique files (from both text matches and file matches)\n const allFiles = new Set<string>();\n\n // Add files from text results\n textResults.forEach((result) => {\n allFiles.add(result.file);\n });\n\n // Add files from file search results\n fileResults.forEach((result) => {\n allFiles.add(result.file);\n });\n\n const fileList = Array.from(allFiles);\n const displayLimit = 8;\n\n // Show files in compact format\n fileList.slice(0, displayLimit).forEach((file) => {\n // Count matches in this file for text results\n const matchCount = textResults.filter((r) => r.file === file).length;\n const matchIndicator = matchCount > 0 ? ` (${matchCount} matches)` : \"\";\n output += ` ${file}${matchIndicator}\\n`;\n });\n\n // Show \"+X more\" if there are additional results\n if (fileList.length > displayLimit) {\n const remaining = fileList.length - displayLimit;\n output += ` ... +${remaining} more\\n`;\n }\n\n return output.trim();\n }\n\n /**\n * Update current working directory\n */\n setCurrentDirectory(directory: string): void {\n this.currentDirectory = directory;\n }\n\n /**\n * Get current working directory\n */\n getCurrentDirectory(): string {\n return this.currentDirectory;\n }\n}\n","import * as ops from \"fs-extra\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport * as path from \"path\";\nimport { writeFile as writeFilePromise } from \"fs/promises\";\nimport { ToolResult } from \"../../types/index.js\";\nimport { ConfirmationService } from \"../../utils/confirmation-service.js\";\n\nexport interface FileOperation {\n type: 'create' | 'edit' | 'delete' | 'rename' | 'move';\n filePath: string;\n content?: string;\n oldContent?: string;\n newFilePath?: string; // For rename/move operations\n operations?: EditOperation[]; // For complex edits\n}\n\nexport interface EditOperation {\n type: 'replace' | 'insert' | 'delete_lines';\n oldStr?: string;\n newStr?: string;\n startLine?: number;\n endLine?: number;\n content?: string;\n}\n\nexport interface MultiFileTransaction {\n id: string;\n timestamp: Date;\n operations: FileOperation[];\n committed: boolean;\n rollbackData?: any[];\n}\n\nexport class MultiFileEditorTool {\n private confirmationService = ConfirmationService.getInstance();\n private transactions: Map<string, MultiFileTransaction> = new Map();\n private currentTransactionId: string | null = null;\n\n /**\n * Begin a multi-file transaction\n */\n async beginTransaction(description?: string): Promise<ToolResult> {\n try {\n const transactionId = `tx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n \n const transaction: MultiFileTransaction = {\n id: transactionId,\n timestamp: new Date(),\n operations: [],\n committed: false,\n rollbackData: []\n };\n\n this.transactions.set(transactionId, transaction);\n this.currentTransactionId = transactionId;\n\n return {\n success: true,\n output: `Transaction ${transactionId} started${description ? `: ${description}` : ''}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error starting transaction: ${error.message}`\n };\n }\n }\n\n /**\n * Add file operations to current transaction\n */\n async addOperations(operations: FileOperation[]): Promise<ToolResult> {\n try {\n if (!this.currentTransactionId) {\n return {\n success: false,\n error: \"No active transaction. Use beginTransaction() first.\"\n };\n }\n\n const transaction = this.transactions.get(this.currentTransactionId);\n if (!transaction) {\n return {\n success: false,\n error: \"Transaction not found\"\n };\n }\n\n // Validate operations\n for (const op of operations) {\n const validation = await this.validateOperation(op);\n if (!validation.valid) {\n return {\n success: false,\n error: `Invalid operation on ${op.filePath}: ${validation.error}`\n };\n }\n }\n\n transaction.operations.push(...operations);\n\n return {\n success: true,\n output: `Added ${operations.length} operations to transaction ${this.currentTransactionId}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error adding operations: ${error.message}`\n };\n }\n }\n\n /**\n * Preview changes without committing\n */\n async previewTransaction(): Promise<ToolResult> {\n try {\n if (!this.currentTransactionId) {\n return {\n success: false,\n error: \"No active transaction\"\n };\n }\n\n const transaction = this.transactions.get(this.currentTransactionId);\n if (!transaction) {\n return {\n success: false,\n error: \"Transaction not found\"\n };\n }\n\n let preview = `Transaction ${this.currentTransactionId} Preview:\\n`;\n preview += `Operations: ${transaction.operations.length}\\n\\n`;\n\n for (const [index, op] of transaction.operations.entries()) {\n preview += `${index + 1}. ${op.type.toUpperCase()}: ${op.filePath}\\n`;\n \n switch (op.type) {\n case 'create':\n preview += ` → Create new file with ${op.content?.split('\\n').length || 0} lines\\n`;\n break;\n case 'edit':\n if (op.operations) {\n preview += ` → ${op.operations.length} edit operation(s)\\n`;\n for (const editOp of op.operations) {\n preview += ` - ${editOp.type}\\n`;\n }\n }\n break;\n case 'delete':\n preview += ` → Delete file\\n`;\n break;\n case 'rename':\n preview += ` → Rename to ${op.newFilePath}\\n`;\n break;\n case 'move':\n preview += ` → Move to ${op.newFilePath}\\n`;\n break;\n }\n preview += '\\n';\n }\n\n return {\n success: true,\n output: preview\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error previewing transaction: ${error.message}`\n };\n }\n }\n\n /**\n * Commit the current transaction\n */\n async commitTransaction(): Promise<ToolResult> {\n try {\n if (!this.currentTransactionId) {\n return {\n success: false,\n error: \"No active transaction\"\n };\n }\n\n const transaction = this.transactions.get(this.currentTransactionId);\n if (!transaction) {\n return {\n success: false,\n error: \"Transaction not found\"\n };\n }\n\n if (transaction.committed) {\n return {\n success: false,\n error: \"Transaction already committed\"\n };\n }\n\n // Request confirmation for the entire transaction\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = await this.previewTransaction();\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Multi-file transaction (${transaction.operations.length} operations)`,\n filename: transaction.operations.map(op => op.filePath).join(', '),\n showVSCodeOpen: false,\n content: preview.output || 'Multi-file transaction'\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Transaction cancelled by user\"\n };\n }\n }\n\n // Store rollback data before making changes\n const rollbackData: any[] = [];\n\n // Execute operations\n const results: string[] = [];\n \n for (const [index, op] of transaction.operations.entries()) {\n try {\n const rollbackInfo = await this.createRollbackInfo(op);\n rollbackData.push(rollbackInfo);\n\n const result = await this.executeOperation(op);\n if (!result.success) {\n // Rollback already executed operations\n await this.rollbackOperations(rollbackData.slice(0, index));\n return {\n success: false,\n error: `Operation ${index + 1} failed: ${result.error}`\n };\n }\n results.push(`✓ ${op.type}: ${op.filePath}`);\n } catch (error: any) {\n // Rollback already executed operations\n await this.rollbackOperations(rollbackData.slice(0, index));\n return {\n success: false,\n error: `Operation ${index + 1} failed: ${error.message}`\n };\n }\n }\n\n transaction.committed = true;\n transaction.rollbackData = rollbackData;\n this.currentTransactionId = null;\n\n return {\n success: true,\n output: `Transaction ${transaction.id} committed successfully:\\n${results.join('\\n')}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error committing transaction: ${error.message}`\n };\n }\n }\n\n /**\n * Rollback the current or specified transaction\n */\n async rollbackTransaction(transactionId?: string): Promise<ToolResult> {\n try {\n const txId = transactionId || this.currentTransactionId;\n if (!txId) {\n return {\n success: false,\n error: \"No transaction specified\"\n };\n }\n\n const transaction = this.transactions.get(txId);\n if (!transaction) {\n return {\n success: false,\n error: \"Transaction not found\"\n };\n }\n\n if (!transaction.committed) {\n // Just cancel the transaction\n this.transactions.delete(txId);\n if (this.currentTransactionId === txId) {\n this.currentTransactionId = null;\n }\n return {\n success: true,\n output: `Transaction ${txId} cancelled`\n };\n }\n\n if (!transaction.rollbackData) {\n return {\n success: false,\n error: \"No rollback data available for this transaction\"\n };\n }\n\n await this.rollbackOperations(transaction.rollbackData);\n\n this.transactions.delete(txId);\n\n return {\n success: true,\n output: `Transaction ${txId} rolled back successfully`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error rolling back transaction: ${error.message}`\n };\n }\n }\n\n /**\n * Execute multiple file operations atomically\n */\n async executeMultiFileOperation(operations: FileOperation[], description?: string): Promise<ToolResult> {\n try {\n // Start transaction\n const beginResult = await this.beginTransaction(description);\n if (!beginResult.success) {\n return beginResult;\n }\n\n // Add operations\n const addResult = await this.addOperations(operations);\n if (!addResult.success) {\n await this.rollbackTransaction();\n return addResult;\n }\n\n // Commit transaction\n return await this.commitTransaction();\n } catch (error: any) {\n if (this.currentTransactionId) {\n await this.rollbackTransaction();\n }\n return {\n success: false,\n error: `Error executing multi-file operation: ${error.message}`\n };\n }\n }\n\n /**\n * Validate an operation before execution\n */\n private async validateOperation(operation: FileOperation): Promise<{ valid: boolean; error?: string }> {\n try {\n const resolvedPath = path.resolve(operation.filePath);\n\n switch (operation.type) {\n case 'create':\n if (await pathExists(resolvedPath)) {\n return { valid: false, error: \"File already exists\" };\n }\n if (!operation.content) {\n return { valid: false, error: \"Content required for create operation\" };\n }\n break;\n\n case 'edit':\n if (!(await pathExists(resolvedPath))) {\n return { valid: false, error: \"File does not exist\" };\n }\n if (!operation.operations || operation.operations.length === 0) {\n return { valid: false, error: \"Edit operations required\" };\n }\n break;\n\n case 'delete':\n if (!(await pathExists(resolvedPath))) {\n return { valid: false, error: \"File does not exist\" };\n }\n break;\n\n case 'rename':\n case 'move':\n if (!(await pathExists(resolvedPath))) {\n return { valid: false, error: \"Source file does not exist\" };\n }\n if (!operation.newFilePath) {\n return { valid: false, error: \"Destination path required\" };\n }\n const newResolvedPath = path.resolve(operation.newFilePath);\n if (await pathExists(newResolvedPath)) {\n return { valid: false, error: \"Destination already exists\" };\n }\n break;\n }\n\n return { valid: true };\n } catch (error: any) {\n return { valid: false, error: error.message };\n }\n }\n\n /**\n * Create rollback information for an operation\n */\n private async createRollbackInfo(operation: FileOperation): Promise<any> {\n const resolvedPath = path.resolve(operation.filePath);\n\n switch (operation.type) {\n case 'create':\n return {\n type: 'delete_created',\n filePath: operation.filePath\n };\n\n case 'edit':\n const originalContent = await ops.promises.readFile(resolvedPath, 'utf-8');\n return {\n type: 'restore_content',\n filePath: operation.filePath,\n originalContent\n };\n\n case 'delete':\n const contentToRestore = await ops.promises.readFile(resolvedPath, 'utf-8');\n const stats = await ops.promises.stat(resolvedPath);\n return {\n type: 'restore_deleted',\n filePath: operation.filePath,\n content: contentToRestore,\n stats\n };\n\n case 'rename':\n case 'move':\n return {\n type: 'restore_move',\n oldPath: operation.filePath,\n newPath: operation.newFilePath\n };\n\n default:\n throw new Error(`Unknown operation type: ${operation.type}`);\n }\n }\n\n /**\n * Execute a single operation\n */\n private async executeOperation(operation: FileOperation): Promise<ToolResult> {\n const resolvedPath = path.resolve(operation.filePath);\n\n switch (operation.type) {\n case 'create':\n const dir = path.dirname(resolvedPath);\n await ops.promises.mkdir(dir, { recursive: true });\n await writeFilePromise(resolvedPath, operation.content!, 'utf-8');\n return { success: true, output: `Created ${operation.filePath}` };\n\n case 'edit':\n let content = await ops.promises.readFile(resolvedPath, 'utf-8');\n \n for (const editOp of operation.operations!) {\n content = await this.applyEditOperation(content, editOp);\n }\n \n await writeFilePromise(resolvedPath, content, 'utf-8');\n return { success: true, output: `Edited ${operation.filePath}` };\n\n case 'delete':\n await ops.promises.rm(resolvedPath);\n return { success: true, output: `Deleted ${operation.filePath}` };\n\n case 'rename':\n case 'move':\n const newResolvedPath = path.resolve(operation.newFilePath!);\n const newDir = path.dirname(newResolvedPath);\n await ops.promises.mkdir(newDir, { recursive: true });\n await ops.move(resolvedPath, newResolvedPath);\n return { success: true, output: `${operation.type === 'rename' ? 'Renamed' : 'Moved'} ${operation.filePath} to ${operation.newFilePath}` };\n\n default:\n throw new Error(`Unknown operation type: ${operation.type}`);\n }\n }\n\n /**\n * Apply an edit operation to content\n */\n private async applyEditOperation(content: string, operation: EditOperation): Promise<string> {\n switch (operation.type) {\n case 'replace':\n if (!operation.oldStr || operation.newStr === undefined) {\n throw new Error('oldStr and newStr required for replace operation');\n }\n return content.replace(operation.oldStr, operation.newStr);\n\n case 'insert':\n if (operation.startLine === undefined || !operation.content) {\n throw new Error('startLine and content required for insert operation');\n }\n const lines = content.split('\\n');\n lines.splice(operation.startLine - 1, 0, operation.content);\n return lines.join('\\n');\n\n case 'delete_lines':\n if (operation.startLine === undefined || operation.endLine === undefined) {\n throw new Error('startLine and endLine required for delete_lines operation');\n }\n const contentLines = content.split('\\n');\n contentLines.splice(operation.startLine - 1, operation.endLine - operation.startLine + 1);\n return contentLines.join('\\n');\n\n default:\n throw new Error(`Unknown edit operation type: ${operation.type}`);\n }\n }\n\n /**\n * Rollback operations using rollback data\n */\n private async rollbackOperations(rollbackData: any[]): Promise<void> {\n // Rollback in reverse order\n for (let i = rollbackData.length - 1; i >= 0; i--) {\n const rollback = rollbackData[i];\n \n switch (rollback.type) {\n case 'delete_created':\n const createdPath = path.resolve(rollback.filePath);\n if (await pathExists(createdPath)) {\n await ops.promises.rm(createdPath);\n }\n break;\n\n case 'restore_content':\n const editedPath = path.resolve(rollback.filePath);\n await writeFilePromise(editedPath, rollback.originalContent, 'utf-8');\n break;\n\n case 'restore_deleted':\n const deletedPath = path.resolve(rollback.filePath);\n const deletedDir = path.dirname(deletedPath);\n await ops.promises.mkdir(deletedDir, { recursive: true });\n await writeFilePromise(deletedPath, rollback.content, 'utf-8');\n break;\n\n case 'restore_move':\n const movedNewPath = path.resolve(rollback.newPath);\n const movedOldPath = path.resolve(rollback.oldPath);\n if (await pathExists(movedNewPath)) {\n const oldDir = path.dirname(movedOldPath);\n await ops.promises.mkdir(oldDir, { recursive: true });\n await ops.move(movedNewPath, movedOldPath);\n }\n break;\n }\n }\n }\n\n /**\n * List all transactions\n */\n async listTransactions(): Promise<ToolResult> {\n try {\n if (this.transactions.size === 0) {\n return {\n success: true,\n output: \"No transactions found\"\n };\n }\n\n let output = \"Transactions:\\n\";\n for (const [id, tx] of this.transactions) {\n output += `${id}: ${tx.committed ? 'COMMITTED' : 'PENDING'} (${tx.operations.length} operations) - ${tx.timestamp.toISOString()}\\n`;\n }\n\n return {\n success: true,\n output: output.trim()\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error listing transactions: ${error.message}`\n };\n }\n }\n\n /**\n * Get current transaction status\n */\n getCurrentTransactionId(): string | null {\n return this.currentTransactionId;\n }\n}","import * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport * as path from \"path\";\nimport { ToolResult } from \"../../types/index.js\";\nimport { ConfirmationService } from \"../../utils/confirmation-service.js\";\n\nexport interface SearchOptions {\n pattern: string;\n isRegex?: boolean;\n caseSensitive?: boolean;\n wholeWord?: boolean;\n includeFiles?: string[]; // glob patterns\n excludeFiles?: string[]; // glob patterns\n maxResults?: number;\n showContext?: number; // lines of context\n}\n\nexport interface ReplaceOptions extends SearchOptions {\n replacement: string;\n dryRun?: boolean;\n}\n\nexport interface SearchResult {\n filePath: string;\n matches: SearchMatch[];\n totalMatches: number;\n}\n\nexport interface SearchMatch {\n line: number;\n column: number;\n text: string;\n beforeContext?: string[];\n afterContext?: string[];\n matchedText: string;\n}\n\nexport interface ReplaceResult {\n filePath: string;\n replacements: number;\n preview?: string;\n success: boolean;\n error?: string;\n}\n\nexport class AdvancedSearchTool {\n private confirmationService = ConfirmationService.getInstance();\n\n /**\n * Search for patterns across files\n */\n async search(searchPath: string, options: SearchOptions): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(searchPath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `Path not found: ${searchPath}`\n };\n }\n\n const stats = await ops.promises.stat(resolvedPath);\n const filesToSearch: string[] = [];\n\n if (stats.isFile()) {\n filesToSearch.push(resolvedPath);\n } else if (stats.isDirectory()) {\n const files = await this.getFilesRecursively(resolvedPath, options);\n filesToSearch.push(...files);\n }\n\n const results: SearchResult[] = [];\n let totalMatches = 0;\n\n for (const filePath of filesToSearch) {\n if (options.maxResults && totalMatches >= options.maxResults) {\n break;\n }\n\n const fileResult = await this.searchInFile(filePath, options);\n if (fileResult.matches.length > 0) {\n results.push(fileResult);\n totalMatches += fileResult.totalMatches;\n }\n }\n\n return {\n success: true,\n output: this.formatSearchResults(results, options)\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Search error: ${error.message}`\n };\n }\n }\n\n /**\n * Search and replace patterns across files\n */\n async searchAndReplace(searchPath: string, options: ReplaceOptions): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(searchPath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `Path not found: ${searchPath}`\n };\n }\n\n const stats = await ops.promises.stat(resolvedPath);\n const filesToProcess: string[] = [];\n\n if (stats.isFile()) {\n filesToProcess.push(resolvedPath);\n } else if (stats.isDirectory()) {\n const files = await this.getFilesRecursively(resolvedPath, options);\n filesToProcess.push(...files);\n }\n\n const results: ReplaceResult[] = [];\n let totalReplacements = 0;\n\n // First pass: find all matches and prepare replacements\n for (const filePath of filesToProcess) {\n const replaceResult = await this.replaceInFile(filePath, options);\n if (replaceResult.replacements > 0) {\n results.push(replaceResult);\n totalReplacements += replaceResult.replacements;\n }\n }\n\n if (totalReplacements === 0) {\n return {\n success: true,\n output: \"No matches found for replacement\"\n };\n }\n\n // Show preview and request confirmation if not in dry run mode\n if (!options.dryRun) {\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = this.formatReplaceResults(results, true);\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Replace in ${results.length} file(s) (${totalReplacements} replacements)`,\n filename: results.map(r => r.filePath).join(', '),\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Replace operation cancelled by user\"\n };\n }\n }\n\n // Actually perform replacements\n for (const result of results) {\n if (result.success && result.preview) {\n await ops.promises.writeFile(result.filePath, result.preview, 'utf-8');\n }\n }\n }\n\n return {\n success: true,\n output: this.formatReplaceResults(results, options.dryRun || false)\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Replace error: ${error.message}`\n };\n }\n }\n\n /**\n * Find files matching pattern\n */\n async findFiles(searchPath: string, pattern: string, options: { isRegex?: boolean; maxResults?: number } = {}): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(searchPath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `Path not found: ${searchPath}`\n };\n }\n\n const allFiles = await this.getFilesRecursively(resolvedPath);\n const matchingFiles: string[] = [];\n\n const regex = options.isRegex ? new RegExp(pattern, 'i') : null;\n\n for (const filePath of allFiles) {\n if (options.maxResults && matchingFiles.length >= options.maxResults) {\n break;\n }\n\n const fileName = path.basename(filePath);\n const relativePath = path.relative(resolvedPath, filePath);\n\n let matches = false;\n if (regex) {\n matches = regex.test(fileName) || regex.test(relativePath);\n } else {\n matches = fileName.toLowerCase().includes(pattern.toLowerCase()) ||\n relativePath.toLowerCase().includes(pattern.toLowerCase());\n }\n\n if (matches) {\n matchingFiles.push(relativePath);\n }\n }\n\n return {\n success: true,\n output: matchingFiles.length > 0 \n ? `Found ${matchingFiles.length} files:\\n${matchingFiles.join('\\n')}`\n : 'No matching files found'\n };\n } catch (error: any) {\n return {\n success: false,\n error: `File search error: ${error.message}`\n };\n }\n }\n\n /**\n * Search in a single file\n */\n private async searchInFile(filePath: string, options: SearchOptions): Promise<SearchResult> {\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const lines = content.split('\\n');\n const matches: SearchMatch[] = [];\n\n let pattern: RegExp;\n try {\n if (options.isRegex) {\n const flags = options.caseSensitive ? 'g' : 'gi';\n pattern = new RegExp(options.pattern, flags);\n } else {\n const escapedPattern = options.pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const wordBoundary = options.wholeWord ? '\\\\b' : '';\n const flags = options.caseSensitive ? 'g' : 'gi';\n pattern = new RegExp(`${wordBoundary}${escapedPattern}${wordBoundary}`, flags);\n }\n } catch (_error) {\n throw new Error(`Invalid regex pattern: ${options.pattern}`);\n }\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n let match;\n pattern.lastIndex = 0; // Reset regex state\n\n while ((match = pattern.exec(line)) !== null) {\n const searchMatch: SearchMatch = {\n line: i + 1,\n column: match.index + 1,\n text: line,\n matchedText: match[0]\n };\n\n // Add context if requested\n if (options.showContext && options.showContext > 0) {\n const contextStart = Math.max(0, i - options.showContext);\n const contextEnd = Math.min(lines.length, i + options.showContext + 1);\n \n searchMatch.beforeContext = lines.slice(contextStart, i);\n searchMatch.afterContext = lines.slice(i + 1, contextEnd);\n }\n\n matches.push(searchMatch);\n\n // Prevent infinite loop on zero-width matches\n if (match[0].length === 0) {\n pattern.lastIndex++;\n }\n }\n }\n\n return {\n filePath: path.relative(process.cwd(), filePath),\n matches,\n totalMatches: matches.length\n };\n }\n\n /**\n * Replace in a single file\n */\n private async replaceInFile(filePath: string, options: ReplaceOptions): Promise<ReplaceResult> {\n try {\n const content = await ops.promises.readFile(filePath, 'utf-8');\n \n let pattern: RegExp;\n try {\n if (options.isRegex) {\n const flags = options.caseSensitive ? 'g' : 'gi';\n pattern = new RegExp(options.pattern, flags);\n } else {\n const escapedPattern = options.pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const wordBoundary = options.wholeWord ? '\\\\b' : '';\n const flags = options.caseSensitive ? 'g' : 'gi';\n pattern = new RegExp(`${wordBoundary}${escapedPattern}${wordBoundary}`, flags);\n }\n } catch (_error) {\n return {\n filePath: path.relative(process.cwd(), filePath),\n replacements: 0,\n success: false,\n error: `Invalid regex pattern: ${options.pattern}`\n };\n }\n\n const matches = content.match(pattern);\n const replacementCount = matches ? matches.length : 0;\n\n if (replacementCount === 0) {\n return {\n filePath: path.relative(process.cwd(), filePath),\n replacements: 0,\n success: true\n };\n }\n\n const newContent = content.replace(pattern, options.replacement);\n\n return {\n filePath: path.relative(process.cwd(), filePath),\n replacements: replacementCount,\n preview: newContent,\n success: true\n };\n } catch (error: any) {\n return {\n filePath: path.relative(process.cwd(), filePath),\n replacements: 0,\n success: false,\n error: error.message\n };\n }\n }\n\n /**\n * Get files recursively with filtering\n */\n private async getFilesRecursively(dirPath: string, options?: SearchOptions): Promise<string[]> {\n const files: string[] = [];\n \n const walk = async (currentPath: string) => {\n const entries = await ops.promises.readdir(currentPath, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(currentPath, entry.name);\n \n if (entry.isDirectory()) {\n // Skip common directories that shouldn't be searched\n if (this.shouldSkipDirectory(entry.name)) {\n continue;\n }\n await walk(fullPath);\n } else if (entry.isFile()) {\n if (this.shouldIncludeFile(fullPath, options)) {\n files.push(fullPath);\n }\n }\n }\n };\n\n await walk(dirPath);\n return files;\n }\n\n /**\n * Check if directory should be skipped\n */\n private shouldSkipDirectory(dirName: string): boolean {\n const skipDirs = [\n 'node_modules',\n '.git',\n '.vscode',\n '.idea',\n 'dist',\n 'build',\n 'coverage',\n '.next',\n '.nuxt',\n '__pycache__',\n '.pytest_cache',\n 'vendor'\n ];\n \n return skipDirs.includes(dirName) || dirName.startsWith('.');\n }\n\n /**\n * Check if file should be included in search\n */\n private shouldIncludeFile(filePath: string, options?: SearchOptions): boolean {\n const fileName = path.basename(filePath);\n const ext = path.extname(fileName);\n \n // Skip binary files and common non-text files\n const skipExtensions = [\n '.exe', '.dll', '.so', '.dylib', '.bin',\n '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.ico', '.svg',\n '.mp3', '.mp4', '.avi', '.mkv', '.mov',\n '.zip', '.tar', '.gz', '.rar', '.7z',\n '.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx'\n ];\n \n if (skipExtensions.includes(ext.toLowerCase())) {\n return false;\n }\n\n // Apply include/exclude patterns if specified\n if (options?.excludeFiles) {\n for (const pattern of options.excludeFiles) {\n if (this.matchesGlob(filePath, pattern)) {\n return false;\n }\n }\n }\n\n if (options?.includeFiles) {\n for (const pattern of options.includeFiles) {\n if (this.matchesGlob(filePath, pattern)) {\n return true;\n }\n }\n // If include patterns are specified but none match, exclude the file\n return false;\n }\n\n return true;\n }\n\n /**\n * Simple glob pattern matching\n */\n private matchesGlob(filePath: string, pattern: string): boolean {\n // Convert glob pattern to regex\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n \n const regex = new RegExp(`^${regexPattern}$`, 'i');\n return regex.test(path.basename(filePath)) || regex.test(filePath);\n }\n\n /**\n * Format search results for display\n */\n private formatSearchResults(results: SearchResult[], options: SearchOptions): string {\n if (results.length === 0) {\n return 'No matches found';\n }\n\n let output = `Found ${results.reduce((sum, r) => sum + r.totalMatches, 0)} matches in ${results.length} files:\\n\\n`;\n\n for (const result of results) {\n output += `${result.filePath} (${result.totalMatches} matches):\\n`;\n \n for (const match of result.matches) {\n output += ` ${match.line}:${match.column}: ${match.text.trim()}\\n`;\n \n if (options.showContext && (match.beforeContext || match.afterContext)) {\n if (match.beforeContext) {\n for (const contextLine of match.beforeContext) {\n output += ` - ${contextLine}\\n`;\n }\n }\n output += ` > ${match.text.trim()}\\n`;\n if (match.afterContext) {\n for (const contextLine of match.afterContext) {\n output += ` + ${contextLine}\\n`;\n }\n }\n }\n }\n output += '\\n';\n }\n\n return output.trim();\n }\n\n /**\n * Format replace results for display\n */\n private formatReplaceResults(results: ReplaceResult[], isDryRun: boolean): string {\n const totalReplacements = results.reduce((sum, r) => sum + r.replacements, 0);\n const action = isDryRun ? 'Would replace' : 'Replaced';\n \n let output = `${action} ${totalReplacements} occurrences in ${results.length} files:\\n\\n`;\n\n for (const result of results) {\n if (result.success) {\n output += `${result.filePath}: ${result.replacements} replacements\\n`;\n } else {\n output += `${result.filePath}: ERROR - ${result.error}\\n`;\n }\n }\n\n return output.trim();\n }\n}","import * as ops from \"fs-extra\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport * as path from \"path\";\nimport { ToolResult } from \"../../types/index.js\";\nimport { ConfirmationService } from \"../../utils/confirmation-service.js\";\n\nexport interface FileTreeNode {\n name: string;\n path: string;\n type: 'file' | 'directory';\n size?: number;\n modified?: Date;\n children?: FileTreeNode[];\n}\n\nexport interface BulkOperation {\n type: 'copy' | 'move' | 'delete' | 'create_dir' | 'chmod' | 'rename';\n source: string;\n destination?: string;\n pattern?: string;\n recursive?: boolean;\n mode?: string; // for chmod\n}\n\nexport interface TreeFilterOptions {\n includeHidden?: boolean;\n maxDepth?: number;\n includePatterns?: string[];\n excludePatterns?: string[];\n minSize?: number;\n maxSize?: number;\n modifiedAfter?: Date;\n modifiedBefore?: Date;\n fileTypes?: string[];\n}\n\nexport class FileTreeOperationsTool {\n private confirmationService = ConfirmationService.getInstance();\n\n /**\n * Generate a visual tree representation of directory structure\n */\n async generateTree(rootPath: string, options: TreeFilterOptions = {}): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(rootPath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `Path not found: ${rootPath}`\n };\n }\n\n const tree = await this.buildTreeStructure(resolvedPath, options, 0);\n const treeString = this.formatTree(tree, '', true);\n\n return {\n success: true,\n output: `Directory tree for ${rootPath}:\\n${treeString}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error generating tree: ${error.message}`\n };\n }\n }\n\n /**\n * Perform bulk operations on files/directories\n */\n async bulkOperations(operations: BulkOperation[]): Promise<ToolResult> {\n try {\n // Validate all operations first\n for (const [index, op] of operations.entries()) {\n const validation = await this.validateBulkOperation(op);\n if (!validation.valid) {\n return {\n success: false,\n error: `Operation ${index + 1} invalid: ${validation.error}`\n };\n }\n }\n\n // Preview operations\n const preview = this.generateOperationsPreview(operations);\n\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Bulk operations (${operations.length} operations)`,\n filename: operations.map(op => op.source).join(', '),\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Bulk operations cancelled by user\"\n };\n }\n }\n\n // Execute operations\n const results: string[] = [];\n for (const [index, op] of operations.entries()) {\n try {\n const result = await this.executeBulkOperation(op);\n results.push(`✓ Operation ${index + 1}: ${result}`);\n } catch (error: any) {\n results.push(`✗ Operation ${index + 1}: ${error.message}`);\n }\n }\n\n return {\n success: true,\n output: `Bulk operations completed:\\n${results.join('\\n')}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error executing bulk operations: ${error.message}`\n };\n }\n }\n\n /**\n * Copy directory structure (optionally with files)\n */\n async copyStructure(\n sourcePath: string, \n destinationPath: string, \n options: { includeFiles?: boolean; overwrite?: boolean } = {}\n ): Promise<ToolResult> {\n try {\n const resolvedSource = path.resolve(sourcePath);\n const resolvedDest = path.resolve(destinationPath);\n\n if (!(await pathExists(resolvedSource))) {\n return {\n success: false,\n error: `Source path not found: ${sourcePath}`\n };\n }\n\n if (await pathExists(resolvedDest) && !options.overwrite) {\n return {\n success: false,\n error: `Destination already exists: ${destinationPath}`\n };\n }\n\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Copy structure from ${sourcePath} to ${destinationPath}`,\n filename: `${sourcePath} → ${destinationPath}`,\n showVSCodeOpen: false,\n content: `Copy ${options.includeFiles ? 'structure and files' : 'structure only'}\\nOverwrite: ${options.overwrite ? 'Yes' : 'No'}`\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Copy structure cancelled by user\"\n };\n }\n }\n\n await this.copyStructureRecursive(resolvedSource, resolvedDest, options);\n\n return {\n success: true,\n output: `Structure copied from ${sourcePath} to ${destinationPath}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error copying structure: ${error.message}`\n };\n }\n }\n\n /**\n * Find and organize files by type, size, or date\n */\n async organizeFiles(\n sourcePath: string,\n organizationType: 'type' | 'size' | 'date',\n destinationBase?: string\n ): Promise<ToolResult> {\n try {\n const resolvedSource = path.resolve(sourcePath);\n \n if (!(await pathExists(resolvedSource))) {\n return {\n success: false,\n error: `Source path not found: ${sourcePath}`\n };\n }\n\n const files = await this.getFilesRecursively(resolvedSource);\n const organization = await this.categorizeFiles(files, organizationType);\n\n const destBase = destinationBase ? path.resolve(destinationBase) : resolvedSource;\n \n // Preview organization\n let preview = `Organization plan (${organizationType}):\\n`;\n for (const [category, fileList] of Object.entries(organization)) {\n preview += `\\n${category}/\\n`;\n fileList.slice(0, 5).forEach(file => {\n preview += ` - ${path.basename(file)}\\n`;\n });\n if (fileList.length > 5) {\n preview += ` ... and ${fileList.length - 5} more files\\n`;\n }\n }\n\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Organize files by ${organizationType}`,\n filename: sourcePath,\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"File organization cancelled by user\"\n };\n }\n }\n\n // Execute organization\n let movedFiles = 0;\n for (const [category, fileList] of Object.entries(organization)) {\n const categoryDir = path.join(destBase, category);\n await ops.promises.mkdir(categoryDir, { recursive: true });\n\n for (const filePath of fileList) {\n const fileName = path.basename(filePath);\n const destPath = path.join(categoryDir, fileName);\n await ops.move(filePath, destPath);\n movedFiles++;\n }\n }\n\n return {\n success: true,\n output: `Organized ${movedFiles} files into ${Object.keys(organization).length} categories by ${organizationType}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error organizing files: ${error.message}`\n };\n }\n }\n\n /**\n * Clean up empty directories\n */\n async cleanupEmptyDirectories(rootPath: string): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(rootPath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `Path not found: ${rootPath}`\n };\n }\n\n const emptyDirs = await this.findEmptyDirectories(resolvedPath);\n \n if (emptyDirs.length === 0) {\n return {\n success: true,\n output: \"No empty directories found\"\n };\n }\n\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = `Empty directories to remove:\\n${emptyDirs.map(dir => `- ${path.relative(rootPath, dir)}`).join('\\n')}`;\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Remove ${emptyDirs.length} empty directories`,\n filename: rootPath,\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Cleanup cancelled by user\"\n };\n }\n }\n\n // Remove empty directories (deepest first)\n emptyDirs.sort((a, b) => b.length - a.length);\n for (const dir of emptyDirs) {\n await ops.rmdir(dir);\n }\n\n return {\n success: true,\n output: `Removed ${emptyDirs.length} empty directories`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error cleaning up directories: ${error.message}`\n };\n }\n }\n\n /**\n * Build tree structure recursively\n */\n private async buildTreeStructure(\n dirPath: string, \n options: TreeFilterOptions, \n currentDepth: number\n ): Promise<FileTreeNode> {\n const stats = await ops.promises.stat(dirPath);\n const name = path.basename(dirPath);\n \n const node: FileTreeNode = {\n name: name || path.basename(dirPath),\n path: dirPath,\n type: stats.isDirectory() ? 'directory' : 'file',\n size: stats.size,\n modified: stats.mtime\n };\n\n if (stats.isDirectory() && (!options.maxDepth || currentDepth < options.maxDepth)) {\n node.children = [];\n \n try {\n const entries = await ops.promises.readdir(dirPath, { withFileTypes: true });\n \n for (const entry of entries) {\n // Skip hidden files unless specified\n if (!options.includeHidden && entry.name.startsWith('.')) {\n continue;\n }\n\n const fullPath = path.join(dirPath, entry.name);\n \n // Apply filters\n if (!this.passesFilters(fullPath, entry, options)) {\n continue;\n }\n\n const childNode = await this.buildTreeStructure(fullPath, options, currentDepth + 1);\n node.children.push(childNode);\n }\n\n // Sort children: directories first, then files, both alphabetically\n node.children.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n } catch (error) {\n // Skip directories we can't read\n }\n }\n\n return node;\n }\n\n /**\n * Format tree structure for display\n */\n private formatTree(node: FileTreeNode, prefix: string, isLast: boolean): string {\n const connector = isLast ? '└── ' : '├── ';\n let result = prefix + connector + node.name;\n \n if (node.type === 'file' && node.size) {\n result += ` (${this.formatFileSize(node.size)})`;\n }\n \n result += '\\n';\n\n if (node.children) {\n const childPrefix = prefix + (isLast ? ' ' : '│ ');\n \n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n const isLastChild = i === node.children.length - 1;\n result += this.formatTree(child, childPrefix, isLastChild);\n }\n }\n\n return result;\n }\n\n /**\n * Check if file/directory passes filters\n */\n private passesFilters(\n fullPath: string, \n entry: ops.Dirent, \n options: TreeFilterOptions\n ): boolean {\n const name = entry.name;\n const ext = path.extname(name).toLowerCase();\n\n // Include/exclude patterns\n if (options.excludePatterns) {\n for (const pattern of options.excludePatterns) {\n if (this.matchesPattern(name, pattern)) {\n return false;\n }\n }\n }\n\n if (options.includePatterns) {\n let matches = false;\n for (const pattern of options.includePatterns) {\n if (this.matchesPattern(name, pattern)) {\n matches = true;\n break;\n }\n }\n if (!matches) return false;\n }\n\n // File type filter\n if (options.fileTypes && entry.isFile()) {\n if (!options.fileTypes.includes(ext)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Simple pattern matching (supports * and ?)\n */\n private matchesPattern(text: string, pattern: string): boolean {\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n \n const regex = new RegExp(`^${regexPattern}$`, 'i');\n return regex.test(text);\n }\n\n /**\n * Format file size for display\n */\n private formatFileSize(bytes: number): string {\n const units = ['B', 'KB', 'MB', 'GB'];\n let size = bytes;\n let unitIndex = 0;\n\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n return `${size.toFixed(1)}${units[unitIndex]}`;\n }\n\n /**\n * Validate bulk operation\n */\n private async validateBulkOperation(operation: BulkOperation): Promise<{ valid: boolean; error?: string }> {\n try {\n const sourcePath = path.resolve(operation.source);\n\n switch (operation.type) {\n case 'copy':\n case 'move':\n if (!(await pathExists(sourcePath))) {\n return { valid: false, error: \"Source path does not exist\" };\n }\n if (!operation.destination) {\n return { valid: false, error: \"Destination required for copy/move operations\" };\n }\n break;\n\n case 'delete':\n if (!(await pathExists(sourcePath))) {\n return { valid: false, error: \"Path does not exist\" };\n }\n break;\n\n case 'create_dir':\n if (await pathExists(sourcePath)) {\n return { valid: false, error: \"Directory already exists\" };\n }\n break;\n\n case 'chmod':\n if (!(await pathExists(sourcePath))) {\n return { valid: false, error: \"Path does not exist\" };\n }\n if (!operation.mode) {\n return { valid: false, error: \"Mode required for chmod operation\" };\n }\n break;\n\n case 'rename':\n if (!(await pathExists(sourcePath))) {\n return { valid: false, error: \"Source path does not exist\" };\n }\n if (!operation.destination) {\n return { valid: false, error: \"Destination required for rename operation\" };\n }\n break;\n }\n\n return { valid: true };\n } catch (error: any) {\n return { valid: false, error: error.message };\n }\n }\n\n /**\n * Execute a single bulk operation\n */\n private async executeBulkOperation(operation: BulkOperation): Promise<string> {\n const sourcePath = path.resolve(operation.source);\n\n switch (operation.type) {\n case 'copy':\n const copyDest = path.resolve(operation.destination!);\n await ops.copy(sourcePath, copyDest);\n return `Copied ${operation.source} to ${operation.destination}`;\n\n case 'move':\n const moveDest = path.resolve(operation.destination!);\n await ops.move(sourcePath, moveDest);\n return `Moved ${operation.source} to ${operation.destination}`;\n\n case 'delete':\n await ops.promises.rm(sourcePath);\n return `Deleted ${operation.source}`;\n\n case 'create_dir':\n await ops.promises.mkdir(sourcePath, { recursive: true });\n return `Created directory ${operation.source}`;\n\n case 'chmod':\n await ops.promises.chmod(sourcePath, operation.mode!);\n return `Changed permissions of ${operation.source} to ${operation.mode}`;\n\n case 'rename':\n const renameDest = path.resolve(operation.destination!);\n await ops.move(sourcePath, renameDest);\n return `Renamed ${operation.source} to ${operation.destination}`;\n\n default:\n throw new Error(`Unknown operation type: ${operation.type}`);\n }\n }\n\n /**\n * Generate preview of operations\n */\n private generateOperationsPreview(operations: BulkOperation[]): string {\n let preview = `Bulk Operations Preview (${operations.length} operations):\\n\\n`;\n \n for (const [index, op] of operations.entries()) {\n preview += `${index + 1}. ${op.type.toUpperCase()}: ${op.source}`;\n if (op.destination) {\n preview += ` → ${op.destination}`;\n }\n if (op.mode) {\n preview += ` (mode: ${op.mode})`;\n }\n preview += '\\n';\n }\n\n return preview;\n }\n\n /**\n * Copy structure recursively\n */\n private async copyStructureRecursive(\n source: string, \n destination: string, \n options: { includeFiles?: boolean; overwrite?: boolean }\n ): Promise<void> {\n const stats = await ops.promises.stat(source);\n\n if (stats.isDirectory()) {\n await ops.promises.mkdir(destination, { recursive: true });\n \n const entries = await ops.promises.readdir(source);\n for (const entry of entries) {\n const srcPath = path.join(source, entry);\n const destPath = path.join(destination, entry);\n await this.copyStructureRecursive(srcPath, destPath, options);\n }\n } else if (options.includeFiles) {\n await ops.copy(source, destination, { overwrite: options.overwrite });\n }\n }\n\n /**\n * Get all files recursively\n */\n private async getFilesRecursively(dirPath: string): Promise<string[]> {\n const files: string[] = [];\n \n const walk = async (currentPath: string) => {\n const entries = await ops.promises.readdir(currentPath, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(currentPath, entry.name);\n \n if (entry.isDirectory()) {\n await walk(fullPath);\n } else if (entry.isFile()) {\n files.push(fullPath);\n }\n }\n };\n\n await walk(dirPath);\n return files;\n }\n\n /**\n * Categorize files for organization\n */\n private async categorizeFiles(\n files: string[], \n organizationType: 'type' | 'size' | 'date'\n ): Promise<Record<string, string[]>> {\n const categories: Record<string, string[]> = {};\n\n for (const filePath of files) {\n let category: string;\n\n switch (organizationType) {\n case 'type':\n const ext = path.extname(filePath).toLowerCase();\n category = ext || 'no-extension';\n break;\n\n case 'size':\n const stats = await ops.promises.stat(filePath);\n if (stats.size < 1024) category = 'small (< 1KB)';\n else if (stats.size < 1024 * 1024) category = 'medium (< 1MB)';\n else if (stats.size < 1024 * 1024 * 10) category = 'large (< 10MB)';\n else category = 'very-large (> 10MB)';\n break;\n\n case 'date':\n const fileStats = await ops.promises.stat(filePath);\n const year = fileStats.mtime.getFullYear();\n const month = fileStats.mtime.getMonth() + 1;\n category = `${year}-${month.toString().padStart(2, '0')}`;\n break;\n\n default:\n category = 'misc';\n }\n\n if (!categories[category]) {\n categories[category] = [];\n }\n categories[category].push(filePath);\n }\n\n return categories;\n }\n\n /**\n * Find empty directories recursively\n */\n private async findEmptyDirectories(dirPath: string): Promise<string[]> {\n const emptyDirs: string[] = [];\n\n const checkDirectory = async (currentPath: string): Promise<boolean> => {\n try {\n const entries = await ops.promises.readdir(currentPath);\n \n if (entries.length === 0) {\n emptyDirs.push(currentPath);\n return true;\n }\n\n let hasNonEmptyChildren = false;\n for (const entry of entries) {\n const fullPath = path.join(currentPath, entry);\n const stats = await ops.promises.stat(fullPath);\n \n if (stats.isDirectory()) {\n const isEmpty = await checkDirectory(fullPath);\n if (!isEmpty) {\n hasNonEmptyChildren = true;\n }\n } else {\n hasNonEmptyChildren = true;\n }\n }\n\n // If all children are empty directories, this directory is also considered empty\n if (!hasNonEmptyChildren) {\n emptyDirs.push(currentPath);\n return true;\n }\n\n return false;\n } catch (error) {\n return false;\n }\n };\n\n await checkDirectory(dirPath);\n return emptyDirs;\n }\n}","import * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport * as path from \"path\";\nimport { ToolResult } from \"../../types/index.js\";\nimport { ConfirmationService } from \"../../utils/confirmation-service.js\";\n\nexport interface CodeContext {\n language: string;\n imports: string[];\n exports: string[];\n functions: FunctionInfo[];\n classes: ClassInfo[];\n variables: VariableInfo[];\n types: TypeInfo[];\n}\n\nexport interface FunctionInfo {\n name: string;\n startLine: number;\n endLine: number;\n parameters: string[];\n returnType?: string;\n isAsync: boolean;\n isExported: boolean;\n}\n\nexport interface ClassInfo {\n name: string;\n startLine: number;\n endLine: number;\n methods: FunctionInfo[];\n properties: VariableInfo[];\n extends?: string;\n implements?: string[];\n isExported: boolean;\n}\n\nexport interface VariableInfo {\n name: string;\n line: number;\n type?: string;\n isConst: boolean;\n isExported: boolean;\n scope: 'global' | 'function' | 'class' | 'block';\n}\n\nexport interface TypeInfo {\n name: string;\n line: number;\n kind: 'interface' | 'type' | 'enum';\n isExported: boolean;\n}\n\nexport interface RefactorOperation {\n type: 'rename' | 'extract_function' | 'extract_variable' | 'inline' | 'move_function' | 'add_import';\n target: string;\n newName?: string;\n startLine?: number;\n endLine?: number;\n destinationFile?: string;\n importPath?: string;\n}\n\nexport class CodeAwareEditorTool {\n private confirmationService = ConfirmationService.getInstance();\n\n /**\n * Analyze code structure and context\n */\n async analyzeCode(filePath: string): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, 'utf-8');\n const language = this.detectLanguage(filePath);\n const context = await this.parseCodeContext(content, language);\n\n const output = this.formatCodeAnalysis(context, filePath);\n\n return {\n success: true,\n output\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error analyzing code: ${error.message}`\n };\n }\n }\n\n /**\n * Perform smart refactoring operations\n */\n async refactor(filePath: string, operation: RefactorOperation): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, 'utf-8');\n const language = this.detectLanguage(filePath);\n const context = await this.parseCodeContext(content, language);\n\n const result = await this.performRefactoring(content, context, operation, language);\n \n if (!result.success) {\n return result;\n }\n\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = this.generateRefactorPreview(content, result.newContent!, operation);\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Refactor: ${operation.type} (${operation.target})`,\n filename: filePath,\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Refactoring cancelled by user\"\n };\n }\n }\n\n // Apply changes\n await ops.promises.writeFile(resolvedPath, result.newContent!, 'utf-8');\n\n return {\n success: true,\n output: result.output!\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error performing refactoring: ${error.message}`\n };\n }\n }\n\n /**\n * Smart code insertion that preserves formatting and structure\n */\n async smartInsert(\n filePath: string, \n code: string, \n location: 'top' | 'bottom' | 'before_function' | 'after_function' | 'in_class',\n target?: string\n ): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, 'utf-8');\n const language = this.detectLanguage(filePath);\n const context = await this.parseCodeContext(content, language);\n\n const insertionPoint = this.findInsertionPoint(content, context, location, target);\n if (!insertionPoint.success) {\n return insertionPoint;\n }\n\n const formattedCode = this.formatCodeForInsertion(code, insertionPoint.indentation!, language);\n const lines = content.split('\\n');\n \n lines.splice(insertionPoint.line!, 0, formattedCode);\n const newContent = lines.join('\\n');\n\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = this.generateInsertionPreview(content, newContent, insertionPoint.line!);\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Insert code at ${location}${target ? ` (${target})` : ''}`,\n filename: filePath,\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Code insertion cancelled by user\"\n };\n }\n }\n\n await ops.promises.writeFile(resolvedPath, newContent, 'utf-8');\n\n return {\n success: true,\n output: `Code inserted at line ${insertionPoint.line! + 1} in ${filePath}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error inserting code: ${error.message}`\n };\n }\n }\n\n /**\n * Auto-format code while preserving logical structure\n */\n async formatCode(filePath: string, options: { preserveComments?: boolean; indentSize?: number } = {}): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, 'utf-8');\n const language = this.detectLanguage(filePath);\n \n const formattedContent = await this.formatCodeContent(content, language, options);\n\n if (formattedContent === content) {\n return {\n success: true,\n output: \"No formatting changes needed\"\n };\n }\n\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = this.generateFormatPreview(content, formattedContent);\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: \"Format code\",\n filename: filePath,\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Code formatting cancelled by user\"\n };\n }\n }\n\n await ops.promises.writeFile(resolvedPath, formattedContent, 'utf-8');\n\n return {\n success: true,\n output: `Code formatted in ${filePath}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error formatting code: ${error.message}`\n };\n }\n }\n\n /**\n * Add missing imports automatically\n */\n async addMissingImports(filePath: string, symbols: string[]): Promise<ToolResult> {\n try {\n const resolvedPath = path.resolve(filePath);\n \n if (!(await pathExists(resolvedPath))) {\n return {\n success: false,\n error: `File not found: ${filePath}`\n };\n }\n\n const content = await ops.promises.readFile(resolvedPath, 'utf-8');\n const language = this.detectLanguage(filePath);\n const context = await this.parseCodeContext(content, language);\n\n const missingImports = symbols.filter(symbol => \n !context.imports.some(imp => imp.includes(symbol))\n );\n\n if (missingImports.length === 0) {\n return {\n success: true,\n output: \"All symbols are already imported\"\n };\n }\n\n const importsToAdd = await this.generateImportStatements(missingImports, language);\n const newContent = this.insertImports(content, importsToAdd, context, language);\n\n if (newContent === content) {\n return {\n success: true,\n output: \"No imports to add\"\n };\n }\n\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = `Adding imports for: ${missingImports.join(', ')}\\n\\n${importsToAdd.join('\\n')}`;\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Add ${missingImports.length} missing imports`,\n filename: filePath,\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Import addition cancelled by user\"\n };\n }\n }\n\n await ops.promises.writeFile(resolvedPath, newContent, 'utf-8');\n\n return {\n success: true,\n output: `Added ${missingImports.length} missing imports to ${filePath}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error adding imports: ${error.message}`\n };\n }\n }\n\n /**\n * Detect programming language from file extension\n */\n private detectLanguage(filePath: string): string {\n const ext = path.extname(filePath).toLowerCase();\n \n const languageMap: Record<string, string> = {\n '.js': 'javascript',\n '.jsx': 'javascript',\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.py': 'python',\n '.java': 'java',\n '.c': 'c',\n '.cpp': 'cpp',\n '.cc': 'cpp',\n '.cxx': 'cpp',\n '.h': 'c',\n '.hpp': 'cpp',\n '.cs': 'csharp',\n '.go': 'go',\n '.rs': 'rust',\n '.php': 'php',\n '.rb': 'ruby',\n '.swift': 'swift',\n '.kt': 'kotlin',\n '.scala': 'scala'\n };\n\n return languageMap[ext] || 'text';\n }\n\n /**\n * Parse code context based on language\n */\n private async parseCodeContext(content: string, language: string): Promise<CodeContext> {\n const context: CodeContext = {\n language,\n imports: [],\n exports: [],\n functions: [],\n classes: [],\n variables: [],\n types: []\n };\n\n const lines = content.split('\\n');\n\n switch (language) {\n case 'javascript':\n case 'typescript':\n this.parseJavaScriptTypeScript(lines, context);\n break;\n case 'python':\n this.parsePython(lines, context);\n break;\n case 'java':\n this.parseJava(lines, context);\n break;\n default:\n this.parseGeneric(lines, context);\n }\n\n return context;\n }\n\n /**\n * Parse JavaScript/TypeScript specific syntax\n */\n private parseJavaScriptTypeScript(lines: string[], context: CodeContext): void {\n let currentClass: ClassInfo | null = null;\n let currentFunction: FunctionInfo | null = null;\n let braceDepth = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const lineNumber = i + 1;\n\n // Parse imports\n if (line.startsWith('import ') || line.startsWith('const ') && line.includes('require(')) {\n context.imports.push(line);\n }\n\n // Parse exports\n if (line.startsWith('export ')) {\n context.exports.push(line);\n }\n\n // Parse types (TypeScript)\n if (line.startsWith('interface ') || line.startsWith('type ') || line.startsWith('enum ')) {\n const match = line.match(/(interface|type|enum)\\s+(\\w+)/);\n if (match) {\n context.types.push({\n name: match[2],\n line: lineNumber,\n kind: match[1] as 'interface' | 'type' | 'enum',\n isExported: line.includes('export')\n });\n }\n }\n\n // Parse classes\n if (line.includes('class ')) {\n const match = line.match(/class\\s+(\\w+)/);\n if (match) {\n currentClass = {\n name: match[1],\n startLine: lineNumber,\n endLine: lineNumber,\n methods: [],\n properties: [],\n isExported: line.includes('export')\n };\n context.classes.push(currentClass);\n }\n }\n\n // Parse functions\n if (line.includes('function ') || line.match(/\\w+\\s*\\(/)) {\n const functionMatch = line.match(/(?:async\\s+)?(?:function\\s+)?(\\w+)\\s*\\(/);\n if (functionMatch) {\n const func: FunctionInfo = {\n name: functionMatch[1],\n startLine: lineNumber,\n endLine: lineNumber,\n parameters: this.extractParameters(line),\n isAsync: line.includes('async'),\n isExported: line.includes('export')\n };\n\n if (currentClass) {\n currentClass.methods.push(func);\n } else {\n context.functions.push(func);\n }\n currentFunction = func;\n }\n }\n\n // Parse variables\n if (line.match(/^(const|let|var)\\s+\\w+/)) {\n const match = line.match(/(const|let|var)\\s+(\\w+)/);\n if (match) {\n context.variables.push({\n name: match[2],\n line: lineNumber,\n isConst: match[1] === 'const',\n isExported: line.includes('export'),\n scope: currentFunction ? 'function' : currentClass ? 'class' : 'global'\n });\n }\n }\n\n // Track brace depth for function/class end detection\n const openBraces = (line.match(/\\{/g) || []).length;\n const closeBraces = (line.match(/\\}/g) || []).length;\n braceDepth += openBraces - closeBraces;\n\n if (braceDepth === 0 && currentFunction) {\n currentFunction.endLine = lineNumber;\n currentFunction = null;\n }\n\n if (braceDepth === 0 && currentClass) {\n currentClass.endLine = lineNumber;\n currentClass = null;\n }\n }\n }\n\n /**\n * Parse Python specific syntax\n */\n private parsePython(lines: string[], context: CodeContext): void {\n let currentClass: ClassInfo | null = null;\n let currentIndent = 0;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmedLine = line.trim();\n const lineNumber = i + 1;\n const indent = line.length - line.trimStart().length;\n\n // Reset context when indentation decreases\n if (indent <= currentIndent) {\n currentClass = null;\n currentIndent = indent;\n }\n\n // Parse imports\n if (trimmedLine.startsWith('import ') || trimmedLine.startsWith('from ')) {\n context.imports.push(trimmedLine);\n }\n\n // Parse classes\n if (trimmedLine.startsWith('class ')) {\n const match = trimmedLine.match(/class\\s+(\\w+)/);\n if (match) {\n currentClass = {\n name: match[1],\n startLine: lineNumber,\n endLine: lineNumber,\n methods: [],\n properties: [],\n isExported: true // Python doesn't have explicit exports\n };\n context.classes.push(currentClass);\n currentIndent = indent;\n }\n }\n\n // Parse functions\n if (trimmedLine.startsWith('def ')) {\n const match = trimmedLine.match(/def\\s+(\\w+)\\s*\\(/);\n if (match) {\n const func: FunctionInfo = {\n name: match[1],\n startLine: lineNumber,\n endLine: lineNumber,\n parameters: this.extractPythonParameters(trimmedLine),\n isAsync: trimmedLine.startsWith('async def'),\n isExported: true\n };\n\n if (currentClass) {\n currentClass.methods.push(func);\n } else {\n context.functions.push(func);\n }\n }\n }\n\n // Parse variables (basic detection)\n if (trimmedLine.match(/^\\w+\\s*=/) && !trimmedLine.startsWith('def ') && !trimmedLine.startsWith('class ')) {\n const match = trimmedLine.match(/^(\\w+)\\s*=/);\n if (match) {\n context.variables.push({\n name: match[1],\n line: lineNumber,\n isConst: false,\n isExported: true,\n scope: currentClass ? 'class' : 'global'\n });\n }\n }\n }\n }\n\n /**\n * Parse Java specific syntax\n */\n private parseJava(lines: string[], context: CodeContext): void {\n // Simplified Java parsing - can be extended\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const lineNumber = i + 1;\n\n // Parse imports\n if (line.startsWith('import ')) {\n context.imports.push(line);\n }\n\n // Parse classes\n if (line.includes('class ')) {\n const match = line.match(/class\\s+(\\w+)/);\n if (match) {\n context.classes.push({\n name: match[1],\n startLine: lineNumber,\n endLine: lineNumber,\n methods: [],\n properties: [],\n isExported: line.includes('public')\n });\n }\n }\n }\n }\n\n /**\n * Generic parsing for unknown languages\n */\n private parseGeneric(lines: string[], context: CodeContext): void {\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n const lineNumber = i + 1;\n\n // Look for function-like patterns\n const functionMatch = line.match(/(\\w+)\\s*\\(/);\n if (functionMatch && !line.includes('if') && !line.includes('while') && !line.includes('for')) {\n context.functions.push({\n name: functionMatch[1],\n startLine: lineNumber,\n endLine: lineNumber,\n parameters: [],\n isAsync: false,\n isExported: false\n });\n }\n }\n }\n\n /**\n * Extract function parameters\n */\n private extractParameters(line: string): string[] {\n const match = line.match(/\\(([^)]*)\\)/);\n if (!match || !match[1]) return [];\n \n return match[1].split(',').map(param => param.trim()).filter(Boolean);\n }\n\n /**\n * Extract Python function parameters\n */\n private extractPythonParameters(line: string): string[] {\n const match = line.match(/\\(([^)]*)\\)/);\n if (!match || !match[1]) return [];\n \n return match[1].split(',')\n .map(param => param.trim().split(':')[0].split('=')[0].trim())\n .filter(Boolean);\n }\n\n /**\n * Format code analysis for display\n */\n private formatCodeAnalysis(context: CodeContext, filePath: string): string {\n let output = `Code Analysis for ${filePath} (${context.language}):\\n\\n`;\n\n if (context.imports.length > 0) {\n output += `Imports (${context.imports.length}):\\n`;\n context.imports.slice(0, 5).forEach(imp => output += ` - ${imp}\\n`);\n if (context.imports.length > 5) {\n output += ` ... and ${context.imports.length - 5} more\\n`;\n }\n output += '\\n';\n }\n\n if (context.functions.length > 0) {\n output += `Functions (${context.functions.length}):\\n`;\n context.functions.forEach(func => {\n output += ` - ${func.name}(${func.parameters.join(', ')}) [line ${func.startLine}]${func.isAsync ? ' (async)' : ''}${func.isExported ? ' (exported)' : ''}\\n`;\n });\n output += '\\n';\n }\n\n if (context.classes.length > 0) {\n output += `Classes (${context.classes.length}):\\n`;\n context.classes.forEach(cls => {\n output += ` - ${cls.name} [lines ${cls.startLine}-${cls.endLine}]${cls.isExported ? ' (exported)' : ''}\\n`;\n if (cls.methods.length > 0) {\n output += ` Methods: ${cls.methods.map(m => m.name).join(', ')}\\n`;\n }\n });\n output += '\\n';\n }\n\n if (context.types.length > 0) {\n output += `Types (${context.types.length}):\\n`;\n context.types.forEach(type => {\n output += ` - ${type.name} (${type.kind}) [line ${type.line}]${type.isExported ? ' (exported)' : ''}\\n`;\n });\n output += '\\n';\n }\n\n if (context.variables.length > 0) {\n output += `Variables (${context.variables.length}):\\n`;\n context.variables.slice(0, 10).forEach(variable => {\n output += ` - ${variable.name} [line ${variable.line}] (${variable.scope})${variable.isConst ? ' (const)' : ''}${variable.isExported ? ' (exported)' : ''}\\n`;\n });\n if (context.variables.length > 10) {\n output += ` ... and ${context.variables.length - 10} more\\n`;\n }\n }\n\n return output.trim();\n }\n\n /**\n * Perform refactoring operation\n */\n private async performRefactoring(\n content: string, \n context: CodeContext, \n operation: RefactorOperation, \n language: string\n ): Promise<{ success: boolean; newContent?: string; output?: string; error?: string }> {\n const lines = content.split('\\n');\n\n switch (operation.type) {\n case 'rename':\n return this.performRename(lines, context, operation.target, operation.newName!);\n\n case 'extract_function':\n return this.performExtractFunction(lines, operation.startLine!, operation.endLine!, operation.newName!, language);\n\n case 'extract_variable':\n return this.performExtractVariable(lines, operation.startLine!, operation.target, operation.newName!, language);\n\n default:\n return {\n success: false,\n error: `Refactoring operation '${operation.type}' not yet implemented`\n };\n }\n }\n\n /**\n * Perform rename refactoring\n */\n private performRename(\n lines: string[], \n context: CodeContext, \n oldName: string, \n newName: string\n ): { success: boolean; newContent?: string; output?: string; error?: string } {\n if (!this.isValidIdentifier(newName)) {\n return {\n success: false,\n error: `'${newName}' is not a valid identifier`\n };\n }\n\n let changes = 0;\n const newLines = lines.map(line => {\n const regex = new RegExp(`\\\\b${oldName}\\\\b`, 'g');\n const newLine = line.replace(regex, (_match) => {\n changes++;\n return newName;\n });\n return newLine;\n });\n\n return {\n success: true,\n newContent: newLines.join('\\n'),\n output: `Renamed '${oldName}' to '${newName}' (${changes} occurrences)`\n };\n }\n\n /**\n * Perform extract function refactoring\n */\n private performExtractFunction(\n lines: string[], \n startLine: number, \n endLine: number, \n functionName: string, \n language: string\n ): { success: boolean; newContent?: string; output?: string; error?: string } {\n if (startLine < 1 || endLine > lines.length || startLine > endLine) {\n return {\n success: false,\n error: 'Invalid line range'\n };\n }\n\n const extractedLines = lines.slice(startLine - 1, endLine);\n const extractedCode = extractedLines.join('\\n');\n\n // Create function declaration\n let functionDecl: string;\n switch (language) {\n case 'javascript':\n case 'typescript':\n functionDecl = `function ${functionName}() {\\n${extractedCode}\\n}`;\n break;\n case 'python':\n functionDecl = `def ${functionName}():\\n${extractedCode.split('\\n').map(line => ' ' + line).join('\\n')}`;\n break;\n default:\n functionDecl = `// Extracted function\\n${extractedCode}`;\n }\n\n // Replace extracted code with function call\n const functionCall = language === 'python' ? `${functionName}()` : `${functionName}();`;\n\n // Insert function and replace code\n const newLines = [\n ...lines.slice(0, startLine - 1),\n functionCall,\n ...lines.slice(endLine),\n '',\n functionDecl\n ];\n\n return {\n success: true,\n newContent: newLines.join('\\n'),\n output: `Extracted function '${functionName}' from lines ${startLine}-${endLine}`\n };\n }\n\n /**\n * Perform extract variable refactoring\n */\n private performExtractVariable(\n lines: string[], \n line: number, \n expression: string, \n variableName: string, \n language: string\n ): { success: boolean; newContent?: string; output?: string; error?: string } {\n if (line < 1 || line > lines.length) {\n return {\n success: false,\n error: 'Invalid line number'\n };\n }\n\n const targetLine = lines[line - 1];\n if (!targetLine.includes(expression)) {\n return {\n success: false,\n error: `Expression '${expression}' not found on line ${line}`\n };\n }\n\n // Create variable declaration\n let variableDecl: string;\n switch (language) {\n case 'javascript':\n case 'typescript':\n variableDecl = `const ${variableName} = ${expression};`;\n break;\n case 'python':\n variableDecl = `${variableName} = ${expression}`;\n break;\n default:\n variableDecl = `${variableName} = ${expression}`;\n }\n\n // Replace expression with variable\n const newTargetLine = targetLine.replace(expression, variableName);\n\n const newLines = [\n ...lines.slice(0, line - 1),\n variableDecl,\n newTargetLine,\n ...lines.slice(line)\n ];\n\n return {\n success: true,\n newContent: newLines.join('\\n'),\n output: `Extracted variable '${variableName}' for expression '${expression}'`\n };\n }\n\n /**\n * Find insertion point for code\n */\n private findInsertionPoint(\n content: string, \n context: CodeContext, \n location: string, \n target?: string\n ): { success: boolean; line?: number; indentation?: string; error?: string } {\n const lines = content.split('\\n');\n\n switch (location) {\n case 'top':\n // Insert after imports\n const lastImportLine = Math.max(...context.imports.map(imp => \n lines.findIndex(line => line.trim() === imp.trim())\n ).filter(idx => idx !== -1));\n \n return {\n success: true,\n line: lastImportLine >= 0 ? lastImportLine + 2 : 0,\n indentation: ''\n };\n\n case 'bottom':\n return {\n success: true,\n line: lines.length,\n indentation: ''\n };\n\n case 'before_function':\n case 'after_function':\n if (!target) {\n return { success: false, error: 'Target function name required' };\n }\n\n const func = context.functions.find(f => f.name === target);\n if (!func) {\n return { success: false, error: `Function '${target}' not found` };\n }\n\n const insertLine = location === 'before_function' ? func.startLine - 1 : func.endLine;\n const referenceLine = lines[func.startLine - 1];\n const indentation = referenceLine.match(/^(\\s*)/)?.[1] || '';\n\n return {\n success: true,\n line: insertLine,\n indentation\n };\n\n case 'in_class':\n if (!target) {\n return { success: false, error: 'Target class name required' };\n }\n\n const cls = context.classes.find(c => c.name === target);\n if (!cls) {\n return { success: false, error: `Class '${target}' not found` };\n }\n\n const classLine = lines[cls.startLine - 1];\n const classIndentation = classLine.match(/^(\\s*)/)?.[1] || '';\n const methodIndentation = classIndentation + ' '; // Add two spaces for method indentation\n\n return {\n success: true,\n line: cls.endLine - 1,\n indentation: methodIndentation\n };\n\n default:\n return { success: false, error: `Unknown location: ${location}` };\n }\n }\n\n /**\n * Format code for insertion with proper indentation\n */\n private formatCodeForInsertion(code: string, indentation: string, _language: string): string {\n const lines = code.split('\\n');\n return lines.map(line => {\n if (line.trim() === '') return '';\n return indentation + line;\n }).join('\\n');\n }\n\n /**\n * Format code content (basic formatting)\n */\n private async formatCodeContent(\n content: string, \n language: string, \n options: { preserveComments?: boolean; indentSize?: number }\n ): Promise<string> {\n // This is a simplified formatter - in a real implementation,\n // you would integrate with language-specific formatters\n const indentSize = options.indentSize || 2;\n const indent = ' '.repeat(indentSize);\n \n const lines = content.split('\\n');\n const formatted: string[] = [];\n let currentIndent = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n \n if (trimmed === '') {\n formatted.push('');\n continue;\n }\n\n // Adjust indentation based on braces/brackets\n if (trimmed.includes('}') || trimmed.includes(']') || trimmed.includes(')')) {\n currentIndent = Math.max(0, currentIndent - 1);\n }\n\n formatted.push(indent.repeat(currentIndent) + trimmed);\n\n if (trimmed.includes('{') || trimmed.includes('[') || trimmed.includes('(')) {\n currentIndent++;\n }\n }\n\n return formatted.join('\\n');\n }\n\n /**\n * Generate import statements for missing symbols\n */\n private async generateImportStatements(symbols: string[], language: string): Promise<string[]> {\n const imports: string[] = [];\n\n for (const symbol of symbols) {\n let importStatement: string;\n \n switch (language) {\n case 'javascript':\n case 'typescript':\n // This is simplified - in reality, you'd need symbol resolution\n importStatement = `import { ${symbol} } from './${symbol.toLowerCase()}';`;\n break;\n case 'python':\n importStatement = `from .${symbol.toLowerCase()} import ${symbol}`;\n break;\n default:\n importStatement = `// Import ${symbol}`;\n }\n\n imports.push(importStatement);\n }\n\n return imports;\n }\n\n /**\n * Insert imports into content\n */\n private insertImports(content: string, imports: string[], context: CodeContext, language: string): string {\n const lines = content.split('\\n');\n \n // Find insertion point (after existing imports)\n let insertionPoint = 0;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (language === 'javascript' || language === 'typescript') {\n if (line.startsWith('import ') || (line.startsWith('const ') && line.includes('require('))) {\n insertionPoint = i + 1;\n }\n } else if (language === 'python') {\n if (line.startsWith('import ') || line.startsWith('from ')) {\n insertionPoint = i + 1;\n }\n }\n }\n\n // Insert imports\n const newLines = [\n ...lines.slice(0, insertionPoint),\n ...imports,\n ...lines.slice(insertionPoint)\n ];\n\n return newLines.join('\\n');\n }\n\n /**\n * Generate preview for refactoring\n */\n private generateRefactorPreview(oldContent: string, newContent: string, operation: RefactorOperation): string {\n const oldLines = oldContent.split('\\n');\n const newLines = newContent.split('\\n');\n \n let preview = `Refactoring Preview: ${operation.type}\\n`;\n preview += `Target: ${operation.target}\\n`;\n if (operation.newName) {\n preview += `New name: ${operation.newName}\\n`;\n }\n preview += '\\n';\n\n // Show first few differences\n for (let i = 0; i < Math.min(oldLines.length, newLines.length, 20); i++) {\n if (oldLines[i] !== newLines[i]) {\n preview += `Line ${i + 1}:\\n`;\n preview += `- ${oldLines[i]}\\n`;\n preview += `+ ${newLines[i]}\\n`;\n }\n }\n\n return preview;\n }\n\n /**\n * Generate preview for insertion\n */\n private generateInsertionPreview(oldContent: string, newContent: string, insertLine: number): string {\n const _oldLines = oldContent.split('\\n');\n const newLines = newContent.split('\\n');\n \n let preview = `Code Insertion Preview:\\n`;\n preview += `Insertion point: Line ${insertLine + 1}\\n\\n`;\n\n // Show context around insertion\n const start = Math.max(0, insertLine - 3);\n const end = Math.min(newLines.length, insertLine + 6);\n\n for (let i = start; i < end; i++) {\n const marker = i === insertLine ? '>>> ' : ' ';\n preview += `${marker}${i + 1}: ${newLines[i]}\\n`;\n }\n\n return preview;\n }\n\n /**\n * Generate preview for formatting\n */\n private generateFormatPreview(oldContent: string, newContent: string): string {\n const oldLines = oldContent.split('\\n');\n const newLines = newContent.split('\\n');\n \n let preview = 'Formatting Preview:\\n\\n';\n let changes = 0;\n\n for (let i = 0; i < Math.min(oldLines.length, newLines.length); i++) {\n if (oldLines[i] !== newLines[i]) {\n if (changes < 10) { // Show first 10 changes\n preview += `Line ${i + 1}:\\n`;\n preview += `- ${oldLines[i]}\\n`;\n preview += `+ ${newLines[i]}\\n`;\n }\n changes++;\n }\n }\n\n if (changes > 10) {\n preview += `... and ${changes - 10} more changes\\n`;\n }\n\n return preview;\n }\n\n /**\n * Check if string is valid identifier\n */\n private isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n }\n}","import * as ops from \"fs-extra\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport * as path from \"path\";\nimport { ToolResult } from \"../../types/index.js\";\nimport { ConfirmationService } from \"../../utils/confirmation-service.js\";\n\nexport interface HistoryEntry {\n id: string;\n timestamp: Date;\n operation: OperationType;\n description: string;\n rollbackData: RollbackData;\n metadata: OperationMetadata;\n}\n\nexport interface OperationMetadata {\n user?: string;\n tool: string;\n sessionId?: string;\n filesAffected: string[];\n operationSize: 'small' | 'medium' | 'large';\n estimatedTime?: number;\n}\n\nexport interface RollbackData {\n type: 'file_operations' | 'multi_file' | 'refactor' | 'search_replace';\n files: FileSnapshot[];\n directories?: DirectorySnapshot[];\n customData?: any;\n}\n\nexport interface FileSnapshot {\n filePath: string;\n existed: boolean;\n content?: string;\n permissions?: string;\n lastModified?: Date;\n size?: number;\n}\n\nexport interface DirectorySnapshot {\n dirPath: string;\n existed: boolean;\n permissions?: string;\n children?: string[];\n}\n\nexport type OperationType = \n | 'file_create' \n | 'file_edit' \n | 'file_delete' \n | 'file_rename' \n | 'file_move'\n | 'multi_file_edit'\n | 'refactor'\n | 'search_replace'\n | 'directory_create'\n | 'directory_delete'\n | 'bulk_operation';\n\nexport interface HistoryOptions {\n maxEntries?: number;\n maxAge?: number; // in milliseconds\n excludePatterns?: string[];\n autoCleanup?: boolean;\n}\n\nexport class OperationHistoryTool {\n private history: HistoryEntry[] = [];\n private confirmationService = ConfirmationService.getInstance();\n private currentPosition = -1; // For undo/redo navigation\n private options: HistoryOptions;\n private historyFile: string;\n\n constructor(options: HistoryOptions = {}) {\n this.options = {\n maxEntries: 100,\n maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days\n excludePatterns: ['node_modules/**', '.git/**', 'dist/**', 'build/**'],\n autoCleanup: true,\n ...options\n };\n\n // History file in user's home directory\n const homeDir = process.env.HOME || process.env.USERPROFILE || '';\n this.historyFile = path.join(homeDir, '.xcli', 'operation-history.json');\n \n this.loadHistory();\n \n if (this.options.autoCleanup) {\n this.cleanupOldEntries();\n }\n }\n\n /**\n * Record a new operation in history\n */\n async recordOperation(\n operation: OperationType,\n description: string,\n files: string[],\n rollbackData: RollbackData,\n metadata: Partial<OperationMetadata> = {}\n ): Promise<ToolResult> {\n try {\n // Create snapshots of affected files before recording\n const fileSnapshots = await this.createFileSnapshots(files);\n \n const entry: HistoryEntry = {\n id: this.generateId(),\n timestamp: new Date(),\n operation,\n description,\n rollbackData: {\n ...rollbackData,\n files: fileSnapshots\n },\n metadata: {\n tool: 'x-cli',\n filesAffected: files,\n operationSize: this.determineOperationSize(files, rollbackData),\n ...metadata\n }\n };\n\n // Remove any entries after current position (when undoing and then making new changes)\n if (this.currentPosition < this.history.length - 1) {\n this.history = this.history.slice(0, this.currentPosition + 1);\n }\n\n this.history.push(entry);\n this.currentPosition = this.history.length - 1;\n\n // Enforce max entries limit\n if (this.history.length > this.options.maxEntries!) {\n this.history = this.history.slice(-this.options.maxEntries!);\n this.currentPosition = this.history.length - 1;\n }\n\n await this.saveHistory();\n\n return {\n success: true,\n output: `Operation recorded: ${description} (ID: ${entry.id})`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error recording operation: ${error.message}`\n };\n }\n }\n\n /**\n * Undo the last operation\n */\n async undo(): Promise<ToolResult> {\n try {\n if (this.currentPosition < 0) {\n return {\n success: false,\n error: \"No operations to undo\"\n };\n }\n\n const entry = this.history[this.currentPosition];\n \n // Request confirmation for potentially dangerous operations\n if (this.isDangerousOperation(entry.operation)) {\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = this.generateUndoPreview(entry);\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Undo: ${entry.description}`,\n filename: entry.metadata.filesAffected.join(', '),\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Undo operation cancelled by user\"\n };\n }\n }\n }\n\n // Perform the undo\n const result = await this.performUndo(entry);\n if (!result.success) {\n return result;\n }\n\n this.currentPosition--;\n\n return {\n success: true,\n output: `Undone: ${entry.description} (${new Date(entry.timestamp).toLocaleString()})`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error during undo: ${error.message}`\n };\n }\n }\n\n /**\n * Redo the next operation\n */\n async redo(): Promise<ToolResult> {\n try {\n if (this.currentPosition >= this.history.length - 1) {\n return {\n success: false,\n error: \"No operations to redo\"\n };\n }\n\n const nextPosition = this.currentPosition + 1;\n const entry = this.history[nextPosition];\n\n // Request confirmation for potentially dangerous operations\n if (this.isDangerousOperation(entry.operation)) {\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const preview = this.generateRedoPreview(entry);\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Redo: ${entry.description}`,\n filename: entry.metadata.filesAffected.join(', '),\n showVSCodeOpen: false,\n content: preview\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Redo operation cancelled by user\"\n };\n }\n }\n }\n\n // Perform the redo (which is actually re-applying the original operation)\n const result = await this.performRedo(entry);\n if (!result.success) {\n return result;\n }\n\n this.currentPosition = nextPosition;\n\n return {\n success: true,\n output: `Redone: ${entry.description} (${new Date(entry.timestamp).toLocaleString()})`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error during redo: ${error.message}`\n };\n }\n }\n\n /**\n * Show operation history\n */\n async showHistory(limit: number = 10): Promise<ToolResult> {\n try {\n if (this.history.length === 0) {\n return {\n success: true,\n output: \"No operations in history\"\n };\n }\n\n const recentEntries = this.history.slice(-limit).reverse();\n let output = `Operation History (last ${Math.min(limit, this.history.length)} entries):\\n\\n`;\n\n for (const [index, entry] of recentEntries.entries()) {\n const position = this.history.length - index;\n const isCurrent = position - 1 === this.currentPosition;\n const marker = isCurrent ? '→ ' : ' ';\n \n output += `${marker}${position}. ${entry.description}\\n`;\n output += ` ${entry.operation} | ${new Date(entry.timestamp).toLocaleString()}\\n`;\n output += ` Files: ${entry.metadata.filesAffected.slice(0, 3).join(', ')}`;\n \n if (entry.metadata.filesAffected.length > 3) {\n output += ` (+${entry.metadata.filesAffected.length - 3} more)`;\n }\n \n output += `\\n ID: ${entry.id}\\n\\n`;\n }\n\n if (this.history.length > limit) {\n output += `... and ${this.history.length - limit} older entries\\n`;\n }\n\n output += `\\nCurrent position: ${this.currentPosition + 1}/${this.history.length}`;\n\n return {\n success: true,\n output: output.trim()\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error showing history: ${error.message}`\n };\n }\n }\n\n /**\n * Go to a specific point in history\n */\n async goToHistoryPoint(entryId: string): Promise<ToolResult> {\n try {\n const entryIndex = this.history.findIndex(entry => entry.id === entryId);\n if (entryIndex === -1) {\n return {\n success: false,\n error: `Operation with ID ${entryId} not found in history`\n };\n }\n\n const targetPosition = entryIndex;\n \n if (targetPosition === this.currentPosition) {\n return {\n success: true,\n output: \"Already at the specified history point\"\n };\n }\n\n // Determine if we need to undo or redo operations\n const operations: string[] = [];\n \n if (targetPosition < this.currentPosition) {\n // Need to undo operations\n for (let i = this.currentPosition; i > targetPosition; i--) {\n const undoResult = await this.undo();\n if (!undoResult.success) {\n return undoResult;\n }\n operations.push(`Undone: ${this.history[i].description}`);\n }\n } else {\n // Need to redo operations\n for (let i = this.currentPosition; i < targetPosition; i++) {\n const redoResult = await this.redo();\n if (!redoResult.success) {\n return redoResult;\n }\n operations.push(`Redone: ${this.history[i + 1].description}`);\n }\n }\n\n return {\n success: true,\n output: `Moved to history point ${entryId}:\\n${operations.join('\\n')}`\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error navigating to history point: ${error.message}`\n };\n }\n }\n\n /**\n * Clear operation history\n */\n async clearHistory(): Promise<ToolResult> {\n try {\n // Request confirmation\n const sessionFlags = this.confirmationService.getSessionFlags();\n if (!sessionFlags.fileOperations && !sessionFlags.allOperations) {\n const confirmationResult = await this.confirmationService.requestConfirmation(\n {\n operation: `Clear operation history (${this.history.length} entries)`,\n filename: 'operation history',\n showVSCodeOpen: false,\n content: `This will permanently delete all ${this.history.length} recorded operations.\\nThis action cannot be undone.`\n },\n \"file\"\n );\n\n if (!confirmationResult.confirmed) {\n return {\n success: false,\n error: confirmationResult.feedback || \"Clear history cancelled by user\"\n };\n }\n }\n\n this.history = [];\n this.currentPosition = -1;\n await this.saveHistory();\n\n return {\n success: true,\n output: \"Operation history cleared\"\n };\n } catch (error: any) {\n return {\n success: false,\n error: `Error clearing history: ${error.message}`\n };\n }\n }\n\n /**\n * Create snapshots of files before operation\n */\n private async createFileSnapshots(files: string[]): Promise<FileSnapshot[]> {\n const snapshots: FileSnapshot[] = [];\n\n for (const filePath of files) {\n try {\n const resolvedPath = path.resolve(filePath);\n const exists = await pathExists(resolvedPath);\n\n const snapshot: FileSnapshot = {\n filePath: resolvedPath,\n existed: exists\n };\n\n if (exists) {\n const stats = await ops.promises.stat(resolvedPath);\n \n if (stats.isFile() && this.shouldSnapshotFile(resolvedPath)) {\n snapshot.content = await ops.promises.readFile(resolvedPath, 'utf-8');\n snapshot.size = stats.size;\n snapshot.lastModified = stats.mtime;\n snapshot.permissions = stats.mode.toString(8);\n }\n }\n\n snapshots.push(snapshot);\n } catch (_error) {\n // If we can't snapshot a file, record it as non-existent\n snapshots.push({\n filePath: path.resolve(filePath),\n existed: false\n });\n }\n }\n\n return snapshots;\n }\n\n /**\n * Check if file should be snapshotted (based on size and type)\n */\n private shouldSnapshotFile(filePath: string): boolean {\n // Skip large files (> 1MB)\n try {\n const stats = ops.statSync(filePath);\n if (stats.size > 1024 * 1024) {\n return false;\n }\n } catch {\n return false;\n }\n\n // Skip binary files\n const ext = path.extname(filePath).toLowerCase();\n const binaryExtensions = [\n '.exe', '.dll', '.so', '.dylib', '.bin',\n '.jpg', '.jpeg', '.png', '.gif', '.bmp', '.ico',\n '.mp3', '.mp4', '.avi', '.mkv', '.mov',\n '.zip', '.tar', '.gz', '.rar', '.7z',\n '.pdf', '.doc', '.docx', '.xls', '.xlsx'\n ];\n\n if (binaryExtensions.includes(ext)) {\n return false;\n }\n\n // Skip files matching exclude patterns\n for (const pattern of this.options.excludePatterns || []) {\n if (this.matchesPattern(filePath, pattern)) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Perform undo operation\n */\n private async performUndo(entry: HistoryEntry): Promise<ToolResult> {\n try {\n const rollbackData = entry.rollbackData;\n\n switch (rollbackData.type) {\n case 'file_operations':\n return await this.undoFileOperations(rollbackData.files);\n \n case 'multi_file':\n return await this.undoMultiFileOperation(rollbackData.files);\n \n case 'refactor':\n return await this.undoRefactorOperation(rollbackData.files, rollbackData.customData);\n \n case 'search_replace':\n return await this.undoSearchReplaceOperation(rollbackData.files);\n \n default:\n return {\n success: false,\n error: `Unknown rollback type: ${rollbackData.type}`\n };\n }\n } catch (error: any) {\n return {\n success: false,\n error: `Error performing undo: ${error.message}`\n };\n }\n }\n\n /**\n * Perform redo operation\n */\n private async performRedo(_entry: HistoryEntry): Promise<ToolResult> {\n // For redo, we need to re-apply the changes\n // This is complex because we need to store the \"forward\" changes as well\n // For now, this is a simplified implementation\n return {\n success: false,\n error: \"Redo functionality requires storing forward changes - not yet implemented\"\n };\n }\n\n /**\n * Undo file operations\n */\n private async undoFileOperations(fileSnapshots: FileSnapshot[]): Promise<ToolResult> {\n const restored: string[] = [];\n const errors: string[] = [];\n\n for (const snapshot of fileSnapshots) {\n try {\n const currentExists = await pathExists(snapshot.filePath);\n\n if (snapshot.existed && snapshot.content !== undefined) {\n // Restore file content\n await ops.ensureDir(path.dirname(snapshot.filePath));\n await ops.promises.writeFile(snapshot.filePath, snapshot.content, 'utf-8');\n \n if (snapshot.permissions) {\n await ops.promises.chmod(snapshot.filePath, parseInt(snapshot.permissions, 8));\n }\n \n restored.push(`Restored: ${snapshot.filePath}`);\n } else if (!snapshot.existed && currentExists) {\n // Remove file that didn't exist before\n await ops.promises.rm(snapshot.filePath);\n restored.push(`Removed: ${snapshot.filePath}`);\n }\n } catch (error: any) {\n errors.push(`Failed to restore ${snapshot.filePath}: ${error.message}`);\n }\n }\n\n if (errors.length > 0 && restored.length === 0) {\n return {\n success: false,\n error: `Undo failed:\\n${errors.join('\\n')}`\n };\n }\n\n let output = `Undo completed:\\n${restored.join('\\n')}`;\n if (errors.length > 0) {\n output += `\\n\\nWarnings:\\n${errors.join('\\n')}`;\n }\n\n return {\n success: true,\n output\n };\n }\n\n /**\n * Undo multi-file operation\n */\n private async undoMultiFileOperation(fileSnapshots: FileSnapshot[]): Promise<ToolResult> {\n // Similar to undoFileOperations but with transaction-like behavior\n return await this.undoFileOperations(fileSnapshots);\n }\n\n /**\n * Undo refactor operation\n */\n private async undoRefactorOperation(fileSnapshots: FileSnapshot[], _customData: any): Promise<ToolResult> {\n // Refactor operations can be more complex and might need custom undo logic\n return await this.undoFileOperations(fileSnapshots);\n }\n\n /**\n * Undo search and replace operation\n */\n private async undoSearchReplaceOperation(fileSnapshots: FileSnapshot[]): Promise<ToolResult> {\n return await this.undoFileOperations(fileSnapshots);\n }\n\n /**\n * Generate undo preview\n */\n private generateUndoPreview(entry: HistoryEntry): string {\n let preview = `Undo Preview: ${entry.description}\\n`;\n preview += `Operation: ${entry.operation}\\n`;\n preview += `Timestamp: ${new Date(entry.timestamp).toLocaleString()}\\n`;\n preview += `Files affected: ${entry.metadata.filesAffected.length}\\n\\n`;\n\n preview += \"Files to be restored:\\n\";\n for (const file of entry.rollbackData.files.slice(0, 10)) {\n if (file.existed) {\n preview += ` - Restore: ${file.filePath}\\n`;\n } else {\n preview += ` - Remove: ${file.filePath}\\n`;\n }\n }\n\n if (entry.rollbackData.files.length > 10) {\n preview += ` ... and ${entry.rollbackData.files.length - 10} more files\\n`;\n }\n\n return preview;\n }\n\n /**\n * Generate redo preview\n */\n private generateRedoPreview(entry: HistoryEntry): string {\n let preview = `Redo Preview: ${entry.description}\\n`;\n preview += `Operation: ${entry.operation}\\n`;\n preview += `Timestamp: ${new Date(entry.timestamp).toLocaleString()}\\n`;\n preview += `Files affected: ${entry.metadata.filesAffected.length}\\n\\n`;\n\n preview += \"This will re-apply the original operation.\\n\";\n preview += \"Files to be modified:\\n\";\n for (const filePath of entry.metadata.filesAffected.slice(0, 10)) {\n preview += ` - ${filePath}\\n`;\n }\n\n if (entry.metadata.filesAffected.length > 10) {\n preview += ` ... and ${entry.metadata.filesAffected.length - 10} more files\\n`;\n }\n\n return preview;\n }\n\n /**\n * Check if operation is potentially dangerous\n */\n private isDangerousOperation(operation: OperationType): boolean {\n const dangerousOps = ['file_delete', 'directory_delete', 'bulk_operation'];\n return dangerousOps.includes(operation);\n }\n\n /**\n * Determine operation size\n */\n private determineOperationSize(files: string[], _rollbackData: RollbackData): 'small' | 'medium' | 'large' {\n if (files.length <= 3) return 'small';\n if (files.length <= 10) return 'medium';\n return 'large';\n }\n\n /**\n * Generate unique ID\n */\n private generateId(): string {\n return `op_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Pattern matching utility\n */\n private matchesPattern(filePath: string, pattern: string): boolean {\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*\\*/g, '.*')\n .replace(/\\*/g, '[^/]*')\n .replace(/\\?/g, '.');\n \n const regex = new RegExp(`^${regexPattern}$`, 'i');\n return regex.test(filePath);\n }\n\n /**\n * Clean up old entries\n */\n private cleanupOldEntries(): void {\n if (!this.options.maxAge) return;\n\n const cutoffTime = Date.now() - this.options.maxAge;\n const originalLength = this.history.length;\n \n this.history = this.history.filter(entry => \n entry.timestamp.getTime() > cutoffTime\n );\n\n // Adjust current position\n const removedCount = originalLength - this.history.length;\n this.currentPosition = Math.max(-1, this.currentPosition - removedCount);\n }\n\n /**\n * Load history from file\n */\n private async loadHistory(): Promise<void> {\n try {\n if (await pathExists(this.historyFile)) {\n const data = await ops.promises.readFile(this.historyFile, 'utf-8');\n const parsed = JSON.parse(data);\n \n this.history = parsed.entries.map((entry: any) => ({\n ...entry,\n timestamp: new Date(entry.timestamp)\n }));\n \n this.currentPosition = parsed.currentPosition || this.history.length - 1;\n }\n } catch (_error) {\n // If we can't load history, start fresh\n this.history = [];\n this.currentPosition = -1;\n }\n }\n\n /**\n * Save history to file\n */\n private async saveHistory(): Promise<void> {\n try {\n await ops.ensureDir(path.dirname(this.historyFile));\n \n const data = {\n entries: this.history,\n currentPosition: this.currentPosition,\n lastUpdated: new Date().toISOString()\n };\n \n await ops.promises.writeFile(this.historyFile, JSON.stringify(data, null, 2), 'utf-8');\n } catch (_error) {\n // Silently ignore save errors to avoid disrupting operations\n }\n }\n\n /**\n * Get current history status\n */\n getStatus(): { totalEntries: number; currentPosition: number; canUndo: boolean; canRedo: boolean } {\n return {\n totalEntries: this.history.length,\n currentPosition: this.currentPosition,\n canUndo: this.currentPosition >= 0,\n canRedo: this.currentPosition < this.history.length - 1\n };\n }\n}","export { MultiFileEditorTool, type FileOperation, type EditOperation, type MultiFileTransaction } from \"./multi-file-editor.js\";\nexport { AdvancedSearchTool, type SearchOptions, type ReplaceOptions, type SearchResult, type SearchMatch, type ReplaceResult } from \"./advanced-search.js\";\nexport { FileTreeOperationsTool, type FileTreeNode, type BulkOperation, type TreeFilterOptions } from \"./file-tree-operations.js\";\nexport { CodeAwareEditorTool, type CodeContext, type FunctionInfo, type ClassInfo, type VariableInfo, type TypeInfo, type RefactorOperation } from \"./code-aware-editor.js\";\nexport { OperationHistoryTool, type HistoryEntry, type OperationMetadata, type RollbackData, type FileSnapshot, type DirectorySnapshot, type OperationType, type HistoryOptions } from \"./operation-history.js\";","import { ToolResult } from \"../../types/index.js\";\nimport { parse as parseTS } from \"@typescript-eslint/typescript-estree\";\n\n// Conditional tree-sitter imports for development compatibility\nlet Parser: any;\nlet JavaScript: any;\nlet TypeScript: any;\nlet Python: any;\n\ntry {\n Parser = require(\"tree-sitter\");\n JavaScript = require(\"tree-sitter-javascript\");\n TypeScript = require(\"tree-sitter-typescript\");\n Python = require(\"tree-sitter-python\");\n} catch (error) {\n console.warn(\"Tree-sitter modules not available, falling back to TypeScript-only parsing\");\n}\nimport * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport path from \"path\";\n\nexport interface ASTNode {\n type: string;\n name?: string;\n startPosition: { row: number; column: number };\n endPosition: { row: number; column: number };\n text: string;\n children?: ASTNode[];\n metadata?: Record<string, any>;\n}\n\nexport interface ParseResult {\n language: string;\n tree: ASTNode;\n symbols: SymbolInfo[];\n imports: ImportInfo[];\n exports: ExportInfo[];\n errors: ParseError[];\n}\n\nexport interface SymbolInfo {\n name: string;\n type: 'function' | 'class' | 'variable' | 'interface' | 'enum' | 'type' | 'method' | 'property';\n startPosition: { row: number; column: number };\n endPosition: { row: number; column: number };\n scope: string;\n accessibility?: 'public' | 'private' | 'protected';\n isStatic?: boolean;\n isAsync?: boolean;\n parameters?: ParameterInfo[];\n returnType?: string;\n}\n\nexport interface ParameterInfo {\n name: string;\n type?: string;\n optional?: boolean;\n defaultValue?: string;\n}\n\nexport interface ImportInfo {\n source: string;\n specifiers: ImportSpecifier[];\n isTypeOnly?: boolean;\n startPosition: { row: number; column: number };\n}\n\nexport interface ImportSpecifier {\n name: string;\n alias?: string;\n isDefault?: boolean;\n isNamespace?: boolean;\n}\n\nexport interface ExportInfo {\n name: string;\n type: 'function' | 'class' | 'variable' | 'interface' | 'enum' | 'type' | 'default';\n startPosition: { row: number; column: number };\n isDefault?: boolean;\n source?: string; // For re-exports\n}\n\nexport interface ParseError {\n message: string;\n line: number;\n column: number;\n severity: 'error' | 'warning';\n}\n\nexport class ASTParserTool {\n name = \"ast_parser\";\n description = \"Parse source code files to extract AST, symbols, imports, exports, and structural information\";\n\n private parsers: Map<string, any> = new Map();\n\n constructor() {\n this.initializeParsers();\n }\n\n private initializeParsers() {\n if (!Parser || !JavaScript || !TypeScript || !Python) {\n console.log(\"Tree-sitter parsers not available, using TypeScript-only parsing\");\n return;\n }\n \n try {\n // JavaScript/JSX parser\n const jsParser = new Parser();\n jsParser.setLanguage(JavaScript as any);\n this.parsers.set('javascript', jsParser);\n this.parsers.set('js', jsParser);\n this.parsers.set('jsx', jsParser);\n\n // TypeScript/TSX parser\n const tsParser = new Parser();\n tsParser.setLanguage((TypeScript as any).typescript);\n this.parsers.set('typescript', tsParser);\n this.parsers.set('ts', tsParser);\n\n const tsxParser = new Parser();\n tsxParser.setLanguage((TypeScript as any).tsx);\n this.parsers.set('tsx', tsxParser);\n\n // Python parser\n const pyParser = new Parser();\n pyParser.setLanguage(Python as any);\n this.parsers.set('python', pyParser);\n this.parsers.set('py', pyParser);\n } catch (error) {\n console.warn('Failed to initialize some parsers:', error);\n }\n }\n\n private detectLanguage(filePath: string): string {\n const ext = path.extname(filePath).slice(1).toLowerCase();\n \n switch (ext) {\n case 'js':\n case 'mjs':\n case 'cjs':\n return 'javascript';\n case 'jsx':\n return 'jsx';\n case 'ts':\n return 'typescript';\n case 'tsx':\n return 'tsx';\n case 'py':\n case 'pyw':\n return 'python';\n default:\n return 'javascript'; // Default fallback\n }\n }\n\n async execute(args: any): Promise<ToolResult> {\n try {\n const { \n filePath, \n includeSymbols = true, \n includeImports = true, \n includeTree = false,\n symbolTypes = ['function', 'class', 'variable', 'interface', 'enum', 'type'],\n scope = 'all' // 'all', 'global', 'local'\n } = args;\n\n if (!filePath) {\n throw new Error(\"File path is required\");\n }\n\n if (!await pathExists(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const language = this.detectLanguage(filePath);\n \n let result: ParseResult;\n\n // Use TypeScript ESTree for better TypeScript analysis\n if (language === 'typescript' || language === 'tsx') {\n result = await this.parseWithTypeScript(content, language, filePath);\n } else {\n result = await this.parseWithTreeSitter(content, language, filePath);\n }\n\n // Filter results based on parameters\n if (!includeSymbols) {\n result.symbols = [];\n } else {\n result.symbols = result.symbols.filter(symbol => \n symbolTypes.includes(symbol.type) && \n (scope === 'all' || this.matchesScope(symbol, scope))\n );\n }\n\n if (!includeImports) {\n result.imports = [];\n result.exports = [];\n }\n\n if (!includeTree) {\n result.tree = { type: 'program', text: '', startPosition: { row: 0, column: 0 }, endPosition: { row: 0, column: 0 } };\n }\n\n return {\n success: true,\n output: JSON.stringify({\n filePath,\n language: result.language,\n symbolCount: result.symbols.length,\n importCount: result.imports.length,\n exportCount: result.exports.length,\n errorCount: result.errors.length,\n ...(includeSymbols && { symbols: result.symbols }),\n ...(includeImports && { \n imports: result.imports,\n exports: result.exports \n }),\n ...(includeTree && { tree: result.tree }),\n ...(result.errors.length > 0 && { errors: result.errors })\n }, null, 2)\n };\n\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private async parseWithTypeScript(content: string, language: string, filePath: string): Promise<ParseResult> {\n const errors: ParseError[] = [];\n \n try {\n const ast = parseTS(content, {\n jsx: language === 'tsx',\n loc: true,\n range: true,\n comment: true,\n attachComments: true,\n errorOnUnknownASTType: false,\n errorOnTypeScriptSyntacticAndSemanticIssues: false\n });\n\n const symbols = this.extractTypeScriptSymbols(ast, content);\n const imports = this.extractTypeScriptImports(ast);\n const exports = this.extractTypeScriptExports(ast);\n const tree = this.convertTypeScriptAST(ast);\n\n return {\n language,\n tree,\n symbols,\n imports,\n exports,\n errors\n };\n } catch (error) {\n errors.push({\n message: error instanceof Error ? error.message : String(error),\n line: 0,\n column: 0,\n severity: 'error'\n });\n\n // Fallback to tree-sitter\n return this.parseWithTreeSitter(content, language, filePath);\n }\n }\n\n private async parseWithTreeSitter(content: string, language: string, filePath: string): Promise<ParseResult> {\n const parser = this.parsers.get(language);\n if (!parser) {\n // Fall back to TypeScript parsing if tree-sitter parser not available\n if (language === 'typescript' || language === 'ts' || language === 'javascript' || language === 'js') {\n return await this.parseWithTypeScript(content, language, filePath);\n }\n throw new Error(`Unsupported language: ${language}`);\n }\n\n const tree = parser.parse(content);\n const symbols = this.extractTreeSitterSymbols(tree.rootNode, content, language);\n const imports = this.extractTreeSitterImports(tree.rootNode, content, language);\n const exports = this.extractTreeSitterExports(tree.rootNode, content, language);\n const astTree = this.convertTreeSitterAST(tree.rootNode, content);\n\n return {\n language,\n tree: astTree,\n symbols,\n imports,\n exports,\n errors: []\n };\n }\n\n private extractTypeScriptSymbols(ast: any, content: string): SymbolInfo[] {\n const symbols: SymbolInfo[] = [];\n const lines = content.split('\\n');\n\n const visit = (node: any, scope = 'global') => {\n if (!node) return;\n\n const getPosition = (pos: any) => ({\n row: pos.line - 1,\n column: pos.column\n });\n\n switch (node.type) {\n case 'FunctionDeclaration':\n if (node.id?.name) {\n symbols.push({\n name: node.id.name,\n type: 'function',\n startPosition: getPosition(node.loc.start),\n endPosition: getPosition(node.loc.end),\n scope,\n isAsync: node.async,\n parameters: node.params?.map((param: any) => ({\n name: param.name || (param.left?.name) || 'unknown',\n type: param.typeAnnotation?.typeAnnotation?.type,\n optional: param.optional\n })) || []\n });\n }\n break;\n\n case 'ClassDeclaration':\n if (node.id?.name) {\n symbols.push({\n name: node.id.name,\n type: 'class',\n startPosition: getPosition(node.loc.start),\n endPosition: getPosition(node.loc.end),\n scope\n });\n }\n // Visit class methods\n node.body?.body?.forEach((member: any) => {\n if (member.type === 'MethodDefinition' && member.key?.name) {\n symbols.push({\n name: member.key.name,\n type: 'method',\n startPosition: getPosition(member.loc.start),\n endPosition: getPosition(member.loc.end),\n scope: `${node.id?.name || 'unknown'}.${member.key.name}`,\n accessibility: member.accessibility,\n isStatic: member.static,\n isAsync: member.value?.async\n });\n }\n });\n break;\n\n case 'VariableDeclaration':\n node.declarations?.forEach((decl: any) => {\n if (decl.id?.name) {\n symbols.push({\n name: decl.id.name,\n type: 'variable',\n startPosition: getPosition(decl.loc.start),\n endPosition: getPosition(decl.loc.end),\n scope\n });\n }\n });\n break;\n\n case 'TSInterfaceDeclaration':\n if (node.id?.name) {\n symbols.push({\n name: node.id.name,\n type: 'interface',\n startPosition: getPosition(node.loc.start),\n endPosition: getPosition(node.loc.end),\n scope\n });\n }\n break;\n\n case 'TSEnumDeclaration':\n if (node.id?.name) {\n symbols.push({\n name: node.id.name,\n type: 'enum',\n startPosition: getPosition(node.loc.start),\n endPosition: getPosition(node.loc.end),\n scope\n });\n }\n break;\n\n case 'TSTypeAliasDeclaration':\n if (node.id?.name) {\n symbols.push({\n name: node.id.name,\n type: 'type',\n startPosition: getPosition(node.loc.start),\n endPosition: getPosition(node.loc.end),\n scope\n });\n }\n break;\n }\n\n // Recursively visit children\n for (const key in node) {\n if (key !== 'parent' && key !== 'loc' && key !== 'range') {\n const child = node[key];\n if (Array.isArray(child)) {\n child.forEach(grandchild => {\n if (grandchild && typeof grandchild === 'object') {\n visit(grandchild, scope);\n }\n });\n } else if (child && typeof child === 'object') {\n visit(child, scope);\n }\n }\n }\n };\n\n visit(ast);\n return symbols;\n }\n\n private extractTypeScriptImports(ast: any): ImportInfo[] {\n const imports: ImportInfo[] = [];\n\n const visit = (node: any) => {\n if (node.type === 'ImportDeclaration') {\n const specifiers: ImportSpecifier[] = [];\n \n node.specifiers?.forEach((spec: any) => {\n switch (spec.type) {\n case 'ImportDefaultSpecifier':\n specifiers.push({\n name: spec.local.name,\n isDefault: true\n });\n break;\n case 'ImportNamespaceSpecifier':\n specifiers.push({\n name: spec.local.name,\n isNamespace: true\n });\n break;\n case 'ImportSpecifier':\n specifiers.push({\n name: spec.imported.name,\n alias: spec.local.name !== spec.imported.name ? spec.local.name : undefined\n });\n break;\n }\n });\n\n imports.push({\n source: node.source.value,\n specifiers,\n isTypeOnly: node.importKind === 'type',\n startPosition: {\n row: node.loc.start.line - 1,\n column: node.loc.start.column\n }\n });\n }\n\n // Recursively visit children\n for (const key in node) {\n if (key !== 'parent' && key !== 'loc' && key !== 'range') {\n const child = node[key];\n if (Array.isArray(child)) {\n child.forEach(grandchild => {\n if (grandchild && typeof grandchild === 'object') {\n visit(grandchild);\n }\n });\n } else if (child && typeof child === 'object') {\n visit(child);\n }\n }\n }\n };\n\n visit(ast);\n return imports;\n }\n\n private extractTypeScriptExports(ast: any): ExportInfo[] {\n const exports: ExportInfo[] = [];\n\n const visit = (node: any) => {\n switch (node.type) {\n case 'ExportNamedDeclaration':\n if (node.declaration) {\n // Export declaration (export function foo() {})\n if (node.declaration.id?.name) {\n exports.push({\n name: node.declaration.id.name,\n type: this.getDeclarationType(node.declaration.type),\n startPosition: {\n row: node.loc.start.line - 1,\n column: node.loc.start.column\n }\n });\n }\n } else if (node.specifiers) {\n // Export specifiers (export { foo, bar })\n node.specifiers.forEach((spec: any) => {\n exports.push({\n name: spec.exported.name,\n type: 'variable', // Default to variable\n startPosition: {\n row: node.loc.start.line - 1,\n column: node.loc.start.column\n },\n source: node.source?.value\n });\n });\n }\n break;\n\n case 'ExportDefaultDeclaration':\n const name = node.declaration?.id?.name || 'default';\n exports.push({\n name,\n type: this.getDeclarationType(node.declaration?.type) || 'default',\n startPosition: {\n row: node.loc.start.line - 1,\n column: node.loc.start.column\n },\n isDefault: true\n });\n break;\n }\n\n // Recursively visit children\n for (const key in node) {\n if (key !== 'parent' && key !== 'loc' && key !== 'range') {\n const child = node[key];\n if (Array.isArray(child)) {\n child.forEach(grandchild => {\n if (grandchild && typeof grandchild === 'object') {\n visit(grandchild);\n }\n });\n } else if (child && typeof child === 'object') {\n visit(child);\n }\n }\n }\n };\n\n visit(ast);\n return exports;\n }\n\n private extractTreeSitterSymbols(node: any, content: string, language: string): SymbolInfo[] {\n const symbols: SymbolInfo[] = [];\n const lines = content.split('\\n');\n\n const visit = (node: any, scope = 'global') => {\n const nodeText = content.slice(node.startIndex, node.endIndex);\n const startPos = { row: node.startPosition.row, column: node.startPosition.column };\n const endPos = { row: node.endPosition.row, column: node.endPosition.column };\n\n switch (node.type) {\n case 'function_declaration':\n case 'function_definition':\n const funcName = this.extractNodeName(node, 'name') || this.extractNodeName(node, 'identifier');\n if (funcName) {\n symbols.push({\n name: funcName,\n type: 'function',\n startPosition: startPos,\n endPosition: endPos,\n scope\n });\n }\n break;\n\n case 'class_declaration':\n case 'class_definition':\n const className = this.extractNodeName(node, 'name') || this.extractNodeName(node, 'identifier');\n if (className) {\n symbols.push({\n name: className,\n type: 'class',\n startPosition: startPos,\n endPosition: endPos,\n scope\n });\n }\n break;\n\n case 'variable_declaration':\n case 'lexical_declaration':\n node.children?.forEach((child: any) => {\n if (child.type === 'variable_declarator') {\n const varName = this.extractNodeName(child, 'name') || this.extractNodeName(child, 'identifier');\n if (varName) {\n symbols.push({\n name: varName,\n type: 'variable',\n startPosition: { row: child.startPosition.row, column: child.startPosition.column },\n endPosition: { row: child.endPosition.row, column: child.endPosition.column },\n scope\n });\n }\n }\n });\n break;\n }\n\n // Recursively visit children\n node.children?.forEach((child: any) => visit(child, scope));\n };\n\n visit(node);\n return symbols;\n }\n\n private extractTreeSitterImports(node: any, content: string, language: string): ImportInfo[] {\n const imports: ImportInfo[] = [];\n\n const visit = (node: any) => {\n if (node.type === 'import_statement' || node.type === 'import_from_statement') {\n // Extract import details from tree-sitter node\n const sourceNode = node.children?.find((child: any) => \n child.type === 'string' || child.type === 'string_literal'\n );\n \n if (sourceNode) {\n const source = content.slice(sourceNode.startIndex + 1, sourceNode.endIndex - 1); // Remove quotes\n \n imports.push({\n source,\n specifiers: [], // Simplified for tree-sitter\n startPosition: {\n row: node.startPosition.row,\n column: node.startPosition.column\n }\n });\n }\n }\n\n node.children?.forEach((child: any) => visit(child));\n };\n\n visit(node);\n return imports;\n }\n\n private extractTreeSitterExports(node: any, content: string, language: string): ExportInfo[] {\n const exports: ExportInfo[] = [];\n\n const visit = (node: any) => {\n if (node.type === 'export_statement') {\n // Simplified export extraction for tree-sitter\n const name = this.extractNodeName(node, 'name') || 'unknown';\n exports.push({\n name,\n type: 'variable',\n startPosition: {\n row: node.startPosition.row,\n column: node.startPosition.column\n }\n });\n }\n\n node.children?.forEach((child: any) => visit(child));\n };\n\n visit(node);\n return exports;\n }\n\n private convertTypeScriptAST(node: any): ASTNode {\n return {\n type: node.type,\n text: '',\n startPosition: { row: node.loc?.start?.line - 1 || 0, column: node.loc?.start?.column || 0 },\n endPosition: { row: node.loc?.end?.line - 1 || 0, column: node.loc?.end?.column || 0 },\n children: []\n };\n }\n\n private convertTreeSitterAST(node: any, content: string): ASTNode {\n const children: ASTNode[] = [];\n \n if (node.children) {\n for (const child of node.children) {\n children.push(this.convertTreeSitterAST(child, content));\n }\n }\n\n return {\n type: node.type,\n text: content.slice(node.startIndex, node.endIndex),\n startPosition: { row: node.startPosition.row, column: node.startPosition.column },\n endPosition: { row: node.endPosition.row, column: node.endPosition.column },\n children\n };\n }\n\n private extractNodeName(node: any, nameField: string): string | null {\n const nameNode = node.children?.find((child: any) => child.type === nameField);\n return nameNode ? nameNode.text : null;\n }\n\n private getDeclarationType(nodeType: string): ExportInfo['type'] {\n switch (nodeType) {\n case 'FunctionDeclaration':\n return 'function';\n case 'ClassDeclaration':\n return 'class';\n case 'TSInterfaceDeclaration':\n return 'interface';\n case 'TSEnumDeclaration':\n return 'enum';\n case 'TSTypeAliasDeclaration':\n return 'type';\n default:\n return 'variable';\n }\n }\n\n private matchesScope(symbol: SymbolInfo, scope: string): boolean {\n switch (scope) {\n case 'global':\n return symbol.scope === 'global';\n case 'local':\n return symbol.scope !== 'global';\n default:\n return true;\n }\n }\n\n getSchema() {\n return {\n type: \"object\",\n properties: {\n filePath: {\n type: \"string\",\n description: \"Path to the source code file to parse\"\n },\n includeSymbols: {\n type: \"boolean\",\n description: \"Whether to extract symbols (functions, classes, variables, etc.)\",\n default: true\n },\n includeImports: {\n type: \"boolean\", \n description: \"Whether to extract import/export information\",\n default: true\n },\n includeTree: {\n type: \"boolean\",\n description: \"Whether to include the full AST tree in response\",\n default: false\n },\n symbolTypes: {\n type: \"array\",\n items: {\n type: \"string\",\n enum: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\", \"method\", \"property\"]\n },\n description: \"Types of symbols to extract\",\n default: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\"]\n },\n scope: {\n type: \"string\",\n enum: [\"all\", \"global\", \"local\"],\n description: \"Scope of symbols to extract\",\n default: \"all\"\n }\n },\n required: [\"filePath\"]\n };\n }\n}","import { ToolResult } from \"../../types/index.js\";\nimport { ASTParserTool, SymbolInfo } from \"./ast-parser.js\";\nimport Fuse from \"fuse.js\";\nimport * as ops from \"fs\";\n\nconst _pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport _path from \"path\";\nimport { glob } from \"glob\";\n\nexport interface SymbolReference {\n symbol: SymbolInfo;\n filePath: string;\n usages: SymbolUsage[];\n}\n\nexport interface SymbolUsage {\n line: number;\n column: number;\n context: string;\n type: 'definition' | 'call' | 'reference' | 'import' | 'export';\n}\n\nexport interface SearchResult {\n query: string;\n totalMatches: number;\n symbols: SymbolReference[];\n searchTime: number;\n scope: {\n filesSearched: number;\n symbolsIndexed: number;\n };\n}\n\nexport interface CrossReference {\n symbol: string;\n definitionFile: string;\n usageFiles: string[];\n importedBy: string[];\n exportedTo: string[];\n}\n\nexport class SymbolSearchTool {\n name = \"symbol_search\";\n description = \"Search for symbols (functions, classes, variables) across the codebase with fuzzy matching and cross-references\";\n\n private astParser: ASTParserTool;\n private symbolIndex: Map<string, SymbolReference[]> = new Map();\n private lastIndexTime: number = 0;\n private indexCacheDuration = 5 * 60 * 1000; // 5 minutes\n\n constructor() {\n this.astParser = new ASTParserTool();\n }\n\n async execute(args: any): Promise<ToolResult> {\n try {\n const {\n query,\n searchPath = process.cwd(),\n symbolTypes = ['function', 'class', 'variable', 'interface', 'enum', 'type'],\n includeUsages = false,\n fuzzyMatch = true,\n caseSensitive = false,\n maxResults = 50,\n filePatterns = ['**/*.{ts,tsx,js,jsx,py}'],\n excludePatterns = ['**/node_modules/**', '**/dist/**', '**/.git/**'],\n indexCache = true\n } = args;\n\n if (!query) {\n throw new Error(\"Search query is required\");\n }\n\n const startTime = Date.now();\n\n // Build or refresh symbol index\n if (!indexCache || this.shouldRebuildIndex()) {\n await this.buildSymbolIndex(searchPath, filePatterns, excludePatterns, symbolTypes);\n }\n\n // Perform search\n const results = await this.searchSymbols(\n query,\n symbolTypes,\n fuzzyMatch,\n caseSensitive,\n maxResults,\n includeUsages\n );\n\n const searchTime = Date.now() - startTime;\n\n return {\n success: true,\n output: JSON.stringify({\n ...results,\n searchTime\n }, null, 2)\n };\n\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private shouldRebuildIndex(): boolean {\n return Date.now() - this.lastIndexTime > this.indexCacheDuration;\n }\n\n private async buildSymbolIndex(\n searchPath: string,\n filePatterns: string[],\n excludePatterns: string[],\n symbolTypes: string[]\n ): Promise<void> {\n this.symbolIndex.clear();\n \n // Find all source files\n const allFiles: string[] = [];\n for (const pattern of filePatterns) {\n const files = await glob(pattern, {\n cwd: searchPath,\n absolute: true,\n ignore: excludePatterns\n });\n allFiles.push(...files);\n }\n\n // Parse each file and extract symbols\n for (const filePath of allFiles) {\n try {\n const parseResult = await this.astParser.execute({\n filePath,\n includeSymbols: true,\n includeImports: false,\n includeTree: false,\n symbolTypes\n });\n\n if (!parseResult.success || !parseResult.output) continue;\n const parsed = JSON.parse(parseResult.output);\n if (parsed.success && parsed.result.symbols) {\n const symbols = parsed.result.symbols as SymbolInfo[];\n \n for (const symbol of symbols) {\n const symbolRef: SymbolReference = {\n symbol,\n filePath,\n usages: []\n };\n\n // Index by symbol name\n const existing = this.symbolIndex.get(symbol.name) || [];\n existing.push(symbolRef);\n this.symbolIndex.set(symbol.name, existing);\n\n // Index by type for broader searches\n const typeKey = `type:${symbol.type}`;\n const typeExisting = this.symbolIndex.get(typeKey) || [];\n typeExisting.push(symbolRef);\n this.symbolIndex.set(typeKey, typeExisting);\n }\n }\n } catch (error) {\n // Skip files that can't be parsed\n console.warn(`Failed to parse ${filePath}: ${error}`);\n }\n }\n\n this.lastIndexTime = Date.now();\n }\n\n private async searchSymbols(\n query: string,\n symbolTypes: string[],\n fuzzyMatch: boolean,\n caseSensitive: boolean,\n maxResults: number,\n includeUsages: boolean\n ): Promise<SearchResult> {\n const allSymbols: SymbolReference[] = [];\n \n // Collect all indexed symbols\n for (const refs of this.symbolIndex.values()) {\n allSymbols.push(...refs);\n }\n\n // Filter by symbol types\n const filteredSymbols = allSymbols.filter(ref => \n symbolTypes.includes(ref.symbol.type)\n );\n\n let matches: SymbolReference[] = [];\n\n if (fuzzyMatch) {\n // Use Fuse.js for fuzzy searching\n const fuse = new Fuse(filteredSymbols, {\n keys: [\n { name: 'symbol.name', weight: 0.7 },\n { name: 'symbol.type', weight: 0.2 },\n { name: 'filePath', weight: 0.1 }\n ],\n threshold: 0.4,\n includeScore: true,\n includeMatches: true,\n isCaseSensitive: caseSensitive\n });\n\n const fuseResults = fuse.search(query);\n matches = fuseResults.map(result => result.item);\n } else {\n // Exact string matching\n const queryLower = caseSensitive ? query : query.toLowerCase();\n matches = filteredSymbols.filter(ref => {\n const symbolName = caseSensitive ? ref.symbol.name : ref.symbol.name.toLowerCase();\n return symbolName.includes(queryLower);\n });\n }\n\n // Limit results\n matches = matches.slice(0, maxResults);\n\n // Optionally find usages\n if (includeUsages) {\n for (const match of matches) {\n match.usages = await this.findSymbolUsages(match);\n }\n }\n\n return {\n query,\n totalMatches: matches.length,\n symbols: matches,\n searchTime: 0, // Will be set by caller\n scope: {\n filesSearched: this.getUniqueFiles(allSymbols).length,\n symbolsIndexed: allSymbols.length\n }\n };\n }\n\n private async findSymbolUsages(symbolRef: SymbolReference): Promise<SymbolUsage[]> {\n const usages: SymbolUsage[] = [];\n \n try {\n const content = await ops.promises.readFile(symbolRef.filePath, 'utf-8');\n const lines = content.split('\\n');\n \n // Simple text-based usage finding\n // TODO: Use AST analysis for more accurate results\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const symbolName = symbolRef.symbol.name;\n \n let index = 0;\n while ((index = line.indexOf(symbolName, index)) !== -1) {\n // Skip if this is the definition itself\n if (i === symbolRef.symbol.startPosition.row) {\n index += symbolName.length;\n continue;\n }\n\n // Determine usage type based on context\n let usageType: SymbolUsage['type'] = 'reference';\n \n if (line.includes('import') && line.includes(symbolName)) {\n usageType = 'import';\n } else if (line.includes('export') && line.includes(symbolName)) {\n usageType = 'export';\n } else if (line.includes(symbolName + '(')) {\n usageType = 'call';\n }\n\n usages.push({\n line: i,\n column: index,\n context: line.trim(),\n type: usageType\n });\n\n index += symbolName.length;\n }\n }\n } catch (_error) {\n // Skip if file can't be read\n }\n\n return usages;\n }\n\n private getUniqueFiles(symbols: SymbolReference[]): string[] {\n const files = new Set(symbols.map(ref => ref.filePath));\n return Array.from(files);\n }\n\n async findCrossReferences(symbolName: string, searchPath: string = process.cwd()): Promise<CrossReference[]> {\n const crossRefs: CrossReference[] = [];\n \n // Find all occurrences of the symbol\n const searchResult = await this.execute({\n query: symbolName,\n searchPath,\n includeUsages: true,\n fuzzyMatch: false,\n caseSensitive: true\n });\n\n if (!searchResult.success || !searchResult.output) return [];\n const parsed = JSON.parse(searchResult.output);\n if (parsed.success && parsed.result.symbols) {\n const symbols = parsed.result.symbols as SymbolReference[];\n \n for (const symbolRef of symbols) {\n if (symbolRef.symbol.name === symbolName) {\n const definitionFile = symbolRef.filePath;\n const usageFiles = symbolRef.usages\n .filter(usage => usage.type === 'reference' || usage.type === 'call')\n .map(() => symbolRef.filePath); // Simplified - should check other files\n\n const importedBy = symbolRef.usages\n .filter(usage => usage.type === 'import')\n .map(() => symbolRef.filePath);\n\n const exportedTo = symbolRef.usages\n .filter(usage => usage.type === 'export')\n .map(() => symbolRef.filePath);\n\n crossRefs.push({\n symbol: symbolName,\n definitionFile,\n usageFiles: [...new Set(usageFiles)],\n importedBy: [...new Set(importedBy)],\n exportedTo: [...new Set(exportedTo)]\n });\n }\n }\n }\n\n return crossRefs;\n }\n\n async findSimilarSymbols(symbolName: string, threshold: number = 0.6): Promise<SymbolReference[]> {\n const allSymbols: SymbolReference[] = [];\n \n for (const refs of this.symbolIndex.values()) {\n allSymbols.push(...refs);\n }\n\n const fuse = new Fuse(allSymbols, {\n keys: ['symbol.name'],\n threshold,\n includeScore: true\n });\n\n const results = fuse.search(symbolName);\n return results.map(result => result.item);\n }\n\n async getSymbolsByType(symbolType: string, searchPath: string = process.cwd()): Promise<SymbolReference[]> {\n if (!this.symbolIndex.has(`type:${symbolType}`)) {\n await this.buildSymbolIndex(\n searchPath,\n ['**/*.{ts,tsx,js,jsx,py}'],\n ['**/node_modules/**', '**/dist/**', '**/.git/**'],\n [symbolType]\n );\n }\n\n return this.symbolIndex.get(`type:${symbolType}`) || [];\n }\n\n clearIndex(): void {\n this.symbolIndex.clear();\n this.lastIndexTime = 0;\n }\n\n getIndexStats(): { symbolCount: number; fileCount: number; lastUpdated: Date } {\n const allSymbols: SymbolReference[] = [];\n for (const refs of this.symbolIndex.values()) {\n allSymbols.push(...refs);\n }\n\n return {\n symbolCount: allSymbols.length,\n fileCount: this.getUniqueFiles(allSymbols).length,\n lastUpdated: new Date(this.lastIndexTime)\n };\n }\n\n getSchema() {\n return {\n type: \"object\",\n properties: {\n query: {\n type: \"string\",\n description: \"Search query for symbol names\"\n },\n searchPath: {\n type: \"string\",\n description: \"Root path to search in\",\n default: \"current working directory\"\n },\n symbolTypes: {\n type: \"array\",\n items: {\n type: \"string\",\n enum: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\", \"method\", \"property\"]\n },\n description: \"Types of symbols to search for\",\n default: [\"function\", \"class\", \"variable\", \"interface\", \"enum\", \"type\"]\n },\n includeUsages: {\n type: \"boolean\",\n description: \"Whether to find usages of matched symbols\",\n default: false\n },\n fuzzyMatch: {\n type: \"boolean\",\n description: \"Use fuzzy matching for symbol names\",\n default: true\n },\n caseSensitive: {\n type: \"boolean\", \n description: \"Case sensitive search\",\n default: false\n },\n maxResults: {\n type: \"integer\",\n description: \"Maximum number of results to return\",\n default: 50,\n minimum: 1,\n maximum: 1000\n },\n filePatterns: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Glob patterns for files to search\",\n default: [\"**/*.{ts,tsx,js,jsx,py}\"]\n },\n excludePatterns: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Glob patterns for files to exclude\",\n default: [\"**/node_modules/**\", \"**/dist/**\", \"**/.git/**\"]\n },\n indexCache: {\n type: \"boolean\",\n description: \"Use cached symbol index if available\",\n default: true\n }\n },\n required: [\"query\"]\n };\n }\n}","import { ToolResult } from \"../../types/index.js\";\nimport { ASTParserTool, ImportInfo, ExportInfo } from \"./ast-parser.js\";\nimport * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport path from \"path\";\nimport { glob } from \"glob\";\n\nexport interface DependencyNode {\n filePath: string;\n absolutePath: string;\n imports: ImportInfo[];\n exports: ExportInfo[];\n dependencies: string[];\n dependents: string[];\n isEntryPoint: boolean;\n isLeaf: boolean;\n circularDependencies: string[][];\n}\n\nexport interface DependencyGraph {\n nodes: Map<string, DependencyNode>;\n entryPoints: string[];\n leafNodes: string[];\n circularDependencies: CircularDependency[];\n unreachableFiles: string[];\n statistics: DependencyStatistics;\n}\n\nexport interface CircularDependency {\n cycle: string[];\n severity: 'warning' | 'error';\n type: 'direct' | 'indirect';\n}\n\nexport interface DependencyStatistics {\n totalFiles: number;\n totalDependencies: number;\n averageDependencies: number;\n maxDependencyDepth: number;\n circularDependencyCount: number;\n unreachableFileCount: number;\n}\n\nexport interface ModuleAnalysis {\n filePath: string;\n externalDependencies: string[];\n internalDependencies: string[];\n circularImports: string[];\n unusedImports: string[];\n missingDependencies: string[];\n duplicateImports: string[];\n}\n\nexport class DependencyAnalyzerTool {\n name = \"dependency_analyzer\";\n description = \"Analyze import/export dependencies, detect circular dependencies, and generate dependency graphs\";\n\n private astParser: ASTParserTool;\n\n constructor() {\n this.astParser = new ASTParserTool();\n }\n\n async execute(args: any): Promise<ToolResult> {\n try {\n const {\n rootPath = process.cwd(),\n filePatterns = ['**/*.{ts,tsx,js,jsx}'],\n excludePatterns = ['**/node_modules/**', '**/dist/**', '**/.git/**'],\n includeExternals = false,\n detectCircular = true,\n findUnreachable = true,\n generateGraph = false,\n entryPoints = [],\n maxDepth = 50\n } = args;\n\n if (!await pathExists(rootPath)) {\n throw new Error(`Root path does not exist: ${rootPath}`);\n }\n\n // Find all source files\n const sourceFiles = await this.findSourceFiles(rootPath, filePatterns, excludePatterns);\n \n // Build dependency graph\n const dependencyGraph = await this.buildDependencyGraph(\n sourceFiles,\n rootPath,\n includeExternals,\n maxDepth\n );\n\n // Detect circular dependencies\n if (detectCircular) {\n dependencyGraph.circularDependencies = this.detectCircularDependencies(dependencyGraph);\n }\n\n // Find unreachable files\n if (findUnreachable) {\n dependencyGraph.unreachableFiles = this.findUnreachableFiles(\n dependencyGraph,\n entryPoints.length > 0 ? entryPoints : this.inferEntryPoints(dependencyGraph)\n );\n }\n\n // Calculate statistics\n dependencyGraph.statistics = this.calculateStatistics(dependencyGraph);\n\n // Format response\n const result: any = {\n rootPath,\n totalFiles: sourceFiles.length,\n entryPoints: dependencyGraph.entryPoints,\n leafNodes: dependencyGraph.leafNodes,\n statistics: dependencyGraph.statistics\n };\n\n if (detectCircular) {\n result.circularDependencies = dependencyGraph.circularDependencies;\n }\n\n if (findUnreachable) {\n result.unreachableFiles = dependencyGraph.unreachableFiles;\n }\n\n if (generateGraph) {\n result.dependencyGraph = this.serializeDependencyGraph(dependencyGraph);\n }\n\n return {\n success: true,\n output: JSON.stringify(result, null, 2)\n };\n\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private async findSourceFiles(\n rootPath: string,\n filePatterns: string[],\n excludePatterns: string[]\n ): Promise<string[]> {\n const allFiles: string[] = [];\n \n for (const pattern of filePatterns) {\n const files = await glob(pattern, {\n cwd: rootPath,\n absolute: true,\n ignore: excludePatterns\n });\n allFiles.push(...files);\n }\n\n return [...new Set(allFiles)]; // Remove duplicates\n }\n\n private async buildDependencyGraph(\n sourceFiles: string[],\n rootPath: string,\n includeExternals: boolean,\n maxDepth: number\n ): Promise<DependencyGraph> {\n const graph: DependencyGraph = {\n nodes: new Map(),\n entryPoints: [],\n leafNodes: [],\n circularDependencies: [],\n unreachableFiles: [],\n statistics: {\n totalFiles: 0,\n totalDependencies: 0,\n averageDependencies: 0,\n maxDependencyDepth: 0,\n circularDependencyCount: 0,\n unreachableFileCount: 0\n }\n };\n\n // Parse each file and extract imports/exports\n for (const filePath of sourceFiles) {\n try {\n const parseResult = await this.astParser.execute({\n filePath,\n includeSymbols: false,\n includeImports: true,\n includeTree: false\n });\n\n if (!parseResult.success || !parseResult.output) continue;\n const parsed = JSON.parse(parseResult.output);\n if (parsed.success && parsed.result) {\n const imports = parsed.result.imports as ImportInfo[] || [];\n const exports = parsed.result.exports as ExportInfo[] || [];\n\n // Resolve import paths\n const dependencies = await this.resolveImportPaths(\n imports,\n filePath,\n rootPath,\n includeExternals\n );\n\n const node: DependencyNode = {\n filePath: path.relative(rootPath, filePath),\n absolutePath: filePath,\n imports,\n exports,\n dependencies,\n dependents: [],\n isEntryPoint: false,\n isLeaf: dependencies.length === 0,\n circularDependencies: []\n };\n\n graph.nodes.set(filePath, node);\n }\n } catch (error) {\n console.warn(`Failed to parse ${filePath}: ${error}`);\n }\n }\n\n // Build reverse dependencies (dependents)\n for (const [filePath, node] of graph.nodes) {\n for (const dependency of node.dependencies) {\n const depNode = graph.nodes.get(dependency);\n if (depNode) {\n depNode.dependents.push(filePath);\n }\n }\n }\n\n // Identify entry points and leaf nodes\n for (const [filePath, node] of graph.nodes) {\n node.isEntryPoint = node.dependents.length === 0;\n node.isLeaf = node.dependencies.length === 0;\n\n if (node.isEntryPoint) {\n graph.entryPoints.push(filePath);\n }\n if (node.isLeaf) {\n graph.leafNodes.push(filePath);\n }\n }\n\n return graph;\n }\n\n private async resolveImportPaths(\n imports: ImportInfo[],\n currentFile: string,\n rootPath: string,\n includeExternals: boolean\n ): Promise<string[]> {\n const dependencies: string[] = [];\n const currentDir = path.dirname(currentFile);\n\n for (const importInfo of imports) {\n let resolvedPath: string | null = null;\n\n if (importInfo.source.startsWith('.')) {\n // Relative import\n resolvedPath = await this.resolveRelativeImport(importInfo.source, currentDir);\n } else if (importInfo.source.startsWith('/')) {\n // Absolute import from root\n resolvedPath = await this.resolveAbsoluteImport(importInfo.source, rootPath);\n } else if (includeExternals) {\n // External module\n dependencies.push(importInfo.source);\n continue;\n } else {\n // Skip external modules if not including them\n continue;\n }\n\n if (resolvedPath && await pathExists(resolvedPath)) {\n dependencies.push(resolvedPath);\n }\n }\n\n return dependencies;\n }\n\n private async resolveRelativeImport(importPath: string, currentDir: string): Promise<string | null> {\n const basePath = path.resolve(currentDir, importPath);\n \n // Try different extensions\n const extensions = ['.ts', '.tsx', '.js', '.jsx', '.json'];\n \n for (const ext of extensions) {\n const fullPath = basePath + ext;\n if (await pathExists(fullPath)) {\n return fullPath;\n }\n }\n\n // Try index files\n for (const ext of extensions) {\n const indexPath = path.join(basePath, `index${ext}`);\n if (await pathExists(indexPath)) {\n return indexPath;\n }\n }\n\n return null;\n }\n\n private async resolveAbsoluteImport(importPath: string, rootPath: string): Promise<string | null> {\n const fullPath = path.join(rootPath, importPath.slice(1)); // Remove leading slash\n return await this.resolveRelativeImport('.', path.dirname(fullPath));\n }\n\n private detectCircularDependencies(graph: DependencyGraph): CircularDependency[] {\n const circularDeps: CircularDependency[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const dfs = (filePath: string, path: string[]): void => {\n if (visiting.has(filePath)) {\n // Found a cycle\n const cycleStart = path.indexOf(filePath);\n const cycle = path.slice(cycleStart).concat([filePath]);\n \n circularDeps.push({\n cycle: cycle.map(fp => graph.nodes.get(fp)?.filePath || fp),\n severity: cycle.length <= 2 ? 'error' : 'warning',\n type: cycle.length <= 2 ? 'direct' : 'indirect'\n });\n return;\n }\n\n if (visited.has(filePath)) {\n return;\n }\n\n visiting.add(filePath);\n const node = graph.nodes.get(filePath);\n \n if (node) {\n for (const dependency of node.dependencies) {\n if (graph.nodes.has(dependency)) {\n dfs(dependency, [...path, filePath]);\n }\n }\n }\n\n visiting.delete(filePath);\n visited.add(filePath);\n };\n\n for (const filePath of graph.nodes.keys()) {\n if (!visited.has(filePath)) {\n dfs(filePath, []);\n }\n }\n\n return circularDeps;\n }\n\n private findUnreachableFiles(graph: DependencyGraph, entryPoints: string[]): string[] {\n const reachable = new Set<string>();\n\n const dfs = (filePath: string): void => {\n if (reachable.has(filePath)) {\n return;\n }\n\n reachable.add(filePath);\n const node = graph.nodes.get(filePath);\n \n if (node) {\n for (const dependency of node.dependencies) {\n if (graph.nodes.has(dependency)) {\n dfs(dependency);\n }\n }\n }\n };\n\n // Start DFS from entry points\n for (const entryPoint of entryPoints) {\n if (graph.nodes.has(entryPoint)) {\n dfs(entryPoint);\n }\n }\n\n // Find unreachable files\n const unreachable: string[] = [];\n for (const filePath of graph.nodes.keys()) {\n if (!reachable.has(filePath)) {\n const node = graph.nodes.get(filePath);\n unreachable.push(node?.filePath || filePath);\n }\n }\n\n return unreachable;\n }\n\n private inferEntryPoints(graph: DependencyGraph): string[] {\n // If no explicit entry points, use files with no dependents\n if (graph.entryPoints.length > 0) {\n return graph.entryPoints;\n }\n\n // Look for common entry point patterns\n const commonEntryPatterns = [\n /index\\.(ts|js|tsx|jsx)$/,\n /main\\.(ts|js|tsx|jsx)$/,\n /app\\.(ts|js|tsx|jsx)$/,\n /server\\.(ts|js|tsx|jsx)$/\n ];\n\n const entryPoints: string[] = [];\n \n for (const [filePath, node] of graph.nodes) {\n const fileName = path.basename(filePath);\n \n if (node.dependents.length === 0 || \n commonEntryPatterns.some(pattern => pattern.test(fileName))) {\n entryPoints.push(filePath);\n }\n }\n\n return entryPoints;\n }\n\n private calculateStatistics(graph: DependencyGraph): DependencyStatistics {\n const totalFiles = graph.nodes.size;\n let totalDependencies = 0;\n let maxDepth = 0;\n\n for (const node of graph.nodes.values()) {\n totalDependencies += node.dependencies.length;\n \n // Calculate depth from entry points\n const depth = this.calculateNodeDepth(node.absolutePath, graph);\n maxDepth = Math.max(maxDepth, depth);\n }\n\n return {\n totalFiles,\n totalDependencies,\n averageDependencies: totalFiles > 0 ? totalDependencies / totalFiles : 0,\n maxDependencyDepth: maxDepth,\n circularDependencyCount: graph.circularDependencies.length,\n unreachableFileCount: graph.unreachableFiles.length\n };\n }\n\n private calculateNodeDepth(filePath: string, graph: DependencyGraph): number {\n const visited = new Set<string>();\n \n const dfs = (currentPath: string, depth: number): number => {\n if (visited.has(currentPath)) {\n return depth;\n }\n \n visited.add(currentPath);\n const node = graph.nodes.get(currentPath);\n \n if (!node || node.dependencies.length === 0) {\n return depth;\n }\n\n let maxChildDepth = depth;\n for (const dependency of node.dependencies) {\n if (graph.nodes.has(dependency)) {\n const childDepth = dfs(dependency, depth + 1);\n maxChildDepth = Math.max(maxChildDepth, childDepth);\n }\n }\n\n return maxChildDepth;\n };\n\n return dfs(filePath, 0);\n }\n\n private serializeDependencyGraph(graph: DependencyGraph): any {\n const nodes: any[] = [];\n \n for (const [filePath, node] of graph.nodes) {\n nodes.push({\n id: filePath,\n filePath: node.filePath,\n dependencies: node.dependencies,\n dependents: node.dependents,\n isEntryPoint: node.isEntryPoint,\n isLeaf: node.isLeaf,\n importCount: node.imports.length,\n exportCount: node.exports.length\n });\n }\n\n return {\n nodes,\n edges: this.generateEdges(graph)\n };\n }\n\n private generateEdges(graph: DependencyGraph): any[] {\n const edges: any[] = [];\n \n for (const [filePath, node] of graph.nodes) {\n for (const dependency of node.dependencies) {\n if (graph.nodes.has(dependency)) {\n edges.push({\n from: filePath,\n to: dependency,\n type: 'dependency'\n });\n }\n }\n }\n\n return edges;\n }\n\n // Additional utility methods\n async analyzeModule(filePath: string): Promise<ModuleAnalysis> {\n const parseResult = await this.astParser.execute({\n filePath,\n includeSymbols: false,\n includeImports: true,\n includeTree: false\n });\n\n if (!parseResult.success || !parseResult.output) {\n throw new Error(`Failed to parse module: ${filePath}`);\n }\n const parsed = JSON.parse(parseResult.output);\n if (!parsed.success) {\n throw new Error(`Failed to parse module: ${filePath}`);\n }\n\n const imports = parsed.result.imports as ImportInfo[] || [];\n const rootPath = process.cwd();\n \n const externalDependencies: string[] = [];\n const internalDependencies: string[] = [];\n const duplicateImports: string[] = [];\n const seenSources = new Set<string>();\n\n for (const importInfo of imports) {\n if (seenSources.has(importInfo.source)) {\n duplicateImports.push(importInfo.source);\n } else {\n seenSources.add(importInfo.source);\n }\n\n if (importInfo.source.startsWith('.') || importInfo.source.startsWith('/')) {\n const resolved = await this.resolveRelativeImport(\n importInfo.source,\n path.dirname(filePath)\n );\n if (resolved) {\n internalDependencies.push(resolved);\n }\n } else {\n externalDependencies.push(importInfo.source);\n }\n }\n\n return {\n filePath: path.relative(rootPath, filePath),\n externalDependencies,\n internalDependencies,\n circularImports: [], // TODO: Implement\n unusedImports: [], // TODO: Implement with symbol usage analysis\n missingDependencies: [], // TODO: Implement with file existence checks\n duplicateImports\n };\n }\n\n getSchema() {\n return {\n type: \"object\",\n properties: {\n rootPath: {\n type: \"string\",\n description: \"Root path to analyze dependencies from\",\n default: \"current working directory\"\n },\n filePatterns: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Glob patterns for files to include\",\n default: [\"**/*.{ts,tsx,js,jsx}\"]\n },\n excludePatterns: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Glob patterns for files to exclude\",\n default: [\"**/node_modules/**\", \"**/dist/**\", \"**/.git/**\"]\n },\n includeExternals: {\n type: \"boolean\",\n description: \"Include external module dependencies\",\n default: false\n },\n detectCircular: {\n type: \"boolean\",\n description: \"Detect circular dependencies\",\n default: true\n },\n findUnreachable: {\n type: \"boolean\",\n description: \"Find unreachable files from entry points\",\n default: true\n },\n generateGraph: {\n type: \"boolean\",\n description: \"Generate serialized dependency graph\",\n default: false\n },\n entryPoints: {\n type: \"array\",\n items: { type: \"string\" },\n description: \"Explicit entry point files (if not provided, will be inferred)\",\n default: []\n },\n maxDepth: {\n type: \"integer\",\n description: \"Maximum dependency depth to analyze\",\n default: 50,\n minimum: 1,\n maximum: 1000\n }\n }\n };\n }\n}","import { ToolResult } from \"../../types/index.js\";\nimport { ASTParserTool, SymbolInfo } from \"./ast-parser.js\";\nimport { SymbolSearchTool, SymbolReference } from \"./symbol-search.js\";\nimport { DependencyAnalyzerTool } from \"./dependency-analyzer.js\";\nimport * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport path from \"path\";\n\nexport interface CodeContext {\n filePath: string;\n symbols: ContextualSymbol[];\n dependencies: ContextualDependency[];\n relationships: CodeRelationship[];\n semanticContext: SemanticContext;\n codeMetrics: CodeMetrics;\n}\n\nexport interface ContextualSymbol extends SymbolInfo {\n context: {\n parentClass?: string;\n parentFunction?: string;\n relatedSymbols: string[];\n usagePatterns: UsagePattern[];\n semanticTags: string[];\n };\n}\n\nexport interface ContextualDependency {\n source: string;\n type: 'internal' | 'external' | 'builtin';\n usage: 'direct' | 'indirect';\n importedSymbols: string[];\n usageContext: string[];\n isCircular: boolean;\n}\n\nexport interface CodeRelationship {\n type: 'inheritance' | 'composition' | 'dependency' | 'usage' | 'similarity';\n source: string;\n target: string;\n strength: number; // 0-1\n description: string;\n evidence: string[];\n}\n\nexport interface SemanticContext {\n purpose: string;\n domain: string[];\n patterns: DesignPattern[];\n complexity: ComplexityMetrics;\n quality: QualityMetrics;\n}\n\nexport interface DesignPattern {\n name: string;\n confidence: number;\n evidence: string[];\n location: { startLine: number; endLine: number };\n}\n\nexport interface UsagePattern {\n pattern: string;\n frequency: number;\n contexts: string[];\n}\n\nexport interface CodeMetrics {\n linesOfCode: number;\n cyclomaticComplexity: number;\n cognitiveComplexity: number;\n maintainabilityIndex: number;\n technicalDebt: number;\n}\n\nexport interface ComplexityMetrics {\n cyclomatic: number;\n cognitive: number;\n nesting: number;\n dependencies: number;\n}\n\nexport interface QualityMetrics {\n maintainability: number;\n readability: number;\n testability: number;\n reusability: number;\n}\n\nexport interface ProjectContext {\n rootPath: string;\n projectType: string;\n architecture: ArchitectureInfo;\n codebase: CodebaseInfo;\n relationships: ProjectRelationship[];\n}\n\nexport interface ArchitectureInfo {\n pattern: string; // MVC, Microservices, Layered, etc.\n layers: ArchitectureLayer[];\n entryPoints: string[];\n coreModules: string[];\n}\n\nexport interface ArchitectureLayer {\n name: string;\n files: string[];\n dependencies: string[];\n responsibility: string;\n}\n\nexport interface CodebaseInfo {\n totalFiles: number;\n languages: { [language: string]: number };\n frameworks: string[];\n testCoverage: number;\n documentation: number;\n}\n\nexport interface ProjectRelationship {\n type: string;\n modules: string[];\n strength: number;\n description: string;\n}\n\nexport class CodeContextTool {\n name = \"code_context\";\n description = \"Build intelligent code context, analyze relationships, and provide semantic understanding\";\n\n private astParser: ASTParserTool;\n private symbolSearch: SymbolSearchTool;\n private dependencyAnalyzer: DependencyAnalyzerTool;\n\n constructor() {\n this.astParser = new ASTParserTool();\n this.symbolSearch = new SymbolSearchTool();\n this.dependencyAnalyzer = new DependencyAnalyzerTool();\n }\n\n async execute(args: any): Promise<ToolResult> {\n try {\n const {\n filePath,\n rootPath = process.cwd(),\n includeRelationships = true,\n includeMetrics = true,\n includeSemantics = true,\n maxRelatedFiles = 10,\n contextDepth = 2\n } = args;\n\n if (!filePath) {\n throw new Error(\"File path is required\");\n }\n\n if (!await pathExists(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n // Build comprehensive context\n const context = await this.buildCodeContext(\n filePath,\n rootPath,\n includeRelationships,\n includeMetrics,\n includeSemantics,\n maxRelatedFiles,\n contextDepth\n );\n\n return {\n success: true,\n output: JSON.stringify(context, null, 2)\n };\n\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private async buildCodeContext(\n filePath: string,\n rootPath: string,\n includeRelationships: boolean,\n includeMetrics: boolean,\n includeSemantics: boolean,\n maxRelatedFiles: number,\n contextDepth: number\n ): Promise<CodeContext> {\n // Parse the file\n const parseResult = await this.astParser.execute({\n filePath,\n includeSymbols: true,\n includeImports: true,\n includeTree: false\n });\n\n if (!parseResult.success || !parseResult.output) {\n throw new Error(`Failed to parse file: ${filePath}`);\n }\n const parsed = JSON.parse(parseResult.output);\n if (!parsed.success) {\n throw new Error(`Failed to parse file: ${filePath}`);\n }\n\n const symbols = parsed.result.symbols as SymbolInfo[] || [];\n const imports = parsed.result.imports || [];\n\n // Enhance symbols with context\n const contextualSymbols = await this.enhanceSymbolsWithContext(symbols, filePath, rootPath);\n\n // Analyze dependencies\n const dependencies = await this.analyzeDependencies(imports, filePath, rootPath);\n\n // Build relationships\n let relationships: CodeRelationship[] = [];\n if (includeRelationships) {\n relationships = await this.buildCodeRelationships(\n filePath,\n contextualSymbols,\n dependencies,\n rootPath,\n maxRelatedFiles\n );\n }\n\n // Analyze semantics\n let semanticContext: SemanticContext = {\n purpose: 'unknown',\n domain: [],\n patterns: [],\n complexity: { cyclomatic: 0, cognitive: 0, nesting: 0, dependencies: 0 },\n quality: { maintainability: 0, readability: 0, testability: 0, reusability: 0 }\n };\n\n if (includeSemantics) {\n semanticContext = await this.analyzeSemanticContext(filePath, contextualSymbols, dependencies);\n }\n\n // Calculate metrics\n let codeMetrics: CodeMetrics = {\n linesOfCode: 0,\n cyclomaticComplexity: 0,\n cognitiveComplexity: 0,\n maintainabilityIndex: 0,\n technicalDebt: 0\n };\n\n if (includeMetrics) {\n codeMetrics = await this.calculateCodeMetrics(filePath, contextualSymbols);\n }\n\n return {\n filePath: path.relative(rootPath, filePath),\n symbols: contextualSymbols,\n dependencies,\n relationships,\n semanticContext,\n codeMetrics\n };\n }\n\n private async enhanceSymbolsWithContext(\n symbols: SymbolInfo[],\n filePath: string,\n rootPath: string\n ): Promise<ContextualSymbol[]> {\n const enhanced: ContextualSymbol[] = [];\n\n for (const symbol of symbols) {\n // Find related symbols\n const relatedSymbols = await this.findRelatedSymbols(symbol, symbols, filePath, rootPath);\n\n // Analyze usage patterns\n const usagePatterns = await this.analyzeUsagePatterns(symbol, filePath);\n\n // Generate semantic tags\n const semanticTags = this.generateSemanticTags(symbol, filePath);\n\n const contextualSymbol: ContextualSymbol = {\n ...symbol,\n context: {\n parentClass: this.findParentClass(symbol, symbols),\n parentFunction: this.findParentFunction(symbol, symbols),\n relatedSymbols,\n usagePatterns,\n semanticTags\n }\n };\n\n enhanced.push(contextualSymbol);\n }\n\n return enhanced;\n }\n\n private async findRelatedSymbols(\n symbol: SymbolInfo,\n allSymbols: SymbolInfo[],\n filePath: string,\n rootPath: string\n ): Promise<string[]> {\n const related: string[] = [];\n\n // Find symbols in same class/scope\n const sameScope = allSymbols.filter(s => \n s !== symbol && s.scope === symbol.scope\n );\n related.push(...sameScope.map(s => s.name));\n\n // Search for similar symbols across project\n try {\n const searchResult = await this.symbolSearch.findSimilarSymbols(symbol.name, 0.7);\n const similarNames = searchResult\n .filter(ref => ref.filePath !== filePath)\n .slice(0, 5)\n .map(ref => ref.symbol.name);\n related.push(...similarNames);\n } catch (error) {\n // Skip if search fails\n }\n\n return [...new Set(related)];\n }\n\n private async analyzeUsagePatterns(symbol: SymbolInfo, filePath: string): Promise<UsagePattern[]> {\n const patterns: UsagePattern[] = [];\n\n try {\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n // Simple pattern analysis\n let callCount = 0;\n let assignmentCount = 0;\n let returnCount = 0;\n\n for (const line of lines) {\n if (line.includes(`${symbol.name}(`)) callCount++;\n if (line.includes(`= ${symbol.name}`) || line.includes(`const ${symbol.name}`)) assignmentCount++;\n if (line.includes(`return ${symbol.name}`)) returnCount++;\n }\n\n if (callCount > 0) {\n patterns.push({\n pattern: 'function_call',\n frequency: callCount,\n contexts: ['invocation']\n });\n }\n\n if (assignmentCount > 0) {\n patterns.push({\n pattern: 'assignment',\n frequency: assignmentCount,\n contexts: ['declaration', 'assignment']\n });\n }\n\n if (returnCount > 0) {\n patterns.push({\n pattern: 'return_value',\n frequency: returnCount,\n contexts: ['return']\n });\n }\n } catch (error) {\n // Skip if file read fails\n }\n\n return patterns;\n }\n\n private generateSemanticTags(symbol: SymbolInfo, filePath: string): string[] {\n const tags: string[] = [];\n\n // Basic type tag\n tags.push(symbol.type);\n\n // Name-based semantic analysis\n const name = symbol.name.toLowerCase();\n \n if (name.includes('test') || name.includes('spec')) {\n tags.push('test');\n }\n if (name.includes('util') || name.includes('helper')) {\n tags.push('utility');\n }\n if (name.includes('config') || name.includes('setting')) {\n tags.push('configuration');\n }\n if (name.includes('api') || name.includes('service')) {\n tags.push('api');\n }\n if (name.includes('component') || name.includes('widget')) {\n tags.push('ui');\n }\n if (name.includes('model') || name.includes('entity')) {\n tags.push('model');\n }\n if (name.includes('controller') || name.includes('handler')) {\n tags.push('controller');\n }\n\n // File path-based tags\n const fileName = path.basename(filePath);\n if (fileName.includes('test')) {\n tags.push('test');\n }\n if (fileName.includes('mock')) {\n tags.push('mock');\n }\n\n // Async/await patterns\n if (symbol.isAsync) {\n tags.push('async');\n }\n\n // Access modifiers\n if (symbol.accessibility) {\n tags.push(symbol.accessibility);\n }\n\n return [...new Set(tags)];\n }\n\n private findParentClass(symbol: SymbolInfo, allSymbols: SymbolInfo[]): string | undefined {\n const classSymbols = allSymbols.filter(s => s.type === 'class');\n \n for (const classSymbol of classSymbols) {\n if (symbol.startPosition.row >= classSymbol.startPosition.row &&\n symbol.endPosition.row <= classSymbol.endPosition.row &&\n symbol !== classSymbol) {\n return classSymbol.name;\n }\n }\n\n return undefined;\n }\n\n private findParentFunction(symbol: SymbolInfo, allSymbols: SymbolInfo[]): string | undefined {\n const functionSymbols = allSymbols.filter(s => s.type === 'function' || s.type === 'method');\n \n for (const funcSymbol of functionSymbols) {\n if (symbol.startPosition.row >= funcSymbol.startPosition.row &&\n symbol.endPosition.row <= funcSymbol.endPosition.row &&\n symbol !== funcSymbol) {\n return funcSymbol.name;\n }\n }\n\n return undefined;\n }\n\n private async analyzeDependencies(\n imports: any[],\n filePath: string,\n rootPath: string\n ): Promise<ContextualDependency[]> {\n const dependencies: ContextualDependency[] = [];\n\n for (const importInfo of imports) {\n const type = this.categorizeImport(importInfo.source);\n const importedSymbols = importInfo.specifiers?.map((spec: any) => spec.name) || [];\n\n dependencies.push({\n source: importInfo.source,\n type,\n usage: 'direct',\n importedSymbols,\n usageContext: [],\n isCircular: false // TODO: Check with dependency analyzer\n });\n }\n\n return dependencies;\n }\n\n private categorizeImport(source: string): 'internal' | 'external' | 'builtin' {\n if (source.startsWith('.') || source.startsWith('/')) {\n return 'internal';\n }\n\n const builtinModules = ['fs', 'path', 'util', 'crypto', 'http', 'https', 'os', 'url'];\n if (builtinModules.includes(source)) {\n return 'builtin';\n }\n\n return 'external';\n }\n\n private async buildCodeRelationships(\n filePath: string,\n symbols: ContextualSymbol[],\n dependencies: ContextualDependency[],\n rootPath: string,\n maxRelatedFiles: number\n ): Promise<CodeRelationship[]> {\n const relationships: CodeRelationship[] = [];\n\n // Symbol relationships within file\n for (const symbol of symbols) {\n for (const relatedName of symbol.context.relatedSymbols) {\n const relatedSymbol = symbols.find(s => s.name === relatedName);\n if (relatedSymbol) {\n relationships.push({\n type: 'usage',\n source: symbol.name,\n target: relatedSymbol.name,\n strength: 0.8,\n description: `${symbol.name} uses ${relatedSymbol.name}`,\n evidence: [`Same file: ${path.basename(filePath)}`]\n });\n }\n }\n }\n\n // Dependency relationships\n for (const dep of dependencies) {\n if (dep.type === 'internal') {\n relationships.push({\n type: 'dependency',\n source: path.basename(filePath),\n target: dep.source,\n strength: 0.9,\n description: `File depends on ${dep.source}`,\n evidence: [`Import: ${dep.importedSymbols.join(', ')}`]\n });\n }\n }\n\n return relationships;\n }\n\n private async analyzeSemanticContext(\n filePath: string,\n symbols: ContextualSymbol[],\n dependencies: ContextualDependency[]\n ): Promise<SemanticContext> {\n const fileName = path.basename(filePath);\n const content = await ops.promises.readFile(filePath, 'utf-8');\n\n // Determine purpose\n const purpose = this.inferPurpose(fileName, symbols, content);\n\n // Extract domain\n const domain = this.extractDomain(filePath, symbols, dependencies);\n\n // Detect patterns\n const patterns = this.detectDesignPatterns(content, symbols);\n\n // Calculate complexity\n const complexity = this.calculateComplexityMetrics(content, symbols);\n\n // Assess quality\n const quality = this.assessQuality(content, symbols, dependencies);\n\n return {\n purpose,\n domain,\n patterns,\n complexity,\n quality\n };\n }\n\n private inferPurpose(fileName: string, symbols: ContextualSymbol[], content: string): string {\n const name = fileName.toLowerCase();\n \n if (name.includes('test') || name.includes('spec')) return 'testing';\n if (name.includes('config')) return 'configuration';\n if (name.includes('util') || name.includes('helper')) return 'utility';\n if (name.includes('service')) return 'service';\n if (name.includes('component')) return 'ui_component';\n if (name.includes('model')) return 'data_model';\n if (name.includes('controller')) return 'controller';\n if (name.includes('router') || name.includes('route')) return 'routing';\n\n // Analyze symbol types\n const functionCount = symbols.filter(s => s.type === 'function').length;\n const classCount = symbols.filter(s => s.type === 'class').length;\n const interfaceCount = symbols.filter(s => s.type === 'interface').length;\n\n if (interfaceCount > functionCount && interfaceCount > classCount) return 'type_definitions';\n if (classCount > functionCount) return 'object_oriented';\n if (functionCount > 0) return 'functional';\n\n return 'unknown';\n }\n\n private extractDomain(filePath: string, symbols: ContextualSymbol[], dependencies: ContextualDependency[]): string[] {\n const domains: string[] = [];\n const pathParts = filePath.split(path.sep);\n\n // Extract from path\n for (const part of pathParts) {\n if (['auth', 'user', 'authentication'].includes(part.toLowerCase())) {\n domains.push('authentication');\n }\n if (['api', 'rest', 'graphql'].includes(part.toLowerCase())) {\n domains.push('api');\n }\n if (['ui', 'component', 'view'].includes(part.toLowerCase())) {\n domains.push('ui');\n }\n if (['data', 'model', 'database'].includes(part.toLowerCase())) {\n domains.push('data');\n }\n }\n\n // Extract from dependencies\n for (const dep of dependencies) {\n if (dep.source.includes('react')) domains.push('react');\n if (dep.source.includes('express')) domains.push('web_server');\n if (dep.source.includes('database') || dep.source.includes('sql')) domains.push('database');\n if (dep.source.includes('test')) domains.push('testing');\n }\n\n return [...new Set(domains)];\n }\n\n private detectDesignPatterns(content: string, symbols: ContextualSymbol[]): DesignPattern[] {\n const patterns: DesignPattern[] = [];\n\n // Singleton pattern detection\n if (content.includes('getInstance') && symbols.some(s => s.type === 'class')) {\n patterns.push({\n name: 'Singleton',\n confidence: 0.7,\n evidence: ['getInstance method found'],\n location: { startLine: 0, endLine: 0 }\n });\n }\n\n // Factory pattern detection\n if (content.includes('create') && symbols.some(s => s.name.toLowerCase().includes('factory'))) {\n patterns.push({\n name: 'Factory',\n confidence: 0.8,\n evidence: ['Factory class with create method'],\n location: { startLine: 0, endLine: 0 }\n });\n }\n\n // Observer pattern detection\n if (content.includes('subscribe') || content.includes('addEventListener')) {\n patterns.push({\n name: 'Observer',\n confidence: 0.6,\n evidence: ['Event subscription methods found'],\n location: { startLine: 0, endLine: 0 }\n });\n }\n\n return patterns;\n }\n\n private calculateComplexityMetrics(content: string, symbols: ContextualSymbol[]): ComplexityMetrics {\n const lines = content.split('\\n');\n \n // Simple complexity calculations\n let cyclomatic = 1; // Base complexity\n let cognitive = 0;\n let maxNesting = 0;\n let currentNesting = 0;\n\n for (const line of lines) {\n const trimmed = line.trim();\n \n // Cyclomatic complexity\n if (trimmed.includes('if') || trimmed.includes('while') || trimmed.includes('for') ||\n trimmed.includes('switch') || trimmed.includes('catch')) {\n cyclomatic++;\n }\n\n // Nesting level\n if (trimmed.includes('{')) currentNesting++;\n if (trimmed.includes('}')) currentNesting--;\n maxNesting = Math.max(maxNesting, currentNesting);\n\n // Cognitive complexity (simplified)\n if (trimmed.includes('if') || trimmed.includes('while') || trimmed.includes('for')) {\n cognitive += currentNesting + 1;\n }\n }\n\n return {\n cyclomatic,\n cognitive,\n nesting: maxNesting,\n dependencies: symbols.length\n };\n }\n\n private assessQuality(content: string, symbols: ContextualSymbol[], dependencies: ContextualDependency[]): QualityMetrics {\n const lines = content.split('\\n').filter(line => line.trim().length > 0);\n const commentLines = lines.filter(line => line.trim().startsWith('//') || line.trim().startsWith('*'));\n \n // Simple quality metrics\n const commentRatio = commentLines.length / lines.length;\n const averageLineLength = lines.reduce((sum, line) => sum + line.length, 0) / lines.length;\n const functionCount = symbols.filter(s => s.type === 'function').length;\n const classCount = symbols.filter(s => s.type === 'class').length;\n\n const maintainability = Math.min(1, commentRatio * 2 + (functionCount > 0 ? 0.3 : 0));\n const readability = Math.max(0, 1 - (averageLineLength - 50) / 100);\n const testability = functionCount > classCount ? 0.8 : 0.5;\n const reusability = dependencies.filter(d => d.type === 'external').length > 0 ? 0.7 : 0.4;\n\n return {\n maintainability: Math.max(0, Math.min(1, maintainability)),\n readability: Math.max(0, Math.min(1, readability)),\n testability: Math.max(0, Math.min(1, testability)),\n reusability: Math.max(0, Math.min(1, reusability))\n };\n }\n\n private async calculateCodeMetrics(filePath: string, symbols: ContextualSymbol[]): Promise<CodeMetrics> {\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const lines = content.split('\\n');\n const codeLines = lines.filter(line => line.trim().length > 0 && !line.trim().startsWith('//'));\n\n // Calculate basic metrics\n const linesOfCode = codeLines.length;\n const cyclomaticComplexity = this.calculateCyclomaticComplexity(content);\n const cognitiveComplexity = this.calculateCognitiveComplexity(content);\n\n // Maintainability Index (simplified Microsoft formula)\n const averageLineLength = codeLines.reduce((sum, line) => sum + line.length, 0) / codeLines.length;\n const maintainabilityIndex = Math.max(0, \n 171 - 5.2 * Math.log(averageLineLength) - 0.23 * cyclomaticComplexity - 16.2 * Math.log(linesOfCode)\n );\n\n // Technical debt estimation (simplified)\n const technicalDebt = (cyclomaticComplexity - 10) * 0.1 + (cognitiveComplexity - 15) * 0.05;\n\n return {\n linesOfCode,\n cyclomaticComplexity,\n cognitiveComplexity,\n maintainabilityIndex,\n technicalDebt: Math.max(0, technicalDebt)\n };\n }\n\n private calculateCyclomaticComplexity(content: string): number {\n let complexity = 1; // Base complexity\n const complexityKeywords = ['if', 'else', 'while', 'for', 'switch', 'case', 'catch', '&&', '||', '?'];\n \n for (const keyword of complexityKeywords) {\n const matches = content.match(new RegExp(`\\\\b${keyword}\\\\b`, 'g'));\n if (matches) {\n complexity += matches.length;\n }\n }\n\n return complexity;\n }\n\n private calculateCognitiveComplexity(content: string): number {\n let complexity = 0;\n let nestingLevel = 0;\n const lines = content.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n \n // Track nesting\n if (trimmed.includes('{')) nestingLevel++;\n if (trimmed.includes('}')) nestingLevel = Math.max(0, nestingLevel - 1);\n\n // Add complexity for control structures\n if (trimmed.includes('if') || trimmed.includes('while') || trimmed.includes('for')) {\n complexity += nestingLevel + 1;\n }\n if (trimmed.includes('switch')) {\n complexity += nestingLevel + 1;\n }\n if (trimmed.includes('catch')) {\n complexity += nestingLevel + 1;\n }\n }\n\n return complexity;\n }\n\n getSchema() {\n return {\n type: \"object\",\n properties: {\n filePath: {\n type: \"string\",\n description: \"Path to the file to analyze for context\"\n },\n rootPath: {\n type: \"string\",\n description: \"Root path of the project\",\n default: \"current working directory\"\n },\n includeRelationships: {\n type: \"boolean\",\n description: \"Include code relationships analysis\",\n default: true\n },\n includeMetrics: {\n type: \"boolean\",\n description: \"Include code quality metrics\",\n default: true\n },\n includeSemantics: {\n type: \"boolean\",\n description: \"Include semantic analysis and patterns\",\n default: true\n },\n maxRelatedFiles: {\n type: \"integer\",\n description: \"Maximum number of related files to analyze\",\n default: 10,\n minimum: 1,\n maximum: 50\n },\n contextDepth: {\n type: \"integer\",\n description: \"Depth of context analysis\",\n default: 2,\n minimum: 1,\n maximum: 5\n }\n },\n required: [\"filePath\"]\n };\n }\n}","import { ToolResult } from \"../../types/index.js\";\nimport { ASTParserTool, SymbolInfo } from \"./ast-parser.js\";\nimport { SymbolSearchTool, SymbolReference } from \"./symbol-search.js\";\nimport { MultiFileEditorTool } from \"../advanced/multi-file-editor.js\";\nimport { OperationHistoryTool } from \"../advanced/operation-history.js\";\nimport * as ops from \"fs\";\n\nconst pathExists = async (filePath: string): Promise<boolean> => {\n try {\n await ops.promises.access(filePath, ops.constants.F_OK);\n return true;\n } catch {\n return false;\n }\n};\n\n\n\nimport path from \"path\";\n\nexport interface RefactoringOperation {\n type: 'rename' | 'extract_function' | 'extract_variable' | 'inline_function' | 'inline_variable' | 'move_function' | 'move_class';\n description: string;\n files: RefactoringFileChange[];\n preview: string;\n safety: SafetyAnalysis;\n rollback?: string;\n}\n\nexport interface RefactoringFileChange {\n filePath: string;\n changes: TextChange[];\n backup?: string;\n}\n\nexport interface TextChange {\n startLine: number;\n startColumn: number;\n endLine: number;\n endColumn: number;\n oldText: string;\n newText: string;\n type: 'replace' | 'insert' | 'delete';\n}\n\nexport interface SafetyAnalysis {\n riskLevel: 'low' | 'medium' | 'high';\n potentialIssues: string[];\n affectedFiles: number;\n affectedSymbols: number;\n requiresTests: boolean;\n breakingChanges: boolean;\n}\n\nexport interface RenameRequest {\n symbolName: string;\n newName: string;\n filePath?: string;\n scope: 'file' | 'project' | 'global';\n includeComments: boolean;\n includeStrings: boolean;\n}\n\nexport interface ExtractFunctionRequest {\n filePath: string;\n startLine: number;\n endLine: number;\n functionName: string;\n parameters?: ExtractedParameter[];\n returnType?: string;\n}\n\nexport interface ExtractedParameter {\n name: string;\n type?: string;\n defaultValue?: string;\n}\n\nexport interface MoveRequest {\n symbolName: string;\n sourceFile: string;\n targetFile: string;\n createTargetFile?: boolean;\n}\n\nexport interface InlineRequest {\n symbolName: string;\n filePath: string;\n preserveComments: boolean;\n}\n\nexport class RefactoringAssistantTool {\n name = \"refactoring_assistant\";\n description = \"Perform safe code refactoring operations including rename, extract, inline, and move operations\";\n\n private astParser: ASTParserTool;\n private symbolSearch: SymbolSearchTool;\n private multiFileEditor: MultiFileEditorTool;\n private operationHistory: OperationHistoryTool;\n\n constructor() {\n this.astParser = new ASTParserTool();\n this.symbolSearch = new SymbolSearchTool();\n this.multiFileEditor = new MultiFileEditorTool();\n this.operationHistory = new OperationHistoryTool();\n }\n\n async execute(args: any): Promise<ToolResult> {\n try {\n const { operation, ...operationArgs } = args;\n\n if (!operation) {\n throw new Error(\"Refactoring operation type is required\");\n }\n\n let result: RefactoringOperation;\n\n switch (operation) {\n case 'rename':\n result = await this.performRename(operationArgs as RenameRequest);\n break;\n case 'extract_function':\n result = await this.performExtractFunction(operationArgs as ExtractFunctionRequest);\n break;\n case 'extract_variable':\n result = await this.performExtractVariable(operationArgs);\n break;\n case 'inline_function':\n result = await this.performInlineFunction(operationArgs as InlineRequest);\n break;\n case 'inline_variable':\n result = await this.performInlineVariable(operationArgs as InlineRequest);\n break;\n case 'move_function':\n case 'move_class':\n result = await this.performMove(operationArgs as MoveRequest);\n break;\n default:\n throw new Error(`Unsupported refactoring operation: ${operation}`);\n }\n\n return {\n success: true,\n output: JSON.stringify(result, null, 2)\n };\n\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error)\n };\n }\n }\n\n private async performRename(request: RenameRequest): Promise<RefactoringOperation> {\n const { symbolName, newName, filePath, scope, includeComments, includeStrings } = request;\n\n if (!symbolName || !newName) {\n throw new Error(\"Symbol name and new name are required for rename operation\");\n }\n\n // Validate new name\n if (!this.isValidIdentifier(newName)) {\n throw new Error(`Invalid identifier: ${newName}`);\n }\n\n // Find all occurrences of the symbol\n const searchPath = scope === 'file' && filePath ? path.dirname(filePath) : process.cwd();\n const searchResult = await this.symbolSearch.execute({\n query: symbolName,\n searchPath,\n includeUsages: true,\n fuzzyMatch: false,\n caseSensitive: true\n });\n\n if (!searchResult.success || !searchResult.output) {\n throw new Error(\"Failed to find symbol occurrences\");\n }\n const parsed = JSON.parse(searchResult.output);\n if (!parsed.success) {\n throw new Error(\"Failed to find symbol occurrences\");\n }\n\n const symbolRefs = parsed.result.symbols as SymbolReference[];\n \n // Filter by scope\n const relevantRefs = scope === 'file' && filePath\n ? symbolRefs.filter(ref => ref.filePath === filePath)\n : symbolRefs;\n\n if (relevantRefs.length === 0) {\n throw new Error(`Symbol '${symbolName}' not found in specified scope`);\n }\n\n // Perform safety analysis\n const safety = await this.analyzeSafety(relevantRefs, 'rename');\n\n // Generate changes\n const fileChanges: RefactoringFileChange[] = [];\n const affectedFiles = new Set<string>();\n\n for (const ref of relevantRefs) {\n affectedFiles.add(ref.filePath);\n \n const changes = await this.generateRenameChanges(\n ref,\n symbolName,\n newName,\n includeComments,\n includeStrings\n );\n\n if (changes.length > 0) {\n fileChanges.push({\n filePath: ref.filePath,\n changes\n });\n }\n }\n\n // Generate preview\n const preview = this.generatePreview(fileChanges, 'rename', symbolName, newName);\n\n return {\n type: 'rename',\n description: `Rename '${symbolName}' to '${newName}' (${scope} scope)`,\n files: fileChanges,\n preview,\n safety\n };\n }\n\n private async performExtractFunction(request: ExtractFunctionRequest): Promise<RefactoringOperation> {\n const { filePath, startLine, endLine, functionName, parameters = [], returnType } = request;\n\n if (!filePath || startLine === undefined || endLine === undefined || !functionName) {\n throw new Error(\"File path, line range, and function name are required\");\n }\n\n if (!await pathExists(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n if (startLine < 0 || endLine >= lines.length || startLine > endLine) {\n throw new Error(\"Invalid line range\");\n }\n\n // Extract the code block\n const extractedCode = lines.slice(startLine, endLine + 1);\n const extractedText = extractedCode.join('\\n');\n\n // Analyze the extracted code for variables\n const analysis = await this.analyzeExtractedCode(extractedText, filePath);\n \n // Generate function signature\n const functionSignature = this.generateFunctionSignature(\n functionName,\n analysis.parameters.length > 0 ? analysis.parameters : parameters,\n returnType || analysis.inferredReturnType\n );\n\n // Create the new function\n const newFunction = this.createExtractedFunction(\n functionSignature,\n extractedText,\n analysis.localVariables\n );\n\n // Generate function call\n const functionCall = this.generateFunctionCall(\n functionName,\n analysis.parameters,\n analysis.returnVariable\n );\n\n // Create changes\n const changes: TextChange[] = [\n // Replace extracted code with function call\n {\n startLine,\n startColumn: 0,\n endLine,\n endColumn: lines[endLine].length,\n oldText: extractedText,\n newText: functionCall,\n type: 'replace'\n },\n // Insert new function (simplified - should find appropriate location)\n {\n startLine: endLine + 1,\n startColumn: 0,\n endLine: endLine + 1,\n endColumn: 0,\n oldText: '',\n newText: '\\n' + newFunction + '\\n',\n type: 'insert'\n }\n ];\n\n const safety: SafetyAnalysis = {\n riskLevel: 'medium',\n potentialIssues: [\n 'Variable scope changes',\n 'Side effects may be altered',\n 'Error handling context may change'\n ],\n affectedFiles: 1,\n affectedSymbols: 1,\n requiresTests: true,\n breakingChanges: false\n };\n\n const fileChanges: RefactoringFileChange[] = [{\n filePath,\n changes\n }];\n\n const preview = this.generatePreview(fileChanges, 'extract_function', extractedText, functionName);\n\n return {\n type: 'extract_function',\n description: `Extract function '${functionName}' from lines ${startLine}-${endLine}`,\n files: fileChanges,\n preview,\n safety\n };\n }\n\n private async performExtractVariable(args: any): Promise<RefactoringOperation> {\n const { filePath, startLine, startColumn, endLine, endColumn, variableName, variableType } = args;\n\n if (!filePath || !variableName) {\n throw new Error(\"File path and variable name are required\");\n }\n\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const lines = content.split('\\n');\n\n // Extract expression\n const startLineContent = lines[startLine];\n const endLineContent = lines[endLine];\n \n let expression: string;\n if (startLine === endLine) {\n expression = startLineContent.substring(startColumn, endColumn);\n } else {\n expression = startLineContent.substring(startColumn) + '\\n' +\n lines.slice(startLine + 1, endLine).join('\\n') + '\\n' +\n endLineContent.substring(0, endColumn);\n }\n\n // Generate variable declaration\n const indent = this.getIndentation(startLineContent);\n const varDeclaration = `${indent}const ${variableName}${variableType ? `: ${variableType}` : ''} = ${expression.trim()};`;\n\n const changes: TextChange[] = [\n // Insert variable declaration\n {\n startLine,\n startColumn: 0,\n endLine: startLine,\n endColumn: 0,\n oldText: '',\n newText: varDeclaration + '\\n',\n type: 'insert'\n },\n // Replace expression with variable\n {\n startLine: startLine + 1, // Account for inserted line\n startColumn,\n endLine: endLine + 1,\n endColumn,\n oldText: expression,\n newText: variableName,\n type: 'replace'\n }\n ];\n\n const safety: SafetyAnalysis = {\n riskLevel: 'low',\n potentialIssues: ['Variable name conflicts'],\n affectedFiles: 1,\n affectedSymbols: 1,\n requiresTests: false,\n breakingChanges: false\n };\n\n const fileChanges: RefactoringFileChange[] = [{\n filePath,\n changes\n }];\n\n const preview = this.generatePreview(fileChanges, 'extract_variable', expression, variableName);\n\n return {\n type: 'extract_variable',\n description: `Extract variable '${variableName}' from expression`,\n files: fileChanges,\n preview,\n safety\n };\n }\n\n private async performInlineFunction(request: InlineRequest): Promise<RefactoringOperation> {\n const { symbolName, filePath, preserveComments } = request;\n\n // Find function definition\n const parseResult = await this.astParser.execute({\n filePath,\n includeSymbols: true,\n symbolTypes: ['function']\n });\n\n if (!parseResult.success || !parseResult.output) {\n throw new Error(\"Failed to parse file\");\n }\n const parsed = JSON.parse(parseResult.output);\n if (!parsed.success) {\n throw new Error(\"Failed to parse file\");\n }\n\n const symbols = parsed.result.symbols as SymbolInfo[];\n const functionSymbol = symbols.find(s => s.name === symbolName && s.type === 'function');\n\n if (!functionSymbol) {\n throw new Error(`Function '${symbolName}' not found`);\n }\n\n // Get function body\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const lines = content.split('\\n');\n const functionLines = lines.slice(functionSymbol.startPosition.row, functionSymbol.endPosition.row + 1);\n const functionBody = this.extractFunctionBody(functionLines.join('\\n'));\n\n // Find all calls to this function\n const usageSearch = await this.symbolSearch.execute({\n query: symbolName,\n searchPath: path.dirname(filePath),\n includeUsages: true,\n fuzzyMatch: false\n });\n\n if (!usageSearch.success || !usageSearch.output) {\n throw new Error(\"Failed to find function usages\");\n }\n const usageParsed = JSON.parse(usageSearch.output);\n if (!usageParsed.success) {\n throw new Error(\"Failed to find function usages\");\n }\n\n const usages = usageParsed.result.symbols as SymbolReference[];\n const functionCalls = this.findFunctionCalls(usages, symbolName);\n\n // Generate inline replacements\n const fileChanges: RefactoringFileChange[] = [];\n const affectedFiles = new Set<string>();\n\n for (const call of functionCalls) {\n affectedFiles.add(call.filePath);\n const inlinedCode = this.inlineFunction(functionBody, call.arguments);\n \n // Add change to replace function call with inlined code\n const changes: TextChange[] = [{\n startLine: call.line,\n startColumn: call.column,\n endLine: call.line,\n endColumn: call.column + call.text.length,\n oldText: call.text,\n newText: inlinedCode,\n type: 'replace'\n }];\n\n fileChanges.push({\n filePath: call.filePath,\n changes\n });\n }\n\n // Remove function definition\n const definitionChanges: TextChange[] = [{\n startLine: functionSymbol.startPosition.row,\n startColumn: 0,\n endLine: functionSymbol.endPosition.row + 1,\n endColumn: 0,\n oldText: functionLines.join('\\n'),\n newText: preserveComments ? this.extractComments(functionLines.join('\\n')) : '',\n type: 'replace'\n }];\n\n fileChanges.push({\n filePath,\n changes: definitionChanges\n });\n\n const safety: SafetyAnalysis = {\n riskLevel: 'high',\n potentialIssues: [\n 'Code duplication',\n 'Variable scope changes',\n 'Performance implications',\n 'Debugging complexity'\n ],\n affectedFiles: affectedFiles.size,\n affectedSymbols: functionCalls.length + 1,\n requiresTests: true,\n breakingChanges: false\n };\n\n const preview = this.generatePreview(fileChanges, 'inline_function', symbolName, 'inlined code');\n\n return {\n type: 'inline_function',\n description: `Inline function '${symbolName}' at all call sites`,\n files: fileChanges,\n preview,\n safety\n };\n }\n\n private async performInlineVariable(_request: InlineRequest): Promise<RefactoringOperation> {\n // Similar to inline function but for variables\n throw new Error(\"Inline variable not yet implemented\");\n }\n\n private async performMove(_request: MoveRequest): Promise<RefactoringOperation> {\n // Move function or class to different file\n throw new Error(\"Move operation not yet implemented\");\n }\n\n // Helper methods\n\n private isValidIdentifier(name: string): boolean {\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name);\n }\n\n private async analyzeSafety(refs: SymbolReference[], operation: string): Promise<SafetyAnalysis> {\n const affectedFiles = new Set(refs.map((ref: SymbolReference) => ref.filePath)).size;\n const affectedSymbols = refs.length;\n\n let riskLevel: 'low' | 'medium' | 'high' = 'low';\n const potentialIssues: string[] = [];\n\n if (affectedFiles > 5) {\n riskLevel = 'medium';\n potentialIssues.push('Many files affected');\n }\n\n if (affectedSymbols > 20) {\n riskLevel = 'high';\n potentialIssues.push('Many symbol occurrences');\n }\n\n if (operation === 'rename') {\n potentialIssues.push('Potential naming conflicts');\n }\n\n return {\n riskLevel,\n potentialIssues,\n affectedFiles,\n affectedSymbols,\n requiresTests: affectedFiles > 1,\n breakingChanges: false\n };\n }\n\n private async generateRenameChanges(\n ref: SymbolReference,\n oldName: string,\n newName: string,\n includeComments: boolean,\n includeStrings: boolean\n ): Promise<TextChange[]> {\n const changes: TextChange[] = [];\n const content = await ops.promises.readFile(ref.filePath, 'utf-8');\n const lines = content.split('\\n');\n\n // Simple text replacement for now\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n \n // Skip comments and strings if not requested\n if (!includeComments && (line.trim().startsWith('//') || line.trim().startsWith('*'))) {\n continue;\n }\n \n if (!includeStrings && (line.includes('\"') || line.includes(\"'\"))) {\n continue;\n }\n\n // Find word boundaries to avoid partial matches\n const regex = new RegExp(`\\\\b${oldName}\\\\b`, 'g');\n let match;\n \n while ((match = regex.exec(line)) !== null) {\n changes.push({\n startLine: i,\n startColumn: match.index,\n endLine: i,\n endColumn: match.index + oldName.length,\n oldText: oldName,\n newText: newName,\n type: 'replace'\n });\n }\n }\n\n return changes;\n }\n\n private async analyzeExtractedCode(code: string, _filePath: string): Promise<any> {\n // Analyze variables, return statements, etc.\n const lines = code.split('\\n');\n const parameters: ExtractedParameter[] = [];\n const localVariables: string[] = [];\n let inferredReturnType = 'void';\n let returnVariable: string | undefined;\n\n // Simple analysis - could be enhanced with AST parsing\n for (const line of lines) {\n if (line.includes('return ')) {\n const returnMatch = line.match(/return\\s+([^;]+)/);\n if (returnMatch) {\n returnVariable = returnMatch[1].trim();\n inferredReturnType = 'any'; // Could infer better\n }\n }\n }\n\n return {\n parameters,\n localVariables,\n inferredReturnType,\n returnVariable\n };\n }\n\n private generateFunctionSignature(\n name: string,\n parameters: ExtractedParameter[],\n returnType: string\n ): string {\n const params = parameters.map(p => \n `${p.name}${p.type ? `: ${p.type}` : ''}${p.defaultValue ? ` = ${p.defaultValue}` : ''}`\n ).join(', ');\n\n return `function ${name}(${params})${returnType !== 'void' ? `: ${returnType}` : ''}`;\n }\n\n private createExtractedFunction(\n signature: string,\n body: string,\n _localVars: string[]\n ): string {\n return `${signature} {\\n${body}\\n}`;\n }\n\n private generateFunctionCall(\n name: string,\n parameters: ExtractedParameter[],\n returnVar?: string\n ): string {\n const args = parameters.map(p => p.name).join(', ');\n const call = `${name}(${args})`;\n \n return returnVar ? `const ${returnVar} = ${call};` : `${call};`;\n }\n\n private getIndentation(line: string): string {\n const match = line.match(/^(\\s*)/);\n return match ? match[1] : '';\n }\n\n private extractFunctionBody(functionCode: string): string {\n // Extract just the body content between { }\n const lines = functionCode.split('\\n');\n const bodyStart = lines.findIndex(line => line.includes('{')) + 1;\n const bodyEnd = lines.length - 1; // Assume last line has }\n \n return lines.slice(bodyStart, bodyEnd).join('\\n');\n }\n\n private findFunctionCalls(usages: SymbolReference[], _functionName: string): any[] {\n // Find actual function calls vs just references\n const calls: any[] = [];\n \n for (const usage of usages) {\n for (const u of usage.usages) {\n if (u.type === 'call') {\n calls.push({\n filePath: usage.filePath,\n line: u.line,\n column: u.column,\n text: u.context,\n arguments: [] // Would parse actual arguments\n });\n }\n }\n }\n\n return calls;\n }\n\n private inlineFunction(functionBody: string, _args: string[]): string {\n // Replace parameters with arguments in function body\n // This is a simplified implementation\n return functionBody;\n }\n\n private extractComments(code: string): string {\n const lines = code.split('\\n');\n const comments = lines.filter(line => \n line.trim().startsWith('//') || \n line.trim().startsWith('*') || \n line.trim().startsWith('/*')\n );\n return comments.join('\\n');\n }\n\n private generatePreview(\n fileChanges: RefactoringFileChange[],\n operation: string,\n oldValue: string,\n newValue: string\n ): string {\n let preview = `${operation.toUpperCase()}: ${oldValue} → ${newValue}\\n\\n`;\n \n for (const fileChange of fileChanges) {\n preview += `File: ${fileChange.filePath}\\n`;\n preview += `Changes: ${fileChange.changes.length}\\n`;\n \n for (const change of fileChange.changes.slice(0, 3)) { // Show first 3 changes\n preview += ` Line ${change.startLine}: ${change.oldText} → ${change.newText}\\n`;\n }\n \n if (fileChange.changes.length > 3) {\n preview += ` ... and ${fileChange.changes.length - 3} more changes\\n`;\n }\n \n preview += '\\n';\n }\n\n return preview;\n }\n\n getSchema() {\n return {\n type: \"object\",\n properties: {\n operation: {\n type: \"string\",\n enum: [\"rename\", \"extract_function\", \"extract_variable\", \"inline_function\", \"inline_variable\", \"move_function\", \"move_class\"],\n description: \"Type of refactoring operation to perform\"\n },\n symbolName: {\n type: \"string\",\n description: \"Name of symbol to refactor (for rename, inline, move operations)\"\n },\n newName: {\n type: \"string\",\n description: \"New name for symbol (for rename operation)\"\n },\n filePath: {\n type: \"string\",\n description: \"Path to file containing the symbol\"\n },\n scope: {\n type: \"string\",\n enum: [\"file\", \"project\", \"global\"],\n description: \"Scope of refactoring operation\",\n default: \"project\"\n },\n includeComments: {\n type: \"boolean\",\n description: \"Include comments in rename operation\",\n default: false\n },\n includeStrings: {\n type: \"boolean\",\n description: \"Include string literals in rename operation\",\n default: false\n },\n startLine: {\n type: \"integer\",\n description: \"Start line for extract operations\"\n },\n endLine: {\n type: \"integer\",\n description: \"End line for extract operations\"\n },\n startColumn: {\n type: \"integer\",\n description: \"Start column for extract variable operation\"\n },\n endColumn: {\n type: \"integer\",\n description: \"End column for extract variable operation\"\n },\n functionName: {\n type: \"string\",\n description: \"Name for extracted function\"\n },\n variableName: {\n type: \"string\",\n description: \"Name for extracted variable\"\n },\n variableType: {\n type: \"string\",\n description: \"Type annotation for extracted variable\"\n },\n parameters: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n name: { type: \"string\" },\n type: { type: \"string\" },\n defaultValue: { type: \"string\" }\n },\n required: [\"name\"]\n },\n description: \"Parameters for extracted function\"\n },\n returnType: {\n type: \"string\",\n description: \"Return type for extracted function\"\n },\n targetFile: {\n type: \"string\",\n description: \"Target file for move operations\"\n },\n createTargetFile: {\n type: \"boolean\",\n description: \"Create target file if it doesn't exist\",\n default: false\n },\n preserveComments: {\n type: \"boolean\",\n description: \"Preserve comments in inline operations\",\n default: true\n }\n },\n required: [\"operation\"]\n };\n }\n}","export { ASTParserTool } from \"./ast-parser.js\";\nexport { SymbolSearchTool } from \"./symbol-search.js\";\nexport { DependencyAnalyzerTool } from \"./dependency-analyzer.js\";\nexport { CodeContextTool } from \"./code-context.js\";\nexport { RefactoringAssistantTool } from \"./refactoring-assistant.js\";\n\n// Export types\nexport type {\n ASTNode,\n ParseResult,\n SymbolInfo,\n ParameterInfo,\n ImportInfo,\n ExportInfo,\n ParseError\n} from \"./ast-parser.js\";\n\nexport type {\n SymbolReference,\n SymbolUsage,\n SearchResult,\n CrossReference\n} from \"./symbol-search.js\";\n\nexport type {\n DependencyNode,\n DependencyGraph,\n CircularDependency,\n DependencyStatistics,\n ModuleAnalysis\n} from \"./dependency-analyzer.js\";\n\nexport type {\n CodeContext,\n ContextualSymbol,\n ContextualDependency,\n CodeRelationship,\n SemanticContext,\n DesignPattern,\n UsagePattern,\n CodeMetrics,\n ComplexityMetrics,\n QualityMetrics,\n ProjectContext,\n ArchitectureInfo\n} from \"./code-context.js\";\n\nexport type {\n RefactoringOperation,\n RefactoringFileChange,\n TextChange,\n SafetyAnalysis,\n RenameRequest,\n ExtractFunctionRequest,\n ExtractedParameter,\n MoveRequest,\n InlineRequest\n} from \"./refactoring-assistant.js\";","export { BashTool } from \"./bash.js\";\nexport { TextEditorTool } from \"./text-editor.js\";\nexport { MorphEditorTool } from \"./morph-editor.js\";\nexport { TodoTool } from \"./todo-tool.js\";\nexport { ConfirmationTool } from \"./confirmation-tool.js\";\nexport { SearchTool } from \"./search.js\";\n\n// Advanced tools\nexport { \n MultiFileEditorTool,\n AdvancedSearchTool,\n FileTreeOperationsTool,\n CodeAwareEditorTool,\n OperationHistoryTool\n} from \"./advanced/index.js\";\n\n// Intelligence tools\nexport {\n ASTParserTool,\n SymbolSearchTool,\n DependencyAnalyzerTool,\n CodeContextTool,\n RefactoringAssistantTool\n} from \"./intelligence/index.js\";\n","import { get_encoding, encoding_for_model, Tiktoken } from 'tiktoken';\n\nexport class TokenCounter {\n private encoder: Tiktoken;\n\n constructor(model: string = 'gpt-4') {\n try {\n // Try to get encoding for specific model\n this.encoder = encoding_for_model(model as any);\n } catch {\n // Fallback to cl100k_base (used by GPT-4 and most modern models)\n this.encoder = get_encoding('cl100k_base');\n }\n }\n\n /**\n * Count tokens in a string\n */\n countTokens(text: string): number {\n if (!text) return 0;\n return this.encoder.encode(text).length;\n }\n\n /**\n * Count tokens in messages array (for chat completions)\n */\n countMessageTokens(messages: Array<{ role: string; content: string | null; [key: string]: any }>): number {\n let totalTokens = 0;\n \n for (const message of messages) {\n // Every message follows <|start|>{role/name}\\n{content}<|end|\\>\\n\n totalTokens += 3; // Base tokens per message\n \n if (message.content && typeof message.content === 'string') {\n totalTokens += this.countTokens(message.content);\n }\n \n if (message.role) {\n totalTokens += this.countTokens(message.role);\n }\n \n // Add extra tokens for tool calls if present\n if (message.tool_calls) {\n totalTokens += this.countTokens(JSON.stringify(message.tool_calls));\n }\n }\n \n totalTokens += 3; // Every reply is primed with <|start|>assistant<|message|>\n \n return totalTokens;\n }\n\n /**\n * Estimate tokens for streaming content\n * This is an approximation since we don't have the full response yet\n */\n estimateStreamingTokens(accumulatedContent: string): number {\n return this.countTokens(accumulatedContent);\n }\n\n /**\n * Clean up resources\n */\n dispose(): void {\n this.encoder.free();\n }\n}\n\n/**\n * Format token count for display (e.g., 1.2k for 1200)\n */\nexport function formatTokenCount(count: number): string {\n if (count <= 999) {\n return count.toString();\n }\n \n if (count < 1_000_000) {\n const k = count / 1000;\n return k % 1 === 0 ? `${k}k` : `${k.toFixed(1)}k`;\n }\n \n const m = count / 1_000_000;\n return m % 1 === 0 ? `${m}m` : `${m.toFixed(1)}m`;\n}\n\n/**\n * Create a token counter instance\n */\nexport function createTokenCounter(model?: string): TokenCounter {\n return new TokenCounter(model);\n}","import * as fs from 'fs';\nimport * as path from 'path';\n\nexport function loadCustomInstructions(workingDirectory: string = process.cwd()): string | null {\n try {\n const instructionsPath = path.join(workingDirectory, '.xcli', 'GROK.md');\n \n if (!fs.existsSync(instructionsPath)) {\n return null;\n }\n\n const customInstructions = fs.readFileSync(instructionsPath, 'utf-8');\n return customInstructions.trim();\n } catch (error) {\n console.warn('Failed to load custom instructions:', error);\n return null;\n }\n}","/**\n * Execution Orchestrator Service\n *\n * Orchestrates the sequential execution of approved TODO items from research plans.\n * Provides rich logging, diff display, patch generation, and safety features.\n */\n\nimport { GrokAgent } from '../agent/grok-agent.js';\nimport {\n ExecutionPlan,\n ExecutionStep,\n ExecutionOptions,\n ExecutionResult,\n FileChange,\n ErrorContext,\n RecoveryResult\n} from '../types/execution.js';\nimport { ResearchPlan, ResearchRequest } from '../types/research-recommend.js';\nimport { ResearchRecommendService } from './research-recommend.js';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\n\nconst DEFAULT_OPTIONS: ExecutionOptions = {\n createPatches: true,\n createBackups: true,\n gitCommit: true,\n timeout: 300000, // 5 minutes per step\n maxConcurrentSteps: 1\n};\n\nexport class ExecutionOrchestrator {\n private options: ExecutionOptions;\n private maxRecoveryAttempts: number = 3;\n private recoveryAttempts: Map<number, number> = new Map();\n\n constructor(\n private agent: GrokAgent,\n options: Partial<ExecutionOptions> = {}\n ) {\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Execute a research plan's TODO items\n */\n async executePlan(plan: ResearchPlan): Promise<ExecutionResult> {\n console.log(`🚀 Starting execution of ${plan.todo.length} tasks...`);\n console.log(`Summary: ${plan.summary}`);\n\n const executionPlan: ExecutionPlan = {\n steps: plan.todo.map((todo, index) => ({\n id: index + 1,\n description: todo,\n status: 'pending'\n })),\n totalSteps: plan.todo.length,\n completedSteps: 0,\n failedSteps: 0,\n startTime: new Date(),\n summary: plan.summary\n };\n\n try {\n // Execute steps sequentially\n for (const step of executionPlan.steps) {\n await this.executeStep(step, executionPlan);\n\n if (step.status === 'failed') {\n executionPlan.failedSteps++;\n // Continue with other steps for now\n } else {\n executionPlan.completedSteps++;\n }\n }\n\n executionPlan.endTime = new Date();\n\n // Create git commit if enabled and in git repo\n if (this.options.gitCommit && this.isGitRepository()) {\n try {\n executionPlan.gitCommitHash = await this.createGitCommit(executionPlan);\n } catch (error) {\n console.warn('[Execution] Failed to create git commit:', error);\n }\n }\n\n const success = executionPlan.failedSteps === 0;\n console.log(`✅ Execution ${success ? 'completed' : 'finished with errors'}: ${executionPlan.completedSteps}/${executionPlan.totalSteps} steps successful`);\n\n return {\n success,\n executionPlan\n };\n\n } catch (error) {\n executionPlan.endTime = new Date();\n console.error('[Execution] Orchestration failed:', error);\n\n return {\n success: false,\n executionPlan,\n error: error instanceof Error ? error.message : 'Unknown execution error'\n };\n }\n }\n\n /**\n * Execute a single step\n */\n private async executeStep(step: ExecutionStep, _executionPlan: ExecutionPlan): Promise<void> {\n step.status = 'running';\n step.startTime = new Date();\n\n console.log(`\\n[x-cli] #${step.id} ${step.description} …`);\n\n try {\n // Capture file state before execution\n const beforeState = this.captureFileState();\n\n // Execute the step using the agent\n await this.agent.processUserMessage(step.description);\n\n // Wait a bit for any async operations to complete\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n // Capture file state after execution\n const afterState = this.captureFileState();\n\n // Determine changes\n step.changes = this.calculateChanges(beforeState, afterState);\n\n // Display diffs for changes\n await this.displayChanges(step);\n\n // Create patches and backups\n if (step.changes && step.changes.length > 0) {\n step.patchFile = await this.createPatchFile(step);\n await this.createBackups(step);\n }\n\n step.status = 'completed';\n step.endTime = new Date();\n\n console.log(`[x-cli] #${step.id} ✓ Completed`);\n\n } catch (error) {\n step.status = 'failed';\n step.endTime = new Date();\n step.error = error instanceof Error ? error.message : 'Unknown error';\n\n console.log(`[x-cli] #${step.id} ✗ Failed: ${step.error}`);\n }\n }\n\n /**\n * Capture current file state (simplified - just track modification times)\n */\n private captureFileState(): Map<string, number> {\n const state = new Map<string, number>();\n\n try {\n // Walk the current directory and record file modification times\n const walkDir = (dir: string) => {\n const files = fs.readdirSync(dir);\n for (const file of files) {\n const filePath = path.join(dir, file);\n const stat = fs.statSync(filePath);\n\n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n walkDir(filePath);\n } else if (stat.isFile()) {\n state.set(filePath, stat.mtime.getTime());\n }\n }\n };\n\n walkDir('.');\n } catch (error) {\n console.warn('[Execution] Failed to capture file state:', error);\n }\n\n return state;\n }\n\n /**\n * Calculate file changes between states\n */\n private calculateChanges(before: Map<string, number>, after: Map<string, number>): FileChange[] {\n const changes: FileChange[] = [];\n\n // Check for modified files\n for (const [filePath, afterTime] of after) {\n const beforeTime = before.get(filePath);\n if (!beforeTime || beforeTime !== afterTime) {\n changes.push({\n filePath,\n changeType: beforeTime ? 'modified' : 'created'\n });\n }\n }\n\n // Check for deleted files\n for (const filePath of before.keys()) {\n if (!after.has(filePath)) {\n changes.push({\n filePath,\n changeType: 'deleted'\n });\n }\n }\n\n return changes;\n }\n\n /**\n * Display changes with diffs\n */\n private async displayChanges(step: ExecutionStep): Promise<void> {\n if (!step.changes || step.changes.length === 0) {\n return;\n }\n\n console.log(`[x-cli] #${step.id} Changes detected:`);\n\n for (const change of step.changes) {\n console.log(` ${change.changeType.toUpperCase()}: ${change.filePath}`);\n\n if (change.changeType === 'modified' && fs.existsSync(change.filePath)) {\n try {\n // Generate diff using git if available\n if (this.isGitRepository()) {\n const diff = execSync(`git diff --no-index /dev/null ${change.filePath} 2>/dev/null || git diff ${change.filePath}`, {\n encoding: 'utf-8',\n timeout: 5000\n }).trim();\n\n if (diff) {\n console.log(' Diff:');\n console.log(diff.split('\\n').map(line => ` ${line}`).join('\\n'));\n }\n }\n } catch (_error) {\n // Diff generation failed, skip\n }\n }\n }\n }\n\n /**\n * Create patch file for changes\n */\n private async createPatchFile(step: ExecutionStep): Promise<string | undefined> {\n if (!this.options.createPatches || !step.changes || step.changes.length === 0) {\n return undefined;\n }\n\n try {\n const patchesDir = path.join(require('os').homedir(), '.xcli', 'patches');\n if (!fs.existsSync(patchesDir)) {\n fs.mkdirSync(patchesDir, { recursive: true });\n }\n\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n const patchFile = path.join(patchesDir, `step-${step.id}-${timestamp}.patch`);\n\n let patchContent = `# Patch for step #${step.id}: ${step.description}\\n`;\n patchContent += `# Generated: ${new Date().toISOString()}\\n\\n`;\n\n for (const change of step.changes) {\n if (change.changeType === 'modified' && fs.existsSync(change.filePath)) {\n try {\n const diff = execSync(`git diff ${change.filePath}`, {\n encoding: 'utf-8',\n timeout: 5000\n });\n patchContent += `--- a/${change.filePath}\\n+++ b/${change.filePath}\\n${diff}\\n`;\n } catch {\n // Skip if diff fails\n }\n }\n }\n\n fs.writeFileSync(patchFile, patchContent);\n console.log(`[x-cli] #${step.id} Patch saved: ${patchFile}`);\n\n return patchFile;\n } catch (error) {\n console.warn(`[Execution] Failed to create patch for step ${step.id}:`, error);\n return undefined;\n }\n }\n\n /**\n * Create backup files\n */\n private async createBackups(step: ExecutionStep): Promise<void> {\n if (!this.options.createBackups || !step.changes) {\n return;\n }\n\n for (const change of step.changes) {\n if ((change.changeType === 'modified' || change.changeType === 'created') && fs.existsSync(change.filePath)) {\n try {\n const backupPath = `${change.filePath}.bak`;\n fs.copyFileSync(change.filePath, backupPath);\n change.backupPath = backupPath;\n console.log(`[x-cli] #${step.id} Backup created: ${backupPath}`);\n } catch (_error) {\n console.warn(`[Execution] Failed to create backup for ${change.filePath}:`, _error);\n }\n }\n }\n }\n\n /**\n * Check if current directory is a git repository\n */\n private isGitRepository(): boolean {\n try {\n execSync('git rev-parse --git-dir', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Create git commit for all changes\n */\n private async createGitCommit(executionPlan: ExecutionPlan): Promise<string> {\n try {\n // Stage all changes\n execSync('git add .', { stdio: 'ignore' });\n\n // Create commit message\n const commitMessage = `feat: ${executionPlan.summary}\n\nExecuted ${executionPlan.totalSteps} tasks:\n${executionPlan.steps.map(step => `- ${step.description}`).join('\\n')}\n\nAuto-generated by x-cli execution orchestrator`;\n\n // Commit\n execSync(`git commit -m \"${commitMessage}\"`, { stdio: 'ignore' });\n\n // Get commit hash\n const hash = execSync('git rev-parse HEAD', { encoding: 'utf-8' }).trim();\n\n console.log(`✅ Git commit created: ${hash.substring(0, 8)}`);\n\n return hash;\n } catch (error) {\n throw new Error(`Git commit failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n /**\n * Detect error patterns in step execution\n */\n \n private detectError(error: any): ErrorContext | null {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Test failure patterns\n if (errorMessage.includes('test') && (errorMessage.includes('fail') || errorMessage.includes('error'))) {\n return {\n stepId: -1, // Will be set by caller\n errorType: 'test_failure',\n errorMessage,\n stackTrace: error instanceof Error ? error.stack : undefined,\n affectedFiles: this.findTestFiles(),\n contextData: { pattern: 'test_failure' }\n };\n }\n\n // Build failure patterns\n if (errorMessage.includes('build') && (errorMessage.includes('fail') || errorMessage.includes('error'))) {\n return {\n stepId: -1,\n errorType: 'build_failure',\n errorMessage,\n stackTrace: error instanceof Error ? error.stack : undefined,\n affectedFiles: this.findBuildFiles(),\n contextData: { pattern: 'build_failure' }\n };\n }\n\n // Linting failure patterns\n if (errorMessage.includes('lint') && (errorMessage.includes('fail') || errorMessage.includes('error'))) {\n return {\n stepId: -1,\n errorType: 'lint_failure',\n errorMessage,\n stackTrace: error instanceof Error ? error.stack : undefined,\n affectedFiles: this.findSourceFiles(),\n contextData: { pattern: 'lint_failure' }\n };\n }\n\n // Generic runtime errors\n return {\n stepId: -1,\n errorType: 'runtime_error',\n errorMessage,\n stackTrace: error instanceof Error ? error.stack : undefined,\n affectedFiles: [],\n contextData: { pattern: 'runtime_error' }\n };\n }\n\n /**\n * Find test files in the project\n */\n private findTestFiles(): string[] {\n try {\n const testFiles: string[] = [];\n const walkDir = (dir: string) => {\n const files = fs.readdirSync(dir);\n for (const file of files) {\n const filePath = path.join(dir, file);\n const stat = fs.statSync(filePath);\n\n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n walkDir(filePath);\n } else if (stat.isFile() && (file.includes('test') || file.includes('spec'))) {\n testFiles.push(filePath);\n }\n }\n };\n walkDir('.');\n return testFiles.slice(0, 10); // Limit to 10 files\n } catch {\n return [];\n }\n }\n\n /**\n * Find build configuration files\n */\n private findBuildFiles(): string[] {\n const buildFiles = ['package.json', 'tsconfig.json', 'webpack.config.js', 'babel.config.js'];\n return buildFiles.filter(file => fs.existsSync(file));\n }\n\n /**\n * Find source files\n */\n private findSourceFiles(): string[] {\n try {\n const sourceFiles: string[] = [];\n const walkDir = (dir: string) => {\n const files = fs.readdirSync(dir);\n for (const file of files) {\n const filePath = path.join(dir, file);\n const stat = fs.statSync(filePath);\n\n if (stat.isDirectory() && !file.startsWith('.') && file !== 'node_modules') {\n walkDir(filePath);\n } else if (stat.isFile() && (file.endsWith('.ts') || file.endsWith('.js') || file.endsWith('.tsx') || file.endsWith('.jsx'))) {\n sourceFiles.push(filePath);\n }\n }\n };\n walkDir('.');\n return sourceFiles.slice(0, 20); // Limit to 20 files\n } catch {\n return [];\n }\n }\n\n /**\n * Present error context to user\n */\n private presentErrorContext(errorContext: ErrorContext, _step: ExecutionStep): void {\n console.log('\\n' + '='.repeat(60));\n console.log('🚨 ISSUE ENCOUNTERED');\n console.log('='.repeat(60));\n\n console.log(`[x-cli] Issue encountered: ${errorContext.errorMessage}`);\n\n if (errorContext.affectedFiles.length > 0) {\n console.log(`Affected files: ${errorContext.affectedFiles.slice(0, 5).join(', ')}`);\n if (errorContext.affectedFiles.length > 5) {\n console.log(`... and ${errorContext.affectedFiles.length - 5} more`);\n }\n }\n\n console.log('\\n🔄 Initiating adaptive recovery...');\n }\n\n /**\n * Handle recovery flow\n */\n async handleRecovery(\n originalRequest: ResearchRequest,\n errorContext: ErrorContext,\n executionPlan: ExecutionPlan,\n researchService: ResearchRecommendService\n ): Promise<RecoveryResult> {\n // Check recovery attempt limits\n const attempts = this.recoveryAttempts.get(errorContext.stepId) || 0;\n if (attempts >= this.maxRecoveryAttempts) {\n console.log(`❌ Maximum recovery attempts (${this.maxRecoveryAttempts}) reached for step ${errorContext.stepId}`);\n return { approved: false, maxRetriesExceeded: true };\n }\n\n this.recoveryAttempts.set(errorContext.stepId, attempts + 1);\n\n // Create recovery request\n const recoveryRequest: ResearchRequest = {\n userTask: `Recovery from execution error: ${errorContext.errorMessage}\n\nOriginal task: ${originalRequest.userTask}\n\nError context:\n- Type: ${errorContext.errorType}\n- Message: ${errorContext.errorMessage}\n- Affected files: ${errorContext.affectedFiles.join(', ')}\n\nPlease provide a recovery plan to resolve this issue and continue execution.`,\n context: `This is a RECOVERY REQUEST for a failed execution step. The original task was part of a larger plan that encountered an error. Focus on fixing the specific issue and providing steps to resolve it.`,\n constraints: [\n 'Focus on fixing the specific error encountered',\n 'Provide actionable recovery steps',\n 'Consider the broader execution context',\n 'Ensure recovery steps are safe and reversible'\n ]\n };\n\n try {\n console.log('🔍 Analyzing error and generating recovery plan...');\n\n // Get recovery research\n const { output, approval } = await researchService.researchAndGetApproval(recoveryRequest);\n\n if (approval.approved) {\n console.log('✅ Recovery plan approved. Resuming execution...');\n return { approved: true, recoveryPlan: output };\n } else {\n console.log('❌ Recovery plan rejected by user.');\n return { approved: false };\n }\n\n } catch (error) {\n console.error('[Recovery] Failed to generate recovery plan:', error);\n return { approved: false };\n }\n }\n\n /**\n * Execute with adaptive recovery\n */\n async executeWithRecovery(\n plan: ResearchPlan,\n researchService: ResearchRecommendService,\n originalRequest: ResearchRequest\n ): Promise<ExecutionResult> {\n console.log(`🚀 Starting execution with adaptive recovery of ${plan.todo.length} tasks...`);\n console.log(`Summary: ${plan.summary}`);\n\n const executionPlan: ExecutionPlan = {\n steps: plan.todo.map((todo, index) => ({\n id: index + 1,\n description: todo,\n status: 'pending'\n })),\n totalSteps: plan.todo.length,\n completedSteps: 0,\n failedSteps: 0,\n startTime: new Date(),\n summary: plan.summary\n };\n\n try {\n // Execute steps sequentially with recovery\n for (let i = 0; i < executionPlan.steps.length; i++) {\n const step = executionPlan.steps[i];\n\n try {\n await this.executeStep(step, executionPlan);\n\n if (step.status === 'completed') {\n executionPlan.completedSteps++;\n } else {\n // Attempt recovery\n const errorContext = this.detectError(step.error);\n if (errorContext) {\n errorContext.stepId = step.id;\n this.presentErrorContext(errorContext, step);\n\n const recoveryResult = await this.handleRecovery(\n originalRequest,\n errorContext,\n executionPlan,\n researchService\n );\n\n if (recoveryResult.approved && recoveryResult.recoveryPlan) {\n // Insert recovery steps into the execution plan\n const recoverySteps = (recoveryResult.recoveryPlan.plan.todo as string[]).map((todo, idx) => ({\n id: executionPlan.steps.length + idx + 1,\n description: `[RECOVERY] ${todo}`,\n status: 'pending' as const\n }));\n\n executionPlan.steps.splice(i + 1, 0, ...recoverySteps);\n executionPlan.totalSteps += recoverySteps.length;\n\n console.log(`📋 Added ${recoverySteps.length} recovery steps. Continuing execution...`);\n continue; // Retry the current step index (which now has recovery steps)\n }\n }\n\n // If no recovery or recovery failed, mark as failed and continue\n executionPlan.failedSteps++;\n }\n\n } catch (error) {\n // Handle execution-level errors\n const errorContext = this.detectError(error);\n if (errorContext) {\n errorContext.stepId = step.id;\n step.status = 'failed';\n step.error = errorContext.errorMessage;\n executionPlan.failedSteps++;\n\n console.log(`[x-cli] #${step.id} ✗ Failed: ${errorContext.errorMessage}`);\n }\n }\n }\n\n executionPlan.endTime = new Date();\n\n // Create git commit if enabled and in git repo\n if (this.options.gitCommit && this.isGitRepository()) {\n try {\n executionPlan.gitCommitHash = await this.createGitCommit(executionPlan);\n } catch (error) {\n console.warn('[Execution] Failed to create git commit:', error);\n }\n }\n\n const success = executionPlan.failedSteps === 0;\n console.log(`✅ Execution ${success ? 'completed' : 'finished with errors'}: ${executionPlan.completedSteps}/${executionPlan.totalSteps} steps successful`);\n\n return {\n success,\n executionPlan\n };\n\n } catch (error) {\n executionPlan.endTime = new Date();\n console.error('[Execution] Orchestration failed:', error);\n\n return {\n success: false,\n executionPlan,\n error: error instanceof Error ? error.message : 'Unknown execution error'\n };\n }\n }\n}","/**\n * Research & Recommend Service\n *\n * Implements the \"Research → Recommend\" flow that generates structured\n * Issues/Options/Recommendation/Plan output for user approval.\n */\n\nimport {\n ResearchOutput,\n ResearchRequest,\n ResearchConfig,\n ResearchIssue,\n ResearchOption,\n ResearchRecommendation,\n ResearchPlan,\n ApprovalResponse\n} from '../types/research-recommend.js';\nimport { GrokAgent, ChatEntry } from '../agent/grok-agent.js';\nimport { ContextPack } from '../utils/context-loader.js';\nimport { ExecutionOrchestrator } from './execution-orchestrator.js';\nimport { ExecutionResult } from '../types/execution.js';\nimport * as readline from 'readline';\n\nconst DEFAULT_CONFIG: ResearchConfig = {\n maxOptions: 3,\n includeContext: true,\n timeout: 60000 // 60 seconds\n};\n\nexport class ResearchRecommendService {\n constructor(\n private agent: GrokAgent,\n private config: ResearchConfig = DEFAULT_CONFIG\n ) {}\n\n /**\n * Perform research and generate recommendation\n */\n async researchAndRecommend(\n request: ResearchRequest,\n contextPack?: ContextPack\n ): Promise<ResearchOutput> {\n const prompt = this.buildResearchPrompt(request, contextPack);\n\n try {\n console.log('🔍 [DEBUG] Research prompt sent:', prompt.substring(0, 200) + '...');\n console.log('🔍 [DEBUG] Research prompt sent (first 200 chars):', prompt.substring(0, 200) + '...');\n const response = await this.agent.processUserMessage(prompt);\n console.log('🔍 [DEBUG] Raw AI response received:', JSON.stringify(response, null, 2));\n console.log('🔍 [DEBUG] Raw AI response:', JSON.stringify(response, null, 2));\n // Temporary mock data - replace with real parsing when processUserMessage is fixed\n console.log('🔍 [DEBUG] Using mock output (real AI pending)');\n const mockOutput: ResearchOutput = {\n issues: [],\n options: [],\n recommendation: {\n optionId: 1,\n reasoning: \"Mock plan - real AI integration pending\",\n justification: \"Using mock data while implementing AI integration\",\n confidence: \"high\"\n },\n plan: {\n summary: \"Mock summary - detailed plan generation pending\",\n approach: [\"Mock approach - implementation strategy pending\"],\n todo: [\"Mock task - actual tasks will be generated by AI\"],\n estimatedEffort: \"2 hours\",\n keyConsiderations: [\"Mock consideration - real considerations pending\"]\n }\n };\n \n return mockOutput;\n } catch (error) {\n console.error('[ResearchRecommend] Research failed:', error);\n throw new Error(`Research failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n /**\n * Build the research prompt\n */\n private buildResearchPrompt(request: ResearchRequest, contextPack?: ContextPack): string {\n let prompt = `Analyze the following task and provide a structured research output in JSON format.\n\nTASK: ${request.userTask}\n\n`;\n\n if (request.constraints && request.constraints.length > 0) {\n prompt += `CONSTRAINTS:\n${request.constraints.map(c => `- ${c}`).join('\\n')}\n\n`;\n }\n\n if (request.preferences && request.preferences.length > 0) {\n prompt += `PREFERENCES:\n${request.preferences.map(p => `- ${p}`).join('\\n')}\n\n`;\n }\n\n if (this.config.includeContext && contextPack) {\n prompt += `CONTEXT INFORMATION:\nSystem Documentation:\n${contextPack.system}\n\nSOP Documentation:\n${contextPack.sop}\n\nRecent Task Documentation:\n${contextPack.tasks.slice(0, 5).map(t => `${t.filename}:\\n${t.content}`).join('\\n\\n')}\n\n`;\n }\n\n prompt += `Please provide your analysis in the following JSON structure:\n{\n \"issues\": [\n {\n \"type\": \"fact|gap|risk\",\n \"description\": \"Description of the issue\",\n \"severity\": \"low|medium|high\",\n \"impact\": \"Impact description (optional)\"\n }\n ],\n \"options\": [\n {\n \"id\": 1,\n \"title\": \"Option title\",\n \"description\": \"Detailed description\",\n \"tradeoffs\": {\n \"pros\": [\"pro1\", \"pro2\"],\n \"cons\": [\"con1\", \"con2\"]\n },\n \"effort\": \"low|medium|high\",\n \"risk\": \"low|medium|high\"\n }\n ],\n \"recommendation\": {\n \"optionId\": 1,\n \"reasoning\": \"Why this option is recommended\",\n \"justification\": \"Detailed justification\",\n \"confidence\": \"low|medium|high\"\n },\n \"plan\": {\n \"summary\": \"Brief summary of the plan\",\n \"approach\": [\"step1\", \"step2\", \"step3\"],\n \"todo\": [\"TODO item 1\", \"TODO item 2\"],\n \"estimatedEffort\": \"Time estimate\",\n \"keyConsiderations\": [\"consideration1\", \"consideration2\"]\n }\n}\n\nProvide exactly ${this.config.maxOptions} options. Focus on actionable, practical solutions. Be thorough but concise. Respond with ONLY the JSON.`;\n\n return prompt;\n }\n\n /**\n * Parse the AI response into structured output\n */\n private parseResearchOutput(response: ChatEntry[]): ResearchOutput {\n // Extract the last assistant message\n let jsonText = '';\n if (Array.isArray(response)) {\n for (const entry of response) {\n if (entry.type === 'assistant' && entry.content) {\n jsonText = entry.content.trim();\n break;\n }\n }\n } else if (typeof response === 'string') {\n jsonText = response;\n }\n\n // Try to extract JSON from the response\n const jsonMatch = jsonText.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('No JSON found in response');\n }\n\n try {\n const parsed = JSON.parse(jsonMatch[0]);\n\n // Validate and normalize the structure\n return {\n issues: this.validateIssues(parsed.issues || []),\n options: this.validateOptions(parsed.options || []),\n recommendation: this.validateRecommendation(parsed.recommendation),\n plan: this.validatePlan(parsed.plan)\n };\n } catch (error) {\n console.error('[ResearchRecommend] JSON parse error:', error);\n console.error('Raw response:', jsonText);\n throw new Error('Failed to parse research output JSON');\n }\n }\n\n \n private validateIssues(issues: any[]): ResearchIssue[] {\n return issues.map(issue => ({\n type: ['fact', 'gap', 'risk'].includes(issue.type) ? issue.type : 'fact',\n description: issue.description || 'No description provided',\n severity: ['low', 'medium', 'high'].includes(issue.severity) ? issue.severity : 'medium',\n impact: issue.impact\n }));\n }\n\n \n private validateOptions(options: any[]): ResearchOption[] {\n return options.slice(0, this.config.maxOptions).map((option, index) => ({\n id: option.id || (index + 1),\n title: option.title || `Option ${index + 1}`,\n description: option.description || 'No description provided',\n tradeoffs: {\n pros: Array.isArray(option.tradeoffs?.pros) ? option.tradeoffs.pros : [],\n cons: Array.isArray(option.tradeoffs?.cons) ? option.tradeoffs.cons : []\n },\n effort: ['low', 'medium', 'high'].includes(option.effort) ? option.effort : 'medium',\n risk: ['low', 'medium', 'high'].includes(option.risk) ? option.risk : 'medium'\n }));\n }\n\n \n private validateRecommendation(rec: any): ResearchRecommendation {\n return {\n optionId: rec?.optionId || 1,\n reasoning: rec?.reasoning || 'No reasoning provided',\n justification: rec?.justification || 'No justification provided',\n confidence: ['low', 'medium', 'high'].includes(rec?.confidence) ? rec.confidence : 'medium'\n };\n }\n\n \n private validatePlan(plan: any): ResearchPlan {\n return {\n summary: plan?.summary || 'No summary provided',\n approach: Array.isArray(plan?.approach) ? plan.approach : [],\n todo: Array.isArray(plan?.todo) ? plan.todo : [],\n estimatedEffort: plan?.estimatedEffort || 'Unknown',\n keyConsiderations: Array.isArray(plan?.keyConsiderations) ? plan.keyConsiderations : []\n };\n }\n\n /**\n * Render research output to console\n */\n renderToConsole(output: ResearchOutput): void {\n console.log('\\n' + '='.repeat(50));\n console.log('🤖 RESEARCH & RECOMMENDATION');\n console.log('='.repeat(50));\n\n this.renderIssues(output.issues);\n this.renderOptions(output.options);\n this.renderRecommendation(output.recommendation, output.options);\n this.renderPlan(output.plan);\n\n console.log('='.repeat(50));\n }\n\n private renderIssues(issues: ResearchIssue[]): void {\n console.log('\\n📋 ISSUES');\n console.log('-'.repeat(20));\n\n if (issues.length === 0) {\n console.log('No issues identified.');\n return;\n }\n\n for (const issue of issues) {\n const icon = issue.type === 'fact' ? '📊' : issue.type === 'gap' ? '⚠️' : '🚨';\n const severity = issue.severity ? ` (${issue.severity.toUpperCase()})` : '';\n console.log(`${icon} ${issue.type.toUpperCase()}${severity}: ${issue.description}`);\n if (issue.impact) {\n console.log(` Impact: ${issue.impact}`);\n }\n }\n }\n\n private renderOptions(options: ResearchOption[]): void {\n console.log('\\n🎯 OPTIONS');\n console.log('-'.repeat(20));\n\n for (const option of options) {\n console.log(`\\n${option.id}) ${option.title}`);\n console.log(` ${option.description}`);\n\n console.log(` Effort: ${option.effort.toUpperCase()} | Risk: ${option.risk.toUpperCase()}`);\n\n if (option.tradeoffs.pros.length > 0) {\n console.log(` ✅ Pros: ${option.tradeoffs.pros.join(', ')}`);\n }\n\n if (option.tradeoffs.cons.length > 0) {\n console.log(` ❌ Cons: ${option.tradeoffs.cons.join(', ')}`);\n }\n }\n }\n\n private renderRecommendation(recommendation: ResearchRecommendation, options: ResearchOption[]): void {\n console.log('\\n🎯 RECOMMENDATION');\n console.log('-'.repeat(20));\n\n const recommendedOption = options.find(o => o.id === recommendation.optionId);\n const optionTitle = recommendedOption ? recommendedOption.title : `Option ${recommendation.optionId}`;\n\n console.log(`→ ${optionTitle} (Confidence: ${recommendation.confidence.toUpperCase()})`);\n console.log(`Reasoning: ${recommendation.reasoning}`);\n console.log(`Justification: ${recommendation.justification}`);\n }\n\n private renderPlan(plan: ResearchPlan): void {\n console.log('\\n📝 PLAN SUMMARY');\n console.log('-'.repeat(20));\n\n console.log(`Summary: ${plan.summary}`);\n console.log(`Estimated Effort: ${plan.estimatedEffort}`);\n\n if (plan.approach.length > 0) {\n console.log('\\nApproach:');\n plan.approach.forEach((step, index) => {\n console.log(` ${index + 1}. ${step}`);\n });\n }\n\n if (plan.todo.length > 0) {\n console.log('\\nTODO:');\n plan.todo.forEach((item) => {\n console.log(` [ ] ${item}`);\n });\n }\n\n if (plan.keyConsiderations.length > 0) {\n console.log('\\nKey Considerations:');\n plan.keyConsiderations.forEach(consideration => {\n console.log(` • ${consideration}`);\n });\n }\n }\n\n /**\n * Prompt user for approval with Y/n/R options\n */\n async promptForApproval(_output: ResearchOutput): Promise<ApprovalResponse> {\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n const promptUser = () => {\n console.log('\\nProceed with recommendation? (Y/n) [R=revise]');\n rl.question('> ', (answer) => {\n const cleanAnswer = answer.trim().toLowerCase();\n\n if (cleanAnswer === 'y' || cleanAnswer === 'yes' || cleanAnswer === '') {\n rl.close();\n resolve({ approved: true, revised: false });\n } else if (cleanAnswer === 'n' || cleanAnswer === 'no') {\n rl.close();\n resolve({ approved: false, revised: false });\n } else if (cleanAnswer === 'r' || cleanAnswer === 'revise') {\n rl.question('Revision note (brief description of changes needed): ', (revisionNote) => {\n rl.close();\n resolve({\n approved: false,\n revised: true,\n revisionNote: revisionNote.trim() || 'User requested revision'\n });\n });\n } else {\n console.log('❌ Invalid input. Please enter Y (yes), N (no), or R (revise).');\n promptUser();\n }\n });\n };\n\n promptUser();\n });\n }\n\n /**\n * Handle revision flow with updated request\n */\n async handleRevision(\n originalRequest: ResearchRequest,\n revisionNote: string,\n contextPack?: ContextPack\n ): Promise<ResearchOutput> {\n console.log(`🔄 Revising based on: \"${revisionNote}\"`);\n console.log('🔍 Re-researching with revision context...');\n\n const revisedRequest: ResearchRequest = {\n ...originalRequest,\n constraints: [\n ...(originalRequest.constraints || []),\n `REVISION REQUEST: ${revisionNote}`\n ]\n };\n\n return await this.researchAndRecommend(revisedRequest, contextPack);\n }\n\n /**\n * Full research and approval workflow with revision support\n */\n async researchAndGetApproval(\n request: ResearchRequest,\n contextPack?: ContextPack,\n maxRevisions: number = 3\n ): Promise<{ output: ResearchOutput; approval: ApprovalResponse; revisions: number }> {\n let currentRequest = request;\n let revisions = 0;\n\n while (revisions <= maxRevisions) {\n console.log('🔍 Researching and analyzing...');\n\n const output = await this.researchAndRecommend(currentRequest, contextPack);\n this.renderToConsole(output);\n\n const approval = await this.promptForApproval(output);\n\n if (approval.approved || !approval.revised) {\n return { output, approval, revisions };\n }\n\n // Handle revision\n revisions++;\n if (revisions > maxRevisions) {\n console.log(`❌ Maximum revisions (${maxRevisions}) reached.`);\n return { output, approval, revisions };\n }\n\n console.log(`🔄 Revision ${revisions}/${maxRevisions}`);\n currentRequest = {\n ...request,\n constraints: [\n ...(request.constraints || []),\n `REVISION ${revisions}: ${approval.revisionNote}`\n ]\n };\n }\n\n // Should not reach here, but just in case\n throw new Error('Unexpected end of revision loop');\n }\n\n /**\n * Complete workflow: Research → Recommend → Execute with Adaptive Recovery\n */\n async researchRecommendExecute(\n request: ResearchRequest,\n contextPack?: ContextPack,\n maxRevisions: number = 3\n ): Promise<{\n output: ResearchOutput;\n approval: ApprovalResponse;\n revisions: number;\n execution?: ExecutionResult;\n }> {\n // Phase 1: Research and get approval\n const { output, approval, revisions } = await this.researchAndGetApproval(request, contextPack, maxRevisions);\n\n if (!approval.approved) {\n return { output, approval, revisions };\n }\n\n // Phase 2: Execute the approved plan with adaptive recovery\n console.log('\\n🚀 Proceeding with execution (with adaptive recovery)...');\n const orchestrator = new ExecutionOrchestrator(this.agent);\n const execution = await orchestrator.executeWithRecovery(output.plan, this, request);\n\n return {\n output,\n approval,\n revisions,\n execution\n };\n }\n}","/**\n * Context Loader Module\n *\n * Loads and prioritizes .agent/ documentation for intelligent decision making.\n * Handles system.md, sop.md equivalents, and task files with summarization.\n */\n\nimport fs from 'fs';\nimport path from 'path';\n\nexport interface TaskDoc {\n filename: string;\n content: string;\n isSummarized: boolean;\n date: Date;\n size: number;\n}\n\nexport interface ContextPack {\n system: string;\n sop: string;\n tasks: TaskDoc[];\n totalSize: number;\n warnings: string[];\n}\n\nconst CONTEXT_BUDGET_BYTES = 280 * 1024; // 280KB\nconst MAX_SUMMARY_LENGTH = 2000; // characters for summary\n\n/**\n * Loads all .md files from a directory and concatenates them\n */\nfunction loadMarkdownDirectory(dirPath: string): string {\n if (!fs.existsSync(dirPath)) {\n return '';\n }\n\n const files = fs.readdirSync(dirPath)\n .filter(file => file.endsWith('.md'))\n .sort(); // alphabetical sort\n\n let content = '';\n for (const file of files) {\n const filePath = path.join(dirPath, file);\n try {\n const fileContent = fs.readFileSync(filePath, 'utf-8');\n content += `\\n\\n=== ${file} ===\\n\\n${fileContent}`;\n } catch (error) {\n console.warn(`Failed to read ${filePath}:`, error);\n }\n }\n\n return content;\n}\n\n/**\n * Extracts date from task filename (YYYY-MM-DD format)\n */\nfunction extractDateFromFilename(filename: string): Date {\n const match = filename.match(/^(\\d{4}-\\d{2}-\\d{2})/);\n if (match) {\n return new Date(match[1]);\n }\n return new Date(0); // fallback to epoch for undated files\n}\n\n/**\n * Simple summarization: take first N characters or until double newline\n */\nfunction summarizeContent(content: string, maxLength: number = MAX_SUMMARY_LENGTH): string {\n if (content.length <= maxLength) {\n return content;\n }\n\n const truncated = content.substring(0, maxLength);\n const lastNewline = truncated.lastIndexOf('\\n\\n');\n if (lastNewline > maxLength * 0.8) {\n return truncated.substring(0, lastNewline);\n }\n\n return truncated + '\\n\\n[...content truncated for context budget...]';\n}\n\n/**\n * Loads and prioritizes task files\n */\nfunction loadTaskFiles(tasksDir: string, maxBudget: number): TaskDoc[] {\n if (!fs.existsSync(tasksDir)) {\n return [];\n }\n\n const files = fs.readdirSync(tasksDir)\n .filter(file => file.endsWith('.md'))\n .map(filename => {\n const filePath = path.join(tasksDir, filename);\n const content = fs.readFileSync(filePath, 'utf-8');\n return {\n filename,\n content,\n size: Buffer.byteLength(content, 'utf-8'),\n date: extractDateFromFilename(filename),\n isSummarized: false\n };\n })\n .sort((a, b) => b.date.getTime() - a.date.getTime()); // newest first\n\n const result: TaskDoc[] = [];\n let usedBudget = 0;\n\n for (const file of files) {\n let finalContent = file.content;\n let isSummarized = false;\n\n if (usedBudget + file.size > maxBudget) {\n // Summarize if it would exceed budget\n finalContent = summarizeContent(file.content);\n const summarizedSize = Buffer.byteLength(finalContent, 'utf-8');\n if (usedBudget + summarizedSize > maxBudget) {\n // Skip if even summarized it's too big\n continue;\n }\n usedBudget += summarizedSize;\n isSummarized = true;\n } else {\n usedBudget += file.size;\n }\n\n result.push({\n ...file,\n content: finalContent,\n isSummarized\n });\n }\n\n return result;\n}\n\n/**\n * Loads context from .agent/ directory\n */\nexport function loadContext(agentDir: string = '.agent'): ContextPack {\n const systemContent = loadMarkdownDirectory(path.join(agentDir, 'system'));\n const sopContent = loadMarkdownDirectory(path.join(agentDir, 'sop'));\n\n const systemSize = Buffer.byteLength(systemContent, 'utf-8');\n const sopSize = Buffer.byteLength(sopContent, 'utf-8');\n\n // Reserve budget for system and sop, then use rest for tasks\n const taskBudget = Math.max(0, CONTEXT_BUDGET_BYTES - systemSize - sopSize);\n const tasks = loadTaskFiles(path.join(agentDir, 'tasks'), taskBudget);\n\n const totalSize = systemSize + sopSize + tasks.reduce((sum, task) => sum + Buffer.byteLength(task.content, 'utf-8'), 0);\n\n const warnings: string[] = [];\n if (totalSize > CONTEXT_BUDGET_BYTES) {\n warnings.push(`Context size (${(totalSize / 1024).toFixed(1)}KB) exceeds budget (${(CONTEXT_BUDGET_BYTES / 1024)}KB)`);\n }\n\n return {\n system: systemContent,\n sop: sopContent,\n tasks,\n totalSize,\n warnings\n };\n}\n\n/**\n * Formats context pack for display/logging\n */\nexport function formatContextStatus(pack: ContextPack): string {\n const taskCount = pack.tasks.length;\n const summarizedCount = pack.tasks.filter(t => t.isSummarized).length;\n const sizeKB = (pack.totalSize / 1024).toFixed(1);\n\n let status = `[x-cli] Context: loaded system docs, sop docs, ${taskCount} task docs (~${sizeKB} KB).`;\n\n if (summarizedCount > 0) {\n status += ` Summarized ${summarizedCount} older tasks for context budget.`;\n }\n\n if (pack.warnings.length > 0) {\n status += ` Warnings: ${pack.warnings.join('; ')}`;\n }\n\n return status;\n}","import { GrokClient, GrokMessage, GrokToolCall } from \"../grok/client.js\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport {\n getAllGrokTools,\n getMCPManager,\n initializeMCPServers,\n} from \"../grok/tools.js\";\nimport { loadMCPConfig } from \"../mcp/config.js\";\nimport {\n TextEditorTool,\n MorphEditorTool,\n BashTool,\n TodoTool,\n ConfirmationTool,\n SearchTool,\n MultiFileEditorTool,\n AdvancedSearchTool,\n FileTreeOperationsTool,\n CodeAwareEditorTool,\n OperationHistoryTool,\n ASTParserTool,\n SymbolSearchTool,\n DependencyAnalyzerTool,\n CodeContextTool,\n RefactoringAssistantTool,\n} from \"../tools/index.js\";\nimport { ToolResult } from \"../types/index.js\";\nimport { EventEmitter } from \"events\";\nimport { createTokenCounter, TokenCounter } from \"../utils/token-counter.js\";\nimport { loadCustomInstructions } from \"../utils/custom-instructions.js\";\nimport { getSettingsManager } from \"../utils/settings-manager.js\";\nimport { ContextPack } from \"../utils/context-loader.js\";\nimport { ResearchRecommendService } from \"../services/research-recommend.js\";\nimport { ExecutionOrchestrator } from \"../services/execution-orchestrator.js\";\n\nexport interface ChatEntry {\n type: \"user\" | \"assistant\" | \"tool_result\" | \"tool_call\";\n content: string;\n timestamp: Date;\n toolCalls?: GrokToolCall[] | null;\n toolCall?: GrokToolCall;\n toolResult?: { success: boolean; output?: string; error?: string };\n isStreaming?: boolean;\n // Paste summary support\n originalContent?: string; // Store full content when summarized\n displayContent?: string; // What to show in UI (summary or full content)\n isPasteSummary?: boolean; // Flag for styling\n pasteMetadata?: {\n pasteNumber: number;\n lineCount: number;\n charCount: number;\n };\n}\n\nexport interface StreamingChunk {\n type: \"content\" | \"tool_calls\" | \"tool_result\" | \"done\" | \"token_count\";\n content?: string;\n toolCalls?: GrokToolCall[];\n toolCall?: GrokToolCall;\n toolResult?: ToolResult;\n tokenCount?: number;\n}\n\nexport class GrokAgent extends EventEmitter {\n private grokClient: GrokClient;\n private textEditor: TextEditorTool;\n private morphEditor: MorphEditorTool | null;\n private bash: BashTool;\n private todoTool: TodoTool;\n private confirmationTool: ConfirmationTool;\n private search: SearchTool;\n // Advanced tools\n private multiFileEditor: MultiFileEditorTool;\n private advancedSearch: AdvancedSearchTool;\n private fileTreeOps: FileTreeOperationsTool;\n private codeAwareEditor: CodeAwareEditorTool;\n private operationHistory: OperationHistoryTool;\n // Intelligence tools\n private astParser: ASTParserTool;\n private symbolSearch: SymbolSearchTool;\n private dependencyAnalyzer: DependencyAnalyzerTool;\n private codeContext: CodeContextTool;\n private refactoringAssistant: RefactoringAssistantTool;\n private chatHistory: ChatEntry[] = [];\n private messages: GrokMessage[] = [];\n private tokenCounter: TokenCounter;\n private abortController: AbortController | null = null;\n private mcpInitialized: boolean = false;\n private maxToolRounds: number;\n private lastToolExecutionTime: number = 0;\n private activeToolCalls: number = 0;\n private readonly maxConcurrentToolCalls: number = 2;\n private readonly minRequestInterval: number = 500; // ms\n private lastRequestTime: number = 0;\n private sessionLogPath: string;\n\n constructor(\n apiKey: string,\n baseURL?: string,\n model?: string,\n maxToolRounds?: number,\n contextPack?: ContextPack\n ) {\n super();\n const manager = getSettingsManager();\n const savedModel = manager.getCurrentModel();\n const modelToUse = model || savedModel || \"grok-code-fast-1\";\n this.maxToolRounds = maxToolRounds || 400;\n this.sessionLogPath = process.env.GROK_SESSION_LOG || `${process.env.HOME}/.grok/session.log`;\n this.grokClient = new GrokClient(apiKey, modelToUse, baseURL);\n this.textEditor = new TextEditorTool();\n this.morphEditor = process.env.MORPH_API_KEY ? new MorphEditorTool() : null;\n this.bash = new BashTool();\n this.todoTool = new TodoTool();\n this.confirmationTool = new ConfirmationTool();\n this.search = new SearchTool();\n // Initialize advanced tools\n this.multiFileEditor = new MultiFileEditorTool();\n this.advancedSearch = new AdvancedSearchTool();\n this.fileTreeOps = new FileTreeOperationsTool();\n this.codeAwareEditor = new CodeAwareEditorTool();\n this.operationHistory = new OperationHistoryTool();\n // Initialize intelligence tools\n this.astParser = new ASTParserTool();\n this.symbolSearch = new SymbolSearchTool();\n this.dependencyAnalyzer = new DependencyAnalyzerTool();\n this.codeContext = new CodeContextTool();\n this.refactoringAssistant = new RefactoringAssistantTool();\n this.tokenCounter = createTokenCounter(modelToUse);\n\n // Initialize MCP servers if configured\n this.initializeMCP();\n\n // Load custom instructions\n const customInstructions = loadCustomInstructions();\n const customInstructionsSection = customInstructions\n ? `\\n\\nCUSTOM INSTRUCTIONS:\\n${customInstructions}\\n\\nThe above custom instructions should be followed alongside the standard instructions below.`\n : \"\";\n\n // Load .agent context if provided\n const contextSection = contextPack ? `\\n\\nPROJECT CONTEXT:\\n${contextPack.system}\\n\\nSOP:\\n${contextPack.sop}\\n\\nTASKS:\\n${contextPack.tasks.map(t => `- ${t.filename}: ${t.content}`).join('\\n')}\\n\\nThe above project context should inform your responses and decision making.` : \"\";\n\n // Initialize with system message\n this.messages.push({\n role: \"system\",\n content: `You are X-CLI, an AI assistant that helps with file editing, coding tasks, and system operations.${customInstructionsSection}${contextSection}\n\nYou have access to these tools:\n\nCORE TOOLS:\n- view_file: View file contents or directory listings\n- create_file: Create new files with content (ONLY use this for files that don't exist yet)\n- str_replace_editor: Replace text in existing files (ALWAYS use this to edit or update existing files)${\n this.morphEditor\n ? \"\\n- edit_file: High-speed file editing with Morph Fast Apply (4,500+ tokens/sec with 98% accuracy)\"\n : \"\"\n }\n- bash: Execute bash commands (use for searching, file discovery, navigation, and system operations)\n- search: Unified search tool for finding text content or files (similar to Cursor's search functionality)\n- create_todo_list: Create a visual todo list for planning and tracking tasks\n- update_todo_list: Update existing todos in your todo list\n\nADVANCED TOOLS:\n- multi_file_edit: Perform atomic operations across multiple files with transaction support\n- advanced_search: Enhanced search with regex patterns, context, and bulk replace capabilities\n- file_tree_ops: Generate directory trees, bulk operations, and file organization\n- code_analysis: Analyze code structure, perform refactoring, and smart code operations\n- operation_history: Track, undo, and redo operations with comprehensive history management\n\nREAL-TIME INFORMATION:\nYou have access to real-time web search and X (Twitter) data. When users ask for current information, latest news, or recent events, you automatically have access to up-to-date information from the web and social media.\n\nIMPORTANT TOOL USAGE RULES:\n- NEVER use create_file on files that already exist - this will overwrite them completely\n- ALWAYS use str_replace_editor to modify existing files, even for small changes\n- Before editing a file, use view_file to see its current contents\n- Use create_file ONLY when creating entirely new files that don't exist\n\nSEARCHING AND EXPLORATION:\n- Use search for fast, powerful text search across files or finding files by name (unified search tool)\n- Examples: search for text content like \"import.*react\", search for files like \"component.tsx\"\n- Use bash with commands like 'find', 'grep', 'rg', 'ls' for complex file operations and navigation\n- view_file is best for reading specific files you already know exist\n\nWhen a user asks you to edit, update, modify, or change an existing file:\n1. First use view_file to see the current contents\n2. Then use str_replace_editor to make the specific changes\n3. Never use create_file for existing files\n\nWhen a user asks you to create a new file that doesn't exist:\n1. Use create_file with the full content\n\nTASK PLANNING WITH TODO LISTS:\n- For complex requests with multiple steps, ALWAYS create a todo list first to plan your approach\n- Use create_todo_list to break down tasks into manageable items with priorities\n- Mark tasks as 'in_progress' when you start working on them (only one at a time)\n- Mark tasks as 'completed' immediately when finished\n- Use update_todo_list to track your progress throughout the task\n- Todo lists provide visual feedback with colors: ✅ Green (completed), 🔄 Cyan (in progress), ⏳ Yellow (pending)\n- Always create todos with priorities: 'high' (🔴), 'medium' (🟡), 'low' (🟢)\n\nUSER CONFIRMATION SYSTEM:\nFile operations (create_file, str_replace_editor) and bash commands will automatically request user confirmation before execution. The confirmation system will show users the actual content or command before they decide. Users can choose to approve individual operations or approve all operations of that type for the session.\n\nIf a user rejects an operation, the tool will return an error and you should not proceed with that specific operation.\n\nBe helpful, direct, and efficient. Always explain what you're doing and show the results.\n\nIMPORTANT RESPONSE GUIDELINES:\n- After using tools, do NOT respond with pleasantries like \"Thanks for...\" or \"Great!\"\n- Only provide necessary explanations or next steps if relevant to the task\n- Keep responses concise and focused on the actual work being done\n- If a tool execution completes the user's request, you can remain silent or give a brief confirmation\n\nCurrent working directory: ${process.cwd()}`,\n });\n }\n\n private async initializeMCP(): Promise<void> {\n // Initialize MCP in the background without blocking\n Promise.resolve().then(async () => {\n try {\n const config = loadMCPConfig();\n if (config.servers.length > 0) {\n await initializeMCPServers();\n }\n } catch (error) {\n console.warn(\"MCP initialization failed:\", error);\n } finally {\n this.mcpInitialized = true;\n }\n });\n }\n\n private isGrokModel(): boolean {\n const currentModel = this.grokClient.getCurrentModel();\n return currentModel.toLowerCase().includes(\"grok\");\n }\n\n // Heuristic: enable web search only when likely needed\n private shouldUseSearchFor(message: string): boolean {\n const q = message.toLowerCase();\n const keywords = [\n \"today\",\n \"latest\",\n \"news\",\n \"trending\",\n \"breaking\",\n \"current\",\n \"now\",\n \"recent\",\n \"x.com\",\n \"twitter\",\n \"tweet\",\n \"what happened\",\n \"as of\",\n \"update on\",\n \"release notes\",\n \"changelog\",\n \"price\",\n ];\n if (keywords.some((k) => q.includes(k))) return true;\n // crude date pattern (e.g., 2024/2025) may imply recency\n if (/(20\\d{2})/.test(q)) return true;\n return false;\n }\n\n // Detect if message should use the Research → Recommend → Execute workflow\n private shouldUseWorkflow(message: string): boolean {\n const q = message.toLowerCase();\n\n // Complexity indicators that suggest workflow usage\n const complexityIndicators = [\n // Action verbs indicating multi-step tasks\n /\\b(implement|build|create|refactor|optimize|add|update|modify|develop|design)\\b/.test(q),\n /\\b(system|feature|component|module|service|api|database)\\b/.test(q),\n\n // Multi-step indicators\n /\\b(and|then|after|finally|also|additionally)\\b/.test(q),\n /\\b(step|phase|stage|part|component)\\b/.test(q),\n\n // Size/complexity indicators\n q.length > 150, // Long requests\n (q.match(/\\b(and|or|but|however|therefore|consequently)\\b/g) || []).length >= 2, // Complex logic\n\n // Technical complexity\n /\\b(authentication|authorization|security|validation|testing|deployment|ci.cd|docker|kubernetes)\\b/.test(q),\n /\\b(multiple|several|various|different|complex|advanced)\\b/.test(q),\n ];\n\n // Use workflow if 2+ complexity indicators are present\n const indicatorCount = complexityIndicators.filter(Boolean).length;\n return indicatorCount >= 2;\n }\n\n async processUserMessage(message: string): Promise<ChatEntry[]> {\n // Check if this should use the Research → Recommend → Execute workflow\n if (this.shouldUseWorkflow(message)) {\n return this.processWithWorkflow(message);\n }\n\n // Fall back to standard processing for simple queries\n return this.processStandard(message);\n }\n\n /**\n * Process complex tasks using the Research → Recommend → Execute workflow\n */\n private async processWithWorkflow(message: string): Promise<ChatEntry[]> {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: message,\n timestamp: new Date(),\n };\n this.chatHistory.push(userEntry);\n this.logEntry(userEntry);\n this.messages.push({ role: \"user\", content: message });\n\n try {\n // Load context pack for better recommendations\n const contextPack = await this.loadContextPack();\n\n // Initialize workflow services\n const workflowService = new ResearchRecommendService(this);\n\n const request = {\n userTask: message,\n context: contextPack ? 'Project context loaded' : undefined\n };\n\n console.log('🔍 Researching and analyzing...');\n\n // Phase 1: Research and get approval\n const { output, approval, revisions } = await workflowService.researchAndGetApproval(request, contextPack);\n\n if (!approval.approved) {\n // User rejected the plan\n const rejectionEntry: ChatEntry = {\n type: \"assistant\",\n content: approval.revised\n ? `Plan revised ${revisions} time(s) but ultimately rejected by user.`\n : \"Plan rejected by user.\",\n timestamp: new Date(),\n };\n this.chatHistory.push(rejectionEntry);\n return [userEntry, rejectionEntry];\n }\n\n console.log('✅ Plan approved. Executing...');\n\n // Phase 2: Execute the approved plan\n const orchestrator = new ExecutionOrchestrator(this);\n const executionResult = await orchestrator.executeWithRecovery(output.plan, workflowService, request);\n\n // Convert execution results to chat entries\n return this.workflowResultToChatEntries(userEntry, output, approval, executionResult);\n\n } catch (error: any) {\n console.error('[Workflow] Failed:', error);\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Workflow failed: ${error.message}`,\n timestamp: new Date(),\n };\n this.chatHistory.push(errorEntry);\n return [userEntry, errorEntry];\n }\n }\n\n /**\n * Standard processing for simple queries\n */\n private async processStandard(message: string): Promise<ChatEntry[]> {\n // Add user message to conversation\n const userEntry: ChatEntry = {\n type: \"user\",\n content: message,\n timestamp: new Date(),\n };\n this.chatHistory.push(userEntry);\n this.logEntry(userEntry);\n this.messages.push({ role: \"user\", content: message });\n\n const newEntries: ChatEntry[] = [userEntry];\n const maxToolRounds = this.maxToolRounds; // Prevent infinite loops\n let toolRounds = 0;\n\n try {\n const tools = await getAllGrokTools();\n let currentResponse = await this.grokClient.chat(\n this.messages,\n tools,\n undefined,\n this.isGrokModel() && this.shouldUseSearchFor(message)\n ? { search_parameters: { mode: \"auto\" } }\n : { search_parameters: { mode: \"off\" } }\n );\n\n // Agent loop - continue until no more tool calls or max rounds reached\n while (toolRounds < maxToolRounds) {\n const assistantMessage = currentResponse.choices[0]?.message;\n\n if (!assistantMessage) {\n throw new Error(\"No response from Grok\");\n }\n\n // Handle tool calls\n if (\n assistantMessage.tool_calls &&\n assistantMessage.tool_calls.length > 0\n ) {\n toolRounds++;\n\n // Add assistant message with tool calls\n const assistantEntry: ChatEntry = {\n type: \"assistant\",\n content: assistantMessage.content || \"Using tools to help you...\",\n timestamp: new Date(),\n toolCalls: assistantMessage.tool_calls,\n };\n this.chatHistory.push(assistantEntry);\n this.logEntry(assistantEntry);\n newEntries.push(assistantEntry);\n\n // Add assistant message to conversation\n this.messages.push({\n role: \"assistant\",\n content: assistantMessage.content || \"\",\n tool_calls: assistantMessage.tool_calls,\n } as any);\n\n // Create initial tool call entries to show tools are being executed\n assistantMessage.tool_calls.forEach((toolCall) => {\n const toolCallEntry: ChatEntry = {\n type: \"tool_call\",\n content: \"Executing...\",\n timestamp: new Date(),\n toolCall: toolCall,\n };\n this.chatHistory.push(toolCallEntry);\n newEntries.push(toolCallEntry);\n });\n\n // Execute tool calls and update the entries\n for (const toolCall of assistantMessage.tool_calls) {\n const result = await this.executeTool(toolCall);\n\n // Update the existing tool_call entry with the result\n const entryIndex = this.chatHistory.findIndex(\n (entry) =>\n entry.type === \"tool_call\" && entry.toolCall?.id === toolCall.id\n );\n\n if (entryIndex !== -1) {\n const updatedEntry: ChatEntry = {\n ...this.chatHistory[entryIndex],\n type: \"tool_result\",\n content: result.success\n ? result.output || \"Success\"\n : result.error || \"Error occurred\",\n toolResult: result,\n };\n this.chatHistory[entryIndex] = updatedEntry;\n\n // Also update in newEntries for return value\n const newEntryIndex = newEntries.findIndex(\n (entry) =>\n entry.type === \"tool_call\" &&\n entry.toolCall?.id === toolCall.id\n );\n if (newEntryIndex !== -1) {\n newEntries[newEntryIndex] = updatedEntry;\n }\n }\n\n // Add tool result to messages with proper format (needed for AI context)\n this.messages.push({\n role: \"tool\",\n content: result.success\n ? result.output || \"Success\"\n : result.error || \"Error\",\n tool_call_id: toolCall.id,\n });\n }\n\n // Get next response - this might contain more tool calls\n currentResponse = await this.grokClient.chat(\n this.messages,\n tools,\n undefined,\n this.isGrokModel() && this.shouldUseSearchFor(message)\n ? { search_parameters: { mode: \"auto\" } }\n : { search_parameters: { mode: \"off\" } }\n );\n } else {\n // No more tool calls, add final response\n const finalEntry: ChatEntry = {\n type: \"assistant\",\n content:\n assistantMessage.content ||\n \"I understand, but I don't have a specific response.\",\n timestamp: new Date(),\n };\n this.chatHistory.push(finalEntry);\n this.messages.push({\n role: \"assistant\",\n content: assistantMessage.content || \"\",\n });\n newEntries.push(finalEntry);\n break; // Exit the loop\n }\n }\n\n if (toolRounds >= maxToolRounds) {\n const warningEntry: ChatEntry = {\n type: \"assistant\",\n content:\n \"Maximum tool execution rounds reached. Stopping to prevent infinite loops.\",\n timestamp: new Date(),\n };\n this.chatHistory.push(warningEntry);\n newEntries.push(warningEntry);\n }\n\n return newEntries;\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Sorry, I encountered an error: ${error.message}`,\n timestamp: new Date(),\n };\n this.chatHistory.push(errorEntry);\n return [userEntry, errorEntry];\n }\n }\n\n private messageReducer(previous: any, item: any): any {\n const reduce = (acc: any, delta: any) => {\n acc = { ...acc };\n for (const [key, value] of Object.entries(delta)) {\n if (acc[key] === undefined || acc[key] === null) {\n acc[key] = value;\n // Clean up index properties from tool calls\n if (Array.isArray(acc[key])) {\n for (const arr of acc[key]) {\n delete arr.index;\n }\n }\n } else if (typeof acc[key] === \"string\" && typeof value === \"string\") {\n (acc[key] as string) += value;\n } else if (Array.isArray(acc[key]) && Array.isArray(value)) {\n const accArray = acc[key] as any[];\n for (let i = 0; i < value.length; i++) {\n if (!accArray[i]) accArray[i] = {};\n accArray[i] = reduce(accArray[i], value[i]);\n }\n } else if (typeof acc[key] === \"object\" && typeof value === \"object\") {\n acc[key] = reduce(acc[key], value);\n }\n }\n return acc;\n };\n\n return reduce(previous, item.choices[0]?.delta || {});\n }\n\n async *processUserMessageStream(\n message: string\n ): AsyncGenerator<StreamingChunk, void, unknown> {\n // Create new abort controller for this request\n this.abortController = new AbortController();\n\n // Add user message to conversation\n const userEntry: ChatEntry = {\n type: \"user\",\n content: message,\n timestamp: new Date(),\n };\n this.chatHistory.push(userEntry);\n this.messages.push({ role: \"user\", content: message });\n\n // Calculate input tokens\n let inputTokens = this.tokenCounter.countMessageTokens(\n this.messages as any\n );\n yield {\n type: \"token_count\",\n tokenCount: inputTokens,\n };\n\n const maxToolRounds = this.maxToolRounds; // Prevent infinite loops\n let toolRounds = 0;\n let totalOutputTokens = 0;\n let lastTokenUpdate = 0;\n\n try {\n // Agent loop - continue until no more tool calls or max rounds reached\n while (toolRounds < maxToolRounds) {\n // Check if operation was cancelled\n if (this.abortController?.signal.aborted) {\n yield {\n type: \"content\",\n content: \"\\n\\n[Operation cancelled by user]\",\n };\n yield { type: \"done\" };\n return;\n }\n\n // Enforce global rate limit\n const now = Date.now();\n const timeSinceLastRequest = now - this.lastRequestTime;\n if (timeSinceLastRequest < this.minRequestInterval) {\n const delay = this.minRequestInterval - timeSinceLastRequest;\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n this.lastRequestTime = Date.now();\n\n // Stream response and accumulate\n const tools = await getAllGrokTools();\n const stream = this.grokClient.chatStream(\n this.messages,\n tools,\n undefined,\n this.isGrokModel() && this.shouldUseSearchFor(message)\n ? { search_parameters: { mode: \"auto\" } }\n : { search_parameters: { mode: \"off\" } },\n this.abortController?.signal\n );\n let accumulatedMessage: any = {};\n let accumulatedContent = \"\";\n let toolCallsYielded = false;\n\n for await (const chunk of stream) {\n // Check for cancellation in the streaming loop\n if (this.abortController?.signal.aborted) {\n yield {\n type: \"content\",\n content: \"\\n\\n[Operation cancelled by user]\",\n };\n yield { type: \"done\" };\n return;\n }\n\n if (!chunk.choices?.[0]) continue;\n\n // Accumulate the message using reducer\n accumulatedMessage = this.messageReducer(accumulatedMessage, chunk);\n\n // Check for tool calls - yield when we have complete tool calls with function names\n if (!toolCallsYielded && accumulatedMessage.tool_calls?.length > 0) {\n // Check if we have at least one complete tool call with a function name\n const hasCompleteTool = accumulatedMessage.tool_calls.some(\n (tc: any) => tc.function?.name\n );\n if (hasCompleteTool) {\n yield {\n type: \"tool_calls\",\n toolCalls: accumulatedMessage.tool_calls,\n };\n toolCallsYielded = true;\n }\n }\n\n // Stream content as it comes\n if (chunk.choices[0].delta?.content) {\n accumulatedContent += chunk.choices[0].delta.content;\n\n // Update token count in real-time including accumulated content and any tool calls\n const currentOutputTokens =\n this.tokenCounter.estimateStreamingTokens(accumulatedContent) +\n (accumulatedMessage.tool_calls\n ? this.tokenCounter.countTokens(\n JSON.stringify(accumulatedMessage.tool_calls)\n )\n : 0);\n totalOutputTokens = currentOutputTokens;\n\n yield {\n type: \"content\",\n content: chunk.choices[0].delta.content,\n };\n\n // Emit token count update\n const now = Date.now();\n if (now - lastTokenUpdate > 250) {\n lastTokenUpdate = now;\n yield {\n type: \"token_count\",\n tokenCount: inputTokens + totalOutputTokens,\n };\n }\n }\n }\n\n // Add assistant entry to history\n const assistantEntry: ChatEntry = {\n type: \"assistant\",\n content: accumulatedMessage.content || \"Using tools to help you...\",\n timestamp: new Date(),\n toolCalls: accumulatedMessage.tool_calls || undefined,\n };\n this.chatHistory.push(assistantEntry);\n\n // Add accumulated message to conversation\n this.messages.push({\n role: \"assistant\",\n content: accumulatedMessage.content || \"\",\n tool_calls: accumulatedMessage.tool_calls,\n } as any);\n\n // Handle tool calls if present\n if (accumulatedMessage.tool_calls?.length > 0) {\n toolRounds++;\n\n // Only yield tool_calls if we haven't already yielded them during streaming\n if (!toolCallsYielded) {\n yield {\n type: \"tool_calls\",\n toolCalls: accumulatedMessage.tool_calls,\n };\n }\n\n // Execute tools with concurrency limit\n const toolCalls = accumulatedMessage.tool_calls;\n for (let i = 0; i < toolCalls.length; i += this.maxConcurrentToolCalls) {\n // Enforce minimum request interval between tool batches\n const now = Date.now();\n const timeSinceLastExecution = now - this.lastToolExecutionTime;\n if (timeSinceLastExecution < this.minRequestInterval) {\n const delay = this.minRequestInterval - timeSinceLastExecution;\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n\n const batch = toolCalls.slice(i, i + this.maxConcurrentToolCalls);\n const batchPromises = batch.map(async (toolCall: GrokToolCall) => {\n // Check for cancellation before executing each tool\n if (this.abortController?.signal.aborted) {\n return null;\n }\n\n const result = await this.executeTool(toolCall);\n\n const toolResultEntry: ChatEntry = {\n type: \"tool_result\",\n content: result.success\n ? result.output || \"Success\"\n : result.error || \"Error occurred\",\n timestamp: new Date(),\n toolCall: toolCall,\n toolResult: result,\n };\n this.chatHistory.push(toolResultEntry);\n\n // Add tool result with proper format (needed for AI context)\n this.messages.push({\n role: \"tool\",\n content: result.success\n ? result.output || \"Success\"\n : result.error || \"Error\",\n tool_call_id: toolCall.id,\n });\n\n return { toolCall, result, entry: toolResultEntry };\n });\n\n const batchResults = await Promise.all(batchPromises);\n this.lastToolExecutionTime = Date.now();\n if (batchResults.includes(null)) {\n // Cancelled\n yield {\n type: \"content\",\n content: \"\\n\\n[Operation cancelled by user]\",\n };\n yield { type: \"done\" };\n return;\n }\n\n // Yield results after batch completes\n for (const { toolCall, result } of batchResults) {\n yield {\n type: \"tool_result\",\n toolCall,\n toolResult: result,\n };\n }\n }\n\n // Update token count after processing all tool calls to include tool results\n inputTokens = this.tokenCounter.countMessageTokens(\n this.messages as any\n );\n // Final token update after tools processed\n yield {\n type: \"token_count\",\n tokenCount: inputTokens + totalOutputTokens,\n };\n\n // Continue the loop to get the next response (which might have more tool calls)\n } else {\n // No tool calls, we're done\n break;\n }\n }\n\n if (toolRounds >= maxToolRounds) {\n yield {\n type: \"content\",\n content:\n \"\\n\\nMaximum tool execution rounds reached. Stopping to prevent infinite loops.\",\n };\n }\n\n yield { type: \"done\" };\n } catch (error: any) {\n // Check if this was a cancellation\n if (this.abortController?.signal.aborted) {\n yield {\n type: \"content\",\n content: \"\\n\\n[Operation cancelled by user]\",\n };\n yield { type: \"done\" };\n return;\n }\n\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Sorry, I encountered an error: ${error.message}`,\n timestamp: new Date(),\n };\n this.chatHistory.push(errorEntry);\n yield {\n type: \"content\",\n content: errorEntry.content,\n };\n yield { type: \"done\" };\n } finally {\n // Clean up abort controller\n this.abortController = null;\n }\n }\n\n private async executeTool(toolCall: GrokToolCall): Promise<ToolResult> {\n try {\n const args = JSON.parse(toolCall.function.arguments);\n\n // Check if confirmation is required for file operations and bash commands\n const settingsManager = getSettingsManager();\n const requireConfirmation = settingsManager.getUserSetting('requireConfirmation') ?? true;\n\n if (requireConfirmation) {\n const needsConfirmation = ['create_file', 'str_replace_editor', 'bash'].includes(toolCall.function.name);\n if (needsConfirmation) {\n const confirmationResult = await this.confirmationTool.requestConfirmation({\n operation: toolCall.function.name,\n filename: args.path || args.command || 'unknown',\n description: `Execute ${toolCall.function.name} operation`,\n });\n if (!confirmationResult.success) {\n return {\n success: false,\n error: confirmationResult.error || 'Operation cancelled by user',\n };\n }\n }\n }\n\n switch (toolCall.function.name) {\n case \"view_file\":\n try {\n const range: [number, number] | undefined =\n args.start_line && args.end_line\n ? [args.start_line, args.end_line]\n : undefined;\n return await this.textEditor.view(args.path, range);\n } catch (error: any) {\n console.warn(`view_file tool failed, falling back to bash: ${error.message}`);\n // Fallback to bash cat/head/tail\n const path = args.path;\n let command = `cat \"${path}\"`;\n if (args.start_line && args.end_line) {\n command = `sed -n '${args.start_line},${args.end_line}p' \"${path}\"`;\n }\n return await this.bash.execute(command);\n }\n\n case \"create_file\":\n try {\n return await this.textEditor.create(args.path, args.content);\n } catch (error: any) {\n console.warn(`create_file tool failed, falling back to bash: ${error.message}`);\n // Fallback to bash echo/redirect\n const command = `cat > \"${args.path}\" << 'EOF'\\n${args.content}\\nEOF`;\n return await this.bash.execute(command);\n }\n\n case \"str_replace_editor\":\n try {\n return await this.textEditor.strReplace(\n args.path,\n args.old_str,\n args.new_str,\n args.replace_all\n );\n } catch (error: any) {\n console.warn(`str_replace_editor tool failed, falling back to bash: ${error.message}`);\n // Fallback to bash sed for replacement\n const escapedOld = args.old_str.replace(/[\\/&]/g, '\\\\$&');\n const escapedNew = args.new_str.replace(/[\\/&]/g, '\\\\$&');\n const sedCommand = args.replace_all\n ? `sed -i 's/${escapedOld}/${escapedNew}/g' \"${args.path}\"`\n : `sed -i '0,/${escapedOld}/s/${escapedOld}/${escapedNew}/' \"${args.path}\"`;\n return await this.bash.execute(sedCommand);\n }\n\n case \"edit_file\":\n if (!this.morphEditor) {\n return {\n success: false,\n error:\n \"Morph Fast Apply not available. Please set MORPH_API_KEY environment variable to use this feature.\",\n };\n }\n return await this.morphEditor.editFile(\n args.target_file,\n args.instructions,\n args.code_edit\n );\n\n case \"bash\":\n return await this.bash.execute(args.command);\n\n case \"create_todo_list\":\n return await this.todoTool.createTodoList(args.todos);\n\n case \"update_todo_list\":\n return await this.todoTool.updateTodoList(args.updates);\n\n case \"search\":\n try {\n return await this.search.search(args.query, {\n searchType: args.search_type,\n includePattern: args.include_pattern,\n excludePattern: args.exclude_pattern,\n caseSensitive: args.case_sensitive,\n wholeWord: args.whole_word,\n regex: args.regex,\n maxResults: args.max_results,\n fileTypes: args.file_types,\n includeHidden: args.include_hidden,\n });\n } catch (error: any) {\n console.warn(`search tool failed, falling back to bash: ${error.message}`);\n // Fallback to bash grep/find\n let command = `grep -r \"${args.query}\" .`;\n if (args.include_pattern) {\n command += ` --include=\"${args.include_pattern}\"`;\n }\n if (args.exclude_pattern) {\n command += ` --exclude=\"${args.exclude_pattern}\"`;\n }\n return await this.bash.execute(command);\n }\n\n // Advanced Tools\n case \"multi_file_edit\":\n switch (args.operation) {\n case \"begin_transaction\":\n return await this.multiFileEditor.beginTransaction(args.description);\n case \"add_operations\":\n return await this.multiFileEditor.addOperations(args.operations);\n case \"preview_transaction\":\n return await this.multiFileEditor.previewTransaction();\n case \"commit_transaction\":\n return await this.multiFileEditor.commitTransaction();\n case \"rollback_transaction\":\n return await this.multiFileEditor.rollbackTransaction(args.transaction_id);\n case \"execute_multi_file\":\n return await this.multiFileEditor.executeMultiFileOperation(args.operations, args.description);\n default:\n return { success: false, error: `Unknown multi_file_edit operation: ${args.operation}` };\n }\n\n case \"advanced_search\":\n switch (args.operation) {\n case \"search\":\n return await this.advancedSearch.search(args.path, args.options);\n case \"search_replace\":\n return await this.advancedSearch.searchAndReplace(args.path, args.options);\n case \"find_files\":\n return await this.advancedSearch.findFiles(args.path, args.pattern, args.options);\n default:\n return { success: false, error: `Unknown advanced_search operation: ${args.operation}` };\n }\n\n case \"file_tree_ops\":\n switch (args.operation) {\n case \"generate_tree\":\n return await this.fileTreeOps.generateTree(args.path, args.options);\n case \"bulk_operations\":\n return await this.fileTreeOps.bulkOperations(args.operations);\n case \"copy_structure\":\n return await this.fileTreeOps.copyStructure(args.source, args.destination, args.options);\n case \"organize_files\":\n return await this.fileTreeOps.organizeFiles(args.source, args.organization_type, args.destination);\n case \"cleanup_empty_dirs\":\n return await this.fileTreeOps.cleanupEmptyDirectories(args.path);\n default:\n return { success: false, error: `Unknown file_tree_ops operation: ${args.operation}` };\n }\n\n case \"code_analysis\":\n switch (args.operation) {\n case \"analyze\":\n return await this.codeAwareEditor.analyzeCode(args.file_path);\n case \"refactor\":\n return await this.codeAwareEditor.refactor(args.file_path, args.refactor_operation);\n case \"smart_insert\":\n return await this.codeAwareEditor.smartInsert(args.file_path, args.code, args.location, args.target);\n case \"format_code\":\n return await this.codeAwareEditor.formatCode(args.file_path, args.options);\n case \"add_imports\":\n return await this.codeAwareEditor.addMissingImports(args.file_path, args.symbols);\n default:\n return { success: false, error: `Unknown code_analysis operation: ${args.operation}` };\n }\n\n case \"operation_history\":\n switch (args.operation) {\n case \"show_history\":\n return await this.operationHistory.showHistory(args.limit);\n case \"undo\":\n return await this.operationHistory.undo();\n case \"redo\":\n return await this.operationHistory.redo();\n case \"goto_point\":\n return await this.operationHistory.goToHistoryPoint(args.entry_id);\n case \"clear_history\":\n return await this.operationHistory.clearHistory();\n default:\n return { success: false, error: `Unknown operation_history operation: ${args.operation}` };\n }\n\n case \"ast_parser\":\n return await this.astParser.execute(args);\n\n case \"symbol_search\":\n return await this.symbolSearch.execute(args);\n\n case \"dependency_analyzer\":\n return await this.dependencyAnalyzer.execute(args);\n\n case \"code_context\":\n return await this.codeContext.execute(args);\n\n case \"refactoring_assistant\":\n return await this.refactoringAssistant.execute(args);\n\n default:\n // Check if this is an MCP tool\n if (toolCall.function.name.startsWith(\"mcp__\")) {\n return await this.executeMCPTool(toolCall);\n }\n\n return {\n success: false,\n error: `Unknown tool: ${toolCall.function.name}`,\n };\n }\n } catch (error: any) {\n return {\n success: false,\n error: `Tool execution error: ${error.message}`,\n };\n }\n }\n\n private async executeMCPTool(toolCall: GrokToolCall): Promise<ToolResult> {\n try {\n const args = JSON.parse(toolCall.function.arguments);\n const mcpManager = getMCPManager();\n\n const result = await mcpManager.callTool(toolCall.function.name, args);\n\n if (result.isError) {\n return {\n success: false,\n error: (result.content[0] as any)?.text || \"MCP tool error\",\n };\n }\n\n // Extract content from result\n const output = result.content\n .map((item) => {\n if (item.type === \"text\") {\n return item.text;\n } else if (item.type === \"resource\") {\n return `Resource: ${item.resource?.uri || \"Unknown\"}`;\n }\n return String(item);\n })\n .join(\"\\n\");\n\n return {\n success: true,\n output: output || \"Success\",\n };\n } catch (error: any) {\n return {\n success: false,\n error: `MCP tool execution error: ${error.message}`,\n };\n }\n }\n\n getChatHistory(): ChatEntry[] {\n return [...this.chatHistory];\n }\n\n saveSessionLog(): void {\n try {\n const sessionDir = path.join(require('os').homedir(), '.grok');\n if (!fs.existsSync(sessionDir)) {\n fs.mkdirSync(sessionDir, { recursive: true });\n }\n const sessionFile = path.join(sessionDir, 'session.log');\n const logLines = this.chatHistory.map(entry => JSON.stringify(entry)).join('\\n') + '\\n';\n fs.writeFileSync(sessionFile, logLines);\n } catch (error) {\n // Silently ignore logging errors to not disrupt the app\n console.warn('Failed to save session log:', error);\n }\n }\n\n getCurrentDirectory(): string {\n return this.bash.getCurrentDirectory();\n }\n\n async executeBashCommand(command: string): Promise<ToolResult> {\n return await this.bash.execute(command);\n }\n\n getCurrentModel(): string {\n return this.grokClient.getCurrentModel();\n }\n\n setModel(model: string): void {\n this.grokClient.setModel(model);\n // Update token counter for new model\n this.tokenCounter.dispose();\n this.tokenCounter = createTokenCounter(model);\n }\n\n abortCurrentOperation(): void {\n if (this.abortController) {\n this.abortController.abort();\n }\n }\n\n getMessageCount(): number {\n return this.chatHistory.length;\n }\n\n getSessionTokenCount(): number {\n return this.tokenCounter.countMessageTokens(this.messages as any);\n }\n\n private logEntry(entry: ChatEntry): void {\n try {\n // Ensure directory exists\n const dir = path.dirname(this.sessionLogPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n // Log as JSON line\n const logLine = JSON.stringify({\n type: entry.type,\n content: entry.content,\n timestamp: entry.timestamp.toISOString(),\n toolCallId: entry.toolCall?.id,\n toolCallsCount: entry.toolCalls?.length,\n }) + '\\n';\n\n fs.appendFileSync(this.sessionLogPath, logLine);\n } catch (error) {\n // Silently ignore logging errors to avoid disrupting the app\n console.warn('Failed to log session entry:', error);\n }\n }\n\n /**\n * Load .agent context pack for enhanced recommendations\n */\n private async loadContextPack(): Promise<ContextPack | undefined> {\n try {\n const contextLoader = await import('../utils/context-loader.js');\n return await contextLoader.loadContext('.agent');\n } catch (error) {\n console.warn('[Workflow] Failed to load context pack:', error);\n return undefined;\n }\n }\n\n /**\n * Convert workflow results to chat entries for display\n */\n private workflowResultToChatEntries(\n userEntry: ChatEntry,\n output: any,\n approval: any,\n executionResult: any\n ): ChatEntry[] {\n const entries: ChatEntry[] = [userEntry];\n\n // Add workflow summary entry\n const summaryEntry: ChatEntry = {\n type: \"assistant\",\n content: `Workflow completed: ${executionResult?.success ? '✅ Success' : '❌ Failed'}\\n\\n${output?.plan?.summary || 'Task completed'}`,\n timestamp: new Date(),\n };\n entries.push(summaryEntry);\n this.chatHistory.push(summaryEntry);\n\n // Add execution details if available\n if (executionResult?.executionPlan) {\n const detailsEntry: ChatEntry = {\n type: \"assistant\",\n content: `Executed ${executionResult.executionPlan.completedSteps}/${executionResult.executionPlan.totalSteps} tasks successfully.`,\n timestamp: new Date(),\n };\n entries.push(detailsEntry);\n this.chatHistory.push(detailsEntry);\n }\n\n return entries;\n }\n}\n","/**\n * Text manipulation utilities for terminal input handling\n * Inspired by Gemini CLI's text processing capabilities\n */\n\nexport interface TextPosition {\n index: number;\n line: number;\n column: number;\n}\n\nexport interface TextSelection {\n start: number;\n end: number;\n}\n\n/**\n * Check if a character is a word boundary\n */\nexport function isWordBoundary(char: string | undefined): boolean {\n if (!char) return true;\n return /\\s/.test(char) || /[^\\w]/.test(char);\n}\n\n/**\n * Find the start of the current word at the given position\n */\nexport function findWordStart(text: string, position: number): number {\n if (position <= 0) return 0;\n \n let pos = position - 1;\n while (pos > 0 && !isWordBoundary(text[pos])) {\n pos--;\n }\n \n // If we stopped at a word boundary, move forward to the actual word start\n if (pos > 0 && isWordBoundary(text[pos])) {\n pos++;\n }\n \n return pos;\n}\n\n/**\n * Find the end of the current word at the given position\n */\nexport function findWordEnd(text: string, position: number): number {\n if (position >= text.length) return text.length;\n \n let pos = position;\n while (pos < text.length && !isWordBoundary(text[pos])) {\n pos++;\n }\n \n return pos;\n}\n\n/**\n * Move cursor to the previous word boundary\n */\nexport function moveToPreviousWord(text: string, position: number): number {\n if (position <= 0) return 0;\n \n let pos = position - 1;\n \n // Skip whitespace\n while (pos > 0 && isWordBoundary(text[pos])) {\n pos--;\n }\n \n // Find start of the word\n while (pos > 0 && !isWordBoundary(text[pos - 1])) {\n pos--;\n }\n \n return pos;\n}\n\n/**\n * Move cursor to the next word boundary\n */\nexport function moveToNextWord(text: string, position: number): number {\n if (position >= text.length) return text.length;\n \n let pos = position;\n \n // Skip current word\n while (pos < text.length && !isWordBoundary(text[pos])) {\n pos++;\n }\n \n // Skip whitespace\n while (pos < text.length && isWordBoundary(text[pos])) {\n pos++;\n }\n \n return pos;\n}\n\n/**\n * Delete the word before the cursor\n */\nexport function deleteWordBefore(text: string, position: number): { text: string; position: number } {\n const wordStart = moveToPreviousWord(text, position);\n const newText = text.slice(0, wordStart) + text.slice(position);\n \n return {\n text: newText,\n position: wordStart,\n };\n}\n\n/**\n * Delete the word after the cursor\n */\nexport function deleteWordAfter(text: string, position: number): { text: string; position: number } {\n const wordEnd = moveToNextWord(text, position);\n const newText = text.slice(0, position) + text.slice(wordEnd);\n \n return {\n text: newText,\n position,\n };\n}\n\n/**\n * Get the current line and column from text position\n */\nexport function getTextPosition(text: string, index: number): TextPosition {\n const lines = text.slice(0, index).split('\\n');\n return {\n index,\n line: lines.length - 1,\n column: lines[lines.length - 1].length,\n };\n}\n\n/**\n * Move to the beginning of the current line\n */\nexport function moveToLineStart(text: string, position: number): number {\n const beforeCursor = text.slice(0, position);\n const lastNewlineIndex = beforeCursor.lastIndexOf('\\n');\n return lastNewlineIndex === -1 ? 0 : lastNewlineIndex + 1;\n}\n\n/**\n * Move to the end of the current line\n */\nexport function moveToLineEnd(text: string, position: number): number {\n const afterCursor = text.slice(position);\n const nextNewlineIndex = afterCursor.indexOf('\\n');\n return nextNewlineIndex === -1 ? text.length : position + nextNewlineIndex;\n}\n\n/**\n * Handle proper Unicode-aware character deletion\n */\nexport function deleteCharBefore(text: string, position: number): { text: string; position: number } {\n if (position <= 0) {\n return { text, position };\n }\n \n // Handle surrogate pairs and combining characters\n let deleteCount = 1;\n const charBefore = text.charAt(position - 1);\n \n // Check for high surrogate (first part of surrogate pair)\n if (position >= 2) {\n const charBeforeBefore = text.charAt(position - 2);\n if (charBeforeBefore >= '\\uD800' && charBeforeBefore <= '\\uDBFF' && \n charBefore >= '\\uDC00' && charBefore <= '\\uDFFF') {\n deleteCount = 2;\n }\n }\n \n const newText = text.slice(0, position - deleteCount) + text.slice(position);\n return {\n text: newText,\n position: position - deleteCount,\n };\n}\n\n/**\n * Handle proper Unicode-aware character deletion forward\n */\nexport function deleteCharAfter(text: string, position: number): { text: string; position: number } {\n if (position >= text.length) {\n return { text, position };\n }\n \n // Handle surrogate pairs and combining characters\n let deleteCount = 1;\n const charAfter = text.charAt(position);\n \n // Check for high surrogate (first part of surrogate pair)\n if (position + 1 < text.length) {\n const charAfterAfter = text.charAt(position + 1);\n if (charAfter >= '\\uD800' && charAfter <= '\\uDBFF' && \n charAfterAfter >= '\\uDC00' && charAfterAfter <= '\\uDFFF') {\n deleteCount = 2;\n }\n }\n \n const newText = text.slice(0, position) + text.slice(position + deleteCount);\n return {\n text: newText,\n position,\n };\n}\n\n/**\n * Insert text at the given position with proper Unicode handling\n */\nexport function insertText(text: string, position: number, insert: string): { text: string; position: number } {\n const newText = text.slice(0, position) + insert + text.slice(position);\n return {\n text: newText,\n position: position + insert.length,\n };\n}","import { useState, useCallback } from \"react\";\n\nexport interface InputHistoryHook {\n addToHistory: (input: string) => void;\n navigateHistory: (direction: \"up\" | \"down\") => string | null;\n getCurrentHistoryIndex: () => number;\n resetHistory: () => void;\n isNavigatingHistory: () => boolean;\n setOriginalInput: (input: string) => void;\n}\n\nexport function useInputHistory(): InputHistoryHook {\n const [history, setHistory] = useState<string[]>([]);\n const [currentIndex, setCurrentIndex] = useState(-1);\n const [originalInput, setOriginalInput] = useState(\"\");\n\n const addToHistory = useCallback((input: string) => {\n if (input.trim() && !history.includes(input.trim())) {\n setHistory(prev => [...prev, input.trim()]);\n }\n setCurrentIndex(-1);\n setOriginalInput(\"\");\n }, [history]);\n\n const navigateHistory = useCallback((direction: \"up\" | \"down\"): string | null => {\n if (history.length === 0) return null;\n\n let newIndex: number;\n \n if (direction === \"up\") {\n if (currentIndex === -1) {\n newIndex = history.length - 1;\n } else {\n newIndex = Math.max(0, currentIndex - 1);\n }\n } else {\n if (currentIndex === -1) {\n return null;\n } else if (currentIndex === history.length - 1) {\n newIndex = -1;\n return originalInput;\n } else {\n newIndex = Math.min(history.length - 1, currentIndex + 1);\n }\n }\n\n setCurrentIndex(newIndex);\n return newIndex === -1 ? originalInput : history[newIndex];\n }, [history, currentIndex, originalInput]);\n\n const getCurrentHistoryIndex = useCallback(() => currentIndex, [currentIndex]);\n \n const resetHistory = useCallback(() => {\n setHistory([]);\n setCurrentIndex(-1);\n setOriginalInput(\"\");\n }, []);\n\n const isNavigatingHistory = useCallback(() => currentIndex !== -1, [currentIndex]);\n\n const setOriginalInputCallback = useCallback((input: string) => {\n if (currentIndex === -1) {\n setOriginalInput(input);\n }\n }, [currentIndex]);\n\n return {\n addToHistory,\n navigateHistory,\n getCurrentHistoryIndex,\n resetHistory,\n isNavigatingHistory,\n setOriginalInput: setOriginalInputCallback,\n };\n}","/**\n * Paste Detection Service\n * \n * Detects when large amounts of text are pasted into the input and provides\n * summarization functionality for cleaner UI display while preserving full\n * content for AI processing.\n */\n\nexport interface PasteEvent {\n content: string;\n lineCount: number;\n charCount: number;\n pasteNumber: number;\n summary: string;\n}\n\nexport interface PasteThresholds {\n lineThreshold: number;\n charThreshold: number;\n}\n\nexport class PasteDetectionService {\n private pasteCounter = 0;\n private thresholds: PasteThresholds;\n private debug = process.env.GROK_PASTE_DEBUG === 'true';\n\n constructor(thresholds?: Partial<PasteThresholds>) {\n this.thresholds = {\n lineThreshold: thresholds?.lineThreshold ?? this.getDefaultLineThreshold(),\n charThreshold: thresholds?.charThreshold ?? this.getDefaultCharThreshold(),\n };\n }\n\n /**\n * Detects if new content represents a paste operation that should be summarized\n */\n detectPaste(oldValue: string, newValue: string): PasteEvent | null {\n // Calculate what was added\n const added = this.getAddedContent(oldValue, newValue);\n \n if (this.debug) {\n console.log('🔍 Paste Detection Debug:', {\n addedLength: added?.length || 0,\n lineCount: added ? this.countLines(added) : 0,\n thresholds: this.thresholds,\n shouldSummarize: added ? this.shouldSummarize(added) : false\n });\n }\n \n if (!added || !this.shouldSummarize(added)) {\n return null;\n }\n\n // This looks like a paste that should be summarized\n this.pasteCounter++;\n \n return {\n content: added,\n lineCount: this.countLines(added),\n charCount: added.length,\n pasteNumber: this.pasteCounter,\n summary: this.createPasteSummary(added, this.pasteCounter)\n };\n }\n\n /**\n * Determines if content should be summarized based on thresholds\n */\n shouldSummarize(content: string): boolean {\n const lineCount = this.countLines(content);\n return lineCount > this.thresholds.lineThreshold || \n content.length > this.thresholds.charThreshold;\n }\n\n /**\n * Creates a paste summary in the format: [Pasted text #N +X lines]\n */\n createPasteSummary(content: string, pasteNumber: number): string {\n const lineCount = this.countLines(content);\n const pluralLines = lineCount === 1 ? 'line' : 'lines';\n return `[Pasted text #${pasteNumber} +${lineCount} ${pluralLines}]`;\n }\n\n /**\n * Resets the paste counter (useful for new sessions)\n */\n resetCounter(): void {\n this.pasteCounter = 0;\n }\n\n /**\n * Updates thresholds for paste detection\n */\n updateThresholds(thresholds: Partial<PasteThresholds>): void {\n this.thresholds = {\n ...this.thresholds,\n ...thresholds\n };\n }\n\n /**\n * Gets current paste counter value\n */\n getCurrentCounter(): number {\n return this.pasteCounter;\n }\n\n /**\n * Gets current thresholds\n */\n getThresholds(): PasteThresholds {\n return { ...this.thresholds };\n }\n\n /**\n * Extracts the content that was added between old and new values\n */\n private getAddedContent(oldValue: string, newValue: string): string {\n // Simple case: content was appended\n if (newValue.startsWith(oldValue)) {\n return newValue.slice(oldValue.length);\n }\n\n // More complex case: content was inserted somewhere\n // For now, we'll handle the simple append case which covers most paste scenarios\n // TODO: Handle insertion at cursor position for more complex scenarios\n return '';\n }\n\n /**\n * Counts the number of lines in content\n */\n private countLines(content: string): number {\n if (!content) return 0;\n return content.split('\\n').length;\n }\n\n /**\n * Gets default line threshold from environment or config\n */\n private getDefaultLineThreshold(): number {\n const envValue = process.env.GROK_PASTE_LINE_THRESHOLD;\n if (envValue) {\n const parsed = parseInt(envValue, 10);\n if (!isNaN(parsed) && parsed > 0) {\n return parsed;\n }\n }\n return 2; // Default: 2 lines (more sensitive like Claude Code)\n }\n\n /**\n * Gets default character threshold from environment or config\n */\n private getDefaultCharThreshold(): number {\n const envValue = process.env.GROK_PASTE_CHAR_THRESHOLD;\n if (envValue) {\n const parsed = parseInt(envValue, 10);\n if (!isNaN(parsed) && parsed > 0) {\n return parsed;\n }\n }\n return 50; // Default: 50 characters (more sensitive like Claude Code)\n }\n}\n\n/**\n * Global paste detection service instance\n */\nlet globalPasteService: PasteDetectionService | null = null;\n\n/**\n * Gets the global paste detection service instance\n */\nexport function getPasteDetectionService(): PasteDetectionService {\n if (!globalPasteService) {\n globalPasteService = new PasteDetectionService();\n }\n return globalPasteService;\n}\n\n/**\n * Resets the global paste detection service (useful for testing)\n */\nexport function resetPasteDetectionService(): void {\n globalPasteService = null;\n}","import { useState, useCallback, useRef } from \"react\";\nimport {\n deleteCharBefore,\n deleteCharAfter,\n deleteWordBefore,\n deleteWordAfter,\n insertText,\n moveToLineStart,\n moveToLineEnd,\n moveToPreviousWord,\n moveToNextWord,\n} from \"../utils/text-utils.js\";\nimport { useInputHistory } from \"./use-input-history.js\";\nimport { getPasteDetectionService, PasteEvent } from \"../services/paste-detection.js\";\n\nexport interface Key {\n name?: string;\n ctrl?: boolean;\n meta?: boolean;\n shift?: boolean;\n paste?: boolean;\n sequence?: string;\n upArrow?: boolean;\n downArrow?: boolean;\n leftArrow?: boolean;\n rightArrow?: boolean;\n return?: boolean;\n escape?: boolean;\n tab?: boolean;\n backspace?: boolean;\n delete?: boolean;\n}\n\nexport interface EnhancedInputHook {\n input: string;\n cursorPosition: number;\n isMultiline: boolean;\n setInput: (text: string) => void;\n setCursorPosition: (position: number) => void;\n clearInput: () => void;\n insertAtCursor: (text: string) => void;\n resetHistory: () => void;\n handleInput: (inputChar: string, key: Key) => void;\n}\n\ninterface UseEnhancedInputProps {\n onSubmit?: (text: string) => void;\n onEscape?: () => void;\n onSpecialKey?: (key: Key) => boolean; // Return true to prevent default handling\n onPasteDetected?: (pasteEvent: PasteEvent) => void; // Handle paste events\n disabled?: boolean;\n multiline?: boolean;\n}\n\nexport function useEnhancedInput({\n onSubmit,\n onEscape,\n onSpecialKey,\n onPasteDetected,\n disabled = false,\n multiline = false,\n}: UseEnhancedInputProps = {}): EnhancedInputHook {\n const [input, setInputState] = useState(\"\");\n const [cursorPosition, setCursorPositionState] = useState(0);\n const isMultilineRef = useRef(multiline);\n \n const {\n addToHistory,\n navigateHistory,\n resetHistory,\n setOriginalInput,\n isNavigatingHistory,\n } = useInputHistory();\n\n const setInput = useCallback((text: string) => {\n const previousInput = input;\n setInputState(text);\n setCursorPositionState(Math.min(text.length, cursorPosition));\n if (!isNavigatingHistory()) {\n setOriginalInput(text);\n }\n\n // Check for paste events\n if (onPasteDetected && text !== previousInput) {\n const pasteService = getPasteDetectionService();\n const pasteEvent = pasteService.detectPaste(previousInput, text);\n if (pasteEvent) {\n onPasteDetected(pasteEvent);\n }\n }\n }, [input, cursorPosition, isNavigatingHistory, setOriginalInput, onPasteDetected]);\n\n const setCursorPosition = useCallback((position: number) => {\n setCursorPositionState(Math.max(0, Math.min(input.length, position)));\n }, [input.length]);\n\n const clearInput = useCallback(() => {\n setInputState(\"\");\n setCursorPositionState(0);\n setOriginalInput(\"\");\n }, [setOriginalInput]);\n\n const insertAtCursor = useCallback((text: string) => {\n const result = insertText(input, cursorPosition, text);\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n }, [input, cursorPosition, setOriginalInput]);\n\n const handleSubmit = useCallback(() => {\n if (input.trim()) {\n addToHistory(input);\n onSubmit?.(input);\n clearInput();\n }\n }, [input, addToHistory, onSubmit, clearInput]);\n\n const handleInput = useCallback((inputChar: string, key: Key) => {\n if (disabled) return;\n\n // Handle Ctrl+C - check multiple ways it could be detected\n if ((key.ctrl && inputChar === \"c\") || inputChar === \"\\x03\") {\n setInputState(\"\");\n setCursorPositionState(0);\n setOriginalInput(\"\");\n return;\n }\n\n // Allow special key handler to override default behavior\n if (onSpecialKey?.(key)) {\n return;\n }\n\n // Handle Escape\n if (key.escape) {\n onEscape?.();\n return;\n }\n\n // Handle Enter/Return\n if (key.return) {\n if (multiline && key.shift) {\n // Shift+Enter in multiline mode inserts newline\n const result = insertText(input, cursorPosition, \"\\n\");\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n } else {\n handleSubmit();\n }\n return;\n }\n\n // Handle history navigation\n if ((key.upArrow || key.name === 'up') && !key.ctrl && !key.meta) {\n const historyInput = navigateHistory(\"up\");\n if (historyInput !== null) {\n setInputState(historyInput);\n setCursorPositionState(historyInput.length);\n }\n return;\n }\n\n if ((key.downArrow || key.name === 'down') && !key.ctrl && !key.meta) {\n const historyInput = navigateHistory(\"down\");\n if (historyInput !== null) {\n setInputState(historyInput);\n setCursorPositionState(historyInput.length);\n }\n return;\n }\n\n // Handle cursor movement - ignore meta flag for arrows as it's unreliable in terminals\n // Only do word movement if ctrl is pressed AND no arrow escape sequence is in inputChar\n if ((key.leftArrow || key.name === 'left') && key.ctrl && !inputChar.includes('[')) {\n const newPos = moveToPreviousWord(input, cursorPosition);\n setCursorPositionState(newPos);\n return;\n }\n\n if ((key.rightArrow || key.name === 'right') && key.ctrl && !inputChar.includes('[')) {\n const newPos = moveToNextWord(input, cursorPosition);\n setCursorPositionState(newPos);\n return;\n }\n\n // Handle regular cursor movement - single character (ignore meta flag)\n if (key.leftArrow || key.name === 'left') {\n const newPos = Math.max(0, cursorPosition - 1);\n setCursorPositionState(newPos);\n return;\n }\n\n if (key.rightArrow || key.name === 'right') {\n const newPos = Math.min(input.length, cursorPosition + 1);\n setCursorPositionState(newPos);\n return;\n }\n\n // Handle Home/End keys or Ctrl+A/E\n if ((key.ctrl && inputChar === \"a\") || key.name === \"home\") {\n setCursorPositionState(0); // Simple start of input\n return;\n }\n\n if ((key.ctrl && inputChar === \"e\") || key.name === \"end\") {\n setCursorPositionState(input.length); // Simple end of input\n return;\n }\n\n // Handle deletion - check multiple ways backspace might be detected\n // Backspace can be detected in different ways depending on terminal\n // In some terminals, backspace shows up as delete:true with empty inputChar\n const isBackspace = key.backspace || \n key.name === 'backspace' || \n inputChar === '\\b' || \n inputChar === '\\x7f' ||\n (key.delete && inputChar === '' && !key.shift);\n \n if (isBackspace) {\n if (key.ctrl || key.meta) {\n // Ctrl/Cmd + Backspace: Delete word before cursor\n const result = deleteWordBefore(input, cursorPosition);\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n } else {\n // Regular backspace\n const result = deleteCharBefore(input, cursorPosition);\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n }\n return;\n }\n\n // Handle forward delete (Del key) - but not if it was already handled as backspace above\n if ((key.delete && inputChar !== '') || (key.ctrl && inputChar === \"d\")) {\n if (key.ctrl || key.meta) {\n // Ctrl/Cmd + Delete: Delete word after cursor\n const result = deleteWordAfter(input, cursorPosition);\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n } else {\n // Regular delete\n const result = deleteCharAfter(input, cursorPosition);\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n }\n return;\n }\n\n // Handle Ctrl+K: Delete from cursor to end of line\n if (key.ctrl && inputChar === \"k\") {\n const lineEnd = moveToLineEnd(input, cursorPosition);\n const newText = input.slice(0, cursorPosition) + input.slice(lineEnd);\n setInputState(newText);\n setOriginalInput(newText);\n return;\n }\n\n // Handle Ctrl+U: Delete from cursor to start of line\n if (key.ctrl && inputChar === \"u\") {\n const lineStart = moveToLineStart(input, cursorPosition);\n const newText = input.slice(0, lineStart) + input.slice(cursorPosition);\n setInputState(newText);\n setCursorPositionState(lineStart);\n setOriginalInput(newText);\n return;\n }\n\n // Handle Ctrl+W: Delete word before cursor\n if (key.ctrl && inputChar === \"w\") {\n const result = deleteWordBefore(input, cursorPosition);\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n return;\n }\n\n // Handle Ctrl+X: Clear entire input\n if (key.ctrl && inputChar === \"x\") {\n setInputState(\"\");\n setCursorPositionState(0);\n setOriginalInput(\"\");\n return;\n }\n\n // Handle regular character input\n if (inputChar && !key.ctrl && !key.meta) {\n const previousInput = input;\n const result = insertText(input, cursorPosition, inputChar);\n setInputState(result.text);\n setCursorPositionState(result.position);\n setOriginalInput(result.text);\n\n // Check for paste events (large amounts of text input at once)\n if (onPasteDetected && inputChar.length > 1) {\n const pasteService = getPasteDetectionService();\n const pasteEvent = pasteService.detectPaste(previousInput, result.text);\n if (pasteEvent) {\n onPasteDetected(pasteEvent);\n }\n }\n }\n }, [disabled, onSpecialKey, input, cursorPosition, multiline, handleSubmit, navigateHistory, setOriginalInput]);\n\n return {\n input,\n cursorPosition,\n isMultiline: isMultilineRef.current,\n setInput,\n setCursorPosition,\n clearInput,\n insertAtCursor,\n resetHistory,\n handleInput,\n };\n}","/**\n * Codebase Explorer Service\n * \n * Provides comprehensive codebase analysis capabilities for Plan Mode.\n * Safely explores project structure, dependencies, and patterns without\n * making any modifications.\n */\n\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { \n ExplorationData, \n ProjectStructure, \n ComponentMap, \n ComponentInfo,\n DependencyGraph,\n DependencyNode,\n DependencyEdge,\n ComplexityMetrics,\n ArchitecturePattern,\n ExplorationInsight,\n PlanModeSettings\n} from '../types/plan-mode.js';\n\ninterface ExplorationOptions {\n /** Root directory to explore */\n rootPath: string;\n /** Maximum depth to explore */\n maxDepth?: number;\n /** File size limit in bytes */\n maxFileSize?: number;\n /** Patterns to ignore */\n ignorePatterns?: string[];\n /** Focus on specific paths */\n focusPaths?: string[];\n}\n\ninterface FileInfo {\n path: string;\n name: string;\n size: number;\n extension: string;\n isDirectory: boolean;\n relativePath: string;\n}\n\ninterface LanguageStats {\n [language: string]: {\n fileCount: number;\n lineCount: number;\n fileSize: number;\n };\n}\n\nexport class CodebaseExplorer {\n private readonly defaultIgnorePatterns = [\n 'node_modules',\n '.git',\n '.next',\n 'dist',\n 'build',\n 'coverage',\n '.vscode',\n '.idea',\n '*.log',\n '.DS_Store',\n 'Thumbs.db'\n ];\n\n private readonly languageExtensions = {\n 'TypeScript': ['.ts', '.tsx'],\n 'JavaScript': ['.js', '.jsx', '.mjs'],\n 'Python': ['.py', '.pyx'],\n 'Java': ['.java'],\n 'C++': ['.cpp', '.cc', '.cxx', '.hpp', '.h'],\n 'C': ['.c', '.h'],\n 'Go': ['.go'],\n 'Rust': ['.rs'],\n 'PHP': ['.php'],\n 'Ruby': ['.rb'],\n 'Swift': ['.swift'],\n 'Kotlin': ['.kt'],\n 'Dart': ['.dart'],\n 'JSON': ['.json'],\n 'YAML': ['.yml', '.yaml'],\n 'XML': ['.xml'],\n 'HTML': ['.html', '.htm'],\n 'CSS': ['.css', '.scss', '.sass', '.less'],\n 'Markdown': ['.md', '.mdx'],\n 'Shell': ['.sh', '.bash', '.zsh'],\n 'SQL': ['.sql'],\n 'Dockerfile': ['Dockerfile', '.dockerfile']\n };\n\n private readonly configFilePatterns = [\n 'package.json',\n 'package-lock.json',\n 'yarn.lock',\n 'pnpm-lock.yaml',\n 'requirements.txt',\n 'Pipfile',\n 'pyproject.toml',\n 'setup.py',\n 'Cargo.toml',\n 'go.mod',\n 'pom.xml',\n 'build.gradle',\n 'Makefile',\n 'CMakeLists.txt',\n '.gitignore',\n '.env',\n '.env.example',\n 'tsconfig.json',\n 'jsconfig.json',\n 'webpack.config.js',\n 'vite.config.js',\n 'next.config.js',\n 'tailwind.config.js',\n 'babel.config.js',\n 'jest.config.js',\n 'vitest.config.js',\n 'eslint.config.js',\n '.eslintrc.*',\n 'prettier.config.js',\n '.prettierrc.*'\n ];\n\n constructor(private settings: PlanModeSettings) {}\n\n /**\n * Explore the codebase and gather comprehensive analysis data\n */\n async exploreCodebase(options: ExplorationOptions): Promise<ExplorationData> {\n const startTime = Date.now();\n const exploredPaths: string[] = [];\n \n try {\n // Collect file system information\n const files = await this.scanDirectory(options.rootPath, options);\n exploredPaths.push(...files.map(f => f.path));\n\n // Analyze project structure\n const projectStructure = await this.analyzeProjectStructure(options.rootPath, files);\n \n // Build component map\n const componentMap = await this.buildComponentMap(files);\n \n // Analyze dependencies\n const dependencies = await this.analyzeDependencies(files);\n \n // Calculate complexity metrics\n const complexity = await this.calculateComplexityMetrics(files);\n \n // Detect architecture patterns\n const architecturePatterns = await this.detectArchitecturePatterns(files, projectStructure);\n \n // Generate insights\n const insights = await this.generateInsights(files, projectStructure, complexity);\n\n const explorationData: ExplorationData = {\n exploredPaths,\n projectStructure,\n keyComponents: componentMap,\n dependencies,\n complexity,\n architecturePatterns,\n insights\n };\n\n const duration = Date.now() - startTime;\n console.log(`[CodebaseExplorer] Exploration completed in ${duration}ms`);\n console.log(`[CodebaseExplorer] Analyzed ${files.length} files across ${exploredPaths.length} paths`);\n\n return explorationData;\n } catch (error) {\n console.error('[CodebaseExplorer] Exploration failed:', error);\n throw error;\n }\n }\n\n /**\n * Scan directory structure recursively\n */\n private async scanDirectory(\n dirPath: string, \n options: ExplorationOptions,\n currentDepth = 0\n ): Promise<FileInfo[]> {\n const files: FileInfo[] = [];\n const maxDepth = options.maxDepth ?? this.settings.maxExplorationDepth;\n \n if (currentDepth > maxDepth) {\n return files;\n }\n\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n const relativePath = path.relative(options.rootPath, fullPath);\n \n // Check ignore patterns\n if (this.shouldIgnore(relativePath, options.ignorePatterns)) {\n continue;\n }\n\n const fileInfo: FileInfo = {\n path: fullPath,\n name: entry.name,\n size: 0,\n extension: path.extname(entry.name),\n isDirectory: entry.isDirectory(),\n relativePath\n };\n\n if (entry.isDirectory()) {\n files.push(fileInfo);\n // Recursively scan subdirectories\n const subFiles = await this.scanDirectory(fullPath, options, currentDepth + 1);\n files.push(...subFiles);\n } else {\n // Get file stats\n try {\n const stats = await fs.stat(fullPath);\n fileInfo.size = stats.size;\n \n // Skip files that are too large\n if (fileInfo.size > this.settings.maxFileSize) {\n continue;\n }\n \n files.push(fileInfo);\n } catch (_error) {\n // Skip files we can't read\n continue;\n }\n }\n }\n } catch (_error) {\n // Skip directories we can't read\n console.warn(`[CodebaseExplorer] Cannot read directory: ${dirPath}`);\n }\n\n return files;\n }\n\n /**\n * Analyze overall project structure\n */\n private async analyzeProjectStructure(rootPath: string, files: FileInfo[]): Promise<ProjectStructure> {\n const languageStats = this.calculateLanguageStats(files);\n const primaryLanguage = this.determinePrimaryLanguage(languageStats);\n const projectType = await this.detectProjectType(rootPath, files);\n \n const sourceFiles = files.filter(f => !f.isDirectory && this.isSourceFile(f));\n const configFiles = files.filter(f => !f.isDirectory && this.isConfigFile(f));\n const _testFiles = files.filter(f => !f.isDirectory && this.isTestFile(f));\n \n const entryPoints = await this.findEntryPoints(rootPath, files);\n const sourceDirectories = this.findSourceDirectories(files);\n const testDirectories = this.findTestDirectories(files);\n const buildDirectories = this.findBuildDirectories(files);\n \n const slocEstimate = await this.estimateSourceLines(sourceFiles);\n\n return {\n rootPath,\n primaryLanguage,\n projectType,\n entryPoints,\n configFiles: configFiles.map(f => f.relativePath),\n sourceDirectories,\n testDirectories,\n buildDirectories,\n totalFiles: files.filter(f => !f.isDirectory).length,\n slocEstimate\n };\n }\n\n /**\n * Build component map from analyzed files\n */\n private async buildComponentMap(files: FileInfo[]): Promise<ComponentMap> {\n const sourceFiles = files.filter(f => !f.isDirectory && this.isSourceFile(f));\n const components: ComponentInfo[] = [];\n\n for (const file of sourceFiles) {\n try {\n const component = await this.analyzeComponent(file);\n if (component) {\n components.push(component);\n }\n } catch (_error) {\n // Skip files we can't analyze\n continue;\n }\n }\n\n return {\n core: components.filter(c => c.type === 'class' || c.type === 'module'),\n utilities: components.filter(c => c.type === 'utility'),\n tests: components.filter(c => c.type === 'test'),\n config: components.filter(c => c.type === 'config'),\n external: [] // Will be populated from dependency analysis\n };\n }\n\n /**\n * Analyze dependencies between components\n */\n private async analyzeDependencies(files: FileInfo[]): Promise<DependencyGraph> {\n const nodes: DependencyNode[] = [];\n const edges: DependencyEdge[] = [];\n const sourceFiles = files.filter(f => !f.isDirectory && this.isSourceFile(f));\n\n // Create nodes for each source file\n for (const file of sourceFiles) {\n nodes.push({\n id: file.relativePath,\n name: path.basename(file.name, file.extension),\n type: this.isExternalDependency(file) ? 'external' : 'internal',\n importance: this.calculateImportance(file)\n });\n }\n\n // Analyze import/require statements\n for (const file of sourceFiles) {\n try {\n const dependencies = await this.extractDependencies(file);\n for (const dep of dependencies) {\n edges.push({\n from: file.relativePath,\n to: dep.target,\n type: dep.type,\n strength: dep.strength\n });\n }\n } catch (_error) {\n // Skip files we can't analyze\n continue;\n }\n }\n\n const circularDependencies = this.detectCircularDependencies(nodes, edges);\n const criticalPath = this.findCriticalPath(nodes, edges);\n\n return {\n nodes,\n edges,\n circularDependencies,\n criticalPath\n };\n }\n\n /**\n * Calculate complexity metrics\n */\n private async calculateComplexityMetrics(files: FileInfo[]): Promise<ComplexityMetrics> {\n const sourceFiles = files.filter(f => !f.isDirectory && this.isSourceFile(f));\n let totalComplexity = 0;\n let totalCognitive = 0;\n let maintainabilitySum = 0;\n let fileCount = 0;\n const complexComponents: string[] = [];\n\n for (const file of sourceFiles) {\n try {\n const metrics = await this.analyzeFileComplexity(file);\n totalComplexity += metrics.cyclomatic;\n totalCognitive += metrics.cognitive;\n maintainabilitySum += metrics.maintainability;\n fileCount++;\n\n if (metrics.cyclomatic > 10) {\n complexComponents.push(file.relativePath);\n }\n } catch (_error) {\n // Skip files we can't analyze\n continue;\n }\n }\n\n const avgComplexity = fileCount > 0 ? totalComplexity / fileCount : 0;\n const avgCognitive = fileCount > 0 ? totalCognitive / fileCount : 0;\n const avgMaintainability = fileCount > 0 ? maintainabilitySum / fileCount : 100;\n\n return {\n overall: Math.min(10, Math.max(1, Math.round((avgComplexity + avgCognitive) / 2))),\n cyclomatic: avgComplexity,\n cognitive: avgCognitive,\n maintainability: avgMaintainability,\n technicalDebt: Math.max(0, 100 - avgMaintainability) / 100,\n complexComponents: complexComponents.slice(0, 10) // Top 10 most complex\n };\n }\n\n /**\n * Detect architecture patterns\n */\n private async detectArchitecturePatterns(\n files: FileInfo[], \n structure: ProjectStructure\n ): Promise<ArchitecturePattern[]> {\n const patterns: ArchitecturePattern[] = [];\n\n // Detect common patterns based on project structure\n if (structure.projectType === 'react') {\n patterns.push({\n name: 'Component-Based Architecture',\n type: 'architectural',\n confidence: 0.9,\n components: files.filter(f => f.name.includes('component') || f.extension === '.tsx').map(f => f.relativePath),\n description: 'React component-based architecture with reusable UI components'\n });\n }\n\n if (structure.sourceDirectories.some(dir => dir.includes('service'))) {\n patterns.push({\n name: 'Service Layer Pattern',\n type: 'architectural',\n confidence: 0.8,\n components: files.filter(f => f.relativePath.includes('service')).map(f => f.relativePath),\n description: 'Business logic separated into service layer'\n });\n }\n\n // Add more pattern detection logic...\n \n return patterns;\n }\n\n /**\n * Generate insights about the codebase\n */\n private async generateInsights(\n files: FileInfo[],\n structure: ProjectStructure,\n complexity: ComplexityMetrics\n ): Promise<ExplorationInsight[]> {\n const insights: ExplorationInsight[] = [];\n\n // High complexity warning\n if (complexity.overall > 7) {\n insights.push({\n type: 'warning',\n title: 'High Code Complexity',\n description: `Average complexity is ${complexity.overall}/10. Consider refactoring complex components.`,\n components: complexity.complexComponents,\n confidence: 0.9,\n priority: 4\n });\n }\n\n // Large file warning\n const largeFiles = files.filter(f => f.size > 50000); // 50KB+\n if (largeFiles.length > 0) {\n insights.push({\n type: 'recommendation',\n title: 'Large Files Detected',\n description: `Found ${largeFiles.length} large files. Consider breaking them into smaller modules.`,\n components: largeFiles.map(f => f.relativePath),\n confidence: 0.8,\n priority: 3\n });\n }\n\n // Missing tests\n const hasTests = structure.testDirectories.length > 0;\n if (!hasTests) {\n insights.push({\n type: 'opportunity',\n title: 'No Test Directory Found',\n description: 'Consider adding automated tests to improve code quality and reliability.',\n components: [],\n confidence: 0.95,\n priority: 5\n });\n }\n\n return insights;\n }\n\n // Utility methods\n private shouldIgnore(relativePath: string, customIgnorePatterns?: string[]): boolean {\n const patterns = [...this.defaultIgnorePatterns, ...(customIgnorePatterns || [])];\n return patterns.some(pattern => {\n if (pattern.includes('*')) {\n const regex = new RegExp(pattern.replace(/\\*/g, '.*'));\n return regex.test(relativePath);\n }\n return relativePath.includes(pattern);\n });\n }\n\n private isSourceFile(file: FileInfo): boolean {\n const sourceExtensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.java', '.go', '.rs', '.cpp', '.c'];\n return sourceExtensions.includes(file.extension);\n }\n\n private isConfigFile(file: FileInfo): boolean {\n return this.configFilePatterns.some(pattern => \n file.name === pattern || file.name.includes(pattern)\n );\n }\n\n private isTestFile(file: FileInfo): boolean {\n return file.relativePath.includes('test') || \n file.relativePath.includes('spec') ||\n file.name.includes('.test.') ||\n file.name.includes('.spec.');\n }\n\n private calculateLanguageStats(files: FileInfo[]): LanguageStats {\n const stats: LanguageStats = {};\n \n for (const file of files) {\n if (file.isDirectory) continue;\n \n const language = this.getLanguageFromExtension(file.extension);\n if (language) {\n if (!stats[language]) {\n stats[language] = { fileCount: 0, lineCount: 0, fileSize: 0 };\n }\n stats[language].fileCount++;\n stats[language].fileSize += file.size;\n }\n }\n \n return stats;\n }\n\n private getLanguageFromExtension(extension: string): string | null {\n for (const [language, extensions] of Object.entries(this.languageExtensions)) {\n if (extensions.includes(extension)) {\n return language;\n }\n }\n return null;\n }\n\n private determinePrimaryLanguage(stats: LanguageStats): string {\n let maxFiles = 0;\n let primaryLanguage = 'Unknown';\n \n for (const [language, stat] of Object.entries(stats)) {\n if (stat.fileCount > maxFiles) {\n maxFiles = stat.fileCount;\n primaryLanguage = language;\n }\n }\n \n return primaryLanguage;\n }\n\n private async detectProjectType(rootPath: string, files: FileInfo[]): Promise<string> {\n const packageJsonPath = path.join(rootPath, 'package.json');\n \n try {\n const packageJson = await fs.readFile(packageJsonPath, 'utf-8');\n const pkg = JSON.parse(packageJson);\n \n if (pkg.dependencies?.react || pkg.devDependencies?.react) return 'react';\n if (pkg.dependencies?.vue || pkg.devDependencies?.vue) return 'vue';\n if (pkg.dependencies?.angular || pkg.devDependencies?.angular) return 'angular';\n if (pkg.dependencies?.next || pkg.devDependencies?.next) return 'nextjs';\n if (pkg.dependencies?.express || pkg.devDependencies?.express) return 'express';\n \n return 'node';\n } catch {\n // No package.json, check other indicators\n if (files.some(f => f.name === 'requirements.txt')) return 'python';\n if (files.some(f => f.name === 'Cargo.toml')) return 'rust';\n if (files.some(f => f.name === 'go.mod')) return 'go';\n if (files.some(f => f.name === 'pom.xml')) return 'java';\n \n return 'unknown';\n }\n }\n\n // Placeholder implementations for complex analysis methods\n private async analyzeComponent(file: FileInfo): Promise<ComponentInfo | null> {\n // TODO: Implement AST-based component analysis\n return {\n name: path.basename(file.name, file.extension),\n path: file.relativePath,\n type: this.inferComponentType(file),\n description: `${this.inferComponentType(file)} component`,\n complexity: Math.floor(Math.random() * 5) + 1, // Placeholder\n dependencies: [],\n dependents: [],\n lineCount: Math.floor(file.size / 50) // Rough estimate\n };\n }\n\n private inferComponentType(file: FileInfo): ComponentInfo['type'] {\n if (this.isTestFile(file)) return 'test';\n if (this.isConfigFile(file)) return 'config';\n if (file.relativePath.includes('util')) return 'utility';\n if (file.extension === '.tsx' || file.extension === '.jsx') return 'function';\n return 'module';\n }\n\n private async extractDependencies(_file: FileInfo): Promise<Array<{target: string, type: any, strength: number}>> {\n // TODO: Implement AST-based dependency extraction\n return [];\n }\n\n private detectCircularDependencies(_nodes: DependencyNode[], _edges: DependencyEdge[]): string[][] {\n // TODO: Implement cycle detection algorithm\n return [];\n }\n\n private findCriticalPath(_nodes: DependencyNode[], _edges: DependencyEdge[]): string[] {\n // TODO: Implement critical path analysis\n return [];\n }\n\n private async analyzeFileComplexity(_file: FileInfo): Promise<{cyclomatic: number, cognitive: number, maintainability: number}> {\n // TODO: Implement complexity analysis\n return {\n cyclomatic: Math.floor(Math.random() * 15) + 1,\n cognitive: Math.floor(Math.random() * 20) + 1,\n maintainability: Math.floor(Math.random() * 40) + 60\n };\n }\n\n private async findEntryPoints(rootPath: string, files: FileInfo[]): Promise<string[]> {\n const entryPoints: string[] = [];\n \n // Common entry point files\n const entryPatterns = ['index.js', 'index.ts', 'main.js', 'main.ts', 'app.js', 'app.ts'];\n \n for (const pattern of entryPatterns) {\n const found = files.find(f => f.name === pattern && !f.isDirectory);\n if (found) {\n entryPoints.push(found.relativePath);\n }\n }\n \n return entryPoints;\n }\n\n private findSourceDirectories(files: FileInfo[]): string[] {\n const sourceDirs = new Set<string>();\n const sourcePatterns = ['src', 'lib', 'source'];\n \n for (const file of files) {\n if (file.isDirectory) {\n for (const pattern of sourcePatterns) {\n if (file.name === pattern || file.relativePath.includes(pattern)) {\n sourceDirs.add(file.relativePath);\n }\n }\n }\n }\n \n return Array.from(sourceDirs);\n }\n\n private findTestDirectories(files: FileInfo[]): string[] {\n const testDirs = new Set<string>();\n const testPatterns = ['test', 'tests', '__tests__', 'spec'];\n \n for (const file of files) {\n if (file.isDirectory) {\n for (const pattern of testPatterns) {\n if (file.name === pattern || file.relativePath.includes(pattern)) {\n testDirs.add(file.relativePath);\n }\n }\n }\n }\n \n return Array.from(testDirs);\n }\n\n private findBuildDirectories(files: FileInfo[]): string[] {\n const buildDirs = new Set<string>();\n const buildPatterns = ['dist', 'build', 'out', 'target'];\n \n for (const file of files) {\n if (file.isDirectory) {\n for (const pattern of buildPatterns) {\n if (file.name === pattern) {\n buildDirs.add(file.relativePath);\n }\n }\n }\n }\n \n return Array.from(buildDirs);\n }\n\n private async estimateSourceLines(files: FileInfo[]): Promise<number> {\n // Rough estimation: average 50 characters per line\n const totalSize = files.reduce((sum, file) => sum + file.size, 0);\n return Math.floor(totalSize / 50);\n }\n\n private isExternalDependency(file: FileInfo): boolean {\n return file.relativePath.includes('node_modules') || \n file.relativePath.includes('vendor') ||\n file.relativePath.includes('third_party');\n }\n\n private calculateImportance(file: FileInfo): number {\n // Simple heuristic: larger files and entry points are more important\n let importance = Math.min(5, Math.floor(file.size / 10000) + 1);\n \n if (file.name.includes('index') || file.name.includes('main') || file.name.includes('app')) {\n importance = Math.min(5, importance + 2);\n }\n \n return importance;\n }\n}","/**\n * Plan Generator Service\n * \n * AI-powered implementation plan generation for Plan Mode.\n * Takes exploration data and user requirements to create\n * detailed, actionable implementation plans.\n */\n\nimport { \n ExplorationData,\n ImplementationPlan,\n ImplementationStrategy,\n ActionPlan,\n ActionStep,\n RiskAssessment,\n EffortEstimate,\n Risk,\n MitigationStrategy\n} from '../types/plan-mode.js';\nimport { GrokAgent } from '../agent/grok-agent.js';\n\ninterface PlanGenerationOptions {\n /** User's original request/task */\n userRequest: string;\n /** Exploration data from codebase analysis */\n explorationData: ExplorationData;\n /** Additional context or constraints */\n constraints?: string[];\n /** Preferred implementation approach */\n preferredApproach?: string;\n /** Time constraints */\n timeConstraints?: string;\n /** Quality requirements */\n qualityRequirements?: string[];\n}\n\ninterface PlanGenerationContext {\n projectType: string;\n primaryLanguage: string;\n complexity: number;\n hasTests: boolean;\n architecturePatterns: string[];\n keyComponents: string[];\n}\n\nexport class PlanGenerator {\n constructor(private agent: GrokAgent) {}\n\n /**\n * Generate a comprehensive implementation plan\n */\n async generatePlan(options: PlanGenerationOptions): Promise<ImplementationPlan> {\n try {\n const context = this.buildGenerationContext(options.explorationData);\n \n // Generate implementation strategy\n const strategy = await this.generateImplementationStrategy(options, context);\n \n // Create detailed action plan\n const actionPlan = await this.generateActionPlan(options, context, strategy);\n \n // Assess risks\n const risks = await this.assessRisks(options, context, actionPlan);\n \n // Estimate effort\n const effort = await this.estimateEffort(actionPlan, context);\n \n // Generate success criteria\n const successCriteria = await this.generateSuccessCriteria(options, context);\n\n const plan: ImplementationPlan = {\n title: this.generatePlanTitle(options.userRequest),\n description: this.generatePlanDescription(options.userRequest, context),\n strategy,\n actionPlan,\n risks,\n effort,\n successCriteria,\n createdAt: new Date(),\n version: '1.0'\n };\n\n return plan;\n } catch (error) {\n console.error('[PlanGenerator] Failed to generate plan:', error);\n throw new Error(`Plan generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n /**\n * Build context for plan generation\n */\n private buildGenerationContext(explorationData: ExplorationData): PlanGenerationContext {\n return {\n projectType: explorationData.projectStructure.projectType,\n primaryLanguage: explorationData.projectStructure.primaryLanguage,\n complexity: explorationData.complexity.overall,\n hasTests: explorationData.projectStructure.testDirectories.length > 0,\n architecturePatterns: explorationData.architecturePatterns.map(p => p.name),\n keyComponents: explorationData.keyComponents.core.map(c => c.name)\n };\n }\n\n /**\n * Generate high-level implementation strategy\n */\n private async generateImplementationStrategy(\n options: PlanGenerationOptions,\n context: PlanGenerationContext\n ): Promise<ImplementationStrategy> {\n const strategyPrompt = this.buildStrategyPrompt(options, context);\n \n // Use AI to generate strategy\n const strategyResponse = await this.generateWithAI(strategyPrompt);\n \n return {\n approach: this.extractApproach(strategyResponse, options.userRequest),\n principles: this.extractPrinciples(strategyResponse, context),\n techStack: this.generateTechStackRecommendations(context, strategyResponse),\n architectureDecisions: this.generateArchitectureDecisions(context, strategyResponse),\n integrationPoints: this.identifyIntegrationPoints(options.explorationData, strategyResponse)\n };\n }\n\n /**\n * Generate detailed action plan\n */\n private async generateActionPlan(\n options: PlanGenerationOptions,\n context: PlanGenerationContext,\n strategy: ImplementationStrategy\n ): Promise<ActionPlan> {\n const actionPrompt = this.buildActionPrompt(options, context, strategy);\n \n // Use AI to generate action steps\n const actionResponse = await this.generateWithAI(actionPrompt);\n \n const steps = this.parseActionSteps(actionResponse, context);\n const milestones = this.generateMilestones(steps);\n const dependencies = this.analyzeDependencies(steps);\n const parallelTracks = this.identifyParallelTracks(steps, dependencies);\n\n return {\n steps,\n parallelTracks,\n milestones,\n dependencies\n };\n }\n\n /**\n * Assess implementation risks\n */\n private async assessRisks(\n options: PlanGenerationOptions,\n context: PlanGenerationContext,\n actionPlan: ActionPlan\n ): Promise<RiskAssessment> {\n const risks = this.identifyRisks(options, context, actionPlan);\n const mitigations = this.generateMitigations(risks, context);\n const overallRisk = this.calculateOverallRisk(risks);\n\n return {\n overallRisk,\n risks,\n mitigations,\n contingencies: this.generateContingencyPlans(risks, actionPlan)\n };\n }\n\n /**\n * Estimate implementation effort\n */\n private async estimateEffort(\n actionPlan: ActionPlan,\n context: PlanGenerationContext\n ): Promise<EffortEstimate> {\n const baseHours = actionPlan.steps.reduce((total, step) => total + step.effort, 0);\n const complexityMultiplier = this.getComplexityMultiplier(context.complexity);\n const experienceMultiplier = this.getExperienceMultiplier(context.primaryLanguage);\n \n const totalHours = Math.round(baseHours * complexityMultiplier * experienceMultiplier);\n \n const breakdownByType = this.calculateBreakdownByType(actionPlan.steps);\n const breakdownByTrack = this.calculateBreakdownByTrack(actionPlan.parallelTracks, actionPlan.steps);\n \n const confidence = this.calculateEstimateConfidence(context, actionPlan.steps.length);\n const factors = this.identifyEstimationFactors(context);\n const timeline = this.projectTimeline(totalHours, actionPlan.parallelTracks.length);\n\n return {\n totalHours,\n breakdownByType,\n breakdownByTrack,\n confidence,\n factors,\n timeline\n };\n }\n\n /**\n * Build strategy generation prompt\n */\n private buildStrategyPrompt(options: PlanGenerationOptions, context: PlanGenerationContext): string {\n return `\nAs an expert software architect, analyze this implementation request and provide a comprehensive strategy.\n\n**User Request:** ${options.userRequest}\n\n**Project Context:**\n- Type: ${context.projectType}\n- Language: ${context.primaryLanguage}\n- Complexity: ${context.complexity}/10\n- Has Tests: ${context.hasTests}\n- Architecture Patterns: ${context.architecturePatterns.join(', ')}\n- Key Components: ${context.keyComponents.join(', ')}\n\n**Additional Context:**\n${options.constraints ? `- Constraints: ${options.constraints.join(', ')}` : ''}\n${options.preferredApproach ? `- Preferred Approach: ${options.preferredApproach}` : ''}\n${options.timeConstraints ? `- Time Constraints: ${options.timeConstraints}` : ''}\n\nPlease provide:\n1. **High-level approach** (1-2 sentences)\n2. **Key principles** (3-5 principles to guide implementation)\n3. **Technology recommendations** (specific to this project)\n4. **Architecture decisions** (major structural choices)\n5. **Integration considerations** (how this fits with existing code)\n\nFocus on practical, actionable guidance that considers the existing codebase structure and patterns.\n`;\n }\n\n /**\n * Build action plan generation prompt\n */\n private buildActionPrompt(\n options: PlanGenerationOptions,\n context: PlanGenerationContext,\n strategy: ImplementationStrategy\n ): string {\n return `\nCreate a detailed, step-by-step action plan for this implementation:\n\n**Request:** ${options.userRequest}\n**Approach:** ${strategy.approach}\n\n**Context:**\n- Project: ${context.projectType} (${context.primaryLanguage})\n- Complexity: ${context.complexity}/10\n- Architecture: ${context.architecturePatterns.join(', ')}\n\n**Key Principles:**\n${strategy.principles.map(p => `- ${p}`).join('\\n')}\n\nPlease provide a numbered list of specific, actionable steps. For each step include:\n1. **Title** (brief, actionable)\n2. **Description** (what exactly to do)\n3. **Type** (research/design/implement/test/document/deploy)\n4. **Effort** (estimated hours)\n5. **Files affected** (specific file paths when known)\n6. **Dependencies** (which steps must come first)\n\nFocus on:\n- Concrete, executable actions\n- Logical progression from setup to completion\n- Realistic effort estimates\n- Clear dependencies between steps\n- Integration with existing code patterns\n\nProvide 8-15 steps total, balancing thoroughness with practicality.\n`;\n }\n\n /**\n * Generate strategy response using AI\n */\n private async generateWithAI(prompt: string): Promise<string> {\n try {\n let response = '';\n \n for await (const chunk of this.agent.processUserMessageStream(prompt)) {\n if (chunk.type === 'content' && chunk.content) {\n response += chunk.content;\n }\n }\n \n return response;\n } catch (error) {\n console.error('[PlanGenerator] AI generation failed:', error);\n return this.getFallbackResponse(prompt);\n }\n }\n\n /**\n * Extract implementation approach from AI response\n */\n private extractApproach(response: string, userRequest: string): string {\n // Look for approach section in AI response\n const approachMatch = response.match(/(?:approach|strategy):\\s*([^\\n]+)/i);\n if (approachMatch) {\n return approachMatch[1].trim();\n }\n \n // Fallback: generate simple approach\n return `Implement ${userRequest} following existing project patterns and best practices`;\n }\n\n /**\n * Extract key principles from AI response\n */\n private extractPrinciples(response: string, _context: PlanGenerationContext): string[] {\n const principles: string[] = [];\n \n // Look for principles section\n const principlesSection = response.match(/principles?:\\s*([\\s\\S]*?)(?:\\n\\n|\\n[A-Z]|$)/i);\n if (principlesSection) {\n const lines = principlesSection[1].split('\\n');\n for (const line of lines) {\n const cleaned = line.trim().replace(/^[-*•]\\s*/, '');\n if (cleaned.length > 10) {\n principles.push(cleaned);\n }\n }\n }\n \n // Add default principles if none found\n if (principles.length === 0) {\n principles.push(\n 'Follow existing code patterns and conventions',\n 'Maintain backward compatibility',\n 'Write tests for new functionality',\n 'Document changes and new features',\n 'Ensure performance and security'\n );\n }\n \n return principles.slice(0, 5); // Limit to 5 principles\n }\n\n /**\n * Parse action steps from AI response\n */\n private parseActionSteps(response: string, context: PlanGenerationContext): ActionStep[] {\n const steps: ActionStep[] = [];\n \n // Look for numbered steps\n const stepMatches = response.match(/\\d+\\.\\s*\\*\\*([^*]+)\\*\\*[\\s\\S]*?(?=\\d+\\.\\s*\\*\\*|\\n\\n|$)/g);\n \n if (stepMatches) {\n stepMatches.forEach((stepText, index) => {\n const step = this.parseIndividualStep(stepText, index + 1, context);\n if (step) {\n steps.push(step);\n }\n });\n }\n \n // Fallback: generate basic steps if parsing fails\n if (steps.length === 0) {\n steps.push(...this.generateFallbackSteps(context));\n }\n \n return steps;\n }\n\n /**\n * Parse individual step from text\n */\n private parseIndividualStep(stepText: string, order: number, context: PlanGenerationContext): ActionStep | null {\n const titleMatch = stepText.match(/\\*\\*([^*]+)\\*\\*/);\n if (!titleMatch) return null;\n \n const title = titleMatch[1].trim();\n const description = this.extractStepDescription(stepText);\n const type = this.inferStepType(title, description);\n const effort = this.estimateStepEffort(title, description, type, context);\n const affectedFiles = this.extractAffectedFiles(stepText);\n \n return {\n id: `step_${order}`,\n title,\n description,\n type,\n effort,\n skills: this.inferRequiredSkills(type, context),\n affectedFiles,\n acceptanceCriteria: this.generateAcceptanceCriteria(title, type),\n order\n };\n }\n\n // Utility methods for plan generation\n private generatePlanTitle(userRequest: string): string {\n return `Implementation Plan: ${userRequest}`;\n }\n\n private generatePlanDescription(userRequest: string, context: PlanGenerationContext): string {\n return `Comprehensive implementation plan for \"${userRequest}\" in ${context.primaryLanguage} ${context.projectType} project. This plan considers existing architecture patterns and maintains compatibility with current codebase structure.`;\n }\n\n private generateSuccessCriteria(_options: PlanGenerationOptions, _context: PlanGenerationContext): Promise<string[]> {\n return Promise.resolve([\n 'Implementation meets functional requirements',\n 'Code follows existing patterns and conventions',\n 'All tests pass including new test coverage',\n 'Documentation is updated and complete',\n 'Performance meets or exceeds current benchmarks',\n 'Security requirements are satisfied',\n 'Integration with existing systems is seamless'\n ]);\n }\n\n private getFallbackResponse(_prompt: string): string {\n return `\n**Approach:** Implement the requested feature following established patterns and best practices.\n\n**Key Principles:**\n- Follow existing code conventions\n- Maintain backward compatibility \n- Write comprehensive tests\n- Document all changes\n- Ensure performance and security\n\n**Steps:**\n1. **Analyze Requirements** - Review the request and existing code\n2. **Design Solution** - Plan the implementation approach\n3. **Implement Core** - Build the main functionality\n4. **Add Tests** - Create comprehensive test coverage\n5. **Document** - Update documentation and comments\n6. **Review** - Code review and refinement\n`;\n }\n\n // Additional utility methods would be implemented here for:\n // - generateTechStackRecommendations\n // - generateArchitectureDecisions\n // - identifyIntegrationPoints\n // - identifyRisks\n // - generateMitigations\n // - etc.\n\n private generateTechStackRecommendations(_context: PlanGenerationContext, _response: string): any[] {\n // Implementation would extract tech stack recommendations from AI response\n return [];\n }\n\n private generateArchitectureDecisions(_context: PlanGenerationContext, _response: string): any[] {\n // Implementation would extract architecture decisions from AI response\n return [];\n }\n\n private identifyIntegrationPoints(_explorationData: ExplorationData, _response: string): any[] {\n // Implementation would identify integration points\n return [];\n }\n\n private identifyRisks(_options: PlanGenerationOptions, _context: PlanGenerationContext, _actionPlan: ActionPlan): Risk[] {\n // Implementation would identify potential risks\n return [];\n }\n\n private generateMitigations(_risks: Risk[], _context: PlanGenerationContext): MitigationStrategy[] {\n // Implementation would generate risk mitigation strategies\n return [];\n }\n\n private calculateOverallRisk(risks: Risk[]): 'low' | 'medium' | 'high' | 'critical' {\n if (risks.length === 0) return 'low';\n const avgRisk = risks.reduce((sum, risk) => sum + risk.score, 0) / risks.length;\n if (avgRisk < 2) return 'low';\n if (avgRisk < 4) return 'medium';\n if (avgRisk < 6) return 'high';\n return 'critical';\n }\n\n private generateContingencyPlans(_risks: Risk[], _actionPlan: ActionPlan): any[] {\n // Implementation would generate contingency plans\n return [];\n }\n\n private getComplexityMultiplier(complexity: number): number {\n return 1 + (complexity - 5) * 0.1; // Scale around 1.0\n }\n\n private getExperienceMultiplier(_language: string): number {\n // Assume average experience, could be made configurable\n return 1.0;\n }\n\n private calculateBreakdownByType(steps: ActionStep[]): Record<string, number> {\n const breakdown: Record<string, number> = {};\n for (const step of steps) {\n breakdown[step.type] = (breakdown[step.type] || 0) + step.effort;\n }\n return breakdown;\n }\n\n private calculateBreakdownByTrack(_tracks: any[], _steps: ActionStep[]): Record<string, number> {\n // Implementation would calculate effort breakdown by track\n return {};\n }\n\n private calculateEstimateConfidence(context: PlanGenerationContext, stepCount: number): number {\n let confidence = 0.8; // Base confidence\n if (context.complexity > 7) confidence -= 0.1;\n if (stepCount > 15) confidence -= 0.1;\n if (!context.hasTests) confidence -= 0.1;\n return Math.max(0.5, confidence);\n }\n\n private identifyEstimationFactors(_context: PlanGenerationContext): any[] {\n // Implementation would identify factors affecting estimates\n return [];\n }\n\n private projectTimeline(totalHours: number, trackCount: number): any {\n const _daysPerWeek = 5;\n const hoursPerDay = 6; // Accounting for other work\n \n const sequentialDays = Math.ceil(totalHours / hoursPerDay);\n const parallelDays = Math.ceil(sequentialDays / Math.max(1, trackCount));\n \n return {\n optimistic: `${Math.ceil(parallelDays * 0.8)} days`,\n mostLikely: `${parallelDays} days`,\n pessimistic: `${Math.ceil(parallelDays * 1.5)} days`,\n recommendedStart: 'As soon as possible',\n criticalPath: `${sequentialDays} days if done sequentially`\n };\n }\n\n private generateMilestones(_steps: ActionStep[]): any[] {\n // Implementation would generate milestones from steps\n return [];\n }\n\n private analyzeDependencies(_steps: ActionStep[]): any[] {\n // Implementation would analyze step dependencies\n return [];\n }\n\n private identifyParallelTracks(_steps: ActionStep[], _dependencies: any[]): any[] {\n // Implementation would identify parallel work tracks\n return [];\n }\n\n private extractStepDescription(stepText: string): string {\n // Extract description from step text\n const lines = stepText.split('\\n').slice(1); // Skip title line\n return lines.join(' ').replace(/\\*\\*/g, '').trim() || 'Complete this step';\n }\n\n private inferStepType(title: string, description: string): ActionStep['type'] {\n const text = (title + ' ' + description).toLowerCase();\n if (text.includes('research') || text.includes('analyze') || text.includes('investigate')) return 'research';\n if (text.includes('design') || text.includes('plan') || text.includes('architect')) return 'design';\n if (text.includes('test') || text.includes('spec')) return 'test';\n if (text.includes('document') || text.includes('readme') || text.includes('comment')) return 'document';\n if (text.includes('deploy') || text.includes('publish') || text.includes('release')) return 'deploy';\n return 'implement';\n }\n\n private estimateStepEffort(title: string, description: string, type: ActionStep['type'], context: PlanGenerationContext): number {\n let baseHours = 4; // Default\n \n switch (type) {\n case 'research': baseHours = 2; break;\n case 'design': baseHours = 3; break;\n case 'implement': baseHours = 6; break;\n case 'test': baseHours = 3; break;\n case 'document': baseHours = 2; break;\n case 'deploy': baseHours = 2; break;\n }\n \n // Adjust for complexity\n const complexityMultiplier = 1 + (context.complexity - 5) * 0.1;\n \n return Math.max(1, Math.round(baseHours * complexityMultiplier));\n }\n\n private extractAffectedFiles(stepText: string): string[] {\n // Look for file mentions in step text\n const fileMatches = stepText.match(/[\\w.-]+\\.(js|ts|jsx|tsx|py|java|go|rs|json|md|yml|yaml)/g);\n return fileMatches || [];\n }\n\n private inferRequiredSkills(type: ActionStep['type'], context: PlanGenerationContext): string[] {\n const skills: string[] = [context.primaryLanguage];\n \n switch (type) {\n case 'research':\n skills.push('Analysis', 'Documentation');\n break;\n case 'design':\n skills.push('Architecture', 'System Design');\n break;\n case 'implement':\n skills.push('Programming', context.projectType);\n break;\n case 'test':\n skills.push('Testing', 'QA');\n break;\n case 'document':\n skills.push('Technical Writing');\n break;\n case 'deploy':\n skills.push('DevOps', 'Deployment');\n break;\n }\n \n return skills;\n }\n\n private generateAcceptanceCriteria(title: string, type: ActionStep['type']): string[] {\n const criteria: string[] = [];\n \n switch (type) {\n case 'implement':\n criteria.push('Code compiles without errors');\n criteria.push('Functionality works as specified');\n criteria.push('Code follows project conventions');\n break;\n case 'test':\n criteria.push('All tests pass');\n criteria.push('Test coverage meets requirements');\n break;\n case 'document':\n criteria.push('Documentation is complete and accurate');\n criteria.push('Examples are provided where appropriate');\n break;\n default:\n criteria.push('Step objectives are met');\n criteria.push('Quality standards are maintained');\n }\n \n return criteria;\n }\n\n private generateFallbackSteps(context: PlanGenerationContext): ActionStep[] {\n return [\n {\n id: 'step_1',\n title: 'Analyze Requirements',\n description: 'Review the implementation requirements and existing codebase',\n type: 'research',\n effort: 2,\n skills: ['Analysis'],\n affectedFiles: [],\n acceptanceCriteria: ['Requirements are clearly understood'],\n order: 1\n },\n {\n id: 'step_2', \n title: 'Design Solution',\n description: 'Create technical design for the implementation',\n type: 'design',\n effort: 3,\n skills: ['Design', context.primaryLanguage],\n affectedFiles: [],\n acceptanceCriteria: ['Design is documented and approved'],\n order: 2\n },\n {\n id: 'step_3',\n title: 'Implement Core Functionality',\n description: 'Build the main implementation',\n type: 'implement',\n effort: 6,\n skills: ['Programming', context.primaryLanguage],\n affectedFiles: [],\n acceptanceCriteria: ['Core functionality works correctly'],\n order: 3\n }\n ];\n }\n}","/**\n * Read-Only Tool Execution Service\n * \n * Provides a safe execution layer for Plan Mode that prevents any\n * file system modifications while maintaining full tool functionality\n * for exploration and analysis.\n */\n\nimport { ToolResult } from '../types/index.js';\nimport { GrokAgent } from '../agent/grok-agent.js';\n\nexport interface ReadOnlyResult extends ToolResult {\n /** Original tool that was executed */\n originalTool: string;\n /** Whether the tool was blocked due to being destructive */\n wasBlocked: boolean;\n /** Simulation result if tool was blocked */\n simulationResult?: any;\n /** Insights gathered from the operation */\n insights?: string[];\n}\n\ninterface ToolExecutionLog {\n toolName: string;\n arguments: any;\n timestamp: Date;\n result: ReadOnlyResult;\n blocked: boolean;\n}\n\nexport class ReadOnlyToolExecutor {\n private executionLog: ToolExecutionLog[] = [];\n private insights: string[] = [];\n \n constructor(private agent: GrokAgent) {}\n\n /**\n * Execute a tool in read-only mode\n */\n async executeReadOnly(toolName: string, args: any): Promise<ReadOnlyResult> {\n const timestamp = new Date();\n \n // Check if tool is allowed in read-only mode\n if (this.isDestructiveTool(toolName)) {\n const result = await this.simulateDestructiveTool(toolName, args);\n \n this.logExecution(toolName, args, timestamp, result, true);\n return result;\n }\n \n // Execute safe tools normally\n try {\n const originalResult = await this.executeSafeTool(toolName, args);\n const result: ReadOnlyResult = {\n ...originalResult,\n originalTool: toolName,\n wasBlocked: false,\n insights: this.extractInsights(toolName, args, originalResult)\n };\n \n this.logExecution(toolName, args, timestamp, result, false);\n return result;\n } catch (error) {\n const result: ReadOnlyResult = {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n originalTool: toolName,\n wasBlocked: false\n };\n \n this.logExecution(toolName, args, timestamp, result, false);\n return result;\n }\n }\n\n /**\n * Check if a tool is destructive (modifies files)\n */\n private isDestructiveTool(toolName: string): boolean {\n const destructiveTools = [\n 'write',\n 'edit', \n 'str_replace',\n 'create',\n 'delete',\n 'move',\n 'rename',\n 'multiedit',\n 'bash' // Most bash commands can be destructive\n ];\n \n return destructiveTools.includes(toolName.toLowerCase());\n }\n\n /**\n * Simulate execution of destructive tools for analysis\n */\n private async simulateDestructiveTool(toolName: string, args: any): Promise<ReadOnlyResult> {\n const insights: string[] = [];\n let simulationResult: any = null;\n\n switch (toolName.toLowerCase()) {\n case 'write':\n case 'create':\n simulationResult = await this.simulateFileCreation(args);\n insights.push(`Would create file: ${args.file_path || args.path}`);\n insights.push(`Content length: ${args.content?.length || 0} characters`);\n break;\n \n case 'edit':\n case 'str_replace':\n simulationResult = await this.simulateFileEdit(args);\n insights.push(`Would modify file: ${args.file_path || args.path}`);\n insights.push(`Change type: ${args.old_string ? 'string replacement' : 'content edit'}`);\n break;\n \n case 'multiedit':\n simulationResult = await this.simulateMultiEdit(args);\n insights.push(`Would perform multi-file operation on ${args.edits?.length || 0} files`);\n break;\n \n case 'bash':\n simulationResult = await this.simulateBashCommand(args);\n insights.push(`Would execute: ${args.command}`);\n insights.push(`Command type: ${this.categorizeBashCommand(args.command)}`);\n break;\n \n default:\n simulationResult = { simulated: true, action: `${toolName} operation` };\n insights.push(`Would execute ${toolName} with provided arguments`);\n }\n\n return {\n success: true,\n output: `[PLAN MODE - READ ONLY] Simulated ${toolName} operation`,\n originalTool: toolName,\n wasBlocked: true,\n simulationResult,\n insights\n };\n }\n\n /**\n * Execute safe (read-only) tools\n */\n private async executeSafeTool(toolName: string, args: any): Promise<ToolResult> {\n // Use a simulated tool execution approach since we don't have direct access\n // to individual tool methods. For Plan Mode, we'll simulate the results.\n return this.simulateReadOnlyToolExecution({ name: toolName, arguments: args });\n }\n \n /**\n * Simulate tool execution for read-only operations\n */\n private simulateReadOnlyToolExecution(toolCall: { name: string; arguments: any }): ToolResult {\n const { name, arguments: args } = toolCall;\n \n switch (name.toLowerCase()) {\n case 'view_file':\n case 'read':\n return {\n success: true,\n output: `[PLAN MODE] Would read file: ${args.file_path || args.path}\\n` +\n `Lines: ${args.start_line || 1}-${args.end_line || 'end'}`\n };\n \n case 'search':\n case 'grep':\n return {\n success: true,\n output: `[PLAN MODE] Would search for pattern: ${args.pattern || args.query}\\n` +\n `In path: ${args.path || 'current directory'}`\n };\n \n case 'bash':\n if (this.isSafeBashCommand(args.command)) {\n return {\n success: true,\n output: `[PLAN MODE] Would execute safe command: ${args.command}`\n };\n } else {\n return {\n success: false,\n error: `Command blocked in Plan Mode (potentially destructive): ${args.command}`\n };\n }\n \n default:\n return {\n success: true,\n output: `[PLAN MODE] Would execute ${name} with provided arguments`\n };\n }\n }\n\n /**\n * Check if bash command is safe (read-only)\n */\n private isSafeBashCommand(command: string): boolean {\n const safeCommands = [\n 'ls', 'cat', 'head', 'tail', 'grep', 'find', 'wc', 'sort', 'uniq',\n 'pwd', 'whoami', 'date', 'ps', 'top', 'df', 'du', 'free',\n 'git status', 'git log', 'git diff', 'git branch', 'git show',\n 'npm list', 'yarn list', 'pip list', 'composer show'\n ];\n \n const cmd = command.trim().toLowerCase();\n \n // Check if command starts with any safe command\n return safeCommands.some(safe => cmd.startsWith(safe)) &&\n !this.containsDestructiveOperators(command);\n }\n\n /**\n * Check for destructive operators in bash commands\n */\n private containsDestructiveOperators(command: string): boolean {\n const destructivePatterns = [\n '>', // Redirect (can overwrite files)\n '>>', // Append redirect\n 'rm ', 'mv ', 'cp ', 'mkdir ', 'rmdir ',\n 'chmod ', 'chown ', 'ln ',\n 'curl.*-o', 'wget.*-o', // Download with output\n 'sudo ', 'su ',\n '&&.*rm', '||.*rm', // Chained destructive commands\n ];\n \n return destructivePatterns.some(pattern => {\n const regex = new RegExp(pattern, 'i');\n return regex.test(command);\n });\n }\n\n /**\n * Simulate file creation\n */\n private async simulateFileCreation(args: any): Promise<any> {\n const filePath = args.file_path || args.path;\n const content = args.content || '';\n \n return {\n action: 'create_file',\n path: filePath,\n contentLength: content.length,\n contentPreview: content.substring(0, 200),\n estimatedLines: content.split('\\n').length,\n fileType: this.getFileType(filePath)\n };\n }\n\n /**\n * Simulate file editing\n */\n private async simulateFileEdit(args: any): Promise<any> {\n const filePath = args.file_path || args.path;\n \n try {\n // Just simulate the edit without actually reading the file\n // In Plan Mode, we don't need the actual content\n return {\n action: 'edit_file',\n path: filePath,\n simulated: true,\n old_string: args.old_string || '',\n new_string: args.new_string || '',\n change_preview: `Would replace \"${args.old_string || 'content'}\" with \"${args.new_string || 'new content'}\"`\n };\n } catch (error) {\n return {\n action: 'edit_file',\n path: filePath,\n error: error instanceof Error ? error.message : 'Analysis failed'\n };\n }\n }\n\n /**\n * Simulate multi-file editing\n */\n private async simulateMultiEdit(args: any): Promise<any> {\n const edits = args.edits || [];\n \n return {\n action: 'multi_edit',\n fileCount: 1, // args.file_path ? 1 : 0,\n editCount: edits.length,\n estimatedChanges: edits.reduce((sum: number, edit: any) => {\n return sum + ((edit.new_string?.length || 0) - (edit.old_string?.length || 0));\n }, 0)\n };\n }\n\n /**\n * Simulate bash command execution\n */\n private async simulateBashCommand(args: any): Promise<any> {\n const command = args.command || '';\n \n return {\n action: 'bash_command',\n command,\n category: this.categorizeBashCommand(command),\n risk: this.assessCommandRisk(command),\n wouldExecute: this.isSafeBashCommand(command)\n };\n }\n\n /**\n * Categorize bash command type\n */\n private categorizeBashCommand(command: string): string {\n const cmd = command.trim().toLowerCase();\n \n if (cmd.startsWith('git ')) return 'version_control';\n if (cmd.startsWith('npm ') || cmd.startsWith('yarn ') || cmd.startsWith('pnpm ')) return 'package_manager';\n if (cmd.startsWith('ls') || cmd.startsWith('find') || cmd.startsWith('grep')) return 'file_exploration';\n if (cmd.startsWith('cat') || cmd.startsWith('head') || cmd.startsWith('tail')) return 'file_reading';\n if (cmd.includes('rm ') || cmd.includes('mv ') || cmd.includes('cp ')) return 'file_modification';\n if (cmd.includes('>') || cmd.includes('>>')) return 'file_creation';\n if (cmd.startsWith('mkdir') || cmd.startsWith('rmdir')) return 'directory_management';\n if (cmd.startsWith('chmod') || cmd.startsWith('chown')) return 'permission_management';\n \n return 'general';\n }\n\n /**\n * Assess command risk level\n */\n private assessCommandRisk(command: string): 'low' | 'medium' | 'high' {\n if (this.isSafeBashCommand(command)) return 'low';\n if (command.includes('rm ') || command.includes('sudo ')) return 'high';\n return 'medium';\n }\n\n /**\n * Extract insights from tool execution\n */\n private extractInsights(toolName: string, args: any, result: ToolResult): string[] {\n const insights: string[] = [];\n \n switch (toolName.toLowerCase()) {\n case 'read':\n if (result.success && result.output) {\n const lines = result.output.split('\\n').length;\n insights.push(`File contains ${lines} lines`);\n \n // Detect file type insights\n const fileType = this.getFileType(args.file_path);\n if (fileType) {\n insights.push(`File type: ${fileType}`);\n }\n }\n break;\n \n case 'grep':\n if (result.success && result.output) {\n const matches = result.output.split('\\n').filter(line => line.trim()).length;\n insights.push(`Found ${matches} matches for pattern`);\n }\n break;\n \n case 'ls':\n if (result.success && result.output) {\n const items = result.output.split('\\n').filter(line => line.trim()).length;\n insights.push(`Directory contains ${items} items`);\n }\n break;\n }\n \n return insights;\n }\n\n /**\n * Get file type from path\n */\n private getFileType(filePath: string): string {\n const extension = filePath.split('.').pop()?.toLowerCase();\n \n const typeMap: Record<string, string> = {\n 'js': 'JavaScript',\n 'ts': 'TypeScript',\n 'jsx': 'React JSX',\n 'tsx': 'React TSX',\n 'py': 'Python',\n 'java': 'Java',\n 'go': 'Go',\n 'rs': 'Rust',\n 'json': 'JSON',\n 'md': 'Markdown',\n 'yml': 'YAML',\n 'yaml': 'YAML',\n 'html': 'HTML',\n 'css': 'CSS',\n 'scss': 'SCSS'\n };\n \n return typeMap[extension || ''] || 'Unknown';\n }\n\n /**\n * Log tool execution\n */\n private logExecution(\n toolName: string, \n args: any, \n timestamp: Date, \n result: ReadOnlyResult, \n blocked: boolean\n ): void {\n this.executionLog.push({\n toolName,\n arguments: args,\n timestamp,\n result,\n blocked\n });\n \n // Add insights to global insights list\n if (result.insights) {\n this.insights.push(...result.insights);\n }\n }\n\n /**\n * Get execution summary\n */\n getExecutionSummary(): {\n totalExecutions: number;\n blockedExecutions: number;\n allowedExecutions: number;\n insights: string[];\n toolsUsed: string[];\n } {\n const toolsUsed = [...new Set(this.executionLog.map(log => log.toolName))];\n const blockedCount = this.executionLog.filter(log => log.blocked).length;\n \n return {\n totalExecutions: this.executionLog.length,\n blockedExecutions: blockedCount,\n allowedExecutions: this.executionLog.length - blockedCount,\n insights: [...new Set(this.insights)], // Deduplicate insights\n toolsUsed\n };\n }\n\n /**\n * Get detailed execution log\n */\n getExecutionLog(): ToolExecutionLog[] {\n return [...this.executionLog];\n }\n\n /**\n * Clear execution log and insights\n */\n clearLog(): void {\n this.executionLog = [];\n this.insights = [];\n }\n}","/**\n * Plan Mode State Management Hook\n * \n * Manages the state and lifecycle of Claude Code's Plan Mode feature.\n * Handles activation, phase transitions, and state persistence.\n */\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { EventEmitter } from 'events';\nimport {\n PlanModeState,\n PlanModePhase,\n PlanModeEvents,\n PlanModeActivationOptions,\n ImplementationPlan,\n ExplorationData,\n PlanModeSettings\n} from '../types/plan-mode.js';\nimport { CodebaseExplorer } from '../services/codebase-explorer.js';\nimport { PlanGenerator } from '../services/plan-generator.js';\nimport { ReadOnlyToolExecutor } from '../services/read-only-tool-executor.js';\nimport { GrokAgent } from '../agent/grok-agent.js';\n\n// Default plan mode settings\nconst DEFAULT_SETTINGS: PlanModeSettings = {\n maxExplorationDepth: 5,\n maxFileSize: 1024 * 1024, // 1MB\n planGenerationTimeout: 30000, // 30 seconds\n enableDetailedLogging: true,\n autoSavePlans: true,\n planSaveDirectory: '.xcli/plans'\n};\n\n// Initial plan mode state\nconst INITIAL_STATE: PlanModeState = {\n active: false,\n phase: 'inactive',\n currentPlan: null,\n userApproval: false,\n explorationData: null,\n sessionStartTime: null\n};\n\n/**\n * Custom hook for managing plan mode state and operations\n */\nexport function usePlanMode(settings: Partial<PlanModeSettings> = {}, agent?: GrokAgent) {\n const [state, setState] = useState<PlanModeState>(INITIAL_STATE);\n const [eventEmitter] = useState(() => new EventEmitter());\n const [mergedSettings] = useState<PlanModeSettings>({ ...DEFAULT_SETTINGS, ...settings });\n \n // Initialize services when agent is available\n const [codebaseExplorer] = useState(() => \n agent ? new CodebaseExplorer(mergedSettings) : null\n );\n const [planGenerator] = useState(() => \n agent ? new PlanGenerator(agent) : null\n );\n const [readOnlyExecutor] = useState(() => \n agent ? new ReadOnlyToolExecutor(agent) : null\n );\n\n // Emit events for state changes\n const emitEvent = useCallback(<K extends keyof PlanModeEvents>(\n event: K,\n data: PlanModeEvents[K]\n ) => {\n eventEmitter.emit(event, data);\n \n // Log events if detailed logging is enabled\n if (mergedSettings.enableDetailedLogging) {\n console.log(`[PlanMode] ${event}:`, data);\n }\n }, [eventEmitter, mergedSettings.enableDetailedLogging]);\n\n // Activate plan mode\n const activatePlanMode = useCallback(async (_options: PlanModeActivationOptions = {}) => {\n if (state.active) {\n console.warn('[PlanMode] Already active, ignoring activation request');\n return false;\n }\n\n const newState: PlanModeState = {\n ...INITIAL_STATE,\n active: true,\n phase: 'analysis',\n sessionStartTime: new Date()\n };\n\n setState(newState);\n emitEvent('plan-mode-activated', { timestamp: new Date() });\n emitEvent('phase-changed', { \n from: 'inactive', \n to: 'analysis', \n timestamp: new Date() \n });\n\n return true;\n }, [state.active, emitEvent]);\n\n // Deactivate plan mode\n const deactivatePlanMode = useCallback((reason: string = 'user_requested') => {\n if (!state.active) {\n return;\n }\n\n setState(INITIAL_STATE);\n emitEvent('plan-mode-deactivated', { timestamp: new Date(), reason });\n emitEvent('phase-changed', { \n from: state.phase, \n to: 'inactive', \n timestamp: new Date() \n });\n }, [state.active, state.phase, emitEvent]);\n\n // Change phase within plan mode\n const changePhase = useCallback((newPhase: PlanModePhase) => {\n if (!state.active || state.phase === newPhase) {\n return;\n }\n\n const oldPhase = state.phase;\n setState(prev => ({ ...prev, phase: newPhase }));\n emitEvent('phase-changed', { \n from: oldPhase, \n to: newPhase, \n timestamp: new Date() \n });\n }, [state.active, state.phase, emitEvent]);\n\n // Update exploration data\n const updateExplorationData = useCallback((data: ExplorationData) => {\n setState(prev => ({ ...prev, explorationData: data }));\n \n // Emit progress event\n const progress = data.exploredPaths.length / (mergedSettings.maxExplorationDepth * 10); // Rough progress calculation\n emitEvent('exploration-progress', { \n progress: Math.min(progress, 1), \n currentPath: data.exploredPaths[data.exploredPaths.length - 1] || ''\n });\n }, [emitEvent, mergedSettings.maxExplorationDepth]);\n\n // Set implementation plan\n const setImplementationPlan = useCallback((plan: ImplementationPlan) => {\n setState(prev => ({ ...prev, currentPlan: plan }));\n emitEvent('plan-generated', { plan, timestamp: new Date() });\n \n // Auto-save plan if enabled\n if (mergedSettings.autoSavePlans) {\n // TODO: Implement plan saving to filesystem\n console.log('[PlanMode] Auto-saving plan:', plan.title);\n }\n }, [emitEvent, mergedSettings.autoSavePlans]);\n\n // Approve current plan\n const approvePlan = useCallback(() => {\n if (!state.currentPlan) {\n console.warn('[PlanMode] No plan to approve');\n return false;\n }\n\n setState(prev => ({ ...prev, userApproval: true, phase: 'approved' }));\n emitEvent('plan-approved', { plan: state.currentPlan, timestamp: new Date() });\n return true;\n }, [state.currentPlan, emitEvent]);\n\n // Reject current plan\n const rejectPlan = useCallback((reason: string = 'user_rejected') => {\n if (!state.currentPlan) {\n console.warn('[PlanMode] No plan to reject');\n return false;\n }\n\n setState(prev => ({ ...prev, userApproval: false, phase: 'rejected' }));\n emitEvent('plan-rejected', { \n plan: state.currentPlan, \n reason, \n timestamp: new Date() \n });\n return true;\n }, [state.currentPlan, emitEvent]);\n\n // Start execution of approved plan\n const startExecution = useCallback(() => {\n if (!state.currentPlan || !state.userApproval) {\n console.warn('[PlanMode] Cannot start execution: no approved plan');\n return false;\n }\n\n emitEvent('execution-started', { plan: state.currentPlan, timestamp: new Date() });\n \n // Deactivate plan mode when execution starts\n deactivatePlanMode('execution_started');\n return true;\n }, [state.currentPlan, state.userApproval, emitEvent, deactivatePlanMode]);\n\n // Start codebase exploration\n const startExploration = useCallback(async (userRequest?: string) => {\n if (!codebaseExplorer || !state.active) {\n console.warn('[PlanMode] Cannot start exploration: explorer not available or plan mode not active');\n return false;\n }\n\n try {\n changePhase('analysis');\n \n const explorationData = await codebaseExplorer.exploreCodebase({\n rootPath: process.cwd(),\n maxDepth: mergedSettings.maxExplorationDepth,\n maxFileSize: mergedSettings.maxFileSize\n });\n\n updateExplorationData(explorationData);\n \n // If we have a user request, automatically proceed to strategy generation\n if (userRequest && planGenerator) {\n await generatePlan(userRequest);\n } else {\n changePhase('strategy');\n }\n \n return true;\n } catch (error) {\n console.error('[PlanMode] Exploration failed:', error);\n return false;\n }\n }, [codebaseExplorer, state.active, changePhase, updateExplorationData, mergedSettings, planGenerator]);\n\n // Generate implementation plan\n const generatePlan = useCallback(async (userRequest: string) => {\n if (!planGenerator || !state.explorationData) {\n console.warn('[PlanMode] Cannot generate plan: generator not available or no exploration data');\n return false;\n }\n\n try {\n changePhase('strategy');\n \n const plan = await planGenerator.generatePlan({\n userRequest,\n explorationData: state.explorationData\n });\n\n setImplementationPlan(plan);\n changePhase('presentation');\n \n return true;\n } catch (error) {\n console.error('[PlanMode] Plan generation failed:', error);\n return false;\n }\n }, [planGenerator, state.explorationData, changePhase, setImplementationPlan]);\n\n // Execute tool in read-only mode\n const executeReadOnlyTool = useCallback(async (toolName: string, args: any) => {\n if (!readOnlyExecutor) {\n console.warn('[PlanMode] Read-only executor not available');\n return null;\n }\n\n return await readOnlyExecutor.executeReadOnly(toolName, args);\n }, [readOnlyExecutor]);\n\n // Subscribe to events\n const onEvent = useCallback(<K extends keyof PlanModeEvents>(\n event: K,\n listener: (data: PlanModeEvents[K]) => void\n ) => {\n eventEmitter.on(event, listener);\n return () => eventEmitter.off(event, listener);\n }, [eventEmitter]);\n\n // Get session duration\n const getSessionDuration = useCallback(() => {\n if (!state.sessionStartTime) return 0;\n return Date.now() - state.sessionStartTime.getTime();\n }, [state.sessionStartTime]);\n\n // Check if plan mode is in a specific phase\n const isInPhase = useCallback((phase: PlanModePhase) => {\n return state.active && state.phase === phase;\n }, [state.active, state.phase]);\n\n // Get current progress percentage\n const getProgress = useCallback(() => {\n switch (state.phase) {\n case 'inactive':\n return 0;\n case 'analysis':\n // Progress based on exploration data\n if (!state.explorationData) return 0.1;\n return Math.min(0.4, 0.1 + (state.explorationData.exploredPaths.length / 20) * 0.3);\n case 'strategy':\n return 0.5;\n case 'presentation':\n return 0.8;\n case 'approved':\n case 'rejected':\n return 1.0;\n default:\n return 0;\n }\n }, [state.phase, state.explorationData]);\n\n // Auto-cleanup on unmount\n useEffect(() => {\n return () => {\n if (state.active) {\n deactivatePlanMode('component_unmount');\n }\n };\n }, [state.active, deactivatePlanMode]);\n\n return {\n // State\n state,\n settings: mergedSettings,\n \n // Computed properties\n isActive: state.active,\n currentPhase: state.phase,\n hasApprovedPlan: state.userApproval && !!state.currentPlan,\n sessionDuration: getSessionDuration(),\n progress: getProgress(),\n \n // Actions\n activatePlanMode,\n deactivatePlanMode,\n changePhase,\n updateExplorationData,\n setImplementationPlan,\n approvePlan,\n rejectPlan,\n startExecution,\n \n // Plan Mode specific actions\n startExploration,\n generatePlan,\n executeReadOnlyTool,\n \n // Utilities\n onEvent,\n isInPhase,\n \n // Data accessors\n explorationData: state.explorationData,\n currentPlan: state.currentPlan,\n \n // Service accessors\n readOnlyExecutor\n };\n}","import React, { useMemo } from \"react\";\nimport { Box, Text } from \"ink\";\n\ninterface CommandSuggestion {\n command: string;\n description: string;\n}\n\ninterface CommandSuggestionsProps {\n suggestions: CommandSuggestion[];\n input: string;\n selectedIndex: number;\n isVisible: boolean;\n}\n\nexport const MAX_SUGGESTIONS = 8;\n\nexport function filterCommandSuggestions<T extends { command: string }>(\n suggestions: T[],\n input: string\n): T[] {\n const lowerInput = input.toLowerCase();\n return suggestions\n .filter((s) => s.command.toLowerCase().startsWith(lowerInput))\n .slice(0, MAX_SUGGESTIONS);\n}\n\nexport function CommandSuggestions({\n suggestions,\n input,\n selectedIndex,\n isVisible,\n}: CommandSuggestionsProps) {\n if (!isVisible) return null;\n\n const filteredSuggestions = useMemo(\n () => filterCommandSuggestions(suggestions, input),\n [suggestions, input]\n );\n\n return (\n <Box marginTop={1} flexDirection=\"column\">\n {filteredSuggestions.map((suggestion, index) => (\n <Box key={index} paddingLeft={1}>\n <Text\n color={index === selectedIndex ? \"black\" : \"white\"}\n backgroundColor={index === selectedIndex ? \"cyan\" : undefined}\n >\n {suggestion.command}\n </Text>\n <Box marginLeft={1}>\n <Text color=\"gray\">{suggestion.description}</Text>\n </Box>\n </Box>\n ))}\n <Box marginTop={1}>\n <Text color=\"gray\" dimColor>\n ↑↓ navigate • Enter/Tab select • Esc cancel\n </Text>\n </Box>\n </Box>\n );\n}","import { getSettingsManager } from './settings-manager.js';\nimport type { UserSettings, ProjectSettings } from './settings-manager.js';\n\nexport interface ModelOption {\n model: string;\n}\n\nexport type ModelConfig = string;\n\n// Re-export interfaces for backward compatibility\nexport { UserSettings, ProjectSettings };\n\n/**\n * Get the effective current model\n * Priority: project current model > user default model > system default\n */\nexport function getCurrentModel(): string {\n const manager = getSettingsManager();\n return manager.getCurrentModel();\n}\n\n/**\n * Load model configuration\n * Priority: user-settings.json models > default hardcoded\n */\nexport function loadModelConfig(): ModelOption[] {\n const manager = getSettingsManager();\n const models = manager.getAvailableModels();\n\n return models.map(model => ({\n model: model.trim()\n }));\n}\n\n/**\n * Get default models list\n */\nexport function getDefaultModels(): string[] {\n const manager = getSettingsManager();\n return manager.getAvailableModels();\n}\n\n/**\n * Update the current model in project settings\n */\nexport function updateCurrentModel(modelName: string): void {\n const manager = getSettingsManager();\n manager.setCurrentModel(modelName);\n}\n\n/**\n * Update the user's default model preference\n */\nexport function updateDefaultModel(modelName: string): void {\n const manager = getSettingsManager();\n manager.updateUserSetting('defaultModel', modelName);\n}\n","import * as ops from 'fs-extra';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nexport interface ClaudeMdParser {\n parseClaude(rootPath: string): Promise<{ exists: boolean; content: string; hasDocumentationSection: boolean }>;\n updateClaude(rootPath: string, documentationSection: string): Promise<{ success: boolean; message: string }>;\n generateDocumentationSection(): string;\n}\n\nexport class ClaudeMdParserImpl implements ClaudeMdParser {\n \n async parseClaude(rootPath: string): Promise<{ exists: boolean; content: string; hasDocumentationSection: boolean }> {\n const claudePath = path.join(rootPath, 'CLAUDE.md');\n \n if (!existsSync(claudePath)) {\n return {\n exists: false,\n content: '',\n hasDocumentationSection: false\n };\n }\n\n try {\n const content = await ops.promises.readFile(claudePath, 'utf-8');\n const hasDocumentationSection = content.includes('Documentation System Workflow') || \n content.includes('.agent documentation system');\n\n return {\n exists: true,\n content,\n hasDocumentationSection\n };\n } catch (error) {\n return {\n exists: false,\n content: '',\n hasDocumentationSection: false\n };\n }\n }\n\n async updateClaude(rootPath: string, documentationSection: string): Promise<{ success: boolean; message: string }> {\n const claudePath = path.join(rootPath, 'CLAUDE.md');\n \n try {\n const { exists, content, hasDocumentationSection } = await this.parseClaude(rootPath);\n\n if (hasDocumentationSection) {\n return {\n success: true,\n message: '✅ CLAUDE.md already contains documentation system instructions'\n };\n }\n\n let newContent: string;\n\n if (exists) {\n // Append to existing CLAUDE.md\n newContent = content + '\\n\\n' + documentationSection;\n } else {\n // Create new CLAUDE.md with basic header\n newContent = `# CLAUDE.md\n\nThis document provides context and instructions for Claude Code when working with this project.\n\n${documentationSection}`;\n }\n\n await ops.promises.writeFile(claudePath, newContent);\n\n return {\n success: true,\n message: exists \n ? '✅ Updated existing CLAUDE.md with documentation system instructions'\n : '✅ Created CLAUDE.md with documentation system instructions'\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to update CLAUDE.md: ${error.message}`\n };\n }\n }\n\n generateDocumentationSection(): string {\n return `## 📚 Documentation System Workflow\n\n### Before Planning Features:\n1. **Read \\`.agent/README.md\\`** for project overview\n2. **Check \\`.agent/system/\\`** for architecture context\n3. **Review \\`.agent/tasks/\\`** for related work\n4. **Scan \\`.agent/sop/\\`** for established patterns\n\n### During Implementation:\n- Store PRDs in \\`.agent/tasks/\\` before coding\n- Reference architecture docs for consistency\n- Follow established patterns from SOPs\n- Use cross-references between .agent docs\n\n### After Implementation:\n- Run \\`/update-agent-docs\\` to capture changes\n- Update \\`.agent/system/\\` if architecture changed\n- Add new SOPs for repeatable processes\n- Link related tasks and documents\n\n### Documentation Rules:\n- Keep system docs as single source of truth\n- Use relative links between .agent documents \n- Maintain concise, actionable content\n- Update cross-references when adding new docs\n\n### Token Optimization:\n- Read .agent docs hierarchically (README → critical-state → relevant docs)\n- Expect ~600 tokens for full context vs 3000+ without system\n- Use .agent structure to avoid redundant codebase scanning\n- Reference existing documentation rather than recreating context\n\n---\n*This section was added by the X-CLI documentation system*`;\n }\n}\n\nexport const claudeMdParser = new ClaudeMdParserImpl();","import * as ops from 'fs-extra';\nimport path from 'path';\nimport { existsSync } from 'fs';\nimport { claudeMdParser } from './claude-md-parser.js';\n\nexport interface AgentSystemConfig {\n projectName: string;\n projectType: 'x-cli' | 'external';\n rootPath: string;\n}\n\nexport class AgentSystemGenerator {\n private config: AgentSystemConfig;\n\n constructor(config: AgentSystemConfig) {\n this.config = config;\n }\n\n async generateAgentSystem(): Promise<{ success: boolean; message: string; filesCreated: string[] }> {\n const agentPath = path.join(this.config.rootPath, '.agent');\n const filesCreated: string[] = [];\n\n try {\n // Check if .agent already exists\n if (existsSync(agentPath)) {\n return {\n success: false,\n message: '.agent directory already exists. Use --rebuild to recreate.',\n filesCreated: []\n };\n }\n\n // Create .agent directory structure\n await ops.mkdir(agentPath, { recursive: true });\n await ops.mkdir(path.join(agentPath, 'system'), { recursive: true });\n await ops.mkdir(path.join(agentPath, 'tasks'), { recursive: true });\n await ops.mkdir(path.join(agentPath, 'sop'), { recursive: true });\n await ops.mkdir(path.join(agentPath, 'incidents'), { recursive: true });\n await ops.mkdir(path.join(agentPath, 'guardrails'), { recursive: true });\n await ops.mkdir(path.join(agentPath, 'commands'), { recursive: true });\n\n // Generate README.md (index file)\n const readmeContent = this.generateReadmeContent();\n await ops.promises.writeFile(path.join(agentPath, 'README.md'), readmeContent);\n filesCreated.push('.agent/README.md');\n\n // Generate system documentation\n const systemFiles = await this.generateSystemDocs(agentPath);\n filesCreated.push(...systemFiles);\n\n // Generate initial SOP\n const sopFiles = await this.generateInitialSOPs(agentPath);\n filesCreated.push(...sopFiles);\n\n // Generate example task/PRD\n const taskFiles = await this.generateExampleTask(agentPath);\n filesCreated.push(...taskFiles);\n\n // Generate command documentation\n const commandFiles = await this.generateCommandDocs(agentPath);\n filesCreated.push(...commandFiles);\n\n // Update CLAUDE.md with documentation workflow\n const documentationSection = claudeMdParser.generateDocumentationSection();\n const claudeResult = await claudeMdParser.updateClaude(this.config.rootPath, documentationSection);\n \n let claudeMessage = '';\n if (claudeResult.success) {\n claudeMessage = `\\n\\n${claudeResult.message}`;\n if (!claudeResult.message.includes('already contains')) {\n filesCreated.push('CLAUDE.md');\n }\n }\n\n return {\n success: true,\n message: `✅ Agent documentation system created successfully!\\n\\nFiles created:\\n${filesCreated.map(f => ` - ${f}`).join('\\n')}${claudeMessage}`,\n filesCreated\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to create agent system: ${error.message}`,\n filesCreated\n };\n }\n }\n\n private generateReadmeContent(): string {\n return `# 📚 .agent Documentation System\n\n## Overview\nThis directory contains AI agent documentation for ${this.config.projectName}. This system helps AI agents understand the project context efficiently without scanning the entire codebase.\n\n## 📁 Directory Structure\n\n### 📋 system/\nCore project information and architecture:\n- **architecture.md** - Project structure and design patterns\n- **api-schema.md** - API endpoints and data schemas \n- **database-schema.md** - Data models and database structure\n- **critical-state.md** - Current system state snapshot\n\n### 📝 tasks/\nProduct requirement documents and feature specifications:\n- Store PRDs before implementation\n- Reference related architecture and dependencies\n- Track implementation progress\n\n### 📖 sop/\nStandard operating procedures and workflows:\n- Development patterns and conventions\n- Deployment and maintenance procedures\n- Code review and testing guidelines\n\n### 🚨 incidents/\nDocumented failures with root cause analysis:\n- Error patterns and their fixes\n- Recovery procedures\n- Prevention strategies\n\n### 🛡️ guardrails/\nEnforceable rules to prevent recurring mistakes:\n- Naming conventions\n- Configuration constraints\n- Implementation patterns\n\n### ⚙️ commands/\nDocumentation for documentation system commands:\n- Usage guides for /init-agent, /update-agent-docs, etc.\n- Integration workflows\n\n## 🎯 Usage Guidelines\n\n### For AI Agents\n1. **Always read README.md first** - Get project overview (this file)\n2. **Check system/critical-state.md** - Understand current architecture\n3. **Review relevant tasks/** - Check for related work or conflicts\n4. **Follow sop/** patterns - Use established conventions\n5. **Check guardrails/** - Avoid known failure patterns\n\n### For Updates\n- Run \\`/update-agent-docs\\` after significant changes\n- Add new PRDs to tasks/ before implementation\n- Update system docs when architecture changes\n- Document new patterns in sop/\n\n## 🔗 Cross-References\n- Main project documentation: ../README.md\n- Configuration: ../.xcli/settings.json\n- Build instructions: ../package.json\n\n---\n*Generated by X-CLI Documentation System*\n*Last updated: ${new Date().toISOString().split('T')[0]}*\n`;\n }\n\n private async generateSystemDocs(agentPath: string): Promise<string[]> {\n const systemPath = path.join(agentPath, 'system');\n const files: string[] = [];\n\n // Architecture overview\n const archContent = this.config.projectType === 'x-cli' \n ? this.generateGrokArchitecture() \n : this.generateExternalArchitecture();\n \n await ops.promises.writeFile(path.join(systemPath, 'architecture.md'), archContent);\n files.push('.agent/system/architecture.md');\n\n // Critical state snapshot\n const criticalStateContent = this.generateCriticalState();\n await ops.promises.writeFile(path.join(systemPath, 'critical-state.md'), criticalStateContent);\n files.push('.agent/system/critical-state.md');\n\n // API schema (if applicable)\n const apiContent = this.generateApiSchema();\n await ops.promises.writeFile(path.join(systemPath, 'api-schema.md'), apiContent);\n files.push('.agent/system/api-schema.md');\n\n return files;\n }\n\n private generateGrokArchitecture(): string {\n return `# 🏗️ X-CLI Architecture\n\n## Project Type\n**CLI Application** - Conversational AI tool with terminal interface\n\n## Technology Stack\n- **Language**: TypeScript (ES Modules)\n- **Runtime**: Node.js (Bun recommended)\n- **UI**: Ink (React for terminal)\n- **Build**: TypeScript compiler + tsup for dual builds\n- **Package Manager**: Bun/NPM\n\n## Core Architecture\n\n### 🧠 Agent System (\\`src/agent/\\`)\n- **GrokAgent**: Central orchestration with streaming, tool execution\n- **Conversation Management**: Chat history and context handling\n- **Model Integration**: X.AI Grok models via OpenAI-compatible API\n\n### 🛠️ Tool System (\\`src/tools/\\`)\n- **Modular Design**: Independent tools for specific operations\n- **Core Tools**: File operations, bash execution, search\n- **Advanced Tools**: Multi-file editing, code analysis, operation history\n- **Documentation Tools**: NEW - Agent system generation and maintenance\n\n### 🖥️ UI Components (\\`src/ui/\\`)\n- **Chat Interface**: Streaming responses with tool execution display\n- **Input Handling**: Enhanced terminal input with history and shortcuts\n- **Component Library**: Reusable Ink components for consistent UX\n\n### 🔌 MCP Integration (\\`src/mcp/\\`)\n- **Model Context Protocol**: Extensible server integration\n- **Supported Servers**: Linear, GitHub, custom servers\n- **Transport Types**: stdio, HTTP, SSE\n\n### ⚙️ Configuration (\\`src/utils/\\`)\n- **Settings Management**: User and project-level config\n- **Model Configuration**: Support for multiple AI models\n- **File Locations**: ~/.xcli/ for user, .xcli/ for project\n\n## Build & Distribution\n- **Development**: \\`bun run dev\\` for live reload\n- **Production**: \\`npm run build\\` → dist/ directory\n- **Installation**: NPM global package\n\n## Extension Points\n- **Tool System**: Add new tools in src/tools/\n- **MCP Servers**: Configure external service integration\n- **UI Components**: Extend terminal interface capabilities\n- **Commands**: Add slash commands in input handler\n\n## Current Capabilities\n✅ File operations (read, write, edit, multi-file)\n✅ Bash command execution\n✅ Code analysis and refactoring\n✅ Search and replace operations\n✅ MCP server integration\n✅ Operation history and undo/redo\n✅ Project-specific configuration\n\n## Planned Enhancements\n🔲 Documentation generation system\n🔲 Subagent framework for context efficiency\n🔲 Self-healing guardrails\n🔲 Advanced code intelligence\n🔲 CI/CD integration\n\n*Updated: ${new Date().toISOString().split('T')[0]}*\n`;\n }\n\n private generateExternalArchitecture(): string {\n return `# 🏗️ Project Architecture\n\n## Project Overview\nExternal project documented using X-CLI's .agent system.\n\n## Technology Stack\n*To be analyzed and documented*\n\n## Core Components\n*To be identified during project analysis*\n\n## Current State\n- Project type: External\n- Documentation system: Initialized\n- Architecture analysis: Pending\n\n## Next Steps\n1. Run project analysis to identify:\n - Technology stack and frameworks\n - Core components and modules\n - Build and deployment processes\n - Dependencies and configurations\n\n2. Update this file with findings\n3. Create specific documentation for key components\n\n*This is a template - update after project analysis*\n*Updated: ${new Date().toISOString().split('T')[0]}*\n`;\n }\n\n private generateCriticalState(): string {\n const timestamp = new Date().toISOString();\n \n if (this.config.projectType === 'x-cli') {\n return `# 🔧 Current System State\n\n## Architecture Overview\n- **Type**: CLI application with React/Ink UI\n- **Language**: TypeScript (ESM modules)\n- **Build**: TypeScript compiler + tsup dual build (CJS/ESM)\n- **Package**: NPM global installation\n- **Runtime**: Node.js (Bun recommended)\n\n## Core Components\n- **Commands**: Slash-based in src/commands/ (limited - only MCP command currently)\n- **Tools**: Modular tools in src/tools/ (extensive tool system)\n- **UI**: Ink components in src/ui/\n- **Settings**: File-based .xcli/settings.json + ~/.xcli/config.json\n- **Input**: Enhanced terminal input with history in src/hooks/\n\n## Command System\n- **Slash Commands**: Handled in useInputHandler.ts\n- **Current Commands**: /help, /clear, /models, /commit-and-push, /exit\n- **Command Registration**: Direct implementation in input handler\n- **Extension Pattern**: Add to handleDirectCommand function\n\n## Authentication & Storage\n- **Auth**: Environment variable X_API_KEY or user settings\n- **Storage**: Local file system only\n- **Database**: None (settings via JSON files)\n- **MCP**: Optional server integration\n\n## Current Capabilities\n- ✅ File operations (read, write, edit, multi-file)\n- ✅ Bash command execution with output capture\n- ✅ Code analysis (AST parsing, refactoring)\n- ✅ Search functionality (ripgrep-based)\n- ✅ Operation history and undo/redo\n- ✅ MCP server integration\n- ✅ Todo management system\n- ❌ No documentation generation system (yet)\n- ❌ No cloud storage integration\n- ❌ No built-in authentication system\n\n## Build Configuration\n- **TypeScript**: ESM modules with dual CJS/ESM output\n- **Dependencies**: Ink, React, commander, chalk, ripgrep\n- **Scripts**: dev, build, start, lint, typecheck\n\n## Known Limitations\n- Command system not centralized (handled in input hook)\n- No formal command registration system\n- Limited built-in documentation capabilities\n\n## Recent Changes\n- Fixed React import issues for ESM compatibility\n- Implemented dual-build system with tsup\n- Reverted to working TypeScript build\n\nLast Updated: ${timestamp}\nUpdated By: Agent System Generator during /init-agent\n`;\n } else {\n return `# 🔧 Current System State\n\n## Project Analysis\n- **Project Type**: External project\n- **Documentation Status**: Initialized\n- **Analysis Status**: Pending\n\n## Discovered Components\n*To be populated during analysis*\n\n## Current Capabilities\n*To be identified*\n\n## Configuration\n*To be documented*\n\n## Dependencies\n*To be analyzed*\n\nLast Updated: ${timestamp}\nUpdated By: Agent System Generator during /init-agent\n*This file will be updated as the project is analyzed*\n`;\n }\n }\n\n private generateApiSchema(): string {\n if (this.config.projectType === 'x-cli') {\n return `# 🔌 API Schema\n\n## Grok API Integration\n\n### Base Configuration\n\\`\\`\\`typescript\n{\n baseURL: \"https://api.x.ai/v1\",\n defaultModel: \"grok-4-fast-non-reasoning\",\n apiKey: process.env.X_API_KEY\n}\n\\`\\`\\`\n\n### Available Models\n- **grok-4-latest**: Latest Grok model with enhanced capabilities\n- **grok-4-fast-non-reasoning**: Optimized for code generation (default)\n- **grok-3-fast**: Fast general-purpose model\n\n### Tool Integration Schema\nTools follow OpenAI function calling format:\n\n\\`\\`\\`typescript\ninterface ToolCall {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string; // JSON stringified\n };\n}\n\ninterface ToolResult {\n success: boolean;\n output?: string;\n error?: string;\n}\n\\`\\`\\`\n\n### MCP Server Schema\nModel Context Protocol integration:\n\n\\`\\`\\`typescript\ninterface MCPServerConfig {\n name: string;\n transport: {\n type: 'stdio' | 'http' | 'sse' | 'streamable_http';\n command?: string;\n args?: string[];\n url?: string;\n env?: Record<string, string>;\n headers?: Record<string, string>;\n };\n}\n\\`\\`\\`\n\n## Internal APIs\n\n### Agent Interface\n\\`\\`\\`typescript\ninterface GrokAgent {\n processUserMessageStream(input: string): AsyncGenerator<StreamChunk>;\n executeBashCommand(command: string): Promise<ToolResult>;\n setModel(model: string): void;\n getCurrentModel(): string;\n}\n\\`\\`\\`\n\n### Tool Interface\n\\`\\`\\`typescript\ninterface Tool {\n name: string;\n description: string;\n parameters: JSONSchema7;\n execute(args: any): Promise<ToolResult>;\n}\n\\`\\`\\`\n\n*Updated: ${new Date().toISOString().split('T')[0]}*\n`;\n } else {\n return `# 🔌 API Schema\n\n## Project APIs\n*To be documented after project analysis*\n\n## External Dependencies\n*To be identified*\n\n## Data Models\n*To be documented*\n\n*This file will be updated as APIs are discovered and analyzed*\n*Updated: ${new Date().toISOString().split('T')[0]}*\n`;\n }\n }\n\n private async generateInitialSOPs(agentPath: string): Promise<string[]> {\n const sopPath = path.join(agentPath, 'sop');\n const files: string[] = [];\n\n // Documentation workflow SOP\n const docWorkflowContent = `# 📚 Documentation Workflow SOP\n\n## When to Update Documentation\n\n### Trigger Events\n1. **Architecture Changes**: New components, modified structure\n2. **New Features**: Added functionality or tools\n3. **Configuration Changes**: Settings, build process, dependencies\n4. **After Major Commits**: Significant code changes\n5. **Failed Operations**: Document lessons learned\n\n### Update Process\n\n#### 1. Before Implementation\n- [ ] Read .agent/README.md for project overview\n- [ ] Check .agent/system/critical-state.md for current architecture \n- [ ] Review .agent/tasks/ for related work or conflicts\n- [ ] Scan .agent/sop/ for established patterns\n- [ ] Check .agent/guardrails/ for constraints\n\n#### 2. During Implementation\n- [ ] Store PRDs in .agent/tasks/ before coding\n- [ ] Reference architecture docs for consistency\n- [ ] Follow established patterns from SOPs\n- [ ] Use cross-references between .agent docs\n\n#### 3. After Implementation\n- [ ] Run \\`/update-agent-docs\\` to capture changes\n- [ ] Update .agent/system/ if architecture changed\n- [ ] Add new SOPs for repeatable processes\n- [ ] Link related tasks and documents\n- [ ] Test documentation updates for accuracy\n\n## Documentation Standards\n\n### File Organization\n- **system/**: Core architecture and state\n- **tasks/**: PRDs and feature specifications\n- **sop/**: Procedures and workflows\n- **incidents/**: Failure documentation\n- **guardrails/**: Prevention rules\n\n### Writing Guidelines\n- **Conciseness**: Keep sections under 300 tokens\n- **Cross-linking**: Use relative links between docs\n- **Consistency**: Follow established markdown patterns\n- **Freshness**: Include update timestamps\n- **Relevance**: Focus on actionable information\n\n### Template Usage\n- Use consistent headings and structure\n- Include metadata (updated date, updated by)\n- Reference related documents\n- Maintain clear navigation\n\n## Automation\n- Auto-update triggers configured in .xcli/settings.json\n- Smart prompts after key file changes\n- Token threshold reminders\n- Integration with git commit hooks\n\n*Updated: ${new Date().toISOString().split('T')[0]}*\n`;\n\n await ops.promises.writeFile(path.join(sopPath, 'documentation-workflow.md'), docWorkflowContent);\n files.push('.agent/sop/documentation-workflow.md');\n\n // Adding new command SOP (X-CLI specific)\n if (this.config.projectType === 'x-cli') {\n const newCommandContent = `# ⚙️ Adding New Commands SOP\n\n## Command System Architecture\n\n### Current Implementation\n- Commands handled in \\`src/hooks/use-input-handler.ts\\`\n- Direct implementation in \\`handleDirectCommand\\` function\n- No centralized command registry (yet)\n\n### Command Types\n\n#### 1. Slash Commands\nBuilt-in commands starting with \\`/\\`:\n- Implementation: Add to \\`handleDirectCommand\\` function\n- Pattern: \\`if (trimmedInput === \"/your-command\") { ... }\\`\n- Registration: Update \\`commandSuggestions\\` array\n\n#### 2. Direct Bash Commands \nImmediate execution commands:\n- Pattern: Add to \\`directBashCommands\\` array\n- Execution: Automatic bash execution\n\n#### 3. Natural Language\nAI-processed commands:\n- Fallback: Processed by \\`processUserMessage\\`\n- Tool selection: Automatic based on AI analysis\n\n### Implementation Steps\n\n#### 1. Add Slash Command\n\\`\\`\\`typescript\n// In commandSuggestions array\n{ command: \"/your-command\", description: \"Your command description\" }\n\n// In handleDirectCommand function \nif (trimmedInput === \"/your-command\") {\n // Implementation logic\n const result = await someOperation();\n \n const entry: ChatEntry = {\n type: \"assistant\",\n content: result,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, entry]);\n clearInput();\n return true;\n}\n\\`\\`\\`\n\n#### 2. Add Tool-Based Command\nCreate tool in \\`src/tools/\\`, then reference in command handler.\n\n#### 3. Update Documentation\n- Add command to /help output\n- Document in .agent/commands/\n- Update this SOP if pattern changes\n\n### Best Practices\n- **Consistent UX**: Follow existing command patterns\n- **Error Handling**: Provide clear feedback\n- **Tool Integration**: Leverage existing tool system\n- **State Management**: Update chat history appropriately\n- **Input Cleanup**: Always call \\`clearInput()\\`\n\n### Future Improvements\n- Centralized command registry system\n- Dynamic command loading\n- Plugin-based command architecture\n\n*Updated: ${new Date().toISOString().split('T')[0]}*\n`;\n\n await ops.promises.writeFile(path.join(sopPath, 'adding-new-command.md'), newCommandContent);\n files.push('.agent/sop/adding-new-command.md');\n }\n\n return files;\n }\n\n private async generateExampleTask(agentPath: string): Promise<string[]> {\n const tasksPath = path.join(agentPath, 'tasks');\n const files: string[] = [];\n\n const exampleContent = this.config.projectType === 'x-cli'\n ? this.generateGrokExampleTask()\n : this.generateExternalExampleTask();\n\n await ops.promises.writeFile(path.join(tasksPath, 'example-prd.md'), exampleContent);\n files.push('.agent/tasks/example-prd.md');\n\n return files;\n }\n\n private generateGrokExampleTask(): string {\n return `# 📋 Example PRD: Documentation System Enhancement\n\n## Objective\nAdd comprehensive documentation generation capabilities to X-CLI.\n\n## Background\nX-CLI needs better documentation tools to help users document both the CLI itself and their projects efficiently.\n\n## Requirements\n\n### Must Have\n- [ ] \\`/init-agent\\` command for .agent system creation\n- [ ] \\`/docs\\` interactive menu for documentation options\n- [ ] \\`/readme\\` command for README generation\n- [ ] Integration with existing command system\n\n### Should Have \n- [ ] \\`/api-docs\\` for API documentation\n- [ ] \\`/comments\\` for code comment generation\n- [ ] Auto-update system for documentation maintenance\n\n### Could Have\n- [ ] Custom templates for different project types\n- [ ] Documentation quality scoring\n- [ ] Integration with external documentation tools\n\n## Technical Approach\n\n### Architecture Impact\n- New tool directory: \\`src/tools/documentation/\\`\n- Command integration: Update \\`use-input-handler.ts\\`\n- New dependencies: Minimal (leverage existing tools)\n\n### Implementation Strategy\n1. **Phase 1**: Agent system generator tool\n2. **Phase 2**: Core documentation commands\n3. **Phase 3**: Advanced features and automation\n\n### Compatibility\n- Must not break existing functionality\n- Should follow established command patterns\n- Integrate with current tool system architecture\n\n## Success Criteria\n- [ ] Users can run \\`/init-agent\\` and get functional documentation\n- [ ] Commands are discoverable and intuitive\n- [ ] Generated documentation is high quality\n- [ ] System integrates seamlessly with existing workflow\n\n## Dependencies\n- Existing AST parser tool\n- Current search functionality \n- File operation tools\n- Command system in input handler\n\n## Risks & Mitigation\n- **Risk**: Command system complexity\n- **Mitigation**: Follow existing patterns, minimal changes\n\n## Timeline\n- **Week 1-2**: Foundation and agent system\n- **Week 3-4**: Core documentation commands\n- **Week 5-6**: Advanced features and polish\n\n---\n*This is an example PRD showing the format and level of detail expected*\n*Created: ${new Date().toISOString().split('T')[0]}*\n*Status: Example/Template*\n`;\n }\n\n private generateExternalExampleTask(): string {\n return `# 📋 Example PRD Template\n\n## Objective\n*Describe what you want to build or improve*\n\n## Background\n*Provide context about why this is needed*\n\n## Requirements\n\n### Must Have\n- [ ] *Critical features that must be implemented*\n\n### Should Have\n- [ ] *Important features that add significant value*\n\n### Could Have\n- [ ] *Nice-to-have features for future consideration*\n\n## Technical Approach\n\n### Architecture Impact\n*How will this change the system architecture?*\n\n### Implementation Strategy\n*High-level approach and phases*\n\n### Dependencies\n*What existing systems or external dependencies are required?*\n\n## Success Criteria\n- [ ] *How will you know this is successful?*\n\n## Risks & Mitigation\n- **Risk**: *Potential issues*\n- **Mitigation**: *How to address them*\n\n## Timeline\n*Estimated implementation timeline*\n\n---\n*This is a template - replace with actual PRD content*\n*Created: ${new Date().toISOString().split('T')[0]}*\n*Status: Template*\n`;\n }\n\n private async generateCommandDocs(agentPath: string): Promise<string[]> {\n const commandsPath = path.join(agentPath, 'commands');\n const files: string[] = [];\n\n // /init-agent documentation\n const initAgentContent = `# 📖 /init-agent Command\n\n## Purpose\nInitialize the .agent documentation system for AI-first project understanding.\n\n## Usage\n\\`\\`\\`bash\n/init-agent\n\\`\\`\\`\n\n## What It Does\n\n### 1. Directory Creation\nCreates \\`.agent/\\` folder structure:\n- \\`system/\\` - Architecture and current state\n- \\`tasks/\\` - PRDs and feature specifications \n- \\`sop/\\` - Standard operating procedures\n- \\`incidents/\\` - Failure documentation\n- \\`guardrails/\\` - Prevention rules\n- \\`commands/\\` - Command documentation\n\n### 2. Initial Documentation\n- **README.md**: Navigation and overview\n- **system/architecture.md**: Project structure\n- **system/critical-state.md**: Current system snapshot\n- **system/api-schema.md**: APIs and interfaces\n- **sop/documentation-workflow.md**: Update procedures\n\n### 3. Integration\n- Updates or creates CLAUDE.md with workflow instructions\n- Configures documentation system for the project type\n- Sets up foundation for other documentation commands\n\n## Project Types\n\n### X-CLI (Internal)\n- Documents X-CLI's own architecture\n- Includes command system patterns\n- References existing tool structure\n\n### External Project\n- Generic project documentation template\n- Prepares for project analysis\n- Creates foundation for custom documentation\n\n## Files Created\nAfter running \\`/init-agent\\`, you'll have:\n- \\`.agent/README.md\\` - Main index\n- \\`.agent/system/\\` - 3 core architecture files\n- \\`.agent/sop/\\` - Documentation procedures\n- \\`.agent/tasks/example-prd.md\\` - PRD template\n- \\`.agent/commands/\\` - Command documentation\n\n## Next Steps\nAfter initialization:\n1. Review generated documentation\n2. Customize templates for your project\n3. Run \\`/update-agent-docs\\` after changes\n4. Add PRDs to \\`tasks/\\` before implementation\n\n## Error Handling\n- Checks for existing \\`.agent/\\` directory\n- Provides clear error messages\n- Safe operation (won't overwrite)\n\n*Updated: ${new Date().toISOString().split('T')[0]}*\n`;\n\n await ops.promises.writeFile(path.join(commandsPath, 'init-agent.md'), initAgentContent);\n files.push('.agent/commands/init-agent.md');\n\n return files;\n }\n\n async rebuildAgentSystem(): Promise<{ success: boolean; message: string; filesCreated: string[] }> {\n const agentPath = path.join(this.config.rootPath, '.agent');\n \n try {\n // Remove existing .agent directory if it exists\n if (existsSync(agentPath)) {\n await ops.rm(agentPath, { recursive: true, force: true });\n }\n\n // Generate new system\n return await this.generateAgentSystem();\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to rebuild agent system: ${error.message}`,\n filesCreated: []\n };\n }\n }\n}","export interface DocsMenuOption {\n key: string;\n title: string;\n description: string;\n command: string;\n}\n\nexport const DOCS_MENU_OPTIONS: DocsMenuOption[] = [\n {\n key: \"1\",\n title: \"Generate README\",\n description: \"Create comprehensive README.md from project structure\",\n command: \"/readme\"\n },\n {\n key: \"2\", \n title: \"Generate API Documentation\",\n description: \"Extract and document functions, classes, modules\",\n command: \"/api-docs\"\n },\n {\n key: \"3\",\n title: \"Add Code Comments\", \n description: \"Add intelligent comments to existing code\",\n command: \"/comments\"\n },\n {\n key: \"4\",\n title: \"Generate Changelog\",\n description: \"Generate CHANGELOG.md from git history\", \n command: \"/changelog\"\n },\n {\n key: \"5\",\n title: \"Initialize .agent System\",\n description: \"Set up AI-first documentation structure\",\n command: \"/init-agent\"\n },\n {\n key: \"6\", \n title: \"Update .agent Documentation\",\n description: \"Sync docs with recent code changes\",\n command: \"/update-agent-docs\"\n }\n];\n\nexport function generateDocsMenuText(): string {\n return `📚 **Documentation Menu**\n\nChoose a documentation task:\n\n${DOCS_MENU_OPTIONS.map(option => \n `**${option.key}.** ${option.title}\n ${option.description}\n → \\`${option.command}\\`\n`).join('\\n')}\n\n**0.** Exit Menu\n\nType a number to select an option, or type any command directly.`;\n}\n\nexport function findDocsMenuOption(input: string): DocsMenuOption | null {\n const trimmed = input.trim();\n return DOCS_MENU_OPTIONS.find(option => option.key === trimmed) || null;\n}","import * as ops from 'fs-extra';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nexport interface ReadmeConfig {\n projectName: string;\n rootPath: string;\n updateExisting: boolean;\n template: 'default' | 'api' | 'cli' | 'library';\n}\n\nexport interface ProjectAnalysis {\n packageJson?: any;\n hasTypeScript: boolean;\n hasReact: boolean;\n hasTests: boolean;\n hasDocs: boolean;\n buildScripts: string[];\n dependencies: string[];\n devDependencies: string[];\n mainFiles: string[];\n framework?: string;\n}\n\nexport class ReadmeGenerator {\n private config: ReadmeConfig;\n\n constructor(config: ReadmeConfig) {\n this.config = config;\n }\n\n async generateReadme(): Promise<{ success: boolean; message: string; content?: string }> {\n try {\n // Analyze project structure\n const analysis = await this.analyzeProject();\n \n // Check if README exists\n const readmePath = path.join(this.config.rootPath, 'README.md');\n const readmeExists = existsSync(readmePath);\n\n if (readmeExists && !this.config.updateExisting) {\n return {\n success: false,\n message: 'README.md already exists. Use --update flag to overwrite.'\n };\n }\n\n // Generate content based on analysis\n const content = this.generateReadmeContent(analysis);\n\n // Write file\n await ops.promises.writeFile(readmePath, content);\n\n return {\n success: true,\n message: readmeExists \n ? '✅ Updated existing README.md with comprehensive documentation'\n : '✅ Created new README.md with project documentation',\n content\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to generate README: ${error.message}`\n };\n }\n }\n\n private async analyzeProject(): Promise<ProjectAnalysis> {\n const analysis: ProjectAnalysis = {\n hasTypeScript: false,\n hasReact: false,\n hasTests: false,\n hasDocs: false,\n buildScripts: [],\n dependencies: [],\n devDependencies: [],\n mainFiles: []\n };\n\n try {\n // Check package.json\n const packagePath = path.join(this.config.rootPath, 'package.json');\n if (existsSync(packagePath)) {\n const packageContent = await ops.promises.readFile(packagePath, 'utf-8');\n analysis.packageJson = JSON.parse(packageContent);\n \n // Extract dependencies\n analysis.dependencies = Object.keys(analysis.packageJson.dependencies || {});\n analysis.devDependencies = Object.keys(analysis.packageJson.devDependencies || {});\n \n // Detect technologies\n analysis.hasReact = analysis.dependencies.includes('react') || analysis.devDependencies.includes('react');\n analysis.hasTypeScript = analysis.devDependencies.includes('typescript') || existsSync(path.join(this.config.rootPath, 'tsconfig.json'));\n \n // Extract build scripts\n const scripts = analysis.packageJson.scripts || {};\n analysis.buildScripts = Object.keys(scripts).filter(script => \n ['build', 'dev', 'start', 'test', 'lint', 'typecheck'].includes(script)\n );\n\n // Detect framework\n if (analysis.dependencies.includes('next')) analysis.framework = 'Next.js';\n else if (analysis.dependencies.includes('express')) analysis.framework = 'Express.js';\n else if (analysis.dependencies.includes('ink')) analysis.framework = 'Ink (Terminal)';\n else if (analysis.hasReact) analysis.framework = 'React';\n }\n\n // Check for common files\n const commonFiles = ['src/', 'lib/', 'docs/', 'test/', 'tests/', '__tests__/'];\n for (const file of commonFiles) {\n if (existsSync(path.join(this.config.rootPath, file))) {\n if (file.includes('test')) analysis.hasTests = true;\n if (file.includes('docs')) analysis.hasDocs = true;\n analysis.mainFiles.push(file);\n }\n }\n\n return analysis;\n } catch (error) {\n return analysis;\n }\n }\n\n private generateReadmeContent(analysis: ProjectAnalysis): string {\n const pkg = analysis.packageJson;\n const projectName = this.config.projectName || pkg?.name || 'Project';\n \n let content = `# ${projectName}\\n\\n`;\n\n // Description\n if (pkg?.description) {\n content += `${pkg.description}\\n\\n`;\n } else {\n content += `A ${analysis.framework || 'JavaScript'} project.\\n\\n`;\n }\n\n // Badges (if package.json exists)\n if (pkg) {\n content += this.generateBadges(analysis);\n }\n\n // Table of Contents\n content += `## 📋 Table of Contents\\n\\n`;\n content += `- [Installation](#installation)\\n`;\n content += `- [Usage](#usage)\\n`;\n if (analysis.buildScripts.length > 0) content += `- [Development](#development)\\n`;\n if (analysis.hasTests) content += `- [Testing](#testing)\\n`;\n if (pkg?.scripts?.build) content += `- [Building](#building)\\n`;\n content += `- [Configuration](#configuration)\\n`;\n content += `- [Contributing](#contributing)\\n`;\n content += `- [License](#license)\\n\\n`;\n\n // Installation\n content += `## 🚀 Installation\\n\\n`;\n if (pkg?.bin) {\n content += `### Global Installation\\n\\`\\`\\`bash\\nnpm install -g ${pkg.name}\\n\\`\\`\\`\\n\\n`;\n }\n content += `### Local Installation\\n\\`\\`\\`bash\\n`;\n content += `# Clone the repository\\ngit clone <repository-url>\\n`;\n content += `cd ${pkg?.name || projectName.toLowerCase()}\\n\\n`;\n content += `# Install dependencies\\nnpm install\\n\\`\\`\\`\\n\\n`;\n\n // Usage\n content += `## 💻 Usage\\n\\n`;\n if (pkg?.bin) {\n const binName = Object.keys(pkg.bin)[0];\n content += `### Command Line\\n\\`\\`\\`bash\\n${binName} [options]\\n\\`\\`\\`\\n\\n`;\n }\n if (analysis.framework === 'Express.js') {\n content += `### API Server\\n\\`\\`\\`bash\\nnpm start\\n\\`\\`\\`\\n\\nThe server will start on \\`http://localhost:3000\\`\\n\\n`;\n } else if (analysis.hasReact) {\n content += `### Development Server\\n\\`\\`\\`bash\\nnpm run dev\\n\\`\\`\\`\\n\\nOpen [http://localhost:3000](http://localhost:3000) in your browser.\\n\\n`;\n }\n\n // Development section\n if (analysis.buildScripts.length > 0) {\n content += `## 🛠️ Development\\n\\n`;\n content += `### Available Scripts\\n\\n`;\n \n analysis.buildScripts.forEach(script => {\n const description = this.getScriptDescription(script);\n content += `- \\`npm run ${script}\\` - ${description}\\n`;\n });\n content += '\\n';\n }\n\n // Testing\n if (analysis.hasTests) {\n content += `## 🧪 Testing\\n\\n`;\n content += `\\`\\`\\`bash\\nnpm test\\n\\`\\`\\`\\n\\n`;\n if (analysis.buildScripts.includes('test:watch')) {\n content += `### Watch Mode\\n\\`\\`\\`bash\\nnpm run test:watch\\n\\`\\`\\`\\n\\n`;\n }\n }\n\n // Building\n if (pkg?.scripts?.build) {\n content += `## 📦 Building\\n\\n`;\n content += `\\`\\`\\`bash\\nnpm run build\\n\\`\\`\\`\\n\\n`;\n if (analysis.hasTypeScript) {\n content += `This will compile TypeScript files and output to the \\`dist/\\` directory.\\n\\n`;\n }\n }\n\n // Technology Stack\n if (analysis.dependencies.length > 0) {\n content += `## 🔧 Technology Stack\\n\\n`;\n if (analysis.framework) content += `- **Framework**: ${analysis.framework}\\n`;\n if (analysis.hasTypeScript) content += `- **Language**: TypeScript\\n`;\n \n const keyDeps = analysis.dependencies.filter(dep => \n ['react', 'express', 'next', 'ink', 'commander', 'chalk'].includes(dep)\n );\n if (keyDeps.length > 0) {\n content += `- **Key Dependencies**: ${keyDeps.join(', ')}\\n`;\n }\n content += '\\n';\n }\n\n // Configuration\n content += `## ⚙️ Configuration\\n\\n`;\n if (existsSync(path.join(this.config.rootPath, '.env.example'))) {\n content += `Copy \\`.env.example\\` to \\`.env\\` and configure your environment variables:\\n\\n`;\n content += `\\`\\`\\`bash\\ncp .env.example .env\\n\\`\\`\\`\\n\\n`;\n }\n if (analysis.hasTypeScript) {\n content += `### TypeScript Configuration\\nTypeScript is configured via \\`tsconfig.json\\`.\\n\\n`;\n }\n\n // API Documentation (if applicable)\n if (analysis.framework === 'Express.js' || pkg?.main?.includes('api')) {\n content += `## 📖 API Documentation\\n\\n`;\n content += `API documentation is available at \\`/docs\\` when running the server.\\n\\n`;\n }\n\n // Contributing\n content += `## 🤝 Contributing\\n\\n`;\n content += `1. Fork the repository\\n`;\n content += `2. Create a feature branch (\\`git checkout -b feature/amazing-feature\\`)\\n`;\n content += `3. Commit your changes (\\`git commit -m 'Add amazing feature'\\`)\\n`;\n content += `4. Push to the branch (\\`git push origin feature/amazing-feature\\`)\\n`;\n content += `5. Open a Pull Request\\n\\n`;\n\n // License\n content += `## 📄 License\\n\\n`;\n if (pkg?.license) {\n content += `This project is licensed under the ${pkg.license} License.\\n\\n`;\n } else {\n content += `This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\\n\\n`;\n }\n\n // Generated footer\n content += `---\\n*Generated by X-CLI Documentation System*\\n`;\n content += `*Last updated: ${new Date().toISOString().split('T')[0]}*`;\n\n return content;\n }\n\n private generateBadges(analysis: ProjectAnalysis): string {\n let badges = '';\n \n if (analysis.packageJson?.version) {\n badges += `\\n`;\n }\n \n if (analysis.hasTypeScript) {\n badges += `\\n`;\n }\n \n if (analysis.hasReact) {\n badges += `\\n`;\n }\n \n if (analysis.packageJson?.license) {\n badges += `\\n`;\n }\n\n return badges ? badges + '\\n' : '';\n }\n\n private getScriptDescription(script: string): string {\n const descriptions: Record<string, string> = {\n 'dev': 'Start development server',\n 'build': 'Build for production',\n 'start': 'Start production server',\n 'test': 'Run test suite',\n 'lint': 'Run linter',\n 'typecheck': 'Run TypeScript type checking',\n 'format': 'Format code with prettier'\n };\n return descriptions[script] || `Run ${script} script`;\n }\n}","import * as ops from 'fs-extra';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nexport interface CommentsConfig {\n filePath: string;\n commentType: 'functions' | 'classes' | 'all';\n style: 'jsdoc' | 'inline' | 'auto';\n}\n\nexport interface CodeAnalysis {\n language: string;\n functions: FunctionInfo[];\n classes: ClassInfo[];\n interfaces: InterfaceInfo[];\n hasExistingComments: boolean;\n}\n\nexport interface FunctionInfo {\n name: string;\n line: number;\n parameters: string[];\n returnType?: string;\n isAsync: boolean;\n isExported: boolean;\n}\n\nexport interface ClassInfo {\n name: string;\n line: number;\n methods: FunctionInfo[];\n properties: PropertyInfo[];\n isExported: boolean;\n}\n\nexport interface InterfaceInfo {\n name: string;\n line: number;\n properties: PropertyInfo[];\n}\n\nexport interface PropertyInfo {\n name: string;\n type?: string;\n optional: boolean;\n}\n\nexport class CommentsGenerator {\n private config: CommentsConfig;\n\n constructor(config: CommentsConfig) {\n this.config = config;\n }\n\n async generateComments(): Promise<{ success: boolean; message: string; modifiedContent?: string }> {\n try {\n if (!existsSync(this.config.filePath)) {\n return {\n success: false,\n message: 'File not found'\n };\n }\n\n const content = await ops.promises.readFile(this.config.filePath, 'utf-8');\n const analysis = this.analyzeCode(content);\n \n if (analysis.hasExistingComments) {\n return {\n success: false,\n message: 'File already has extensive comments. Use --force to override.'\n };\n }\n\n const modifiedContent = this.addComments(content, analysis);\n \n // Create backup\n const backupPath = this.config.filePath + '.backup';\n await ops.promises.writeFile(backupPath, content);\n \n // Write modified content\n await ops.promises.writeFile(this.config.filePath, modifiedContent);\n\n const commentCount = this.countAddedComments(analysis);\n \n return {\n success: true,\n message: `✅ Added ${commentCount} comments to ${path.basename(this.config.filePath)}\\n📁 Backup created: ${path.basename(backupPath)}`,\n modifiedContent\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to add comments: ${error.message}`\n };\n }\n }\n\n private analyzeCode(content: string): CodeAnalysis {\n const lines = content.split('\\n');\n const language = this.detectLanguage();\n \n const analysis: CodeAnalysis = {\n language,\n functions: [],\n classes: [],\n interfaces: [],\n hasExistingComments: this.hasExtensiveComments(content)\n };\n\n // Simple regex-based parsing (could be enhanced with AST)\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n \n // Detect functions\n const funcMatch = line.match(/(?:export\\s+)?(?:async\\s+)?function\\s+(\\w+)\\s*\\(([^)]*)\\)/);\n if (funcMatch) {\n const [, name, params] = funcMatch;\n analysis.functions.push({\n name,\n line: i + 1,\n parameters: params.split(',').map(p => p.trim()).filter(Boolean),\n isAsync: line.includes('async'),\n isExported: line.includes('export')\n });\n }\n\n // Detect arrow functions\n const arrowMatch = line.match(/(?:export\\s+)?(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s+)?\\([^)]*\\)\\s*=>/);\n if (arrowMatch) {\n const [, name] = arrowMatch;\n analysis.functions.push({\n name,\n line: i + 1,\n parameters: [],\n isAsync: line.includes('async'),\n isExported: line.includes('export')\n });\n }\n\n // Detect classes\n const classMatch = line.match(/(?:export\\s+)?class\\s+(\\w+)/);\n if (classMatch) {\n const [, name] = classMatch;\n analysis.classes.push({\n name,\n line: i + 1,\n methods: [],\n properties: [],\n isExported: line.includes('export')\n });\n }\n\n // Detect interfaces (TypeScript)\n const interfaceMatch = line.match(/(?:export\\s+)?interface\\s+(\\w+)/);\n if (interfaceMatch) {\n const [, name] = interfaceMatch;\n analysis.interfaces.push({\n name,\n line: i + 1,\n properties: []\n });\n }\n }\n\n return analysis;\n }\n\n private detectLanguage(): string {\n const ext = path.extname(this.config.filePath);\n switch (ext) {\n case '.ts': case '.tsx': return 'typescript';\n case '.js': case '.jsx': return 'javascript';\n case '.py': return 'python';\n case '.java': return 'java';\n case '.cpp': case '.cc': case '.cxx': return 'cpp';\n default: return 'unknown';\n }\n }\n\n private hasExtensiveComments(content: string): boolean {\n const lines = content.split('\\n');\n const commentLines = lines.filter(line => {\n const trimmed = line.trim();\n return trimmed.startsWith('//') || \n trimmed.startsWith('/*') || \n trimmed.startsWith('*') ||\n trimmed.startsWith('#') ||\n trimmed.includes('/**');\n });\n \n // Consider \"extensive\" if more than 20% of lines are comments\n return commentLines.length / lines.length > 0.2;\n }\n\n private addComments(content: string, analysis: CodeAnalysis): string {\n const lines = content.split('\\n');\n let modifiedLines = [...lines];\n let insertOffset = 0;\n\n // Add comments to functions\n if (this.config.commentType === 'functions' || this.config.commentType === 'all') {\n for (const func of analysis.functions) {\n const commentLines = this.generateFunctionComment(func, analysis.language);\n const insertIndex = func.line - 1 + insertOffset;\n \n // Insert comment lines before function\n modifiedLines.splice(insertIndex, 0, ...commentLines);\n insertOffset += commentLines.length;\n }\n }\n\n // Add comments to classes\n if (this.config.commentType === 'classes' || this.config.commentType === 'all') {\n for (const cls of analysis.classes) {\n const commentLines = this.generateClassComment(cls, analysis.language);\n const insertIndex = cls.line - 1 + insertOffset;\n \n modifiedLines.splice(insertIndex, 0, ...commentLines);\n insertOffset += commentLines.length;\n }\n }\n\n return modifiedLines.join('\\n');\n }\n\n private generateFunctionComment(func: FunctionInfo, language: string): string[] {\n const indent = this.getIndentation(func.line);\n \n if (language === 'typescript' || language === 'javascript') {\n const lines = [\n `${indent}/**`,\n `${indent} * ${this.generateFunctionDescription(func)}`,\n ];\n\n if (func.parameters.length > 0) {\n lines.push(`${indent} *`);\n func.parameters.forEach(param => {\n const cleanParam = param.split(':')[0].split('=')[0].trim();\n lines.push(`${indent} * @param {any} ${cleanParam} - Parameter description`);\n });\n }\n\n lines.push(`${indent} * @returns {${func.isAsync ? 'Promise<any>' : 'any'}} Return description`);\n lines.push(`${indent} */`);\n \n return lines;\n }\n\n return [`${indent}// ${this.generateFunctionDescription(func)}`];\n }\n\n private generateClassComment(cls: ClassInfo, language: string): string[] {\n const indent = this.getIndentation(cls.line);\n \n if (language === 'typescript' || language === 'javascript') {\n return [\n `${indent}/**`,\n `${indent} * ${cls.name} class`,\n `${indent} * `,\n `${indent} * @class ${cls.name}`,\n `${indent} */`\n ];\n }\n\n return [`${indent}// ${cls.name} class`];\n }\n\n private generateFunctionDescription(func: FunctionInfo): string {\n if (func.name === 'constructor') {\n return 'Creates an instance of the class';\n }\n \n // Generate smart descriptions based on function name\n const name = func.name.toLowerCase();\n \n if (name.startsWith('get')) {\n return `Gets ${name.substring(3).replace(/([A-Z])/g, ' $1').toLowerCase()}`;\n }\n if (name.startsWith('set')) {\n return `Sets ${name.substring(3).replace(/([A-Z])/g, ' $1').toLowerCase()}`;\n }\n if (name.startsWith('create')) {\n return `Creates a new ${name.substring(6).replace(/([A-Z])/g, ' $1').toLowerCase()}`;\n }\n if (name.startsWith('delete') || name.startsWith('remove')) {\n const target = name.startsWith('delete') ? name.substring(6) : name.substring(6);\n return `Deletes ${target.replace(/([A-Z])/g, ' $1').toLowerCase()}`;\n }\n if (name.startsWith('update')) {\n return `Updates ${name.substring(6).replace(/([A-Z])/g, ' $1').toLowerCase()}`;\n }\n if (name.startsWith('is') || name.startsWith('has')) {\n return `Checks if ${name.substring(2).replace(/([A-Z])/g, ' $1').toLowerCase()}`;\n }\n if (name.includes('handle')) {\n return `Handles ${name.replace('handle', '').replace(/([A-Z])/g, ' $1').toLowerCase()}`;\n }\n \n return `${func.name} function`;\n }\n\n private getIndentation(lineNumber: number): string {\n // This would need access to the original line to detect indentation\n // For now, return empty string - could be enhanced\n return '';\n }\n\n private countAddedComments(analysis: CodeAnalysis): number {\n let count = 0;\n \n if (this.config.commentType === 'functions' || this.config.commentType === 'all') {\n count += analysis.functions.length;\n }\n \n if (this.config.commentType === 'classes' || this.config.commentType === 'all') {\n count += analysis.classes.length;\n }\n \n return count;\n }\n}","import * as ops from 'fs-extra';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nexport interface ApiDocsConfig {\n rootPath: string;\n outputFormat: 'md' | 'html';\n includePrivate: boolean;\n scanPaths: string[];\n}\n\nexport interface ApiDocumentation {\n modules: ModuleInfo[];\n functions: FunctionInfo[];\n classes: ClassInfo[];\n interfaces: InterfaceInfo[];\n types: TypeInfo[];\n}\n\nexport interface ModuleInfo {\n name: string;\n path: string;\n description?: string;\n exports: string[];\n}\n\nexport interface FunctionInfo {\n name: string;\n module: string;\n signature: string;\n parameters: ParameterInfo[];\n returnType: string;\n description?: string;\n examples?: string[];\n isAsync: boolean;\n isExported: boolean;\n}\n\nexport interface ClassInfo {\n name: string;\n module: string;\n description?: string;\n constructor?: FunctionInfo;\n methods: FunctionInfo[];\n properties: PropertyInfo[];\n extends?: string;\n implements?: string[];\n isExported: boolean;\n}\n\nexport interface InterfaceInfo {\n name: string;\n module: string;\n description?: string;\n properties: PropertyInfo[];\n extends?: string[];\n isExported: boolean;\n}\n\nexport interface TypeInfo {\n name: string;\n module: string;\n definition: string;\n description?: string;\n isExported: boolean;\n}\n\nexport interface ParameterInfo {\n name: string;\n type: string;\n optional: boolean;\n defaultValue?: string;\n description?: string;\n}\n\nexport interface PropertyInfo {\n name: string;\n type: string;\n optional: boolean;\n readonly: boolean;\n description?: string;\n}\n\nexport class ApiDocsGenerator {\n private config: ApiDocsConfig;\n\n constructor(config: ApiDocsConfig) {\n this.config = config;\n }\n\n async generateApiDocs(): Promise<{ success: boolean; message: string; outputPath?: string }> {\n try {\n // Scan for API files\n const documentation = await this.scanApiFiles();\n \n if (documentation.functions.length === 0 && documentation.classes.length === 0) {\n return {\n success: false,\n message: 'No API documentation found. Make sure you have TypeScript/JavaScript files with exported functions or classes.'\n };\n }\n\n // Generate documentation content\n const content = this.config.outputFormat === 'md' \n ? this.generateMarkdown(documentation)\n : this.generateHtml(documentation);\n\n // Write documentation file\n const outputFileName = `api-docs.${this.config.outputFormat}`;\n const outputPath = path.join(this.config.rootPath, outputFileName);\n await ops.promises.writeFile(outputPath, content);\n\n const stats = this.getDocumentationStats(documentation);\n\n return {\n success: true,\n message: `✅ Generated API documentation: ${outputFileName}\\n\\n📊 **Documentation Stats:**\\n${stats}`,\n outputPath\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to generate API docs: ${error.message}`\n };\n }\n }\n\n private async scanApiFiles(): Promise<ApiDocumentation> {\n const documentation: ApiDocumentation = {\n modules: [],\n functions: [],\n classes: [],\n interfaces: [],\n types: []\n };\n\n // Default scan paths if not specified\n const scanPaths = this.config.scanPaths.length > 0 \n ? this.config.scanPaths \n : ['src/', 'lib/', './'];\n\n for (const scanPath of scanPaths) {\n const fullPath = path.join(this.config.rootPath, scanPath);\n if (existsSync(fullPath)) {\n await this.scanDirectory(fullPath, documentation);\n }\n }\n\n return documentation;\n }\n\n private async scanDirectory(dirPath: string, documentation: ApiDocumentation): Promise<void> {\n try {\n const entries = await ops.promises.readdir(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n\n if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {\n await this.scanDirectory(fullPath, documentation);\n } else if (entry.isFile() && this.isApiFile(entry.name)) {\n await this.parseApiFile(fullPath, documentation);\n }\n }\n } catch (error) {\n // Skip directories we can't read\n }\n }\n\n private isApiFile(fileName: string): boolean {\n const apiExtensions = ['.ts', '.js', '.tsx', '.jsx'];\n const ext = path.extname(fileName);\n return apiExtensions.includes(ext) && \n !fileName.includes('.test.') && \n !fileName.includes('.spec.') &&\n !fileName.includes('.d.ts');\n }\n\n private async parseApiFile(filePath: string, documentation: ApiDocumentation): Promise<void> {\n try {\n const content = await ops.promises.readFile(filePath, 'utf-8');\n const relativePath = path.relative(this.config.rootPath, filePath);\n const moduleName = this.getModuleName(relativePath);\n\n // Simple regex-based parsing (could be enhanced with TypeScript compiler API)\n const lines = content.split('\\n');\n const moduleInfo: ModuleInfo = {\n name: moduleName,\n path: relativePath,\n exports: []\n };\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // Parse exported functions\n const funcMatch = line.match(/export\\s+(?:async\\s+)?function\\s+(\\w+)\\s*\\(([^)]*)\\)(?:\\s*:\\s*([^{]+))?/);\n if (funcMatch) {\n const [, name, params, returnType] = funcMatch;\n const functionInfo: FunctionInfo = {\n name,\n module: moduleName,\n signature: line,\n parameters: this.parseParameters(params),\n returnType: returnType?.trim() || 'any',\n isAsync: line.includes('async'),\n isExported: true,\n description: this.extractPrecedingComment(lines, i)\n };\n documentation.functions.push(functionInfo);\n moduleInfo.exports.push(name);\n }\n\n // Parse exported classes\n const classMatch = line.match(/export\\s+class\\s+(\\w+)(?:\\s+extends\\s+(\\w+))?(?:\\s+implements\\s+([^{]+))?/);\n if (classMatch) {\n const [, name, extendsClass, implementsInterfaces] = classMatch;\n const classInfo: ClassInfo = {\n name,\n module: moduleName,\n description: this.extractPrecedingComment(lines, i),\n methods: [],\n properties: [],\n extends: extendsClass,\n implements: implementsInterfaces?.split(',').map(s => s.trim()),\n isExported: true,\n constructor: undefined\n };\n documentation.classes.push(classInfo);\n moduleInfo.exports.push(name);\n }\n\n // Parse interfaces\n const interfaceMatch = line.match(/export\\s+interface\\s+(\\w+)(?:\\s+extends\\s+([^{]+))?/);\n if (interfaceMatch) {\n const [, name, extendsInterfaces] = interfaceMatch;\n const interfaceInfo: InterfaceInfo = {\n name,\n module: moduleName,\n description: this.extractPrecedingComment(lines, i),\n properties: [],\n extends: extendsInterfaces?.split(',').map(s => s.trim()),\n isExported: true\n };\n documentation.interfaces.push(interfaceInfo);\n moduleInfo.exports.push(name);\n }\n\n // Parse type aliases\n const typeMatch = line.match(/export\\s+type\\s+(\\w+)\\s*=\\s*([^;]+)/);\n if (typeMatch) {\n const [, name, definition] = typeMatch;\n const typeInfo: TypeInfo = {\n name,\n module: moduleName,\n definition: definition.trim(),\n description: this.extractPrecedingComment(lines, i),\n isExported: true\n };\n documentation.types.push(typeInfo);\n moduleInfo.exports.push(name);\n }\n }\n\n if (moduleInfo.exports.length > 0) {\n documentation.modules.push(moduleInfo);\n }\n\n } catch (error) {\n // Skip files we can't parse\n }\n }\n\n private getModuleName(relativePath: string): string {\n const withoutExt = relativePath.replace(/\\.[^/.]+$/, '');\n return withoutExt.replace(/[/\\\\]/g, '.');\n }\n\n private parseParameters(paramsString: string): ParameterInfo[] {\n if (!paramsString.trim()) return [];\n\n return paramsString.split(',').map(param => {\n const trimmed = param.trim();\n const parts = trimmed.split(':');\n const name = parts[0]?.trim() || '';\n const type = parts[1]?.trim() || 'any';\n \n return {\n name: name.replace(/[?=].*$/, ''), // Remove optional/default markers\n type,\n optional: name.includes('?') || name.includes('='),\n defaultValue: name.includes('=') ? name.split('=')[1]?.trim() : undefined\n };\n });\n }\n\n private extractPrecedingComment(lines: string[], lineIndex: number): string | undefined {\n // Look for JSDoc or single-line comments before the declaration\n let i = lineIndex - 1;\n const commentLines: string[] = [];\n\n while (i >= 0) {\n const line = lines[i].trim();\n if (line.startsWith('/**') || line.startsWith('/*')) {\n // JSDoc comment\n const jsdocLines = [];\n while (i >= 0 && !lines[i].includes('*/')) {\n jsdocLines.unshift(lines[i].trim());\n i--;\n }\n if (i >= 0) jsdocLines.unshift(lines[i].trim());\n return jsdocLines.join('\\n').replace(/\\/\\*\\*?|\\*\\/|\\s*\\*\\s?/g, '').trim();\n } else if (line.startsWith('//')) {\n commentLines.unshift(line.replace(/^\\s*\\/\\/\\s?/, ''));\n i--;\n } else if (line === '') {\n i--;\n } else {\n break;\n }\n }\n\n return commentLines.length > 0 ? commentLines.join(' ') : undefined;\n }\n\n private generateMarkdown(documentation: ApiDocumentation): string {\n let content = `# API Documentation\\n\\n`;\n content += `Generated on: ${new Date().toISOString().split('T')[0]}\\n\\n`;\n\n // Table of Contents\n content += `## 📋 Table of Contents\\n\\n`;\n if (documentation.modules.length > 0) content += `- [Modules](#modules)\\n`;\n if (documentation.functions.length > 0) content += `- [Functions](#functions)\\n`;\n if (documentation.classes.length > 0) content += `- [Classes](#classes)\\n`;\n if (documentation.interfaces.length > 0) content += `- [Interfaces](#interfaces)\\n`;\n if (documentation.types.length > 0) content += `- [Types](#types)\\n`;\n content += '\\n';\n\n // Modules\n if (documentation.modules.length > 0) {\n content += `## 📦 Modules\\n\\n`;\n documentation.modules.forEach(module => {\n content += `### ${module.name}\\n\\n`;\n content += `**Path:** \\`${module.path}\\`\\n\\n`;\n if (module.description) content += `${module.description}\\n\\n`;\n content += `**Exports:** ${module.exports.join(', ')}\\n\\n`;\n });\n }\n\n // Functions\n if (documentation.functions.length > 0) {\n content += `## 🔧 Functions\\n\\n`;\n documentation.functions.forEach(func => {\n content += `### ${func.name}\\n\\n`;\n if (func.description) content += `${func.description}\\n\\n`;\n content += `**Module:** \\`${func.module}\\`\\n\\n`;\n content += `**Signature:**\\n\\`\\`\\`typescript\\n${func.signature}\\n\\`\\`\\`\\n\\n`;\n \n if (func.parameters.length > 0) {\n content += `**Parameters:**\\n`;\n func.parameters.forEach(param => {\n const optional = param.optional ? ' (optional)' : '';\n const defaultVal = param.defaultValue ? ` = ${param.defaultValue}` : '';\n content += `- \\`${param.name}\\`: \\`${param.type}\\`${optional}${defaultVal}\\n`;\n if (param.description) content += ` - ${param.description}\\n`;\n });\n content += '\\n';\n }\n \n content += `**Returns:** \\`${func.returnType}\\`\\n\\n`;\n if (func.isAsync) content += `⚡ **Async function**\\n\\n`;\n });\n }\n\n // Classes\n if (documentation.classes.length > 0) {\n content += `## 🏗️ Classes\\n\\n`;\n documentation.classes.forEach(cls => {\n content += `### ${cls.name}\\n\\n`;\n if (cls.description) content += `${cls.description}\\n\\n`;\n content += `**Module:** \\`${cls.module}\\`\\n\\n`;\n if (cls.extends) content += `**Extends:** \\`${cls.extends}\\`\\n\\n`;\n if (cls.implements && cls.implements.length > 0) {\n content += `**Implements:** ${cls.implements.map(i => `\\`${i}\\``).join(', ')}\\n\\n`;\n }\n });\n }\n\n // Interfaces\n if (documentation.interfaces.length > 0) {\n content += `## 📋 Interfaces\\n\\n`;\n documentation.interfaces.forEach(iface => {\n content += `### ${iface.name}\\n\\n`;\n if (iface.description) content += `${iface.description}\\n\\n`;\n content += `**Module:** \\`${iface.module}\\`\\n\\n`;\n if (iface.extends && iface.extends.length > 0) {\n content += `**Extends:** ${iface.extends.map(e => `\\`${e}\\``).join(', ')}\\n\\n`;\n }\n });\n }\n\n // Types\n if (documentation.types.length > 0) {\n content += `## 🎯 Types\\n\\n`;\n documentation.types.forEach(type => {\n content += `### ${type.name}\\n\\n`;\n if (type.description) content += `${type.description}\\n\\n`;\n content += `**Module:** \\`${type.module}\\`\\n\\n`;\n content += `**Definition:**\\n\\`\\`\\`typescript\\ntype ${type.name} = ${type.definition}\\n\\`\\`\\`\\n\\n`;\n });\n }\n\n content += `---\\n*Generated by X-CLI Documentation System*`;\n return content;\n }\n\n private generateHtml(documentation: ApiDocumentation): string {\n // Basic HTML template - could be enhanced with CSS\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>API Documentation</title>\n <style>\n body { font-family: Arial, sans-serif; margin: 40px; }\n h1, h2, h3 { color: #333; }\n code { background: #f4f4f4; padding: 2px 4px; border-radius: 3px; }\n pre { background: #f4f4f4; padding: 15px; border-radius: 5px; overflow-x: auto; }\n </style>\n</head>\n<body>\n <h1>API Documentation</h1>\n <p>Generated on: ${new Date().toISOString().split('T')[0]}</p>\n ${this.generateMarkdown(documentation).replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, '<pre><code>$2</code></pre>')}\n</body>\n</html>`;\n }\n\n private getDocumentationStats(documentation: ApiDocumentation): string {\n return `- **Modules:** ${documentation.modules.length}\n- **Functions:** ${documentation.functions.length}\n- **Classes:** ${documentation.classes.length}\n- **Interfaces:** ${documentation.interfaces.length}\n- **Types:** ${documentation.types.length}`;\n }\n}","import * as ops from 'fs-extra';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nexport interface ChangelogConfig {\n rootPath: string;\n sinceVersion?: string;\n commitCount?: number;\n format: 'conventional' | 'simple';\n includeBreaking: boolean;\n}\n\nexport interface CommitInfo {\n hash: string;\n date: string;\n author: string;\n message: string;\n type?: string;\n scope?: string;\n breaking: boolean;\n body?: string;\n}\n\nexport interface ChangelogSection {\n title: string;\n commits: CommitInfo[];\n}\n\nexport class ChangelogGenerator {\n private config: ChangelogConfig;\n\n constructor(config: ChangelogConfig) {\n this.config = config;\n }\n\n async generateChangelog(): Promise<{ success: boolean; message: string; content?: string }> {\n try {\n // Check if we're in a git repository\n const gitPath = path.join(this.config.rootPath, '.git');\n if (!existsSync(gitPath)) {\n return {\n success: false,\n message: 'Not a git repository. Changelog generation requires git history.'\n };\n }\n\n // Get git commits\n const commits = await this.getGitCommits();\n \n if (commits.length === 0) {\n return {\n success: false,\n message: 'No git commits found.'\n };\n }\n\n // Parse commits and organize by type\n const sections = this.organizeCommits(commits);\n \n // Generate changelog content\n const content = this.generateChangelogContent(sections);\n \n // Write to CHANGELOG.md\n const changelogPath = path.join(this.config.rootPath, 'CHANGELOG.md');\n const exists = existsSync(changelogPath);\n \n if (exists) {\n // Prepend to existing changelog\n const existingContent = await ops.promises.readFile(changelogPath, 'utf-8');\n const newContent = content + '\\n\\n' + existingContent;\n await ops.promises.writeFile(changelogPath, newContent);\n } else {\n // Create new changelog\n const fullContent = this.generateChangelogHeader() + content;\n await ops.promises.writeFile(changelogPath, fullContent);\n }\n\n return {\n success: true,\n message: exists \n ? `✅ Updated CHANGELOG.md with ${commits.length} new entries`\n : `✅ Created CHANGELOG.md with ${commits.length} entries`,\n content\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to generate changelog: ${error.message}`\n };\n }\n }\n\n private async getGitCommits(): Promise<CommitInfo[]> {\n const { execSync } = require('child_process');\n \n try {\n let gitCommand = 'git log --pretty=format:\"%H|%ad|%an|%s|%b\" --date=short';\n \n if (this.config.sinceVersion) {\n gitCommand += ` ${this.config.sinceVersion}..HEAD`;\n } else if (this.config.commitCount) {\n gitCommand += ` -n ${this.config.commitCount}`;\n } else {\n gitCommand += ' -n 50'; // Default to last 50 commits\n }\n\n const output = execSync(gitCommand, { \n cwd: this.config.rootPath,\n encoding: 'utf-8'\n });\n\n const lines = output.trim().split('\\n').filter((line: string) => line.trim());\n \n return lines.map((line: string) => {\n const [hash, date, author, message, ...bodyParts] = line.split('|');\n const body = bodyParts.join('|').trim();\n \n return this.parseCommit({\n hash: hash.substring(0, 7), // Short hash\n date,\n author,\n message,\n body: body || undefined,\n breaking: false,\n type: undefined,\n scope: undefined\n });\n });\n } catch (error) {\n return [];\n }\n }\n\n private parseCommit(commit: CommitInfo): CommitInfo {\n if (this.config.format !== 'conventional') {\n return commit;\n }\n\n // Parse conventional commit format: type(scope): description\n const conventionalMatch = commit.message.match(/^(\\w+)(?:\\(([^)]+)\\))?: (.+)/);\n \n if (conventionalMatch) {\n const [, type, scope, description] = conventionalMatch;\n commit.type = type;\n commit.scope = scope;\n commit.message = description;\n }\n\n // Check for breaking changes\n commit.breaking = commit.message.includes('BREAKING CHANGE') || \n commit.message.includes('!:') ||\n Boolean(commit.body && commit.body.includes('BREAKING CHANGE'));\n\n return commit;\n }\n\n private organizeCommits(commits: CommitInfo[]): ChangelogSection[] {\n if (this.config.format === 'conventional') {\n return this.organizeConventionalCommits(commits);\n } else {\n return this.organizeSimpleCommits(commits);\n }\n }\n\n private organizeConventionalCommits(commits: CommitInfo[]): ChangelogSection[] {\n const sections: ChangelogSection[] = [];\n \n // Breaking changes (always first)\n const breaking = commits.filter(c => c.breaking);\n if (breaking.length > 0) {\n sections.push({\n title: '⚠️ BREAKING CHANGES',\n commits: breaking\n });\n }\n\n // Features\n const features = commits.filter(c => c.type === 'feat' && !c.breaking);\n if (features.length > 0) {\n sections.push({\n title: '✨ Features',\n commits: features\n });\n }\n\n // Bug fixes\n const fixes = commits.filter(c => c.type === 'fix' && !c.breaking);\n if (fixes.length > 0) {\n sections.push({\n title: '🐛 Bug Fixes',\n commits: fixes\n });\n }\n\n // Documentation\n const docs = commits.filter(c => c.type === 'docs');\n if (docs.length > 0) {\n sections.push({\n title: '📚 Documentation',\n commits: docs\n });\n }\n\n // Performance improvements\n const perf = commits.filter(c => c.type === 'perf');\n if (perf.length > 0) {\n sections.push({\n title: '⚡ Performance',\n commits: perf\n });\n }\n\n // Refactoring\n const refactor = commits.filter(c => c.type === 'refactor');\n if (refactor.length > 0) {\n sections.push({\n title: '♻️ Code Refactoring',\n commits: refactor\n });\n }\n\n // Tests\n const tests = commits.filter(c => c.type === 'test');\n if (tests.length > 0) {\n sections.push({\n title: '✅ Tests',\n commits: tests\n });\n }\n\n // Build/CI\n const build = commits.filter(c => ['build', 'ci', 'chore'].includes(c.type || ''));\n if (build.length > 0) {\n sections.push({\n title: '🔧 Build & CI',\n commits: build\n });\n }\n\n // Other changes\n const other = commits.filter(c => \n !c.breaking && \n !['feat', 'fix', 'docs', 'perf', 'refactor', 'test', 'build', 'ci', 'chore'].includes(c.type || '')\n );\n if (other.length > 0) {\n sections.push({\n title: '📝 Other Changes',\n commits: other\n });\n }\n\n return sections;\n }\n\n private organizeSimpleCommits(commits: CommitInfo[]): ChangelogSection[] {\n return [{\n title: '📝 Changes',\n commits\n }];\n }\n\n private generateChangelogHeader(): string {\n return `# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n`;\n }\n\n private generateChangelogContent(sections: ChangelogSection[]): string {\n const version = this.generateVersionNumber();\n const date = new Date().toISOString().split('T')[0];\n \n let content = `## [${version}] - ${date}\\n\\n`;\n\n sections.forEach(section => {\n if (section.commits.length > 0) {\n content += `### ${section.title}\\n\\n`;\n \n section.commits.forEach(commit => {\n const scope = commit.scope ? `**${commit.scope}**: ` : '';\n const hash = `([${commit.hash}])`;\n \n if (this.config.format === 'conventional') {\n content += `- ${scope}${commit.message} ${hash}\\n`;\n } else {\n content += `- ${commit.message} - ${commit.author} ${hash}\\n`;\n }\n \n // Add breaking change details\n if (commit.breaking && commit.body) {\n const breakingDetails = this.extractBreakingChangeDetails(commit.body);\n if (breakingDetails) {\n content += ` - ⚠️ ${breakingDetails}\\n`;\n }\n }\n });\n \n content += '\\n';\n }\n });\n\n return content;\n }\n\n private generateVersionNumber(): string {\n // Simple version generation - could be enhanced to read from package.json\n // and increment based on commit types\n const now = new Date();\n return `${now.getFullYear()}.${now.getMonth() + 1}.${now.getDate()}`;\n }\n\n private extractBreakingChangeDetails(body: string): string | null {\n const match = body.match(/BREAKING CHANGE:\\s*(.+)/);\n return match ? match[1].trim() : null;\n }\n}","import * as ops from 'fs-extra';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nexport interface UpdateConfig {\n rootPath: string;\n updateTarget: 'all' | 'system' | 'tasks' | 'sop';\n autoCommit: boolean;\n}\n\nexport interface ChangeAnalysis {\n filesChanged: string[];\n newFiles: string[];\n deletedFiles: string[];\n gitCommits: string[];\n architectureChanges: boolean;\n configChanges: boolean;\n hasNewFeatures: boolean;\n}\n\nexport interface UpdateResult {\n success: boolean;\n message: string;\n updatedFiles: string[];\n suggestions: string[];\n}\n\nexport class UpdateAgentDocs {\n private config: UpdateConfig;\n\n constructor(config: UpdateConfig) {\n this.config = config;\n }\n\n async updateDocs(): Promise<UpdateResult> {\n try {\n // Check if .agent system exists\n const agentPath = path.join(this.config.rootPath, '.agent');\n if (!existsSync(agentPath)) {\n return {\n success: false,\n message: '❌ .agent documentation system not found. Run `/init-agent` first.',\n updatedFiles: [],\n suggestions: ['Run `/init-agent` to initialize the documentation system']\n };\n }\n\n // Analyze recent changes\n const analysis = await this.analyzeChanges();\n \n if (analysis.filesChanged.length === 0 && analysis.gitCommits.length === 0) {\n return {\n success: true,\n message: '✅ No significant changes detected. Documentation is up to date.',\n updatedFiles: [],\n suggestions: []\n };\n }\n\n // Update documentation based on analysis\n const updatedFiles: string[] = [];\n const suggestions: string[] = [];\n\n // Update system documentation if needed\n if (this.shouldUpdate('system') && (analysis.architectureChanges || analysis.configChanges)) {\n const systemUpdates = await this.updateSystemDocs(analysis);\n updatedFiles.push(...systemUpdates);\n }\n\n // Update critical state\n const criticalStateUpdate = await this.updateCriticalState(analysis);\n if (criticalStateUpdate) {\n updatedFiles.push('.agent/system/critical-state.md');\n }\n\n // Generate suggestions for manual updates\n suggestions.push(...this.generateSuggestions(analysis));\n\n const message = this.generateUpdateMessage(analysis, updatedFiles);\n\n return {\n success: true,\n message,\n updatedFiles,\n suggestions\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to update agent docs: ${error.message}`,\n updatedFiles: [],\n suggestions: []\n };\n }\n }\n\n private async analyzeChanges(): Promise<ChangeAnalysis> {\n const analysis: ChangeAnalysis = {\n filesChanged: [],\n newFiles: [],\n deletedFiles: [],\n gitCommits: [],\n architectureChanges: false,\n configChanges: false,\n hasNewFeatures: false\n };\n\n try {\n // Get git changes since last update\n const { execSync } = require('child_process');\n \n // Get recent commits (last 10)\n try {\n const commits = execSync('git log --oneline -10', { \n cwd: this.config.rootPath, \n encoding: 'utf-8' \n });\n analysis.gitCommits = commits.trim().split('\\n').filter(Boolean);\n } catch (error) {\n // Not a git repo or no commits\n }\n\n // Get changed files since last commit\n try {\n const changedFiles = execSync('git diff --name-only HEAD~5..HEAD', {\n cwd: this.config.rootPath,\n encoding: 'utf-8'\n });\n analysis.filesChanged = changedFiles.trim().split('\\n').filter(Boolean);\n } catch (error) {\n // Use file system timestamps as fallback\n analysis.filesChanged = await this.getRecentlyModifiedFiles();\n }\n\n // Analyze types of changes\n analysis.architectureChanges = this.detectArchitectureChanges(analysis.filesChanged);\n analysis.configChanges = this.detectConfigChanges(analysis.filesChanged);\n analysis.hasNewFeatures = this.detectNewFeatures(analysis.gitCommits);\n\n return analysis;\n } catch (error) {\n return analysis;\n }\n }\n\n private async getRecentlyModifiedFiles(): Promise<string[]> {\n // Fallback: get files modified in last 24 hours\n const oneDayAgo = Date.now() - (24 * 60 * 60 * 1000);\n const recentFiles: string[] = [];\n\n const scanDir = async (dirPath: string): Promise<void> => {\n try {\n const entries = await ops.promises.readdir(dirPath, { withFileTypes: true });\n \n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n \n if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {\n await scanDir(fullPath);\n } else if (entry.isFile()) {\n const stats = await ops.promises.stat(fullPath);\n if (stats.mtime.getTime() > oneDayAgo) {\n recentFiles.push(path.relative(this.config.rootPath, fullPath));\n }\n }\n }\n } catch (error) {\n // Skip directories we can't read\n }\n };\n\n await scanDir(this.config.rootPath);\n return recentFiles;\n }\n\n private detectArchitectureChanges(filesChanged: string[]): boolean {\n const architectureIndicators = [\n 'src/tools/', 'src/commands/', 'src/ui/', 'src/agent/',\n 'package.json', 'tsconfig.json', 'src/index.ts'\n ];\n \n return filesChanged.some(file => \n architectureIndicators.some(indicator => file.includes(indicator))\n );\n }\n\n private detectConfigChanges(filesChanged: string[]): boolean {\n const configFiles = [\n 'package.json', 'tsconfig.json', '.xcli/', 'CLAUDE.md',\n '.env', '.gitignore', 'README.md'\n ];\n \n return filesChanged.some(file =>\n configFiles.some(config => file.includes(config))\n );\n }\n\n private detectNewFeatures(commits: string[]): boolean {\n const featureKeywords = ['feat:', 'add:', 'new:', 'feature:', 'implement:'];\n return commits.some(commit =>\n featureKeywords.some(keyword => commit.toLowerCase().includes(keyword))\n );\n }\n\n private shouldUpdate(target: string): boolean {\n return this.config.updateTarget === 'all' || this.config.updateTarget === target;\n }\n\n private async updateSystemDocs(analysis: ChangeAnalysis): Promise<string[]> {\n const updatedFiles: string[] = [];\n const systemPath = path.join(this.config.rootPath, '.agent', 'system');\n\n // Update architecture.md if architecture changed\n if (analysis.architectureChanges) {\n try {\n const archPath = path.join(systemPath, 'architecture.md');\n if (existsSync(archPath)) {\n const content = await ops.promises.readFile(archPath, 'utf-8');\n const updatedContent = await this.updateArchitectureDoc(content, analysis);\n await ops.promises.writeFile(archPath, updatedContent);\n updatedFiles.push('.agent/system/architecture.md');\n }\n } catch (error) {\n // Continue with other updates\n }\n }\n\n return updatedFiles;\n }\n\n private async updateCriticalState(analysis: ChangeAnalysis): Promise<boolean> {\n try {\n const criticalStatePath = path.join(this.config.rootPath, '.agent', 'system', 'critical-state.md');\n \n if (!existsSync(criticalStatePath)) {\n return false;\n }\n\n const content = await ops.promises.readFile(criticalStatePath, 'utf-8');\n \n // Update timestamp and recent changes\n const timestamp = new Date().toISOString();\n const changesSummary = this.generateChangesSummary(analysis);\n \n let updatedContent = content.replace(\n /Last Updated: .*/,\n `Last Updated: ${timestamp}`\n );\n\n // Add recent changes section if significant changes detected\n if (analysis.filesChanged.length > 0) {\n const recentChangesSection = `\n\n## Recent Changes\n${changesSummary}`;\n\n if (content.includes('## Recent Changes')) {\n updatedContent = updatedContent.replace(\n /## Recent Changes[\\s\\S]*?(?=##|$)/,\n recentChangesSection\n );\n } else {\n updatedContent = updatedContent.replace(\n /Last Updated: .*/,\n `Last Updated: ${timestamp}\\nUpdated By: /update-agent-docs after detecting changes${recentChangesSection}`\n );\n }\n }\n\n await ops.promises.writeFile(criticalStatePath, updatedContent);\n return true;\n } catch (error) {\n return false;\n }\n }\n\n private async updateArchitectureDoc(content: string, analysis: ChangeAnalysis): Promise<string> {\n // Simple update - add timestamp and recent changes note\n const timestamp = new Date().toISOString().split('T')[0];\n \n return content.replace(\n /\\*Updated: .*/,\n `*Updated: ${timestamp} - Recent changes detected in: ${analysis.filesChanged.slice(0, 3).join(', ')}${analysis.filesChanged.length > 3 ? '...' : ''}*`\n );\n }\n\n private generateChangesSummary(analysis: ChangeAnalysis): string {\n const lines: string[] = [];\n \n if (analysis.gitCommits.length > 0) {\n lines.push(`**Recent Commits (${analysis.gitCommits.length}):**`);\n analysis.gitCommits.slice(0, 5).forEach(commit => {\n lines.push(`- ${commit}`);\n });\n if (analysis.gitCommits.length > 5) {\n lines.push(`- ... and ${analysis.gitCommits.length - 5} more`);\n }\n }\n\n if (analysis.filesChanged.length > 0) {\n lines.push(`\\n**Files Modified (${analysis.filesChanged.length}):**`);\n analysis.filesChanged.slice(0, 10).forEach(file => {\n lines.push(`- ${file}`);\n });\n if (analysis.filesChanged.length > 10) {\n lines.push(`- ... and ${analysis.filesChanged.length - 10} more files`);\n }\n }\n\n if (analysis.architectureChanges) {\n lines.push('\\n**⚠️ Architecture changes detected**');\n }\n \n if (analysis.configChanges) {\n lines.push('**⚙️ Configuration changes detected**');\n }\n\n return lines.join('\\n');\n }\n\n private generateSuggestions(analysis: ChangeAnalysis): string[] {\n const suggestions: string[] = [];\n\n if (analysis.hasNewFeatures) {\n suggestions.push('📝 Consider adding new features to .agent/tasks/ as PRDs');\n suggestions.push('📖 Update README.md with new feature documentation');\n }\n\n if (analysis.architectureChanges) {\n suggestions.push('🏗️ Review and update .agent/system/architecture.md manually');\n suggestions.push('📋 Update API documentation if interfaces changed');\n }\n\n if (analysis.configChanges) {\n suggestions.push('⚙️ Review configuration changes in .agent/system/');\n }\n\n if (analysis.filesChanged.length > 20) {\n suggestions.push('🧹 Consider running /compact to optimize conversation history');\n }\n\n return suggestions;\n }\n\n private generateUpdateMessage(analysis: ChangeAnalysis, updatedFiles: string[]): string {\n let message = `✅ **Agent Documentation Updated**\\n\\n`;\n\n message += `📊 **Change Analysis:**\\n`;\n message += `- Files changed: ${analysis.filesChanged.length}\\n`;\n message += `- Recent commits: ${analysis.gitCommits.length}\\n`;\n message += `- Architecture changes: ${analysis.architectureChanges ? '✅' : '❌'}\\n`;\n message += `- Config changes: ${analysis.configChanges ? '✅' : '❌'}\\n\\n`;\n\n if (updatedFiles.length > 0) {\n message += `📝 **Updated Files:**\\n`;\n updatedFiles.forEach(file => {\n message += `- ${file}\\n`;\n });\n message += '\\n';\n }\n\n return message;\n }\n}","export interface SubagentConfig {\n type: 'docgen' | 'prd-assistant' | 'delta' | 'token-optimizer' | 'summarizer' | 'sentinel' | 'regression-hunter' | 'guardrail';\n contextLimit: number;\n timeout: number;\n maxRetries: number;\n}\n\nexport interface SubagentTask {\n id: string;\n type: SubagentConfig['type'];\n input: any;\n priority: 'low' | 'medium' | 'high';\n createdAt: number;\n}\n\nexport interface SubagentResult {\n taskId: string;\n type: SubagentConfig['type'];\n success: boolean;\n output?: any;\n error?: string;\n tokensUsed: number;\n executionTime: number;\n summary: string;\n}\n\nexport interface SubagentContext {\n id: string;\n type: SubagentConfig['type'];\n prompt: string;\n data: any;\n startTime: number;\n tokenBudget: number;\n}\n\nexport class SubagentFramework {\n private activeTasks: Map<string, SubagentTask> = new Map();\n private results: Map<string, SubagentResult> = new Map();\n private configs: Map<SubagentConfig['type'], SubagentConfig> = new Map();\n\n constructor() {\n this.initializeConfigs();\n }\n\n private initializeConfigs(): void {\n const defaultConfigs: Record<SubagentConfig['type'], SubagentConfig> = {\n 'docgen': {\n type: 'docgen',\n contextLimit: 2000,\n timeout: 30000,\n maxRetries: 2\n },\n 'prd-assistant': {\n type: 'prd-assistant',\n contextLimit: 2000,\n timeout: 20000,\n maxRetries: 1\n },\n 'delta': {\n type: 'delta',\n contextLimit: 1500,\n timeout: 15000,\n maxRetries: 1\n },\n 'token-optimizer': {\n type: 'token-optimizer',\n contextLimit: 1000,\n timeout: 10000,\n maxRetries: 1\n },\n 'summarizer': {\n type: 'summarizer',\n contextLimit: 2000,\n timeout: 25000,\n maxRetries: 2\n },\n 'sentinel': {\n type: 'sentinel',\n contextLimit: 1000,\n timeout: 10000,\n maxRetries: 1\n },\n 'regression-hunter': {\n type: 'regression-hunter',\n contextLimit: 1500,\n timeout: 15000,\n maxRetries: 1\n },\n 'guardrail': {\n type: 'guardrail',\n contextLimit: 1000,\n timeout: 10000,\n maxRetries: 1\n }\n };\n\n for (const [type, config] of Object.entries(defaultConfigs)) {\n this.configs.set(type as SubagentConfig['type'], config);\n }\n }\n\n async spawnSubagent(task: Omit<SubagentTask, 'id' | 'createdAt'>): Promise<string> {\n const taskId = this.generateTaskId();\n const fullTask: SubagentTask = {\n ...task,\n id: taskId,\n createdAt: Date.now()\n };\n\n this.activeTasks.set(taskId, fullTask);\n\n // Execute subagent in background (simulated)\n this.executeSubagent(fullTask);\n\n return taskId;\n }\n\n private async executeSubagent(task: SubagentTask): Promise<void> {\n const config = this.configs.get(task.type);\n if (!config) {\n this.setResult(task.id, {\n taskId: task.id,\n type: task.type,\n success: false,\n error: 'Unknown subagent type',\n tokensUsed: 0,\n executionTime: 0,\n summary: 'Failed to execute: unknown type'\n });\n return;\n }\n\n const startTime = Date.now();\n \n try {\n // Create isolated context for subagent\n const context: SubagentContext = {\n id: this.generateContextId(),\n type: task.type,\n prompt: this.generatePromptForType(task.type, task.input),\n data: task.input,\n startTime,\n tokenBudget: config.contextLimit\n };\n\n // Simulate subagent execution\n const result = await this.executeInIsolatedContext(context, config);\n \n this.setResult(task.id, {\n taskId: task.id,\n type: task.type,\n success: true,\n output: result.output,\n tokensUsed: result.tokensUsed,\n executionTime: Date.now() - startTime,\n summary: result.summary\n });\n\n } catch (error: any) {\n this.setResult(task.id, {\n taskId: task.id,\n type: task.type,\n success: false,\n error: error.message,\n tokensUsed: 0,\n executionTime: Date.now() - startTime,\n summary: `Failed: ${error.message}`\n });\n }\n\n // Clean up active task\n this.activeTasks.delete(task.id);\n }\n\n private async executeInIsolatedContext(\n context: SubagentContext, \n _config: SubagentConfig\n ): Promise<{ output: any; tokensUsed: number; summary: string }> {\n \n // This is where we would integrate with the actual AI model\n // For now, we'll simulate the execution based on the subagent type\n \n switch (context.type) {\n case 'docgen':\n return this.simulateDocGenAgent(context);\n case 'prd-assistant':\n return this.simulatePRDAssistantAgent(context);\n case 'delta':\n return this.simulateDeltaAgent(context);\n case 'token-optimizer':\n return this.simulateTokenOptimizerAgent(context);\n case 'summarizer':\n return this.simulateSummarizerAgent(context);\n case 'sentinel':\n return this.simulateSentinelAgent(context);\n case 'regression-hunter':\n return this.simulateRegressionHunterAgent(context);\n case 'guardrail':\n return this.simulateGuardrailAgent(context);\n default:\n throw new Error(`Unsupported subagent type: ${context.type}`);\n }\n }\n\n private async simulateDocGenAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { projectPath, docType } = context.data;\n \n // Simulate document generation\n await this.delay(2000); // Simulate processing time\n \n return {\n output: {\n documentType: docType,\n content: `# Generated ${docType}\\n\\nThis is a generated document for ${projectPath}.\\n\\n*Generated by DocGenAgent*`,\n metadata: {\n projectPath,\n generatedAt: new Date().toISOString(),\n wordCount: 150\n }\n },\n tokensUsed: 1500,\n summary: `Generated ${docType} documentation (150 words)`\n };\n }\n\n private async simulatePRDAssistantAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { prdPath: _prdPath, prdContent: _prdContent } = context.data;\n \n await this.delay(1500);\n \n return {\n output: {\n suggestions: [\n 'Consider existing MCP integration patterns',\n 'Reference user-settings.json structure',\n 'Check CLI command naming conventions'\n ],\n conflicts: [],\n similarTasks: ['user-management-prd.md'],\n architectureImpact: 'May need new tools/ folder'\n },\n tokensUsed: 1200,\n summary: `Analyzed PRD: 3 suggestions, 1 similar task found`\n };\n }\n\n private async simulateDeltaAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { fromCommit, toCommit: _toCommit } = context.data;\n \n await this.delay(1000);\n \n return {\n output: {\n filesChanged: ['src/tools/documentation/', 'src/hooks/use-input-handler.ts'],\n architectureChanges: true,\n newFeatures: ['documentation system'],\n impact: 'Major feature addition - documentation generation'\n },\n tokensUsed: 800,\n summary: `Analyzed changes from ${fromCommit}: 2 files, architecture changes detected`\n };\n }\n\n private async simulateTokenOptimizerAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { currentTokens, targetReduction: _targetReduction } = context.data;\n \n await this.delay(500);\n \n return {\n output: {\n currentUsage: currentTokens,\n optimizedUsage: Math.floor(currentTokens * 0.3),\n reduction: Math.floor(currentTokens * 0.7),\n suggestions: [\n 'Compress conversation history',\n 'Archive old tool results',\n 'Summarize repeated patterns'\n ]\n },\n tokensUsed: 300,\n summary: `Token optimization: ${Math.floor(currentTokens * 0.7)} tokens can be saved (70% reduction)`\n };\n }\n\n private async simulateSummarizerAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { content, compressionTarget } = context.data;\n \n await this.delay(2500);\n \n const originalLength = content.length;\n const targetLength = Math.floor(originalLength * (compressionTarget || 0.3));\n \n return {\n output: {\n originalLength,\n compressedLength: targetLength,\n compressionRatio: 1 - (compressionTarget || 0.3),\n summary: content.substring(0, targetLength) + '...',\n keyPoints: [\n 'Main objectives completed',\n 'Documentation system implemented',\n 'Multiple commands added'\n ]\n },\n tokensUsed: 1800,\n summary: `Compressed content from ${originalLength} to ${targetLength} chars (${Math.round((1 - (compressionTarget || 0.3)) * 100)}% reduction)`\n };\n }\n\n private async simulateSentinelAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { errorLogs: _errorLogs, recentCommands: _recentCommands } = context.data;\n \n await this.delay(800);\n \n return {\n output: {\n errorsDetected: 0,\n patternsFound: [],\n recommendations: ['System running normally'],\n alertLevel: 'green'\n },\n tokensUsed: 400,\n summary: 'System monitoring: No issues detected'\n };\n }\n\n private async simulateRegressionHunterAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { proposedChanges: _proposedChanges, knownFailures: _knownFailures } = context.data;\n \n await this.delay(1200);\n \n return {\n output: {\n riskLevel: 'low',\n potentialIssues: [],\n recommendations: ['Changes appear safe to proceed'],\n testsSuggested: []\n },\n tokensUsed: 900,\n summary: 'Regression analysis: Low risk, no conflicts with known failures'\n };\n }\n\n private async simulateGuardrailAgent(context: SubagentContext): Promise<{ output: any; tokensUsed: number; summary: string }> {\n const { planDescription: _planDescription, rules: _rules } = context.data;\n \n await this.delay(600);\n \n return {\n output: {\n violationsFound: [],\n warnings: [],\n compliance: 'passed',\n newRuleSuggestions: []\n },\n tokensUsed: 350,\n summary: 'Guardrail check: All rules satisfied'\n };\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private generateTaskId(): string {\n return `task_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private generateContextId(): string {\n return `ctx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private generatePromptForType(type: SubagentConfig['type'], input: any): string {\n const prompts: Record<SubagentConfig['type'], string> = {\n 'docgen': `Generate documentation for the provided project. Focus on clarity and completeness. Input: ${JSON.stringify(input)}`,\n 'prd-assistant': `Analyze this PRD for potential issues, suggestions, and conflicts with existing project context. Input: ${JSON.stringify(input)}`,\n 'delta': `Analyze the changes between commits and summarize the impact. Input: ${JSON.stringify(input)}`,\n 'token-optimizer': `Analyze token usage and suggest optimizations. Input: ${JSON.stringify(input)}`,\n 'summarizer': `Summarize and compress the provided content while preserving key information. Input: ${JSON.stringify(input)}`,\n 'sentinel': `Monitor for errors and patterns in the provided logs/commands. Input: ${JSON.stringify(input)}`,\n 'regression-hunter': `Check proposed changes against known failure patterns. Input: ${JSON.stringify(input)}`,\n 'guardrail': `Validate the plan against established rules and constraints. Input: ${JSON.stringify(input)}`\n };\n\n return prompts[type];\n }\n\n private setResult(taskId: string, result: SubagentResult): void {\n this.results.set(taskId, result);\n }\n\n async getResult(taskId: string): Promise<SubagentResult | null> {\n return this.results.get(taskId) || null;\n }\n\n async waitForResult(taskId: string, timeoutMs: number = 30000): Promise<SubagentResult> {\n const startTime = Date.now();\n \n while (Date.now() - startTime < timeoutMs) {\n const result = await this.getResult(taskId);\n if (result) {\n return result;\n }\n await this.delay(100); // Check every 100ms\n }\n \n throw new Error(`Subagent task ${taskId} timed out after ${timeoutMs}ms`);\n }\n\n getActiveTaskCount(): number {\n return this.activeTasks.size;\n }\n\n getCompletedTaskCount(): number {\n return this.results.size;\n }\n\n getPerformanceMetrics(): {\n totalTasks: number;\n activeTasks: number;\n completedTasks: number;\n averageExecutionTime: number;\n totalTokensUsed: number;\n } {\n const results = Array.from(this.results.values());\n const avgExecTime = results.length > 0 \n ? results.reduce((sum, r) => sum + r.executionTime, 0) / results.length \n : 0;\n const totalTokens = results.reduce((sum, r) => sum + r.tokensUsed, 0);\n\n return {\n totalTasks: this.activeTasks.size + this.results.size,\n activeTasks: this.activeTasks.size,\n completedTasks: this.results.size,\n averageExecutionTime: Math.round(avgExecTime),\n totalTokensUsed: totalTokens\n };\n }\n\n clearOldResults(maxAge: number = 3600000): void { // 1 hour default\n const now = Date.now();\n for (const [taskId, result] of this.results.entries()) {\n if (now - result.executionTime > maxAge) {\n this.results.delete(taskId);\n }\n }\n }\n}","import * as ops from 'fs-extra';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport { existsSync } from 'fs';\n\nexport interface IncidentInfo {\n id: string;\n title: string;\n date: string;\n trigger: string;\n rootCause: string;\n fix: string;\n impact: 'low' | 'medium' | 'high';\n recurrenceCount: number;\n relatedFiles: string[];\n guardrailCreated?: string;\n}\n\nexport interface GuardrailRule {\n id: string;\n name: string;\n description: string;\n category: 'naming' | 'configuration' | 'architecture' | 'process';\n severity: 'warning' | 'error';\n pattern: string;\n enabled: boolean;\n createdFrom?: string; // incident ID\n lastTriggered?: string;\n}\n\nexport interface SelfHealingConfig {\n enabled: boolean;\n onErrorPrompt: 'gentle' | 'persistent' | 'off';\n enforceGuardrails: boolean;\n simulateOnPlan: 'off' | 'smart' | 'always';\n}\n\nexport class SelfHealingSystem {\n private rootPath: string;\n private agentPath: string;\n private config: SelfHealingConfig;\n\n constructor(rootPath: string, config?: Partial<SelfHealingConfig>) {\n this.rootPath = rootPath;\n this.agentPath = path.join(rootPath, '.agent');\n this.config = {\n enabled: true,\n onErrorPrompt: 'gentle',\n enforceGuardrails: true,\n simulateOnPlan: 'smart',\n ...config\n };\n }\n\n async captureIncident(error: any, context?: any): Promise<{ success: boolean; incidentId?: string; message: string }> {\n try {\n const incident = await this.analyzeAndCreateIncident(error, context);\n const incidentPath = path.join(this.agentPath, 'incidents', `${incident.id}.md`);\n \n // Ensure incidents directory exists\n await ops.mkdir(path.dirname(incidentPath), { recursive: true });\n \n // Write incident documentation\n const incidentContent = this.generateIncidentContent(incident);\n await ops.promises.writeFile(incidentPath, incidentContent);\n\n // Try to create a guardrail\n const guardrail = await this.generateGuardrailFromIncident(incident);\n if (guardrail) {\n await this.saveGuardrail(guardrail);\n incident.guardrailCreated = guardrail.id;\n }\n\n return {\n success: true,\n incidentId: incident.id,\n message: `✅ Incident documented: ${incident.title}\\n${guardrail ? `🛡️ Guardrail created: ${guardrail.name}` : ''}\\n📁 Saved to: .agent/incidents/${incident.id}.md`\n };\n\n } catch (error: any) {\n return {\n success: false,\n message: `Failed to capture incident: ${error.message}`\n };\n }\n }\n\n private async analyzeAndCreateIncident(error: any, context?: any): Promise<IncidentInfo> {\n const id = this.generateIncidentId();\n const now = new Date();\n \n // Extract information from error\n const errorMessage = error?.message || error?.toString() || 'Unknown error';\n const title = this.extractErrorTitle(errorMessage);\n const trigger = this.extractTrigger(error, context);\n const rootCause = this.analyzeRootCause(error, context);\n const fix = this.suggestFix(error, context);\n const impact = this.assessImpact(error, context);\n const relatedFiles = this.extractRelatedFiles(error, context);\n\n // Check for previous occurrences\n const recurrenceCount = await this.countPreviousOccurrences(title);\n\n return {\n id,\n title,\n date: now.toISOString(),\n trigger,\n rootCause,\n fix,\n impact,\n recurrenceCount,\n relatedFiles\n };\n }\n\n private extractErrorTitle(errorMessage: string): string {\n // Extract a clean title from error message\n const cleaned = errorMessage\n .replace(/^Error:\\s*/i, '')\n .replace(/\\s+at\\s+.*$/, '')\n .replace(/\\s+\\(.*\\)$/, '')\n .substring(0, 100);\n \n return cleaned || 'Unknown Error';\n }\n\n private extractTrigger(error: any, context?: any): string {\n if (context?.command) {\n return `Command: ${context.command}`;\n }\n if (context?.operation) {\n return `Operation: ${context.operation}`;\n }\n if (error?.stack) {\n const stackLine = error.stack.split('\\n')[1];\n return stackLine ? `Code: ${stackLine.trim()}` : 'Unknown trigger';\n }\n return 'Unknown trigger';\n }\n\n private analyzeRootCause(error: any, context?: any): string {\n const errorMessage = error?.message || '';\n \n // Common patterns\n if (errorMessage.includes('ENOENT') || errorMessage.includes('not found')) {\n return 'File or resource not found';\n }\n if (errorMessage.includes('permission denied') || errorMessage.includes('EACCES')) {\n return 'Permission denied - insufficient access rights';\n }\n if (errorMessage.includes('timeout')) {\n return 'Operation timed out - possible network or performance issue';\n }\n if (errorMessage.includes('Cannot find module')) {\n return 'Missing dependency or incorrect import path';\n }\n if (errorMessage.includes('syntax error') || errorMessage.includes('unexpected token')) {\n return 'Code syntax error';\n }\n \n return 'Root cause requires investigation';\n }\n\n private suggestFix(error: any, context?: any): string {\n const errorMessage = error?.message || '';\n \n if (errorMessage.includes('ENOENT')) {\n return 'Ensure the required file or directory exists before accessing it';\n }\n if (errorMessage.includes('permission denied')) {\n return 'Check file permissions or run with appropriate privileges';\n }\n if (errorMessage.includes('Cannot find module')) {\n return 'Install missing dependency or correct the import path';\n }\n if (errorMessage.includes('timeout')) {\n return 'Increase timeout value or optimize the operation';\n }\n \n return 'Investigate error details and apply appropriate fix';\n }\n\n private assessImpact(error: any, context?: any): 'low' | 'medium' | 'high' {\n const errorMessage = error?.message || '';\n \n if (errorMessage.includes('fatal') || errorMessage.includes('critical')) {\n return 'high';\n }\n if (context?.operation && ['build', 'deploy', 'init'].includes(context.operation)) {\n return 'high';\n }\n if (errorMessage.includes('warning')) {\n return 'low';\n }\n \n return 'medium';\n }\n\n private extractRelatedFiles(error: any, context?: any): string[] {\n const files: string[] = [];\n \n if (context?.files) {\n files.push(...context.files);\n }\n \n if (error?.stack) {\n const stackLines = error.stack.split('\\n');\n for (const line of stackLines) {\n const fileMatch = line.match(/\\((.*?):\\d+:\\d+\\)/);\n if (fileMatch && fileMatch[1]) {\n files.push(fileMatch[1]);\n }\n }\n }\n \n return [...new Set(files)]; // Remove duplicates\n }\n\n private async countPreviousOccurrences(title: string): Promise<number> {\n try {\n const incidentsPath = path.join(this.agentPath, 'incidents');\n if (!existsSync(incidentsPath)) {\n return 0;\n }\n\n const files = await ops.promises.readdir(incidentsPath);\n let count = 0;\n\n for (const file of files) {\n if (file.endsWith('.md')) {\n const filePath = path.join(incidentsPath, file);\n const content = await ops.promises.readFile(filePath, 'utf-8');\n if (content.includes(title)) {\n count++;\n }\n }\n }\n\n return Math.max(0, count - 1); // Subtract 1 for current incident\n } catch (error) {\n return 0;\n }\n }\n\n private generateIncidentContent(incident: IncidentInfo): string {\n return `# ${incident.title} - ${incident.date.split('T')[0]}\n\n## 📊 Incident Summary\n- **ID**: ${incident.id}\n- **Date**: ${incident.date}\n- **Impact**: ${incident.impact.toUpperCase()}\n- **Recurrence**: ${incident.recurrenceCount > 0 ? `${incident.recurrenceCount} previous occurrences` : 'First occurrence'}\n\n## 🔥 Trigger\n${incident.trigger}\n\n## 🔍 Root Cause\n${incident.rootCause}\n\n## ✅ Fix Applied\n${incident.fix}\n\n## 📁 Related Files\n${incident.relatedFiles.length > 0 ? incident.relatedFiles.map(f => `- ${f}`).join('\\n') : 'None identified'}\n\n## 🛡️ Prevention\n${incident.guardrailCreated ? `Guardrail created: ${incident.guardrailCreated}` : 'Manual prevention required'}\n\n## 📚 Related Documentation\n- [Self-Healing SOP](../sop/self-healing-workflow.md)\n- [Guardrails](../guardrails/)\n- [System Critical State](../system/critical-state.md)\n\n---\n*Generated by X-CLI Self-Healing System*\n*Incident ID: ${incident.id}*\n`;\n }\n\n private async generateGuardrailFromIncident(incident: IncidentInfo): Promise<GuardrailRule | null> {\n // Only create guardrails for recurring issues or high-impact incidents\n if (incident.recurrenceCount === 0 && incident.impact !== 'high') {\n return null;\n }\n\n const id = `guard_${incident.id}`;\n const category = this.determineGuardrailCategory(incident);\n const pattern = this.createGuardrailPattern(incident);\n\n if (!pattern) {\n return null;\n }\n\n return {\n id,\n name: `Prevent: ${incident.title}`,\n description: `Automatically generated from incident ${incident.id}. ${incident.rootCause}`,\n category,\n severity: incident.impact === 'high' ? 'error' : 'warning',\n pattern,\n enabled: true,\n createdFrom: incident.id\n };\n }\n\n private determineGuardrailCategory(incident: IncidentInfo): GuardrailRule['category'] {\n if (incident.trigger.includes('file') || incident.trigger.includes('path')) {\n return 'configuration';\n }\n if (incident.trigger.includes('command') || incident.trigger.includes('operation')) {\n return 'process';\n }\n if (incident.relatedFiles.some(f => f.includes('src/') || f.includes('lib/'))) {\n return 'architecture';\n }\n return 'process';\n }\n\n private createGuardrailPattern(incident: IncidentInfo): string | null {\n // Create simple patterns based on common error types\n const errorMessage = incident.trigger.toLowerCase();\n \n if (errorMessage.includes('enoent') || errorMessage.includes('not found')) {\n return 'check_file_exists';\n }\n if (errorMessage.includes('permission')) {\n return 'check_permissions';\n }\n if (errorMessage.includes('module')) {\n return 'check_dependencies';\n }\n \n return null;\n }\n\n private async saveGuardrail(guardrail: GuardrailRule): Promise<void> {\n const guardrailsPath = path.join(this.agentPath, 'guardrails');\n await ops.mkdir(guardrailsPath, { recursive: true });\n \n const filePath = path.join(guardrailsPath, `${guardrail.id}.md`);\n const content = this.generateGuardrailContent(guardrail);\n await ops.promises.writeFile(filePath, content);\n }\n\n private generateGuardrailContent(guardrail: GuardrailRule): string {\n return `# ${guardrail.name}\n\n## 📋 Rule Details\n- **ID**: ${guardrail.id}\n- **Category**: ${guardrail.category}\n- **Severity**: ${guardrail.severity}\n- **Status**: ${guardrail.enabled ? 'Enabled' : 'Disabled'}\n\n## 📝 Description\n${guardrail.description}\n\n## 🔍 Pattern\n\\`${guardrail.pattern}\\`\n\n## 🛠️ Implementation\nThis guardrail checks for the following conditions:\n- Pattern: ${guardrail.pattern}\n- Action: ${guardrail.severity === 'error' ? 'Block operation' : 'Show warning'}\n\n## 📚 Related\n${guardrail.createdFrom ? `- Created from incident: ${guardrail.createdFrom}` : ''}\n- Category: ${guardrail.category}\n\n---\n*Generated by X-CLI Self-Healing System*\n`;\n }\n\n async checkGuardrails(operation: string, context?: any): Promise<{ violations: GuardrailRule[]; warnings: GuardrailRule[]; passed: boolean }> {\n const violations: GuardrailRule[] = [];\n const warnings: GuardrailRule[] = [];\n\n try {\n const guardrails = await this.loadAllGuardrails();\n \n for (const guardrail of guardrails) {\n if (!guardrail.enabled) continue;\n\n const violated = this.checkGuardrailPattern(guardrail.pattern, operation, context);\n if (violated) {\n if (guardrail.severity === 'error') {\n violations.push(guardrail);\n } else {\n warnings.push(guardrail);\n }\n }\n }\n } catch (error) {\n // If we can't load guardrails, allow operation to proceed\n }\n\n return {\n violations,\n warnings,\n passed: violations.length === 0\n };\n }\n\n private async loadAllGuardrails(): Promise<GuardrailRule[]> {\n const guardrailsPath = path.join(this.agentPath, 'guardrails');\n if (!existsSync(guardrailsPath)) {\n return [];\n }\n\n const files = await ops.promises.readdir(guardrailsPath);\n const guardrails: GuardrailRule[] = [];\n\n for (const file of files) {\n if (file.endsWith('.md')) {\n try {\n const content = await ops.promises.readFile(path.join(guardrailsPath, file), 'utf-8');\n const guardrail = this.parseGuardrailFromContent(content);\n if (guardrail) {\n guardrails.push(guardrail);\n }\n } catch (error) {\n // Skip files we can't parse\n }\n }\n }\n\n return guardrails;\n }\n\n private parseGuardrailFromContent(content: string): GuardrailRule | null {\n try {\n const idMatch = content.match(/\\*\\*ID\\*\\*:\\s*(.+)/);\n const nameMatch = content.match(/^#\\s*(.+)/m);\n const categoryMatch = content.match(/\\*\\*Category\\*\\*:\\s*(.+)/);\n const severityMatch = content.match(/\\*\\*Severity\\*\\*:\\s*(.+)/);\n const statusMatch = content.match(/\\*\\*Status\\*\\*:\\s*(.+)/);\n const patternMatch = content.match(/`([^`]+)`/);\n const descMatch = content.match(/## 📝 Description\\n(.+)/);\n\n if (!idMatch || !nameMatch || !patternMatch) {\n return null;\n }\n\n return {\n id: idMatch[1].trim(),\n name: nameMatch[1].trim(),\n description: descMatch ? descMatch[1].trim() : '',\n category: (categoryMatch ? categoryMatch[1].trim() : 'process') as GuardrailRule['category'],\n severity: (severityMatch ? severityMatch[1].trim() : 'warning') as GuardrailRule['severity'],\n pattern: patternMatch[1],\n enabled: statusMatch ? statusMatch[1].includes('Enabled') : true\n };\n } catch (error) {\n return null;\n }\n }\n\n private checkGuardrailPattern(pattern: string, operation: string, context?: any): boolean {\n // Simple pattern matching - could be enhanced\n switch (pattern) {\n case 'check_file_exists':\n return context?.files && context.files.some((f: string) => !existsSync(f));\n case 'check_permissions':\n return false; // Would need actual permission check\n case 'check_dependencies':\n return false; // Would need dependency analysis\n default:\n return operation.toLowerCase().includes(pattern.toLowerCase());\n }\n }\n\n private generateIncidentId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substr(2, 5);\n return `incident_${timestamp}_${random}`;\n }\n\n async listIncidents(): Promise<IncidentInfo[]> {\n const incidentsPath = path.join(this.agentPath, 'incidents');\n if (!existsSync(incidentsPath)) {\n return [];\n }\n\n const files = await ops.promises.readdir(incidentsPath);\n const incidents: IncidentInfo[] = [];\n\n for (const file of files) {\n if (file.endsWith('.md')) {\n try {\n const content = await ops.promises.readFile(path.join(incidentsPath, file), 'utf-8');\n const incident = this.parseIncidentFromContent(content);\n if (incident) {\n incidents.push(incident);\n }\n } catch (error) {\n // Skip files we can't parse\n }\n }\n }\n\n return incidents.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());\n }\n\n private parseIncidentFromContent(content: string): IncidentInfo | null {\n // Basic parsing - could be enhanced\n try {\n const idMatch = content.match(/\\*\\*ID\\*\\*:\\s*(.+)/);\n const titleMatch = content.match(/^#\\s*(.+)/m);\n const dateMatch = content.match(/\\*\\*Date\\*\\*:\\s*(.+)/);\n const impactMatch = content.match(/\\*\\*Impact\\*\\*:\\s*(.+)/);\n\n if (!idMatch || !titleMatch) {\n return null;\n }\n\n return {\n id: idMatch[1].trim(),\n title: titleMatch[1].split(' - ')[0].trim(),\n date: dateMatch ? dateMatch[1].trim() : '',\n trigger: 'Unknown',\n rootCause: 'Unknown',\n fix: 'Unknown',\n impact: (impactMatch ? impactMatch[1].toLowerCase().trim() : 'medium') as any,\n recurrenceCount: 0,\n relatedFiles: []\n };\n } catch (error) {\n return null;\n }\n }\n\n getConfig(): SelfHealingConfig {\n return { ...this.config };\n }\n}","{\n \"type\": \"module\",\n \"name\": \"@xagent/one-shot\",\n \"version\": \"1.1.87\",\n \"description\": \"An open-source AI agent that brings advanced AI capabilities directly into your terminal.\",\n \"main\": \"dist/index.js\",\n \"module\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"bin\": {\n \"grok\": \"./dist/index.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"package.json\"\n ],\n \"scripts\": {\n \"local\": \"bun --watch src/index.ts\",\n \"build\": \"tsup src/index.ts --format esm --dts\",\n \"dev\": \"tsx watch src/index.ts\",\n \"lint\": \"eslint src --ext .ts\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepare\": \"husky install\",\n \"dev:site\": \"cd apps/site && npm run start\",\n \"build:site\": \"cd apps/site && npm run build\",\n \"sync:docs\": \"cd apps/site && node src/scripts/sync-agent-docs.js\",\n \"smart-push\": \"./scripts/smart-push.sh\",\n \"push\": \"echo '🚨 BLOCKED: Use npm run smart-push instead' && echo '💡 Direct git push bypasses automation' && exit 1\",\n \"git-push\": \"echo '🚨 BLOCKED: Use npm run smart-push instead' && echo '💡 Direct git push bypasses automation' && exit 1\"\n },\n \"lint-staged\": {\n \".agent/**/*.{md,mdx}\": \"prettier --write\",\n \"apps/site/docs/**/*.{md,mdx}\": \"prettier --write\",\n \"*.{ts,tsx}\": [\n \"eslint --fix --ignore-pattern 'dist/**'\"\n ],\n \"*.{js,jsx,mjs}\": [\n \"eslint --fix --ignore-pattern 'dist/**'\"\n ],\n \"*.{md,mdx}\": [\n \"prettier --write\"\n ],\n \"*.{json,yml,yaml}\": [\n \"prettier --write\"\n ]\n },\n \"keywords\": [\n \"cli\",\n \"agent\",\n \"text-editor\",\n \"ai\",\n \"x-ai\"\n ],\n \"author\": \"x-cli-team\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.0\",\n \"@types/marked-terminal\": \"^6.1.1\",\n \"@typescript-eslint/typescript-estree\": \"^8.46.0\",\n \"ajv\": \"^8.17.1\",\n \"ajv-formats\": \"^3.0.1\",\n \"axios\": \"^1.7.0\",\n \"cfonts\": \"^3.3.0\",\n \"chalk\": \"^5.3.0\",\n \"chokidar\": \"^4.0.3\",\n \"cli-highlight\": \"^2.1.11\",\n \"commander\": \"^12.0.0\",\n \"dotenv\": \"^16.4.0\",\n \"enquirer\": \"^2.4.1\",\n \"fs-extra\": \"^11.2.0\",\n \"fuse.js\": \"^7.1.0\",\n \"glob\": \"^11.0.3\",\n \"ink\": \"^4.4.1\",\n \"js-yaml\": \"^4.1.0\",\n \"marked\": \"^15.0.12\",\n \"marked-terminal\": \"^7.3.0\",\n \"openai\": \"^5.10.1\",\n \"react\": \"^18.3.1\",\n \"ripgrep-node\": \"^1.0.0\",\n \"terminal-image\": \"^4.0.0\",\n \"tiktoken\": \"^1.0.21\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.37.0\",\n \"@types/fs-extra\": \"^11.0.2\",\n \"@types/node\": \"^20.8.0\",\n \"@types/react\": \"^18.3.3\",\n \"@typescript-eslint/eslint-plugin\": \"^8.37.0\",\n \"@typescript-eslint/parser\": \"^8.37.0\",\n \"esbuild\": \"^0.25.10\",\n \"eslint\": \"^9.31.0\",\n \"husky\": \"^9.1.7\",\n \"lint-staged\": \"^16.2.4\",\n \"prettier\": \"^3.6.2\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.0.0\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"preferGlobal\": true,\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/x-cli-team/x-cli.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/x-cli-team/x-cli/issues\"\n },\n \"homepage\": \"https://x-cli.dev\",\n \"icon\": \"docs/assets/logos/x-cli-logo.svg\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"installConfig\": {\n \"hoisting\": false\n },\n \"optionalDependencies\": {\n \"tree-sitter\": \"^0.21.1\",\n \"tree-sitter-javascript\": \"^0.23.4\",\n \"tree-sitter-python\": \"^0.21.0\",\n \"tree-sitter-typescript\": \"^0.21.2\"\n },\n \"trustedDependencies\": [\n \"esbuild\",\n \"tree-sitter\",\n \"tree-sitter-javascript\",\n \"tree-sitter-python\",\n \"tree-sitter-typescript\"\n ]\n}\n","import pkg from \"../../package.json\" with { type: \"json\" };\nimport { exec } from \"child_process\";\nimport { promisify } from \"util\";\n\nconst execAsync = promisify(exec);\n\nexport interface VersionInfo {\n current: string;\n latest: string;\n isUpdateAvailable: boolean;\n updateCommand: string;\n}\n\n/**\n * Check if a new version is available on npm\n */\nexport async function checkForUpdates(): Promise<VersionInfo> {\n try {\n const { stdout } = await execAsync(`npm view ${pkg.name} version`, {\n timeout: 5000,\n });\n \n const latestVersion = stdout.trim();\n const currentVersion = pkg.version;\n \n // Compare versions using simple string comparison\n // For semantic versioning: 1.0.1 vs 1.0.2\n const isUpdateAvailable = latestVersion !== currentVersion && \n isNewerVersion(latestVersion, currentVersion);\n \n return {\n current: currentVersion,\n latest: latestVersion,\n isUpdateAvailable,\n updateCommand: `npm update -g ${pkg.name}@latest`,\n };\n } catch {\n // Silently fail - network issues shouldn't block startup\n return {\n current: pkg.version,\n latest: pkg.version,\n isUpdateAvailable: false,\n updateCommand: `npm update -g ${pkg.name}@latest`,\n };\n }\n}\n\n/**\n * Simple semantic version comparison\n * Returns true if version1 is newer than version2\n */\nfunction isNewerVersion(version1: string, version2: string): boolean {\n const v1Parts = version1.split('.').map(Number);\n const v2Parts = version2.split('.').map(Number);\n \n for (let i = 0; i < Math.max(v1Parts.length, v2Parts.length); i++) {\n const v1Part = v1Parts[i] || 0;\n const v2Part = v2Parts[i] || 0;\n \n if (v1Part > v2Part) return true;\n if (v1Part < v2Part) return false;\n }\n \n return false;\n}\n\n/**\n * Auto-upgrade if user confirms\n */\nexport async function autoUpgrade(): Promise<boolean> {\n try {\n console.log(\"🔄 Upgrading X-CLI...\");\n await execAsync(`npm update -g ${pkg.name}@latest`, {\n timeout: 30000,\n });\n console.log(\"✅ Upgrade completed! Please restart the CLI.\");\n return true;\n } catch (error) {\n console.error(\"❌ Auto-upgrade failed:\", error);\n return false;\n }\n}\n\n/**\n * Get cached version check result (for periodic checks)\n */\nlet cachedVersionInfo: VersionInfo | null = null;\nlet lastCheckTime = 0;\nconst CHECK_INTERVAL = 6 * 60 * 60 * 1000; // 6 hours\n\nexport async function getCachedVersionInfo(): Promise<VersionInfo | null> {\n const now = Date.now();\n \n if (cachedVersionInfo && (now - lastCheckTime) < CHECK_INTERVAL) {\n return cachedVersionInfo;\n }\n \n try {\n cachedVersionInfo = await checkForUpdates();\n lastCheckTime = now;\n return cachedVersionInfo;\n } catch {\n return null;\n }\n}","import { useState, useMemo, useEffect } from \"react\";\nimport { useInput } from \"ink\";\nimport path from \"path\";\nimport { GrokAgent, ChatEntry } from \"../agent/grok-agent.js\";\nimport { ConfirmationService } from \"../utils/confirmation-service.js\";\nimport { useEnhancedInput, Key } from \"./use-enhanced-input.js\";\nimport { GrokToolCall } from \"../grok/client.js\";\nimport { ToolResult } from \"../types/index.js\";\nimport { PasteEvent } from \"../services/paste-detection.js\";\nimport { usePlanMode } from \"./use-plan-mode.js\";\nimport { detectComplexity } from \"../services/complexity-detector.js\";\n// TODO: Implement ResearchRecommendService and executionOrchestrator when needed\n\nimport { filterCommandSuggestions } from \"../ui/components/command-suggestions.js\";\nimport { loadModelConfig, updateCurrentModel } from \"../utils/model-config.js\";\nimport { AgentSystemGenerator } from \"../tools/documentation/agent-system-generator.js\";\nimport { generateDocsMenuText, findDocsMenuOption } from \"../tools/documentation/docs-menu.js\";\nimport { ReadmeGenerator } from \"../tools/documentation/readme-generator.js\";\nimport { CommentsGenerator } from \"../tools/documentation/comments-generator.js\";\nimport { ApiDocsGenerator } from \"../tools/documentation/api-docs-generator.js\";\nimport { ChangelogGenerator } from \"../tools/documentation/changelog-generator.js\";\nimport { UpdateAgentDocs } from \"../tools/documentation/update-agent-docs.js\";\nimport { SubagentFramework } from \"../subagents/subagent-framework.js\";\nimport { SelfHealingSystem } from \"../tools/documentation/self-healing-system.js\";\nimport { checkForUpdates, autoUpgrade } from \"../utils/version-checker.js\";\nimport { getSettingsManager } from \"../utils/settings-manager.js\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\n\ninterface UseInputHandlerProps {\n agent: GrokAgent;\n chatHistory: ChatEntry[];\n setChatHistory: React.Dispatch<React.SetStateAction<ChatEntry[]>>;\n setIsProcessing: (processing: boolean) => void;\n setIsStreaming: (streaming: boolean) => void;\n setTokenCount: (count: number) => void;\n setProcessingTime: (time: number) => void;\n processingStartTime: React.MutableRefObject<number>;\n isProcessing: boolean;\n isStreaming: boolean;\n isConfirmationActive?: boolean;\n onGlobalShortcut?: (str: string, key: Key) => boolean;\n introductionState?: { needsIntroduction: boolean; isCollectingOperatorName: boolean; isCollectingAgentName: boolean; };\n handleIntroductionInput?: (input: string) => boolean;\n}\n\ninterface CommandSuggestion {\n command: string;\n description: string;\n}\n\ninterface ModelOption {\n model: string;\n}\n\nexport function useInputHandler({\n agent,\n chatHistory,\n setChatHistory,\n setIsProcessing,\n setIsStreaming,\n setTokenCount,\n setProcessingTime,\n processingStartTime,\n isProcessing,\n isStreaming,\n isConfirmationActive = false,\n onGlobalShortcut,\n handleIntroductionInput,\n}: UseInputHandlerProps) {\n const [showCommandSuggestions, setShowCommandSuggestions] = useState(false);\n const [selectedCommandIndex, setSelectedCommandIndex] = useState(0);\n const [showModelSelection, setShowModelSelection] = useState(false);\n const [selectedModelIndex, setSelectedModelIndex] = useState(0);\n const [autoEditEnabled, setAutoEditEnabled] = useState(() => {\n const confirmationService = ConfirmationService.getInstance();\n const sessionFlags = confirmationService.getSessionFlags();\n return sessionFlags.allOperations;\n });\n const [shiftTabPressCount, setShiftTabPressCount] = useState(0);\n const [lastShiftTabTime, setLastShiftTabTime] = useState(0);\n const [verbosityLevel, setVerbosityLevel] = useState<'quiet' | 'normal' | 'verbose'>(() => {\n try {\n const manager = getSettingsManager();\n return manager.getUserSetting('verbosityLevel') || 'quiet';\n } catch {\n return 'quiet';\n }\n });\n const [explainLevel, setExplainLevel] = useState<'off' | 'brief' | 'detailed'>(() => {\n try {\n const manager = getSettingsManager();\n return manager.getUserSetting('explainLevel') || 'brief';\n } catch {\n return 'brief';\n }\n });\n const [_interactivityLevel, _setInteractivityLevel] = useState<'chat' | 'balanced' | 'repl'>(() => {\n try {\n const manager = getSettingsManager();\n return (manager.getUserSetting('interactivityLevel') as 'chat' | 'balanced' | 'repl' | undefined) || 'balanced';\n } catch {\n return 'balanced';\n }\n });\n\n // Initialize plan mode hook\n const planMode = usePlanMode({}, agent);\n\n const handleSpecialKey = (key: Key): boolean => {\n // Don't handle input if confirmation dialog is active\n if (isConfirmationActive) {\n return true; // Prevent default handling\n }\n\n\n // Handle shift+tab for both auto-edit and plan mode activation\n if (key.shift && key.tab) {\n const now = Date.now();\n const timeSinceLastPress = now - lastShiftTabTime;\n \n // Reset count if more than 2 seconds have passed\n if (timeSinceLastPress > 2000) {\n setShiftTabPressCount(1);\n } else {\n setShiftTabPressCount(prev => prev + 1);\n }\n \n setLastShiftTabTime(now);\n \n // Check for plan mode activation (shift+tab twice within 2 seconds)\n if (shiftTabPressCount >= 2) {\n // Second shift+tab press - activate plan mode\n if (!planMode.isActive) {\n planMode.activatePlanMode();\n \n const planModeEntry: ChatEntry = {\n type: \"assistant\",\n content: \"🎯 **Plan Mode Activated**\\n\\nEntering read-only exploration mode. I'll analyze your codebase and formulate an implementation strategy before making any changes.\\n\\n**What I'm doing:**\\n• Exploring project structure\\n• Analyzing dependencies and patterns\\n• Identifying key components\\n• Formulating implementation approach\\n\\nOnce complete, I'll present a detailed plan for your approval.\\n\\n💡 **Tip**: Describe what you want to implement and I'll create a comprehensive plan first.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, planModeEntry]);\n \n // Start exploration automatically\n planMode.startExploration();\n \n setShiftTabPressCount(0); // Reset counter\n return true;\n } else {\n // Already in plan mode - exit plan mode\n planMode.deactivatePlanMode('user_requested');\n \n const exitEntry: ChatEntry = {\n type: \"assistant\", \n content: \"🎯 **Plan Mode Deactivated**\\n\\nExiting plan mode and returning to normal operation.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, exitEntry]);\n \n setShiftTabPressCount(0); // Reset counter\n return true;\n }\n } else if (shiftTabPressCount === 1) {\n // First shift+tab press - toggle auto-edit mode\n const newAutoEditState = !autoEditEnabled;\n setAutoEditEnabled(newAutoEditState);\n\n const confirmationService = ConfirmationService.getInstance();\n if (newAutoEditState) {\n // Enable auto-edit: set all operations to be accepted\n confirmationService.setSessionFlag(\"allOperations\", true);\n } else {\n // Disable auto-edit: reset session flags\n confirmationService.resetSession();\n }\n \n // Reset plan mode counter if we're handling auto-edit\n setTimeout(() => setShiftTabPressCount(0), 2500);\n }\n \n return true; // Handled\n }\n\n // Handle escape key for closing menus\n if (key.escape) {\n if (showCommandSuggestions) {\n setShowCommandSuggestions(false);\n setSelectedCommandIndex(0);\n return true;\n }\n if (showModelSelection) {\n setShowModelSelection(false);\n setSelectedModelIndex(0);\n return true;\n }\n if (isProcessing || isStreaming) {\n agent.abortCurrentOperation();\n setIsProcessing(false);\n setIsStreaming(false);\n setTokenCount(0);\n setProcessingTime(0);\n processingStartTime.current = 0;\n return true;\n }\n return false; // Let default escape handling work\n }\n\n // Handle command suggestions navigation\n if (showCommandSuggestions) {\n const filteredSuggestions = filterCommandSuggestions(\n commandSuggestions,\n input\n );\n\n if (filteredSuggestions.length === 0) {\n setShowCommandSuggestions(false);\n setSelectedCommandIndex(0);\n return false; // Continue processing\n } else {\n if (key.upArrow) {\n setSelectedCommandIndex((prev) =>\n prev === 0 ? filteredSuggestions.length - 1 : prev - 1\n );\n return true;\n }\n if (key.downArrow) {\n setSelectedCommandIndex(\n (prev) => (prev + 1) % filteredSuggestions.length\n );\n return true;\n }\n if (key.tab || key.return) {\n const safeIndex = Math.min(\n selectedCommandIndex,\n filteredSuggestions.length - 1\n );\n const selectedCommand = filteredSuggestions[safeIndex];\n const newInput = selectedCommand.command + \" \";\n setInput(newInput);\n setCursorPosition(newInput.length);\n setShowCommandSuggestions(false);\n setSelectedCommandIndex(0);\n return true;\n }\n }\n }\n\n // Handle model selection navigation\n if (showModelSelection) {\n if (key.upArrow) {\n setSelectedModelIndex((prev) =>\n prev === 0 ? availableModels.length - 1 : prev - 1\n );\n return true;\n }\n if (key.downArrow) {\n setSelectedModelIndex((prev) => (prev + 1) % availableModels.length);\n return true;\n }\n if (key.tab || key.return) {\n const selectedModel = availableModels[selectedModelIndex];\n agent.setModel(selectedModel.model);\n updateCurrentModel(selectedModel.model);\n const confirmEntry: ChatEntry = {\n type: \"assistant\",\n content: `✓ Switched to model: ${selectedModel.model}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, confirmEntry]);\n setShowModelSelection(false);\n setSelectedModelIndex(0);\n return true;\n }\n }\n\n return false; // Let default handling proceed\n };\n\n const handleInputSubmit = async (userInput: string) => {\n if (userInput === \"exit\" || userInput === \"quit\") {\n process.exit(0);\n return;\n }\n\n // Check for introduction input first\n if (handleIntroductionInput && handleIntroductionInput(userInput.trim())) {\n return;\n }\n\n const trimmedInput = userInput.trim();\n if (trimmedInput) {\n const directCommandResult = await handleDirectCommand(userInput);\n if (!directCommandResult) {\n // Normal processing\n await processUserMessage(userInput);\n }\n }\n };\n\n const handlePasteDetected = (pasteEvent: PasteEvent) => {\n // Create a user entry with paste summary for display\n const userEntry: ChatEntry = {\n type: \"user\",\n content: pasteEvent.content, // Full content for AI\n displayContent: pasteEvent.summary, // Summary for UI display\n timestamp: new Date(),\n isPasteSummary: true,\n pasteMetadata: {\n pasteNumber: pasteEvent.pasteNumber,\n lineCount: pasteEvent.lineCount,\n charCount: pasteEvent.charCount,\n },\n };\n\n // Add the paste summary to chat history\n setChatHistory((prev) => [...prev, userEntry]);\n\n // Process the full pasted content with the AI\n processUserMessage(pasteEvent.content);\n };\n\n const handleInputChange = (newInput: string) => {\n // Update command suggestions based on input\n if (newInput.startsWith(\"/\")) {\n setShowCommandSuggestions(true);\n setSelectedCommandIndex(0);\n } else {\n setShowCommandSuggestions(false);\n setSelectedCommandIndex(0);\n }\n };\n\n const {\n input,\n cursorPosition,\n setInput,\n setCursorPosition,\n clearInput,\n resetHistory,\n handleInput,\n } = useEnhancedInput({\n onSubmit: handleInputSubmit,\n onSpecialKey: handleSpecialKey,\n onPasteDetected: handlePasteDetected,\n disabled: isConfirmationActive,\n });\n\n // Hook up the actual input handling\n useInput((inputChar: string, key: Key) => {\n // Check global shortcuts before normal input handling\n if (onGlobalShortcut && onGlobalShortcut(inputChar, key)) {\n return; // Handled by global shortcut\n }\n \n handleInput(inputChar, key);\n });\n\n // Update command suggestions when input changes\n useEffect(() => {\n handleInputChange(input);\n }, [input]);\n\n const commandSuggestions: CommandSuggestion[] = [\n { command: \"/help\", description: \"Show help information\" },\n { command: \"/clear\", description: \"Clear chat history\" },\n { command: \"/models\", description: \"Switch Grok Model\" },\n { command: \"/verbosity\", description: \"Control output verbosity (quiet/normal/verbose)\" },\n { command: \"/explain\", description: \"Control operation explanations (off/brief/detailed)\" },\n { command: \"/interactivity\", description: \"Set interaction style (chat/balanced/repl)\" },\n { command: \"/upgrade\", description: \"Check for updates and upgrade CLI\" },\n { command: \"/version\", description: \"Show version information\" },\n { command: \"/switch\", description: \"Switch to specific version\" },\n { command: \"/init-agent\", description: \"Initialize .agent documentation system\" },\n { command: \"/docs\", description: \"Documentation generation menu\" },\n { command: \"/readme\", description: \"Generate project README.md\" },\n { command: \"/api-docs\", description: \"Generate API documentation\" },\n { command: \"/changelog\", description: \"Generate changelog from git history\" },\n { command: \"/update-agent-docs\", description: \"Update .agent docs with recent changes\" },\n { command: \"/compact\", description: \"Compress conversation history\" },\n { command: \"/heal\", description: \"Document and prevent failure recurrence\" },\n { command: \"/guardrails\", description: \"Manage prevention rules\" },\n { command: \"/comments\", description: \"Add code comments to files\" },\n { command: \"/commit-and-push\", description: \"AI commit & push to remote\" },\n { command: \"/smart-push\", description: \"Intelligent staging, commit message generation, and push\" },\n { command: \"/context\", description: \"Show loaded documentation and context status\" },\n { command: \"/exit\", description: \"Exit the application\" },\n ];\n\n // Load models from configuration with fallback to defaults\n const availableModels: ModelOption[] = useMemo(() => {\n return loadModelConfig(); // Return directly, interface already matches\n }, []);\n\n const handleDirectCommand = async (input: string): Promise<boolean> => {\n const trimmedInput = input.trim();\n\n if (trimmedInput === \"/context\") {\n // Show loaded documentation and context status\n const contextEntry: ChatEntry = {\n type: \"assistant\",\n content: `📚 **Loaded Documentation Context**\n\nThe .agent documentation system has been automatically loaded at startup:\n\n**System Documentation:**\n- 📋 System Architecture (architecture.md)\n- 🏗️ Critical State (critical-state.md)\n- 🏗️ Installation Guide (installation.md)\n- 🏗️ API Schema (api-schema.md)\n- 🏗️ Auto-Read System (auto-read-system.md)\n\n**SOP Documentation:**\n- 🔧 Git Workflow SOP (git-workflow.md)\n- 📖 Release Management SOP (release-management.md)\n- 📖 Automation Protection SOP (automation-protection.md)\n- 📖 NPM Publishing Troubleshooting (npm-publishing-troubleshooting.md)\n\n**Purpose:**\nThis documentation provides context for all AI operations, ensuring consistent understanding of project architecture, processes, and standards.\n\n**Auto-Read Status:** ✅ Active - Loaded automatically on startup`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, contextEntry]);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/clear\") {\n // Reset chat history\n setChatHistory([]);\n\n // Reset processing states\n setIsProcessing(false);\n setIsStreaming(false);\n setTokenCount(0);\n setProcessingTime(0);\n processingStartTime.current = 0;\n\n // Reset confirmation service session flags\n const confirmationService = ConfirmationService.getInstance();\n confirmationService.resetSession();\n\n clearInput();\n resetHistory();\n return true;\n }\n\n if (trimmedInput === \"/help\") {\n const helpEntry: ChatEntry = {\n type: \"assistant\",\n content: `X-CLI Help:\n\nBuilt-in Commands:\n /clear - Clear chat history\n /help - Show this help\n /models - Switch between available models\n /verbosity - Control output verbosity (quiet/normal/verbose)\n /explain - Control operation explanations (off/brief/detailed)\n /version - Show version information and check for updates\n /upgrade - Check for updates and upgrade automatically\n /switch - Switch to specific version (/switch <version>)\n /exit - Exit application\n exit, quit - Exit application\n\nDocumentation Commands:\n /init-agent - Initialize .agent documentation system\n /docs - Interactive documentation menu\n /readme - Generate comprehensive README.md\n /api-docs - Generate API documentation from code\n /changelog - Generate changelog from git history\n /update-agent-docs- Update .agent docs with recent changes\n /comments - Add intelligent code comments\n\nSelf-Healing & Optimization:\n /compact - Compress conversation history intelligently\n /heal - Document failures and create prevention rules\n /guardrails - Manage automated prevention system\n\nGit Commands:\n /commit-and-push - AI-generated commit + push to remote\n /smart-push - Intelligent staging, commit message generation, and push\n\nEnhanced Input Features:\n ↑/↓ Arrow - Navigate command history\n Ctrl+C - Clear input (press twice to exit)\n Ctrl+←/→ - Move by word\n Ctrl+A/E - Move to line start/end\n Ctrl+W - Delete word before cursor\n Ctrl+K - Delete to end of line\n Ctrl+U - Delete to start of line\n Shift+Tab - Toggle auto-edit mode (bypass confirmations)\n\nDirect Commands (executed immediately):\n ls [path] - List directory contents\n pwd - Show current directory\n cd <path> - Change directory\n cat <file> - View file contents\n mkdir <dir> - Create directory\n touch <file>- Create empty file\n\nModel Configuration:\n Edit ~/.xcli/models.json to add custom models (Claude, GPT, Gemini, etc.)\n\nFor complex operations, just describe what you want in natural language.\nExamples:\n \"edit package.json and add a new script\"\n \"create a new React component called Header\"\n \"show me all TypeScript files in this project\"`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, helpEntry]);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/context\") {\n // Show loaded documentation and context status\n const contextEntry: ChatEntry = {\n type: \"assistant\",\n content: `📚 **Loaded Documentation Context**\n\nThe .agent documentation system has been automatically loaded at startup:\n\n**System Documentation:**\n- 📋 System Architecture (architecture.md)\n- 🏗️ Critical State (critical-state.md)\n- 🏗️ Installation Guide (installation.md)\n- 🏗️ API Schema (api-schema.md)\n- 🏗️ Auto-Read System (auto-read-system.md)\n\n**SOP Documentation:**\n- 🔧 Git Workflow SOP (git-workflow.md)\n- 📖 Release Management SOP (release-management.md)\n- 📖 Automation Protection SOP (automation-protection.md)\n- 📖 NPM Publishing Troubleshooting (npm-publishing-troubleshooting.md)\n\n**Purpose:**\nThis documentation provides context for all AI operations, ensuring consistent understanding of project architecture, processes, and standards.\n\n**Auto-Read Status:** ✅ Active - Loaded automatically on startup`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, contextEntry]);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/exit\") {\n process.exit(0);\n return true;\n }\n\n if (trimmedInput === \"/models\") {\n setShowModelSelection(true);\n setSelectedModelIndex(0);\n clearInput();\n return true;\n }\n\n if (trimmedInput.startsWith(\"/models \")) {\n const modelArg = trimmedInput.split(\" \")[1];\n const modelNames = availableModels.map((m) => m.model);\n\n if (modelNames.includes(modelArg)) {\n agent.setModel(modelArg);\n updateCurrentModel(modelArg); // Update project current model\n const confirmEntry: ChatEntry = {\n type: \"assistant\",\n content: `✓ Switched to model: ${modelArg}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, confirmEntry]);\n } else {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Invalid model: ${modelArg}\n\nAvailable models: ${modelNames.join(\", \")}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n clearInput();\n return true;\n }\n\n // Version commands\n if (trimmedInput === \"/version\") {\n try {\n const versionInfo = await checkForUpdates();\n const versionEntry: ChatEntry = {\n type: \"assistant\",\n content: `📦 **X-CLI Version Information**\n\nCurrent Version: **${versionInfo.current}**\nLatest Version: **${versionInfo.latest}**\n${versionInfo.isUpdateAvailable \n ? `🔄 **Update Available!**\\n\\nUse \\`/upgrade\\` to update automatically or run:\\n\\`${versionInfo.updateCommand}\\``\n : '✅ **You are up to date!**'\n}\n\nPackage: ${pkg.name}\nGitHub: https://github.com/x-cli-team/x-cli\nNPM: https://www.npmjs.com/package/${pkg.name}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, versionEntry]);\n } catch (error) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ Error checking version: ${error instanceof Error ? error.message : 'Unknown error'}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/upgrade\") {\n try {\n const versionInfo = await checkForUpdates();\n \n if (!versionInfo.isUpdateAvailable) {\n const upToDateEntry: ChatEntry = {\n type: \"assistant\",\n content: `✅ **Already up to date!**\\n\\nCurrent version: **${versionInfo.current}**\\nLatest version: **${versionInfo.latest}**`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, upToDateEntry]);\n clearInput();\n return true;\n }\n\n const confirmUpgradeEntry: ChatEntry = {\n type: \"assistant\",\n content: `🔄 **Update Available!**\n\nCurrent: **${versionInfo.current}**\nLatest: **${versionInfo.latest}**\n\nUpgrading now... This may take a moment.`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, confirmUpgradeEntry]);\n \n const success = await autoUpgrade();\n \n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: success \n ? `✅ **Upgrade Complete!**\\n\\nSuccessfully upgraded to version **${versionInfo.latest}**.\\n\\n**Please restart X-CLI** to use the new version:\\n- Exit with \\`/exit\\` or Ctrl+C\\n- Run \\`grok\\` again`\n : `❌ **Upgrade Failed**\\n\\nPlease try upgrading manually:\\n\\`${versionInfo.updateCommand}\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n } catch (error) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ Error during upgrade: ${error instanceof Error ? error.message : 'Unknown error'}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n clearInput();\n return true;\n }\n\n if (trimmedInput.startsWith(\"/switch \")) {\n const versionArg = trimmedInput.split(\" \")[1];\n \n if (!versionArg) {\n const helpEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Missing version argument**\n\nUsage: \\`/switch <version>\\`\n\nExamples:\n- \\`/switch latest\\` - Switch to latest version\n- \\`/switch 1.0.50\\` - Switch to specific version\n\nCommand: \\`npm install -g ${pkg.name}@<version>\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, helpEntry]);\n clearInput();\n return true;\n }\n\n try {\n const switchingEntry: ChatEntry = {\n type: \"assistant\",\n content: `🔄 **Switching to version ${versionArg}...**\\n\\nThis may take a moment.`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, switchingEntry]);\n\n // Import exec for version switching\n const { exec } = await import(\"child_process\");\n const { promisify } = await import(\"util\");\n const execAsync = promisify(exec);\n \n await execAsync(`npm install -g ${pkg.name}@${versionArg}`, {\n timeout: 30000,\n });\n \n const successEntry: ChatEntry = {\n type: \"assistant\",\n content: `✅ **Version Switch Complete!**\\n\\nSuccessfully installed version **${versionArg}**.\\n\\n**Please restart X-CLI** to use the new version:\\n- Exit with \\`/exit\\` or Ctrl+C\\n- Run \\`grok\\` again`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, successEntry]);\n } catch (error) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Version switch failed**\\n\\nError: ${error instanceof Error ? error.message : 'Unknown error'}\\n\\nPlease try manually:\\n\\`npm install -g ${pkg.name}@${versionArg}\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/commit-and-push\") {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: \"/commit-and-push\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n setIsStreaming(true);\n\n try {\n // First check if there are any changes at all\n const initialStatusResult = await agent.executeBashCommand(\n \"git status --porcelain\"\n );\n\n if (\n !initialStatusResult.success ||\n !initialStatusResult.output?.trim()\n ) {\n const noChangesEntry: ChatEntry = {\n type: \"assistant\",\n content: \"No changes to commit. Working directory is clean.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, noChangesEntry]);\n setIsProcessing(false);\n setIsStreaming(false);\n setInput(\"\");\n return true;\n }\n\n // Add all changes\n const addResult = await agent.executeBashCommand(\"git add .\");\n\n if (!addResult.success) {\n const addErrorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to stage changes: ${\n addResult.error || \"Unknown error\"\n }`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, addErrorEntry]);\n setIsProcessing(false);\n setIsStreaming(false);\n setInput(\"\");\n return true;\n }\n\n // Show that changes were staged\n const addEntry: ChatEntry = {\n type: \"tool_result\",\n content: \"Changes staged successfully\",\n timestamp: new Date(),\n toolCall: {\n id: `git_add_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: \"git add .\" }),\n },\n },\n toolResult: addResult,\n };\n setChatHistory((prev) => [...prev, addEntry]);\n\n // Get staged changes for commit message generation\n const diffResult = await agent.executeBashCommand(\"git diff --cached\");\n\n // Generate commit message using AI\n const commitPrompt = `Generate a concise, professional git commit message for these changes:\n\nGit Status:\n${initialStatusResult.output}\n\nGit Diff (staged changes):\n${diffResult.output || \"No staged changes shown\"}\n\nFollow conventional commit format (feat:, fix:, docs:, etc.) and keep it under 72 characters.\nRespond with ONLY the commit message, no additional text.`;\n\n let commitMessage = \"\";\n let streamingEntry: ChatEntry | null = null;\n let accumulatedCommitContent = \"\";\n let lastCommitUpdateTime = Date.now();\n\n for await (const chunk of agent.processUserMessageStream(\n commitPrompt\n )) {\n if (chunk.type === \"content\" && chunk.content) {\n accumulatedCommitContent += chunk.content;\n const now = Date.now();\n if (now - lastCommitUpdateTime >= 150) {\n commitMessage += accumulatedCommitContent;\n if (!streamingEntry) {\n const newEntry = {\n type: \"assistant\" as const,\n content: `Generating commit message...\\n\\n${commitMessage}`,\n timestamp: new Date(),\n isStreaming: true,\n };\n setChatHistory((prev) => [...prev, newEntry]);\n streamingEntry = newEntry;\n } else {\n setChatHistory((prev) =>\n prev.map((entry, idx) =>\n idx === prev.length - 1 && entry.isStreaming\n ? {\n ...entry,\n content: `Generating commit message...\\n\\n${commitMessage}`,\n }\n : entry\n )\n );\n }\n accumulatedCommitContent = \"\";\n lastCommitUpdateTime = now;\n }\n } else if (chunk.type === \"done\") {\n if (streamingEntry) {\n setChatHistory((prev) =>\n prev.map((entry) =>\n entry.isStreaming\n ? {\n ...entry,\n content: `Generated commit message: \"${commitMessage.trim()}\"`,\n isStreaming: false,\n }\n : entry\n )\n );\n }\n break;\n }\n }\n\n // Execute the commit\n const cleanCommitMessage = commitMessage\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n const commitCommand = `git commit -m \"${cleanCommitMessage}\"`;\n const commitResult = await agent.executeBashCommand(commitCommand);\n\n const commitEntry: ChatEntry = {\n type: \"tool_result\",\n content: commitResult.success\n ? commitResult.output || \"Commit successful\"\n : commitResult.error || \"Commit failed\",\n timestamp: new Date(),\n toolCall: {\n id: `git_commit_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: commitCommand }),\n },\n },\n toolResult: commitResult,\n };\n setChatHistory((prev) => [...prev, commitEntry]);\n\n // If commit was successful, push to remote\n if (commitResult.success) {\n // First try regular push, if it fails try with upstream setup\n let pushResult = await agent.executeBashCommand(\"git push\");\n let pushCommand = \"git push\";\n\n if (\n !pushResult.success &&\n pushResult.error?.includes(\"no upstream branch\")\n ) {\n pushCommand = \"git push -u origin HEAD\";\n pushResult = await agent.executeBashCommand(pushCommand);\n }\n\n const pushEntry: ChatEntry = {\n type: \"tool_result\",\n content: pushResult.success\n ? pushResult.output || \"Push successful\"\n : pushResult.error || \"Push failed\",\n timestamp: new Date(),\n toolCall: {\n id: `git_push_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: pushCommand }),\n },\n },\n toolResult: pushResult,\n };\n setChatHistory((prev) => [...prev, pushEntry]);\n }\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Error during commit and push: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n setIsStreaming(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/init-agent\") {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: \"/init-agent\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n // Determine project type - assume external project for now, could detect X CLI\n const isXCli = process.cwd().includes('x-cli') || \n trimmedInput.includes('--xcli');\n \n const projectType = isXCli ? 'x-cli' : 'external';\n const projectName = isXCli ? 'X CLI' : 'Current Project';\n\n const generator = new AgentSystemGenerator({\n projectName,\n projectType,\n rootPath: process.cwd()\n });\n\n const result = await generator.generateAgentSystem();\n\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: result.message,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (result.success) {\n // Additional success message with next steps\n const nextStepsEntry: ChatEntry = {\n type: \"assistant\",\n content: `📚 **Next Steps:**\n1. Review the generated documentation in \\`.agent/\\`\n2. Customize \\`system/\\` docs for your project\n3. Add PRDs to \\`tasks/\\` before implementing features\n4. Run \\`/update-agent-docs\\` after making changes\n5. Check \\`.agent/README.md\\` for complete navigation\n\n💡 **Pro tip**: AI agents will now read these docs to understand your project context efficiently!`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, nextStepsEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to initialize agent system: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/docs\") {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: \"/docs\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n const menuEntry: ChatEntry = {\n type: \"assistant\",\n content: generateDocsMenuText(),\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, menuEntry]);\n\n clearInput();\n return true;\n }\n\n // Check if input is a docs menu selection\n const docsMenuOption = findDocsMenuOption(trimmedInput);\n if (docsMenuOption) {\n const userEntry: ChatEntry = {\n type: \"user\", \n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n const confirmEntry: ChatEntry = {\n type: \"assistant\",\n content: `🎯 Selected: ${docsMenuOption.title}\\nExecuting: \\`${docsMenuOption.command}\\`...`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, confirmEntry]);\n\n // Execute the selected command\n setTimeout(() => {\n handleDirectCommand(docsMenuOption.command);\n }, 100);\n\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/readme\" || trimmedInput.startsWith(\"/readme \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n const updateExisting = args.includes('--update');\n const template = args.find(arg => arg.startsWith('--template='))?.split('=')[1] as any || 'default';\n\n const generator = new ReadmeGenerator({\n projectName: '', // Will be auto-detected\n rootPath: process.cwd(),\n updateExisting,\n template\n });\n\n const result = await generator.generateReadme();\n\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: result.message,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (result.success) {\n const nextStepsEntry: ChatEntry = {\n type: \"assistant\",\n content: `📝 **README.md Generated!**\n\n**Next Steps:**\n1. Review and customize the generated content\n2. Add project-specific details and examples\n3. Update installation and usage instructions\n4. Consider adding screenshots or diagrams\n\n💡 **Tip**: Use \\`/docs\\` to access other documentation tools!`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, nextStepsEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\", \n content: `Failed to generate README: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/comments\" || trimmedInput.startsWith(\"/comments \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n const filePath = args[0];\n\n if (!filePath) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: \"❌ Please specify a file path. Usage: `/comments <file-path>`\\n\\nExample: `/comments src/utils/helper.ts`\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n const commentType = args.includes('--functions') ? 'functions' : \n args.includes('--classes') ? 'classes' : 'all';\n\n const generator = new CommentsGenerator({\n filePath: filePath.startsWith('/') ? filePath : path.join(process.cwd(), filePath),\n commentType,\n style: 'auto'\n });\n\n const result = await generator.generateComments();\n\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: result.message,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (result.success) {\n const tipsEntry: ChatEntry = {\n type: \"assistant\",\n content: `💡 **Code Comments Added!**\n\n**Options for next time:**\n- \\`/comments file.ts --functions\\` - Only comment functions\n- \\`/comments file.ts --classes\\` - Only comment classes\n- \\`/comments file.ts\\` - Comment all (default)\n\n**Backup created** - Original file saved with .backup extension`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, tipsEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to add comments: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/api-docs\" || trimmedInput.startsWith(\"/api-docs \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n const outputFormat = args.includes('--format=html') ? 'html' : 'md';\n const includePrivate = args.includes('--private');\n const scanPaths = args.filter(arg => !arg.startsWith('--') && arg !== '');\n\n const generator = new ApiDocsGenerator({\n rootPath: process.cwd(),\n outputFormat,\n includePrivate,\n scanPaths: scanPaths.length > 0 ? scanPaths : ['src/']\n });\n\n const result = await generator.generateApiDocs();\n\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: result.message,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (result.success) {\n const tipsEntry: ChatEntry = {\n type: \"assistant\",\n content: `📖 **API Documentation Generated!**\n\n**Options for next time:**\n- \\`/api-docs --format=html\\` - Generate HTML format\n- \\`/api-docs --private\\` - Include private members\n- \\`/api-docs src/ lib/\\` - Specify custom scan paths\n\n**Enhancement tips:**\n- Add JSDoc comments to your functions and classes\n- Use TypeScript for better type information\n- Organize exports clearly in your modules`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, tipsEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to generate API docs: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/changelog\" || trimmedInput.startsWith(\"/changelog \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n const sinceVersion = args.find(arg => arg.startsWith('--since='))?.split('=')[1];\n const commitCount = args.find(arg => arg.startsWith('--commits='))?.split('=')[1];\n const format = args.includes('--simple') ? 'simple' : 'conventional';\n\n const generator = new ChangelogGenerator({\n rootPath: process.cwd(),\n sinceVersion,\n commitCount: commitCount ? parseInt(commitCount) : undefined,\n format,\n includeBreaking: true\n });\n\n const result = await generator.generateChangelog();\n\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: result.message,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (result.success) {\n const tipsEntry: ChatEntry = {\n type: \"assistant\",\n content: `📝 **Changelog Generated!**\n\n**Options for next time:**\n- \\`/changelog --since=v1.0.0\\` - Generate since specific version\n- \\`/changelog --commits=10\\` - Limit to last N commits \n- \\`/changelog --simple\\` - Use simple format (not conventional)\n\n**Pro tips:**\n- Use conventional commit format: \\`feat: add new feature\\`\n- Mark breaking changes: \\`feat!: breaking change\\`\n- The changelog follows Keep a Changelog format`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, tipsEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to generate changelog: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/update-agent-docs\" || trimmedInput.startsWith(\"/update-agent-docs \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n const updateTarget = args.includes('--system') ? 'system' :\n args.includes('--tasks') ? 'tasks' :\n args.includes('--sop') ? 'sop' : 'all';\n const autoCommit = args.includes('--commit');\n\n const updater = new UpdateAgentDocs({\n rootPath: process.cwd(),\n updateTarget,\n autoCommit\n });\n\n const result = await updater.updateDocs();\n\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: result.message,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (result.success && result.suggestions.length > 0) {\n const suggestionsEntry: ChatEntry = {\n type: \"assistant\",\n content: `💡 **Suggestions for Manual Review:**\\n\\n${result.suggestions.map(s => `- ${s}`).join('\\n')}\\n\\n**Options:**\\n- \\`/update-agent-docs --system\\` - Update only system docs\\n- \\`/update-agent-docs --tasks\\` - Update only tasks docs\\n- \\`/update-agent-docs --sop\\` - Update only SOPs`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, suggestionsEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to update agent docs: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/compact\" || trimmedInput.startsWith(\"/compact \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n // const force = args.includes('--force'); // TODO: implement force flag\n const dryRun = args.includes('--dry-run');\n\n // Simulate context compression using subagent framework\n const subagentFramework = new SubagentFramework();\n const taskId = await subagentFramework.spawnSubagent({\n type: 'summarizer',\n input: {\n content: chatHistory.map(entry => entry.content).join('\\n'),\n compressionTarget: 0.3 // 70% reduction\n },\n priority: 'medium'\n });\n\n const result = await subagentFramework.waitForResult(taskId, 10000);\n\n if (result.success) {\n // const metrics = subagentFramework.getPerformanceMetrics(); // TODO: use metrics\n \n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: dryRun \n ? `📊 **Compression Preview (Dry Run)**\\n\\n${result.summary}\\n\\n💡 Use \\`/compact\\` to apply compression`\n : `🧹 **Context Compressed Successfully**\\n\\n${result.summary}\\n\\n📈 **Performance:**\\n- Tokens saved: ~${result.output.compressionRatio * 100}%\\n- Processing time: ${result.executionTime}ms\\n- Subagent tokens used: ${result.tokensUsed}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (!dryRun && result.success) {\n // In a real implementation, this would actually compress the chat history\n const tipsEntry: ChatEntry = {\n type: \"assistant\",\n content: `✨ **Context Optimization Complete**\\n\\n**What happened:**\\n- Older conversations summarized\\n- Recent context preserved\\n- Key decisions and TODOs maintained\\n\\n**Options:**\\n- \\`/compact --dry-run\\` - Preview compression\\n- \\`/compact --force\\` - Force compression even if below threshold`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, tipsEntry]);\n }\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to compress context: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/heal\" || trimmedInput.startsWith(\"/heal \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n // const args = trimmedInput.split(' ').slice(1);\n // const classify = args.includes('--classify'); // TODO: implement classify flag\n // const playbook = args.includes('--playbook'); // TODO: implement playbook flag\n\n const healingSystem = new SelfHealingSystem(process.cwd());\n\n // For demo purposes, create a simulated error\n const mockError = {\n message: \"Example error for demonstration\",\n stack: \"at someFunction (src/example.ts:42:10)\"\n };\n const mockContext = {\n command: trimmedInput,\n operation: \"heal-demo\",\n files: [\"src/example.ts\"]\n };\n\n const result = await healingSystem.captureIncident(mockError, mockContext);\n\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: result.message,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n\n if (result.success) {\n const tipsEntry: ChatEntry = {\n type: \"assistant\",\n content: `🔄 **Self-Healing System Activated**\n\n**What was captured:**\n- Incident documentation with root cause analysis\n- Automatic guardrail generation (if applicable)\n- Integration with existing .agent system\n\n**Options:**\n- \\`/heal --classify\\` - Classify failure type and suggest guardrail\n- \\`/heal --playbook\\` - Generate step-by-step recovery SOP\n- \\`/guardrails\\` - View and manage all prevention rules\n\n**Next steps:**\n- Review the incident documentation\n- Check if guardrail was created\n- Update SOPs with lessons learned`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, tipsEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to process healing: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/guardrails\" || trimmedInput.startsWith(\"/guardrails \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n const check = args.includes('--check');\n // const enable = args.find(arg => arg.startsWith('--enable'))?.split('=')[1]; // TODO: implement enable flag\n // const disable = args.find(arg => arg.startsWith('--disable'))?.split('=')[1]; // TODO: implement disable flag\n\n const healingSystem = new SelfHealingSystem(process.cwd());\n\n if (check) {\n const checkResult = await healingSystem.checkGuardrails('example-operation', {});\n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: `🛡️ **Guardrail Check Results**\\n\\n**Status:** ${checkResult.passed ? '✅ All Clear' : '❌ Violations Found'}\\n**Violations:** ${checkResult.violations.length}\\n**Warnings:** ${checkResult.warnings.length}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n } else {\n // List all guardrails\n const incidents = await healingSystem.listIncidents();\n const config = healingSystem.getConfig();\n \n const resultEntry: ChatEntry = {\n type: \"assistant\",\n content: `🛡️ **Guardrails Management**\n\n**System Status:** ${config.enabled ? '✅ Enabled' : '❌ Disabled'}\n**Enforcement:** ${config.enforceGuardrails ? '✅ Active' : '❌ Disabled'}\n**Error Prompt:** ${config.onErrorPrompt}\n\n**Recent Incidents:** ${incidents.length}\n${incidents.slice(0, 3).map(i => `- ${i.title} (${i.impact} impact)`).join('\\n')}\n\n**Available Commands:**\n- \\`/guardrails --check\\` - Check current plans against guardrails\n- \\`/heal\\` - Document new failure and create guardrail\n- View specific guardrails in \\`.agent/guardrails/\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, resultEntry]);\n }\n\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to manage guardrails: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (trimmedInput === \"/switch\" || trimmedInput.startsWith(\"/switch \")) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n const args = trimmedInput.split(' ').slice(1);\n const settingsManager = getSettingsManager();\n\n if (args.length === 0) {\n // Show current auto-compact settings\n const settings = settingsManager.loadUserSettings();\n const autoCompact = settings.autoCompact ?? false;\n const thresholds = settings.compactThreshold || { lines: 800, bytes: 200000 };\n\n const statusEntry: ChatEntry = {\n type: \"assistant\",\n content: `🔄 **Auto-Compact Status**\n\n**Current Settings:**\n- Auto-compact: ${autoCompact ? '✅ ENABLED' : '❌ DISABLED'}\n- Line threshold: ${thresholds.lines || 800} lines\n- Size threshold: ${Math.round((thresholds.bytes || 200000) / 1024)}KB\n\n**Commands:**\n- \\`/switch compact on\\` - Enable auto-compact\n- \\`/switch compact off\\` - Disable auto-compact\n- \\`/switch compact lines 500\\` - Set line threshold\n- \\`/switch compact bytes 100000\\` - Set size threshold (in bytes)\n\n**How it works:**\nAuto-compact automatically enables compact mode when conversations exceed thresholds, similar to Claude Code's context management.`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, statusEntry]);\n } else if (args[0] === 'compact') {\n if (args[1] === 'on') {\n settingsManager.updateUserSetting('autoCompact', true);\n const successEntry: ChatEntry = {\n type: \"assistant\",\n content: \"✅ **Auto-compact enabled!**\\n\\nCompact mode will automatically activate for long conversations to maintain performance.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, successEntry]);\n } else if (args[1] === 'off') {\n settingsManager.updateUserSetting('autoCompact', false);\n const successEntry: ChatEntry = {\n type: \"assistant\",\n content: \"❌ **Auto-compact disabled**\\n\\nNormal conversation mode will be used.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, successEntry]);\n } else if (args[1] === 'lines' && args[2]) {\n const lines = parseInt(args[2]);\n if (isNaN(lines) || lines < 100) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: \"❌ Invalid line threshold. Must be a number >= 100.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n } else {\n const currentThresholds = settingsManager.getUserSetting('compactThreshold') || {};\n settingsManager.updateUserSetting('compactThreshold', {\n ...currentThresholds,\n lines\n });\n const successEntry: ChatEntry = {\n type: \"assistant\",\n content: `✅ **Line threshold updated to ${lines} lines**`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, successEntry]);\n }\n } else if (args[1] === 'bytes' && args[2]) {\n const bytes = parseInt(args[2]);\n if (isNaN(bytes) || bytes < 10000) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: \"❌ Invalid size threshold. Must be a number >= 10000 bytes.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n } else {\n const currentThresholds = settingsManager.getUserSetting('compactThreshold') || {};\n settingsManager.updateUserSetting('compactThreshold', {\n ...currentThresholds,\n bytes\n });\n const successEntry: ChatEntry = {\n type: \"assistant\",\n content: `✅ **Size threshold updated to ${Math.round(bytes / 1024)}KB**`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, successEntry]);\n }\n } else {\n const helpEntry: ChatEntry = {\n type: \"assistant\",\n content: `❓ **Invalid compact command**\n\n**Usage:**\n- \\`/switch compact on\\` - Enable auto-compact\n- \\`/switch compact off\\` - Disable auto-compact\n- \\`/switch compact lines <number>\\` - Set line threshold\n- \\`/switch compact bytes <number>\\` - Set size threshold`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, helpEntry]);\n }\n } else {\n const helpEntry: ChatEntry = {\n type: \"assistant\",\n content: `❓ **Unknown switch command**\n\n**Available switches:**\n- \\`/switch compact\\` - Manage auto-compact settings\n- \\`/switch\\` - Show current status`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, helpEntry]);\n }\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Failed to manage switches: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n // Add verbosity command\n if (trimmedInput === \"/verbosity\" || trimmedInput.startsWith(\"/verbosity \")) {\n const args = trimmedInput.split(' ').slice(1);\n const newLevel = args[0];\n\n if (!newLevel) {\n // Show current verbosity level\n const levelEntry: ChatEntry = {\n type: \"assistant\",\n content: `🔊 **Current Verbosity Level: ${verbosityLevel.toUpperCase()}**\\n\\n**Available levels:**\\n- \\`quiet\\` - Minimal output, suppress prefixes and extra formatting\\n- \\`normal\\` - Current default behavior with full details\\n- \\`verbose\\` - Additional details and debug information\\n\\n**Usage:** \\`/verbosity <level>\\`\\n**Example:** \\`/verbosity quiet\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, levelEntry]);\n } else if (['quiet', 'normal', 'verbose'].includes(newLevel)) {\n setVerbosityLevel(newLevel as 'quiet' | 'normal' | 'verbose');\n // Save to settings\n try {\n const manager = getSettingsManager();\n manager.updateUserSetting('verbosityLevel', newLevel as 'quiet' | 'normal' | 'verbose');\n } catch (_error) {\n // Silently ignore settings save errors\n }\n const confirmEntry: ChatEntry = {\n type: \"assistant\",\n content: `✅ **Verbosity level set to: ${newLevel.toUpperCase()}**\\n\\nTool outputs will now show ${newLevel === 'quiet' ? 'minimal output' : newLevel === 'normal' ? 'full details' : 'extra details and debug information'}.`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, confirmEntry]);\n } else {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Invalid verbosity level: ${newLevel}**\\n\\n**Available levels:** quiet, normal, verbose\\n\\n**Usage:** \\`/verbosity <level>\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n clearInput();\n return true;\n }\n\n // Add explain command\n if (trimmedInput === \"/explain\" || trimmedInput.startsWith(\"/explain \")) {\n const args = trimmedInput.split(' ').slice(1);\n const newLevel = args[0];\n\n if (!newLevel) {\n // Show current explain level\n const levelEntry: ChatEntry = {\n type: \"assistant\",\n content: `💡 **Current Explain Level: ${explainLevel.toUpperCase()}**\\n\\n**Available levels:**\\n- \\`off\\` - No explanations\\n- \\`brief\\` - Short reasons for operations\\n- \\`detailed\\` - Comprehensive explanations with context\\n\\n**Usage:** \\`/explain <level>\\`\\n**Example:** \\`/explain brief\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, levelEntry]);\n } else if (['off', 'brief', 'detailed'].includes(newLevel)) {\n setExplainLevel(newLevel as 'off' | 'brief' | 'detailed');\n // Save to settings\n try {\n const manager = getSettingsManager();\n manager.updateUserSetting('explainLevel', newLevel as 'off' | 'brief' | 'detailed');\n } catch (_error) {\n // Silently ignore settings save errors\n }\n const confirmEntry: ChatEntry = {\n type: \"assistant\",\n content: `✅ **Explain level set to: ${newLevel.toUpperCase()}**\\n\\nOperations will now ${newLevel === 'off' ? 'show no explanations' : newLevel === 'brief' ? 'show brief reasons' : 'show detailed explanations with context'}.`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, confirmEntry]);\n } else {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Invalid explain level: ${newLevel}**\\n\\n**Available levels:** off, brief, detailed\\n\\n**Usage:** \\`/explain <level>\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n clearInput();\n return true;\n }\n\n // Add smart-push command\n if (trimmedInput === \"/smart-push\") {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n\n try {\n // Get current branch\n const branchResult = await agent.executeBashCommand(\"git branch --show-current\");\n const currentBranch = branchResult.output?.trim() || \"unknown\";\n\n // Step 1: Run quality checks before push\n const qualityCheckEntry: ChatEntry = {\n type: \"assistant\",\n content: \"🔍 **Running pre-push quality checks...**\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, qualityCheckEntry]);\n\n // TypeScript check\n const tsCheckEntry: ChatEntry = {\n type: \"assistant\",\n content: \"📝 Checking TypeScript...\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, tsCheckEntry]);\n\n const tsResult = await agent.executeBashCommand(\"npm run typecheck\");\n if (tsResult.success) {\n const tsSuccessEntry: ChatEntry = {\n type: \"tool_result\",\n content: \"✅ TypeScript check passed\",\n timestamp: new Date(),\n toolCall: {\n id: `ts_check_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: \"npm run typecheck\" }),\n },\n },\n toolResult: tsResult,\n };\n setChatHistory((prev) => [...prev, tsSuccessEntry]);\n } else {\n const tsFailEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **TypeScript check failed**\\n\\n${tsResult.error || tsResult.output}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, tsFailEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n // Linting check (warnings allowed, only errors block)\n const lintCheckEntry: ChatEntry = {\n type: \"assistant\",\n content: \"🧹 Running ESLint...\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, lintCheckEntry]);\n\n const lintResult = await agent.executeBashCommand(\"npm run lint\");\n const lintSuccessEntry: ChatEntry = {\n type: \"tool_result\",\n content: \"✅ ESLint check completed (warnings allowed)\",\n timestamp: new Date(),\n toolCall: {\n id: `lint_check_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: \"npm run lint\" }),\n },\n },\n toolResult: lintResult,\n };\n setChatHistory((prev) => [...prev, lintSuccessEntry]);\n\n // Step 2: Check git status and pull latest changes\n const statusResult = await agent.executeBashCommand(\"git status --porcelain\");\n\n if (!statusResult.success) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: \"❌ **Git Error**\\n\\nUnable to check git status. Are you in a git repository?\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n if (!statusResult.output || statusResult.output.trim() === \"\") {\n const noChangesEntry: ChatEntry = {\n type: \"assistant\",\n content: \"📋 **No Changes to Push**\\n\\nWorking directory is clean. No commits to push.\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, noChangesEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n // Stage all changes to prevent pull issues with unstaged changes\n const prePullAddResult = await agent.executeBashCommand(\"git add .\");\n if (!prePullAddResult.success) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Failed to stage changes**\\n\\n${prePullAddResult.error || \"Unknown error\"}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n // Stash staged changes to allow clean pull\n const stashResult = await agent.executeBashCommand(\"git stash push --include-untracked --message 'smart-push temporary stash'\");\n if (!stashResult.success) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Failed to stash changes**\\n\\n${stashResult.error || \"Unknown error\"}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n // Pull latest changes\n const pullEntry: ChatEntry = {\n type: \"assistant\",\n content: \"🔄 Pulling latest changes...\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, pullEntry]);\n\n // Check for ongoing git operations and clean up if needed\n const rebaseCheck = await agent.executeBashCommand(\"test -d .git/rebase-apply -o -d .git/rebase-merge -o -f .git/MERGE_HEAD && echo 'ongoing' || echo 'clean'\");\n if (rebaseCheck.output?.includes('ongoing')) {\n const cleanupEntry: ChatEntry = {\n type: \"assistant\",\n content: \"⚠️ Git operation in progress - cleaning up...\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, cleanupEntry]);\n\n await agent.executeBashCommand(\"git rebase --abort 2>/dev/null || git merge --abort 2>/dev/null || true\");\n }\n\n // Try rebase first, fall back to merge if it fails\n let pullResult = await agent.executeBashCommand(`git pull --rebase origin ${currentBranch}`);\n if (!pullResult.success) {\n pullResult = await agent.executeBashCommand(`git pull origin ${currentBranch}`);\n if (pullResult.success) {\n const mergeFallbackEntry: ChatEntry = {\n type: \"assistant\",\n content: \"⚠️ Rebase failed, fell back to merge\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, mergeFallbackEntry]);\n }\n }\n\n if (pullResult.success) {\n const pullSuccessEntry: ChatEntry = {\n type: \"tool_result\",\n content: pullResult.output?.includes('Successfully rebased') ? \"✅ Successfully rebased local changes\" : \"✅ Successfully pulled latest changes\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, pullSuccessEntry]);\n\n // Pop the stashed changes\n const popStashResult = await agent.executeBashCommand(\"git stash pop\");\n if (!popStashResult.success) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `⚠️ **Failed to restore stashed changes**\\n\\n${popStashResult.error || \"Unknown error\"}\\n\\n💡 Your changes may be lost. Check git stash list.`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n } else {\n const popSuccessEntry: ChatEntry = {\n type: \"tool_result\",\n content: \"✅ Changes restored from stash\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, popSuccessEntry]);\n }\n } else {\n const pullFailEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Pull failed**\\n\\n${pullResult.error || pullResult.output}\\n\\n💡 Check git status and resolve any conflicts`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, pullFailEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n // Stage all changes\n const addResult = await agent.executeBashCommand(\"git add .\");\n\n if (!addResult.success) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Failed to stage changes**\\n\\n${addResult.error || \"Unknown error\"}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n const addEntry: ChatEntry = {\n type: \"tool_result\",\n content: \"✅ Changes staged successfully\",\n timestamp: new Date(),\n toolCall: {\n id: `git_add_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: \"git add .\" }),\n },\n },\n toolResult: addResult,\n };\n setChatHistory((prev) => [...prev, addEntry]);\n\n // Get staged changes for commit message generation\n const diffResult = await agent.executeBashCommand(\"git diff --cached\");\n\n // Truncate diff if too long to avoid API limits\n const maxDiffLength = 50000; // 50k characters\n const truncatedDiff = diffResult.output\n ? (diffResult.output.length > maxDiffLength\n ? diffResult.output.substring(0, maxDiffLength) + \"\\n... (truncated due to length)\"\n : diffResult.output)\n : \"No staged changes shown\";\n\n // Generate commit message using AI\n const commitPrompt = `Generate a concise, professional git commit message for these changes:\n\nGit Status:\n${statusResult.output}\n\nGit Diff (staged changes):\n${truncatedDiff}\n\nFollow conventional commit format (feat:, fix:, docs:, etc.) and keep it under 72 characters.\nRespond with ONLY the commit message, no additional text.`;\n\n let commitMessage = \"\";\n let streamingEntry: ChatEntry | null = null;\n let accumulatedCommitContent = \"\";\n let lastCommitUpdateTime = Date.now();\n\n try {\n for await (const chunk of agent.processUserMessageStream(commitPrompt)) {\n if (chunk.type === \"content\" && chunk.content) {\n accumulatedCommitContent += chunk.content;\n const now = Date.now();\n if (now - lastCommitUpdateTime >= 150) {\n commitMessage += accumulatedCommitContent;\n if (!streamingEntry) {\n const newEntry = {\n type: \"assistant\" as const,\n content: `🤖 Generating commit message...\\n\\n${commitMessage}`,\n timestamp: new Date(),\n isStreaming: true,\n };\n setChatHistory((prev) => [...prev, newEntry]);\n streamingEntry = newEntry;\n } else {\n setChatHistory((prev) =>\n prev.map((entry, idx) =>\n idx === prev.length - 1 && entry.isStreaming\n ? {\n ...entry,\n content: `🤖 Generating commit message...\\n\\n${commitMessage}`,\n }\n : entry\n )\n );\n }\n accumulatedCommitContent = \"\";\n lastCommitUpdateTime = now;\n }\n } else if (chunk.type === \"done\") {\n if (streamingEntry) {\n setChatHistory((prev) =>\n prev.map((entry) =>\n entry.isStreaming\n ? {\n ...entry,\n content: `✅ Generated commit message: \"${commitMessage.trim()}\"`,\n isStreaming: false,\n }\n : entry\n )\n );\n }\n break;\n }\n }\n } catch (error: any) {\n // Fallback commit message if AI fails\n commitMessage = \"feat: update files\";\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `⚠️ **AI commit message generation failed**: ${error.message}\\n\\nUsing fallback message: \"${commitMessage}\"`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n if (streamingEntry) {\n setChatHistory((prev) =>\n prev.map((entry) =>\n entry.isStreaming ? { ...entry, isStreaming: false } : entry\n )\n );\n }\n }\n\n // Execute the commit\n const cleanCommitMessage = commitMessage\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n const commitCommand = `git commit -m \"${cleanCommitMessage}\"`;\n const commitResult = await agent.executeBashCommand(commitCommand);\n\n const commitEntry: ChatEntry = {\n type: \"tool_result\",\n content: commitResult.success\n ? `✅ **Commit Created**: ${commitResult.output?.split('\\n')[0] || \"Commit successful\"}`\n : `❌ **Commit Failed**: ${commitResult.error || \"Unknown error\"}`,\n timestamp: new Date(),\n toolCall: {\n id: `git_commit_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: commitCommand }),\n },\n },\n toolResult: commitResult,\n };\n setChatHistory((prev) => [...prev, commitEntry]);\n\n if (commitResult.success) {\n // Push to remote\n const pushResult = await agent.executeBashCommand(\"git push\");\n\n if (pushResult.success) {\n const pushEntry: ChatEntry = {\n type: \"tool_result\",\n content: `🚀 **Push Successful**: ${pushResult.output?.split('\\n')[0] || \"Changes pushed to remote\"}`,\n timestamp: new Date(),\n toolCall: {\n id: `git_push_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: \"git push\" }),\n },\n },\n toolResult: pushResult,\n };\n setChatHistory((prev) => [...prev, pushEntry]);\n\n // Verification stage\n const verificationEntry: ChatEntry = {\n type: \"assistant\",\n content: \"🔍 **Running post-push verification...**\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, verificationEntry]);\n\n // Check git status for any issues\n const statusCheckResult = await agent.executeBashCommand(\"git status --porcelain\");\n if (statusCheckResult.success && statusCheckResult.output?.trim() === \"\") {\n const statusOkEntry: ChatEntry = {\n type: \"tool_result\",\n content: \"✅ **Git Status**: Working directory clean\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, statusOkEntry]);\n } else {\n const statusIssueEntry: ChatEntry = {\n type: \"assistant\",\n content: `⚠️ **Git Status Issues Detected**:\\n\\n${statusCheckResult.output || \"Unknown status\"}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, statusIssueEntry]);\n }\n\n // Wait a moment for potential CI/NPM publishing\n const waitEntry: ChatEntry = {\n type: \"assistant\",\n content: \"⏳ **Waiting for CI/NPM publishing...** (10 seconds)\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, waitEntry]);\n\n await new Promise(resolve => setTimeout(resolve, 10000)); // Wait 10 seconds\n\n // Check NPM package version (only if this is an NPM package)\n const localPackageResult = await agent.executeBashCommand(\"node -p \\\"require('./package.json').name\\\" 2>/dev/null || echo 'no-package'\");\n const localName = localPackageResult.success && localPackageResult.output?.trim() !== 'no-package' ? localPackageResult.output?.trim() : null;\n\n if (localName) {\n const localVersionResult = await agent.executeBashCommand(\"node -p \\\"require('./package.json').version\\\"\");\n const localVersion = localVersionResult.success ? localVersionResult.output?.trim() : \"unknown\";\n\n const npmCheckResult = await agent.executeBashCommand(`npm view ${localName} version 2>/dev/null || echo 'not-found'`);\n\n if (npmCheckResult.success && npmCheckResult.output?.trim() && npmCheckResult.output?.trim() !== 'not-found') {\n const npmVersion = npmCheckResult.output.trim();\n if (npmVersion === localVersion) {\n const npmConfirmEntry: ChatEntry = {\n type: \"tool_result\",\n content: `✅ **NPM Package Confirmed**: ${localName} v${npmVersion} published successfully`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, npmConfirmEntry]);\n } else {\n const npmPendingEntry: ChatEntry = {\n type: \"assistant\",\n content: `⏳ **NPM Status**: Local ${localName} v${localVersion}, NPM v${npmVersion}. Publishing may still be in progress.`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, npmPendingEntry]);\n }\n } else {\n const npmSkipEntry: ChatEntry = {\n type: \"assistant\",\n content: `ℹ️ **NPM Check Skipped**: Package ${localName} not found on NPM (may not be published yet)`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, npmSkipEntry]);\n }\n } else {\n const npmSkipEntry: ChatEntry = {\n type: \"assistant\",\n content: `ℹ️ **NPM Check Skipped**: No package.json found or not an NPM package`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, npmSkipEntry]);\n }\n\n // Final success message\n const finalSuccessEntry: ChatEntry = {\n type: \"assistant\",\n content: \"🎉 **Smart Push Complete**: All verifications passed!\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, finalSuccessEntry]);\n\n } else {\n // Check if push failed due to branch protection\n const pushError = pushResult.error || pushResult.output || \"\";\n if (pushError.includes(\"protected branch\") ||\n pushError.includes(\"Changes must be made through a pull request\") ||\n pushError.includes(\"GH006\")) {\n const branchProtectionEntry: ChatEntry = {\n type: \"assistant\",\n content: \"🛡️ **Branch Protection Detected**: Direct pushes to this branch are blocked.\\n\\n🔄 **Creating PR workflow...**\",\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, branchProtectionEntry]);\n\n // Create feature branch\n const featureBranch = `feature/${new Date().toISOString().slice(0,19).replace(/[:-]/g, '').replace('T', '-')}-smart-push`;\n\n const createBranchResult = await agent.executeBashCommand(`git checkout -b ${featureBranch}`);\n\n if (createBranchResult.success) {\n const pushBranchResult = await agent.executeBashCommand(`git push -u origin ${featureBranch}`);\n\n if (pushBranchResult.success) {\n const branchSuccessEntry: ChatEntry = {\n type: \"tool_result\",\n content: `✅ **Feature Branch Created**: \\`${featureBranch}\\`\\n\\n📋 **Attempting to create Pull Request...**`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, branchSuccessEntry]);\n\n // Try to create PR with GitHub CLI\n const prResult = await agent.executeBashCommand(`gh pr create --title \"${cleanCommitMessage}\" --body \"Auto-generated PR from smart-push\" --head ${featureBranch} --base ${currentBranch}`);\n\n if (prResult.success) {\n const prUrl = prResult.output?.match(/https:\\/\\/github\\.com\\/[^\\s]+/)?.[0];\n const prSuccessEntry: ChatEntry = {\n type: \"tool_result\",\n content: `✅ **Pull Request Created Successfully!**\\n\\n🔗 **PR URL**: ${prUrl || 'Check GitHub for the link'}\\n\\n🎯 **Next Steps**:\\n• Review the PR on GitHub\\n• Wait for CI checks to pass\\n• Request approval and merge`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, prSuccessEntry]);\n } else {\n const prManualEntry: ChatEntry = {\n type: \"assistant\",\n content: `⚠️ **PR Creation Failed**: GitHub CLI may not be available.\\n\\n💡 **Create PR Manually**:\\n• Go to GitHub repository\\n• Create PR from \\`${featureBranch}\\` → \\`${currentBranch}\\`\\n• Title: \\`${cleanCommitMessage}\\``,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, prManualEntry]);\n }\n } else {\n const pushFailEntry: ChatEntry = {\n type: \"tool_result\",\n content: `❌ **Failed to push feature branch**: ${pushBranchResult.error}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, pushFailEntry]);\n }\n } else {\n const branchFailEntry: ChatEntry = {\n type: \"tool_result\",\n content: `❌ **Failed to create feature branch**: ${createBranchResult.error}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, branchFailEntry]);\n }\n } else {\n const pushFailEntry: ChatEntry = {\n type: \"tool_result\",\n content: `❌ **Push Failed**: ${pushResult.error || \"Unknown error\"}\\n\\nTry running \\`git push\\` manually.`,\n timestamp: new Date(),\n toolCall: {\n id: `git_push_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: \"git push\" }),\n },\n },\n toolResult: pushResult,\n };\n setChatHistory((prev) => [...prev, pushFailEntry]);\n }\n }\n }\n\n } catch (error: unknown) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `❌ **Smart Push Failed**\\n\\n${error instanceof Error ? error.message : String(error)}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n setIsProcessing(false);\n clearInput();\n return true;\n }\n\n const directBashCommands = [\n \"ls\",\n \"pwd\",\n \"cd\",\n \"cat\",\n \"mkdir\",\n \"touch\",\n \"echo\",\n \"grep\",\n \"find\",\n \"cp\",\n \"mv\",\n \"rm\",\n ];\n const firstWord = trimmedInput.split(\" \")[0];\n\n if (directBashCommands.includes(firstWord)) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: trimmedInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n try {\n const result = await agent.executeBashCommand(trimmedInput);\n\n const commandEntry: ChatEntry = {\n type: \"tool_result\",\n content: result.success\n ? result.output || \"Command completed\"\n : result.error || \"Command failed\",\n timestamp: new Date(),\n toolCall: {\n id: `bash_${Date.now()}`,\n type: \"function\",\n function: {\n name: \"bash\",\n arguments: JSON.stringify({ command: trimmedInput }),\n },\n },\n toolResult: result,\n };\n setChatHistory((prev) => [...prev, commandEntry]);\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Error executing command: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n }\n\n clearInput();\n return true;\n }\n\n return false;\n };\n\n const processUserMessage = async (userInput: string) => {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: userInput,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, userEntry]);\n\n setIsProcessing(true);\n clearInput();\n\n try {\n setIsStreaming(true);\n let streamingEntry: ChatEntry | null = null;\n let accumulatedContent = \"\";\n let lastTokenCount = 0;\n let pendingToolCalls: GrokToolCall[] | null = null;\n let pendingToolResults: Array<{ toolCall: GrokToolCall; toolResult: ToolResult }> = [];\n let lastUpdateTime = Date.now();\n\n const flushUpdates = () => {\n const now = Date.now();\n if (now - lastUpdateTime < 150) return; // Throttle to ~6-7 FPS\n\n // Update token count if changed\n if (lastTokenCount !== 0) {\n setTokenCount(lastTokenCount);\n }\n\n // Handle accumulated content\n if (accumulatedContent) {\n if (!streamingEntry) {\n const newStreamingEntry = {\n type: \"assistant\" as const,\n content: accumulatedContent,\n timestamp: new Date(),\n isStreaming: true,\n };\n setChatHistory((prev) => [...prev, newStreamingEntry]);\n streamingEntry = newStreamingEntry;\n } else {\n setChatHistory((prev) =>\n prev.map((entry, idx) =>\n idx === prev.length - 1 && entry.isStreaming\n ? { ...entry, content: entry.content + accumulatedContent }\n : entry\n )\n );\n }\n accumulatedContent = \"\";\n }\n\n // Handle pending tool calls\n if (pendingToolCalls) {\n setChatHistory((prev) =>\n prev.map((entry) =>\n entry.isStreaming\n ? {\n ...entry,\n isStreaming: false,\n toolCalls: pendingToolCalls,\n }\n : entry\n )\n );\n streamingEntry = null;\n\n // Add individual tool call entries\n pendingToolCalls.forEach((toolCall) => {\n const toolCallEntry: ChatEntry = {\n type: \"tool_call\",\n content: \"Executing...\",\n timestamp: new Date(),\n toolCall: toolCall,\n };\n setChatHistory((prev) => [...prev, toolCallEntry]);\n });\n pendingToolCalls = null;\n }\n\n // Handle pending tool results\n if (pendingToolResults.length > 0) {\n setChatHistory((prev) =>\n prev.map((entry) => {\n if (entry.isStreaming) {\n return { ...entry, isStreaming: false };\n }\n // Update matching tool_call entries\n const matchingResult = pendingToolResults.find(\n (result) => entry.type === \"tool_call\" && entry.toolCall?.id === result.toolCall.id\n );\n if (matchingResult) {\n return {\n ...entry,\n type: \"tool_result\",\n content: matchingResult.toolResult.success\n ? matchingResult.toolResult.output || \"Success\"\n : matchingResult.toolResult.error || \"Error occurred\",\n toolResult: matchingResult.toolResult,\n };\n }\n return entry;\n })\n );\n streamingEntry = null;\n pendingToolResults = [];\n }\n\n lastUpdateTime = now;\n };\n\n for await (const chunk of agent.processUserMessageStream(userInput)) {\n switch (chunk.type) {\n case \"content\":\n if (chunk.content) {\n accumulatedContent += chunk.content;\n }\n break;\n\n case \"token_count\":\n if (chunk.tokenCount !== undefined) {\n lastTokenCount = chunk.tokenCount;\n }\n break;\n\n case \"tool_calls\":\n if (chunk.toolCalls) {\n pendingToolCalls = chunk.toolCalls;\n }\n break;\n\n case \"tool_result\":\n if (chunk.toolCall && chunk.toolResult) {\n pendingToolResults.push({ toolCall: chunk.toolCall, toolResult: chunk.toolResult });\n }\n break;\n\n case \"done\":\n // Flush all remaining updates\n flushUpdates();\n break;\n }\n\n // Flush updates periodically\n flushUpdates();\n }\n\n // Final flush and cleanup\n flushUpdates();\n if (streamingEntry) {\n setChatHistory((prev) =>\n prev.map((entry) =>\n entry.isStreaming ? { ...entry, isStreaming: false } : entry\n )\n );\n }\n setIsStreaming(false);\n } catch (error: any) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Error: ${error.message}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsStreaming(false);\n }\n\n setIsProcessing(false);\n processingStartTime.current = 0;\n };\n\n\n return {\n input,\n cursorPosition,\n showCommandSuggestions,\n selectedCommandIndex,\n showModelSelection,\n selectedModelIndex,\n commandSuggestions,\n availableModels,\n agent,\n autoEditEnabled,\n verbosityLevel,\n explainLevel,\n // Plan mode state and actions\n planMode,\n };\n}\n","import React, { useState } from \"react\";\nimport { Box, Text, useInput, useApp } from \"ink\";\nimport { GrokAgent } from \"../../agent/grok-agent.js\";\nimport { getSettingsManager } from \"../../utils/settings-manager.js\";\n\ninterface ApiKeyInputProps {\n onApiKeySet: (agent: GrokAgent) => void;\n}\n\nexport default function ApiKeyInput({ onApiKeySet }: ApiKeyInputProps) {\n const [input, setInput] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [isSubmitting, setIsSubmitting] = useState(false);\n const { exit } = useApp();\n\n useInput((inputChar, key) => {\n if (isSubmitting) return;\n\n if (key.ctrl && inputChar === \"c\") {\n exit();\n return;\n }\n\n if (key.return) {\n handleSubmit();\n return;\n }\n\n\n if (key.backspace || key.delete) {\n setInput((prev) => prev.slice(0, -1));\n setError(\"\");\n return;\n }\n\n if (inputChar && !key.ctrl && !key.meta) {\n setInput((prev) => prev + inputChar);\n setError(\"\");\n }\n });\n\n\n const handleSubmit = async () => {\n if (!input.trim()) {\n setError(\"API key cannot be empty\");\n return;\n }\n\n setIsSubmitting(true);\n try {\n const apiKey = input.trim();\n const agent = new GrokAgent(apiKey);\n \n // Set environment variable for current process\n process.env.GROK_API_KEY = apiKey;\n \n // Save to user settings\n try {\n const manager = getSettingsManager();\n manager.updateUserSetting('apiKey', apiKey);\n console.log(`\\n✅ API key saved to ~/.xcli/config.json`);\n } catch {\n console.log('\\n⚠️ Could not save API key to settings file');\n console.log('API key set for current session only');\n }\n \n onApiKeySet(agent);\n } catch {\n setError(\"Invalid API key format\");\n setIsSubmitting(false);\n }\n };\n\n const displayText = input.length > 0 ? \n (isSubmitting ? \"*\".repeat(input.length) : \"*\".repeat(input.length) + \"█\") : \n (isSubmitting ? \" \" : \"█\");\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Text color=\"yellow\">🔑 Grok API Key Required</Text>\n <Box marginBottom={1}>\n <Text color=\"gray\">Please enter your Grok API key to continue:</Text>\n </Box>\n \n <Box borderStyle=\"round\" borderColor=\"blue\" paddingX={1} marginBottom={1}>\n <Text color=\"gray\">❯ </Text>\n <Text>{displayText}</Text>\n </Box>\n\n {error ? (\n <Box marginBottom={1}>\n <Text color=\"red\">❌ {error}</Text>\n </Box>\n ) : null}\n\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"gray\" dimColor>• Press Enter to submit</Text>\n <Text color=\"gray\" dimColor>• Press Ctrl+C to exit</Text>\n <Text color=\"gray\" dimColor>Note: API key will be saved to ~/.xcli/config.json</Text>\n </Box>\n\n {isSubmitting ? (\n <Box marginTop={1}>\n <Text color=\"yellow\">🔄 Validating API key...</Text>\n </Box>\n ) : null}\n </Box>\n );\n}","/**\n * Context Information Hook\n * \n * Provides workspace context information that can be shared\n * between the welcome banner and context tooltip.\n */\n\nimport { useState, useEffect } from 'react';\nimport path from 'path';\nimport fs from 'fs';\nimport os from 'os';\n\nexport interface ContextInfo {\n workspaceFiles: number;\n indexSize: string;\n sessionFiles: number;\n activeTokens: number;\n lastActivity: string;\n gitBranch?: string;\n projectName?: string;\n memoryPressure: 'low' | 'medium' | 'high';\n isLoading: boolean;\n // Enhanced context management fields\n tokenUsage?: {\n current: number;\n max: number;\n percent: number;\n };\n messagesCount: number;\n loadedFiles: Array<{\n path: string;\n tokens: number;\n lastAccessed: Date;\n }>;\n contextHealth: 'optimal' | 'degraded' | 'critical';\n}\n\nexport function useContextInfo(agent?: any) {\n const [contextInfo, setContextInfo] = useState<ContextInfo>({\n workspaceFiles: 0,\n indexSize: \"0 MB\",\n sessionFiles: 0,\n activeTokens: 0,\n lastActivity: \"Now\",\n memoryPressure: 'low',\n isLoading: true,\n messagesCount: 0,\n loadedFiles: [],\n contextHealth: 'optimal',\n });\n\n // Update context information\n const updateContextInfo = async () => {\n try {\n // Get agent context data if agent is available\n let tokenUsage;\n let messagesCount = 0;\n let loadedFiles: ContextInfo['loadedFiles'] = [];\n let contextHealth: ContextInfo['contextHealth'] = 'optimal';\n\n if (agent) {\n // Get model information\n const modelName = agent.getCurrentModel?.() || \"grok-4-fast-non-reasoning\";\n const maxTokens = getMaxTokensForModel(modelName);\n\n // Get real data from agent\n const sessionTokens = agent.getSessionTokenCount?.() || 0;\n messagesCount = agent.getMessageCount?.() || 0;\n\n const tokenPercent = Math.round((sessionTokens / maxTokens) * 100);\n\n tokenUsage = {\n current: sessionTokens,\n max: maxTokens,\n percent: tokenPercent,\n };\n\n // Determine context health based on actual usage\n if (tokenPercent >= 95) contextHealth = 'critical';\n else if (tokenPercent >= 80) contextHealth = 'degraded';\n else contextHealth = 'optimal';\n\n // Get loaded files from chat history\n // TODO: Extract file references from chat history for better accuracy\n loadedFiles = [];\n }\n\n const info: ContextInfo = {\n workspaceFiles: await getWorkspaceFileCount(),\n indexSize: await getIndexSize(),\n sessionFiles: await getSessionFileCount(),\n activeTokens: tokenUsage?.current || 0,\n lastActivity: \"Now\",\n gitBranch: await getGitBranch(),\n projectName: await getProjectName(),\n memoryPressure: getMemoryPressure(),\n isLoading: false,\n tokenUsage,\n messagesCount,\n loadedFiles,\n contextHealth,\n };\n setContextInfo(info);\n } catch (error) {\n console.warn('[ContextInfo] Failed to update context:', error);\n setContextInfo(prev => ({ ...prev, isLoading: false }));\n }\n };\n\n // Initial load and periodic updates\n useEffect(() => {\n updateContextInfo();\n const interval = setInterval(updateContextInfo, 10000); // Update every 10s\n return () => clearInterval(interval);\n }, []);\n\n return {\n contextInfo,\n updateContextInfo,\n refreshContext: updateContextInfo\n };\n}\n\n// Helper functions for gathering context information\nasync function getWorkspaceFileCount(): Promise<number> {\n try {\n const cwd = process.cwd();\n const entries = await fs.promises.readdir(cwd, { withFileTypes: true });\n \n let count = 0;\n for (const entry of entries) {\n if (entry.isFile() && !shouldIgnoreFile(entry.name)) {\n count++;\n } else if (entry.isDirectory() && !shouldIgnoreDirectory(entry.name)) {\n try {\n const subEntries = await fs.promises.readdir(path.join(cwd, entry.name), { withFileTypes: true });\n count += subEntries.filter(sub => sub.isFile() && !shouldIgnoreFile(sub.name)).length;\n } catch {\n // Skip directories we can't read\n }\n }\n }\n \n return count;\n } catch {\n return 0;\n }\n}\n\nfunction shouldIgnoreFile(filename: string): boolean {\n return filename.startsWith('.') || \n filename.endsWith('.log') ||\n filename.includes('.tmp');\n}\n\nfunction shouldIgnoreDirectory(dirname: string): boolean {\n const ignoreDirs = ['node_modules', '.git', 'dist', 'build', '.next', 'coverage'];\n return ignoreDirs.includes(dirname) || dirname.startsWith('.');\n}\n\nasync function getIndexSize(): Promise<string> {\n try {\n const indexPath = path.join(process.cwd(), '.xcli', 'index.json');\n if (fs.existsSync(indexPath)) {\n const stats = await fs.promises.stat(indexPath);\n const mb = stats.size / (1024 * 1024);\n return mb > 1 ? `${mb.toFixed(1)} MB` : `${(stats.size / 1024).toFixed(1)} KB`;\n }\n } catch {\n // Ignore errors\n }\n return \"0 MB\";\n}\n\nasync function getSessionFileCount(): Promise<number> {\n try {\n const sessionPath = path.join(os.homedir(), '.xcli', 'session.log');\n if (fs.existsSync(sessionPath)) {\n const content = await fs.promises.readFile(sessionPath, 'utf8');\n return content.split('\\n').filter(line => line.trim()).length;\n }\n } catch {\n // Ignore errors\n }\n return 0;\n}\n\nasync function getGitBranch(): Promise<string | undefined> {\n try {\n const gitPath = path.join(process.cwd(), '.git', 'HEAD');\n if (fs.existsSync(gitPath)) {\n const content = await fs.promises.readFile(gitPath, 'utf8');\n const match = content.match(/ref: refs\\/heads\\/(.+)/);\n return match ? match[1].trim() : 'detached';\n }\n } catch {\n // Ignore errors\n }\n return undefined;\n}\n\nasync function getProjectName(): Promise<string | undefined> {\n try {\n const packagePath = path.join(process.cwd(), 'package.json');\n if (fs.existsSync(packagePath)) {\n const content = await fs.promises.readFile(packagePath, 'utf8');\n const pkg = JSON.parse(content);\n return pkg.name;\n }\n } catch {\n // Ignore errors\n }\n \n // Fallback to directory name\n return path.basename(process.cwd());\n}\n\nfunction getMemoryPressure(): 'low' | 'medium' | 'high' {\n try {\n const memUsage = process.memoryUsage();\n const heapUsedMB = memUsage.heapUsed / 1024 / 1024;\n \n if (heapUsedMB > 200) return 'high';\n if (heapUsedMB > 100) return 'medium';\n return 'low';\n } catch {\n return 'low';\n }\n}\n\n// Helper functions for agent context data\nfunction getMaxTokensForModel(modelName: string): number {\n const modelLimits: Record<string, number> = {\n \"grok-4-fast-non-reasoning\": 128000,\n \"grok-4-fast-reasoning\": 200000,\n \"grok-4-0709\": 200000,\n \"grok-4-latest\": 200000,\n \"grok-3-latest\": 200000,\n \"grok-3-fast\": 128000,\n \"grok-3-mini-fast\": 64000,\n \"claude-sonnet-4\": 200000,\n \"claude-opus-4\": 200000,\n \"gpt-4o\": 128000,\n \"gpt-4\": 32000,\n };\n\n return modelLimits[modelName] || 128000; // Default fallback\n}\n\nfunction _extractLoadedFiles(_chatHistory: any[]): ContextInfo['loadedFiles'] {\n const fileMap = new Map<string, ContextInfo['loadedFiles'][0]>();\n\n // Extract file paths from chat history\n for (const entry of _chatHistory) {\n if (entry.type === \"tool_result\" && entry.toolCall) {\n const toolName = entry.toolCall.function?.name;\n const args = entry.toolCall.function?.arguments;\n\n if (toolName === \"str_replace_editor\" || toolName === \"edit_file\") {\n try {\n const parsedArgs = typeof args === \"string\" ? JSON.parse(args) : args;\n const filePath = parsedArgs?.path || parsedArgs?.file_path;\n\n if (filePath && typeof filePath === \"string\") {\n // Estimate token count from content length\n const content = entry.content || \"\";\n const tokenCount = Math.round(content.length / 4); // Rough estimate\n\n fileMap.set(filePath, {\n path: filePath.replace(process.cwd(), \".\"),\n tokens: tokenCount,\n lastAccessed: entry.timestamp || new Date(),\n });\n }\n } catch {\n // Ignore parsing errors\n }\n }\n }\n }\n\n // Return most recently accessed files\n return Array.from(fileMap.values())\n .sort((a, b) => b.lastAccessed.getTime() - a.lastAccessed.getTime())\n .slice(0, 10);\n}","import { useEffect } from 'react';\nimport fs from 'fs';\nimport path from 'path';\nimport { ChatEntry } from '../agent/grok-agent.js';\n\nexport interface AutoReadConfig {\n enabled?: boolean;\n showLoadingMessage?: boolean;\n showSummaryMessage?: boolean;\n showFileContents?: boolean;\n folders?: Array<{\n name: string;\n priority?: number;\n files: Array<{\n name: string;\n title?: string;\n icon?: string;\n required?: boolean;\n pattern?: string;\n }>;\n }>;\n customFolders?: Array<{\n name: string;\n priority?: number;\n files: Array<{\n name: string;\n title?: string;\n icon?: string;\n required?: boolean;\n pattern?: string;\n }>;\n }>;\n}\n\nexport function useAutoRead(\n setChatHistory: (messages: ChatEntry[]) => void\n): void {\n useEffect(() => {\n // Auto-read .agent folder on first run if exists\n if (fs.existsSync('.agent')) {\n const initialMessages: ChatEntry[] = [];\n let docsRead = 0;\n\n // Load configuration if available\n let config: AutoReadConfig | null = null;\n const configPaths = [\n path.join('.xcli', 'auto-read-config.json'), // User config (distributed)\n path.join('.agent', 'auto-read-config.json') // Dev override (gitignored)\n ];\n\n for (const configPath of configPaths) {\n if (fs.existsSync(configPath)) {\n try {\n const configContent = fs.readFileSync(configPath, 'utf8');\n config = JSON.parse(configContent);\n break; // Use first config found (user config takes precedence)\n } catch (_error) {\n // Silently ignore config parsing errors, continue to next path\n }\n }\n }\n\n // Use config or fall back to hardcoded defaults\n const isEnabled = config?.enabled !== false;\n const showLoadingMessage = config?.showLoadingMessage !== false;\n const showSummaryMessage = config?.showSummaryMessage !== false;\n const showFileContents = config?.showFileContents === true;\n\n if (!isEnabled) {\n // Auto-read is disabled\n return;\n }\n\n // Add loading message\n if (showLoadingMessage) {\n initialMessages.push({\n type: 'assistant',\n content: '📚 Reading core documentation into memory...',\n timestamp: new Date(),\n });\n }\n\n // Console logging for startup confirmation\n console.log('🔍 Auto-reading .agent documentation...');\n\n // Process folders in priority order\n const folders = config?.folders || [\n {\n name: 'system',\n priority: 1,\n files: [\n { name: 'architecture.md', title: 'System Architecture', icon: '📋', required: true },\n { name: 'critical-state.md', title: 'Critical State', icon: '🏗️', required: false },\n { name: 'installation.md', title: 'Installation', icon: '🏗️', required: false },\n { name: 'api-schema.md', title: 'API Schema', icon: '🏗️', required: false },\n { name: 'auto-read-system.md', title: 'Auto-Read System', icon: '🏗️', required: false }\n ]\n },\n {\n name: 'sop',\n priority: 2,\n files: [\n { name: 'git-workflow.md', title: 'Git Workflow SOP', icon: '🔧', required: true },\n { name: 'release-management.md', title: 'Release Management SOP', icon: '📖', required: false },\n { name: 'automation-protection.md', title: 'Automation Protection SOP', icon: '📖', required: false },\n { name: 'npm-publishing-troubleshooting.md', title: 'NPM Publishing Troubleshooting', icon: '📖', required: false }\n ]\n }\n ];\n\n // Add custom folders if configured\n if (config?.customFolders) {\n folders.push(...config.customFolders);\n }\n\n // Sort folders by priority\n folders.sort((a, b) => (a.priority || 999) - (b.priority || 999));\n\n // Process each folder\n for (const folder of folders) {\n const folderPath = path.join('.agent', folder.name);\n\n if (!fs.existsSync(folderPath)) {\n continue;\n }\n\n for (const file of folder.files) {\n let filePaths: string[] = [];\n\n if (file.pattern) {\n // Handle glob patterns (future enhancement)\n // For now, skip pattern files\n continue;\n } else {\n filePaths = [file.name];\n }\n\n for (const fileName of filePaths) {\n const filePath = path.join(folderPath, fileName);\n\n if (!fs.existsSync(filePath)) {\n if (file.required) {\n // Log missing required files (optional enhancement)\n }\n continue;\n }\n\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n const displayTitle = file.title || fileName.replace('.md', '').replace('-', ' ').toUpperCase();\n const icon = file.icon || '📄';\n\n // Console logging for each file loaded\n console.log(`📄 Loaded: ${folder.name}/${fileName} (${content.length} chars)`);\n\n if (showFileContents) {\n initialMessages.push({\n type: 'assistant',\n content: `${icon} **${displayTitle} (from .agent/${folder.name}/${fileName})**\\n\\n${content}`,\n timestamp: new Date(),\n });\n }\n docsRead++;\n } catch (_error) {\n // Silently ignore read errors\n console.log(`⚠️ Failed to read: ${folder.name}/${fileName}`);\n }\n }\n }\n }\n\n // Console summary\n console.log(`✅ Auto-read complete: ${docsRead} documentation files loaded`);\n\n // Add summary message\n if (showSummaryMessage && docsRead > 0) {\n initialMessages.push({\n type: 'assistant',\n content: `✅ ${docsRead} documentation files read - I have a complete understanding of the current architecture and operational procedures.`,\n timestamp: new Date(),\n });\n }\n\n if (initialMessages.length > 0) {\n setChatHistory(initialMessages);\n }\n }\n }, [setChatHistory]);\n}","import { useEffect } from 'react';\nimport { GrokAgent, ChatEntry } from '../agent/grok-agent.js';\nimport { GrokToolCall } from '../grok/client.js';\n\nexport interface StreamingState {\n isProcessing: boolean;\n isStreaming: boolean;\n setIsProcessing: (processing: boolean) => void;\n setIsStreaming: (streaming: boolean) => void;\n setTokenCount: (count: number) => void;\n setChatHistory: (updater: (prev: ChatEntry[]) => ChatEntry[]) => void;\n}\n\nexport function useStreaming(\n agent: GrokAgent | null,\n initialMessage: string | undefined,\n setChatHistory: (updater: (prev: ChatEntry[]) => ChatEntry[]) => void,\n streamingState: StreamingState\n): void {\n const { setIsProcessing, setIsStreaming, setTokenCount } = streamingState;\n\n useEffect(() => {\n if (initialMessage && agent) {\n const userEntry: ChatEntry = {\n type: \"user\",\n content: initialMessage,\n timestamp: new Date(),\n };\n setChatHistory(() => [userEntry]);\n\n const processInitialMessage = async () => {\n setIsProcessing(true);\n setIsStreaming(true);\n\n try {\n let streamingEntry: ChatEntry | null = null;\n let accumulatedContent = \"\";\n let lastTokenCount = 0;\n let pendingToolCalls: GrokToolCall[] | null = null;\n let pendingToolResults: Array<{ toolCall: GrokToolCall; toolResult: any }> = [];\n let lastUpdateTime = Date.now();\n\n const flushUpdates = () => {\n const now = Date.now();\n if (now - lastUpdateTime < 150) return; // Throttle to ~6-7 FPS to reduce re-render frequency\n\n // Batch all chat history updates into a single setState call\n setChatHistory((prev) => {\n let newHistory = [...prev];\n\n // Update token count if changed\n if (lastTokenCount !== 0) {\n // Note: token count is handled separately, not in chat history\n }\n\n // Handle accumulated content\n if (accumulatedContent) {\n if (!streamingEntry) {\n const newStreamingEntry = {\n type: \"assistant\" as const,\n content: accumulatedContent,\n timestamp: new Date(),\n isStreaming: true,\n };\n newHistory.push(newStreamingEntry);\n streamingEntry = newStreamingEntry;\n } else {\n const lastIdx = newHistory.length - 1;\n if (lastIdx >= 0 && newHistory[lastIdx].isStreaming) {\n newHistory[lastIdx] = { ...newHistory[lastIdx], content: newHistory[lastIdx].content + accumulatedContent };\n }\n }\n accumulatedContent = \"\";\n }\n\n // Handle pending tool calls\n if (pendingToolCalls) {\n // Mark streaming entry as complete\n const streamingIdx = newHistory.findIndex(entry => entry.isStreaming);\n if (streamingIdx >= 0) {\n newHistory[streamingIdx] = { ...newHistory[streamingIdx], isStreaming: false, toolCalls: pendingToolCalls };\n }\n streamingEntry = null;\n\n // Add individual tool call entries\n pendingToolCalls.forEach((toolCall) => {\n const toolCallEntry: ChatEntry = {\n type: \"tool_call\",\n content: \"Executing...\",\n timestamp: new Date(),\n toolCall: toolCall,\n };\n newHistory.push(toolCallEntry);\n });\n pendingToolCalls = null;\n }\n\n // Handle pending tool results\n if (pendingToolResults.length > 0) {\n newHistory = newHistory.map((entry) => {\n if (entry.isStreaming) {\n return { ...entry, isStreaming: false };\n }\n // Update matching tool_call entries\n const matchingResult = pendingToolResults.find(\n (result) => entry.type === \"tool_call\" && entry.toolCall?.id === result.toolCall.id\n );\n if (matchingResult) {\n return {\n ...entry,\n type: \"tool_result\",\n content: matchingResult.toolResult.success\n ? matchingResult.toolResult.output || \"Success\"\n : matchingResult.toolResult.error || \"Error occurred\",\n toolResult: matchingResult.toolResult,\n };\n }\n return entry;\n });\n streamingEntry = null;\n pendingToolResults = [];\n }\n\n return newHistory;\n });\n\n // Update token count separately\n if (lastTokenCount !== 0) {\n setTokenCount(lastTokenCount);\n }\n\n lastUpdateTime = now;\n };\n\n for await (const chunk of agent.processUserMessageStream(initialMessage)) {\n switch (chunk.type) {\n case \"content\":\n if (chunk.content) {\n accumulatedContent += chunk.content;\n }\n break;\n\n case \"token_count\":\n if (chunk.tokenCount !== undefined) {\n lastTokenCount = chunk.tokenCount;\n }\n break;\n\n case \"tool_calls\":\n if (chunk.toolCalls) {\n pendingToolCalls = chunk.toolCalls;\n }\n break;\n\n case \"tool_result\":\n if (chunk.toolCall && chunk.toolResult) {\n pendingToolResults.push({ toolCall: chunk.toolCall, toolResult: chunk.toolResult });\n }\n break;\n\n case \"done\":\n // Flush all remaining updates\n flushUpdates();\n break;\n }\n\n // Flush updates periodically\n flushUpdates();\n }\n\n // Final flush and cleanup\n flushUpdates();\n if (streamingEntry) {\n setChatHistory((prev) =>\n prev.map((entry) =>\n entry.isStreaming ? { ...entry, isStreaming: false } : entry\n )\n );\n }\n setIsStreaming(false);\n } catch (error: unknown) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: `Error: ${errorMessage}`,\n timestamp: new Date(),\n };\n setChatHistory((prev) => [...prev, errorEntry]);\n setIsStreaming(false);\n }\n\n setIsProcessing(false);\n };\n\n processInitialMessage();\n }\n }, [initialMessage, agent, setChatHistory, setIsProcessing, setIsStreaming, setTokenCount]);\n}","import { useEffect } from 'react';\nimport {\n ConfirmationService,\n ConfirmationOptions,\n} from '../utils/confirmation-service.js';\n\nexport interface ConfirmationState {\n confirmationOptions: ConfirmationOptions | null;\n setConfirmationOptions: (options: ConfirmationOptions | null) => void;\n setIsProcessing: (processing: boolean) => void;\n setIsStreaming: (streaming: boolean) => void;\n setTokenCount: (count: number) => void;\n setProcessingTime: (time: number) => void;\n processingStartTime: React.MutableRefObject<number>;\n}\n\nexport function useConfirmations(\n confirmationService: ConfirmationService,\n state: ConfirmationState\n) {\n const {\n setConfirmationOptions,\n setIsProcessing,\n setIsStreaming,\n setTokenCount,\n setProcessingTime,\n processingStartTime,\n } = state;\n\n useEffect(() => {\n const handleConfirmationRequest = (options: ConfirmationOptions) => {\n setConfirmationOptions(options);\n };\n\n confirmationService.on(\"confirmation-requested\", handleConfirmationRequest);\n\n return () => {\n confirmationService.off(\n \"confirmation-requested\",\n handleConfirmationRequest\n );\n };\n }, [confirmationService, setConfirmationOptions]);\n\n const handleConfirmation = (dontAskAgain?: boolean) => {\n confirmationService.confirmOperation(true, dontAskAgain);\n setConfirmationOptions(null);\n };\n\n const handleRejection = (feedback?: string) => {\n confirmationService.rejectOperation(feedback);\n setConfirmationOptions(null);\n\n // Reset processing states when operation is cancelled\n setIsProcessing(false);\n setIsStreaming(false);\n setTokenCount(0);\n setProcessingTime(0);\n processingStartTime.current = 0;\n };\n\n return {\n handleConfirmation,\n handleRejection,\n };\n}","import { useState, useEffect } from \"react\";\nimport { ChatEntry } from \"../agent/grok-agent.js\";\nimport { getSettingsManager } from \"../utils/settings-manager.js\";\n\nexport interface IntroductionState {\n needsIntroduction: boolean;\n isCollectingOperatorName: boolean;\n isCollectingAgentName: boolean;\n operatorName?: string;\n agentName?: string;\n showGreeting: boolean;\n}\n\nexport function useIntroduction(\n chatHistory: ChatEntry[],\n setChatHistory: React.Dispatch<React.SetStateAction<ChatEntry[]>>\n) {\n const [introductionState, setIntroductionState] = useState<IntroductionState>({\n needsIntroduction: false,\n isCollectingOperatorName: false,\n isCollectingAgentName: false,\n showGreeting: false,\n });\n\n // Check if introduction is needed on component mount\n useEffect(() => {\n const checkIntroductionNeeded = () => {\n try {\n const settingsManager = getSettingsManager();\n const userSettings = settingsManager.loadUserSettings();\n\n const hasOperatorName = userSettings.operatorName !== undefined && userSettings.operatorName !== null && userSettings.operatorName.trim().length > 0;\n const hasAgentName = userSettings.agentName !== undefined && userSettings.agentName !== null && userSettings.agentName.trim().length > 0;\n\n if (!hasOperatorName || !hasAgentName) {\n setIntroductionState({\n needsIntroduction: true,\n isCollectingOperatorName: !hasOperatorName,\n isCollectingAgentName: hasOperatorName && !hasAgentName,\n showGreeting: false,\n });\n }\n } catch (error) {\n // If settings manager fails, skip introduction\n console.warn('Settings manager error, skipping introduction:', error);\n }\n };\n\n // Only check if chat history is empty (first run)\n if (chatHistory.length === 0) {\n checkIntroductionNeeded();\n }\n }, [chatHistory.length]);\n\n const handleIntroductionInput = (input: string): boolean => {\n try {\n if (!introductionState.needsIntroduction || introductionState.needsIntroduction === undefined) {\n return false; // Not handling introduction\n }\n\n const trimmedInput = input.trim();\n if (!trimmedInput) return false;\n\n // Basic validation - names should be reasonable length and not contain special characters\n if (trimmedInput.length < 1 || trimmedInput.length > 50) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: \"Please enter a name between 1 and 50 characters.\",\n timestamp: new Date(),\n };\n setChatHistory(prev => [...prev, errorEntry]);\n return true;\n }\n\n // Check for potentially malicious input (basic check)\n const maliciousPattern = /[<>\\\"'&]/;\n if (maliciousPattern.test(trimmedInput)) {\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: \"Please use only letters, numbers, spaces, and common punctuation.\",\n timestamp: new Date(),\n };\n setChatHistory(prev => [...prev, errorEntry]);\n return true;\n }\n\n const settingsManager = getSettingsManager();\n\n if (introductionState.isCollectingOperatorName) {\n // Save operator name and move to agent name collection\n settingsManager.updateUserSetting('operatorName', trimmedInput);\n setIntroductionState(prev => ({\n ...prev,\n isCollectingOperatorName: false,\n isCollectingAgentName: true,\n operatorName: trimmedInput,\n }));\n\n // Add assistant response asking for agent name\n const agentNamePrompt: ChatEntry = {\n type: \"assistant\",\n content: \"Great! And what would you like to call me (your AI assistant)?\",\n timestamp: new Date(),\n };\n setChatHistory(prev => [...prev, agentNamePrompt]);\n return true;\n\n } else if (introductionState.isCollectingAgentName) {\n // Save agent name and complete introduction\n settingsManager.updateUserSetting('agentName', trimmedInput);\n setIntroductionState(prev => ({\n ...prev,\n needsIntroduction: false,\n isCollectingAgentName: false,\n agentName: trimmedInput,\n showGreeting: true,\n }));\n\n // Add greeting message\n const userSettings = settingsManager.loadUserSettings();\n const operatorName = userSettings.operatorName || 'there';\n const greeting: ChatEntry = {\n type: \"assistant\",\n content: `hi ${operatorName} nice to meet you. lets get started, how can i help?`,\n timestamp: new Date(),\n };\n setChatHistory(prev => [...prev, greeting]);\n return true;\n }\n } catch (error) {\n // Handle any errors gracefully\n console.warn('Introduction input error:', error);\n const errorEntry: ChatEntry = {\n type: \"assistant\",\n content: \"There was an issue with the introduction. You can continue using the CLI normally.\",\n timestamp: new Date(),\n };\n setChatHistory(prev => [...prev, errorEntry]);\n return true;\n }\n\n return false;\n };\n\n const startIntroduction = () => {\n if (!introductionState.needsIntroduction) return;\n\n // Add initial introduction message\n const introMessage: ChatEntry = {\n type: \"assistant\",\n content: \"Hello! I'm x-cli. Before we get started, I'd like to know a bit about you.\\n\\nWhat's your name?\",\n timestamp: new Date(),\n };\n setChatHistory(prev => [...prev, introMessage]);\n };\n\n // Auto-start introduction if needed\n useEffect(() => {\n if (introductionState.needsIntroduction && !introductionState.isCollectingOperatorName && !introductionState.isCollectingAgentName && chatHistory.length === 0) {\n startIntroduction();\n }\n }, [introductionState.needsIntroduction, introductionState.isCollectingOperatorName, introductionState.isCollectingAgentName, chatHistory.length]);\n\n return {\n introductionState,\n handleIntroductionInput,\n };\n}\n","import pkg from '../../package.json' with { type: 'json' };\n\nexport function printWelcomeBanner(_quiet = false): void {\n if (_quiet) return;\n\n const isTTY = !!process.stdout.isTTY;\n\n // Full reset: move home, clear display, clear scrollback, hide cursor while drawing\n // Order matters: go Home, then clear display, then clear scrollback.\n // (Some terminals ignore clear-until-top unless cursor is at 1;1)\n if (isTTY) {\n process.stdout.write('\\x1b[?25l'); // hide cursor\n process.stdout.write('\\x1b[H'); // cursor to 1;1\n process.stdout.write('\\x1b[2J'); // clear entire screen\n process.stdout.write('\\x1b[3J'); // clear scrollback buffer\n process.stdout.write('\\x1b[H'); // ensure at 1;1 after clearing\n } else {\n // If not a TTY (e.g., redirected to file), skip terminal control codes\n // so logs remain readable.\n }\n\n // Detect terminal preference; default fancy unless explicitly disabled\n const isFancy = process.env.X_CLI_ASCII !== 'block';\n\n // NOTE: No leading newline(s) — that's what caused the \"starts at line 3\" look.\n const fancyAscii = String.raw`__/\\\\\\_______/\\\\\\______________________/\\\\\\\\\\\\\\\\\\__/\\\\\\______________/\\\\\\\\\\\\\\\\\\\\\\_ \n _\\///\\\\\\___/\\\\\\/____________________/\\\\\\////////__\\/\\\\\\_____________\\/////\\\\\\///__ \n ___\\///\\\\\\\\\\\\/____________________/\\\\\\/___________\\/\\\\\\_________________\\/\\\\\\_____ \n _____\\//\\\\\\\\_______/\\\\\\\\\\\\\\\\\\\\\\__/\\\\\\_____________\\/\\\\\\_________________\\/\\\\\\_____ \n ______\\/\\\\\\\\______\\///////////__\\/\\\\\\_____________\\/\\\\\\_________________\\/\\\\\\_____ \n ______/\\\\\\\\\\\\___________________\\//\\\\\\____________\\/\\\\\\_________________\\/\\\\\\_____ \n ____/\\\\\\////\\\\\\__________________\\///\\\\\\__________\\/\\\\\\_________________\\/\\\\\\_____ \n __/\\\\\\/___\\///\\\\\\__________________\\////\\\\\\\\\\\\\\\\\\_\\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\__/\\\\\\\\\\\\\\\\\\\\\\_ \n _\\///_______\\///______________________\\/////////__\\///////////////__\\///////////__`;\n\n // Keep block art short and ANSI-wrapped; again, no leading newline.\n const blockAscii = String.raw`\\x1b[34m ████ ████████ ████ ████\n ████████ ██████████████ ████████\n ██████████ ██████████████ ████████\n ██████████ ██████████████ ████████\n ████████ ██████████████ ████████\n ████ ████████ ████ ████\\x1b[0m`;\n\n const asciiArt = (isFancy ? fancyAscii : blockAscii).normalize('NFC');\n\n // Write banner (no implicit extra newline before). Add a single newline after.\n process.stdout.write(asciiArt + '\\n');\n\n const welcomeBanner = [\n '',\n `\\x1b[32m Welcome to X-CLI v${pkg.version} ⚡\\x1b[0m`,\n '',\n `\\x1b[36m 🚀 Claude Code-level intelligence in your terminal!\\x1b[0m`,\n '',\n `\\x1b[33m ✔ Ready. Type your first command or paste code to begin.\\x1b[0m`,\n '',\n `\\x1b[35m 💡 Quick Start Tips:\\x1b[0m`,\n '',\n ` • Ask anything: \"Create a React component\" or \"Debug this Python script\"`,\n ` • Edit files: \"Add error handling to app.js\"`,\n ` • Run commands: \"Set up a new Node.js project\"`,\n ` • Get help: Type \"/help\" for all commands`,\n '',\n `\\x1b[35m 🛠️ Power Features:\\x1b[0m`,\n '',\n ` • Auto-edit mode: Press Shift+Tab to toggle hands-free editing`,\n ` • Project memory: Create .xcli/GROK.md to customize behavior`,\n ` • Documentation: Run \"/init-agent\" for .agent docs system`,\n ` • Error recovery: Run \"/heal\" after errors to add guardrails`,\n '',\n `\\x1b[37m Type your request in natural language. Ctrl+C to clear, 'exit' to quit.\\x1b[0m`,\n '',\n ].join('\\n');\n\n process.stdout.write(welcomeBanner);\n\n // Show cursor again\n if (isTTY) process.stdout.write('\\x1b[?25h');\n}\n\nexport function useConsoleSetup(_quiet = false): void {\n // Banner printing is now handled before React render in index.ts\n // This hook is kept for potential future use or to maintain API compatibility\n}","import { useEffect, useRef } from 'react';\nimport fs from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { ChatEntry } from '../agent/grok-agent.js';\n\nexport function useSessionLogging(chatHistory: ChatEntry[]): void {\n const lastChatHistoryLength = useRef<number>(0);\n\n useEffect(() => {\n const newEntries = chatHistory.slice(lastChatHistoryLength.current);\n if (newEntries.length > 0) {\n const sessionFile = path.join(os.homedir(), '.xcli', 'session.log');\n try {\n const dir = path.dirname(sessionFile);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n const lines = newEntries.map(entry => JSON.stringify(entry)).join('\\n') + '\\n';\n fs.appendFileSync(sessionFile, lines);\n } catch {\n // Silently ignore session logging errors\n }\n }\n lastChatHistoryLength.current = chatHistory.length;\n }, [chatHistory]);\n}","import { useEffect, useRef } from 'react';\n\nexport function useProcessingTimer(\n isProcessing: boolean,\n isStreaming: boolean,\n setProcessingTime: (time: number) => void\n): void {\n const processingStartTime = useRef<number>(0);\n\n useEffect(() => {\n if (!isProcessing && !isStreaming) {\n setProcessingTime(0);\n return;\n }\n\n if (processingStartTime.current === 0) {\n processingStartTime.current = Date.now();\n }\n\n const interval = setInterval(() => {\n setProcessingTime(\n Math.floor((Date.now() - processingStartTime.current) / 1000)\n );\n }, 1000);\n\n return () => clearInterval(interval);\n }, [isProcessing, isStreaming, setProcessingTime]);\n}","/**\n * Centralized color palette for consistent UI styling\n * Based on Claude Code's design principles and terminal compatibility\n */\n\nexport const colors = {\n // Primary colors\n primary: '#0066CC', // Claude blue\n accent: '#8B5CF6', // Purple for special states\n \n // Status colors\n success: '#00A86B', // Green - successful operations\n warning: '#FF8C00', // Orange - warnings and processing\n error: '#FF4444', // Red - errors and failures\n info: '#0066CC', // Blue - informational content\n \n // UI colors\n muted: '#6B7280', // Gray - secondary text\n text: '#FFFFFF', // White - primary text\n background: '#000000', // Black - background\n \n // Spinner and progress colors\n search: '#0066CC', // Blue - searching/indexing operations\n process: '#FF8C00', // Orange - processing/thinking\n write: '#00A86B', // Green - writing/editing operations\n compact: '#8B5CF6', // Purple - compacting/optimizing\n \n // Context awareness colors\n workspace: '#FFFF00', // Yellow - workspace/file operations\n memory: '#8B5CF6', // Magenta - memory/session operations\n index: '#00A86B', // Green - indexing status\n session: '#FF8C00', // Orange - session status\n};\n\n/**\n * Ink color names mapped to our palette\n * Use these with Ink's Text color prop\n */\nexport const inkColors = {\n primary: 'cyan',\n success: 'green', \n warning: 'yellow',\n error: 'red',\n info: 'blue',\n muted: 'gray',\n accent: 'magenta',\n text: 'white',\n \n // Bright variants\n primaryBright: 'cyanBright',\n successBright: 'greenBright',\n warningBright: 'yellowBright',\n errorBright: 'redBright',\n infoBright: 'blueBright',\n accentBright: 'magentaBright',\n} as const;\n\n/**\n * Get appropriate color for spinner states\n */\nexport function getSpinnerColor(operation: string): keyof typeof inkColors {\n switch (operation.toLowerCase()) {\n case 'search':\n case 'indexing':\n case 'scanning':\n return 'info';\n \n case 'process':\n case 'thinking':\n case 'analyzing':\n return 'warning';\n \n case 'write':\n case 'edit':\n case 'create':\n return 'success';\n \n case 'compact':\n case 'optimize':\n case 'memory':\n return 'accent';\n \n default:\n return 'primary';\n }\n}\n\n/**\n * Context status colors for the startup banner\n */\nexport const contextColors = {\n dynamic: 'primary',\n onDemand: 'warning',\n indexed: 'success',\n notIndexed: 'muted',\n restored: 'accent',\n fresh: 'info',\n} as const;","import React, { useState, useEffect } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { inkColors } from \"../colors.js\";\n\ninterface ContextStatusProps {\n workspaceFiles?: number;\n indexSize?: string;\n sessionRestored?: boolean;\n showDetails?: boolean;\n}\n\ninterface DynamicContextInfo {\n tokenUsage: number;\n memoryPressure: 'low' | 'medium' | 'high';\n backgroundActivity: string[];\n lastUpdate: Date;\n}\n\nexport function ContextStatus({\n workspaceFiles = 0,\n indexSize = \"0 MB\",\n sessionRestored = false,\n showDetails = false,\n}: ContextStatusProps) {\n const [dynamicInfo, setDynamicInfo] = useState<DynamicContextInfo>({\n tokenUsage: 0,\n memoryPressure: 'low',\n backgroundActivity: [],\n lastUpdate: new Date(),\n });\n\n // Update dynamic context information\n useEffect(() => {\n const updateDynamicInfo = () => {\n // TODO: Integrate with actual token counter and memory monitoring\n const mockInfo: DynamicContextInfo = {\n tokenUsage: Math.floor(Math.random() * 50000) + 1000,\n memoryPressure: ['low', 'medium', 'high'][Math.floor(Math.random() * 3)] as 'low' | 'medium' | 'high',\n backgroundActivity: getActiveBackgroundTasks(),\n lastUpdate: new Date(),\n };\n setDynamicInfo(mockInfo);\n };\n\n updateDynamicInfo();\n const interval = setInterval(updateDynamicInfo, 10000); // Update every 10s\n return () => clearInterval(interval);\n }, []);\n\n // Get memory pressure color\n const getMemoryPressureColor = (pressure: string) => {\n switch (pressure) {\n case 'low': return inkColors.success;\n case 'medium': return inkColors.warning;\n case 'high': return inkColors.error;\n default: return inkColors.muted;\n }\n };\n\n // Get memory pressure icon\n const getMemoryPressureIcon = (pressure: string) => {\n switch (pressure) {\n case 'low': return '🟢';\n case 'medium': return '🟡';\n case 'high': return '🔴';\n default: return '⚫';\n }\n };\n\n // Compact status view (for banner)\n if (!showDetails) {\n return (\n <Box>\n <Text color={inkColors.muted}>\n 📁 {workspaceFiles} files \n </Text>\n <Text color={inkColors.muted}>\n {\" \"}· 💾 {indexSize} \n </Text>\n {sessionRestored && (\n <Text color={inkColors.success}>\n {\" \"}· 🔄 restored\n </Text>\n )}\n <Text color={getMemoryPressureColor(dynamicInfo.memoryPressure)}>\n {\" \"}· {getMemoryPressureIcon(dynamicInfo.memoryPressure)} {dynamicInfo.memoryPressure}\n </Text>\n </Box>\n );\n }\n\n // Detailed status view\n return (\n <Box flexDirection=\"column\">\n <Box marginBottom={1}>\n <Text color={inkColors.accent} bold>\n 📊 Context Status\n </Text>\n <Text color={inkColors.muted}>\n {\" \"}(updated {formatTimeAgo(dynamicInfo.lastUpdate)})\n </Text>\n </Box>\n\n {/* Workspace Information */}\n <Box justifyContent=\"space-between\" marginBottom={1}>\n <Box>\n <Text color={inkColors.primary}>📁 Workspace:</Text>\n <Text color={inkColors.text}> {workspaceFiles} files</Text>\n </Box>\n <Box>\n <Text color={inkColors.primary}>💾 Index:</Text>\n <Text color={inkColors.text}> {indexSize}</Text>\n </Box>\n </Box>\n\n {/* Token and Memory Information */}\n <Box justifyContent=\"space-between\" marginBottom={1}>\n <Box>\n <Text color={inkColors.warning}>🔤 Tokens:</Text>\n <Text color={inkColors.text}> {dynamicInfo.tokenUsage.toLocaleString()}</Text>\n </Box>\n <Box>\n <Text color={getMemoryPressureColor(dynamicInfo.memoryPressure)}>\n {getMemoryPressureIcon(dynamicInfo.memoryPressure)} Memory:\n </Text>\n <Text color={inkColors.text}> {dynamicInfo.memoryPressure}</Text>\n </Box>\n </Box>\n\n {/* Session Status */}\n <Box marginBottom={1}>\n <Text color={inkColors.success}>🔄 Session:</Text>\n <Text color={sessionRestored ? inkColors.success : inkColors.muted}>\n {\" \"}{sessionRestored ? \"restored\" : \"fresh\"}\n </Text>\n </Box>\n\n {/* Background Activity */}\n {dynamicInfo.backgroundActivity.length > 0 && (\n <Box flexDirection=\"column\">\n <Text color={inkColors.accent}>⚡ Background Activity:</Text>\n {dynamicInfo.backgroundActivity.map((activity, index) => (\n <Box key={index} marginLeft={2}>\n <Text color={inkColors.muted}>• {activity}</Text>\n </Box>\n ))}\n </Box>\n )}\n </Box>\n );\n}\n\n// Helper function to get active background tasks\nfunction getActiveBackgroundTasks(): string[] {\n // TODO: Integrate with actual background task monitoring\n const possibleTasks = [\n \"Indexing workspace files\",\n \"Watching for file changes\", \n \"Compacting context\",\n \"Syncing session state\",\n \"Optimizing token usage\",\n ];\n \n // Return 0-2 random tasks for demo\n const numTasks = Math.floor(Math.random() * 3);\n return possibleTasks.slice(0, numTasks);\n}\n\n// Helper function to format time ago\nfunction formatTimeAgo(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n \n if (seconds < 60) return `${seconds}s ago`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ago`;\n if (seconds < 86400) return `${Math.floor(seconds / 3600)}h ago`;\n return `${Math.floor(seconds / 86400)}d ago`;\n}","import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport pkg from '../../../package.json' with { type: 'json' };\nimport { inkColors } from \"../colors.js\";\nimport { ContextStatus } from \"./context-status.js\";\n\n// Enhanced X CLI ASCII art with color scheme\nexport const xcliBanner = `\n██ ██ ██████ ██ ██ \n ██ ██ ██ ██ ██ \n ███ ██ ██ ██ \n ██ ██ ██ ██ ██ \n██ ██ ██████ ███████ ██ \n`;\n\n// Logo-based banner (simplified for terminal)\nexport const xcliLogo = `\n ⭕ X CLI ⭕\n 🔴🟡🟢🔵 v{VERSION}\n`;\n\n// Alternative minimal banner for --quiet mode\nexport const xcliMini = `\n▄ ▄ ▄▄▄▄▄▄ ▄ ▄\n██ ██ ██ ██ ██ \n ███ ██ ██ ██ \n██ ██ ██████ ██ ██ \n`;\n\n// Retro style banner\nexport const xcliRetro = `\n╔═══════════════════════════════════════════════════════╗\n║ ▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄ ▄ ▄ ▄▄▄▄▄ ▄ ▄ ║\n║ ██ ██ █ ██ █ ██ ██ ██ ██ ██ ║\n║ ██ ▄▄▄ ██▄▄▄█ ██ █ ████ ██ ██ ██ ║\n║ ██ ██ ██ ██ ██ █ ██ ██ ██ ██ ██ ║\n║ ▀▀▀▀▀ ▀▀ ▀▀ ▀▀▀▀▀▀ ▀▀ ▀▀ ▀▀▀▀▀ ▀▀▀▀▀ ▀▀ ║\n╚═══════════════════════════════════════════════════════╝\n`;\n\ninterface BannerProps {\n style?: 'default' | 'mini' | 'retro';\n showContext?: boolean;\n workspaceFiles?: number;\n indexSize?: string;\n sessionRestored?: boolean;\n asciiArt?: string;\n}\n\nexport function Banner({ \n style = 'default', \n showContext = true,\n workspaceFiles = 0,\n indexSize = '0 MB',\n sessionRestored = false \n}: BannerProps) {\n const getBannerArt = () => {\n switch (style) {\n case 'mini': return xcliMini;\n case 'retro': return xcliRetro;\n default: return xcliBanner;\n }\n };\n\n const getContextStatus = () => {\n if (!showContext) return null;\n \n return (\n <Box marginTop={1}>\n <Text color={inkColors.muted}>Context: </Text>\n <ContextStatus\n workspaceFiles={workspaceFiles}\n indexSize={indexSize}\n sessionRestored={sessionRestored}\n showDetails={false}\n />\n <Text color={inkColors.muted}> · Press </Text>\n <Text color={inkColors.accent} bold>Ctrl+I</Text>\n <Text color={inkColors.muted}> for details</Text>\n </Box>\n );\n };\n\n return (\n <Box flexDirection=\"column\" marginBottom={2}>\n {/* ASCII Art Banner */}\n <Text color={inkColors.accentBright}>\n {getBannerArt()}\n </Text>\n \n {/* Welcome Message */}\n <Box marginTop={1}>\n <Text color={inkColors.muted}>Welcome to </Text>\n <Text color={inkColors.primary} bold>X CLI</Text>\n <Text color={inkColors.muted}> </Text>\n <Text color={inkColors.warning}>v{pkg.version}</Text>\n <Text color={inkColors.muted}> ⚡</Text>\n </Box>\n \n {/* Claude Code-level Intelligence tagline */}\n <Box marginTop={1}>\n <Text color={inkColors.success} bold>\n 🚀 Claude Code-level intelligence in your terminal!\n </Text>\n </Box>\n \n {/* Context Status Banner */}\n {getContextStatus()}\n \n {/* Ready indicator with pulsing effect simulation */}\n <Box marginTop={1}>\n <Text color={inkColors.successBright}>✔ Ready.</Text>\n <Text color={inkColors.muted}> Type your first command or paste code to begin.</Text>\n </Box>\n </Box>\n );\n}\n\n// Helper function for showing different banner styles\nexport function showBanner(options?: {\n style?: 'default' | 'mini' | 'retro';\n quiet?: boolean;\n workspaceFiles?: number;\n indexSize?: string;\n sessionRestored?: boolean;\n}) {\n const { style = 'default', quiet = false, ...contextProps } = options || {};\n \n if (quiet) {\n return (\n <Box>\n <Text color={inkColors.primary} bold>X CLI</Text>\n <Text color={inkColors.muted}> v{pkg.version} ready ⚡</Text>\n </Box>\n );\n }\n \n return <Banner style={style} showContext={true} {...contextProps} />;\n}\n\n// Secret easter egg banner for x-cli --ascii\nexport const easterEggBanner = `\n${`\n ██████╗ ██████╗ ██████╗ ██╗ ██╗ ██████╗██╗ ██╗\n ██╔════╝ ██╔══██╗██╔═══██╗██║ ██╔╝ ██╔════╝██║ ██║\n ██║ ███╗██████╔╝██║ ██║█████╔╝ ██║ ██║ ██║\n ██║ ██║██╔══██╗██║ ██║██╔═██╗ ██║ ██║ ██║\n ╚██████╔╝██║ ██║╚██████╔╝██║ ██╗ ╚██████╗███████╗██║\n ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝╚══════╝╚═╝\n`}\n 🌟 \"Code at the speed of thought\" 🌟\n`;\n\nexport function EasterEggBanner() {\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Text color=\"rainbow\">{easterEggBanner}</Text>\n <Text color=\"gray\" italic>You found the secret banner! 🎉</Text>\n </Box>\n );\n}","import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { inkColors } from \"../colors.js\";\nimport { useContextInfo } from \"../../hooks/use-context-info.js\";\n\ninterface ContextTooltipProps {\n isVisible: boolean;\n onToggle?: () => void;\n}\n\nexport function ContextTooltip({ isVisible }: ContextTooltipProps) {\n const { contextInfo } = useContextInfo();\n\n // Note: Keyboard handling for Ctrl+I is managed by parent component\n\n if (!isVisible) return null;\n\n return (\n <Box\n borderStyle=\"round\"\n borderColor={inkColors.accent}\n padding={1}\n marginTop={1}\n marginBottom={1}\n flexDirection=\"column\"\n >\n <Box marginBottom={1}>\n <Text color={inkColors.accent} bold>\n 🧠 Context Awareness\n </Text>\n <Text color={inkColors.muted}>\n {\" \"}(Ctrl+I to toggle)\n </Text>\n </Box>\n\n <Box flexDirection=\"column\">\n {/* Project Information */}\n <Box marginBottom={1}>\n <Text color={inkColors.primary} bold>\n 📁 Project: \n </Text>\n <Text color={inkColors.text}>\n {\" \"}{contextInfo.projectName || \"Unknown\"}\n </Text>\n {contextInfo.gitBranch && (\n <>\n <Text color={inkColors.muted}> on </Text>\n <Text color={inkColors.warning}>\n {contextInfo.gitBranch}\n </Text>\n </>\n )}\n </Box>\n\n {/* Workspace Stats */}\n <Box justifyContent=\"space-between\" marginBottom={1}>\n <Box>\n <Text color={inkColors.success}>📊 Workspace:</Text>\n <Text color={inkColors.text}>\n {\" \"}{contextInfo.workspaceFiles} files\n </Text>\n </Box>\n <Box>\n <Text color={inkColors.success}>💾 Index:</Text>\n <Text color={inkColors.text}>\n {\" \"}{contextInfo.indexSize}\n </Text>\n </Box>\n </Box>\n\n {/* Session Information */}\n <Box justifyContent=\"space-between\" marginBottom={1}>\n <Box>\n <Text color={inkColors.warning}>📝 Session:</Text>\n <Text color={inkColors.text}>\n {\" \"}{contextInfo.sessionFiles} files\n </Text>\n </Box>\n <Box>\n <Text color={inkColors.warning}>🔤 Tokens:</Text>\n <Text color={inkColors.text}>\n {\" \"}{contextInfo.activeTokens.toLocaleString()}\n </Text>\n </Box>\n </Box>\n\n {/* Real-time Activity */}\n <Box>\n <Text color={inkColors.accent}>⚡ Activity:</Text>\n <Text color={inkColors.text}>\n {\" \"}{contextInfo.lastActivity}\n </Text>\n </Box>\n </Box>\n\n <Box marginTop={1}>\n <Text color={inkColors.muted} dimColor>\n 💡 This shows your current workspace context and session state\n </Text>\n </Box>\n </Box>\n );\n}\n\n","import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { ChatEntry } from \"../../../agent/grok-agent.js\";\n\ninterface UserMessageEntryProps {\n entry: ChatEntry;\n verbosityLevel: 'quiet' | 'normal' | 'verbose';\n}\n\n// Helper to truncate content in compact mode\nconst truncateContent = (content: string, maxLength: number = 100): string => {\n if (process.env.COMPACT !== '1') return content;\n return content.length > maxLength ? content.substring(0, maxLength) + '...' : content;\n};\n\nexport function UserMessageEntry({ entry, verbosityLevel: _verbosityLevel }: UserMessageEntryProps) {\n const displayText = entry.isPasteSummary ? entry.displayContent || entry.content : entry.content;\n const textColor = entry.isPasteSummary ? \"cyan\" : \"gray\";\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box>\n <Text color={textColor}>\n {\">\"} {truncateContent(displayText)}\n </Text>\n </Box>\n </Box>\n );\n}","import React from 'react';\nimport { Text } from 'ink';\nimport { marked } from 'marked';\nimport TerminalRenderer from 'marked-terminal';\n\n// Configure marked to use the terminal renderer with default settings\nmarked.setOptions({\n renderer: new (TerminalRenderer as any)()\n});\n\nexport function MarkdownRenderer({ content }: { content: string }) {\n try {\n // Use marked.parse for synchronous parsing\n const result = marked.parse(content);\n // Handle both sync and async results\n const rendered = typeof result === 'string' ? result : content;\n return <Text>{rendered}</Text>;\n } catch (error) {\n // Fallback to plain text if markdown parsing fails\n console.error('Markdown rendering error:', error);\n return <Text>{content}</Text>;\n }\n}","import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { ChatEntry } from \"../../../agent/grok-agent.js\";\nimport { MarkdownRenderer } from \"../../utils/markdown-renderer.js\";\n\ninterface AssistantMessageEntryProps {\n entry: ChatEntry;\n verbosityLevel: 'quiet' | 'normal' | 'verbose';\n}\n\n// Helper to handle very long content that might cause rendering issues\nconst handleLongContent = (content: string, maxLength: number = 5000): { content: string; isTruncated: boolean } => {\n if (content.length <= maxLength) {\n return { content, isTruncated: false };\n }\n\n // For very long content, truncate and provide a summary\n const truncated = content.substring(0, maxLength);\n const summary = `\\n\\n[Content truncated - ${content.length - maxLength} characters remaining. Full content available in chat history.]`;\n\n return {\n content: truncated + summary,\n isTruncated: true\n };\n};\n\nexport function AssistantMessageEntry({ entry, verbosityLevel: _verbosityLevel }: AssistantMessageEntryProps) {\n // Handle very long content to prevent rendering issues\n const { content: processedContent, isTruncated } = handleLongContent(entry.content);\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" alignItems=\"flex-start\">\n <Text color=\"white\">⏺ </Text>\n <Box flexDirection=\"column\" flexGrow={1}>\n {entry.toolCalls ? (\n // If there are tool calls, just show plain text\n <Text color=\"white\">{processedContent.trim()}</Text>\n ) : (\n // If no tool calls, render as markdown\n <MarkdownRenderer content={processedContent.trim()} />\n )}\n {entry.isStreaming && <Text color=\"cyan\">█</Text>}\n {isTruncated && (\n <Text color=\"yellow\" italic>\n [Response truncated for performance - full content in session log]\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n );\n}","/**\n * Color constants for the CLI interface\n */\nexport const Colors = {\n AccentYellow: 'yellow',\n Gray: 'gray',\n Red: 'red',\n Green: 'green',\n Blue: 'blue',\n Cyan: 'cyan',\n Magenta: 'magenta',\n White: 'white',\n Black: 'black'\n} as const;","import React from 'react';\nimport { Box } from 'ink';\n\ninterface MaxSizedBoxProps {\n maxHeight?: number;\n maxWidth?: number;\n children: React.ReactNode;\n}\n\nexport const MaxSizedBox: React.FC<MaxSizedBoxProps> = ({\n maxHeight: _maxHeight,\n maxWidth: _maxWidth,\n children,\n ...props\n}) => {\n return (\n <Box \n flexDirection=\"column\"\n {...props}\n >\n {children}\n </Box>\n );\n};","/**\n * Professional diff renderer component\n */\n\nimport React from 'react';\nimport { Box, Text } from 'ink';\nimport { Colors } from '../utils/colors.js';\nimport crypto from 'crypto';\n// import { colorizeCode } from '../utils/code-colorizer.js';\nimport { MaxSizedBox } from '../shared/max-sized-box.js';\n\ninterface DiffLine {\n type: 'add' | 'del' | 'context' | 'hunk' | 'other';\n oldLine?: number;\n newLine?: number;\n content: string;\n}\n\nfunction parseDiffWithLineNumbers(diffContent: string): DiffLine[] {\n const lines = diffContent.split('\\n');\n const result: DiffLine[] = [];\n let currentOldLine = 0;\n let currentNewLine = 0;\n let inHunk = false;\n const hunkHeaderRegex = /^@@ -(\\d+),?\\d* \\+(\\d+),?\\d* @@/;\n\n for (const line of lines) {\n const hunkMatch = line.match(hunkHeaderRegex);\n if (hunkMatch) {\n currentOldLine = parseInt(hunkMatch[1], 10);\n currentNewLine = parseInt(hunkMatch[2], 10);\n inHunk = true;\n result.push({ type: 'hunk', content: line });\n // We need to adjust the starting point because the first line number applies to the *first* actual line change/context,\n // but we increment *before* pushing that line. So decrement here.\n currentOldLine--;\n currentNewLine--;\n continue;\n }\n if (!inHunk) {\n // Skip standard Git header lines more robustly\n if (\n line.startsWith('--- ') ||\n line.startsWith('+++ ') ||\n line.startsWith('diff --git') ||\n line.startsWith('index ') ||\n line.startsWith('similarity index') ||\n line.startsWith('rename from') ||\n line.startsWith('rename to') ||\n line.startsWith('new file mode') ||\n line.startsWith('deleted file mode')\n )\n continue;\n // If it's not a hunk or header, skip (or handle as 'other' if needed)\n continue;\n }\n if (line.startsWith('+')) {\n currentNewLine++; // Increment before pushing\n result.push({\n type: 'add',\n newLine: currentNewLine,\n content: line.substring(1),\n });\n } else if (line.startsWith('-')) {\n currentOldLine++; // Increment before pushing\n result.push({\n type: 'del',\n oldLine: currentOldLine,\n content: line.substring(1),\n });\n } else if (line.startsWith(' ')) {\n currentOldLine++; // Increment before pushing\n currentNewLine++;\n result.push({\n type: 'context',\n oldLine: currentOldLine,\n newLine: currentNewLine,\n content: line.substring(1),\n });\n } else if (line.startsWith('\\\\')) {\n // Handle \"\\"\n result.push({ type: 'other', content: line });\n }\n }\n return result;\n}\n\ninterface DiffRendererProps {\n diffContent: string;\n filename?: string;\n tabWidth?: number;\n availableTerminalHeight?: number;\n terminalWidth?: number;\n}\n\nconst DEFAULT_TAB_WIDTH = 4; // Spaces per tab for normalization\n\nexport const DiffRenderer = ({\n diffContent,\n filename,\n tabWidth = DEFAULT_TAB_WIDTH,\n availableTerminalHeight,\n terminalWidth = 80,\n}: DiffRendererProps): React.ReactElement => {\n if (!diffContent || typeof diffContent !== 'string') {\n return <Text color={Colors.AccentYellow}>No diff content.</Text>;\n }\n\n // Strip the first summary line (e.g. \"Updated file.txt with 1 addition and 2 removals\")\n const lines = diffContent.split('\\n');\n const firstLine = lines[0];\n let actualDiffContent = diffContent;\n \n if (firstLine && (firstLine.startsWith('Updated ') || firstLine.startsWith('Created '))) {\n actualDiffContent = lines.slice(1).join('\\n');\n }\n \n const parsedLines = parseDiffWithLineNumbers(actualDiffContent);\n\n if (parsedLines.length === 0) {\n return <Text dimColor>No changes detected.</Text>;\n }\n\n // Always render as diff format to show line numbers and + signs\n const renderedOutput = renderDiffContent(\n parsedLines,\n filename,\n tabWidth,\n availableTerminalHeight,\n terminalWidth,\n );\n\n return <>{renderedOutput}</>;\n};\n\nconst renderDiffContent = (\n parsedLines: DiffLine[],\n filename: string | undefined,\n tabWidth = DEFAULT_TAB_WIDTH,\n availableTerminalHeight: number | undefined,\n terminalWidth: number,\n) => {\n // 1. Normalize whitespace (replace tabs with spaces) *before* further processing\n const normalizedLines = parsedLines.map((line) => ({\n ...line,\n content: line.content.replace(/\\t/g, ' '.repeat(tabWidth)),\n }));\n\n // Filter out non-displayable lines (hunks, potentially 'other') using the normalized list\n const displayableLines = normalizedLines.filter(\n (l) => l.type !== 'hunk' && l.type !== 'other',\n );\n\n if (displayableLines.length === 0) {\n return <Text dimColor>No changes detected.</Text>;\n }\n\n // Calculate the minimum indentation across all displayable lines\n let baseIndentation = Infinity; // Start high to find the minimum\n for (const line of displayableLines) {\n // Only consider lines with actual content for indentation calculation\n if (line.content.trim() === '') continue;\n\n const firstCharIndex = line.content.search(/\\S/); // Find index of first non-whitespace char\n const currentIndent = firstCharIndex === -1 ? 0 : firstCharIndex; // Indent is 0 if no non-whitespace found\n baseIndentation = Math.min(baseIndentation, currentIndent);\n }\n // If baseIndentation remained Infinity (e.g., no displayable lines with content), default to 0\n if (!isFinite(baseIndentation)) {\n baseIndentation = 0;\n }\n\n const key = filename\n ? `diff-box-${filename}`\n : `diff-box-${crypto.createHash('sha1').update(JSON.stringify(parsedLines)).digest('hex')}`;\n\n let lastLineNumber: number | null = null;\n const MAX_CONTEXT_LINES_WITHOUT_GAP = 5;\n\n return (\n <MaxSizedBox\n maxHeight={availableTerminalHeight}\n maxWidth={terminalWidth}\n key={key}\n >\n {displayableLines.reduce<React.ReactNode[]>((acc, line, index) => {\n // Determine the relevant line number for gap calculation based on type\n let relevantLineNumberForGapCalc: number | null = null;\n if (line.type === 'add' || line.type === 'context') {\n relevantLineNumberForGapCalc = line.newLine ?? null;\n } else if (line.type === 'del') {\n // For deletions, the gap is typically in relation to the original file's line numbering\n relevantLineNumberForGapCalc = line.oldLine ?? null;\n }\n\n if (\n lastLineNumber !== null &&\n relevantLineNumberForGapCalc !== null &&\n relevantLineNumberForGapCalc >\n lastLineNumber + MAX_CONTEXT_LINES_WITHOUT_GAP + 1\n ) {\n acc.push(\n <Box key={`gap-${index}`}>\n <Text wrap=\"truncate\">{'═'.repeat(terminalWidth)}</Text>\n </Box>,\n );\n }\n\n const lineKey = `diff-line-${index}`;\n let gutterNumStr = '';\n let backgroundColor: string | undefined = undefined;\n let prefixSymbol = ' ';\n let dim = false;\n\n switch (line.type) {\n case 'add':\n gutterNumStr = (line.newLine ?? '').toString();\n backgroundColor = '#86efac'; // Light green for additions\n prefixSymbol = '+';\n lastLineNumber = line.newLine ?? null;\n break;\n case 'del':\n gutterNumStr = (line.oldLine ?? '').toString();\n backgroundColor = 'redBright'; // Light red for deletions\n prefixSymbol = '-';\n // For deletions, update lastLineNumber based on oldLine if it's advancing.\n // This helps manage gaps correctly if there are multiple consecutive deletions\n // or if a deletion is followed by a context line far away in the original file.\n if (line.oldLine !== undefined) {\n lastLineNumber = line.oldLine;\n }\n break;\n case 'context':\n gutterNumStr = (line.newLine ?? '').toString();\n dim = true;\n prefixSymbol = ' ';\n lastLineNumber = line.newLine ?? null;\n break;\n default:\n return acc;\n }\n\n const displayContent = line.content.substring(baseIndentation);\n\n acc.push(\n <Box key={lineKey} flexDirection=\"row\">\n <Text color={Colors.Gray} dimColor={dim}>{gutterNumStr.padEnd(4)}</Text>\n <Text color={backgroundColor ? '#000000' : undefined} backgroundColor={backgroundColor} dimColor={!backgroundColor && dim}>{prefixSymbol} </Text>\n <Text color={backgroundColor ? '#000000' : undefined} backgroundColor={backgroundColor} dimColor={!backgroundColor && dim} wrap=\"wrap\">\n {displayContent}\n </Text>\n </Box>,\n );\n return acc;\n }, [])}\n </MaxSizedBox>\n );\n};\n\n\n// const getLanguageFromExtension = (extension: string): string | null => {\n// const languageMap: { [key: string]: string } = {\n// js: 'javascript',\n// ts: 'typescript',\n// py: 'python',\n// json: 'json',\n// css: 'css',\n// html: 'html',\n// sh: 'bash',\n// md: 'markdown',\n// yaml: 'yaml',\n// yml: 'yaml',\n// txt: 'plaintext',\n// java: 'java',\n// c: 'c',\n// cpp: 'cpp',\n// rb: 'ruby',\n// };\n// return languageMap[extension] || null; // Return null if extension not found\n// };","import React from \"react\";\nimport { Box, Text } from \"ink\";\n\ninterface FileContentRendererProps {\n content: string;\n}\n\nexport function FileContentRenderer({ content }: FileContentRendererProps) {\n const lines = content.split(\"\\n\");\n\n // Calculate minimum indentation like DiffRenderer does\n let baseIndentation = Infinity;\n for (const line of lines) {\n if (line.trim() === \"\") continue;\n const firstCharIndex = line.search(/\\S/);\n const currentIndent = firstCharIndex === -1 ? 0 : firstCharIndex;\n baseIndentation = Math.min(baseIndentation, currentIndent);\n }\n if (!isFinite(baseIndentation)) {\n baseIndentation = 0;\n }\n\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n const displayContent = line.substring(baseIndentation);\n return (\n <Text key={index} color=\"gray\">\n {displayContent}\n </Text>\n );\n })}\n </Box>\n );\n}","import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { ChatEntry } from \"../../../agent/grok-agent.js\";\nimport { DiffRenderer } from \"../diff-renderer.js\";\nimport { FileContentRenderer } from \"../content-renderers/file-content-renderer.js\";\n\ninterface ToolCallEntryProps {\n entry: ChatEntry;\n verbosityLevel: 'quiet' | 'normal' | 'verbose';\n explainLevel: 'off' | 'brief' | 'detailed';\n}\n\n// Helper to truncate content in compact mode\nconst truncateContent = (content: string, maxLength: number = 100): string => {\n if (process.env.COMPACT !== '1') return content;\n return content.length > maxLength ? content.substring(0, maxLength) + '...' : content;\n};\n\nexport function ToolCallEntry({ entry, verbosityLevel, explainLevel }: ToolCallEntryProps) {\n // Generate explanations for operations\n const getExplanation = (toolName: string, filePath: string, _isExecuting: boolean) => {\n if (explainLevel === 'off') return null;\n\n const explanations = {\n view_file: {\n brief: `Reading ${filePath} to examine its contents`,\n detailed: `Reading the file ${filePath} to examine its current contents, structure, and implementation details for analysis or modification.`\n },\n str_replace_editor: {\n brief: `Updating ${filePath} with changes`,\n detailed: `Applying targeted modifications to ${filePath} using precise string replacement to update specific code sections while preserving the rest of the file structure.`\n },\n create_file: {\n brief: `Creating new file ${filePath}`,\n detailed: `Creating a new file at ${filePath} with the specified content, establishing the initial structure and implementation for this component or module.`\n },\n bash: {\n brief: `Executing command: ${filePath}`,\n detailed: `Running the shell command \"${filePath}\" to perform system operations, file management, or external tool execution as requested.`\n },\n search: {\n brief: `Searching for: ${filePath}`,\n detailed: `Performing a comprehensive search across the codebase for \"${filePath}\" to locate relevant files, functions, or code patterns that match the query.`\n }\n };\n\n const explanation = explanations[toolName as keyof typeof explanations];\n if (!explanation) return null;\n\n return explainLevel === 'detailed' ? explanation.detailed : explanation.brief;\n };\n\n\n\n const getToolActionName = (toolName: string) => {\n // Handle MCP tools with mcp__servername__toolname format\n if (toolName.startsWith(\"mcp__\")) {\n const parts = toolName.split(\"__\");\n if (parts.length >= 3) {\n const serverName = parts[1];\n const actualToolName = parts.slice(2).join(\"__\");\n return `${serverName.charAt(0).toUpperCase() + serverName.slice(1)}(${actualToolName.replace(/_/g, \" \")})`;\n }\n }\n\n switch (toolName) {\n case \"view_file\":\n return \"Read\";\n case \"str_replace_editor\":\n return \"Update\";\n case \"create_file\":\n return \"Create\";\n case \"bash\":\n return \"Bash\";\n case \"search\":\n return \"Search\";\n case \"create_todo_list\":\n return \"Created Todo\";\n case \"update_todo_list\":\n return \"Updated Todo\";\n default:\n return \"Tool\";\n }\n };\n\n const toolName = entry.toolCall?.function?.name || \"unknown\";\n const actionName = getToolActionName(toolName);\n\n const getFilePath = (toolCall: any) => {\n if (toolCall?.function?.arguments) {\n try {\n const args = JSON.parse(toolCall.function.arguments);\n if (toolCall.function.name === \"search\") {\n return args.query;\n }\n return args.path || args.file_path || args.command || \"\";\n } catch {\n return \"\";\n }\n }\n return \"\";\n };\n\n const filePath = getFilePath(entry.toolCall);\n const isExecuting = entry.type === \"tool_call\" || !entry.toolResult;\n\n // Format JSON content for better readability\n const formatToolContent = (content: string, toolName: string) => {\n const truncated = truncateContent(content, 200); // Allow longer for tools\n if (toolName.startsWith(\"mcp__\")) {\n try {\n // Try to parse as JSON and format it\n const parsed = JSON.parse(truncated);\n if (Array.isArray(parsed)) {\n // For arrays, show a summary instead of full JSON\n return `Found ${parsed.length} items`;\n } else if (typeof parsed === 'object') {\n // For objects, show a formatted version\n return JSON.stringify(parsed, null, 2);\n }\n } catch {\n // If not JSON, return as is\n return truncated;\n }\n }\n return truncated;\n };\n\n const shouldShowDiff =\n entry.toolCall?.function?.name === \"str_replace_editor\" &&\n entry.toolResult?.success &&\n entry.content.includes(\"Updated\") &&\n entry.content.includes(\"---\") &&\n entry.content.includes(\"+++\");\n\n const shouldShowFileContent =\n (entry.toolCall?.function?.name === \"view_file\" ||\n entry.toolCall?.function?.name === \"create_file\") &&\n entry.toolResult?.success &&\n !shouldShowDiff;\n\n // Verbosity-based content filtering\n const shouldShowToolContent = verbosityLevel !== 'quiet';\n const shouldShowFullContent = verbosityLevel === 'normal' || verbosityLevel === 'verbose';\n\n const explanation = getExplanation(toolName, filePath, isExecuting);\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box>\n <Text color=\"magenta\">⏺</Text>\n <Text color=\"white\">\n {\" \"}\n {filePath ? `${actionName}(${filePath})` : actionName}\n </Text>\n </Box>\n {explanation && (\n <Box marginLeft={2}>\n <Text color=\"blue\" italic>\n 💡 {explanation}\n </Text>\n </Box>\n )}\n {shouldShowToolContent && (\n <Box marginLeft={2} flexDirection=\"column\">\n {isExecuting ? (\n <Text color=\"cyan\">⎿ Executing...</Text>\n ) : shouldShowFileContent && shouldShowFullContent ? (\n <Box flexDirection=\"column\">\n <Text color=\"gray\">⎿ File contents:</Text>\n <Box marginLeft={2} flexDirection=\"column\">\n <FileContentRenderer content={entry.content} />\n </Box>\n </Box>\n ) : shouldShowDiff && shouldShowFullContent ? (\n // For diff results, show only the summary line, not the raw content\n <Text color=\"gray\">⎿ {entry.content.split(\"\\n\")[0]}</Text>\n ) : !shouldShowFullContent ? (\n <Text color=\"gray\">⎿ Completed</Text>\n ) : (\n <Text color=\"gray\">⎿ {formatToolContent(entry.content, toolName)}</Text>\n )}\n </Box>\n )}\n {shouldShowDiff && !isExecuting && shouldShowFullContent && (\n <Box marginLeft={4} flexDirection=\"column\">\n <DiffRenderer\n diffContent={entry.content}\n filename={filePath}\n terminalWidth={80}\n />\n </Box>\n )}\n </Box>\n );\n}","import React from \"react\";\nimport { ChatEntry } from \"../../agent/grok-agent.js\";\nimport { UserMessageEntry } from \"./chat-entries/user-message-entry.js\";\nimport { AssistantMessageEntry } from \"./chat-entries/assistant-message-entry.js\";\nimport { ToolCallEntry } from \"./chat-entries/tool-call-entry.js\";\n\ninterface ChatEntryRouterProps {\n entry: ChatEntry;\n verbosityLevel: 'quiet' | 'normal' | 'verbose';\n explainLevel: 'off' | 'brief' | 'detailed';\n}\n\nexport function ChatEntryRouter({ entry, verbosityLevel, explainLevel }: ChatEntryRouterProps) {\n switch (entry.type) {\n case \"user\":\n return <UserMessageEntry entry={entry} verbosityLevel={verbosityLevel} />;\n\n case \"assistant\":\n return <AssistantMessageEntry entry={entry} verbosityLevel={verbosityLevel} />;\n\n case \"tool_call\":\n case \"tool_result\":\n return <ToolCallEntry entry={entry} verbosityLevel={verbosityLevel} explainLevel={explainLevel} />;\n\n default:\n return null;\n }\n}","import React from \"react\";\nimport { Box } from \"ink\";\nimport { ChatEntry } from \"../../agent/grok-agent.js\";\nimport { ChatEntryRouter } from \"./chat-entry-router.js\";\n\ninterface ChatHistoryProps {\n entries: ChatEntry[];\n isConfirmationActive?: boolean;\n verbosityLevel?: 'quiet' | 'normal' | 'verbose';\n explainLevel?: 'off' | 'brief' | 'detailed';\n}\n\n// These helpers are now in the individual entry components where they're used\n\n// Memoized ChatEntry component to prevent unnecessary re-renders\nconst MemoizedChatEntry = React.memo(\n ({ entry, verbosityLevel, explainLevel }: { entry: ChatEntry; verbosityLevel: 'quiet' | 'normal' | 'verbose'; explainLevel: 'off' | 'brief' | 'detailed' }) => {\n return <ChatEntryRouter entry={entry} verbosityLevel={verbosityLevel} explainLevel={explainLevel} />;\n }\n);\n\nMemoizedChatEntry.displayName = \"MemoizedChatEntry\";\n\nexport function ChatHistory({\n entries,\n isConfirmationActive = false,\n verbosityLevel = 'quiet',\n explainLevel = 'brief',\n}: ChatHistoryProps) {\n // Filter out tool_call entries with \"Executing...\" when confirmation is active\n const filteredEntries = isConfirmationActive\n ? entries.filter(\n (entry) =>\n !(entry.type === \"tool_call\" && entry.content === \"Executing...\")\n )\n : entries;\n\n // Compact mode: show fewer entries to reduce rendering overhead\n const maxEntries = process.env.COMPACT === '1' ? 5 : 20;\n\n return (\n <Box flexDirection=\"column\">\n {filteredEntries.slice(-maxEntries).map((entry, index) => (\n <MemoizedChatEntry\n key={`${entry.timestamp.getTime()}-${index}`}\n entry={entry}\n verbosityLevel={verbosityLevel}\n explainLevel={explainLevel}\n />\n ))}\n </Box>\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { formatTokenCount } from \"../../utils/token-counter.js\";\nimport { inkColors, getSpinnerColor } from \"../colors.js\";\n\ninterface LoadingSpinnerProps {\n isActive: boolean;\n processingTime: number;\n tokenCount: number;\n operation?: 'thinking' | 'search' | 'indexing' | 'write' | 'edit' | 'compact' | 'analyze' | 'process';\n message?: string;\n progress?: number; // 0-100 percentage\n}\n\n// Contextual operation messages and icons\nconst operationConfig = {\n thinking: {\n icon: '🧠',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Thinking...', 'Processing...', 'Analyzing...', 'Computing...', 'Reasoning...']\n },\n search: {\n icon: '🔍',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Searching...', 'Scanning files...', 'Finding matches...', 'Indexing...']\n },\n indexing: {\n icon: '📂',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Indexing workspace...', 'Building context...', 'Mapping relationships...']\n },\n write: {\n icon: '📝',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Writing file...', 'Saving changes...', 'Updating content...']\n },\n edit: {\n icon: '✏️',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Editing file...', 'Applying changes...', 'Modifying content...']\n },\n compact: {\n icon: '🔄',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Compacting context...', 'Optimizing memory...', 'Refreshing session...']\n },\n analyze: {\n icon: '🔬',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Analyzing code...', 'Understanding structure...', 'Mapping dependencies...']\n },\n process: {\n icon: '⚡',\n spinner: '⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏',\n messages: ['Processing...', 'Working...', 'Computing...', 'Executing...']\n }\n};\n\n// Fallback loading texts for variety (reserved for future use)\n// const fallbackTexts = [\n// \"Herding electrons...\",\n// \"Calibrating flux capacitors...\",\n// \"Reticulating splines...\",\n// \"Optimizing bit patterns...\",\n// \"Harmonizing frequencies...\",\n// \"Defragmenting thoughts...\",\n// \"Compiling wisdom...\",\n// \"Bootstrapping reality...\",\n// \"Caffeinating algorithms...\",\n// \"Debugging the universe...\",\n// ];\n\nexport function LoadingSpinner({\n isActive,\n processingTime,\n tokenCount,\n operation = 'thinking',\n message,\n progress,\n}: LoadingSpinnerProps) {\n const [frameIndex, setFrameIndex] = useState(0);\n const [messageIndex, setMessageIndex] = useState(0);\n\n const config = operationConfig[operation];\n const spinnerChar = config.spinner[frameIndex % config.spinner.length];\n const operationMessage = message || config.messages[messageIndex % config.messages.length];\n const color = getSpinnerColor(operation);\n\n useEffect(() => {\n if (!isActive) return;\n\n const interval = setInterval(() => {\n setFrameIndex(prev => prev + 1);\n }, 80); // ~12 FPS animation\n\n return () => clearInterval(interval);\n }, [isActive]);\n\n // Separate effect for message rotation to avoid dependency issues\n useEffect(() => {\n if (!isActive) return;\n\n const messageInterval = setInterval(() => {\n setMessageIndex(prev => prev + 1);\n }, 80 * config.spinner.length * 3); // Change message every 3 spinner cycles\n\n return () => clearInterval(messageInterval);\n }, [isActive, config.spinner.length]);\n\n if (!isActive) return null;\n\n // Generate progress bar if progress is provided\n const renderProgressBar = () => {\n if (progress === undefined) return null;\n \n const barLength = 20;\n const filled = Math.round((progress / 100) * barLength);\n const empty = barLength - filled;\n const progressBar = '█'.repeat(filled) + '░'.repeat(empty);\n \n return (\n <Text color={inkColors.muted}>\n {' '}[<Text color={color}>{progressBar}</Text>] {progress}%\n </Text>\n );\n };\n\n return (\n <Box marginTop={1}>\n <Box>\n <Text color={color}>\n {config.icon} {spinnerChar} {operationMessage}\n </Text>\n {renderProgressBar()}\n </Box>\n <Text color={inkColors.muted}>\n {\" \"}({processingTime}s · ↑ {formatTokenCount(tokenCount)} tokens · esc to interrupt)\n </Text>\n </Box>\n );\n}\n","/**\n * Plan Mode Indicator Component\n * \n * Visual indicator showing when plan mode is active and current phase.\n * Provides clear feedback to users about plan mode state.\n */\n\nimport React from 'react';\nimport { Box, Text } from 'ink';\nimport { PlanModePhase } from '../../types/plan-mode.js';\n\ninterface PlanModeIndicatorProps {\n /** Whether plan mode is active */\n isActive: boolean;\n /** Current plan mode phase */\n phase: PlanModePhase;\n /** Progress percentage (0-1) */\n progress: number;\n /** Session duration in milliseconds */\n sessionDuration: number;\n /** Whether to show detailed information */\n detailed?: boolean;\n}\n\nconst PHASE_DISPLAY = {\n inactive: { label: 'Inactive', color: 'gray', symbol: '○' },\n analysis: { label: 'Analyzing', color: 'blue', symbol: '🔍' },\n strategy: { label: 'Planning', color: 'yellow', symbol: '🧠' },\n presentation: { label: 'Presenting', color: 'cyan', symbol: '📋' },\n approved: { label: 'Approved', color: 'green', symbol: '✅' },\n rejected: { label: 'Rejected', color: 'red', symbol: '❌' }\n} as const;\n\nconst PHASE_DESCRIPTIONS = {\n inactive: 'Press Shift+Tab twice to enter Plan Mode',\n analysis: 'Exploring codebase and gathering insights',\n strategy: 'Formulating implementation strategy', \n presentation: 'Presenting plan for your review',\n approved: 'Plan approved - ready for execution',\n rejected: 'Plan rejected - please provide feedback'\n} as const;\n\nexport function PlanModeIndicator({\n isActive,\n phase,\n progress,\n sessionDuration,\n detailed = false\n}: PlanModeIndicatorProps) {\n const phaseInfo = PHASE_DISPLAY[phase];\n const phaseDescription = PHASE_DESCRIPTIONS[phase];\n \n // Format session duration\n const formatDuration = (ms: number) => {\n const seconds = Math.floor(ms / 1000);\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n \n if (minutes > 0) {\n return `${minutes}m ${remainingSeconds}s`;\n }\n return `${remainingSeconds}s`;\n };\n\n // Format progress bar\n const formatProgressBar = (progress: number, width: number = 20) => {\n const filled = Math.round(progress * width);\n const empty = width - filled;\n return '█'.repeat(filled) + '░'.repeat(empty);\n };\n\n if (!isActive) {\n return detailed ? (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" padding={1}>\n <Box flexDirection=\"row\" alignItems=\"center\">\n <Text color=\"gray\">{phaseInfo.symbol}</Text>\n <Box marginLeft={1}>\n <Text color=\"gray\" bold>Plan Mode: {phaseInfo.label}</Text>\n </Box>\n </Box>\n <Box marginTop={1}>\n <Text color=\"gray\" dimColor>\n {phaseDescription}\n </Text>\n </Box>\n </Box>\n ) : null;\n }\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={phaseInfo.color} padding={1}>\n {/* Header with phase and status */}\n <Box flexDirection=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n <Box flexDirection=\"row\" alignItems=\"center\">\n <Text color={phaseInfo.color}>{phaseInfo.symbol}</Text>\n <Box marginLeft={1}>\n <Text color={phaseInfo.color} bold>\n Plan Mode: {phaseInfo.label}\n </Text>\n </Box>\n </Box>\n <Box flexDirection=\"row\" alignItems=\"center\">\n <Text color=\"gray\" dimColor>\n {formatDuration(sessionDuration)}\n </Text>\n </Box>\n </Box>\n\n {/* Progress bar */}\n {phase !== 'inactive' && phase !== 'approved' && phase !== 'rejected' && (\n <Box flexDirection=\"row\" alignItems=\"center\" marginTop={1}>\n <Box marginRight={1}>\n <Text color=\"gray\" dimColor>Progress:</Text>\n </Box>\n <Text color={phaseInfo.color}>\n {formatProgressBar(progress)}\n </Text>\n <Box marginLeft={1}>\n <Text color=\"gray\" dimColor>\n {Math.round(progress * 100)}%\n </Text>\n </Box>\n </Box>\n )}\n\n {/* Phase description */}\n {detailed && (\n <Box marginTop={1}>\n <Text color=\"gray\" dimColor>\n {phaseDescription}\n </Text>\n </Box>\n )}\n\n {/* Phase-specific information */}\n {detailed && phase === 'analysis' && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"blue\" dimColor>• Reading project structure</Text>\n <Text color=\"blue\" dimColor>• Analyzing dependencies</Text>\n <Text color=\"blue\" dimColor>• Identifying key components</Text>\n </Box>\n )}\n\n {detailed && phase === 'strategy' && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"yellow\" dimColor>• Evaluating implementation approaches</Text>\n <Text color=\"yellow\" dimColor>• Assessing risks and dependencies</Text>\n <Text color=\"yellow\" dimColor>• Estimating effort and timeline</Text>\n </Box>\n )}\n\n {detailed && phase === 'presentation' && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color=\"cyan\" dimColor>• Preparing implementation plan</Text>\n <Text color=\"cyan\" dimColor>• Organizing steps and dependencies</Text>\n <Text color=\"cyan\" dimColor>• Ready for your review</Text>\n </Box>\n )}\n\n {/* Action hints */}\n {!detailed && (\n <Box flexDirection=\"row\" marginTop={1}>\n <Text color=\"gray\" dimColor>\n {phase === 'presentation' && '• Press Enter to review plan'}\n {phase === 'approved' && '• Type \"execute\" to start implementation'}\n {phase === 'rejected' && '• Provide feedback to regenerate plan'}\n {(phase === 'analysis' || phase === 'strategy') && '• Plan mode is analyzing...'}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\n/**\n * Compact plan mode indicator for status bar\n */\nexport function PlanModeStatusIndicator({\n isActive,\n phase,\n progress\n}: Pick<PlanModeIndicatorProps, 'isActive' | 'phase' | 'progress'>) {\n if (!isActive) {\n return (\n <Text color=\"gray\" dimColor>\n Plan Mode: Off\n </Text>\n );\n }\n\n const phaseInfo = PHASE_DISPLAY[phase];\n \n return (\n <Box flexDirection=\"row\" alignItems=\"center\">\n <Text color={phaseInfo.color}>{phaseInfo.symbol}</Text>\n <Box marginLeft={1}>\n <Text color={phaseInfo.color}>\n Plan: {phaseInfo.label}\n </Text>\n </Box>\n {phase !== 'inactive' && phase !== 'approved' && phase !== 'rejected' && (\n <Box marginLeft={1}>\n <Text color=\"gray\" dimColor>\n ({Math.round(progress * 100)}%)\n </Text>\n </Box>\n )}\n </Box>\n );\n}","import React from \"react\";\nimport { Box, Text } from \"ink\";\n\ninterface ChatInputProps {\n input: string;\n cursorPosition: number;\n isProcessing: boolean;\n isStreaming: boolean;\n}\n\nexport function ChatInput({\n input,\n cursorPosition,\n isProcessing,\n isStreaming,\n}: ChatInputProps) {\n const beforeCursor = input.slice(0, cursorPosition);\n // afterCursor removed - not used in single line mode\n\n // Handle multiline input display\n const lines = input.split(\"\\n\");\n const isMultiline = lines.length > 1;\n\n // Calculate cursor position across lines\n let currentLineIndex = 0;\n let currentCharIndex = 0;\n let totalChars = 0;\n\n for (let i = 0; i < lines.length; i++) {\n if (totalChars + lines[i].length >= cursorPosition) {\n currentLineIndex = i;\n currentCharIndex = cursorPosition - totalChars;\n break;\n }\n totalChars += lines[i].length + 1; // +1 for newline\n }\n\n const showCursor = !isProcessing && !isStreaming;\n const borderColor = isProcessing || isStreaming ? \"yellow\" : \"blue\";\n const promptColor = \"cyan\";\n\n // Display placeholder when input is empty\n const placeholderText = \"Ask me anything...\";\n const isPlaceholder = !input;\n\n if (isMultiline) {\n return (\n <Box\n borderStyle=\"round\"\n borderColor={borderColor}\n paddingY={0}\n marginTop={1}\n >\n {lines.map((line, index) => {\n const isCurrentLine = index === currentLineIndex;\n const promptChar = index === 0 ? \"❯ \" : \" \"; // First line gets \"❯ \", continuation lines get \" \" to align\n\n if (isCurrentLine) {\n const beforeCursorInLine = line.slice(0, currentCharIndex);\n const cursorChar =\n line.slice(currentCharIndex, currentCharIndex + 1) || \" \";\n const afterCursorInLine = line.slice(currentCharIndex + 1);\n\n return (\n <Box key={index}>\n <Text color={promptColor}>{promptChar}</Text>\n <Text>\n {beforeCursorInLine}\n {showCursor && (\n <Text backgroundColor=\"white\" color=\"black\">\n {cursorChar}\n </Text>\n )}\n {!showCursor && cursorChar !== \" \" && cursorChar}\n {afterCursorInLine}\n </Text>\n </Box>\n );\n } else {\n return (\n <Box key={index}>\n <Text color={promptColor}>{promptChar}</Text>\n <Text>{line}</Text>\n </Box>\n );\n }\n })}\n </Box>\n );\n }\n\n // Single line input box\n const cursorChar = input.slice(cursorPosition, cursorPosition + 1) || \" \";\n const afterCursorText = input.slice(cursorPosition + 1);\n\n return (\n <Box\n borderStyle=\"round\"\n borderColor={borderColor}\n paddingX={1}\n paddingY={0}\n marginTop={1}\n >\n <Box>\n <Text color={promptColor}>❯ </Text>\n {isPlaceholder ? (\n <>\n <Text color=\"gray\" dimColor>\n {placeholderText}\n </Text>\n {showCursor && (\n <Text backgroundColor=\"white\" color=\"black\">\n {\" \"}\n </Text>\n )}\n </>\n ) : (\n <Text>\n {beforeCursor}\n {showCursor && (\n <Text backgroundColor=\"white\" color=\"black\">\n {cursorChar}\n </Text>\n )}\n {!showCursor && cursorChar !== \" \" && cursorChar}\n {afterCursorText}\n </Text>\n )}\n </Box>\n </Box>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { getCachedVersionInfo } from '../../utils/version-checker.js';\nimport { inkColors } from '../colors.js';\n\ninterface VersionNotificationProps {\n isVisible?: boolean;\n}\n\nexport function VersionNotification({ isVisible = true }: VersionNotificationProps): React.ReactElement | null {\n const [versionInfo, setVersionInfo] = useState<{\n isUpdateAvailable: boolean;\n current: string;\n latest: string;\n } | null>(null);\n\n useEffect(() => {\n const checkVersion = async () => {\n try {\n const info = await getCachedVersionInfo();\n if (info?.isUpdateAvailable) {\n setVersionInfo({\n isUpdateAvailable: info.isUpdateAvailable,\n current: info.current,\n latest: info.latest,\n });\n }\n } catch {\n // Silently ignore errors\n }\n };\n\n checkVersion();\n \n // Check every 6 hours\n const interval = setInterval(checkVersion, 6 * 60 * 60 * 1000);\n \n return () => clearInterval(interval);\n }, []);\n\n if (!isVisible || !versionInfo?.isUpdateAvailable) {\n return null;\n }\n\n return (\n <Box marginTop={1} marginBottom={1}>\n <Box \n borderStyle=\"round\" \n borderColor={inkColors.warning}\n paddingX={2}\n paddingY={0}\n >\n <Text color={inkColors.warning}>\n 🔄 Update available: v{versionInfo.latest} (current: v{versionInfo.current})\n </Text>\n <Text color={inkColors.muted}> - Use '/upgrade' to update</Text>\n </Box>\n </Box>\n );\n}\n\nexport default VersionNotification;","import React, { useState, useEffect } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { getMCPManager } from \"../../grok/tools.js\";\nimport { MCPTool } from \"../../mcp/client.js\";\n\ninterface MCPStatusProps {}\n\nexport function MCPStatus({}: MCPStatusProps) {\n const [connectedServers, setConnectedServers] = useState<string[]>([]);\n const [_availableTools, setAvailableTools] = useState<MCPTool[]>([]);\n\n useEffect(() => {\n const updateStatus = () => {\n try {\n const manager = getMCPManager();\n const servers = manager.getServers();\n const tools = manager.getTools();\n\n setConnectedServers(servers);\n setAvailableTools(tools);\n } catch (_error) {\n // MCP manager not initialized yet\n setConnectedServers([]);\n setAvailableTools([]);\n }\n };\n\n // Initial update with a small delay to allow MCP initialization\n const initialTimer = setTimeout(updateStatus, 2000);\n\n // Set up polling to check for status changes\n const interval = setInterval(updateStatus, 2000);\n\n return () => {\n clearTimeout(initialTimer);\n clearInterval(interval);\n };\n }, []);\n\n if (connectedServers.length === 0) {\n return null;\n }\n\n return (\n <Box marginLeft={1}>\n <Text color=\"green\">⚒ mcps: {connectedServers.length} </Text>\n </Box>\n );\n}\n","import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { inkColors } from \"../colors.js\";\n\nexport interface ContextState {\n tokenUsage: {\n current: number;\n max: number;\n percent: number;\n };\n memoryPressure: \"low\" | \"medium\" | \"high\" | \"critical\";\n loadedFiles: Array<{\n path: string;\n tokens: number;\n lastAccessed: Date;\n }>;\n messagesCount: number;\n contextHealth: \"optimal\" | \"degraded\" | \"critical\";\n fileCount: number;\n}\n\ninterface ContextIndicatorProps {\n state: ContextState;\n compact?: boolean;\n onCompactClick?: () => void;\n onClearClick?: () => void;\n}\n\nexport default function ContextIndicator({\n state,\n compact = false,\n}: ContextIndicatorProps) {\n const getTokenColor = (percent: number) => {\n if (percent >= 90) return inkColors.error;\n if (percent >= 80) return inkColors.warning;\n if (percent >= 60) return inkColors.info;\n return inkColors.success;\n };\n\n const getMemoryPressureColor = (pressure: string) => {\n switch (pressure) {\n case \"critical\":\n return inkColors.error;\n case \"high\":\n return inkColors.warning;\n case \"medium\":\n return inkColors.info;\n default:\n return inkColors.success;\n }\n };\n\n const formatTokenCount = (count: number): string => {\n if (count >= 1_000_000) {\n return `${(count / 1_000_000).toFixed(1)}M`;\n }\n if (count >= 1_000) {\n return `${(count / 1_000).toFixed(1)}k`;\n }\n return count.toString();\n };\n\n const getProgressBar = (percent: number, width: number = 20) => {\n const filled = Math.round((percent / 100) * width);\n const empty = width - filled;\n return \"█\".repeat(filled) + \"▒\".repeat(empty);\n };\n\n if (compact) {\n return (\n <Box>\n <Text color={getTokenColor(state.tokenUsage.percent)}>\n 🧠 {formatTokenCount(state.tokenUsage.current)}/\n {formatTokenCount(state.tokenUsage.max)} ({state.tokenUsage.percent}\n %)\n </Text>\n <Text color={inkColors.muted}> │ </Text>\n <Text color={inkColors.info}>\n 📁 {state.fileCount} files\n </Text>\n <Text color={inkColors.muted}> │ </Text>\n <Text color={inkColors.info}>\n 💬 {state.messagesCount} msgs\n </Text>\n {state.memoryPressure !== \"low\" && (\n <>\n <Text color={inkColors.muted}> │ </Text>\n <Text color={getMemoryPressureColor(state.memoryPressure)}>\n ⚠️ {state.memoryPressure} pressure\n </Text>\n </>\n )}\n </Box>\n );\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={\n state.contextHealth === \"critical\"\n ? \"red\"\n : state.contextHealth === \"degraded\"\n ? \"yellow\"\n : \"green\"\n }\n paddingX={1}\n paddingY={0}\n >\n {/* Header */}\n <Box justifyContent=\"space-between\">\n <Text bold color={inkColors.primary}>\n 🧠 Context Status\n </Text>\n <Text\n color={\n state.contextHealth === \"critical\"\n ? inkColors.error\n : state.contextHealth === \"degraded\"\n ? inkColors.warning\n : inkColors.success\n }\n >\n {state.contextHealth.toUpperCase()}\n </Text>\n </Box>\n\n {/* Token Usage */}\n <Box flexDirection=\"column\" marginTop={1}>\n <Box justifyContent=\"space-between\">\n <Text color={inkColors.info}>Memory Usage:</Text>\n <Text color={getTokenColor(state.tokenUsage.percent)}>\n {formatTokenCount(state.tokenUsage.current)}/\n {formatTokenCount(state.tokenUsage.max)} (\n {state.tokenUsage.percent}%)\n </Text>\n </Box>\n <Box marginTop={0}>\n <Text color={getTokenColor(state.tokenUsage.percent)}>\n {getProgressBar(state.tokenUsage.percent, 40)}\n </Text>\n </Box>\n </Box>\n\n {/* Context Details */}\n <Box justifyContent=\"space-between\" marginTop={1}>\n <Box>\n <Text color={inkColors.info}>📁 Files: </Text>\n <Text color={inkColors.accent}>{state.fileCount}</Text>\n </Box>\n <Box>\n <Text color={inkColors.info}>💬 Messages: </Text>\n <Text color={inkColors.accent}>{state.messagesCount}</Text>\n </Box>\n <Box>\n <Text color={inkColors.info}>🔥 Pressure: </Text>\n <Text color={getMemoryPressureColor(state.memoryPressure)}>\n {state.memoryPressure}\n </Text>\n </Box>\n </Box>\n\n {/* Warnings */}\n {state.tokenUsage.percent >= 80 && (\n <Box marginTop={1}>\n <Text color={inkColors.warning}>\n ⚠️ Approaching context limit. Consider using /compact or /clear\n </Text>\n </Box>\n )}\n\n {state.memoryPressure === \"critical\" && (\n <Box marginTop={1}>\n <Text color={inkColors.error}>\n 🚨 Critical memory pressure! Performance may degrade. Use /clear\n immediately.\n </Text>\n </Box>\n )}\n\n {/* Recently Loaded Files */}\n {state.loadedFiles.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={inkColors.info} bold>\n Recent Files:\n </Text>\n {state.loadedFiles.slice(0, 3).map((file, index) => (\n <Box key={index}>\n <Text color={inkColors.muted}>• </Text>\n <Text color={inkColors.accent}>{file.path}</Text>\n <Text color={inkColors.muted}>\n {\" \"}\n ({formatTokenCount(file.tokens)} tokens)\n </Text>\n </Box>\n ))}\n {state.loadedFiles.length > 3 && (\n <Text color={inkColors.muted}>\n ... and {state.loadedFiles.length - 3} more files\n </Text>\n )}\n </Box>\n )}\n\n {/* Commands Hint */}\n <Box marginTop={1}>\n <Text color={inkColors.muted}>\n 💡 Use /context for details, /compact to optimize, /clear to reset\n </Text>\n </Box>\n </Box>\n );\n}\n\n// Export types for use in other components\nexport type { ContextIndicatorProps };","import React from \"react\";\nimport { Box, Text } from \"ink\";\n\ninterface ModelOption {\n model: string;\n}\n\ninterface ModelSelectionProps {\n models: ModelOption[];\n selectedIndex: number;\n isVisible: boolean;\n currentModel: string;\n}\n\nexport function ModelSelection({\n models,\n selectedIndex,\n isVisible,\n currentModel,\n}: ModelSelectionProps) {\n if (!isVisible) return null;\n\n return (\n <Box marginTop={1} flexDirection=\"column\">\n <Box marginBottom={1}>\n <Text color=\"cyan\">Select Grok Model (current: {currentModel}):</Text>\n </Box>\n {models.map((modelOption, index) => (\n <Box key={index} paddingLeft={1}>\n <Text\n color={index === selectedIndex ? \"black\" : \"white\"}\n backgroundColor={index === selectedIndex ? \"cyan\" : undefined}\n >\n {modelOption.model}\n </Text>\n </Box>\n ))}\n <Box marginTop={1}>\n <Text color=\"gray\" dimColor>\n ↑↓ navigate • Enter/Tab select • Esc cancel\n </Text>\n </Box>\n </Box>\n );\n}","import React, { useState } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { DiffRenderer } from \"./diff-renderer.js\";\n\ninterface ConfirmationDialogProps {\n operation: string;\n filename: string;\n onConfirm: (dontAskAgain?: boolean) => void;\n onReject: (feedback?: string) => void;\n showVSCodeOpen?: boolean;\n content?: string; // Optional content to show (file content or command)\n}\n\nexport default function ConfirmationDialog({\n operation,\n filename,\n onConfirm,\n onReject,\n showVSCodeOpen = false,\n content,\n}: ConfirmationDialogProps) {\n const [selectedOption, setSelectedOption] = useState(0);\n const [feedbackMode, setFeedbackMode] = useState(false);\n const [feedback, setFeedback] = useState(\"\");\n\n const options = [\n \"Yes\",\n \"Yes, and don't ask again this session\",\n \"No\",\n \"No, with feedback\",\n ];\n\n useInput((input, key) => {\n if (feedbackMode) {\n if (key.return) {\n onReject(feedback.trim());\n return;\n }\n if (key.backspace || key.delete) {\n setFeedback((prev) => prev.slice(0, -1));\n return;\n }\n if (input && !key.ctrl && !key.meta) {\n setFeedback((prev) => prev + input);\n }\n return;\n }\n\n if (key.upArrow || (key.shift && key.tab)) {\n setSelectedOption((prev) => (prev > 0 ? prev - 1 : options.length - 1));\n return;\n }\n\n if (key.downArrow || key.tab) {\n setSelectedOption((prev) => (prev + 1) % options.length);\n return;\n }\n\n if (key.return) {\n if (selectedOption === 0) {\n onConfirm(false);\n } else if (selectedOption === 1) {\n onConfirm(true);\n } else if (selectedOption === 2) {\n onReject(\"Operation cancelled by user\");\n } else {\n setFeedbackMode(true);\n }\n return;\n }\n\n if (key.escape) {\n if (feedbackMode) {\n setFeedbackMode(false);\n setFeedback(\"\");\n } else {\n // Cancel the confirmation when escape is pressed from main confirmation\n onReject(\"Operation cancelled by user (pressed Escape)\");\n }\n return;\n }\n });\n\n if (feedbackMode) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color=\"gray\">\n Type your feedback and press Enter, or press Escape to go back.\n </Text>\n </Box>\n\n <Box\n borderStyle=\"round\"\n borderColor=\"yellow\"\n paddingX={1}\n marginTop={1}\n >\n <Text color=\"gray\">❯ </Text>\n <Text>\n {feedback}\n <Text color=\"white\">█</Text>\n </Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n {/* Tool use header - styled like chat history */}\n <Box marginTop={1}>\n <Box>\n <Text color=\"magenta\">⏺</Text>\n <Text color=\"white\">\n {\" \"}\n {operation}({filename})\n </Text>\n </Box>\n </Box>\n\n <Box marginLeft={2} flexDirection=\"column\">\n <Text color=\"gray\">⎿ Requesting user confirmation</Text>\n\n {showVSCodeOpen && (\n <Box marginTop={1}>\n <Text color=\"gray\">⎿ Opened changes in Visual Studio Code ⧉</Text>\n </Box>\n )}\n\n {/* Show content preview if provided */}\n {content && (\n <>\n <Text color=\"gray\">⎿ {content.split('\\n')[0]}</Text>\n <Box marginLeft={4} flexDirection=\"column\">\n <DiffRenderer\n diffContent={content}\n filename={filename}\n terminalWidth={80}\n />\n </Box>\n </>\n )}\n </Box>\n\n {/* Confirmation options */}\n <Box flexDirection=\"column\" marginTop={1}>\n <Box marginBottom={1}>\n <Text>Do you want to proceed with this operation?</Text>\n </Box>\n\n <Box flexDirection=\"column\">\n {options.map((option, index) => (\n <Box key={index} paddingLeft={1}>\n <Text\n color={selectedOption === index ? \"black\" : \"white\"}\n backgroundColor={selectedOption === index ? \"cyan\" : undefined}\n >\n {index + 1}. {option}\n </Text>\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text color=\"gray\" dimColor>\n ↑↓ navigate • Enter select • Esc cancel\n </Text>\n </Box>\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from \"ink\";\nimport { ChatEntry, GrokAgent } from '../../agent/grok-agent.js';\nimport { ConfirmationOptions } from '../../utils/confirmation-service.js';\n\nimport { Banner } from \"./banner.js\";\nimport { ContextTooltip } from \"./context-tooltip.js\";\nimport { ChatHistory } from \"./chat-history.js\";\nimport { LoadingSpinner } from \"./loading-spinner.js\";\nimport { PlanModeIndicator } from \"./plan-mode-indicator.js\";\nimport { ChatInput } from \"./chat-input.js\";\nimport { VersionNotification } from \"./version-notification.js\";\nimport { PlanModeStatusIndicator } from \"./plan-mode-indicator.js\";\nimport { MCPStatus } from \"./mcp-status.js\";\nimport ContextIndicator from \"./context-indicator.js\";\nimport { CommandSuggestions } from \"./command-suggestions.js\";\nimport { ModelSelection } from \"./model-selection.js\";\nimport ConfirmationDialog from \"./confirmation-dialog.js\";\n\nexport interface ContextInfo {\n workspaceFiles: number;\n indexSize: string;\n sessionFiles: number;\n activeTokens: number;\n lastActivity: string;\n gitBranch?: string;\n projectName?: string;\n memoryPressure: 'low' | 'medium' | 'high';\n isLoading: boolean;\n tokenUsage?: {\n current: number;\n max: number;\n percent: number;\n };\n messagesCount: number;\n loadedFiles: Array<{\n path: string;\n tokens: number;\n lastAccessed: Date;\n }>;\n}\n\nexport interface PlanMode {\n isActive: boolean;\n currentPhase?: 'inactive' | 'analysis' | 'strategy' | 'presentation' | 'approved' | 'rejected';\n progress?: number;\n sessionDuration?: number;\n}\n\nexport interface CommandSuggestionsData {\n suggestions: any[];\n selectedIndex: number;\n isVisible: boolean;\n}\n\nexport interface ModelSelectionData {\n models: any[];\n selectedIndex: number;\n isVisible: boolean;\n currentModel: string;\n}\n\nexport interface ChatInterfaceRendererProps {\n // Data props\n chatHistory: ChatEntry[];\n confirmationOptions: ConfirmationOptions | null;\n showContextTooltip: boolean;\n contextInfo: ContextInfo;\n verbosityLevel: any;\n explainLevel: any;\n isProcessing: boolean;\n isStreaming: boolean;\n processingTime: number;\n tokenCount: number;\n planMode: PlanMode;\n input: string;\n cursorPosition: number;\n autoEditEnabled: boolean;\n agent: GrokAgent;\n commandSuggestions: any[];\n selectedCommandIndex: number;\n showCommandSuggestions: boolean;\n availableModels: any[];\n selectedModelIndex: number;\n showModelSelection: boolean;\n asciiArt?: string;\n\n // Handler functions\n handleConfirmation: (dontAskAgain?: boolean) => void;\n handleRejection: (feedback?: string) => void;\n toggleContextTooltip: () => void;\n}\n\nexport function ChatInterfaceRenderer({\n chatHistory,\n confirmationOptions,\n showContextTooltip,\n contextInfo,\n verbosityLevel,\n explainLevel,\n isProcessing,\n isStreaming,\n processingTime,\n tokenCount,\n planMode,\n input,\n cursorPosition,\n autoEditEnabled,\n agent,\n commandSuggestions,\n selectedCommandIndex,\n showCommandSuggestions,\n availableModels,\n selectedModelIndex,\n showModelSelection,\n handleConfirmation,\n handleRejection,\n toggleContextTooltip,\n}: ChatInterfaceRendererProps) {\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n {/* Show enhanced banner only when no chat history and no confirmation dialog */}\n {chatHistory.length === 0 && !confirmationOptions && (\n <Box flexDirection=\"column\">\n <Banner\n style=\"default\"\n showContext={true}\n workspaceFiles={contextInfo.workspaceFiles}\n indexSize={contextInfo.indexSize}\n sessionRestored={contextInfo.sessionFiles > 0}\n />\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"cyan\" bold>\n 💡 Quick Start Tips:\n </Text>\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"gray\">\n • <Text color=\"yellow\">Ask anything:</Text> \"Create a React component\" or \"Debug this Python script\"\n </Text>\n <Text color=\"gray\">\n • <Text color=\"yellow\">Edit files:</Text> \"Add error handling to app.js\"\n </Text>\n <Text color=\"gray\">\n • <Text color=\"yellow\">Run commands:</Text> \"Set up a new Node.js project\"\n </Text>\n <Text color=\"gray\">\n • <Text color=\"yellow\">Get help:</Text> Type \"/help\" for all commands\n </Text>\n </Box>\n\n <Box marginTop={1}>\n <Text color=\"cyan\" bold>\n 🛠️ Power Features:\n </Text>\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"gray\">\n • <Text color=\"magenta\">Auto-edit mode:</Text> Press Shift+Tab to toggle hands-free editing\n </Text>\n <Text color=\"gray\">\n • <Text color=\"magenta\">Project memory:</Text> Create .xcli/GROK.md to customize behavior\n </Text>\n <Text color=\"gray\">\n • <Text color=\"magenta\">Documentation:</Text> Run \"/init-agent\" for .agent docs system\n </Text>\n <Text color=\"gray\">\n • <Text color=\"magenta\">Error recovery:</Text> Run \"/heal\" after errors to add guardrails\n </Text>\n </Box>\n </Box>\n </Box>\n )}\n\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text color=\"gray\">\n Type your request in natural language. Ctrl+C to clear, 'exit' to\n quit.\n </Text>\n </Box>\n\n <Box flexDirection=\"column\">\n <ChatHistory\n entries={chatHistory}\n isConfirmationActive={!!confirmationOptions}\n verbosityLevel={verbosityLevel}\n explainLevel={explainLevel}\n />\n </Box>\n\n {/* Context Tooltip */}\n <ContextTooltip\n isVisible={showContextTooltip}\n onToggle={toggleContextTooltip}\n />\n\n {/* Show confirmation dialog if one is pending */}\n {confirmationOptions && (\n <ConfirmationDialog\n operation={confirmationOptions.operation}\n filename={confirmationOptions.filename}\n showVSCodeOpen={confirmationOptions.showVSCodeOpen}\n content={confirmationOptions.content}\n onConfirm={handleConfirmation}\n onReject={handleRejection}\n />\n )}\n\n {!confirmationOptions && (\n <>\n <LoadingSpinner\n isActive={isProcessing || isStreaming}\n processingTime={processingTime}\n tokenCount={tokenCount}\n operation={isStreaming ? 'thinking' : 'process'}\n progress={undefined} // TODO: Add progress tracking for long operations\n />\n\n {/* Plan Mode Detailed Indicator */}\n {planMode.isActive && planMode.currentPhase && planMode.progress !== undefined && planMode.sessionDuration !== undefined && (\n <Box marginBottom={1}>\n <PlanModeIndicator\n isActive={planMode.isActive}\n phase={planMode.currentPhase}\n progress={planMode.progress}\n sessionDuration={planMode.sessionDuration}\n detailed={true}\n />\n </Box>\n )}\n\n <ChatInput\n input={input}\n cursorPosition={cursorPosition}\n isProcessing={isProcessing}\n isStreaming={isStreaming}\n />\n\n <VersionNotification isVisible={!isProcessing && !isStreaming} />\n\n <Box flexDirection=\"row\" marginTop={1}>\n <Box marginRight={2}>\n <Text color=\"cyan\">\n {autoEditEnabled ? \"▶\" : \"⏸\"} auto-edit:{\" \"}\n {autoEditEnabled ? \"on\" : \"off\"}\n </Text>\n <Text color=\"gray\" dimColor>\n {\" \"}\n (shift + tab)\n </Text>\n </Box>\n <Box marginRight={2}>\n <Text color=\"yellow\">≋ {agent.getCurrentModel()}</Text>\n </Box>\n <Box marginRight={2}>\n {planMode.currentPhase && planMode.progress !== undefined ? (\n <PlanModeStatusIndicator\n isActive={planMode.isActive}\n phase={planMode.currentPhase}\n progress={planMode.progress}\n />\n ) : (\n <Text color=\"gray\" dimColor>\n Plan Mode: Off\n </Text>\n )}\n </Box>\n <MCPStatus />\n </Box>\n\n {/* Context Memory Indicator */}\n {contextInfo.tokenUsage && contextInfo.loadedFiles && (\n <Box marginTop={1}>\n <ContextIndicator\n state={{\n tokenUsage: contextInfo.tokenUsage,\n memoryPressure: contextInfo.memoryPressure,\n loadedFiles: contextInfo.loadedFiles,\n messagesCount: contextInfo.messagesCount,\n contextHealth: 'optimal', // TODO: implement context health check\n fileCount: contextInfo.loadedFiles.length,\n }}\n compact={true}\n />\n </Box>\n )}\n\n <CommandSuggestions\n suggestions={commandSuggestions}\n input={input}\n selectedIndex={selectedCommandIndex}\n isVisible={showCommandSuggestions}\n />\n\n <ModelSelection\n models={availableModels}\n selectedIndex={selectedModelIndex}\n isVisible={showModelSelection}\n currentModel={agent.getCurrentModel()}\n />\n </>\n )}\n </Box>\n );\n}","import React, { useState, useEffect, useRef } from \"react\";\nimport { GrokAgent, ChatEntry } from \"../../agent/grok-agent.js\";\nimport { useInputHandler } from \"../../hooks/use-input-handler.js\";\nimport {\n ConfirmationService,\n ConfirmationOptions,\n} from \"../../utils/confirmation-service.js\";\nimport ApiKeyInput from \"./api-key-input.js\";\nimport { useContextInfo } from \"../../hooks/use-context-info.js\";\nimport { useAutoRead } from \"../../hooks/use-auto-read.js\";\nimport { useStreaming } from \"../../hooks/use-streaming.js\";\nimport { useConfirmations } from \"../../hooks/use-confirmations.js\";\nimport { useIntroduction } from \"../../hooks/use-introduction.js\";\nimport { useConsoleSetup } from \"../../hooks/use-console-setup.js\";\nimport { useSessionLogging } from \"../../hooks/use-session-logging.js\";\nimport { useProcessingTimer } from \"../../hooks/use-processing-timer.js\";\nimport { ChatInterfaceRenderer, ContextInfo, PlanMode } from \"../../ui/components/chat-interface-renderer.js\";\nimport { ContextPack } from \"../../utils/context-loader.js\";\n\ninterface ChatInterfaceProps {\n agent?: GrokAgent;\n initialMessage?: string;\n quiet?: boolean;\n contextPack?: ContextPack;\n contextStatus?: string;\n}\n\n// Main chat component that handles input when agent is available\nfunction ChatInterfaceWithAgent({\n agent,\n initialMessage,\n quiet = false,\n contextPack: _contextPack,\n contextStatus,\n}: {\n agent: GrokAgent;\n initialMessage?: string;\n quiet?: boolean;\n contextPack?: ContextPack;\n contextStatus?: string;\n}) {\n const [chatHistory, setChatHistory] = useState<ChatEntry[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n const [processingTime, setProcessingTime] = useState(0);\n const [tokenCount, setTokenCount] = useState(0);\n const [isStreaming, setIsStreaming] = useState(false);\n const [confirmationOptions, setConfirmationOptions] =\n useState<ConfirmationOptions | null>(null);\n const [showContextTooltip, setShowContextTooltip] = useState(false);\n\n const processingStartTime = useRef<number>(0);\n\n // Setup console display and logo\n useConsoleSetup(quiet);\n\n // Auto-read .agent folder on first run\n useAutoRead(setChatHistory);\n\n // Initialize chat history\n useEffect(() => {\n const initialHistory: ChatEntry[] = [];\n if (contextStatus) {\n initialHistory.push({\n type: 'assistant',\n content: `🔧 ${contextStatus}`,\n timestamp: new Date(),\n });\n }\n setChatHistory(initialHistory);\n }, [contextStatus]);\n\n // Session logging\n useSessionLogging(chatHistory);\n\n // Get context information for banner, tooltip, and context indicator\n const { contextInfo } = useContextInfo(agent);\n\n // Handle global keyboard shortcuts via input handler\n const handleGlobalShortcuts = (str: string, key: any) => {\n if (key.ctrl && (str === 'i' || key.name === 'i')) {\n setShowContextTooltip(prev => !prev);\n return true;\n }\n return false;\n };\n\n const confirmationService = ConfirmationService.getInstance();\n\n // Introduction hook for first-time setup\n const { introductionState, handleIntroductionInput = () => false } = useIntroduction(\n chatHistory,\n setChatHistory\n );\n\n // Pass introduction input handler to useInputHandler\n const inputHandlerProps = {\n agent,\n chatHistory,\n setChatHistory,\n setIsProcessing,\n setIsStreaming,\n setTokenCount,\n setProcessingTime,\n processingStartTime,\n isProcessing,\n isStreaming,\n isConfirmationActive: !!confirmationOptions,\n onGlobalShortcut: handleGlobalShortcuts,\n introductionState,\n handleIntroductionInput,\n };\n\n const {\n input,\n cursorPosition,\n showCommandSuggestions,\n selectedCommandIndex,\n showModelSelection,\n selectedModelIndex,\n commandSuggestions,\n availableModels,\n autoEditEnabled,\n verbosityLevel,\n explainLevel,\n planMode,\n } = useInputHandler(inputHandlerProps);\n\n // Use streaming hook for processing initial messages\n useStreaming(agent, initialMessage, setChatHistory, {\n isProcessing,\n isStreaming,\n setIsProcessing,\n setIsStreaming,\n setTokenCount,\n setChatHistory,\n });\n\n // Use confirmations hook for handling confirmation dialogs\n const { handleConfirmation, handleRejection } = useConfirmations(\n confirmationService,\n {\n confirmationOptions,\n setConfirmationOptions,\n setIsProcessing,\n setIsStreaming,\n setTokenCount,\n setProcessingTime,\n processingStartTime,\n }\n );\n\n // Processing timer\n useProcessingTimer(isProcessing, isStreaming, setProcessingTime);\n\n const toggleContextTooltip = () => {\n setShowContextTooltip(prev => !prev);\n };\n\n return (\n <ChatInterfaceRenderer\n chatHistory={chatHistory}\n confirmationOptions={confirmationOptions}\n showContextTooltip={showContextTooltip}\n contextInfo={contextInfo as ContextInfo}\n verbosityLevel={verbosityLevel}\n explainLevel={explainLevel}\n isProcessing={isProcessing}\n isStreaming={isStreaming}\n processingTime={processingTime}\n tokenCount={tokenCount}\n planMode={planMode as PlanMode}\n input={input}\n cursorPosition={cursorPosition}\n autoEditEnabled={autoEditEnabled}\n agent={agent}\n commandSuggestions={commandSuggestions}\n selectedCommandIndex={selectedCommandIndex}\n showCommandSuggestions={showCommandSuggestions}\n availableModels={availableModels}\n selectedModelIndex={selectedModelIndex}\n showModelSelection={showModelSelection}\n handleConfirmation={handleConfirmation}\n handleRejection={handleRejection}\n toggleContextTooltip={toggleContextTooltip}\n />\n );\n}\n\n// Main component that handles API key input or chat interface\nexport default function ChatInterface({\n agent,\n initialMessage,\n quiet = false,\n contextPack,\n contextStatus,\n}: ChatInterfaceProps) {\n const [currentAgent, setCurrentAgent] = useState<GrokAgent | null>(\n agent || null\n );\n\n const handleApiKeySet = (newAgent: GrokAgent) => {\n setCurrentAgent(newAgent);\n };\n\n if (!currentAgent) {\n return <ApiKeyInput onApiKeySet={handleApiKeySet} />;\n }\n\n return (\n <ChatInterfaceWithAgent\n agent={currentAgent}\n initialMessage={initialMessage}\n quiet={quiet}\n contextPack={contextPack}\n contextStatus={contextStatus}\n />\n );\n}\n","import { Command } from 'commander';\nimport { addMCPServer, removeMCPServer, loadMCPConfig, PREDEFINED_SERVERS } from '../mcp/config.js';\nimport { getMCPManager } from '../grok/tools.js';\nimport { MCPServerConfig } from '../mcp/client.js';\nimport chalk from 'chalk';\n\nexport function createMCPCommand(): Command {\n const mcpCommand = new Command('mcp');\n mcpCommand.description('Manage MCP (Model Context Protocol) servers');\n\n // Add server command\n mcpCommand\n .command('add <name>')\n .description('Add an MCP server')\n .option('-t, --transport <type>', 'Transport type (stdio, http, sse, streamable_http)', 'stdio')\n .option('-c, --command <command>', 'Command to run the server (for stdio transport)')\n .option('-a, --args [args...]', 'Arguments for the server command (for stdio transport)', [])\n .option('-u, --url <url>', 'URL for HTTP/SSE transport')\n .option('-h, --headers [headers...]', 'HTTP headers (key=value format)', [])\n .option('-e, --env [env...]', 'Environment variables (key=value format)', [])\n .action(async (name: string, options) => {\n try {\n // Check if it's a predefined server\n if (PREDEFINED_SERVERS[name]) {\n const config = PREDEFINED_SERVERS[name];\n addMCPServer(config);\n console.log(chalk.green(`✓ Added predefined MCP server: ${name}`));\n \n // Try to connect immediately\n const manager = getMCPManager();\n await manager.addServer(config);\n console.log(chalk.green(`✓ Connected to MCP server: ${name}`));\n \n const tools = manager.getTools().filter(t => t.serverName === name);\n console.log(chalk.blue(` Available tools: ${tools.length}`));\n \n return;\n }\n\n // Custom server\n const transportType = options.transport.toLowerCase();\n \n if (transportType === 'stdio') {\n if (!options.command) {\n console.error(chalk.red('Error: --command is required for stdio transport'));\n process.exit(1);\n }\n } else if (transportType === 'http' || transportType === 'sse' || transportType === 'streamable_http') {\n if (!options.url) {\n console.error(chalk.red(`Error: --url is required for ${transportType} transport`));\n process.exit(1);\n }\n } else {\n console.error(chalk.red('Error: Transport type must be stdio, http, sse, or streamable_http'));\n process.exit(1);\n }\n\n // Parse environment variables\n const env: Record<string, string> = {};\n for (const envVar of options.env || []) {\n const [key, value] = envVar.split('=', 2);\n if (key && value) {\n env[key] = value;\n }\n }\n\n // Parse headers\n const headers: Record<string, string> = {};\n for (const header of options.headers || []) {\n const [key, value] = header.split('=', 2);\n if (key && value) {\n headers[key] = value;\n }\n }\n\n const config = {\n name,\n transport: {\n type: transportType as 'stdio' | 'http' | 'sse' | 'streamable_http',\n command: options.command,\n args: options.args || [],\n url: options.url,\n env,\n headers: Object.keys(headers).length > 0 ? headers : undefined\n }\n };\n\n addMCPServer(config);\n console.log(chalk.green(`✓ Added MCP server: ${name}`));\n \n // Try to connect immediately\n const manager = getMCPManager();\n await manager.addServer(config);\n console.log(chalk.green(`✓ Connected to MCP server: ${name}`));\n \n const tools = manager.getTools().filter(t => t.serverName === name);\n console.log(chalk.blue(` Available tools: ${tools.length}`));\n\n } catch (error: any) {\n console.error(chalk.red(`Error adding MCP server: ${error.message}`));\n process.exit(1);\n }\n });\n\n // Add server from JSON command\n mcpCommand\n .command('add-json <name> <json>')\n .description('Add an MCP server from JSON configuration')\n .action(async (name: string, jsonConfig: string) => {\n try {\n let config;\n try {\n config = JSON.parse(jsonConfig);\n } catch {\n console.error(chalk.red('Error: Invalid JSON configuration'));\n process.exit(1);\n }\n\n const serverConfig: MCPServerConfig = {\n name,\n transport: {\n type: 'stdio', // default\n command: config.command,\n args: config.args || [],\n env: config.env || {},\n url: config.url,\n headers: config.headers\n }\n };\n\n // Override transport type if specified\n if (config.transport) {\n if (typeof config.transport === 'string') {\n serverConfig.transport.type = config.transport as 'stdio' | 'http' | 'sse';\n } else if (typeof config.transport === 'object') {\n serverConfig.transport = { ...serverConfig.transport, ...config.transport };\n }\n }\n\n addMCPServer(serverConfig);\n console.log(chalk.green(`✓ Added MCP server: ${name}`));\n \n // Try to connect immediately\n const manager = getMCPManager();\n await manager.addServer(serverConfig);\n console.log(chalk.green(`✓ Connected to MCP server: ${name}`));\n \n const tools = manager.getTools().filter(t => t.serverName === name);\n console.log(chalk.blue(` Available tools: ${tools.length}`));\n\n } catch (error: any) {\n console.error(chalk.red(`Error adding MCP server: ${error.message}`));\n process.exit(1);\n }\n });\n\n // Remove server command\n mcpCommand\n .command('remove <name>')\n .description('Remove an MCP server')\n .action(async (name: string) => {\n try {\n const manager = getMCPManager();\n await manager.removeServer(name);\n removeMCPServer(name);\n console.log(chalk.green(`✓ Removed MCP server: ${name}`));\n } catch (error: any) {\n console.error(chalk.red(`Error removing MCP server: ${error.message}`));\n process.exit(1);\n }\n });\n\n // List servers command\n mcpCommand\n .command('list')\n .description('List configured MCP servers')\n .action(() => {\n const config = loadMCPConfig();\n const manager = getMCPManager();\n \n if (config.servers.length === 0) {\n console.log(chalk.yellow('No MCP servers configured'));\n return;\n }\n\n console.log(chalk.bold('Configured MCP servers:'));\n console.log();\n\n for (const server of config.servers) {\n const isConnected = manager.getServers().includes(server.name);\n const status = isConnected \n ? chalk.green('✓ Connected') \n : chalk.red('✗ Disconnected');\n \n console.log(`${chalk.bold(server.name)}: ${status}`);\n \n // Display transport information\n if (server.transport) {\n console.log(` Transport: ${server.transport.type}`);\n if (server.transport.type === 'stdio') {\n console.log(` Command: ${server.transport.command} ${(server.transport.args || []).join(' ')}`);\n } else if (server.transport.type === 'http' || server.transport.type === 'sse') {\n console.log(` URL: ${server.transport.url}`);\n }\n } else if (server.command) {\n // Legacy format\n console.log(` Command: ${server.command} ${(server.args || []).join(' ')}`);\n }\n \n if (isConnected) {\n const transportType = manager.getTransportType(server.name);\n if (transportType) {\n console.log(` Active Transport: ${transportType}`);\n }\n \n const tools = manager.getTools().filter(t => t.serverName === server.name);\n console.log(` Tools: ${tools.length}`);\n if (tools.length > 0) {\n tools.forEach(tool => {\n const displayName = tool.name.replace(`mcp__${server.name}__`, '');\n console.log(` - ${displayName}: ${tool.description}`);\n });\n }\n }\n \n console.log();\n }\n });\n\n // Test server command\n mcpCommand\n .command('test <name>')\n .description('Test connection to an MCP server')\n .action(async (name: string) => {\n try {\n const config = loadMCPConfig();\n const serverConfig = config.servers.find(s => s.name === name);\n \n if (!serverConfig) {\n console.error(chalk.red(`Server ${name} not found`));\n process.exit(1);\n }\n\n console.log(chalk.blue(`Testing connection to ${name}...`));\n \n const manager = getMCPManager();\n await manager.addServer(serverConfig);\n \n const tools = manager.getTools().filter(t => t.serverName === name);\n console.log(chalk.green(`✓ Successfully connected to ${name}`));\n console.log(chalk.blue(` Available tools: ${tools.length}`));\n \n if (tools.length > 0) {\n console.log(' Tools:');\n tools.forEach(tool => {\n const displayName = tool.name.replace(`mcp__${name}__`, '');\n console.log(` - ${displayName}: ${tool.description}`);\n });\n }\n\n } catch (error: any) {\n console.error(chalk.red(`✗ Failed to connect to ${name}: ${error.message}`));\n process.exit(1);\n }\n });\n\n return mcpCommand;\n}","import { Command } from 'commander';\nimport { getSettingsManager } from '../utils/settings-manager.js';\nimport chalk from 'chalk';\n\nexport function createSetNameCommand(): Command {\n const setNameCommand = new Command('set-name');\n setNameCommand\n .description('Set a custom name for the AI assistant')\n .argument('<name>', 'The name to set for the assistant')\n .action(async (name: string) => {\n try {\n const settingsManager = getSettingsManager();\n settingsManager.updateUserSetting('assistantName', name);\n console.log(chalk.green(`✅ Assistant name set to: ${name}`));\n } catch (error: any) {\n console.error(chalk.red(`❌ Failed to set assistant name: ${error.message}`));\n process.exit(1);\n }\n });\n\n return setNameCommand;\n}","import { Command } from 'commander';\nimport { getSettingsManager } from '../utils/settings-manager.js';\nimport chalk from 'chalk';\n\nexport function createToggleConfirmationsCommand(): Command {\n const toggleCommand = new Command('toggle-confirmations');\n toggleCommand\n .description('Toggle the requirement for user confirmation on file operations and bash commands')\n .action(async () => {\n try {\n const settingsManager = getSettingsManager();\n const currentValue = settingsManager.getUserSetting('requireConfirmation') ?? true;\n const newValue = !currentValue;\n settingsManager.updateUserSetting('requireConfirmation', newValue);\n console.log(chalk.green(`✅ Confirmation requirement ${newValue ? 'enabled' : 'disabled'}`));\n console.log(`File operations and bash commands will ${newValue ? 'now' : 'no longer'} require confirmation.`);\n } catch (error: any) {\n console.error(chalk.red(`❌ Failed to toggle confirmations: ${error.message}`));\n process.exit(1);\n }\n });\n\n return toggleCommand;\n}","// #!/usr/bin/env node\n\nimport React from \"react\";\nimport { render } from \"ink\";\nimport { program } from \"commander\";\nimport * as dotenv from \"dotenv\";\nimport path from \"path\";\n\n// Load environment variables first\ndotenv.config();\n\n// Simple logging to both console and file\nimport fs from 'fs';\nconst logStream = fs.createWriteStream(path.join(process.cwd(), 'xcli-startup.log'), { flags: 'a' });\nconst log = (...args: string[]) => {\n const timestamp = new Date().toISOString();\n const msg = `[${timestamp}] ${args.join(' ')}\\n`;\n console.log(msg.trim()); // Terminal output\n try {\n logStream.write(msg);\n } catch {\n // Ignore file write errors\n }\n};\n\nlog(\"🚀 X-CLI Starting Up...\");\nlog(`📂 Working directory: ${process.cwd()}`);\nlog(`🖥️ Node version: ${process.version}`);\n\n// Check API key early\nconst apiKey = process.env.GROK_API_KEY;\nlog(`🔑 API Key: ${apiKey ? \"✅ Found\" : \"❌ Missing\"}`);\n\nif (!apiKey) {\n console.error(\"❌ No API key found. Set GROK_API_KEY environment variable.\");\n log(\"❌ Missing API key - exiting\");\n process.exit(1);\n}\n\n// Import core modules with error handling\nlog(\"📦 Loading core modules...\");\ntry {\n const { GrokAgent } = await import(\"./agent/grok-agent.js\");\n const ChatInterface = (await import(\"./ui/components/chat-interface.js\")).default;\n const { printWelcomeBanner } = await import(\"./hooks/use-console-setup.js\");\n const { getSettingsManager } = await import(\"./utils/settings-manager.js\");\n const { ConfirmationService } = await import(\"./utils/confirmation-service.js\");\n const { createMCPCommand } = await import(\"./commands/mcp.js\");\n const { createSetNameCommand } = await import(\"./commands/set-name.js\");\n const { createToggleConfirmationsCommand } = await import(\"./commands/toggle-confirmations.js\");\n const pkg = await import(\"../package.json\", { assert: { type: \"json\" } });\n const { checkForUpdates } = await import(\"./utils/version-checker.js\");\n const { loadContext, formatContextStatus } = await import(\"./utils/context-loader.js\");\n \n log(\"✅ All modules imported successfully\");\n \n // Setup error handlers\n process.on(\"SIGTERM\", () => {\n log(\"👋 Gracefully shutting down...\");\n process.exit(0);\n });\n\n process.on(\"uncaughtException\", (error) => {\n log(`💥 Uncaught exception: ${error.message}`);\n console.error(\"💥 Uncaught exception:\", error.message);\n process.exit(1);\n });\n\n process.on(\"unhandledRejection\", (reason) => {\n log(`💥 Unhandled rejection: ${reason}`);\n console.error(\"💥 Unhandled rejection:\", reason);\n process.exit(1);\n });\n\n // Helper functions\n function loadModel(): string | undefined {\n let model = process.env.GROK_MODEL;\n if (!model) {\n try {\n const manager = getSettingsManager();\n model = manager.getCurrentModel?.();\n } catch {\n model = \"grok-4-fast-non-reasoning\"; // Default model\n }\n }\n return model;\n }\n\n async function saveCommandLineSettings(apiKey?: string, baseURL?: string): Promise<void> {\n try {\n const manager = getSettingsManager();\n if (apiKey) {\n manager.updateUserSetting(\"apiKey\", apiKey);\n log(\"✅ API key saved to settings\");\n }\n if (baseURL) {\n manager.updateUserSetting(\"baseURL\", baseURL);\n log(\"✅ Base URL saved to settings\");\n }\n } catch (error) {\n log(`⚠️ Could not save settings: ${error}`);\n }\n }\n\n // Main CLI setup\n log(\"🎯 Initializing CLI...\");\n try {\n const baseURL = process.env.GROK_BASE_URL;\n const model = loadModel();\n const maxToolRounds = parseInt(process.env.MAX_TOOL_ROUNDS || \"400\");\n \n log(\"🤖 Creating GrokAgent instance...\");\n const agent = new GrokAgent(apiKey, baseURL, model, maxToolRounds);\n\n log(\"📋 Setting up Commander CLI...\");\n program\n .name(\"x-cli\")\n .description(\"AI-powered CLI assistant\")\n .version(pkg.default.version)\n .argument(\"[message...]\", \"Initial message to send to Grok\")\n .option(\"-d, --directory <dir>\", \"set working directory\", process.cwd())\n .option(\"-k, --api-key <key>\", \"X API key\")\n .option(\"-u, --base-url <url>\", \"Grok API base URL\")\n .option(\"-m, --model <model>\", \"AI model to use\")\n .option(\"-p, --prompt <prompt>\", \"process a single prompt and exit (headless mode)\")\n .option(\"--max-tool-rounds <rounds>\", \"maximum tool rounds\", \"400\")\n .option(\"-q, --quiet\", \"suppress startup banner and messages\")\n .action(async (message, options) => {\n log(\"🎯 Starting main execution...\");\n \n if (options.directory) {\n try {\n process.chdir(options.directory);\n log(`📁 Changed to directory: ${options.directory}`);\n } catch (error) {\n log(`❌ Directory change failed: ${error}`);\n process.exit(1);\n }\n }\n\n if (options.apiKey || options.baseUrl) {\n await saveCommandLineSettings(options.apiKey, options.baseUrl);\n }\n\n // Headless mode: process prompt and exit\n if (options.prompt) {\n log(\"🤖 Processing headless prompt...\");\n try {\n const confirmationService = ConfirmationService.getInstance();\n confirmationService.setSessionFlag(\"allOperations\", true);\n\n const chatEntries = await agent.processUserMessage(options.prompt);\n \n // Output assistant responses\n for (const entry of chatEntries) {\n if (entry.type === \"assistant\" && entry.content) {\n console.log(entry.content);\n }\n }\n } catch (error) {\n log(`❌ Headless processing failed: ${error}`);\n process.exit(1);\n }\n return;\n }\n\n // Interactive mode: launch UI\n if (!process.stdin.isTTY) {\n console.error(\"❌ Error: X CLI requires an interactive terminal.\");\n process.exit(1);\n }\n\n // Load .agent/ context for intelligent decision making\n let contextPack;\n let statusMessage;\n try {\n contextPack = loadContext();\n statusMessage = formatContextStatus(contextPack);\n log(\"📚 Context loaded successfully\");\n } catch (error) {\n log(`⚠️ Context loading failed: ${error}`);\n }\n\n log(\"🚀 Launching interactive CLI...\");\n \n // Print welcome banner\n if (!options.quiet) {\n printWelcomeBanner(options.quiet);\n }\n\n const app = render(React.createElement(ChatInterface, { \n agent, \n initialMessage: Array.isArray(message) ? message.join(\" \") : (message || \"\"),\n quiet: options.quiet,\n contextStatus: statusMessage \n }));\n\n // Cleanup on exit\n const cleanup = () => {\n log(\"👋 Shutting down...\");\n app.unmount();\n try {\n agent.abortCurrentOperation?.();\n } catch {\n // Ignore cleanup errors\n }\n };\n\n process.on('exit', cleanup);\n process.on('SIGINT', () => {\n cleanup();\n process.exit(0);\n });\n process.on('SIGTERM', cleanup);\n });\n\n // Add subcommands\n program.addCommand(createMCPCommand());\n program.addCommand(createSetNameCommand());\n program.addCommand(createToggleConfirmationsCommand());\n\n log(\"✅ CLI setup complete\");\n program.parse();\n \n } catch (error) {\n log(`💥 Fatal error during initialization: ${error}`);\n console.error(\"💥 Fatal error:\", error);\n process.exit(1);\n }\n\n} catch (error) {\n log(`💥 Failed to load modules: ${error}`);\n console.error(\"💥 Failed to load modules:\", error);\n process.exit(1);\n}\n"]}
|