devwing 0.1.7 → 0.1.8

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/manager.ts","../src/api/client.ts","../src/utils/logger.ts","../src/commands/auth.ts","../src/context/collector.ts","../src/tools/engine.ts","../src/streaming/renderer.ts","../src/commands/prompt.ts","../src/commands/specialized.ts","../src/commands/chat.ts","../src/commands/update.ts","../src/index.ts"],"names":["axios","chalk","os","fs","path","simpleGit","inquirer","__filename","__dirname","execSync","fileURLToPath","dirname","join","readFileSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Configuration Manager\n * Handles storing and retrieving CLI configuration\n */\n\nimport Conf from 'conf';\nimport { AsyncEntry } from '@napi-rs/keyring';\nimport { DevWingConfig, AIMode } from '../types/index.js';\n\nconst SERVICE_NAME = 'DevWing CLI';\nconst API_KEY_ACCOUNT = 'api-key';\n\nclass ConfigManager {\n private conf: Conf<DevWingConfig>;\n\n constructor() {\n this.conf = new Conf<DevWingConfig>({\n projectName: 'devwing',\n defaults: {\n apiUrl: process.env.DEVWING_API_URL || 'https://api.devwing.ai/api/v1',\n },\n });\n }\n\n /**\n * Get API key from OS keychain\n */\n async getApiKey(): Promise<string | null> {\n try {\n const entry = new AsyncEntry(SERVICE_NAME, API_KEY_ACCOUNT);\n const password = await entry.getPassword();\n return password || null;\n } catch (error) {\n console.error('Failed to retrieve API key from keychain:', error);\n return null;\n }\n }\n\n /**\n * Store API key in OS keychain\n */\n async setApiKey(apiKey: string): Promise<void> {\n try {\n const entry = new AsyncEntry(SERVICE_NAME, API_KEY_ACCOUNT);\n await entry.setPassword(apiKey);\n } catch (error) {\n throw new Error(`Failed to store API key in keychain: ${error}`);\n }\n }\n\n /**\n * Delete API key from OS keychain\n */\n async deleteApiKey(): Promise<void> {\n try {\n const entry = new AsyncEntry(SERVICE_NAME, API_KEY_ACCOUNT);\n await entry.deletePassword();\n } catch (error) {\n console.error('Failed to delete API key from keychain:', error);\n }\n }\n\n /**\n * Get API URL — ensures /api/v1 suffix is always present\n */\n getApiUrl(): string {\n let url = this.conf.get('apiUrl');\n // Guard: ensure the API prefix is present\n if (url && !url.endsWith('/api/v1') && url.includes('devwing.ai')) {\n url = url.replace(/\\/+$/, '') + '/api/v1';\n this.conf.set('apiUrl', url);\n }\n return url;\n }\n\n /**\n * Set API URL (for development/testing)\n */\n setApiUrl(url: string): void {\n this.conf.set('apiUrl', url.replace(/\\/+$/, ''));\n }\n\n /**\n * Get current workspace ID\n */\n getWorkspaceId(): string | undefined {\n return this.conf.get('workspaceId');\n }\n\n /**\n * Set current workspace ID\n */\n setWorkspaceId(workspaceId: string): void {\n this.conf.set('workspaceId', workspaceId);\n }\n\n /**\n * Get current project ID\n */\n getProjectId(): string | undefined {\n return this.conf.get('projectId');\n }\n\n /**\n * Set current project ID\n */\n setProjectId(projectId: string): void {\n this.conf.set('projectId', projectId);\n }\n\n /**\n * Get preferred model\n */\n getModel(): string | undefined {\n return this.conf.get('model');\n }\n\n /**\n * Set preferred model\n */\n setModel(model: string): void {\n this.conf.set('model', model);\n }\n\n /**\n * Get preferred AI mode\n */\n getMode(): AIMode | undefined {\n return this.conf.get('mode');\n }\n\n /**\n * Set preferred AI mode\n */\n setMode(mode: AIMode): void {\n this.conf.set('mode', mode);\n }\n\n /**\n * Get all config\n */\n getAll(): DevWingConfig {\n return {\n apiUrl: this.getApiUrl(),\n workspaceId: this.getWorkspaceId(),\n projectId: this.getProjectId(),\n model: this.getModel(),\n mode: this.getMode(),\n };\n }\n\n /**\n * Clear all config (except API key)\n */\n clear(): void {\n this.conf.clear();\n }\n\n /**\n * Get config file path (for debugging)\n */\n getPath(): string {\n return this.conf.path;\n }\n}\n\nexport const configManager = new ConfigManager();","/**\n * API Client\n * Handles all communication with DevWing backend\n */\n\nimport axios, { AxiosInstance, AxiosError } from 'axios';\nimport { configManager } from '../config/manager.js';\nimport {\n CompletionRequest,\n StreamMessage,\n UserProfile,\n ProjectMemory,\n Model,\n UsageStats,\n LoginResponse,\n} from '../types/index.js';\nimport { EventSourceParserStream } from 'eventsource-parser/stream';\n\n/**\n * Extract error message from FastAPI/backend error responses.\n * FastAPI uses `detail`, but some endpoints use `message` or `error`.\n */\nfunction extractErrorMessage(data: any): string {\n if (!data) return 'Unknown error';\n if (typeof data === 'string') return data;\n return data.detail || data.message || data.error || JSON.stringify(data);\n}\n\nclass APIClient {\n private client: AxiosInstance;\n private jwtToken: string | null = null;\n\n constructor() {\n this.client = axios.create({\n timeout: 120000, // 2 minutes\n });\n\n // Add request interceptor to attach API key or JWT\n this.client.interceptors.request.use(async (config) => {\n const apiKey = await configManager.getApiKey();\n const apiUrl = configManager.getApiUrl();\n\n config.baseURL = apiUrl;\n\n // Prefer JWT (temporary for login flow), fallback to API key\n if (this.jwtToken) {\n config.headers.Authorization = `Bearer ${this.jwtToken}`;\n } else if (apiKey) {\n config.headers.Authorization = `Bearer ${apiKey}`;\n }\n\n return config;\n });\n\n // Add response interceptor for error handling\n this.client.interceptors.response.use(\n (response) => response,\n (error: AxiosError) => {\n if (error.response?.data) {\n const message = extractErrorMessage(error.response.data);\n const err = new Error(message);\n (err as any).statusCode = error.response.status;\n throw err;\n }\n if (error.code === 'ECONNREFUSED') {\n throw new Error('Cannot connect to DevWing API. Is the server running?');\n }\n if (error.code === 'ENOTFOUND') {\n throw new Error('Cannot resolve DevWing API hostname. Check your internet connection.');\n }\n throw new Error(error.message || 'Network error');\n }\n );\n }\n\n /**\n * Set JWT token for temporary authentication (login flow only)\n */\n setJwtToken(token: string | null): void {\n this.jwtToken = token;\n }\n\n /**\n * Login with email and password\n * Returns full login response including 2FA handling\n */\n async login(email: string, password: string): Promise<LoginResponse> {\n const response = await this.client.post('/auth/login', { email, password });\n return response.data;\n }\n\n /**\n * Complete 2FA login\n */\n async complete2FA(tempToken: string, totpCode: string): Promise<LoginResponse> {\n const response = await this.client.post('/auth/2fa/complete', {\n temp_token: tempToken,\n totp_code: totpCode,\n });\n return response.data;\n }\n\n /**\n * Get current user profile\n */\n async getProfile(): Promise<UserProfile> {\n const response = await this.client.get('/users/me');\n return response.data;\n }\n\n /**\n * Create a new API key\n */\n async createApiKey(name: string): Promise<{ id: string; key: string; key_prefix: string; name: string }> {\n const response = await this.client.post('/api-keys', { name });\n return response.data;\n }\n\n /**\n * Initiate CLI browser authentication (device flow)\n */\n async initiateCliAuth(deviceInfo?: string): Promise<{\n device_code: string;\n user_code: string;\n verification_url: string;\n verification_url_complete: string;\n expires_in: number;\n interval: number;\n }> {\n const response = await this.client.post('/auth/cli/initiate', {\n device_info: deviceInfo,\n });\n return response.data;\n }\n\n /**\n * Poll for CLI authentication status\n */\n async pollCliAuth(deviceCode: string): Promise<{\n status: 'pending' | 'authorized' | 'expired' | 'denied';\n api_key?: string;\n message?: string;\n }> {\n const response = await this.client.post('/auth/cli/poll', {\n device_code: deviceCode,\n });\n return response.data;\n }\n\n /**\n * Stream AI completion\n */\n async *streamCompletion(request: CompletionRequest): AsyncGenerator<StreamMessage> {\n const apiKey = await configManager.getApiKey();\n const apiUrl = configManager.getApiUrl();\n\n if (!apiKey) {\n throw new Error('Not authenticated. Run \"devwing login\" first.');\n }\n\n const response = await fetch(`${apiUrl}/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n let errorMsg = `API error (${response.status})`;\n try {\n const error = await response.json();\n errorMsg = extractErrorMessage(error);\n } catch {\n // Could not parse error body\n }\n throw new Error(errorMsg);\n }\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n // Parse SSE stream\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream());\n\n for await (const event of stream) {\n if (event.data) {\n try {\n const message: StreamMessage = JSON.parse(event.data);\n yield message;\n } catch {\n // Skip unparseable SSE messages\n }\n }\n }\n }\n\n /**\n * Continue completion with tool results\n */\n async *continueCompletion(sessionId: string, toolResults: any[]): AsyncGenerator<StreamMessage> {\n const apiKey = await configManager.getApiKey();\n const apiUrl = configManager.getApiUrl();\n\n if (!apiKey) {\n throw new Error('Not authenticated. Run \"devwing login\" first.');\n }\n\n const response = await fetch(`${apiUrl}/completions/continue`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n session_id: sessionId,\n tool_results: toolResults,\n }),\n });\n\n if (!response.ok) {\n let errorMsg = `API error (${response.status})`;\n try {\n const error = await response.json();\n errorMsg = extractErrorMessage(error);\n } catch {\n // Could not parse error body\n }\n throw new Error(errorMsg);\n }\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n // Parse SSE stream\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream());\n\n for await (const event of stream) {\n if (event.data) {\n try {\n const message: StreamMessage = JSON.parse(event.data);\n yield message;\n } catch {\n // Skip unparseable SSE messages\n }\n }\n }\n }\n\n /**\n * Get project memory\n * Backend returns { memories: [...], total: N }\n */\n async getProjectMemory(projectId: string): Promise<ProjectMemory[]> {\n const response = await this.client.get(`/memory/${projectId}`);\n // Handle both wrapped and unwrapped responses\n const data = response.data;\n if (data.memories && Array.isArray(data.memories)) {\n return data.memories;\n }\n if (Array.isArray(data)) {\n return data;\n }\n return [];\n }\n\n /**\n * Add project memory\n */\n async addProjectMemory(\n projectId: string,\n content: string,\n type: 'context' | 'rule' | 'decision' | 'summary'\n ): Promise<ProjectMemory> {\n const response = await this.client.post(`/memory/${projectId}`, { content, type });\n return response.data;\n }\n\n /**\n * Delete project memory\n */\n async deleteProjectMemory(projectId: string, memoryId: string): Promise<void> {\n await this.client.delete(`/memory/${projectId}/${memoryId}`);\n }\n\n /**\n * Get available models\n */\n async getModels(): Promise<Model[]> {\n const response = await this.client.get('/models');\n const data = response.data;\n if (data.models && Array.isArray(data.models)) {\n return data.models;\n }\n if (Array.isArray(data)) {\n return data;\n }\n return [];\n }\n\n /**\n * Get usage stats\n */\n async getUsage(params?: { from?: string; to?: string }): Promise<UsageStats> {\n const response = await this.client.get('/analytics/overview', { params });\n return response.data;\n }\n}\n\nexport const apiClient = new APIClient();","/**\n * Logging Utilities\n */\n\nimport chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport boxen from 'boxen';\nimport gradient from 'gradient-string';\n\nclass Logger {\n private spinner: Ora | null = null;\n\n /**\n * Success message\n */\n success(message: string): void {\n console.log(chalk.green('✓'), message);\n }\n\n /**\n * Error message\n */\n error(message: string, error?: any): void {\n console.log(chalk.red('✗'), message);\n if (error && process.env.DEBUG) {\n console.error(chalk.gray(error.stack || error));\n }\n }\n\n /**\n * Warning message\n */\n warn(message: string): void {\n console.log(chalk.yellow('⚠'), message);\n }\n\n /**\n * Info message\n */\n info(message: string): void {\n console.log(chalk.blue('ℹ'), message);\n }\n\n /**\n * Debug message (only shown if DEBUG env var is set)\n */\n debug(message: string, data?: any): void {\n if (process.env.DEBUG) {\n console.log(chalk.gray('⚙'), chalk.gray(message));\n if (data) {\n console.log(chalk.gray(JSON.stringify(data, null, 2)));\n }\n }\n }\n\n /**\n * Start a spinner\n */\n startSpinner(text: string): void {\n this.spinner = ora({\n text,\n color: 'cyan',\n }).start();\n }\n\n /**\n * Update spinner text\n */\n updateSpinner(text: string): void {\n if (this.spinner) {\n this.spinner.text = text;\n }\n }\n\n /**\n * Stop spinner with success\n */\n succeedSpinner(text?: string): void {\n if (this.spinner) {\n this.spinner.succeed(text);\n this.spinner = null;\n }\n }\n\n /**\n * Stop spinner with failure\n */\n failSpinner(text?: string): void {\n if (this.spinner) {\n this.spinner.fail(text);\n this.spinner = null;\n }\n }\n\n /**\n * Stop spinner\n */\n stopSpinner(): void {\n if (this.spinner) {\n this.spinner.stop();\n this.spinner = null;\n }\n }\n\n /**\n * Print DevWing banner\n */\n printBanner(): void {\n const banner = gradient.pastel.multiline([\n '',\n ' ██████╗ ███████╗██╗ ██╗██╗ ██╗██╗███╗ ██╗ ██████╗ ',\n ' ██╔══██╗██╔════╝██║ ██║██║ ██║██║████╗ ██║██╔════╝ ',\n ' ██║ ██║█████╗ ██║ ██║██║ █╗ ██║██║██╔██╗ ██║██║ ███╗',\n ' ██║ ██║██╔══╝ ╚██╗ ██╔╝██║███╗██║██║██║╚██╗██║██║ ██║',\n ' ██████╔╝███████╗ ╚████╔╝ ╚███╔███╔╝██║██║ ╚████║╚██████╔╝',\n ' ╚═════╝ ╚══════╝ ╚═══╝ ╚══╝╚══╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ',\n '',\n ' Your AI Wingman in the Terminal',\n '',\n ].join('\\n'));\n\n console.log(banner);\n }\n\n /**\n * Print a box message\n */\n box(message: string, options?: { title?: string; color?: string }): void {\n console.log(\n boxen(message, {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: options?.color || 'cyan',\n title: options?.title,\n titleAlignment: 'center',\n })\n );\n }\n\n /**\n * Print a newline\n */\n newline(): void {\n console.log();\n }\n}\n\nexport const logger = new Logger();","/**\n * Authentication Commands\n * Handles login, logout, and authentication status\n */\n\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { logger } from '../utils/logger.js';\nimport { LoginResponse } from '../types/index.js';\nimport terminalLink from 'terminal-link';\n\n/**\n * Normalize user profile — backend uses subscription_plan, CLI uses plan\n */\nfunction getUserPlan(user: any): string {\n return user.subscription_plan || user.plan || 'free';\n}\n\nfunction getUserDisplayName(user: any): string {\n return user.full_name || user.username || user.email;\n}\n\n/**\n * Login command - authenticate with DevWing\n */\nexport async function loginCommand(): Promise<void> {\n try {\n // Check if already logged in\n const existingKey = await configManager.getApiKey();\n if (existingKey) {\n const { overwrite } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'overwrite',\n message: 'You are already logged in. Do you want to log in with a different account?',\n default: false,\n },\n ]);\n\n if (!overwrite) {\n logger.info('Login cancelled');\n return;\n }\n }\n\n logger.printBanner();\n logger.newline();\n\n // Prompt for authentication method\n const { method } = await inquirer.prompt([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n { name: 'Via Browser (easiest)', value: 'browser' },\n { name: 'Email & Password', value: 'email' },\n { name: 'API Key (from dashboard)', value: 'apikey' },\n ],\n },\n ]);\n\n if (method === 'email') {\n await loginWithEmail();\n } else if (method === 'browser') {\n await loginWithBrowser();\n } else {\n await loginWithApiKey();\n }\n } catch (error: any) {\n logger.error('Login failed');\n if (error.message) {\n logger.error(error.message);\n }\n process.exit(1);\n }\n}\n\n/**\n * Login with email and password\n */\nasync function loginWithEmail(): Promise<void> {\n const { email, password } = await inquirer.prompt([\n {\n type: 'input',\n name: 'email',\n message: 'Email:',\n validate: (input) => {\n if (!input.includes('@') || !input.includes('.')) {\n return 'Please enter a valid email address';\n }\n return true;\n },\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n validate: (input) => {\n if (!input || input.length < 1) {\n return 'Password is required';\n }\n return true;\n },\n },\n ]);\n\n logger.startSpinner('Authenticating...');\n\n try {\n // Login to get JWT\n let loginResult: LoginResponse = await apiClient.login(email, password);\n\n // Handle 2FA if required\n if (loginResult.requires_2fa) {\n logger.succeedSpinner('Credentials verified');\n logger.info('Two-factor authentication is enabled on your account');\n\n const { totpCode } = await inquirer.prompt([\n {\n type: 'input',\n name: 'totpCode',\n message: '2FA Code (from authenticator app):',\n validate: (input) => {\n if (!/^\\d{6}$/.test(input)) {\n return 'Please enter a 6-digit code';\n }\n return true;\n },\n },\n ]);\n\n logger.startSpinner('Verifying 2FA code...');\n loginResult = await apiClient.complete2FA(loginResult.temp_token!, totpCode);\n }\n\n if (!loginResult.access_token || !loginResult.user) {\n logger.failSpinner('Login failed');\n logger.error('Unexpected response from server');\n return;\n }\n\n // Store JWT temporarily for API key creation\n apiClient.setJwtToken(loginResult.access_token);\n\n // Create a new CLI API key (uses JWT for auth)\n logger.updateSpinner('Creating API key...');\n const apiKeyResult = await apiClient.createApiKey('CLI - Auto-generated');\n\n // Clear JWT - we have API key now\n apiClient.setJwtToken(null);\n\n // Store API key in keychain\n await configManager.setApiKey(apiKeyResult.key);\n\n const user = loginResult.user;\n const plan = getUserPlan(user);\n\n logger.succeedSpinner(`Welcome back, ${getUserDisplayName(user)}!`);\n logger.success(`Plan: ${plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Authentication failed');\n logger.error(error.message || 'Unknown error occurred');\n throw error;\n }\n}\n\n/**\n * Login via browser (device flow)\n */\nasync function loginWithBrowser(): Promise<void> {\n const os = await import('os');\n const open = await import('open');\n\n logger.startSpinner('Initiating browser authentication...');\n\n try {\n // Step 1: Initiate device flow\n const deviceInfo = `DevWing CLI on ${os.platform()} (${os.hostname()})`;\n const initResponse = await apiClient.initiateCliAuth(deviceInfo);\n\n logger.succeedSpinner('Device code created');\n logger.newline();\n\n // Step 2: Open browser automatically\n const verifyUrl = initResponse.verification_url_complete;\n try {\n await open.default(verifyUrl);\n logger.success('Browser opened! Please log in to authorize this device.');\n } catch {\n logger.warn('Could not open browser automatically.');\n logger.info(`Please visit: ${chalk.cyan(verifyUrl)}`);\n }\n\n logger.newline();\n logger.info(chalk.dim(`Device code: ${initResponse.user_code.substring(0, 8)}...`));\n logger.startSpinner('Waiting for authorization...');\n\n // Step 3: Poll for authorization\n const pollInterval = (initResponse.interval || 5) * 1000;\n const maxAttempts = Math.floor((initResponse.expires_in || 900) / (initResponse.interval || 5));\n let attempts = 0;\n\n const pollForAuth = async (): Promise<string> => {\n return new Promise((resolve, reject) => {\n const interval = setInterval(async () => {\n attempts++;\n\n if (attempts >= maxAttempts) {\n clearInterval(interval);\n reject(new Error('Authentication timed out. Please try again with \"devwing login\".'));\n return;\n }\n\n try {\n const pollResponse = await apiClient.pollCliAuth(initResponse.device_code);\n\n if (pollResponse.status === 'authorized' && pollResponse.api_key) {\n clearInterval(interval);\n resolve(pollResponse.api_key);\n } else if (pollResponse.status === 'denied') {\n clearInterval(interval);\n reject(new Error('Authorization denied by user.'));\n } else if (pollResponse.status === 'expired') {\n clearInterval(interval);\n reject(new Error('Device code expired. Please run \"devwing login\" again.'));\n }\n // status === 'pending' — continue polling\n } catch (error: any) {\n // Don't stop on transient errors (429, network blips)\n if (error.statusCode === 429) {\n // Rate limited — just wait longer\n return;\n }\n clearInterval(interval);\n reject(error);\n }\n }, pollInterval);\n });\n };\n\n const apiKey = await pollForAuth();\n\n // Store API key\n await configManager.setApiKey(apiKey);\n\n // Fetch user profile\n logger.updateSpinner('Fetching profile...');\n const user = await apiClient.getProfile();\n const plan = getUserPlan(user);\n\n logger.succeedSpinner(`Welcome, ${getUserDisplayName(user)}!`);\n logger.success(`Plan: ${plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Browser authentication failed');\n logger.error(error.message || 'Unknown error');\n throw error;\n }\n}\n\n/**\n * Login with existing API key\n */\nasync function loginWithApiKey(): Promise<void> {\n const dashboardUrl = terminalLink(\n 'dashboard',\n 'https://devwing.ai/dashboard/api-keys',\n { fallback: () => 'https://devwing.ai/dashboard/api-keys' }\n );\n\n logger.info(`Get your API key from the ${dashboardUrl}`);\n logger.newline();\n\n const { apiKey } = await inquirer.prompt([\n {\n type: 'password',\n name: 'apiKey',\n message: 'API Key:',\n mask: '*',\n validate: (input) => {\n if (!input.startsWith('dw_sk_')) {\n return 'Invalid API key format. Should start with \"dw_sk_\"';\n }\n if (input.length < 20) {\n return 'API key seems too short';\n }\n return true;\n },\n },\n ]);\n\n logger.startSpinner('Verifying API key...');\n\n try {\n // Store temporarily to test\n await configManager.setApiKey(apiKey);\n\n // Verify by fetching profile\n const user = await apiClient.getProfile();\n const plan = getUserPlan(user);\n\n logger.succeedSpinner(`Authenticated as ${getUserDisplayName(user)}!`);\n logger.success(`Plan: ${plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n // Remove invalid key\n await configManager.deleteApiKey();\n logger.failSpinner('Invalid API key');\n logger.error(error.message || 'Could not verify API key');\n throw error;\n }\n}\n\n/**\n * Logout command - remove stored credentials\n */\nexport async function logoutCommand(): Promise<void> {\n try {\n const apiKey = await configManager.getApiKey();\n\n if (!apiKey) {\n logger.info('You are not logged in');\n return;\n }\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Are you sure you want to log out?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.info('Logout cancelled');\n return;\n }\n\n // Delete API key from keychain\n await configManager.deleteApiKey();\n\n // Clear config (but keep API URL)\n const apiUrl = configManager.getApiUrl();\n configManager.clear();\n configManager.setApiUrl(apiUrl);\n\n logger.success('Successfully logged out');\n } catch (error: any) {\n logger.error('Logout failed');\n logger.error(error.message || 'Unknown error');\n process.exit(1);\n }\n}\n\n/**\n * Status command - show authentication status\n */\nexport async function statusCommand(): Promise<void> {\n try {\n const apiKey = await configManager.getApiKey();\n\n if (!apiKey) {\n logger.warn('Not authenticated');\n logger.info('Run \"devwing login\" to get started');\n return;\n }\n\n logger.startSpinner('Fetching profile...');\n\n try {\n const user = await apiClient.getProfile();\n const plan = getUserPlan(user);\n\n logger.succeedSpinner('Authenticated');\n logger.newline();\n\n console.log(chalk.bold('User Profile:'));\n console.log(` Email: ${user.email}`);\n console.log(` Name: ${getUserDisplayName(user)}`);\n console.log(` Plan: ${plan.toUpperCase()}`);\n if (user.is_verified !== undefined) {\n console.log(` Verified: ${user.is_verified ? chalk.green('Yes') : chalk.yellow('No')}`);\n }\n if (user.totp_enabled !== undefined) {\n console.log(` 2FA: ${user.totp_enabled ? chalk.green('Enabled') : chalk.dim('Disabled')}`);\n }\n\n const config = configManager.getAll();\n if (config.workspaceId) {\n console.log(` Workspace: ${config.workspaceId}`);\n }\n if (config.projectId) {\n console.log(` Project: ${config.projectId}`);\n }\n\n logger.newline();\n } catch (error: any) {\n logger.failSpinner('Failed to fetch profile');\n logger.error(error.message || 'API key may be invalid or expired');\n logger.info('Run \"devwing login\" to re-authenticate');\n }\n } catch (error: any) {\n logger.error('Failed to check status');\n logger.error(error.message || 'Unknown error');\n process.exit(1);\n }\n}\n\n/**\n * Show quick start guide\n */\nfunction showQuickStart(): void {\n logger.box(\n [\n 'Quick Start:',\n '',\n ' devwing \"fix the auth bug\" Ask anything',\n ' devwing chat Interactive chat mode',\n ' devwing scan Security scan',\n ' devwing review Code review',\n ' devwing explain file.js Explain code',\n '',\n 'For more commands, run: devwing --help',\n ].join('\\n'),\n { title: 'Ready to go!', color: 'green' }\n );\n}","/**\n * Context Collector\n * Scans project files and collects relevant context for AI\n */\n\nimport { promises as fs } from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { execSync } from 'child_process';\nimport { simpleGit, SimpleGit } from 'simple-git';\nimport { CollectedContext, FileContext } from '../types/index.js';\nimport { logger } from '../utils/logger.js';\n\ninterface CollectorOptions {\n maxFiles?: number;\n maxFileSize?: number; // in bytes\n maxTotalTokens?: number;\n includePatterns?: string[];\n excludePatterns?: string[];\n}\n\nconst DEFAULT_OPTIONS: CollectorOptions = {\n maxFiles: 50,\n maxFileSize: 100 * 1024, // 100KB\n maxTotalTokens: 100_000,\n excludePatterns: [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/.git/**',\n '**/coverage/**',\n '**/.next/**',\n '**/.vscode/**',\n '**/.idea/**',\n '**/*.log',\n '**/*.lock',\n '**/package-lock.json',\n '**/yarn.lock',\n '**/pnpm-lock.yaml',\n ],\n};\n\nclass ContextCollector {\n private git: SimpleGit;\n private cwd: string;\n private options: CollectorOptions;\n\n constructor(cwd: string = process.cwd(), options: CollectorOptions = {}) {\n this.cwd = cwd;\n this.git = simpleGit(cwd);\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Collect all context for AI completion\n */\n async collect(prompt?: string): Promise<CollectedContext> {\n logger.debug('Collecting context from:', this.cwd);\n\n const context: CollectedContext = {\n files: [],\n cwd: this.cwd,\n shell: this.detectShell(),\n os: os.platform(),\n };\n\n // Collect git information\n try {\n const isRepo = await this.git.checkIsRepo();\n if (isRepo) {\n context.git_branch = await this.getCurrentBranch();\n context.git_diff = await this.getGitDiff();\n context.git_log = await this.getRecentCommits();\n }\n } catch (error) {\n logger.debug('Not a git repository or git not available');\n }\n\n // Detect runtime versions\n context.node_version = this.getNodeVersion();\n context.python_version = this.getPythonVersion();\n\n // Detect framework\n context.framework = await this.detectFramework();\n\n // Collect relevant files\n context.files = await this.collectFiles(prompt);\n\n logger.debug(`Collected ${context.files.length} files`);\n return context;\n }\n\n /**\n * Collect relevant files based on prompt and project state\n */\n private async collectFiles(prompt?: string): Promise<FileContext[]> {\n const files: FileContext[] = [];\n\n // 1. Get modified files from git (highest priority)\n const modifiedFiles = await this.getModifiedFiles();\n\n // 2. Get files mentioned in prompt\n const mentionedFiles = prompt ? this.extractFilePaths(prompt) : [];\n\n // 3. Get important config files\n const configFiles = await this.getConfigFiles();\n\n // Combine and deduplicate\n const filePaths = Array.from(\n new Set([...modifiedFiles, ...mentionedFiles, ...configFiles])\n );\n\n // Read files\n for (const filePath of filePaths.slice(0, this.options.maxFiles!)) {\n try {\n const fullPath = path.resolve(this.cwd, filePath);\n const stat = await fs.stat(fullPath);\n\n // Skip large files\n if (stat.size > this.options.maxFileSize!) {\n logger.debug(`Skipping large file: ${filePath} (${stat.size} bytes)`);\n continue;\n }\n\n const content = await fs.readFile(fullPath, 'utf-8');\n const language = this.detectLanguage(filePath);\n\n files.push({\n path: filePath,\n content,\n language,\n size: stat.size,\n });\n } catch (error) {\n logger.debug(`Failed to read file ${filePath}:`, error);\n }\n }\n\n return files;\n }\n\n /**\n * Get modified files from git\n */\n private async getModifiedFiles(): Promise<string[]> {\n try {\n const status = await this.git.status();\n return [\n ...status.modified,\n ...status.created,\n ...status.staged,\n ];\n } catch (error) {\n return [];\n }\n }\n\n /**\n * Extract file paths mentioned in prompt\n */\n private extractFilePaths(prompt: string): string[] {\n const paths: string[] = [];\n // Match common file path patterns\n const patterns = [\n /[\\w-]+\\/[\\w-/.]+\\.\\w+/g, // path/to/file.ext\n /[\\w-]+\\.\\w+/g, // file.ext\n ];\n\n for (const pattern of patterns) {\n const matches = prompt.match(pattern);\n if (matches) {\n paths.push(...matches);\n }\n }\n\n return paths;\n }\n\n /**\n * Get important config files\n */\n private async getConfigFiles(): Promise<string[]> {\n const configPatterns = [\n 'package.json',\n 'tsconfig.json',\n 'requirements.txt',\n 'Pipfile',\n 'Dockerfile',\n 'docker-compose.yml',\n '.env.example',\n 'README.md',\n ];\n\n const files: string[] = [];\n\n for (const pattern of configPatterns) {\n try {\n const fullPath = path.join(this.cwd, pattern);\n await fs.access(fullPath);\n files.push(pattern);\n } catch {\n // File doesn't exist, skip\n }\n }\n\n return files;\n }\n\n /**\n * Get current git branch\n */\n private async getCurrentBranch(): Promise<string> {\n try {\n const branch = await this.git.revparse(['--abbrev-ref', 'HEAD']);\n return branch.trim();\n } catch {\n return 'unknown';\n }\n }\n\n /**\n * Get git diff\n */\n private async getGitDiff(): Promise<string> {\n try {\n const diff = await this.git.diff();\n return diff.substring(0, 10_000); // Limit diff size\n } catch {\n return '';\n }\n }\n\n /**\n * Get recent commits\n */\n private async getRecentCommits(): Promise<string> {\n try {\n const log = await this.git.log({ maxCount: 5 });\n return log.all\n .map((commit) => `${commit.hash.substring(0, 7)} - ${commit.message}`)\n .join('\\n');\n } catch {\n return '';\n }\n }\n\n /**\n * Detect shell type\n */\n private detectShell(): string {\n return path.basename(process.env.SHELL || 'sh');\n }\n\n /**\n * Get Node.js version\n */\n private getNodeVersion(): string | undefined {\n try {\n return process.version;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Get Python version\n */\n private getPythonVersion(): string | undefined {\n try {\n const version = execSync('python --version 2>&1', { encoding: 'utf-8' });\n return version.trim();\n } catch {\n return undefined;\n }\n }\n\n /**\n * Detect framework from package.json or requirements.txt\n */\n private async detectFramework(): Promise<string | undefined> {\n try {\n // Check for Node.js frameworks\n const packageJsonPath = path.join(this.cwd, 'package.json');\n try {\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\n\n if (deps.next) return 'Next.js';\n if (deps.react) return 'React';\n if (deps.vue) return 'Vue';\n if (deps['@angular/core']) return 'Angular';\n if (deps.express) return 'Express';\n if (deps.fastify) return 'Fastify';\n } catch {\n // package.json doesn't exist\n }\n\n // Check for Python frameworks\n const requirementsPath = path.join(this.cwd, 'requirements.txt');\n try {\n const requirements = await fs.readFile(requirementsPath, 'utf-8');\n if (requirements.includes('django')) return 'Django';\n if (requirements.includes('flask')) return 'Flask';\n if (requirements.includes('fastapi')) return 'FastAPI';\n } catch {\n // requirements.txt doesn't exist\n }\n } catch (error) {\n logger.debug('Failed to detect framework:', error);\n }\n\n return undefined;\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 const languageMap: Record<string, string> = {\n '.js': 'javascript',\n '.jsx': 'javascript',\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.py': 'python',\n '.rb': 'ruby',\n '.go': 'go',\n '.rs': 'rust',\n '.java': 'java',\n '.cpp': 'cpp',\n '.c': 'c',\n '.h': 'c',\n '.hpp': 'cpp',\n '.cs': 'csharp',\n '.php': 'php',\n '.swift': 'swift',\n '.kt': 'kotlin',\n '.dart': 'dart',\n '.sh': 'bash',\n '.yml': 'yaml',\n '.yaml': 'yaml',\n '.json': 'json',\n '.xml': 'xml',\n '.html': 'html',\n '.css': 'css',\n '.scss': 'scss',\n '.md': 'markdown',\n '.sql': 'sql',\n };\n\n return languageMap[ext] || 'text';\n }\n}\n\nexport { ContextCollector, CollectorOptions };\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { exec } from 'child_process';\nimport util from 'util';\nimport axios from 'axios';\nimport { simpleGit } from 'simple-git';\n\nconst execAsync = util.promisify(exec);\n\nexport interface ToolResult {\n success: boolean;\n output: string;\n error?: string;\n metadata?: Record<string, any>;\n}\n\nexport class ToolEngine {\n private allowedProjectPath: string;\n private commandTimeout: number = 30000; // 30 seconds\n private maxFileSize: number = 10 * 1024 * 1024; // 10MB\n\n constructor(allowedProjectPath: string = process.cwd()) {\n this.allowedProjectPath = path.resolve(allowedProjectPath);\n }\n\n /**\n * Validate and resolve file path to prevent directory traversal\n */\n private validatePath(filePath: string): string {\n const resolvedPath = path.resolve(this.allowedProjectPath, filePath);\n \n // Check if path is within allowed directory\n if (!resolvedPath.startsWith(this.allowedProjectPath)) {\n throw new Error(`Security Error: Path '${filePath}' is outside allowed project directory`);\n }\n\n return resolvedPath;\n }\n\n // =================================================================\n // FILE OPERATIONS\n // =================================================================\n\n async readFile(filePath: string): Promise<ToolResult> {\n try {\n const validatedPath = this.validatePath(filePath);\n \n try {\n const stat = await fs.stat(validatedPath);\n if (!stat.isFile()) {\n return { success: false, output: '', error: `Path is not a file: ${filePath}` };\n }\n \n if (stat.size > this.maxFileSize) {\n return { success: false, output: '', error: `File too large: ${stat.size} bytes (max ${this.maxFileSize})` };\n }\n \n const content = await fs.readFile(validatedPath, 'utf-8');\n return {\n success: true,\n output: content,\n metadata: { size: stat.size, lines: content.split('\\n').length }\n };\n } catch (e: any) {\n if (e.code === 'ENOENT') {\n return { success: false, output: '', error: `File not found: ${filePath}` };\n }\n throw e;\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async writeFile(filePath: string, content: string, userConfirmed: boolean = false): Promise<ToolResult> {\n if (!userConfirmed) {\n return { success: false, output: '', error: 'User confirmation required for write_file operation' };\n }\n\n try {\n const validatedPath = this.validatePath(filePath);\n await fs.mkdir(path.dirname(validatedPath), { recursive: true });\n await fs.writeFile(validatedPath, content, 'utf-8');\n \n return {\n success: true,\n output: `File written: ${filePath}`,\n metadata: { path: validatedPath, size: Buffer.byteLength(content, 'utf8') }\n };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async listDirectory(dirPath: string = '.'): Promise<ToolResult> {\n try {\n const validatedPath = this.validatePath(dirPath);\n \n try {\n const stat = await fs.stat(validatedPath);\n if (!stat.isDirectory()) {\n return { success: false, output: '', error: `Path is not a directory: ${dirPath}` };\n }\n \n const items = await fs.readdir(validatedPath, { withFileTypes: true });\n \n const formattedItems = await Promise.all(items.map(async (item) => {\n const itemType = item.isDirectory() ? 'dir' : 'file';\n let size = 0;\n \n if (item.isFile()) {\n try {\n const itemStat = await fs.stat(path.join(validatedPath, item.name));\n size = itemStat.size;\n } catch (e) {\n // Ignore error getting size\n }\n }\n \n return { name: item.name, type: itemType, size };\n }));\n\n // Sort: directories first, then files alphabetically\n formattedItems.sort((a, b) => {\n if (a.type === b.type) return a.name.localeCompare(b.name);\n return a.type === 'dir' ? -1 : 1;\n });\n\n const outputLines = formattedItems.map(item => {\n return item.type === 'dir' ? `📁 ${item.name}/` : `📄 ${item.name} (${item.size} bytes)`;\n });\n\n return {\n success: true,\n output: outputLines.join('\\n'),\n metadata: { item_count: formattedItems.length }\n };\n } catch (e: any) {\n if (e.code === 'ENOENT') {\n return { success: false, output: '', error: `Directory not found: ${dirPath}` };\n }\n throw e;\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // SHELL EXECUTION\n // =================================================================\n\n async runCommand(command: string, cwd?: string, userConfirmed: boolean = false): Promise<ToolResult> {\n if (!userConfirmed) {\n return { success: false, output: '', error: 'User confirmation required for run_command operation' };\n }\n\n try {\n let execCwd = this.allowedProjectPath;\n if (cwd) {\n execCwd = this.validatePath(cwd);\n const stat = await fs.stat(execCwd);\n if (!stat.isDirectory()) {\n return { success: false, output: '', error: `Working directory not found: ${cwd}` };\n }\n }\n\n try {\n const { stdout, stderr } = await execAsync(command, { \n cwd: execCwd, \n timeout: this.commandTimeout,\n env: { ...process.env, TERM: 'dumb' }\n });\n\n return {\n success: true,\n output: stdout || stderr, // Some commands write to stderr even on success\n metadata: { command }\n };\n } catch (e: any) {\n return {\n success: false,\n output: e.stdout || '',\n error: e.stderr || e.message,\n metadata: { command, exit_code: e.code }\n };\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // GIT OPERATIONS\n // =================================================================\n\n async gitDiff(cwd?: string): Promise<ToolResult> {\n try {\n let gitCwd = this.allowedProjectPath;\n if (cwd) gitCwd = this.validatePath(cwd);\n \n const git = simpleGit(gitCwd);\n const diff = await git.diff();\n \n return { success: true, output: diff };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async gitLog(limit: number = 5, cwd?: string): Promise<ToolResult> {\n try {\n let gitCwd = this.allowedProjectPath;\n if (cwd) gitCwd = this.validatePath(cwd);\n \n const git = simpleGit(gitCwd);\n const log = await git.log({ maxCount: limit });\n\n const output = log.all.map(commit => `${commit.hash.substring(0, 7)} - ${commit.message}`).join('\\n');\n return { success: true, output };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async gitCommit(message: string, cwd?: string, userConfirmed: boolean = false): Promise<ToolResult> {\n if (!userConfirmed) {\n return { success: false, output: '', error: 'User confirmation required for git_commit operation' };\n }\n\n try {\n let gitCwd = this.allowedProjectPath;\n if (cwd) gitCwd = this.validatePath(cwd);\n \n const git = simpleGit(gitCwd);\n const result = await git.commit(message);\n \n return { \n success: true, \n output: `Committed: ${result.commit}\nBranch: ${result.branch}\nSummary: ${result.summary.changes} changes, ${result.summary.insertions} insertions, ${result.summary.deletions} deletions` \n };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // EXTERNAL API OPERATIONS\n // =================================================================\n\n async searchDocs(query: string, source: string = 'mdn'): Promise<ToolResult> {\n try {\n if (source === 'mdn') {\n const url = `https://developer.mozilla.org/api/v1/search?q=${encodeURIComponent(query)}`;\n const response = await axios.get(url, { timeout: 10000 });\n return { success: true, output: JSON.stringify(response.data, null, 2), metadata: { source } };\n } else if (source === 'stackoverflow') {\n const url = `https://api.stackexchange.com/2.3/search?order=desc&sort=activity&intitle=${encodeURIComponent(query)}&site=stackoverflow`;\n const response = await axios.get(url, { timeout: 10000 });\n return { success: true, output: JSON.stringify(response.data, null, 2), metadata: { source } };\n } else {\n return { success: false, output: '', error: `Unsupported documentation source: ${source}` };\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async httpRequest(url: string, method: string = 'GET', headers?: Record<string, string>, body?: string): Promise<ToolResult> {\n try {\n const response = await axios({\n url,\n method,\n headers,\n data: body,\n timeout: 10000\n });\n return { \n success: true, \n output: typeof response.data === 'string' ? response.data : JSON.stringify(response.data, null, 2), \n metadata: { status_code: response.status } \n };\n } catch (e: any) {\n return { \n success: false, \n output: '', \n error: e.response ? `HTTP ${e.response.status}: ${e.message}` : e.message \n };\n }\n }\n\n async cveLookup(cveId: string): Promise<ToolResult> {\n try {\n const url = `https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=${encodeURIComponent(cveId)}`;\n const response = await axios.get(url, { timeout: 10000 });\n return { success: true, output: JSON.stringify(response.data, null, 2), metadata: { cve_id: cveId } };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // TOOL EXECUTION DISPATCHER\n // =================================================================\n\n async executeTool(toolName: string, args: Record<string, any>, userConfirmed: boolean = false): Promise<ToolResult> {\n switch (toolName) {\n case 'read_file':\n return this.readFile(args.file_path || '');\n case 'write_file':\n return this.writeFile(args.file_path || '', args.content || '', userConfirmed);\n case 'list_directory':\n return this.listDirectory(args.dir_path || '.');\n case 'run_command':\n return this.runCommand(args.command || '', args.cwd, userConfirmed);\n case 'git_diff':\n return this.gitDiff(args.cwd);\n case 'git_log':\n return this.gitLog(args.limit || 5, args.cwd);\n case 'git_commit':\n return this.gitCommit(args.message || '', args.cwd, userConfirmed);\n case 'search_docs':\n return this.searchDocs(args.query || '', args.source || 'mdn');\n case 'http_request':\n return this.httpRequest(args.url || '', args.method || 'GET', args.headers, args.body);\n case 'cve_lookup':\n return this.cveLookup(args.cve_id || '');\n default:\n return { success: false, output: '', error: `Tool not implemented: ${toolName}` };\n }\n }\n}\n","/**\n * Streaming Renderer\n * Renders AI responses in terminal with syntax highlighting\n */\n\nimport chalk from 'chalk';\nimport { marked } from 'marked';\nimport TerminalRenderer from 'marked-terminal';\nimport { StreamMessage, ToolResult } from '../types/index.js';\nimport { logger } from '../utils/logger.js';\nimport inquirer from 'inquirer';\nimport { ToolEngine } from '../tools/engine.js';\n\n// Configure marked for terminal rendering\nmarked.setOptions({\n renderer: new TerminalRenderer({\n code: chalk.cyan,\n blockquote: chalk.gray.italic,\n html: chalk.gray,\n heading: chalk.bold.underline,\n firstHeading: chalk.bold.magenta,\n hr: chalk.reset,\n listitem: chalk.reset,\n list: chalk.reset,\n table: chalk.reset,\n paragraph: chalk.reset,\n strong: chalk.bold,\n em: chalk.italic,\n codespan: chalk.cyan,\n del: chalk.dim.strikethrough,\n link: chalk.blue.underline,\n href: chalk.blue.underline,\n }) as any,\n});\n\nclass StreamingRenderer {\n private buffer: string = '';\n private inCodeBlock: boolean = false;\n private toolEngine: ToolEngine;\n private pendingToolCalls: Array<{tool: string, args: any}> = [];\n private sessionId: string | null = null;\n\n constructor() {\n this.toolEngine = new ToolEngine(process.cwd());\n }\n\n getPendingToolCalls(): Array<{tool: string, args: any}> {\n return this.pendingToolCalls;\n }\n\n getSessionId(): string | null {\n return this.sessionId;\n }\n\n clearPendingTools(): void {\n this.pendingToolCalls = [];\n this.sessionId = null;\n }\n\n /**\n * Process stream message\n */\n async processMessage(message: StreamMessage): Promise<void> {\n switch (message.type) {\n case 'token':\n await this.handleToken(message.content || '');\n break;\n\n case 'tool_call':\n // Collect tool call for later execution\n if (message.tool) {\n this.pendingToolCalls.push({\n tool: message.tool,\n args: message.args || {}\n });\n await this.handleToolCall(message);\n }\n break;\n\n case 'tools_pending':\n // Backend is waiting for CLI to execute tools\n if (message.session_id) {\n this.sessionId = message.session_id;\n }\n await this.flushBuffer();\n break;\n\n case 'tool_result':\n await this.handleToolResult(message);\n break;\n\n case 'done':\n await this.handleDone(message);\n break;\n\n case 'error':\n await this.handleError(message);\n break;\n }\n }\n\n /**\n * Handle token (word/character from AI)\n */\n private async handleToken(token: string): Promise<void> {\n this.buffer += token;\n\n // Check for code blocks\n if (token.includes('```')) {\n this.inCodeBlock = !this.inCodeBlock;\n }\n\n // Flush buffer on newlines or when buffer gets large\n if (token.includes('\\n') || this.buffer.length > 1000) {\n await this.flushBuffer();\n } else {\n // Stream individual tokens for real-time feel\n process.stdout.write(token);\n }\n }\n\n /**\n * Flush accumulated buffer\n */\n private async flushBuffer(): Promise<void> {\n if (this.buffer.length === 0) return;\n\n // Don't render markdown mid-code-block\n if (this.inCodeBlock) {\n process.stdout.write(this.buffer);\n } else {\n // Render markdown\n try {\n const rendered = await marked(this.buffer);\n process.stdout.write(rendered);\n } catch (error) {\n // Fallback to plain text\n process.stdout.write(this.buffer);\n }\n }\n\n this.buffer = '';\n }\n\n /**\n * Handle tool call request from AI - just display it, execution happens later\n */\n private async handleToolCall(message: StreamMessage): Promise<void> {\n await this.flushBuffer();\n logger.newline();\n\n const { tool, args } = message;\n if (!tool) return;\n\n logger.info(chalk.yellow(`AI requested tool: ${chalk.bold(tool)}`));\n\n // Show tool arguments\n if (args && Object.keys(args).length > 0) {\n console.log(chalk.gray('Arguments:'));\n console.log(chalk.gray(JSON.stringify(args, null, 2)));\n }\n\n logger.newline();\n }\n\n /**\n * Execute all pending tool calls\n * This is called from prompt.ts after stream ends\n */\n async executePendingTools(): Promise<ToolResult[]> {\n const results: ToolResult[] = [];\n\n for (const { tool, args } of this.pendingToolCalls) {\n logger.newline();\n logger.info(chalk.yellow(`Executing ${chalk.bold(tool)}...`));\n\n // Check if tool requires confirmation\n const requiresConfirmation = this.requiresConfirmation(tool);\n let confirmed = true;\n\n if (requiresConfirmation) {\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmed',\n message: `Allow ${tool} to execute?`,\n default: false,\n },\n ]);\n confirmed = answers.confirmed;\n\n if (!confirmed) {\n logger.warn('Tool execution cancelled by user');\n results.push({\n tool,\n args,\n result: 'User denied permission',\n success: false\n });\n continue;\n }\n }\n\n logger.startSpinner(`Executing ${tool}...`);\n\n try {\n // Execute locally using ToolEngine\n const result = await this.toolEngine.executeTool(tool, args || {}, confirmed);\n\n logger.stopSpinner();\n\n if (result.success) {\n logger.success(`${tool} completed successfully`);\n\n const content = result.output || '';\n const preview = content.substring(0, 500);\n if (preview.length < content.length) {\n console.log(chalk.gray(preview + '... (truncated)'));\n } else {\n console.log(chalk.gray(preview));\n }\n\n results.push({\n tool,\n args,\n result: result.output || '',\n success: true\n });\n } else {\n logger.error(`${tool} failed: ${result.error}`);\n results.push({\n tool,\n args,\n result: result.error || 'Unknown error',\n success: false\n });\n }\n } catch (error: any) {\n logger.stopSpinner();\n logger.error(`${tool} threw error: ${error.message}`);\n results.push({\n tool,\n args,\n result: error.message,\n success: false\n });\n }\n }\n\n return results;\n }\n\n /**\n * Handle tool execution result (from backend)\n */\n private async handleToolResult(message: StreamMessage): Promise<void> {\n logger.stopSpinner();\n\n if (message.content) {\n // Show abbreviated result\n const preview = message.content.substring(0, 500);\n if (preview.length < message.content.length) {\n console.log(chalk.gray(preview + '... (truncated)'));\n } else {\n console.log(chalk.gray(preview));\n }\n }\n\n logger.newline();\n }\n\n /**\n * Handle completion done\n */\n private async handleDone(message: StreamMessage): Promise<void> {\n await this.flushBuffer();\n logger.newline();\n\n if (message.usage) {\n const { tokens_in, tokens_out, cost_usd } = message.usage;\n console.log(\n chalk.gray(\n `📊 Tokens: ${tokens_in.toLocaleString()} in, ${tokens_out.toLocaleString()} out | Cost: $${cost_usd.toFixed(4)}`\n )\n );\n }\n\n logger.newline();\n }\n\n /**\n * Handle error\n */\n private async handleError(message: StreamMessage): Promise<void> {\n await this.flushBuffer();\n logger.newline();\n logger.error(message.error || 'An error occurred');\n }\n\n /**\n * Check if tool requires user confirmation\n */\n private requiresConfirmation(tool: string): boolean {\n const destructiveTools = [\n 'write_file',\n 'run_command',\n 'git_commit',\n 'delete_file',\n 'modify_file',\n ];\n\n return destructiveTools.includes(tool);\n }\n\n /**\n * Reset renderer state\n */\n reset(): void {\n this.buffer = '';\n this.inCodeBlock = false;\n }\n}\n\nexport const streamingRenderer = new StreamingRenderer();\n","/**\n * Main Prompt Command\n * Sends natural language prompts to AI and streams responses\n */\n\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { ContextCollector } from '../context/collector.js';\nimport { streamingRenderer } from '../streaming/renderer.js';\nimport { logger } from '../utils/logger.js';\nimport { CLIOptions, CompletionRequest } from '../types/index.js';\n\n/**\n * Handle main prompt command\n */\nexport async function promptCommand(prompt: string, options: CLIOptions): Promise<void> {\n try {\n // Check authentication\n const apiKey = await configManager.getApiKey();\n if (!apiKey) {\n logger.error('Not authenticated. Run \"devwing login\" first.');\n process.exit(1);\n }\n\n // Collect context\n logger.startSpinner('Analyzing codebase...');\n const collector = new ContextCollector(process.cwd());\n const context = await collector.collect(prompt);\n logger.succeedSpinner('Context collected');\n\n logger.newline();\n logger.info('DevWing is thinking...');\n logger.newline();\n\n // Build completion request\n const request: CompletionRequest = {\n prompt,\n mode: options.mode,\n model: options.model,\n project_id: options.project || configManager.getProjectId(),\n context,\n stream: true,\n max_tokens: 4096,\n };\n\n // Main tool execution loop\n let continueLoop = true;\n\n while (continueLoop) {\n // Reset renderer state for each iteration\n streamingRenderer.reset();\n streamingRenderer.clearPendingTools();\n\n try {\n // Check if this is a continuation or initial request\n const sessionId = streamingRenderer.getSessionId();\n\n if (sessionId) {\n // This is a continuation - get tool results and call /completions/continue\n const toolResults = await streamingRenderer.executePendingTools();\n\n logger.newline();\n logger.info('Sending tool results back to AI...');\n logger.newline();\n\n // Stream continuation with tool results\n for await (const message of apiClient.continueCompletion(sessionId, toolResults)) {\n await streamingRenderer.processMessage(message);\n }\n } else {\n // Initial request - call /completions\n for await (const message of apiClient.streamCompletion(request)) {\n await streamingRenderer.processMessage(message);\n }\n }\n\n // Check if we have pending tools that need execution\n const pendingTools = streamingRenderer.getPendingToolCalls();\n const newSessionId = streamingRenderer.getSessionId();\n\n if (pendingTools.length > 0 && newSessionId) {\n // AI wants more tools executed - continue loop\n continueLoop = true;\n } else {\n // No more tools or no session ID - end loop\n continueLoop = false;\n }\n\n } catch (error: any) {\n logger.newline();\n logger.error('Request failed:', error);\n\n // Handle common errors\n if (error.message.includes('429')) {\n logger.warn('Rate limit exceeded. Please wait a moment and try again.');\n } else if (error.message.includes('quota')) {\n logger.warn('Token quota exceeded. Consider upgrading your plan.');\n } else if (error.message.includes('unauthorized')) {\n logger.warn('Authentication failed. Try running \"devwing login\" again.');\n }\n\n process.exit(1);\n }\n }\n\n logger.success('Done!');\n\n } catch (error: any) {\n logger.error('Command failed', error);\n process.exit(1);\n }\n}\n","/**\n * Specialized Commands\n * scan, review, explain, memory, etc.\n */\n\nimport { promptCommand } from './prompt.js';\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { logger } from '../utils/logger.js';\nimport { CLIOptions, AIMode } from '../types/index.js';\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport inquirer from 'inquirer';\n\n/**\n * Security scan command\n */\nexport async function scanCommand(options: CLIOptions): Promise<void> {\n logger.info('Running security vulnerability scan...');\n logger.newline();\n\n const prompt = `Perform a comprehensive security scan of this codebase. Check for:\n- Common vulnerabilities (OWASP Top 10)\n- Dependency vulnerabilities\n- Hardcoded secrets or credentials\n- SQL injection risks\n- XSS vulnerabilities\n- Insecure authentication/authorization\n- API security issues\n\nProvide a detailed report with severity levels and remediation steps.`;\n\n await promptCommand(prompt, { ...options, mode: 'security' });\n}\n\n/**\n * Code review command\n */\nexport async function reviewCommand(options: CLIOptions): Promise<void> {\n logger.info('Performing code review...');\n logger.newline();\n\n const prompt = `Conduct a thorough code review of the recent changes. Focus on:\n- Code quality and best practices\n- Potential bugs or edge cases\n- Performance issues\n- Readability and maintainability\n- Documentation completeness\n- Test coverage\n- Security concerns\n\nProvide specific suggestions for improvement.`;\n\n await promptCommand(prompt, { ...options, mode: options.mode || 'general' });\n}\n\n/**\n * Explain command - explain code, file, or concept\n */\nexport async function explainCommand(target: string, options: CLIOptions): Promise<void> {\n logger.info(`Explaining: ${target}`);\n logger.newline();\n\n const prompt = `Please explain ${target} in detail. Include:\n- What it does and how it works\n- Key components and their relationships\n- Any important patterns or techniques used\n- Potential gotchas or edge cases\n- How it fits into the larger system\n\nMake the explanation clear and accessible.`;\n\n await promptCommand(prompt, { ...options });\n}\n\n/**\n * Memory commands\n */\nexport async function memoryCommand(\n action: 'save' | 'show' | 'clear',\n content?: string,\n options: CLIOptions = {}\n): Promise<void> {\n const projectId = options.project || configManager.getProjectId();\n\n if (!projectId) {\n logger.error('No project configured. Use \"devwing config set project <project-id>\"');\n return;\n }\n\n try {\n switch (action) {\n case 'save':\n await memorySave(projectId, content!);\n break;\n\n case 'show':\n await memoryShow(projectId);\n break;\n\n case 'clear':\n await memoryClear(projectId);\n break;\n }\n } catch (error: any) {\n logger.error('Memory command failed', error);\n process.exit(1);\n }\n}\n\n/**\n * Save to project memory\n */\nasync function memorySave(projectId: string, content: string): Promise<void> {\n if (!content) {\n logger.error('Please provide content to save');\n return;\n }\n\n const { type } = await inquirer.prompt([\n {\n type: 'list',\n name: 'type',\n message: 'What type of memory is this?',\n choices: [\n { name: 'Context (general information)', value: 'context' },\n { name: 'Rule (coding standard or guideline)', value: 'rule' },\n { name: 'Decision (architectural decision)', value: 'decision' },\n { name: 'Summary (project summary)', value: 'summary' },\n ],\n },\n ]);\n\n logger.startSpinner('Saving to project memory...');\n\n try {\n await apiClient.addProjectMemory(projectId, content, type);\n logger.succeedSpinner('Memory saved successfully');\n } catch (error) {\n logger.failSpinner('Failed to save memory');\n throw error;\n }\n}\n\n/**\n * Show project memory\n */\nasync function memoryShow(projectId: string): Promise<void> {\n logger.startSpinner('Loading project memory...');\n\n try {\n const memories = await apiClient.getProjectMemory(projectId);\n logger.stopSpinner();\n\n if (memories.length === 0) {\n logger.info('No memories stored for this project yet');\n return;\n }\n\n logger.success(`Found ${memories.length} memory items`);\n logger.newline();\n\n // Create table\n const table = new Table({\n head: ['Type', 'Content', 'Created'],\n colWidths: [15, 60, 20],\n wordWrap: true,\n });\n\n for (const memory of memories) {\n const preview =\n memory.content.length > 100\n ? memory.content.substring(0, 100) + '...'\n : memory.content;\n\n table.push([\n chalk.cyan(memory.type),\n preview,\n new Date(memory.created_at).toLocaleDateString(),\n ]);\n }\n\n console.log(table.toString());\n } catch (error) {\n logger.failSpinner('Failed to load memory');\n throw error;\n }\n}\n\n/**\n * Clear project memory\n */\nasync function memoryClear(projectId: string): Promise<void> {\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Are you sure you want to clear all project memory?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.info('Operation cancelled');\n return;\n }\n\n logger.startSpinner('Clearing project memory...');\n\n try {\n const memories = await apiClient.getProjectMemory(projectId);\n\n for (const memory of memories) {\n await apiClient.deleteProjectMemory(projectId, memory.id);\n }\n\n logger.succeedSpinner('Project memory cleared');\n } catch (error) {\n logger.failSpinner('Failed to clear memory');\n throw error;\n }\n}\n\n/**\n * Config command\n */\nexport async function configCommand(\n action?: 'set' | 'get' | 'list',\n key?: string,\n value?: string\n): Promise<void> {\n try {\n if (!action || action === 'list') {\n // Show all config\n const config = configManager.getAll();\n const apiKey = await configManager.getApiKey();\n\n console.log(chalk.bold('Current Configuration:'));\n console.log(` API URL: ${config.apiUrl}`);\n console.log(` API Key: ${apiKey ? apiKey.substring(0, 12) + '...' : 'Not set'}`);\n console.log(` Workspace: ${config.workspaceId || 'Not set'}`);\n console.log(` Project: ${config.projectId || 'Not set'}`);\n console.log(` Model: ${config.model || 'Auto'}`);\n console.log(` Mode: ${config.mode || 'Auto'}`);\n console.log();\n console.log(chalk.gray(`Config file: ${configManager.getPath()}`));\n return;\n }\n\n if (action === 'get') {\n if (!key) {\n logger.error('Please specify a key to get');\n return;\n }\n\n const config = configManager.getAll();\n const val = (config as any)[key];\n console.log(val || 'Not set');\n return;\n }\n\n if (action === 'set') {\n if (!key || !value) {\n logger.error('Please specify both key and value');\n return;\n }\n\n // Handle different config keys\n switch (key) {\n case 'project':\n configManager.setProjectId(value);\n logger.success(`project set to: ${value}`);\n break;\n case 'workspace':\n configManager.setWorkspaceId(value);\n logger.success(`workspace set to: ${value}`);\n break;\n case 'model':\n configManager.setModel(value);\n logger.success(`model set to: ${value}`);\n break;\n case 'mode':\n // Validate AI mode\n const validModes: AIMode[] = ['general', 'frontend', 'backend', 'security', 'devops'];\n if (validModes.includes(value as AIMode)) {\n configManager.setMode(value as AIMode);\n logger.success(`mode set to: ${value}`);\n } else {\n logger.error(`Invalid mode. Must be one of: ${validModes.join(', ')}`);\n }\n break;\n case 'apiUrl':\n configManager.setApiUrl(value);\n logger.success(`apiUrl set to: ${value}`);\n break;\n default:\n logger.error(`Unknown config key: ${key}`);\n }\n }\n } catch (error: any) {\n logger.error('Config command failed', error);\n process.exit(1);\n }\n}\n","/**\n * Interactive Chat Command\n * Provides a persistent conversation interface like Claude Code\n */\n\nimport readline from 'readline';\nimport chalk from 'chalk';\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { ContextCollector } from '../context/collector.js';\nimport { streamingRenderer } from '../streaming/renderer.js';\nimport { logger } from '../utils/logger.js';\nimport { CLIOptions, CompletionRequest, CollectedContext } from '../types/index.js';\nimport { scanCommand, reviewCommand, explainCommand, memoryCommand } from './specialized.js';\n\ninterface Message {\n role: 'user' | 'assistant';\n content: string;\n}\n\nclass ChatSession {\n private conversationHistory: Message[] = [];\n private sessionContext: CollectedContext | null = null;\n private sessionId: string | null = null;\n\n addMessage(role: 'user' | 'assistant', content: string): void {\n this.conversationHistory.push({ role, content });\n }\n\n getHistory(): Message[] {\n return this.conversationHistory;\n }\n\n setContext(context: CollectedContext): void {\n this.sessionContext = context;\n }\n\n getContext(): CollectedContext | null {\n return this.sessionContext;\n }\n\n setSessionId(id: string): void {\n this.sessionId = id;\n }\n\n getSessionId(): string | null {\n return this.sessionId;\n }\n\n clear(): void {\n this.conversationHistory = [];\n this.sessionId = null;\n }\n\n getConversationSummary(): string {\n return this.conversationHistory\n .map(msg => `${msg.role === 'user' ? 'You' : 'DevWing'}: ${msg.content.substring(0, 100)}...`)\n .join('\\n');\n }\n}\n\n/**\n * Handle special chat commands\n */\nasync function handleSpecialCommand(command: string, session: ChatSession, options: CLIOptions): Promise<boolean> {\n const cmd = command.toLowerCase().trim();\n const parts = command.split(' ');\n const mainCmd = parts[0].toLowerCase();\n\n if (cmd === '/help') {\n logger.box([\n chalk.bold('DevWing Chat Commands:'),\n '',\n chalk.bold.yellow('Navigation & Session:'),\n chalk.cyan('/help') + ' - Show this help message',\n chalk.cyan('/exit, /quit') + ' - Exit chat mode',\n chalk.cyan('/clear') + ' - Clear conversation history',\n chalk.cyan('/context') + ' - Show current context',\n chalk.cyan('/history') + ' - Show conversation history',\n '',\n chalk.bold.yellow('Specialized Commands:'),\n chalk.cyan('/scan') + ' - Run security vulnerability scan',\n chalk.cyan('/review') + ' - Perform code review',\n chalk.cyan('/explain <target>') + ' - Explain code, file, or concept',\n '',\n chalk.bold.yellow('Project Memory:'),\n chalk.cyan('/memory save <content>') + ' - Save note to project memory',\n chalk.cyan('/memory show') + ' - Show all project memories',\n chalk.cyan('/memory clear') + ' - Clear all project memories',\n '',\n chalk.dim('Just type your message to chat with DevWing!'),\n ].join('\\n'), { title: 'Chat Commands', color: 'blue' });\n return true;\n }\n\n if (cmd === '/exit' || cmd === '/quit') {\n logger.info('Exiting chat mode...');\n return false; // Signal to exit\n }\n\n if (cmd === '/clear') {\n session.clear();\n console.clear();\n logger.success('Conversation cleared!');\n printWelcomeBanner();\n return true;\n }\n\n if (cmd === '/context') {\n const context = session.getContext();\n if (!context) {\n logger.warn('No context loaded yet. Send a message to load context.');\n return true;\n }\n\n logger.box([\n chalk.bold('Current Context:'),\n '',\n `Working Directory: ${chalk.cyan(context.cwd)}`,\n `Shell: ${context.shell}`,\n `OS: ${context.os}`,\n `Files: ${context.files.length}`,\n context.git_branch ? `Git Branch: ${context.git_branch}` : '',\n '',\n 'Files included:',\n ...context.files.slice(0, 10).map(f => ` • ${f.path}`),\n context.files.length > 10 ? ` ... and ${context.files.length - 10} more` : '',\n ].filter(Boolean).join('\\n'), { title: 'Context Info', color: 'cyan' });\n return true;\n }\n\n if (cmd === '/history') {\n const history = session.getHistory();\n if (history.length === 0) {\n logger.info('No conversation history yet.');\n return true;\n }\n\n logger.box([\n chalk.bold('Conversation History:'),\n '',\n session.getConversationSummary(),\n ].join('\\n'), { title: 'History', color: 'magenta' });\n return true;\n }\n\n // Specialized commands\n if (cmd === '/scan') {\n logger.newline();\n await scanCommand(options);\n return true;\n }\n\n if (cmd === '/review') {\n logger.newline();\n await reviewCommand(options);\n return true;\n }\n\n if (mainCmd === '/explain') {\n const target = parts.slice(1).join(' ').trim();\n if (!target) {\n logger.error('Please provide something to explain. Example: /explain src/auth.ts');\n return true;\n }\n logger.newline();\n await explainCommand(target, options);\n return true;\n }\n\n // Memory commands\n if (mainCmd === '/memory') {\n const subCmd = parts[1]?.toLowerCase();\n\n if (subCmd === 'save') {\n const content = parts.slice(2).join(' ').trim();\n if (!content) {\n logger.error('Please provide content to save. Example: /memory save Auth uses JWT');\n return true;\n }\n logger.newline();\n await memoryCommand('save', content, options);\n return true;\n }\n\n if (subCmd === 'show') {\n logger.newline();\n await memoryCommand('show', undefined, options);\n return true;\n }\n\n if (subCmd === 'clear') {\n logger.newline();\n await memoryCommand('clear', undefined, options);\n return true;\n }\n\n logger.error('Invalid memory command. Use: /memory save|show|clear');\n return true;\n }\n\n // Unknown command\n logger.warn(`Unknown command: ${mainCmd}. Type /help for available commands.`);\n return true;\n}\n\n/**\n * Print welcome banner\n */\nfunction printWelcomeBanner(): void {\n logger.box([\n chalk.bold.cyan('DevWing AI - Interactive Chat Mode'),\n '',\n 'Chat with AI about your codebase. Type your message and press Enter.',\n '',\n chalk.dim('Type /help for commands • /exit to quit'),\n ].join('\\n'), { title: '🚀 Welcome', color: 'cyan' });\n}\n\n/**\n * Main chat command handler\n */\nexport async function chatCommand(options: CLIOptions): Promise<void> {\n try {\n // Check authentication\n const apiKey = await configManager.getApiKey();\n if (!apiKey) {\n logger.error('Not authenticated. Run \"devwing login\" first.');\n process.exit(1);\n }\n\n // Initialize chat session\n const session = new ChatSession();\n\n // Print welcome banner\n console.clear();\n printWelcomeBanner();\n logger.newline();\n\n // Create readline interface\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.bold.green('You: '),\n });\n\n // Handle Ctrl+C gracefully\n rl.on('SIGINT', () => {\n logger.newline();\n logger.info('Exiting chat mode...');\n rl.close();\n process.exit(0);\n });\n\n // Collect initial context once\n logger.startSpinner('Loading codebase context...');\n const collector = new ContextCollector(process.cwd());\n const initialContext = await collector.collect(''); // Empty prompt for initial scan\n session.setContext(initialContext);\n logger.succeedSpinner('Context loaded!');\n logger.newline();\n\n // Show prompt\n rl.prompt();\n\n // Handle each line of input\n rl.on('line', async (input: string) => {\n const userMessage = input.trim();\n\n // Skip empty messages\n if (!userMessage) {\n rl.prompt();\n return;\n }\n\n // Handle special commands\n if (userMessage.startsWith('/')) {\n const shouldContinue = await handleSpecialCommand(userMessage, session, options);\n if (!shouldContinue) {\n rl.close();\n return;\n }\n logger.newline();\n rl.prompt();\n return;\n }\n\n // Add user message to history\n session.addMessage('user', userMessage);\n\n // Show thinking message\n logger.newline();\n logger.info(chalk.dim('DevWing is thinking...'));\n logger.newline();\n\n try {\n // Build completion request with conversation history\n const request: CompletionRequest = {\n prompt: buildPromptWithHistory(session),\n mode: options.mode,\n model: options.model,\n project_id: options.project || configManager.getProjectId(),\n context: session.getContext()!,\n stream: true,\n max_tokens: 4096,\n };\n\n // Stream AI response\n let assistantResponse = '';\n streamingRenderer.reset();\n streamingRenderer.clearPendingTools();\n\n for await (const message of apiClient.streamCompletion(request)) {\n await streamingRenderer.processMessage(message);\n\n // Collect assistant response for history\n if (message.type === 'token' && message.content) {\n assistantResponse += message.content;\n }\n\n // Save session ID for future tool calls\n if (message.session_id) {\n session.setSessionId(message.session_id);\n }\n }\n\n // Add assistant response to history\n if (assistantResponse) {\n session.addMessage('assistant', assistantResponse);\n }\n\n // Execute any pending tools\n const pendingTools = streamingRenderer.getPendingToolCalls();\n if (pendingTools.length > 0) {\n logger.newline();\n logger.info('Executing tools...');\n const toolResults = await streamingRenderer.executePendingTools();\n\n // Continue conversation with tool results\n if (session.getSessionId()) {\n for await (const message of apiClient.continueCompletion(session.getSessionId()!, toolResults)) {\n await streamingRenderer.processMessage(message);\n }\n }\n }\n\n logger.newline();\n logger.newline();\n\n } catch (error: any) {\n logger.newline();\n logger.error('Error:', error.message || error);\n logger.newline();\n }\n\n // Show prompt again\n rl.prompt();\n });\n\n // Handle close\n rl.on('close', () => {\n logger.newline();\n logger.success('Chat session ended. Goodbye!');\n process.exit(0);\n });\n\n } catch (error: any) {\n logger.error('Chat command failed', error);\n process.exit(1);\n }\n}\n\n/**\n * Build prompt with conversation history\n */\nfunction buildPromptWithHistory(session: ChatSession): string {\n const history = session.getHistory();\n\n if (history.length === 0) {\n return '';\n }\n\n // Get last user message as primary prompt\n const lastUserMessage = history[history.length - 1];\n\n if (history.length === 1) {\n return lastUserMessage.content;\n }\n\n // Include recent conversation history for context\n const recentHistory = history.slice(-10); // Last 10 messages\n const historyContext = recentHistory\n .slice(0, -1) // Exclude the current message\n .map(msg => `${msg.role === 'user' ? 'User' : 'Assistant'}: ${msg.content}`)\n .join('\\n\\n');\n\n return `Previous conversation:\\n${historyContext}\\n\\nCurrent question:\\n${lastUserMessage.content}`;\n}","/**\n * Update Command\n * Checks for and installs CLI updates\n */\n\nimport { execSync } from 'child_process';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport semver from 'semver';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { logger } from '../utils/logger.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\ninterface PackageInfo {\n name: string;\n version: string;\n}\n\ninterface NPMRegistryResponse {\n 'dist-tags': {\n latest: string;\n };\n versions: Record<string, unknown>;\n}\n\n/**\n * Get current CLI version from package.json\n */\nfunction getCurrentVersion(): string {\n try {\n // Try multiple paths - production vs development\n const possiblePaths = [\n join(__dirname, '../package.json'), // Production: dist/ -> package.json\n join(__dirname, '../../package.json'), // Development: src/commands/ -> package.json\n ];\n\n for (const packageJsonPath of possiblePaths) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.version;\n } catch {\n // Try next path\n continue;\n }\n }\n\n throw new Error('package.json not found in any expected location');\n } catch (error) {\n logger.error('Failed to read package version', error);\n return '0.1.0'; // Fallback version\n }\n}\n\n/**\n * Get package name from package.json\n */\nfunction getPackageName(): string {\n try {\n // Try multiple paths - production vs development\n const possiblePaths = [\n join(__dirname, '../package.json'), // Production: dist/ -> package.json\n join(__dirname, '../../package.json'), // Development: src/commands/ -> package.json\n ];\n\n for (const packageJsonPath of possiblePaths) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.name;\n } catch {\n // Try next path\n continue;\n }\n }\n\n throw new Error('package.json not found in any expected location');\n } catch (error) {\n logger.error('Failed to read package name', error);\n return 'devwing'; // Correct fallback\n }\n}\n\n/**\n * Fetch latest version from npm registry\n */\nasync function getLatestVersion(packageName: string): Promise<string | null> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}`);\n\n if (!response.ok) {\n throw new Error(`Registry responded with ${response.status}`);\n }\n\n const data = await response.json() as NPMRegistryResponse;\n return data['dist-tags'].latest;\n } catch (error) {\n logger.error('Failed to fetch latest version from npm registry', error);\n return null;\n }\n}\n\n/**\n * Check if package manager is available\n */\nfunction detectPackageManager(): 'npm' | 'pnpm' | 'yarn' | null {\n try {\n execSync('pnpm --version', { stdio: 'ignore' });\n return 'pnpm';\n } catch {\n // pnpm not available\n }\n\n try {\n execSync('yarn --version', { stdio: 'ignore' });\n return 'yarn';\n } catch {\n // yarn not available\n }\n\n try {\n execSync('npm --version', { stdio: 'ignore' });\n return 'npm';\n } catch {\n // npm not available\n }\n\n return null;\n}\n\n/**\n * Install update using package manager\n */\nfunction installUpdate(packageName: string, packageManager: string, version: string): boolean {\n try {\n logger.startSpinner(`Installing ${packageName}@${version}...`);\n\n const command = packageManager === 'yarn'\n ? `yarn global add ${packageName}@${version}`\n : `${packageManager} install -g ${packageName}@${version}`;\n\n execSync(command, { stdio: 'inherit' });\n\n logger.stopSpinner();\n return true;\n } catch (error) {\n logger.stopSpinner();\n logger.error('Failed to install update', error);\n return false;\n }\n}\n\n/**\n * Display update information\n */\nfunction displayUpdateInfo(currentVersion: string, latestVersion: string): void {\n console.log();\n console.log(chalk.cyan('━'.repeat(60)));\n console.log(chalk.bold.cyan(' DevWing CLI Update Available'));\n console.log(chalk.cyan('━'.repeat(60)));\n console.log();\n console.log(` ${chalk.gray('Current version:')} ${chalk.yellow(currentVersion)}`);\n console.log(` ${chalk.gray('Latest version:')} ${chalk.green(latestVersion)}`);\n console.log();\n console.log(chalk.gray(' Changelog: https://github.com/devwing/devwing/releases'));\n console.log();\n}\n\n/**\n * Update command\n */\nexport async function updateCommand(options?: { check?: boolean; force?: boolean }): Promise<void> {\n try {\n const currentVersion = getCurrentVersion();\n const packageName = getPackageName();\n\n console.log();\n console.log(chalk.cyan(`📦 DevWing CLI v${currentVersion}`));\n console.log();\n\n // Check for updates\n logger.startSpinner('Checking for updates...');\n const latestVersion = await getLatestVersion(packageName);\n logger.stopSpinner();\n\n if (!latestVersion) {\n logger.warn('Unable to check for updates. Please check your internet connection.');\n return;\n }\n\n // Compare versions\n const isNewer = semver.gt(latestVersion, currentVersion);\n\n if (!isNewer) {\n logger.success(`You're running the latest version (v${currentVersion})`);\n return;\n }\n\n // Display update info\n displayUpdateInfo(currentVersion, latestVersion);\n\n // If --check-only flag, just show info and exit\n if (options?.check) {\n logger.info('Run \"devwing update\" to install the latest version');\n return;\n }\n\n // Detect package manager\n const packageManager = detectPackageManager();\n\n if (!packageManager) {\n logger.error('No package manager found. Please install npm, pnpm, or yarn.');\n return;\n }\n\n logger.info(`Detected package manager: ${chalk.cyan(packageManager)}`);\n\n // Confirm update (unless --force)\n if (!options?.force) {\n const { confirm } = await inquirer.prompt<{ confirm: boolean }>([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Update to v${latestVersion}?`,\n default: true,\n },\n ]);\n\n if (!confirm) {\n logger.info('Update cancelled');\n return;\n }\n }\n\n // Install update\n console.log();\n const success = installUpdate(packageName, packageManager, latestVersion);\n\n if (success) {\n console.log();\n logger.success(`Successfully updated to v${latestVersion}`);\n console.log();\n console.log(chalk.gray(' Run \"devwing --version\" to verify'));\n console.log();\n } else {\n console.log();\n logger.error('Update failed. Please try manually:');\n console.log();\n console.log(chalk.gray(` ${packageManager} install -g ${packageName}@${latestVersion}`));\n console.log();\n process.exit(1);\n }\n } catch (error) {\n logger.error('Update check failed', error);\n process.exit(1);\n }\n}\n\n/**\n * Silent background update check (non-blocking)\n * Shows notification if update available but doesn't interrupt workflow\n */\nexport async function checkUpdateSilent(): Promise<void> {\n try {\n const currentVersion = getCurrentVersion();\n const packageName = getPackageName();\n const latestVersion = await getLatestVersion(packageName);\n\n if (!latestVersion) {\n return; // Silently fail\n }\n\n const isNewer = semver.gt(latestVersion, currentVersion);\n\n if (isNewer) {\n // Show subtle notification\n console.log();\n console.log(chalk.dim('━'.repeat(60)));\n console.log(\n chalk.dim(` 💡 Update available: ${chalk.yellow(currentVersion)} → ${chalk.green(latestVersion)}`)\n );\n console.log(chalk.dim(` Run \"devwing update\" to install the latest version`));\n console.log(chalk.dim('━'.repeat(60)));\n console.log();\n }\n } catch {\n // Silently fail - don't interrupt user workflow\n }\n}\n","/**\n * DevWing CLI - Entry Point\n * Your AI Wingman in the Terminal\n */\n\nimport { Command } from 'commander';\nimport { loginCommand, logoutCommand, statusCommand } from './commands/auth.js';\nimport { promptCommand } from './commands/prompt.js';\nimport { chatCommand } from './commands/chat.js';\nimport {\n scanCommand,\n reviewCommand,\n explainCommand,\n memoryCommand,\n configCommand,\n} from './commands/specialized.js';\nimport { updateCommand } from './commands/update.js';\nimport { logger } from './utils/logger.js';\nimport { CLIOptions } from './types/index.js';\n\nconst program = new Command();\n\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __cliFilename = fileURLToPath(import.meta.url);\nconst __cliDirname = dirname(__cliFilename);\n\nfunction getVersion(): string {\n const paths = [\n join(__cliDirname, '../package.json'),\n join(__cliDirname, '../../package.json'),\n ];\n for (const p of paths) {\n try {\n return JSON.parse(readFileSync(p, 'utf-8')).version;\n } catch { continue; }\n }\n return '0.1.6';\n}\n\nconst VERSION = getVersion();\n\nprogram\n .name('devwing')\n .description('DevWing.ai - Your AI Wingman in the Terminal')\n .version(VERSION, '-v, --version', 'Display version number')\n .helpOption('-h, --help', 'Display help information');\n\n// Global options\nprogram\n .option('--mode <mode>', 'AI mode: general|frontend|backend|security|devops')\n .option('--model <model>', 'Specific model to use')\n .option('--project <id>', 'Project ID')\n .option('--workspace <id>', 'Workspace ID')\n .option('--verbose', 'Verbose output for debugging')\n .option('-y, --yes', 'Auto-confirm destructive actions');\n\n/**\n * Login command\n */\nprogram\n .command('login')\n .description('Authenticate with DevWing')\n .action(async () => {\n await loginCommand();\n });\n\n/**\n * Logout command\n */\nprogram\n .command('logout')\n .description('Clear stored credentials')\n .action(async () => {\n await logoutCommand();\n });\n\n/**\n * Status command\n */\nprogram\n .command('status')\n .description('Show authentication status and profile')\n .action(async () => {\n await statusCommand();\n });\n\n/**\n * Interactive Chat command\n */\nprogram\n .command('chat')\n .description('Start interactive chat mode (like Claude Code)')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n await chatCommand(opts);\n });\n\n/**\n * Security scan command\n */\nprogram\n .command('scan')\n .description('Run security vulnerability scan')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n await scanCommand(opts);\n });\n\n/**\n * Code review command\n */\nprogram\n .command('review')\n .description('Perform code review on recent changes')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n await reviewCommand(opts);\n });\n\n/**\n * Explain command\n */\nprogram\n .command('explain <target>')\n .description('Explain code, file, or concept')\n .action(async (target: string) => {\n const opts = program.opts() as CLIOptions;\n await explainCommand(target, opts);\n });\n\n/**\n * Memory commands\n */\nconst memoryCmd = program\n .command('memory')\n .description('Manage project memory');\n\nmemoryCmd\n .command('save <content>')\n .description('Save information to project memory')\n .action(async (content: string) => {\n const opts = program.opts() as CLIOptions;\n await memoryCommand('save', content, opts);\n });\n\nmemoryCmd\n .command('show')\n .description('Show all project memories')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n await memoryCommand('show', undefined, opts);\n });\n\nmemoryCmd\n .command('clear')\n .description('Clear all project memories')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n await memoryCommand('clear', undefined, opts);\n });\n\n/**\n * Config commands\n */\nconst configCmd = program\n .command('config')\n .description('Manage CLI configuration');\n\nconfigCmd\n .command('list')\n .description('Show all configuration')\n .action(async () => {\n await configCommand('list');\n });\n\nconfigCmd\n .command('get <key>')\n .description('Get configuration value')\n .action(async (key: string) => {\n await configCommand('get', key);\n });\n\nconfigCmd\n .command('set <key> <value>')\n .description('Set configuration value')\n .action(async (key: string, value: string) => {\n await configCommand('set', key, value);\n });\n\n/**\n * Update command\n */\nprogram\n .command('update')\n .description('Check for and install CLI updates')\n .option('--check', 'Only check for updates, do not install')\n .option('--force', 'Skip confirmation prompt')\n .action(async (options) => {\n await updateCommand(options);\n });\n\n/**\n * Default action - start interactive chat mode\n * Usage: devwing (starts chat mode)\n */\nprogram\n .argument('[prompt...]', 'Natural language prompt for AI (optional - starts chat mode if empty)')\n .action(async (promptParts: string[]) => {\n const opts = program.opts() as CLIOptions;\n\n // If no arguments, start chat mode (default behavior)\n if (promptParts.length === 0) {\n await chatCommand(opts);\n return;\n }\n\n // If user provides a prompt, run single-shot command\n const prompt = promptParts.join(' ');\n await promptCommand(prompt, opts);\n });\n\n/**\n * Error handling\n */\nprogram.exitOverride();\n\ntry {\n await program.parseAsync(process.argv);\n} catch (error: any) {\n // Commander exits for help/version — these are not errors\n if (\n error.code === 'commander.help' ||\n error.code === 'commander.helpDisplayed' ||\n error.code === 'commander.version'\n ) {\n process.exit(0);\n }\n\n // Don't double-print if the command already printed the error\n if (error.message && !error.message.includes('process.exit')) {\n logger.error(error.message);\n }\n\n if (process.env.DEBUG) {\n console.error(error);\n }\n\n process.exit(1);\n}\n"]}
1
+ {"version":3,"sources":["../src/config/manager.ts","../src/api/client.ts","../src/utils/logger.ts","../src/commands/auth.ts","../src/context/collector.ts","../src/tools/engine.ts","../src/streaming/renderer.ts","../src/commands/prompt.ts","../src/commands/specialized.ts","../src/commands/chat.ts","../src/commands/update.ts","../src/commands/demo.ts","../src/index.ts"],"names":["axios","chalk","inquirer","os","fs","path","simpleGit","__filename","__dirname","execSync","showQuickStart","Table","readline","fileURLToPath","dirname","join","readFileSync"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Configuration Manager\n * Handles storing and retrieving CLI configuration\n */\n\nimport Conf from 'conf';\nimport { AsyncEntry } from '@napi-rs/keyring';\nimport { DevWingConfig, AIMode } from '../types/index.js';\n\nconst SERVICE_NAME = 'DevWing CLI';\nconst API_KEY_ACCOUNT = 'api-key';\n\nclass ConfigManager {\n private conf: Conf<DevWingConfig>;\n\n constructor() {\n this.conf = new Conf<DevWingConfig>({\n projectName: 'devwing',\n defaults: {\n apiUrl: process.env.DEVWING_API_URL || 'https://api.devwing.ai/api/v1',\n },\n });\n }\n\n /**\n * Get API key from OS keychain\n */\n async getApiKey(): Promise<string | null> {\n try {\n const entry = new AsyncEntry(SERVICE_NAME, API_KEY_ACCOUNT);\n const password = await entry.getPassword();\n return password || null;\n } catch (error) {\n console.error('Failed to retrieve API key from keychain:', error);\n return null;\n }\n }\n\n /**\n * Store API key in OS keychain\n */\n async setApiKey(apiKey: string): Promise<void> {\n try {\n const entry = new AsyncEntry(SERVICE_NAME, API_KEY_ACCOUNT);\n await entry.setPassword(apiKey);\n } catch (error) {\n throw new Error(`Failed to store API key in keychain: ${error}`);\n }\n }\n\n /**\n * Delete API key from OS keychain\n */\n async deleteApiKey(): Promise<void> {\n try {\n const entry = new AsyncEntry(SERVICE_NAME, API_KEY_ACCOUNT);\n await entry.deletePassword();\n } catch (error) {\n console.error('Failed to delete API key from keychain:', error);\n }\n }\n\n /**\n * Get API URL — ensures /api/v1 suffix is always present\n */\n getApiUrl(): string {\n let url = this.conf.get('apiUrl');\n // Guard: ensure the API prefix is present\n if (url && !url.endsWith('/api/v1') && url.includes('devwing.ai')) {\n url = url.replace(/\\/+$/, '') + '/api/v1';\n this.conf.set('apiUrl', url);\n }\n return url;\n }\n\n /**\n * Set API URL (for development/testing)\n */\n setApiUrl(url: string): void {\n this.conf.set('apiUrl', url.replace(/\\/+$/, ''));\n }\n\n /**\n * Get current workspace ID\n */\n getWorkspaceId(): string | undefined {\n return this.conf.get('workspaceId');\n }\n\n /**\n * Set current workspace ID\n */\n setWorkspaceId(workspaceId: string): void {\n this.conf.set('workspaceId', workspaceId);\n }\n\n /**\n * Get current project ID\n */\n getProjectId(): string | undefined {\n return this.conf.get('projectId');\n }\n\n /**\n * Set current project ID\n */\n setProjectId(projectId: string): void {\n this.conf.set('projectId', projectId);\n }\n\n /**\n * Get preferred model\n */\n getModel(): string | undefined {\n return this.conf.get('model');\n }\n\n /**\n * Set preferred model\n */\n setModel(model: string): void {\n this.conf.set('model', model);\n }\n\n /**\n * Get preferred AI mode\n */\n getMode(): AIMode | undefined {\n return this.conf.get('mode');\n }\n\n /**\n * Set preferred AI mode\n */\n setMode(mode: AIMode): void {\n this.conf.set('mode', mode);\n }\n\n /**\n * Get all config\n */\n getAll(): DevWingConfig {\n return {\n apiUrl: this.getApiUrl(),\n workspaceId: this.getWorkspaceId(),\n projectId: this.getProjectId(),\n model: this.getModel(),\n mode: this.getMode(),\n };\n }\n\n /**\n * Clear all config (except API key)\n */\n clear(): void {\n this.conf.clear();\n }\n\n /**\n * Get config file path (for debugging)\n */\n getPath(): string {\n return this.conf.path;\n }\n}\n\nexport const configManager = new ConfigManager();","/**\n * API Client\n * Handles all communication with DevWing backend\n */\n\nimport axios, { AxiosInstance, AxiosError } from 'axios';\nimport { configManager } from '../config/manager.js';\nimport {\n CompletionRequest,\n StreamMessage,\n UserProfile,\n ProjectMemory,\n Model,\n UsageStats,\n LoginResponse,\n} from '../types/index.js';\nimport { EventSourceParserStream } from 'eventsource-parser/stream';\n\n/**\n * Extract error message from FastAPI/backend error responses.\n * FastAPI uses `detail`, but some endpoints use `message` or `error`.\n */\nfunction extractErrorMessage(data: any): string {\n if (!data) return 'Unknown error';\n if (typeof data === 'string') return data;\n return data.detail || data.message || data.error || JSON.stringify(data);\n}\n\nclass APIClient {\n private client: AxiosInstance;\n private jwtToken: string | null = null;\n\n constructor() {\n this.client = axios.create({\n timeout: 120000, // 2 minutes\n });\n\n // Add request interceptor to attach API key or JWT\n this.client.interceptors.request.use(async (config) => {\n const apiKey = await configManager.getApiKey();\n const apiUrl = configManager.getApiUrl();\n\n config.baseURL = apiUrl;\n\n // Prefer JWT (temporary for login flow), fallback to API key\n if (this.jwtToken) {\n config.headers.Authorization = `Bearer ${this.jwtToken}`;\n } else if (apiKey) {\n config.headers.Authorization = `Bearer ${apiKey}`;\n }\n\n return config;\n });\n\n // Add response interceptor for error handling\n this.client.interceptors.response.use(\n (response) => response,\n (error: AxiosError) => {\n if (error.response?.data) {\n const message = extractErrorMessage(error.response.data);\n const err = new Error(message);\n (err as any).statusCode = error.response.status;\n throw err;\n }\n if (error.code === 'ECONNREFUSED') {\n throw new Error('Cannot connect to DevWing API. Is the server running?');\n }\n if (error.code === 'ENOTFOUND') {\n throw new Error('Cannot resolve DevWing API hostname. Check your internet connection.');\n }\n throw new Error(error.message || 'Network error');\n }\n );\n }\n\n /**\n * Set JWT token for temporary authentication (login flow only)\n */\n setJwtToken(token: string | null): void {\n this.jwtToken = token;\n }\n\n /**\n * Login with email and password\n * Returns full login response including 2FA handling\n */\n async login(email: string, password: string): Promise<LoginResponse> {\n const response = await this.client.post('/auth/login', { email, password });\n return response.data;\n }\n\n /**\n * Complete 2FA login\n */\n async complete2FA(tempToken: string, totpCode: string): Promise<LoginResponse> {\n const response = await this.client.post('/auth/2fa/complete', {\n temp_token: tempToken,\n totp_code: totpCode,\n });\n return response.data;\n }\n\n /**\n * Get current user profile\n */\n async getProfile(): Promise<UserProfile> {\n const response = await this.client.get('/users/me');\n return response.data;\n }\n\n /**\n * Create a new API key\n */\n async createApiKey(name: string): Promise<{ id: string; key: string; key_prefix: string; name: string }> {\n const response = await this.client.post('/api-keys', { name });\n return response.data;\n }\n\n /**\n * Initiate CLI browser authentication (device flow)\n */\n async initiateCliAuth(deviceInfo?: string): Promise<{\n device_code: string;\n user_code: string;\n verification_url: string;\n verification_url_complete: string;\n expires_in: number;\n interval: number;\n }> {\n const response = await this.client.post('/auth/cli/initiate', {\n device_info: deviceInfo,\n });\n return response.data;\n }\n\n /**\n * Poll for CLI authentication status\n */\n async pollCliAuth(deviceCode: string): Promise<{\n status: 'pending' | 'authorized' | 'expired' | 'denied';\n api_key?: string;\n message?: string;\n }> {\n const response = await this.client.post('/auth/cli/poll', {\n device_code: deviceCode,\n });\n return response.data;\n }\n\n /**\n * Stream AI completion\n */\n async *streamCompletion(request: CompletionRequest): AsyncGenerator<StreamMessage> {\n const apiKey = await configManager.getApiKey();\n const apiUrl = configManager.getApiUrl();\n\n if (!apiKey) {\n throw new Error('Not authenticated. Run \"devwing login\" first.');\n }\n\n const response = await fetch(`${apiUrl}/completions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n let errorMsg = `API error (${response.status})`;\n try {\n const error = await response.json();\n errorMsg = extractErrorMessage(error);\n } catch {\n // Could not parse error body\n }\n throw new Error(errorMsg);\n }\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n // Parse SSE stream\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream());\n\n for await (const event of stream) {\n if (event.data) {\n try {\n const message: StreamMessage = JSON.parse(event.data);\n yield message;\n } catch {\n // Skip unparseable SSE messages\n }\n }\n }\n }\n\n /**\n * Continue completion with tool results\n */\n async *continueCompletion(sessionId: string, toolResults: any[]): AsyncGenerator<StreamMessage> {\n const apiKey = await configManager.getApiKey();\n const apiUrl = configManager.getApiUrl();\n\n if (!apiKey) {\n throw new Error('Not authenticated. Run \"devwing login\" first.');\n }\n\n const response = await fetch(`${apiUrl}/completions/continue`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n session_id: sessionId,\n tool_results: toolResults,\n }),\n });\n\n if (!response.ok) {\n let errorMsg = `API error (${response.status})`;\n try {\n const error = await response.json();\n errorMsg = extractErrorMessage(error);\n } catch {\n // Could not parse error body\n }\n throw new Error(errorMsg);\n }\n\n if (!response.body) {\n throw new Error('No response body');\n }\n\n // Parse SSE stream\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(new EventSourceParserStream());\n\n for await (const event of stream) {\n if (event.data) {\n try {\n const message: StreamMessage = JSON.parse(event.data);\n yield message;\n } catch {\n // Skip unparseable SSE messages\n }\n }\n }\n }\n\n /**\n * Get project memory\n * Backend returns { memories: [...], total: N }\n */\n async getProjectMemory(projectId: string): Promise<ProjectMemory[]> {\n const response = await this.client.get(`/memory/${projectId}`);\n // Handle both wrapped and unwrapped responses\n const data = response.data;\n if (data.memories && Array.isArray(data.memories)) {\n return data.memories;\n }\n if (Array.isArray(data)) {\n return data;\n }\n return [];\n }\n\n /**\n * Add project memory\n */\n async addProjectMemory(\n projectId: string,\n content: string,\n type: 'context' | 'rule' | 'decision' | 'summary'\n ): Promise<ProjectMemory> {\n const response = await this.client.post(`/memory/${projectId}`, { content, type });\n return response.data;\n }\n\n /**\n * Delete project memory\n */\n async deleteProjectMemory(projectId: string, memoryId: string): Promise<void> {\n await this.client.delete(`/memory/${projectId}/${memoryId}`);\n }\n\n /**\n * Get available models\n */\n async getModels(): Promise<Model[]> {\n const response = await this.client.get('/models');\n const data = response.data;\n if (data.models && Array.isArray(data.models)) {\n return data.models;\n }\n if (Array.isArray(data)) {\n return data;\n }\n return [];\n }\n\n /**\n * Get usage stats\n */\n async getUsage(params?: { from?: string; to?: string }): Promise<UsageStats> {\n const response = await this.client.get('/analytics/overview', { params });\n return response.data;\n }\n}\n\nexport const apiClient = new APIClient();","/**\n * Logging Utilities\n */\n\nimport chalk from 'chalk';\nimport ora, { Ora } from 'ora';\nimport boxen from 'boxen';\nimport gradient from 'gradient-string';\n\nclass Logger {\n private spinner: Ora | null = null;\n\n /**\n * Success message\n */\n success(message: string): void {\n console.log(chalk.green('✓'), message);\n }\n\n /**\n * Error message\n */\n error(message: string, error?: any): void {\n console.log(chalk.red('✗'), message);\n if (error && process.env.DEBUG) {\n console.error(chalk.gray(error.stack || error));\n }\n }\n\n /**\n * Warning message\n */\n warn(message: string): void {\n console.log(chalk.yellow('⚠'), message);\n }\n\n /**\n * Info message\n */\n info(message: string): void {\n console.log(chalk.blue('ℹ'), message);\n }\n\n /**\n * Debug message (only shown if DEBUG env var is set)\n */\n debug(message: string, data?: any): void {\n if (process.env.DEBUG) {\n console.log(chalk.gray('⚙'), chalk.gray(message));\n if (data) {\n console.log(chalk.gray(JSON.stringify(data, null, 2)));\n }\n }\n }\n\n /**\n * Start a spinner\n */\n startSpinner(text: string): void {\n this.spinner = ora({\n text,\n color: 'cyan',\n }).start();\n }\n\n /**\n * Update spinner text\n */\n updateSpinner(text: string): void {\n if (this.spinner) {\n this.spinner.text = text;\n }\n }\n\n /**\n * Stop spinner with success\n */\n succeedSpinner(text?: string): void {\n if (this.spinner) {\n this.spinner.succeed(text);\n this.spinner = null;\n }\n }\n\n /**\n * Stop spinner with failure\n */\n failSpinner(text?: string): void {\n if (this.spinner) {\n this.spinner.fail(text);\n this.spinner = null;\n }\n }\n\n /**\n * Stop spinner\n */\n stopSpinner(): void {\n if (this.spinner) {\n this.spinner.stop();\n this.spinner = null;\n }\n }\n\n /**\n * Print DevWing banner\n */\n printBanner(): void {\n const banner = gradient.pastel.multiline([\n '',\n ' ██████╗ ███████╗██╗ ██╗██╗ ██╗██╗███╗ ██╗ ██████╗ ',\n ' ██╔══██╗██╔════╝██║ ██║██║ ██║██║████╗ ██║██╔════╝ ',\n ' ██║ ██║█████╗ ██║ ██║██║ █╗ ██║██║██╔██╗ ██║██║ ███╗',\n ' ██║ ██║██╔══╝ ╚██╗ ██╔╝██║███╗██║██║██║╚██╗██║██║ ██║',\n ' ██████╔╝███████╗ ╚████╔╝ ╚███╔███╔╝██║██║ ╚████║╚██████╔╝',\n ' ╚═════╝ ╚══════╝ ╚═══╝ ╚══╝╚══╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ',\n '',\n ' Your AI Wingman in the Terminal',\n '',\n ].join('\\n'));\n\n console.log(banner);\n }\n\n /**\n * Print a box message\n */\n box(message: string, options?: { title?: string; color?: string }): void {\n console.log(\n boxen(message, {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: options?.color || 'cyan',\n title: options?.title,\n titleAlignment: 'center',\n })\n );\n }\n\n /**\n * Print a newline\n */\n newline(): void {\n console.log();\n }\n}\n\nexport const logger = new Logger();","/**\n * Authentication Commands\n * Handles login, logout, and authentication status\n */\n\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { logger } from '../utils/logger.js';\nimport { LoginResponse } from '../types/index.js';\nimport terminalLink from 'terminal-link';\n\n/**\n * Normalize user profile — backend uses subscription_plan, CLI uses plan\n */\nfunction getUserPlan(user: any): string {\n return user.subscription_plan || user.plan || 'free';\n}\n\nfunction getUserDisplayName(user: any): string {\n return user.full_name || user.username || user.email;\n}\n\n/**\n * Login command - authenticate with DevWing\n */\nexport async function loginCommand(): Promise<void> {\n try {\n // Check if already logged in\n const existingKey = await configManager.getApiKey();\n if (existingKey) {\n const { overwrite } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'overwrite',\n message: 'You are already logged in. Do you want to log in with a different account?',\n default: false,\n },\n ]);\n\n if (!overwrite) {\n logger.info('Login cancelled');\n return;\n }\n }\n\n logger.printBanner();\n logger.newline();\n\n // Prompt for authentication method\n const { method } = await inquirer.prompt([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n { name: 'Via Browser (easiest)', value: 'browser' },\n { name: 'Email & Password', value: 'email' },\n { name: 'API Key (from dashboard)', value: 'apikey' },\n ],\n },\n ]);\n\n if (method === 'email') {\n await loginWithEmail();\n } else if (method === 'browser') {\n await loginWithBrowser();\n } else {\n await loginWithApiKey();\n }\n } catch (error: any) {\n logger.error('Login failed');\n if (error.message) {\n logger.error(error.message);\n }\n process.exit(1);\n }\n}\n\n/**\n * Login with email and password\n */\nasync function loginWithEmail(): Promise<void> {\n const { email, password } = await inquirer.prompt([\n {\n type: 'input',\n name: 'email',\n message: 'Email:',\n validate: (input) => {\n if (!input.includes('@') || !input.includes('.')) {\n return 'Please enter a valid email address';\n }\n return true;\n },\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n validate: (input) => {\n if (!input || input.length < 1) {\n return 'Password is required';\n }\n return true;\n },\n },\n ]);\n\n logger.startSpinner('Authenticating...');\n\n try {\n // Login to get JWT\n let loginResult: LoginResponse = await apiClient.login(email, password);\n\n // Handle 2FA if required\n if (loginResult.requires_2fa) {\n logger.succeedSpinner('Credentials verified');\n logger.info('Two-factor authentication is enabled on your account');\n\n const { totpCode } = await inquirer.prompt([\n {\n type: 'input',\n name: 'totpCode',\n message: '2FA Code (from authenticator app):',\n validate: (input) => {\n if (!/^\\d{6}$/.test(input)) {\n return 'Please enter a 6-digit code';\n }\n return true;\n },\n },\n ]);\n\n logger.startSpinner('Verifying 2FA code...');\n loginResult = await apiClient.complete2FA(loginResult.temp_token!, totpCode);\n }\n\n if (!loginResult.access_token || !loginResult.user) {\n logger.failSpinner('Login failed');\n logger.error('Unexpected response from server');\n return;\n }\n\n // Store JWT temporarily for API key creation\n apiClient.setJwtToken(loginResult.access_token);\n\n // Create a new CLI API key (uses JWT for auth)\n logger.updateSpinner('Creating API key...');\n const apiKeyResult = await apiClient.createApiKey('CLI - Auto-generated');\n\n // Clear JWT - we have API key now\n apiClient.setJwtToken(null);\n\n // Store API key in keychain\n await configManager.setApiKey(apiKeyResult.key);\n\n const user = loginResult.user;\n const plan = getUserPlan(user);\n\n logger.succeedSpinner(`Welcome back, ${getUserDisplayName(user)}!`);\n logger.success(`Plan: ${plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Authentication failed');\n logger.error(error.message || 'Unknown error occurred');\n throw error;\n }\n}\n\n/**\n * Login via browser (device flow)\n */\nasync function loginWithBrowser(): Promise<void> {\n const os = await import('os');\n const open = await import('open');\n\n logger.startSpinner('Initiating browser authentication...');\n\n try {\n // Step 1: Initiate device flow\n const deviceInfo = `DevWing CLI on ${os.platform()} (${os.hostname()})`;\n const initResponse = await apiClient.initiateCliAuth(deviceInfo);\n\n logger.succeedSpinner('Device code created');\n logger.newline();\n\n // Step 2: Open browser automatically\n const verifyUrl = initResponse.verification_url_complete;\n try {\n await open.default(verifyUrl);\n logger.success('Browser opened! Please log in to authorize this device.');\n } catch {\n logger.warn('Could not open browser automatically.');\n logger.info(`Please visit: ${chalk.cyan(verifyUrl)}`);\n }\n\n logger.newline();\n logger.info(chalk.dim(`Device code: ${initResponse.user_code.substring(0, 8)}...`));\n logger.startSpinner('Waiting for authorization...');\n\n // Step 3: Poll for authorization\n const pollInterval = (initResponse.interval || 5) * 1000;\n const maxAttempts = Math.floor((initResponse.expires_in || 900) / (initResponse.interval || 5));\n let attempts = 0;\n\n const pollForAuth = async (): Promise<string> => {\n return new Promise((resolve, reject) => {\n const interval = setInterval(async () => {\n attempts++;\n\n if (attempts >= maxAttempts) {\n clearInterval(interval);\n reject(new Error('Authentication timed out. Please try again with \"devwing login\".'));\n return;\n }\n\n try {\n const pollResponse = await apiClient.pollCliAuth(initResponse.device_code);\n\n if (pollResponse.status === 'authorized' && pollResponse.api_key) {\n clearInterval(interval);\n resolve(pollResponse.api_key);\n } else if (pollResponse.status === 'denied') {\n clearInterval(interval);\n reject(new Error('Authorization denied by user.'));\n } else if (pollResponse.status === 'expired') {\n clearInterval(interval);\n reject(new Error('Device code expired. Please run \"devwing login\" again.'));\n }\n // status === 'pending' — continue polling\n } catch (error: any) {\n // Don't stop on transient errors (429, network blips)\n if (error.statusCode === 429) {\n // Rate limited — just wait longer\n return;\n }\n clearInterval(interval);\n reject(error);\n }\n }, pollInterval);\n });\n };\n\n const apiKey = await pollForAuth();\n\n // Store API key\n await configManager.setApiKey(apiKey);\n\n // Fetch user profile\n logger.updateSpinner('Fetching profile...');\n const user = await apiClient.getProfile();\n const plan = getUserPlan(user);\n\n logger.succeedSpinner(`Welcome, ${getUserDisplayName(user)}!`);\n logger.success(`Plan: ${plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Browser authentication failed');\n logger.error(error.message || 'Unknown error');\n throw error;\n }\n}\n\n/**\n * Login with existing API key\n */\nasync function loginWithApiKey(): Promise<void> {\n const dashboardUrl = terminalLink(\n 'dashboard',\n 'https://devwing.ai/dashboard/api-keys',\n { fallback: () => 'https://devwing.ai/dashboard/api-keys' }\n );\n\n logger.info(`Get your API key from the ${dashboardUrl}`);\n logger.newline();\n\n const { apiKey } = await inquirer.prompt([\n {\n type: 'password',\n name: 'apiKey',\n message: 'API Key:',\n mask: '*',\n validate: (input) => {\n if (!input.startsWith('dw_sk_')) {\n return 'Invalid API key format. Should start with \"dw_sk_\"';\n }\n if (input.length < 20) {\n return 'API key seems too short';\n }\n return true;\n },\n },\n ]);\n\n logger.startSpinner('Verifying API key...');\n\n try {\n // Store temporarily to test\n await configManager.setApiKey(apiKey);\n\n // Verify by fetching profile\n const user = await apiClient.getProfile();\n const plan = getUserPlan(user);\n\n logger.succeedSpinner(`Authenticated as ${getUserDisplayName(user)}!`);\n logger.success(`Plan: ${plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n // Remove invalid key\n await configManager.deleteApiKey();\n logger.failSpinner('Invalid API key');\n logger.error(error.message || 'Could not verify API key');\n throw error;\n }\n}\n\n/**\n * Logout command - remove stored credentials\n */\nexport async function logoutCommand(): Promise<void> {\n try {\n const apiKey = await configManager.getApiKey();\n\n if (!apiKey) {\n logger.info('You are not logged in');\n return;\n }\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Are you sure you want to log out?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.info('Logout cancelled');\n return;\n }\n\n // Delete API key from keychain\n await configManager.deleteApiKey();\n\n // Clear config (but keep API URL)\n const apiUrl = configManager.getApiUrl();\n configManager.clear();\n configManager.setApiUrl(apiUrl);\n\n logger.success('Successfully logged out');\n } catch (error: any) {\n logger.error('Logout failed');\n logger.error(error.message || 'Unknown error');\n process.exit(1);\n }\n}\n\n/**\n * Status command - show authentication status\n */\nexport async function statusCommand(): Promise<void> {\n try {\n const apiKey = await configManager.getApiKey();\n\n if (!apiKey) {\n logger.warn('Not authenticated');\n logger.info('Run \"devwing login\" to get started');\n return;\n }\n\n logger.startSpinner('Fetching profile...');\n\n try {\n const user = await apiClient.getProfile();\n const plan = getUserPlan(user);\n\n logger.succeedSpinner('Authenticated');\n logger.newline();\n\n console.log(chalk.bold('User Profile:'));\n console.log(` Email: ${user.email}`);\n console.log(` Name: ${getUserDisplayName(user)}`);\n console.log(` Plan: ${plan.toUpperCase()}`);\n if (user.is_verified !== undefined) {\n console.log(` Verified: ${user.is_verified ? chalk.green('Yes') : chalk.yellow('No')}`);\n }\n if (user.totp_enabled !== undefined) {\n console.log(` 2FA: ${user.totp_enabled ? chalk.green('Enabled') : chalk.dim('Disabled')}`);\n }\n\n const config = configManager.getAll();\n if (config.workspaceId) {\n console.log(` Workspace: ${config.workspaceId}`);\n }\n if (config.projectId) {\n console.log(` Project: ${config.projectId}`);\n }\n\n logger.newline();\n } catch (error: any) {\n logger.failSpinner('Failed to fetch profile');\n logger.error(error.message || 'API key may be invalid or expired');\n logger.info('Run \"devwing login\" to re-authenticate');\n }\n } catch (error: any) {\n logger.error('Failed to check status');\n logger.error(error.message || 'Unknown error');\n process.exit(1);\n }\n}\n\n/**\n * Show quick start guide\n */\nfunction showQuickStart(): void {\n logger.box(\n [\n 'Quick Start:',\n '',\n ' devwing \"fix the auth bug\" Ask anything',\n ' devwing chat Interactive chat mode',\n ' devwing scan Security scan',\n ' devwing review Code review',\n ' devwing explain file.js Explain code',\n '',\n 'For more commands, run: devwing --help',\n ].join('\\n'),\n { title: 'Ready to go!', color: 'green' }\n );\n}","/**\n * Context Collector\n * Scans project files and collects relevant context for AI\n */\n\nimport { promises as fs } from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { execSync } from 'child_process';\nimport { simpleGit, SimpleGit } from 'simple-git';\nimport { CollectedContext, FileContext } from '../types/index.js';\nimport { logger } from '../utils/logger.js';\n\ninterface CollectorOptions {\n maxFiles?: number;\n maxFileSize?: number; // in bytes\n maxTotalTokens?: number;\n includePatterns?: string[];\n excludePatterns?: string[];\n}\n\nconst DEFAULT_OPTIONS: CollectorOptions = {\n maxFiles: 50,\n maxFileSize: 100 * 1024, // 100KB\n maxTotalTokens: 100_000,\n excludePatterns: [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/.git/**',\n '**/coverage/**',\n '**/.next/**',\n '**/.vscode/**',\n '**/.idea/**',\n '**/*.log',\n '**/*.lock',\n '**/package-lock.json',\n '**/yarn.lock',\n '**/pnpm-lock.yaml',\n ],\n};\n\nclass ContextCollector {\n private git: SimpleGit;\n private cwd: string;\n private options: CollectorOptions;\n\n constructor(cwd: string = process.cwd(), options: CollectorOptions = {}) {\n this.cwd = cwd;\n this.git = simpleGit(cwd);\n this.options = { ...DEFAULT_OPTIONS, ...options };\n }\n\n /**\n * Collect all context for AI completion\n */\n async collect(prompt?: string): Promise<CollectedContext> {\n logger.debug('Collecting context from:', this.cwd);\n\n const context: CollectedContext = {\n files: [],\n cwd: this.cwd,\n shell: this.detectShell(),\n os: os.platform(),\n };\n\n // Collect git information\n try {\n const isRepo = await this.git.checkIsRepo();\n if (isRepo) {\n context.git_branch = await this.getCurrentBranch();\n context.git_diff = await this.getGitDiff();\n context.git_log = await this.getRecentCommits();\n }\n } catch (error) {\n logger.debug('Not a git repository or git not available');\n }\n\n // Detect runtime versions\n context.node_version = this.getNodeVersion();\n context.python_version = this.getPythonVersion();\n\n // Detect framework\n context.framework = await this.detectFramework();\n\n // Collect relevant files\n context.files = await this.collectFiles(prompt);\n\n logger.debug(`Collected ${context.files.length} files`);\n return context;\n }\n\n /**\n * Collect relevant files based on prompt and project state\n */\n private async collectFiles(prompt?: string): Promise<FileContext[]> {\n const files: FileContext[] = [];\n\n // 1. Get modified files from git (highest priority)\n const modifiedFiles = await this.getModifiedFiles();\n\n // 2. Get files mentioned in prompt\n const mentionedFiles = prompt ? this.extractFilePaths(prompt) : [];\n\n // 3. Get important config files\n const configFiles = await this.getConfigFiles();\n\n // Combine and deduplicate\n const filePaths = Array.from(\n new Set([...modifiedFiles, ...mentionedFiles, ...configFiles])\n );\n\n // Read files\n for (const filePath of filePaths.slice(0, this.options.maxFiles!)) {\n try {\n const fullPath = path.resolve(this.cwd, filePath);\n const stat = await fs.stat(fullPath);\n\n // Skip large files\n if (stat.size > this.options.maxFileSize!) {\n logger.debug(`Skipping large file: ${filePath} (${stat.size} bytes)`);\n continue;\n }\n\n const content = await fs.readFile(fullPath, 'utf-8');\n const language = this.detectLanguage(filePath);\n\n files.push({\n path: filePath,\n content,\n language,\n size: stat.size,\n });\n } catch (error) {\n logger.debug(`Failed to read file ${filePath}:`, error);\n }\n }\n\n return files;\n }\n\n /**\n * Get modified files from git\n */\n private async getModifiedFiles(): Promise<string[]> {\n try {\n const status = await this.git.status();\n return [\n ...status.modified,\n ...status.created,\n ...status.staged,\n ];\n } catch (error) {\n return [];\n }\n }\n\n /**\n * Extract file paths mentioned in prompt\n */\n private extractFilePaths(prompt: string): string[] {\n const paths: string[] = [];\n // Match common file path patterns\n const patterns = [\n /[\\w-]+\\/[\\w-/.]+\\.\\w+/g, // path/to/file.ext\n /[\\w-]+\\.\\w+/g, // file.ext\n ];\n\n for (const pattern of patterns) {\n const matches = prompt.match(pattern);\n if (matches) {\n paths.push(...matches);\n }\n }\n\n return paths;\n }\n\n /**\n * Get important config files\n */\n private async getConfigFiles(): Promise<string[]> {\n const configPatterns = [\n 'package.json',\n 'tsconfig.json',\n 'requirements.txt',\n 'Pipfile',\n 'Dockerfile',\n 'docker-compose.yml',\n '.env.example',\n 'README.md',\n ];\n\n const files: string[] = [];\n\n for (const pattern of configPatterns) {\n try {\n const fullPath = path.join(this.cwd, pattern);\n await fs.access(fullPath);\n files.push(pattern);\n } catch {\n // File doesn't exist, skip\n }\n }\n\n return files;\n }\n\n /**\n * Get current git branch\n */\n private async getCurrentBranch(): Promise<string> {\n try {\n const branch = await this.git.revparse(['--abbrev-ref', 'HEAD']);\n return branch.trim();\n } catch {\n return 'unknown';\n }\n }\n\n /**\n * Get git diff\n */\n private async getGitDiff(): Promise<string> {\n try {\n const diff = await this.git.diff();\n return diff.substring(0, 10_000); // Limit diff size\n } catch {\n return '';\n }\n }\n\n /**\n * Get recent commits\n */\n private async getRecentCommits(): Promise<string> {\n try {\n const log = await this.git.log({ maxCount: 5 });\n return log.all\n .map((commit) => `${commit.hash.substring(0, 7)} - ${commit.message}`)\n .join('\\n');\n } catch {\n return '';\n }\n }\n\n /**\n * Detect shell type\n */\n private detectShell(): string {\n return path.basename(process.env.SHELL || 'sh');\n }\n\n /**\n * Get Node.js version\n */\n private getNodeVersion(): string | undefined {\n try {\n return process.version;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Get Python version\n */\n private getPythonVersion(): string | undefined {\n try {\n const version = execSync('python --version 2>&1', { encoding: 'utf-8' });\n return version.trim();\n } catch {\n return undefined;\n }\n }\n\n /**\n * Detect framework from package.json or requirements.txt\n */\n private async detectFramework(): Promise<string | undefined> {\n try {\n // Check for Node.js frameworks\n const packageJsonPath = path.join(this.cwd, 'package.json');\n try {\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\n\n if (deps.next) return 'Next.js';\n if (deps.react) return 'React';\n if (deps.vue) return 'Vue';\n if (deps['@angular/core']) return 'Angular';\n if (deps.express) return 'Express';\n if (deps.fastify) return 'Fastify';\n } catch {\n // package.json doesn't exist\n }\n\n // Check for Python frameworks\n const requirementsPath = path.join(this.cwd, 'requirements.txt');\n try {\n const requirements = await fs.readFile(requirementsPath, 'utf-8');\n if (requirements.includes('django')) return 'Django';\n if (requirements.includes('flask')) return 'Flask';\n if (requirements.includes('fastapi')) return 'FastAPI';\n } catch {\n // requirements.txt doesn't exist\n }\n } catch (error) {\n logger.debug('Failed to detect framework:', error);\n }\n\n return undefined;\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 const languageMap: Record<string, string> = {\n '.js': 'javascript',\n '.jsx': 'javascript',\n '.ts': 'typescript',\n '.tsx': 'typescript',\n '.py': 'python',\n '.rb': 'ruby',\n '.go': 'go',\n '.rs': 'rust',\n '.java': 'java',\n '.cpp': 'cpp',\n '.c': 'c',\n '.h': 'c',\n '.hpp': 'cpp',\n '.cs': 'csharp',\n '.php': 'php',\n '.swift': 'swift',\n '.kt': 'kotlin',\n '.dart': 'dart',\n '.sh': 'bash',\n '.yml': 'yaml',\n '.yaml': 'yaml',\n '.json': 'json',\n '.xml': 'xml',\n '.html': 'html',\n '.css': 'css',\n '.scss': 'scss',\n '.md': 'markdown',\n '.sql': 'sql',\n };\n\n return languageMap[ext] || 'text';\n }\n}\n\nexport { ContextCollector, CollectorOptions };\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { exec } from 'child_process';\nimport util from 'util';\nimport axios from 'axios';\nimport { simpleGit } from 'simple-git';\n\nconst execAsync = util.promisify(exec);\n\nexport interface ToolResult {\n success: boolean;\n output: string;\n error?: string;\n metadata?: Record<string, any>;\n}\n\nexport class ToolEngine {\n private allowedProjectPath: string;\n private commandTimeout: number = 30000; // 30 seconds\n private maxFileSize: number = 10 * 1024 * 1024; // 10MB\n\n constructor(allowedProjectPath: string = process.cwd()) {\n this.allowedProjectPath = path.resolve(allowedProjectPath);\n }\n\n /**\n * Validate and resolve file path to prevent directory traversal\n */\n private validatePath(filePath: string): string {\n const resolvedPath = path.resolve(this.allowedProjectPath, filePath);\n \n // Check if path is within allowed directory\n if (!resolvedPath.startsWith(this.allowedProjectPath)) {\n throw new Error(`Security Error: Path '${filePath}' is outside allowed project directory`);\n }\n\n return resolvedPath;\n }\n\n // =================================================================\n // FILE OPERATIONS\n // =================================================================\n\n async readFile(filePath: string): Promise<ToolResult> {\n try {\n const validatedPath = this.validatePath(filePath);\n \n try {\n const stat = await fs.stat(validatedPath);\n if (!stat.isFile()) {\n return { success: false, output: '', error: `Path is not a file: ${filePath}` };\n }\n \n if (stat.size > this.maxFileSize) {\n return { success: false, output: '', error: `File too large: ${stat.size} bytes (max ${this.maxFileSize})` };\n }\n \n const content = await fs.readFile(validatedPath, 'utf-8');\n return {\n success: true,\n output: content,\n metadata: { size: stat.size, lines: content.split('\\n').length }\n };\n } catch (e: any) {\n if (e.code === 'ENOENT') {\n return { success: false, output: '', error: `File not found: ${filePath}` };\n }\n throw e;\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async writeFile(filePath: string, content: string, userConfirmed: boolean = false): Promise<ToolResult> {\n if (!userConfirmed) {\n return { success: false, output: '', error: 'User confirmation required for write_file operation' };\n }\n\n try {\n const validatedPath = this.validatePath(filePath);\n await fs.mkdir(path.dirname(validatedPath), { recursive: true });\n await fs.writeFile(validatedPath, content, 'utf-8');\n \n return {\n success: true,\n output: `File written: ${filePath}`,\n metadata: { path: validatedPath, size: Buffer.byteLength(content, 'utf8') }\n };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async listDirectory(dirPath: string = '.'): Promise<ToolResult> {\n try {\n const validatedPath = this.validatePath(dirPath);\n \n try {\n const stat = await fs.stat(validatedPath);\n if (!stat.isDirectory()) {\n return { success: false, output: '', error: `Path is not a directory: ${dirPath}` };\n }\n \n const items = await fs.readdir(validatedPath, { withFileTypes: true });\n \n const formattedItems = await Promise.all(items.map(async (item) => {\n const itemType = item.isDirectory() ? 'dir' : 'file';\n let size = 0;\n \n if (item.isFile()) {\n try {\n const itemStat = await fs.stat(path.join(validatedPath, item.name));\n size = itemStat.size;\n } catch (e) {\n // Ignore error getting size\n }\n }\n \n return { name: item.name, type: itemType, size };\n }));\n\n // Sort: directories first, then files alphabetically\n formattedItems.sort((a, b) => {\n if (a.type === b.type) return a.name.localeCompare(b.name);\n return a.type === 'dir' ? -1 : 1;\n });\n\n const outputLines = formattedItems.map(item => {\n return item.type === 'dir' ? `📁 ${item.name}/` : `📄 ${item.name} (${item.size} bytes)`;\n });\n\n return {\n success: true,\n output: outputLines.join('\\n'),\n metadata: { item_count: formattedItems.length }\n };\n } catch (e: any) {\n if (e.code === 'ENOENT') {\n return { success: false, output: '', error: `Directory not found: ${dirPath}` };\n }\n throw e;\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // SHELL EXECUTION\n // =================================================================\n\n async runCommand(command: string, cwd?: string, userConfirmed: boolean = false): Promise<ToolResult> {\n if (!userConfirmed) {\n return { success: false, output: '', error: 'User confirmation required for run_command operation' };\n }\n\n try {\n let execCwd = this.allowedProjectPath;\n if (cwd) {\n execCwd = this.validatePath(cwd);\n const stat = await fs.stat(execCwd);\n if (!stat.isDirectory()) {\n return { success: false, output: '', error: `Working directory not found: ${cwd}` };\n }\n }\n\n try {\n const { stdout, stderr } = await execAsync(command, { \n cwd: execCwd, \n timeout: this.commandTimeout,\n env: { ...process.env, TERM: 'dumb' }\n });\n\n return {\n success: true,\n output: stdout || stderr, // Some commands write to stderr even on success\n metadata: { command }\n };\n } catch (e: any) {\n return {\n success: false,\n output: e.stdout || '',\n error: e.stderr || e.message,\n metadata: { command, exit_code: e.code }\n };\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // GIT OPERATIONS\n // =================================================================\n\n async gitDiff(cwd?: string): Promise<ToolResult> {\n try {\n let gitCwd = this.allowedProjectPath;\n if (cwd) gitCwd = this.validatePath(cwd);\n \n const git = simpleGit(gitCwd);\n const diff = await git.diff();\n \n return { success: true, output: diff };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async gitLog(limit: number = 5, cwd?: string): Promise<ToolResult> {\n try {\n let gitCwd = this.allowedProjectPath;\n if (cwd) gitCwd = this.validatePath(cwd);\n \n const git = simpleGit(gitCwd);\n const log = await git.log({ maxCount: limit });\n\n const output = log.all.map(commit => `${commit.hash.substring(0, 7)} - ${commit.message}`).join('\\n');\n return { success: true, output };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async gitCommit(message: string, cwd?: string, userConfirmed: boolean = false): Promise<ToolResult> {\n if (!userConfirmed) {\n return { success: false, output: '', error: 'User confirmation required for git_commit operation' };\n }\n\n try {\n let gitCwd = this.allowedProjectPath;\n if (cwd) gitCwd = this.validatePath(cwd);\n \n const git = simpleGit(gitCwd);\n const result = await git.commit(message);\n \n return { \n success: true, \n output: `Committed: ${result.commit}\nBranch: ${result.branch}\nSummary: ${result.summary.changes} changes, ${result.summary.insertions} insertions, ${result.summary.deletions} deletions` \n };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // EXTERNAL API OPERATIONS\n // =================================================================\n\n async searchDocs(query: string, source: string = 'mdn'): Promise<ToolResult> {\n try {\n if (source === 'mdn') {\n const url = `https://developer.mozilla.org/api/v1/search?q=${encodeURIComponent(query)}`;\n const response = await axios.get(url, { timeout: 10000 });\n return { success: true, output: JSON.stringify(response.data, null, 2), metadata: { source } };\n } else if (source === 'stackoverflow') {\n const url = `https://api.stackexchange.com/2.3/search?order=desc&sort=activity&intitle=${encodeURIComponent(query)}&site=stackoverflow`;\n const response = await axios.get(url, { timeout: 10000 });\n return { success: true, output: JSON.stringify(response.data, null, 2), metadata: { source } };\n } else {\n return { success: false, output: '', error: `Unsupported documentation source: ${source}` };\n }\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n async httpRequest(url: string, method: string = 'GET', headers?: Record<string, string>, body?: string): Promise<ToolResult> {\n try {\n const response = await axios({\n url,\n method,\n headers,\n data: body,\n timeout: 10000\n });\n return { \n success: true, \n output: typeof response.data === 'string' ? response.data : JSON.stringify(response.data, null, 2), \n metadata: { status_code: response.status } \n };\n } catch (e: any) {\n return { \n success: false, \n output: '', \n error: e.response ? `HTTP ${e.response.status}: ${e.message}` : e.message \n };\n }\n }\n\n async cveLookup(cveId: string): Promise<ToolResult> {\n try {\n const url = `https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=${encodeURIComponent(cveId)}`;\n const response = await axios.get(url, { timeout: 10000 });\n return { success: true, output: JSON.stringify(response.data, null, 2), metadata: { cve_id: cveId } };\n } catch (e: any) {\n return { success: false, output: '', error: e.message };\n }\n }\n\n // =================================================================\n // TOOL EXECUTION DISPATCHER\n // =================================================================\n\n async executeTool(toolName: string, args: Record<string, any>, userConfirmed: boolean = false): Promise<ToolResult> {\n switch (toolName) {\n case 'read_file':\n return this.readFile(args.file_path || '');\n case 'write_file':\n return this.writeFile(args.file_path || '', args.content || '', userConfirmed);\n case 'list_directory':\n return this.listDirectory(args.dir_path || '.');\n case 'run_command':\n return this.runCommand(args.command || '', args.cwd, userConfirmed);\n case 'git_diff':\n return this.gitDiff(args.cwd);\n case 'git_log':\n return this.gitLog(args.limit || 5, args.cwd);\n case 'git_commit':\n return this.gitCommit(args.message || '', args.cwd, userConfirmed);\n case 'search_docs':\n return this.searchDocs(args.query || '', args.source || 'mdn');\n case 'http_request':\n return this.httpRequest(args.url || '', args.method || 'GET', args.headers, args.body);\n case 'cve_lookup':\n return this.cveLookup(args.cve_id || '');\n default:\n return { success: false, output: '', error: `Tool not implemented: ${toolName}` };\n }\n }\n}\n","/**\n * Streaming Renderer\n * Renders AI responses in terminal with syntax highlighting\n */\n\nimport chalk from 'chalk';\nimport { marked } from 'marked';\nimport TerminalRenderer from 'marked-terminal';\nimport { StreamMessage, ToolResult } from '../types/index.js';\nimport { logger } from '../utils/logger.js';\nimport inquirer from 'inquirer';\nimport { ToolEngine } from '../tools/engine.js';\n\n// Configure marked for terminal rendering\nmarked.setOptions({\n renderer: new TerminalRenderer({\n code: chalk.cyan,\n blockquote: chalk.gray.italic,\n html: chalk.gray,\n heading: chalk.bold.underline,\n firstHeading: chalk.bold.magenta,\n hr: chalk.reset,\n listitem: chalk.reset,\n list: chalk.reset,\n table: chalk.reset,\n paragraph: chalk.reset,\n strong: chalk.bold,\n em: chalk.italic,\n codespan: chalk.cyan,\n del: chalk.dim.strikethrough,\n link: chalk.blue.underline,\n href: chalk.blue.underline,\n }) as any,\n});\n\nclass StreamingRenderer {\n private buffer: string = '';\n private inCodeBlock: boolean = false;\n private toolEngine: ToolEngine;\n private pendingToolCalls: Array<{tool: string, args: any}> = [];\n private sessionId: string | null = null;\n\n constructor() {\n this.toolEngine = new ToolEngine(process.cwd());\n }\n\n getPendingToolCalls(): Array<{tool: string, args: any}> {\n return this.pendingToolCalls;\n }\n\n getSessionId(): string | null {\n return this.sessionId;\n }\n\n clearPendingTools(): void {\n this.pendingToolCalls = [];\n this.sessionId = null;\n }\n\n /**\n * Process stream message\n */\n async processMessage(message: StreamMessage): Promise<void> {\n switch (message.type) {\n case 'token':\n await this.handleToken(message.content || '');\n break;\n\n case 'tool_call':\n // Collect tool call for later execution\n if (message.tool) {\n this.pendingToolCalls.push({\n tool: message.tool,\n args: message.args || {}\n });\n await this.handleToolCall(message);\n }\n break;\n\n case 'tools_pending':\n // Backend is waiting for CLI to execute tools\n if (message.session_id) {\n this.sessionId = message.session_id;\n }\n await this.flushBuffer();\n break;\n\n case 'tool_result':\n await this.handleToolResult(message);\n break;\n\n case 'done':\n await this.handleDone(message);\n break;\n\n case 'error':\n await this.handleError(message);\n break;\n }\n }\n\n /**\n * Handle token (word/character from AI)\n */\n private async handleToken(token: string): Promise<void> {\n this.buffer += token;\n\n // Check for code blocks\n if (token.includes('```')) {\n this.inCodeBlock = !this.inCodeBlock;\n }\n\n // Flush buffer on newlines or when buffer gets large\n if (token.includes('\\n') || this.buffer.length > 1000) {\n await this.flushBuffer();\n } else {\n // Stream individual tokens for real-time feel\n process.stdout.write(token);\n }\n }\n\n /**\n * Flush accumulated buffer\n */\n private async flushBuffer(): Promise<void> {\n if (this.buffer.length === 0) return;\n\n // Don't render markdown mid-code-block\n if (this.inCodeBlock) {\n process.stdout.write(this.buffer);\n } else {\n // Render markdown\n try {\n const rendered = await marked(this.buffer);\n process.stdout.write(rendered);\n } catch (error) {\n // Fallback to plain text\n process.stdout.write(this.buffer);\n }\n }\n\n this.buffer = '';\n }\n\n /**\n * Handle tool call request from AI - just display it, execution happens later\n */\n private async handleToolCall(message: StreamMessage): Promise<void> {\n await this.flushBuffer();\n logger.newline();\n\n const { tool, args } = message;\n if (!tool) return;\n\n logger.info(chalk.yellow(`AI requested tool: ${chalk.bold(tool)}`));\n\n // Show tool arguments\n if (args && Object.keys(args).length > 0) {\n console.log(chalk.gray('Arguments:'));\n console.log(chalk.gray(JSON.stringify(args, null, 2)));\n }\n\n logger.newline();\n }\n\n /**\n * Execute all pending tool calls\n * This is called from prompt.ts after stream ends\n */\n async executePendingTools(): Promise<ToolResult[]> {\n const results: ToolResult[] = [];\n\n for (const { tool, args } of this.pendingToolCalls) {\n logger.newline();\n logger.info(chalk.yellow(`Executing ${chalk.bold(tool)}...`));\n\n // Check if tool requires confirmation\n const requiresConfirmation = this.requiresConfirmation(tool);\n let confirmed = true;\n\n if (requiresConfirmation) {\n const answers = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirmed',\n message: `Allow ${tool} to execute?`,\n default: false,\n },\n ]);\n confirmed = answers.confirmed;\n\n if (!confirmed) {\n logger.warn('Tool execution cancelled by user');\n results.push({\n tool,\n args,\n result: 'User denied permission',\n success: false\n });\n continue;\n }\n }\n\n logger.startSpinner(`Executing ${tool}...`);\n\n try {\n // Execute locally using ToolEngine\n const result = await this.toolEngine.executeTool(tool, args || {}, confirmed);\n\n logger.stopSpinner();\n\n if (result.success) {\n logger.success(`${tool} completed successfully`);\n\n const content = result.output || '';\n const preview = content.substring(0, 500);\n if (preview.length < content.length) {\n console.log(chalk.gray(preview + '... (truncated)'));\n } else {\n console.log(chalk.gray(preview));\n }\n\n results.push({\n tool,\n args,\n result: result.output || '',\n success: true\n });\n } else {\n logger.error(`${tool} failed: ${result.error}`);\n results.push({\n tool,\n args,\n result: result.error || 'Unknown error',\n success: false\n });\n }\n } catch (error: any) {\n logger.stopSpinner();\n logger.error(`${tool} threw error: ${error.message}`);\n results.push({\n tool,\n args,\n result: error.message,\n success: false\n });\n }\n }\n\n return results;\n }\n\n /**\n * Handle tool execution result (from backend)\n */\n private async handleToolResult(message: StreamMessage): Promise<void> {\n logger.stopSpinner();\n\n if (message.content) {\n // Show abbreviated result\n const preview = message.content.substring(0, 500);\n if (preview.length < message.content.length) {\n console.log(chalk.gray(preview + '... (truncated)'));\n } else {\n console.log(chalk.gray(preview));\n }\n }\n\n logger.newline();\n }\n\n /**\n * Handle completion done\n */\n private async handleDone(message: StreamMessage): Promise<void> {\n await this.flushBuffer();\n logger.newline();\n\n if (message.usage) {\n const { tokens_in, tokens_out, cost_usd } = message.usage;\n console.log(\n chalk.gray(\n `📊 Tokens: ${tokens_in.toLocaleString()} in, ${tokens_out.toLocaleString()} out | Cost: $${cost_usd.toFixed(4)}`\n )\n );\n }\n\n logger.newline();\n }\n\n /**\n * Handle error\n */\n private async handleError(message: StreamMessage): Promise<void> {\n await this.flushBuffer();\n logger.newline();\n logger.error(message.error || 'An error occurred');\n }\n\n /**\n * Check if tool requires user confirmation\n */\n private requiresConfirmation(tool: string): boolean {\n const destructiveTools = [\n 'write_file',\n 'run_command',\n 'git_commit',\n 'delete_file',\n 'modify_file',\n ];\n\n return destructiveTools.includes(tool);\n }\n\n /**\n * Reset renderer state\n */\n reset(): void {\n this.buffer = '';\n this.inCodeBlock = false;\n }\n}\n\nexport const streamingRenderer = new StreamingRenderer();\n","/**\n * Main Prompt Command\n * Sends natural language prompts to AI and streams responses\n */\n\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { ContextCollector } from '../context/collector.js';\nimport { streamingRenderer } from '../streaming/renderer.js';\nimport { logger } from '../utils/logger.js';\nimport { CLIOptions, CompletionRequest } from '../types/index.js';\n\n/**\n * Handle main prompt command\n */\nexport async function promptCommand(prompt: string, options: CLIOptions): Promise<void> {\n try {\n // Check authentication\n const apiKey = await configManager.getApiKey();\n if (!apiKey) {\n logger.error('Not authenticated. Run \"devwing login\" first.');\n process.exit(1);\n }\n\n // Collect context\n logger.startSpinner('Analyzing codebase...');\n const collector = new ContextCollector(process.cwd());\n const context = await collector.collect(prompt);\n logger.succeedSpinner('Context collected');\n\n logger.newline();\n logger.info('DevWing is thinking...');\n logger.newline();\n\n // Build completion request\n const request: CompletionRequest = {\n prompt,\n mode: options.mode,\n model: options.model,\n project_id: options.project || configManager.getProjectId(),\n context,\n stream: true,\n max_tokens: 4096,\n };\n\n // Main tool execution loop\n let continueLoop = true;\n\n while (continueLoop) {\n // Reset renderer state for each iteration\n streamingRenderer.reset();\n streamingRenderer.clearPendingTools();\n\n try {\n // Check if this is a continuation or initial request\n const sessionId = streamingRenderer.getSessionId();\n\n if (sessionId) {\n // This is a continuation - get tool results and call /completions/continue\n const toolResults = await streamingRenderer.executePendingTools();\n\n logger.newline();\n logger.info('Sending tool results back to AI...');\n logger.newline();\n\n // Stream continuation with tool results\n for await (const message of apiClient.continueCompletion(sessionId, toolResults)) {\n await streamingRenderer.processMessage(message);\n }\n } else {\n // Initial request - call /completions\n for await (const message of apiClient.streamCompletion(request)) {\n await streamingRenderer.processMessage(message);\n }\n }\n\n // Check if we have pending tools that need execution\n const pendingTools = streamingRenderer.getPendingToolCalls();\n const newSessionId = streamingRenderer.getSessionId();\n\n if (pendingTools.length > 0 && newSessionId) {\n // AI wants more tools executed - continue loop\n continueLoop = true;\n } else {\n // No more tools or no session ID - end loop\n continueLoop = false;\n }\n\n } catch (error: any) {\n logger.newline();\n logger.error('Request failed:', error);\n\n // Handle common errors\n if (error.message.includes('429')) {\n logger.warn('Rate limit exceeded. Please wait a moment and try again.');\n } else if (error.message.includes('quota')) {\n logger.warn('Token quota exceeded. Consider upgrading your plan.');\n } else if (error.message.includes('unauthorized')) {\n logger.warn('Authentication failed. Try running \"devwing login\" again.');\n }\n\n process.exit(1);\n }\n }\n\n logger.success('Done!');\n\n } catch (error: any) {\n logger.error('Command failed', error);\n process.exit(1);\n }\n}\n","/**\n * Specialized Commands\n * scan, review, explain, memory, etc.\n */\n\nimport { promptCommand } from './prompt.js';\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { logger } from '../utils/logger.js';\nimport { CLIOptions, AIMode } from '../types/index.js';\nimport chalk from 'chalk';\nimport Table from 'cli-table3';\nimport inquirer from 'inquirer';\n\n/**\n * Security scan command\n */\nexport async function scanCommand(options: CLIOptions): Promise<void> {\n logger.info('Running security vulnerability scan...');\n logger.newline();\n\n const prompt = `Perform a comprehensive security scan of this codebase. Check for:\n- Common vulnerabilities (OWASP Top 10)\n- Dependency vulnerabilities\n- Hardcoded secrets or credentials\n- SQL injection risks\n- XSS vulnerabilities\n- Insecure authentication/authorization\n- API security issues\n\nProvide a detailed report with severity levels and remediation steps.`;\n\n await promptCommand(prompt, { ...options, mode: 'security' });\n}\n\n/**\n * Code review command\n */\nexport async function reviewCommand(options: CLIOptions): Promise<void> {\n logger.info('Performing code review...');\n logger.newline();\n\n const prompt = `Conduct a thorough code review of the recent changes. Focus on:\n- Code quality and best practices\n- Potential bugs or edge cases\n- Performance issues\n- Readability and maintainability\n- Documentation completeness\n- Test coverage\n- Security concerns\n\nProvide specific suggestions for improvement.`;\n\n await promptCommand(prompt, { ...options, mode: options.mode || 'general' });\n}\n\n/**\n * Explain command - explain code, file, or concept\n */\nexport async function explainCommand(target: string, options: CLIOptions): Promise<void> {\n logger.info(`Explaining: ${target}`);\n logger.newline();\n\n const prompt = `Please explain ${target} in detail. Include:\n- What it does and how it works\n- Key components and their relationships\n- Any important patterns or techniques used\n- Potential gotchas or edge cases\n- How it fits into the larger system\n\nMake the explanation clear and accessible.`;\n\n await promptCommand(prompt, { ...options });\n}\n\n/**\n * Memory commands\n */\nexport async function memoryCommand(\n action: 'save' | 'show' | 'clear',\n content?: string,\n options: CLIOptions = {}\n): Promise<void> {\n const projectId = options.project || configManager.getProjectId();\n\n if (!projectId) {\n logger.error('No project configured. Use \"devwing config set project <project-id>\"');\n return;\n }\n\n try {\n switch (action) {\n case 'save':\n await memorySave(projectId, content!);\n break;\n\n case 'show':\n await memoryShow(projectId);\n break;\n\n case 'clear':\n await memoryClear(projectId);\n break;\n }\n } catch (error: any) {\n logger.error('Memory command failed', error);\n process.exit(1);\n }\n}\n\n/**\n * Save to project memory\n */\nasync function memorySave(projectId: string, content: string): Promise<void> {\n if (!content) {\n logger.error('Please provide content to save');\n return;\n }\n\n const { type } = await inquirer.prompt([\n {\n type: 'list',\n name: 'type',\n message: 'What type of memory is this?',\n choices: [\n { name: 'Context (general information)', value: 'context' },\n { name: 'Rule (coding standard or guideline)', value: 'rule' },\n { name: 'Decision (architectural decision)', value: 'decision' },\n { name: 'Summary (project summary)', value: 'summary' },\n ],\n },\n ]);\n\n logger.startSpinner('Saving to project memory...');\n\n try {\n await apiClient.addProjectMemory(projectId, content, type);\n logger.succeedSpinner('Memory saved successfully');\n } catch (error) {\n logger.failSpinner('Failed to save memory');\n throw error;\n }\n}\n\n/**\n * Show project memory\n */\nasync function memoryShow(projectId: string): Promise<void> {\n logger.startSpinner('Loading project memory...');\n\n try {\n const memories = await apiClient.getProjectMemory(projectId);\n logger.stopSpinner();\n\n if (memories.length === 0) {\n logger.info('No memories stored for this project yet');\n return;\n }\n\n logger.success(`Found ${memories.length} memory items`);\n logger.newline();\n\n // Create table\n const table = new Table({\n head: ['Type', 'Content', 'Created'],\n colWidths: [15, 60, 20],\n wordWrap: true,\n });\n\n for (const memory of memories) {\n const preview =\n memory.content.length > 100\n ? memory.content.substring(0, 100) + '...'\n : memory.content;\n\n table.push([\n chalk.cyan(memory.type),\n preview,\n new Date(memory.created_at).toLocaleDateString(),\n ]);\n }\n\n console.log(table.toString());\n } catch (error) {\n logger.failSpinner('Failed to load memory');\n throw error;\n }\n}\n\n/**\n * Clear project memory\n */\nasync function memoryClear(projectId: string): Promise<void> {\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Are you sure you want to clear all project memory?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.info('Operation cancelled');\n return;\n }\n\n logger.startSpinner('Clearing project memory...');\n\n try {\n const memories = await apiClient.getProjectMemory(projectId);\n\n for (const memory of memories) {\n await apiClient.deleteProjectMemory(projectId, memory.id);\n }\n\n logger.succeedSpinner('Project memory cleared');\n } catch (error) {\n logger.failSpinner('Failed to clear memory');\n throw error;\n }\n}\n\n/**\n * Config command\n */\nexport async function configCommand(\n action?: 'set' | 'get' | 'list',\n key?: string,\n value?: string\n): Promise<void> {\n try {\n if (!action || action === 'list') {\n // Show all config\n const config = configManager.getAll();\n const apiKey = await configManager.getApiKey();\n\n console.log(chalk.bold('Current Configuration:'));\n console.log(` API URL: ${config.apiUrl}`);\n console.log(` API Key: ${apiKey ? apiKey.substring(0, 12) + '...' : 'Not set'}`);\n console.log(` Workspace: ${config.workspaceId || 'Not set'}`);\n console.log(` Project: ${config.projectId || 'Not set'}`);\n console.log(` Model: ${config.model || 'Auto'}`);\n console.log(` Mode: ${config.mode || 'Auto'}`);\n console.log();\n console.log(chalk.gray(`Config file: ${configManager.getPath()}`));\n return;\n }\n\n if (action === 'get') {\n if (!key) {\n logger.error('Please specify a key to get');\n return;\n }\n\n const config = configManager.getAll();\n const val = (config as any)[key];\n console.log(val || 'Not set');\n return;\n }\n\n if (action === 'set') {\n if (!key || !value) {\n logger.error('Please specify both key and value');\n return;\n }\n\n // Handle different config keys\n switch (key) {\n case 'project':\n configManager.setProjectId(value);\n logger.success(`project set to: ${value}`);\n break;\n case 'workspace':\n configManager.setWorkspaceId(value);\n logger.success(`workspace set to: ${value}`);\n break;\n case 'model':\n configManager.setModel(value);\n logger.success(`model set to: ${value}`);\n break;\n case 'mode':\n // Validate AI mode\n const validModes: AIMode[] = ['general', 'frontend', 'backend', 'security', 'devops'];\n if (validModes.includes(value as AIMode)) {\n configManager.setMode(value as AIMode);\n logger.success(`mode set to: ${value}`);\n } else {\n logger.error(`Invalid mode. Must be one of: ${validModes.join(', ')}`);\n }\n break;\n case 'apiUrl':\n configManager.setApiUrl(value);\n logger.success(`apiUrl set to: ${value}`);\n break;\n default:\n logger.error(`Unknown config key: ${key}`);\n }\n }\n } catch (error: any) {\n logger.error('Config command failed', error);\n process.exit(1);\n }\n}\n","/**\n * Interactive Chat Command\n * Provides a persistent conversation interface like Claude Code\n */\n\nimport readline from 'readline';\nimport chalk from 'chalk';\nimport { apiClient } from '../api/client.js';\nimport { configManager } from '../config/manager.js';\nimport { ContextCollector } from '../context/collector.js';\nimport { streamingRenderer } from '../streaming/renderer.js';\nimport { logger } from '../utils/logger.js';\nimport { CLIOptions, CompletionRequest, CollectedContext } from '../types/index.js';\nimport { scanCommand, reviewCommand, explainCommand, memoryCommand } from './specialized.js';\n\ninterface Message {\n role: 'user' | 'assistant';\n content: string;\n}\n\nclass ChatSession {\n private conversationHistory: Message[] = [];\n private sessionContext: CollectedContext | null = null;\n private sessionId: string | null = null;\n\n addMessage(role: 'user' | 'assistant', content: string): void {\n this.conversationHistory.push({ role, content });\n }\n\n getHistory(): Message[] {\n return this.conversationHistory;\n }\n\n setContext(context: CollectedContext): void {\n this.sessionContext = context;\n }\n\n getContext(): CollectedContext | null {\n return this.sessionContext;\n }\n\n setSessionId(id: string): void {\n this.sessionId = id;\n }\n\n getSessionId(): string | null {\n return this.sessionId;\n }\n\n clear(): void {\n this.conversationHistory = [];\n this.sessionId = null;\n }\n\n getConversationSummary(): string {\n return this.conversationHistory\n .map(msg => `${msg.role === 'user' ? 'You' : 'DevWing'}: ${msg.content.substring(0, 100)}...`)\n .join('\\n');\n }\n}\n\n/**\n * Handle special chat commands\n */\nasync function handleSpecialCommand(command: string, session: ChatSession, options: CLIOptions): Promise<boolean> {\n const cmd = command.toLowerCase().trim();\n const parts = command.split(' ');\n const mainCmd = parts[0].toLowerCase();\n\n if (cmd === '/help') {\n logger.box([\n chalk.bold('DevWing Chat Commands:'),\n '',\n chalk.bold.yellow('Navigation & Session:'),\n chalk.cyan('/help') + ' - Show this help message',\n chalk.cyan('/exit, /quit') + ' - Exit chat mode',\n chalk.cyan('/clear') + ' - Clear conversation history',\n chalk.cyan('/context') + ' - Show current context',\n chalk.cyan('/history') + ' - Show conversation history',\n '',\n chalk.bold.yellow('Specialized Commands:'),\n chalk.cyan('/scan') + ' - Run security vulnerability scan',\n chalk.cyan('/review') + ' - Perform code review',\n chalk.cyan('/explain <target>') + ' - Explain code, file, or concept',\n '',\n chalk.bold.yellow('Project Memory:'),\n chalk.cyan('/memory save <content>') + ' - Save note to project memory',\n chalk.cyan('/memory show') + ' - Show all project memories',\n chalk.cyan('/memory clear') + ' - Clear all project memories',\n '',\n chalk.dim('Just type your message to chat with DevWing!'),\n ].join('\\n'), { title: 'Chat Commands', color: 'blue' });\n return true;\n }\n\n if (cmd === '/exit' || cmd === '/quit') {\n logger.info('Exiting chat mode...');\n return false; // Signal to exit\n }\n\n if (cmd === '/clear') {\n session.clear();\n console.clear();\n logger.success('Conversation cleared!');\n printWelcomeBanner();\n return true;\n }\n\n if (cmd === '/context') {\n const context = session.getContext();\n if (!context) {\n logger.warn('No context loaded yet. Send a message to load context.');\n return true;\n }\n\n logger.box([\n chalk.bold('Current Context:'),\n '',\n `Working Directory: ${chalk.cyan(context.cwd)}`,\n `Shell: ${context.shell}`,\n `OS: ${context.os}`,\n `Files: ${context.files.length}`,\n context.git_branch ? `Git Branch: ${context.git_branch}` : '',\n '',\n 'Files included:',\n ...context.files.slice(0, 10).map(f => ` • ${f.path}`),\n context.files.length > 10 ? ` ... and ${context.files.length - 10} more` : '',\n ].filter(Boolean).join('\\n'), { title: 'Context Info', color: 'cyan' });\n return true;\n }\n\n if (cmd === '/history') {\n const history = session.getHistory();\n if (history.length === 0) {\n logger.info('No conversation history yet.');\n return true;\n }\n\n logger.box([\n chalk.bold('Conversation History:'),\n '',\n session.getConversationSummary(),\n ].join('\\n'), { title: 'History', color: 'magenta' });\n return true;\n }\n\n // Specialized commands\n if (cmd === '/scan') {\n logger.newline();\n await scanCommand(options);\n return true;\n }\n\n if (cmd === '/review') {\n logger.newline();\n await reviewCommand(options);\n return true;\n }\n\n if (mainCmd === '/explain') {\n const target = parts.slice(1).join(' ').trim();\n if (!target) {\n logger.error('Please provide something to explain. Example: /explain src/auth.ts');\n return true;\n }\n logger.newline();\n await explainCommand(target, options);\n return true;\n }\n\n // Memory commands\n if (mainCmd === '/memory') {\n const subCmd = parts[1]?.toLowerCase();\n\n if (subCmd === 'save') {\n const content = parts.slice(2).join(' ').trim();\n if (!content) {\n logger.error('Please provide content to save. Example: /memory save Auth uses JWT');\n return true;\n }\n logger.newline();\n await memoryCommand('save', content, options);\n return true;\n }\n\n if (subCmd === 'show') {\n logger.newline();\n await memoryCommand('show', undefined, options);\n return true;\n }\n\n if (subCmd === 'clear') {\n logger.newline();\n await memoryCommand('clear', undefined, options);\n return true;\n }\n\n logger.error('Invalid memory command. Use: /memory save|show|clear');\n return true;\n }\n\n // Unknown command\n logger.warn(`Unknown command: ${mainCmd}. Type /help for available commands.`);\n return true;\n}\n\n/**\n * Print welcome banner\n */\nfunction printWelcomeBanner(): void {\n logger.box([\n chalk.bold.cyan('DevWing AI - Interactive Chat Mode'),\n '',\n 'Chat with AI about your codebase. Type your message and press Enter.',\n '',\n chalk.dim('Type /help for commands • /exit to quit'),\n ].join('\\n'), { title: '🚀 Welcome', color: 'cyan' });\n}\n\n/**\n * Main chat command handler\n */\nexport async function chatCommand(options: CLIOptions): Promise<void> {\n try {\n // Check authentication\n const apiKey = await configManager.getApiKey();\n if (!apiKey) {\n logger.error('Not authenticated. Run \"devwing login\" first.');\n process.exit(1);\n }\n\n // Initialize chat session\n const session = new ChatSession();\n\n // Print welcome banner\n console.clear();\n printWelcomeBanner();\n logger.newline();\n\n // Create readline interface\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.bold.green('You: '),\n });\n\n // Handle Ctrl+C gracefully\n rl.on('SIGINT', () => {\n logger.newline();\n logger.info('Exiting chat mode...');\n rl.close();\n process.exit(0);\n });\n\n // Collect initial context once\n logger.startSpinner('Loading codebase context...');\n const collector = new ContextCollector(process.cwd());\n const initialContext = await collector.collect(''); // Empty prompt for initial scan\n session.setContext(initialContext);\n logger.succeedSpinner('Context loaded!');\n logger.newline();\n\n // Show prompt\n rl.prompt();\n\n // Handle each line of input\n rl.on('line', async (input: string) => {\n const userMessage = input.trim();\n\n // Skip empty messages\n if (!userMessage) {\n rl.prompt();\n return;\n }\n\n // Handle special commands\n if (userMessage.startsWith('/')) {\n const shouldContinue = await handleSpecialCommand(userMessage, session, options);\n if (!shouldContinue) {\n rl.close();\n return;\n }\n logger.newline();\n rl.prompt();\n return;\n }\n\n // Add user message to history\n session.addMessage('user', userMessage);\n\n // Show thinking message\n logger.newline();\n logger.info(chalk.dim('DevWing is thinking...'));\n logger.newline();\n\n try {\n // Build completion request with conversation history\n const request: CompletionRequest = {\n prompt: buildPromptWithHistory(session),\n mode: options.mode,\n model: options.model,\n project_id: options.project || configManager.getProjectId(),\n context: session.getContext()!,\n stream: true,\n max_tokens: 4096,\n };\n\n // Stream AI response\n let assistantResponse = '';\n streamingRenderer.reset();\n streamingRenderer.clearPendingTools();\n\n for await (const message of apiClient.streamCompletion(request)) {\n await streamingRenderer.processMessage(message);\n\n // Collect assistant response for history\n if (message.type === 'token' && message.content) {\n assistantResponse += message.content;\n }\n\n // Save session ID for future tool calls\n if (message.session_id) {\n session.setSessionId(message.session_id);\n }\n }\n\n // Add assistant response to history\n if (assistantResponse) {\n session.addMessage('assistant', assistantResponse);\n }\n\n // Execute any pending tools\n const pendingTools = streamingRenderer.getPendingToolCalls();\n if (pendingTools.length > 0) {\n logger.newline();\n logger.info('Executing tools...');\n const toolResults = await streamingRenderer.executePendingTools();\n\n // Continue conversation with tool results\n if (session.getSessionId()) {\n for await (const message of apiClient.continueCompletion(session.getSessionId()!, toolResults)) {\n await streamingRenderer.processMessage(message);\n }\n }\n }\n\n logger.newline();\n logger.newline();\n\n } catch (error: any) {\n logger.newline();\n logger.error('Error:', error.message || error);\n logger.newline();\n }\n\n // Show prompt again\n rl.prompt();\n });\n\n // Handle close\n rl.on('close', () => {\n logger.newline();\n logger.success('Chat session ended. Goodbye!');\n process.exit(0);\n });\n\n } catch (error: any) {\n logger.error('Chat command failed', error);\n process.exit(1);\n }\n}\n\n/**\n * Build prompt with conversation history\n */\nfunction buildPromptWithHistory(session: ChatSession): string {\n const history = session.getHistory();\n\n if (history.length === 0) {\n return '';\n }\n\n // Get last user message as primary prompt\n const lastUserMessage = history[history.length - 1];\n\n if (history.length === 1) {\n return lastUserMessage.content;\n }\n\n // Include recent conversation history for context\n const recentHistory = history.slice(-10); // Last 10 messages\n const historyContext = recentHistory\n .slice(0, -1) // Exclude the current message\n .map(msg => `${msg.role === 'user' ? 'User' : 'Assistant'}: ${msg.content}`)\n .join('\\n\\n');\n\n return `Previous conversation:\\n${historyContext}\\n\\nCurrent question:\\n${lastUserMessage.content}`;\n}","/**\n * Update Command\n * Checks for and installs CLI updates\n */\n\nimport { execSync } from 'child_process';\nimport { readFileSync } from 'fs';\nimport { join } from 'path';\nimport { fileURLToPath } from 'url';\nimport { dirname } from 'path';\nimport semver from 'semver';\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport { logger } from '../utils/logger.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\ninterface PackageInfo {\n name: string;\n version: string;\n}\n\ninterface NPMRegistryResponse {\n 'dist-tags': {\n latest: string;\n };\n versions: Record<string, unknown>;\n}\n\n/**\n * Get current CLI version from package.json\n */\nfunction getCurrentVersion(): string {\n try {\n // Try multiple paths - production vs development\n const possiblePaths = [\n join(__dirname, '../package.json'), // Production: dist/ -> package.json\n join(__dirname, '../../package.json'), // Development: src/commands/ -> package.json\n ];\n\n for (const packageJsonPath of possiblePaths) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.version;\n } catch {\n // Try next path\n continue;\n }\n }\n\n throw new Error('package.json not found in any expected location');\n } catch (error) {\n logger.error('Failed to read package version', error);\n return '0.1.0'; // Fallback version\n }\n}\n\n/**\n * Get package name from package.json\n */\nfunction getPackageName(): string {\n try {\n // Try multiple paths - production vs development\n const possiblePaths = [\n join(__dirname, '../package.json'), // Production: dist/ -> package.json\n join(__dirname, '../../package.json'), // Development: src/commands/ -> package.json\n ];\n\n for (const packageJsonPath of possiblePaths) {\n try {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.name;\n } catch {\n // Try next path\n continue;\n }\n }\n\n throw new Error('package.json not found in any expected location');\n } catch (error) {\n logger.error('Failed to read package name', error);\n return 'devwing'; // Correct fallback\n }\n}\n\n/**\n * Fetch latest version from npm registry\n */\nasync function getLatestVersion(packageName: string): Promise<string | null> {\n try {\n const response = await fetch(`https://registry.npmjs.org/${packageName}`);\n\n if (!response.ok) {\n throw new Error(`Registry responded with ${response.status}`);\n }\n\n const data = await response.json() as NPMRegistryResponse;\n return data['dist-tags'].latest;\n } catch (error) {\n logger.error('Failed to fetch latest version from npm registry', error);\n return null;\n }\n}\n\n/**\n * Check if package manager is available\n */\nfunction detectPackageManager(): 'npm' | 'pnpm' | 'yarn' | null {\n try {\n execSync('pnpm --version', { stdio: 'ignore' });\n return 'pnpm';\n } catch {\n // pnpm not available\n }\n\n try {\n execSync('yarn --version', { stdio: 'ignore' });\n return 'yarn';\n } catch {\n // yarn not available\n }\n\n try {\n execSync('npm --version', { stdio: 'ignore' });\n return 'npm';\n } catch {\n // npm not available\n }\n\n return null;\n}\n\n/**\n * Install update using package manager\n */\nfunction installUpdate(packageName: string, packageManager: string, version: string): boolean {\n try {\n logger.startSpinner(`Installing ${packageName}@${version}...`);\n\n const command = packageManager === 'yarn'\n ? `yarn global add ${packageName}@${version}`\n : `${packageManager} install -g ${packageName}@${version}`;\n\n execSync(command, { stdio: 'inherit' });\n\n logger.stopSpinner();\n return true;\n } catch (error) {\n logger.stopSpinner();\n logger.error('Failed to install update', error);\n return false;\n }\n}\n\n/**\n * Display update information\n */\nfunction displayUpdateInfo(currentVersion: string, latestVersion: string): void {\n console.log();\n console.log(chalk.cyan('━'.repeat(60)));\n console.log(chalk.bold.cyan(' DevWing CLI Update Available'));\n console.log(chalk.cyan('━'.repeat(60)));\n console.log();\n console.log(` ${chalk.gray('Current version:')} ${chalk.yellow(currentVersion)}`);\n console.log(` ${chalk.gray('Latest version:')} ${chalk.green(latestVersion)}`);\n console.log();\n console.log(chalk.gray(' Changelog: https://github.com/devwing/devwing/releases'));\n console.log();\n}\n\n/**\n * Update command\n */\nexport async function updateCommand(options?: { check?: boolean; force?: boolean }): Promise<void> {\n try {\n const currentVersion = getCurrentVersion();\n const packageName = getPackageName();\n\n console.log();\n console.log(chalk.cyan(`📦 DevWing CLI v${currentVersion}`));\n console.log();\n\n // Check for updates\n logger.startSpinner('Checking for updates...');\n const latestVersion = await getLatestVersion(packageName);\n logger.stopSpinner();\n\n if (!latestVersion) {\n logger.warn('Unable to check for updates. Please check your internet connection.');\n return;\n }\n\n // Compare versions\n const isNewer = semver.gt(latestVersion, currentVersion);\n\n if (!isNewer) {\n logger.success(`You're running the latest version (v${currentVersion})`);\n return;\n }\n\n // Display update info\n displayUpdateInfo(currentVersion, latestVersion);\n\n // If --check-only flag, just show info and exit\n if (options?.check) {\n logger.info('Run \"devwing update\" to install the latest version');\n return;\n }\n\n // Detect package manager\n const packageManager = detectPackageManager();\n\n if (!packageManager) {\n logger.error('No package manager found. Please install npm, pnpm, or yarn.');\n return;\n }\n\n logger.info(`Detected package manager: ${chalk.cyan(packageManager)}`);\n\n // Confirm update (unless --force)\n if (!options?.force) {\n const { confirm } = await inquirer.prompt<{ confirm: boolean }>([\n {\n type: 'confirm',\n name: 'confirm',\n message: `Update to v${latestVersion}?`,\n default: true,\n },\n ]);\n\n if (!confirm) {\n logger.info('Update cancelled');\n return;\n }\n }\n\n // Install update\n console.log();\n const success = installUpdate(packageName, packageManager, latestVersion);\n\n if (success) {\n console.log();\n logger.success(`Successfully updated to v${latestVersion}`);\n console.log();\n console.log(chalk.gray(' Run \"devwing --version\" to verify'));\n console.log();\n } else {\n console.log();\n logger.error('Update failed. Please try manually:');\n console.log();\n console.log(chalk.gray(` ${packageManager} install -g ${packageName}@${latestVersion}`));\n console.log();\n process.exit(1);\n }\n } catch (error) {\n logger.error('Update check failed', error);\n process.exit(1);\n }\n}\n\n/**\n * Silent background update check (non-blocking)\n * Shows notification if update available but doesn't interrupt workflow\n */\nexport async function checkUpdateSilent(): Promise<void> {\n try {\n const currentVersion = getCurrentVersion();\n const packageName = getPackageName();\n const latestVersion = await getLatestVersion(packageName);\n\n if (!latestVersion) {\n return; // Silently fail\n }\n\n const isNewer = semver.gt(latestVersion, currentVersion);\n\n if (isNewer) {\n // Show subtle notification\n console.log();\n console.log(chalk.dim('━'.repeat(60)));\n console.log(\n chalk.dim(` 💡 Update available: ${chalk.yellow(currentVersion)} → ${chalk.green(latestVersion)}`)\n );\n console.log(chalk.dim(` Run \"devwing update\" to install the latest version`));\n console.log(chalk.dim('━'.repeat(60)));\n console.log();\n }\n } catch {\n // Silently fail - don't interrupt user workflow\n }\n}\n","/**\n * Demo Mode — Full CLI Simulation\n * Activated via: DEVWING_DEMO=1 environment variable\n *\n * Simulates every CLI command with mock data for video recording.\n * No backend connection required.\n *\n * Demo credentials:\n * Email: aliyu@devwing.ai\n * Password: DevWing2026!\n * API Key: dw_sk_demo_4xK9mQzR2pLvBnWcYjEtHuFi\n */\n\nimport chalk from 'chalk';\nimport inquirer from 'inquirer';\nimport Table from 'cli-table3';\nimport { logger } from '../utils/logger.js';\nimport { configManager } from '../config/manager.js';\nimport { CLIOptions } from '../types/index.js';\n\n// ============================================================\n// TIMING\n// ============================================================\n\nconst TYPING_SPEED = 16;\nconst PAUSE_SHORT = 300;\nconst PAUSE_MEDIUM = 800;\nconst PAUSE_LONG = 1500;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nasync function typeOut(text: string, speed = TYPING_SPEED): Promise<void> {\n for (const char of text) {\n process.stdout.write(char);\n await sleep(speed);\n }\n}\n\nasync function typeLine(text: string, speed = TYPING_SPEED): Promise<void> {\n await typeOut(text, speed);\n process.stdout.write('\\n');\n}\n\n// ============================================================\n// MOCK DATA\n// ============================================================\n\nconst DEMO_USER = {\n id: 'usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890',\n email: 'aliyu@devwing.ai',\n full_name: 'Aliyu Mohammed',\n subscription_plan: 'pro',\n is_verified: true,\n totp_enabled: false,\n created_at: '2026-01-15T08:00:00Z',\n};\n\nconst DEMO_API_KEY = 'dw_sk_demo_4xK9mQzR2pLvBnWcYjEtHuFi';\nconst DEMO_PASSWORD = 'DevWing2026!';\n\n// Used in demoStatusCommand for workspace/project display\nconst DEMO_WORKSPACE = {\n id: 'ws_kano-smart-gov',\n name: 'Kano State Government',\n slug: 'kano-smart',\n plan: 'enterprise',\n seat_count: 12,\n seat_limit: 50,\n};\n\nconst DEMO_PROJECT = {\n id: 'prj_kano-smart-api',\n name: 'Kano Smart API',\n slug: 'kano-smart-api',\n description: 'Backend API for Kano Smart — AI assistant for 16M residents',\n};\n\nconst DEMO_MEMORIES = [\n { id: 'mem_001', type: 'rule', content: 'All API responses must include Hausa language support', created_at: '2026-03-01T10:00:00Z' },\n { id: 'mem_002', type: 'context', content: 'Auth uses JWT with RS256 signing, 1hr expiry, refresh tokens in Redis', created_at: '2026-03-05T14:00:00Z' },\n { id: 'mem_003', type: 'decision', content: 'Chose PostgreSQL over MongoDB for ACID compliance — government data requires strict consistency', created_at: '2026-03-10T09:00:00Z' },\n { id: 'mem_004', type: 'summary', content: 'Kano Smart serves 16M residents via kanostate.gov.ng and smart.kano.gov.ng — all responses branded \"Powered by devwing.ai\"', created_at: '2026-03-15T11:00:00Z' },\n];\n\n// ============================================================\n// DEMO: LOGIN\n// ============================================================\n\nexport async function demoLoginCommand(): Promise<void> {\n try {\n // Check if already logged in (in demo mode)\n const existingKey = await configManager.getApiKey();\n if (existingKey) {\n const { overwrite } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'overwrite',\n message: 'You are already logged in. Do you want to log in with a different account?',\n default: false,\n },\n ]);\n if (!overwrite) {\n logger.info('Login cancelled');\n return;\n }\n }\n\n logger.printBanner();\n logger.newline();\n\n const { method } = await inquirer.prompt([\n {\n type: 'list',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n { name: 'Via Browser (easiest)', value: 'browser' },\n { name: 'Email & Password', value: 'email' },\n { name: 'API Key (from dashboard)', value: 'apikey' },\n ],\n },\n ]);\n\n if (method === 'email') {\n await demoLoginEmail();\n } else if (method === 'browser') {\n await demoLoginBrowser();\n } else {\n await demoLoginApiKey();\n }\n } catch (error: any) {\n logger.error('Login failed');\n if (error.message) logger.error(error.message);\n process.exit(1);\n }\n}\n\nasync function demoLoginEmail(): Promise<void> {\n const { email, password } = await inquirer.prompt([\n {\n type: 'input',\n name: 'email',\n message: 'Email:',\n validate: (input: string) => {\n if (!input.includes('@') || !input.includes('.')) return 'Please enter a valid email address';\n return true;\n },\n },\n {\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n },\n ]);\n\n logger.startSpinner('Authenticating...');\n await sleep(1200);\n\n // Validate demo credentials\n if (email !== DEMO_USER.email || password !== DEMO_PASSWORD) {\n logger.failSpinner('Authentication failed');\n logger.error('Incorrect email or password');\n return;\n }\n\n logger.updateSpinner('Creating API key...');\n await sleep(800);\n\n // Store demo API key\n await configManager.setApiKey(DEMO_API_KEY);\n\n logger.succeedSpinner(`Welcome back, ${DEMO_USER.full_name}!`);\n logger.success(`Plan: ${DEMO_USER.subscription_plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n}\n\nasync function demoLoginBrowser(): Promise<void> {\n logger.startSpinner('Initiating browser authentication...');\n await sleep(1000);\n logger.succeedSpinner('Device code created');\n logger.newline();\n\n logger.success('Browser opened! Please log in to authorize this device.');\n logger.newline();\n logger.info(chalk.dim('Device code: fSibdCwR...'));\n logger.startSpinner('Waiting for authorization...');\n\n // Simulate polling delay\n await sleep(3000);\n logger.updateSpinner('Authorization received!');\n await sleep(500);\n\n // Store demo API key\n await configManager.setApiKey(DEMO_API_KEY);\n\n logger.updateSpinner('Fetching profile...');\n await sleep(600);\n\n logger.succeedSpinner(`Welcome, ${DEMO_USER.full_name}!`);\n logger.success(`Plan: ${DEMO_USER.subscription_plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n}\n\nasync function demoLoginApiKey(): Promise<void> {\n logger.info(`Get your API key from the dashboard`);\n logger.newline();\n\n const { apiKey } = await inquirer.prompt([\n {\n type: 'password',\n name: 'apiKey',\n message: 'API Key:',\n mask: '*',\n validate: (input: string) => {\n if (!input.startsWith('dw_sk_')) return 'Invalid API key format. Should start with \"dw_sk_\"';\n if (input.length < 20) return 'API key seems too short';\n return true;\n },\n },\n ]);\n\n logger.startSpinner('Verifying API key...');\n await sleep(1000);\n\n if (apiKey !== DEMO_API_KEY) {\n logger.failSpinner('Invalid API key');\n logger.error('API key not recognized');\n return;\n }\n\n await configManager.setApiKey(apiKey);\n\n logger.succeedSpinner(`Authenticated as ${DEMO_USER.full_name}!`);\n logger.success(`Plan: ${DEMO_USER.subscription_plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n}\n\nfunction showQuickStart(): void {\n logger.box(\n [\n 'Quick Start:',\n '',\n ' devwing \"fix the auth bug\" Ask anything',\n ' devwing chat Interactive chat mode',\n ' devwing scan Security scan',\n ' devwing review Code review',\n ' devwing explain file.js Explain code',\n '',\n 'For more commands, run: devwing --help',\n ].join('\\n'),\n { title: 'Ready to go!', color: 'green' }\n );\n}\n\n// ============================================================\n// DEMO: STATUS\n// ============================================================\n\nexport async function demoStatusCommand(): Promise<void> {\n const apiKey = await configManager.getApiKey();\n\n if (!apiKey) {\n logger.warn('Not authenticated');\n logger.info('Run \"devwing login\" to get started');\n return;\n }\n\n logger.startSpinner('Fetching profile...');\n await sleep(800);\n logger.succeedSpinner('Authenticated');\n logger.newline();\n\n console.log(chalk.bold('User Profile:'));\n console.log(` Email: ${DEMO_USER.email}`);\n console.log(` Name: ${DEMO_USER.full_name}`);\n console.log(` Plan: ${DEMO_USER.subscription_plan.toUpperCase()}`);\n console.log(` Verified: ${chalk.green('Yes')}`);\n console.log(` 2FA: ${chalk.dim('Disabled')}`);\n console.log(` Workspace: ${DEMO_WORKSPACE.name} (${DEMO_WORKSPACE.plan})`);\n console.log(` Project: ${DEMO_PROJECT.name}`);\n\n logger.newline();\n}\n\n// ============================================================\n// DEMO: LOGOUT\n// ============================================================\n\nexport async function demoLogoutCommand(): Promise<void> {\n const apiKey = await configManager.getApiKey();\n if (!apiKey) {\n logger.info('You are not logged in');\n return;\n }\n\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Are you sure you want to log out?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.info('Logout cancelled');\n return;\n }\n\n await configManager.deleteApiKey();\n const apiUrl = configManager.getApiUrl();\n configManager.clear();\n configManager.setApiUrl(apiUrl);\n\n logger.success('Successfully logged out');\n}\n\n// ============================================================\n// DEMO: MEMORY\n// ============================================================\n\nexport async function demoMemoryCommand(\n action: 'save' | 'show' | 'clear',\n content?: string,\n): Promise<void> {\n if (action === 'show') {\n logger.startSpinner('Loading project memory...');\n await sleep(800);\n logger.stopSpinner();\n\n logger.success(`Found ${DEMO_MEMORIES.length} memory items`);\n logger.newline();\n\n const table = new Table({\n head: [chalk.bold('Type'), chalk.bold('Content'), chalk.bold('Created')],\n colWidths: [15, 60, 15],\n wordWrap: true,\n });\n\n for (const memory of DEMO_MEMORIES) {\n const preview = memory.content.length > 80\n ? memory.content.substring(0, 80) + '...'\n : memory.content;\n\n table.push([\n chalk.cyan(memory.type),\n preview,\n new Date(memory.created_at).toLocaleDateString(),\n ]);\n }\n\n console.log(table.toString());\n } else if (action === 'save') {\n if (!content) {\n logger.error('Please provide content to save');\n return;\n }\n\n const { type } = await inquirer.prompt([\n {\n type: 'list',\n name: 'type',\n message: 'What type of memory is this?',\n choices: [\n { name: 'Context (general information)', value: 'context' },\n { name: 'Rule (coding standard or guideline)', value: 'rule' },\n { name: 'Decision (architectural decision)', value: 'decision' },\n { name: 'Summary (project summary)', value: 'summary' },\n ],\n },\n ]);\n\n logger.startSpinner('Saving to project memory...');\n await sleep(1000);\n logger.succeedSpinner(`Memory saved as ${type}`);\n } else if (action === 'clear') {\n const { confirm } = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'confirm',\n message: 'Are you sure you want to clear all project memory?',\n default: false,\n },\n ]);\n\n if (!confirm) {\n logger.info('Operation cancelled');\n return;\n }\n\n logger.startSpinner('Clearing project memory...');\n await sleep(800);\n logger.succeedSpinner('Project memory cleared');\n }\n}\n\n// ============================================================\n// DEMO: EXPLAIN\n// ============================================================\n\nexport async function demoExplainCommand(target: string): Promise<void> {\n await requireDemoAuth();\n await showContextLoading(24, 'general');\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(1500);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta(`## Explaining: ${target}`));\n console.log();\n\n if (target.includes('auth') || target.includes('middleware')) {\n await typeLine(`The auth middleware at ${chalk.cyan(target)} handles request authentication:`);\n console.log();\n await typeLine(' 1. Extracts the JWT token from the `Authorization: Bearer` header');\n await typeLine(' 2. Verifies the token signature using RS256 algorithm');\n await typeLine(' 3. Checks token expiration and issuer claims');\n await typeLine(' 4. Loads the user from the database using the `sub` claim');\n await typeLine(' 5. Attaches the user object to `req.user` for downstream handlers');\n console.log();\n await typeLine(chalk.bold('Key patterns:'));\n await typeLine(` ${chalk.green('•')} Uses decorator pattern — ${chalk.cyan('@authenticate')} on route handlers`);\n await typeLine(` ${chalk.green('•')} Implements token refresh via ${chalk.cyan('X-Refresh-Token')} header`);\n await typeLine(` ${chalk.green('•')} Rate limited to prevent brute force (10 req/min per IP)`);\n console.log();\n await typeLine(chalk.dim('This middleware is critical — it protects all /api/* routes.'));\n } else {\n await typeLine(`${chalk.cyan(target)} is a core component of the system.`);\n console.log();\n await typeLine(` ${chalk.green('•')} Responsible for handling ${target}-related logic`);\n await typeLine(` ${chalk.green('•')} Integrates with the main application pipeline`);\n await typeLine(` ${chalk.green('•')} Well-structured with clear separation of concerns`);\n }\n\n await showUsage(1200, 680, 0.0045, 'general');\n logger.success('Done!');\n}\n\n// ============================================================\n// DEMO: REVIEW\n// ============================================================\n\nexport async function demoReviewCommand(): Promise<void> {\n await requireDemoAuth();\n\n logger.info('Performing code review...');\n logger.newline();\n\n await showContextLoading(38, 'general');\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(2000);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta('## Code Review — Recent Changes'));\n console.log();\n\n await typeLine(chalk.bold('Files reviewed: 5 | Commits: 3 | Lines changed: +142 / -67'));\n console.log();\n\n await typeLine(chalk.green.bold(' ✓ GOOD') + ' — Error handling is consistent across all new endpoints');\n await typeLine(chalk.green.bold(' ✓ GOOD') + ' — Database queries use parameterized statements');\n await typeLine(chalk.green.bold(' ✓ GOOD') + ' — TypeScript strict mode is properly enforced');\n console.log();\n\n await typeLine(chalk.yellow.bold(' ▲ SUGGESTION') + ' — Consider extracting the validation logic at ' + chalk.cyan('user_service.ts:45'));\n await typeLine(chalk.gray(' The email regex pattern is duplicated in 3 files. Move to a shared validator.'));\n console.log();\n\n await typeLine(chalk.yellow.bold(' ▲ SUGGESTION') + ' — Missing error boundary in ' + chalk.cyan('api_handler.ts:78'));\n await typeLine(chalk.gray(' The async handler doesn\\'t catch unhandled promise rejections. Wrap in try/catch.'));\n console.log();\n\n await typeLine(chalk.red.bold(' ■ ISSUE') + ' — Potential memory leak in ' + chalk.cyan('websocket_manager.ts:120'));\n await typeLine(chalk.gray(' Event listeners are added on each connection but never removed on disconnect.'));\n console.log();\n\n await typeLine(chalk.bold('Summary: ') + chalk.green('3 good') + ' | ' + chalk.yellow('2 suggestions') + ' | ' + chalk.red('1 issue'));\n\n await showUsage(2800, 1200, 0.0095, 'general');\n logger.success('Done!');\n}\n\n// ============================================================\n// DEMO: PROMPT (main AI command)\n// ============================================================\n\nexport async function demoPromptCommand(prompt: string, options: CLIOptions): Promise<void> {\n await requireDemoAuth();\n const promptLower = prompt.toLowerCase();\n\n if (promptLower.includes('refactor') && promptLower.includes('auth')) {\n await demoBackendRefactor();\n } else if (promptLower.includes('scan') || promptLower.includes('owasp') || promptLower.includes('vulnerabilit')) {\n await demoSecurityScan();\n } else if (promptLower.includes('explain')) {\n const target = prompt.replace(/explain\\s*/i, '').trim() || 'this code';\n await demoExplainCommand(target);\n } else if (promptLower.includes('review')) {\n await demoReviewCommand();\n } else if (promptLower.includes('deploy') || promptLower.includes('docker') || promptLower.includes('kubernetes')) {\n await demoDeployAssist(prompt);\n } else if (promptLower.includes('fix') || promptLower.includes('bug') || promptLower.includes('error')) {\n await demoBugFix(prompt);\n } else if (promptLower.includes('test') || promptLower.includes('spec')) {\n await demoWriteTests(prompt);\n } else {\n await demoGenericPrompt(prompt, options);\n }\n}\n\n// ============================================================\n// DEMO: CHAT (interactive)\n// ============================================================\n\nexport async function demoChatCommand(options: CLIOptions): Promise<void> {\n await requireDemoAuth();\n\n const readline = await import('readline');\n\n console.clear();\n logger.box([\n chalk.bold.cyan('DevWing AI - Interactive Chat Mode'),\n '',\n 'Chat with AI about your codebase. Type your message and press Enter.',\n '',\n chalk.dim('Type /help for commands | /exit to quit'),\n ].join('\\n'), { title: 'Welcome', color: 'cyan' });\n logger.newline();\n\n logger.startSpinner('Loading codebase context...');\n await sleep(1200);\n logger.succeedSpinner('Context loaded — 34 files');\n logger.newline();\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: chalk.bold.green('You: '),\n });\n\n rl.on('SIGINT', () => {\n logger.newline();\n logger.info('Exiting chat mode...');\n rl.close();\n process.exit(0);\n });\n\n rl.prompt();\n\n rl.on('line', async (input: string) => {\n const msg = input.trim();\n\n if (!msg) { rl.prompt(); return; }\n\n if (msg === '/exit' || msg === '/quit') {\n logger.info('Exiting chat mode...');\n rl.close();\n return;\n }\n\n if (msg === '/help') {\n logger.box([\n chalk.bold('DevWing Chat Commands:'),\n '',\n chalk.cyan('/help') + ' — Show this message',\n chalk.cyan('/exit') + ' — Exit chat mode',\n chalk.cyan('/scan') + ' — Security scan',\n chalk.cyan('/review') + ' — Code review',\n chalk.cyan('/context') + ' — Show loaded context',\n chalk.cyan('/memory show') + ' — Show project memory',\n ].join('\\n'), { title: 'Commands', color: 'blue' });\n logger.newline();\n rl.prompt();\n return;\n }\n\n if (msg === '/context') {\n logger.box([\n chalk.bold('Current Context:'),\n '',\n `Working Directory: ${chalk.cyan(process.cwd())}`,\n `Shell: zsh | OS: darwin`,\n `Files: 34 | Git Branch: main`,\n '',\n 'Top files:',\n ' • src/auth/auth_controller.ts',\n ' • src/middleware/jwt.middleware.ts',\n ' • src/services/user_service.ts',\n ' • package.json',\n ' ... and 30 more',\n ].join('\\n'), { title: 'Context', color: 'cyan' });\n logger.newline();\n rl.prompt();\n return;\n }\n\n if (msg === '/memory show') {\n await demoMemoryCommand('show');\n logger.newline();\n rl.prompt();\n return;\n }\n\n if (msg === '/scan') {\n logger.newline();\n await demoSecurityScan();\n logger.newline();\n rl.prompt();\n return;\n }\n\n if (msg === '/review') {\n logger.newline();\n await demoReviewCommand();\n logger.newline();\n rl.prompt();\n return;\n }\n\n // Regular chat message\n logger.newline();\n logger.info(chalk.dim('DevWing is thinking...'));\n logger.newline();\n\n await demoPromptCommand(msg, options);\n\n logger.newline();\n rl.prompt();\n });\n\n rl.on('close', () => {\n logger.newline();\n logger.success('Chat session ended. Goodbye!');\n process.exit(0);\n });\n}\n\n// ============================================================\n// SCENARIO: Backend Refactor\n// ============================================================\n\nasync function demoBackendRefactor(): Promise<void> {\n await showContextLoading(47, 'backend');\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(2000);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta('## Analysis'));\n console.log();\n await typeLine('I\\'ve analyzed the auth service across 6 files. Here\\'s what I found:');\n console.log();\n await typeLine(` ${chalk.red('•')} Auth logic, validation, and DB queries are tightly coupled in ${chalk.cyan('auth_controller.ts')}`);\n await typeLine(` ${chalk.red('•')} JWT validation is duplicated across 4 route handlers`);\n await typeLine(` ${chalk.red('•')} No rate limiting on login/register endpoints`);\n await typeLine(` ${chalk.red('•')} User lookup queries repeated in 3 places`);\n console.log();\n\n await sleep(PAUSE_MEDIUM);\n\n await typeLine(chalk.bold.magenta('## Refactor Plan'));\n console.log();\n await typeLine('1. Extract JWT validation into reusable middleware');\n await typeLine('2. Create `UserRepository` with all DB operations');\n await typeLine('3. Add `RateLimiter` decorator using sliding window algorithm');\n await typeLine('4. Separate controller into thin route handlers');\n console.log();\n\n await sleep(PAUSE_MEDIUM);\n\n await typeLine(chalk.bold.magenta('## Executing Refactor'));\n console.log();\n\n await showToolCall('read_file', 'src/auth/auth_controller.ts');\n await showToolResult('Read 156 lines');\n await showToolCall('read_file', 'src/auth/auth_routes.ts');\n await showToolResult('Read 89 lines');\n await showToolCall('read_file', 'src/middleware/index.ts');\n await showToolResult('Read 23 lines');\n\n await showToolCall('write_file', 'src/auth/repositories/user.repository.ts');\n await sleep(PAUSE_LONG);\n await showToolResult('Created — UserRepository with findByEmail, findById, create, updateLastLogin');\n\n await showToolCall('write_file', 'src/middleware/jwt.middleware.ts');\n await sleep(PAUSE_MEDIUM);\n await showToolResult('Created — JWT validation middleware with token extraction and verification');\n\n await showToolCall('write_file', 'src/middleware/rate-limiter.ts');\n await sleep(PAUSE_MEDIUM);\n await showToolResult('Created — Sliding window rate limiter: 10 req/min login, 5 req/min register');\n\n await showToolCall('write_file', 'src/auth/auth_controller.ts');\n await sleep(PAUSE_LONG);\n await showToolResult('Refactored — 156 lines → 89 lines, clean separation of concerns');\n\n await showToolCall('run_command', 'npm test -- --filter auth');\n await sleep(2000);\n await showToolResult('All 12 tests passed');\n\n console.log();\n await sleep(PAUSE_MEDIUM);\n\n await typeLine(chalk.bold.magenta('## Summary'));\n console.log();\n await typeLine(chalk.green('✓') + ' Extracted JWT validation to dedicated middleware');\n await typeLine(chalk.green('✓') + ' Created UserRepository — single source for all user DB operations');\n await typeLine(chalk.green('✓') + ' Added rate limiting: 10 req/min (login), 5 req/min (register)');\n await typeLine(chalk.green('✓') + ` Reduced ${chalk.red('156')} lines → ${chalk.green('89')} lines (${chalk.cyan('43% reduction')})`);\n await typeLine(chalk.green('✓') + ' All 12 existing tests pass — no regressions');\n console.log();\n await typeLine(chalk.dim('Files modified: 4 | Files created: 3 | Lines removed: 67'));\n\n await showUsage(3420, 1890, 0.0127, 'backend');\n logger.success('Done!');\n}\n\n// ============================================================\n// SCENARIO: Security Scan\n// ============================================================\n\nasync function demoSecurityScan(): Promise<void> {\n await showContextLoading(32, 'security');\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(1800);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta('## OWASP Security Scan — Auth Service'));\n console.log();\n\n await showToolCall('read_file', 'src/auth/auth_controller.ts');\n await showToolResult('Read 89 lines');\n await showToolCall('read_file', 'src/middleware/jwt.middleware.ts');\n await showToolResult('Read 34 lines');\n await showToolCall('read_file', 'src/auth/repositories/user.repository.ts');\n await showToolResult('Read 52 lines');\n\n await sleep(PAUSE_LONG);\n\n await typeLine(chalk.bold.red('## Vulnerabilities Found: 3'));\n console.log();\n\n await typeLine(chalk.red.bold(' ■ CRITICAL') + chalk.red(' — Weak JWT Token Configuration'));\n await typeLine(chalk.gray(' Location: src/middleware/jwt.middleware.ts:12'));\n await typeLine(chalk.gray(' Issue: JWT tokens signed with HS256 and no expiration validation'));\n await typeLine(chalk.gray(' OWASP: A2:2021 — Cryptographic Failures'));\n console.log();\n\n await typeLine(chalk.yellow.bold(' ■ HIGH') + chalk.yellow(' — SQL Injection via User Lookup'));\n await typeLine(chalk.gray(' Location: src/auth/repositories/user.repository.ts:18'));\n await typeLine(chalk.gray(' Issue: Raw string interpolation in findByEmail query'));\n await typeLine(chalk.gray(' OWASP: A3:2021 — Injection'));\n console.log();\n\n await typeLine(chalk.yellow.bold(' ■ MEDIUM') + chalk.yellow(' — Missing Password Complexity Enforcement'));\n await typeLine(chalk.gray(' Location: src/auth/auth_controller.ts:34'));\n await typeLine(chalk.gray(' Issue: No minimum length, complexity, or breach database check'));\n await typeLine(chalk.gray(' OWASP: A7:2021 — Identification and Authentication Failures'));\n console.log();\n\n await sleep(PAUSE_MEDIUM);\n\n await typeLine(chalk.bold.magenta('## Applying Security Patches'));\n console.log();\n\n await showToolCall('write_file', 'src/middleware/jwt.middleware.ts');\n await sleep(PAUSE_LONG);\n await showToolResult('Patched — Added RS256 signing, exp/iat validation, token rotation support');\n\n await showToolCall('write_file', 'src/auth/repositories/user.repository.ts');\n await sleep(PAUSE_MEDIUM);\n await showToolResult('Patched — Parameterized queries, input sanitization added');\n\n await showToolCall('write_file', 'src/auth/validators/password.validator.ts');\n await sleep(PAUSE_MEDIUM);\n await showToolResult('Created — Min 12 chars, uppercase, number, special char, breach check');\n\n await showToolCall('run_command', 'npm test -- --filter auth');\n await sleep(1500);\n await showToolResult('All 15 tests passed (3 new security tests added)');\n\n console.log();\n await typeLine(chalk.bold.magenta('## Scan Complete'));\n console.log();\n await typeLine(chalk.green('✓') + ' 3 vulnerabilities found and patched');\n await typeLine(chalk.green('✓') + ' JWT upgraded to RS256 with expiration enforcement');\n await typeLine(chalk.green('✓') + ' SQL injection eliminated via parameterized queries');\n await typeLine(chalk.green('✓') + ' Password policy enforced — NIST 800-63B compliant');\n await typeLine(chalk.green('✓') + ' 3 new security regression tests added');\n console.log();\n await typeLine(chalk.dim('Severity breakdown: 1 critical, 1 high, 1 medium — all resolved'));\n\n await showUsage(2180, 1450, 0.0089, 'security');\n logger.success('Done!');\n}\n\n// ============================================================\n// SCENARIO: Deploy Assist\n// ============================================================\n\nasync function demoDeployAssist(_prompt: string): Promise<void> {\n await showContextLoading(18, 'devops');\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(1800);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta('## Deployment Analysis'));\n console.log();\n\n await showToolCall('read_file', 'Dockerfile');\n await showToolResult('Read 28 lines');\n await showToolCall('read_file', 'docker-compose.yml');\n await showToolResult('Read 45 lines');\n await showToolCall('read_file', '.github/workflows/deploy.yml');\n await showToolResult('Read 67 lines');\n\n await sleep(PAUSE_MEDIUM);\n\n await typeLine('Current deployment configuration:');\n console.log();\n await typeLine(` ${chalk.green('•')} Docker image: ${chalk.cyan('node:20-alpine')} — multi-stage build`);\n await typeLine(` ${chalk.green('•')} Target: Railway (detected from ${chalk.cyan('railway.toml')})`);\n await typeLine(` ${chalk.green('•')} Health check: ${chalk.cyan('/health')} endpoint configured`);\n await typeLine(` ${chalk.green('•')} Environment: 12 vars configured, 3 secrets`);\n console.log();\n\n await typeLine(chalk.bold.magenta('## Optimizations Applied'));\n console.log();\n\n await showToolCall('write_file', 'Dockerfile');\n await sleep(PAUSE_LONG);\n await showToolResult('Optimized — Added layer caching, reduced image size from 340MB to 89MB');\n\n await showToolCall('write_file', 'docker-compose.yml');\n await sleep(PAUSE_MEDIUM);\n await showToolResult('Added health checks, restart policies, resource limits');\n\n console.log();\n await typeLine(chalk.green('✓') + ' Docker image optimized: 340MB → 89MB (74% smaller)');\n await typeLine(chalk.green('✓') + ' Added proper health checks and restart policies');\n await typeLine(chalk.green('✓') + ' Build time reduced: ~4min → ~1.5min with layer caching');\n\n await showUsage(1800, 950, 0.0065, 'devops');\n logger.success('Done!');\n}\n\n// ============================================================\n// SCENARIO: Bug Fix\n// ============================================================\n\nasync function demoBugFix(_prompt: string): Promise<void> {\n await showContextLoading(35, 'backend');\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(1800);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta('## Bug Analysis'));\n console.log();\n\n await showToolCall('read_file', 'src/services/user_service.ts');\n await showToolResult('Read 94 lines');\n await showToolCall('git_diff', '');\n await showToolResult('3 files changed, 12 insertions, 4 deletions');\n await showToolCall('git_log', 'last 5 commits');\n await showToolResult('Loaded recent history');\n\n await sleep(PAUSE_MEDIUM);\n\n await typeLine('I found the issue. The bug is in ' + chalk.cyan('user_service.ts:67') + ':');\n console.log();\n await typeLine(chalk.red(' - const user = await db.query(`SELECT * FROM users WHERE id = ${userId}`);'));\n await typeLine(chalk.green(' + const user = await db.query(`SELECT * FROM users WHERE id = $1`, [userId]);'));\n console.log();\n await typeLine('The user ID was being interpolated directly into the SQL query instead of');\n await typeLine('using parameterized binding. This causes:');\n await typeLine(' 1. SQL injection vulnerability');\n await typeLine(' 2. Query failure when ID contains special characters');\n console.log();\n\n await showToolCall('write_file', 'src/services/user_service.ts');\n await sleep(PAUSE_LONG);\n await showToolResult('Fixed — Parameterized query binding');\n\n await showToolCall('run_command', 'npm test -- --filter user');\n await sleep(1500);\n await showToolResult('All 8 tests passed');\n\n console.log();\n await typeLine(chalk.green('✓') + ' Bug fixed — parameterized SQL query');\n await typeLine(chalk.green('✓') + ' SQL injection vulnerability closed');\n await typeLine(chalk.green('✓') + ' All tests pass');\n\n await showUsage(1650, 890, 0.0062, 'backend');\n logger.success('Done!');\n}\n\n// ============================================================\n// SCENARIO: Write Tests\n// ============================================================\n\nasync function demoWriteTests(_prompt: string): Promise<void> {\n await showContextLoading(22, 'backend');\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(1800);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta('## Generating Tests'));\n console.log();\n\n await showToolCall('read_file', 'src/auth/auth_controller.ts');\n await showToolResult('Read 89 lines — 4 functions to test');\n await showToolCall('read_file', 'src/auth/repositories/user.repository.ts');\n await showToolResult('Read 52 lines — 5 methods to test');\n\n await sleep(PAUSE_MEDIUM);\n\n await showToolCall('write_file', 'tests/auth/auth_controller.test.ts');\n await sleep(PAUSE_LONG);\n await showToolResult('Created — 8 test cases: login, register, refresh, logout, edge cases');\n\n await showToolCall('write_file', 'tests/auth/user_repository.test.ts');\n await sleep(PAUSE_LONG);\n await showToolResult('Created — 10 test cases: CRUD operations, error handling, constraints');\n\n await showToolCall('run_command', 'npm test -- --filter auth');\n await sleep(2000);\n await showToolResult('18 / 18 tests passed');\n\n console.log();\n await typeLine(chalk.bold.magenta('## Test Coverage'));\n console.log();\n await typeLine(' auth_controller.ts: ' + chalk.green('94%') + ' (was 0%)');\n await typeLine(' user.repository.ts: ' + chalk.green('98%') + ' (was 0%)');\n await typeLine(' Overall auth module: ' + chalk.green('96%'));\n console.log();\n await typeLine(chalk.green('✓') + ' 18 tests generated and passing');\n await typeLine(chalk.green('✓') + ' Covers happy paths, edge cases, and error states');\n\n await showUsage(2400, 1680, 0.0098, 'backend');\n logger.success('Done!');\n}\n\n// ============================================================\n// SCENARIO: Generic Prompt\n// ============================================================\n\nasync function demoGenericPrompt(prompt: string, options: CLIOptions): Promise<void> {\n const mode = options.mode || 'general';\n await showContextLoading(28, mode);\n\n logger.startSpinner('DevWing is thinking...');\n await sleep(1500);\n logger.stopSpinner();\n console.log();\n\n await typeLine(chalk.bold.magenta('## Response'));\n console.log();\n await typeLine(`Based on your codebase analysis, here's my approach to: \"${prompt}\"`);\n console.log();\n await typeLine(` ${chalk.green('•')} Analyzed project structure and dependencies`);\n await typeLine(` ${chalk.green('•')} Reviewed relevant files based on your prompt`);\n await typeLine(` ${chalk.green('•')} Generated solution aligned with existing patterns`);\n console.log();\n\n await showUsage(1100, 620, 0.0041, mode);\n logger.success('Done!');\n}\n\n// ============================================================\n// HELPERS\n// ============================================================\n\nasync function showToolCall(tool: string, args: string): Promise<void> {\n await sleep(PAUSE_SHORT);\n console.log();\n console.log(chalk.yellow(` ▶ ${chalk.bold(tool)}`));\n if (args) console.log(chalk.gray(` ${args}`));\n await sleep(PAUSE_MEDIUM);\n}\n\nasync function showToolResult(result: string): Promise<void> {\n console.log(chalk.green(` ✓ ${result}`));\n await sleep(PAUSE_SHORT);\n}\n\nasync function showContextLoading(fileCount: number, mode: string): Promise<void> {\n logger.startSpinner('Analyzing codebase...');\n await sleep(1200);\n logger.updateSpinner(`Scanning ${fileCount} files...`);\n await sleep(800);\n logger.updateSpinner('Building dependency graph...');\n await sleep(600);\n logger.updateSpinner('Collecting git context...');\n await sleep(500);\n logger.succeedSpinner(`Context loaded — ${fileCount} files, mode: ${chalk.cyan(mode)}`);\n console.log();\n}\n\nasync function showUsage(tokensIn: number, tokensOut: number, cost: number, mode: string): Promise<void> {\n const modelName = mode === 'security' ? 'devwing-security-1'\n : mode === 'devops' ? 'devwing-devops-1'\n : mode === 'frontend' ? 'devwing-frontend-1'\n : 'devwing-backend-1';\n\n console.log();\n console.log(\n chalk.gray(\n `📊 Tokens: ${tokensIn.toLocaleString()} in, ${tokensOut.toLocaleString()} out | Cost: $${cost.toFixed(4)} | Model: ${modelName}`\n )\n );\n console.log();\n}\n\nasync function requireDemoAuth(): Promise<void> {\n const apiKey = await configManager.getApiKey();\n if (!apiKey) {\n logger.error('Not authenticated. Run \"devwing login\" first.');\n process.exit(1);\n }\n}\n\n/**\n * Check if demo mode is active\n */\nexport function isDemoMode(): boolean {\n return process.env.DEVWING_DEMO === '1' || process.env.DEVWING_DEMO === 'true';\n}","/**\n * DevWing CLI - Entry Point\n * Your AI Wingman in the Terminal\n */\n\nimport { Command } from 'commander';\nimport { loginCommand, logoutCommand, statusCommand } from './commands/auth.js';\nimport { promptCommand } from './commands/prompt.js';\nimport { chatCommand } from './commands/chat.js';\nimport {\n scanCommand,\n reviewCommand,\n explainCommand,\n memoryCommand,\n configCommand,\n} from './commands/specialized.js';\nimport { updateCommand } from './commands/update.js';\nimport {\n isDemoMode,\n demoLoginCommand,\n demoLogoutCommand,\n demoStatusCommand,\n demoChatCommand,\n demoPromptCommand,\n demoReviewCommand,\n demoExplainCommand,\n demoMemoryCommand,\n} from './commands/demo.js';\nimport { logger } from './utils/logger.js';\nimport { CLIOptions } from './types/index.js';\n\nconst program = new Command();\n\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __cliFilename = fileURLToPath(import.meta.url);\nconst __cliDirname = dirname(__cliFilename);\n\nfunction getVersion(): string {\n const paths = [\n join(__cliDirname, '../package.json'),\n join(__cliDirname, '../../package.json'),\n ];\n for (const p of paths) {\n try {\n return JSON.parse(readFileSync(p, 'utf-8')).version;\n } catch { continue; }\n }\n return '0.1.6';\n}\n\nconst VERSION = getVersion();\n\nprogram\n .name('devwing')\n .description('DevWing.ai - Your AI Wingman in the Terminal')\n .version(VERSION, '-v, --version', 'Display version number')\n .helpOption('-h, --help', 'Display help information');\n\n// Global options\nprogram\n .option('--mode <mode>', 'AI mode: general|frontend|backend|security|devops')\n .option('--model <model>', 'Specific model to use')\n .option('--project <id>', 'Project ID')\n .option('--workspace <id>', 'Workspace ID')\n .option('--verbose', 'Verbose output for debugging')\n .option('-y, --yes', 'Auto-confirm destructive actions');\n\n/**\n * Login command\n */\nprogram\n .command('login')\n .description('Authenticate with DevWing')\n .action(async () => {\n if (isDemoMode()) {\n await demoLoginCommand();\n } else {\n await loginCommand();\n }\n });\n\n/**\n * Logout command\n */\nprogram\n .command('logout')\n .description('Clear stored credentials')\n .action(async () => {\n if (isDemoMode()) {\n await demoLogoutCommand();\n } else {\n await logoutCommand();\n }\n });\n\n/**\n * Status command\n */\nprogram\n .command('status')\n .description('Show authentication status and profile')\n .action(async () => {\n if (isDemoMode()) {\n await demoStatusCommand();\n } else {\n await statusCommand();\n }\n });\n\n/**\n * Interactive Chat command\n */\nprogram\n .command('chat')\n .description('Start interactive chat mode (like Claude Code)')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n if (isDemoMode()) {\n await demoChatCommand(opts);\n } else {\n await chatCommand(opts);\n }\n });\n\n/**\n * Security scan command\n */\nprogram\n .command('scan')\n .description('Run security vulnerability scan')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n if (isDemoMode()) {\n await demoPromptCommand('scan auth service for OWASP vulnerabilities', { ...opts, mode: 'security' });\n } else {\n await scanCommand(opts);\n }\n });\n\n/**\n * Code review command\n */\nprogram\n .command('review')\n .description('Perform code review on recent changes')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n if (isDemoMode()) {\n await demoReviewCommand();\n } else {\n await reviewCommand(opts);\n }\n });\n\n/**\n * Explain command\n */\nprogram\n .command('explain <target>')\n .description('Explain code, file, or concept')\n .action(async (target: string) => {\n const opts = program.opts() as CLIOptions;\n if (isDemoMode()) {\n await demoExplainCommand(target);\n } else {\n await explainCommand(target, opts);\n }\n });\n\n/**\n * Memory commands\n */\nconst memoryCmd = program\n .command('memory')\n .description('Manage project memory');\n\nmemoryCmd\n .command('save <content>')\n .description('Save information to project memory')\n .action(async (content: string) => {\n const opts = program.opts() as CLIOptions;\n if (isDemoMode()) {\n await demoMemoryCommand('save', content);\n } else {\n await memoryCommand('save', content, opts);\n }\n });\n\nmemoryCmd\n .command('show')\n .description('Show all project memories')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n if (isDemoMode()) {\n await demoMemoryCommand('show');\n } else {\n await memoryCommand('show', undefined, opts);\n }\n });\n\nmemoryCmd\n .command('clear')\n .description('Clear all project memories')\n .action(async () => {\n const opts = program.opts() as CLIOptions;\n if (isDemoMode()) {\n await demoMemoryCommand('clear');\n } else {\n await memoryCommand('clear', undefined, opts);\n }\n });\n\n/**\n * Config commands\n */\nconst configCmd = program\n .command('config')\n .description('Manage CLI configuration');\n\nconfigCmd\n .command('list')\n .description('Show all configuration')\n .action(async () => {\n await configCommand('list');\n });\n\nconfigCmd\n .command('get <key>')\n .description('Get configuration value')\n .action(async (key: string) => {\n await configCommand('get', key);\n });\n\nconfigCmd\n .command('set <key> <value>')\n .description('Set configuration value')\n .action(async (key: string, value: string) => {\n await configCommand('set', key, value);\n });\n\n/**\n * Update command\n */\nprogram\n .command('update')\n .description('Check for and install CLI updates')\n .option('--check', 'Only check for updates, do not install')\n .option('--force', 'Skip confirmation prompt')\n .action(async (options) => {\n await updateCommand(options);\n });\n\n/**\n * Default action - start interactive chat mode\n * Usage: devwing (starts chat mode)\n */\nprogram\n .argument('[prompt...]', 'Natural language prompt for AI (optional - starts chat mode if empty)')\n .action(async (promptParts: string[]) => {\n const opts = program.opts() as CLIOptions;\n\n // If no arguments, start chat mode (default behavior)\n if (promptParts.length === 0) {\n if (isDemoMode()) {\n await demoChatCommand(opts);\n } else {\n await chatCommand(opts);\n }\n return;\n }\n\n // If user provides a prompt, run single-shot command\n const prompt = promptParts.join(' ');\n if (isDemoMode()) {\n await demoPromptCommand(prompt, opts);\n } else {\n await promptCommand(prompt, opts);\n }\n });\n\n/**\n * Error handling\n */\nprogram.exitOverride();\n\ntry {\n await program.parseAsync(process.argv);\n} catch (error: any) {\n // Commander exits for help/version — these are not errors\n if (\n error.code === 'commander.help' ||\n error.code === 'commander.helpDisplayed' ||\n error.code === 'commander.version'\n ) {\n process.exit(0);\n }\n\n // Don't double-print if the command already printed the error\n if (error.message && !error.message.includes('process.exit')) {\n logger.error(error.message);\n }\n\n if (process.env.DEBUG) {\n console.error(error);\n }\n\n process.exit(1);\n}\n"]}