devwing 0.1.0 → 0.1.2

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 CHANGED
@@ -31,7 +31,7 @@ var ConfigManager = class {
31
31
  this.conf = new Conf({
32
32
  projectName: "devwing",
33
33
  defaults: {
34
- apiUrl: process.env.DEVWING_API_URL || "https://api.devwing.ai"
34
+ apiUrl: process.env.DEVWING_API_URL || "https://api.devwing.ai/api/v1"
35
35
  }
36
36
  });
37
37
  }
@@ -1990,7 +1990,7 @@ async function updateCommand(options) {
1990
1990
 
1991
1991
  // src/index.ts
1992
1992
  var program = new Command();
1993
- var VERSION = "0.1.0";
1993
+ var VERSION = "0.1.2";
1994
1994
  program.name("devwing").description("DevWing.ai - Your AI Wingman in the Terminal").version(VERSION, "-v, --version", "Display version number").helpOption("-h, --help", "Display help information");
1995
1995
  program.option("--mode <mode>", "AI mode: general|frontend|backend|security|devops").option("--model <model>", "Specific model to use").option("--project <id>", "Project ID").option("--workspace <id>", "Workspace ID").option("--verbose", "Verbose output for debugging").option("-y, --yes", "Auto-confirm destructive actions");
1996
1996
  program.command("login").description("Authenticate with DevWing").action(async () => {
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/update.ts","../src/index.ts"],"names":["axios","chalk","os","fs","path","simpleGit","inquirer","__filename","__dirname","execSync"],"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',\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\n */\n getApiUrl(): string {\n return this.conf.get('apiUrl');\n }\n\n /**\n * Set API URL (for development/testing)\n */\n setApiUrl(url: string): void {\n this.conf.set('apiUrl', url);\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 APIError,\n Model,\n UsageStats,\n} from '../types/index.js';\nimport { EventSourceParserStream } from 'eventsource-parser/stream';\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<APIError>) => {\n if (error.response?.data) {\n throw new Error(error.response.data.message || error.response.data.error);\n }\n throw 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 */\n async login(email: string, password: string): Promise<{ access_token: string; user: UserProfile }> {\n const response = await this.client.post('/auth/login', { email, password });\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<{ key: string; prefix: 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 const error = await response.json() as { message?: string };\n throw new Error(error.message || 'Failed to get completion');\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 (error: unknown) {\n console.error('Failed to parse SSE message:', error);\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 const error = await response.json() as { message?: string };\n throw new Error(error.message || 'Failed to continue completion');\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 (error: unknown) {\n console.error('Failed to parse SSE message:', error);\n }\n }\n }\n }\n\n /**\n * Get project memory\n */\n async getProjectMemory(projectId: string): Promise<ProjectMemory[]> {\n const response = await this.client.get(`/memory/${projectId}`);\n return response.data;\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 return response.data;\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 terminalLink from 'terminal-link';\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: 'Email & Password', value: 'email' },\n { name: 'Via Browser (easiest)', value: 'browser' },\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', error);\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('@')) {\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 },\n ]);\n\n logger.startSpinner('Authenticating...');\n\n try {\n // Login to get JWT\n const { access_token, user } = await apiClient.login(email, password);\n\n // Store JWT temporarily for API key creation\n apiClient.setJwtToken(access_token);\n\n // Create a new CLI API key (uses JWT for auth)\n logger.updateSpinner('Creating API key...');\n const { key } = 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(key);\n\n logger.succeedSpinner(`Welcome back, ${user.full_name || user.email}!`);\n logger.success(`Plan: ${user.plan.toUpperCase()}`);\n logger.newline();\n\n // Show quick start\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Authentication failed');\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()}`;\n const initResponse = await apiClient.initiateCliAuth(deviceInfo);\n\n logger.succeedSpinner('Ready to authenticate!');\n logger.newline();\n\n // Display user code prominently\n logger.box(\n [\n 'Browser Authentication',\n '',\n `Code: ${chalk.bold.yellow(initResponse.user_code)}`,\n '',\n `Opening browser to ${chalk.cyan(initResponse.verification_url)}`,\n '',\n `Enter the code above when prompted.`,\n '',\n `Expires in ${Math.floor(initResponse.expires_in / 60)} minutes.`,\n ].join('\\n'),\n { title: 'Verify Device', color: 'blue' }\n );\n\n logger.newline();\n\n // Step 2: Open browser\n logger.info('Opening browser...');\n try {\n await open.default(initResponse.verification_url_complete);\n logger.success('Browser opened! Please complete authentication.');\n } catch (err) {\n logger.warn('Could not open browser automatically');\n logger.info(\n `Please visit: ${chalk.cyan(initResponse.verification_url_complete)}`\n );\n }\n\n logger.newline();\n logger.startSpinner('Waiting for authorization...');\n\n // Step 3: Poll for authorization\n const pollInterval = initResponse.interval * 1000; // Convert to milliseconds\n const maxAttempts = Math.floor(initResponse.expires_in / initResponse.interval);\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.'));\n return;\n }\n\n try {\n const pollResponse = await apiClient.pollCliAuth(\n initResponse.device_code\n );\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(\n new Error('Device code expired. Please run \"devwing login\" again.')\n );\n }\n // status === 'pending', continue polling\n } catch (error: any) {\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\n logger.succeedSpinner(`Welcome, ${user.full_name || user.email}!`);\n logger.success(`Plan: ${user.plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Browser authentication failed');\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\n logger.succeedSpinner(`Successfully authenticated as ${user.full_name || user.email}!`);\n logger.success(`Plan: ${user.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 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', 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\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: ${user.full_name || 'Not set'}`);\n console.log(` Plan: ${user.plan.toUpperCase()}`);\n console.log(\n ` Tokens used today: ${user.tokens_used_today.toLocaleString()}`\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) {\n logger.failSpinner('Failed to fetch profile');\n logger.error('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', 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 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 * 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 * 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 // In production, package.json is in the parent of dist\n // In development, it's two levels up from src/commands\n const packageJsonPath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.version;\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 const packageJsonPath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.name;\n } catch (error) {\n logger.error('Failed to read package name', error);\n return '@devwing/cli';\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 {\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\n// Package info (in production, read from package.json)\nconst VERSION = '0.1.0';\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 * 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 * Main prompt command (default - no subcommand)\n * Usage: devwing \"your prompt here\"\n */\nprogram\n .argument('[prompt...]', 'Natural language prompt for AI')\n .action(async (promptParts: string[]) => {\n // If no arguments, show help\n if (promptParts.length === 0) {\n program.help();\n return;\n }\n\n const prompt = promptParts.join(' ');\n const opts = program.opts() as CLIOptions;\n\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 if (error.code === 'commander.help' || error.code === 'commander.version') {\n // Help and version are not errors\n process.exit(0);\n }\n\n logger.error('An error occurred', error);\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/update.ts","../src/index.ts"],"names":["axios","chalk","os","fs","path","simpleGit","inquirer","__filename","__dirname","execSync"],"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\n */\n getApiUrl(): string {\n return this.conf.get('apiUrl');\n }\n\n /**\n * Set API URL (for development/testing)\n */\n setApiUrl(url: string): void {\n this.conf.set('apiUrl', url);\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 APIError,\n Model,\n UsageStats,\n} from '../types/index.js';\nimport { EventSourceParserStream } from 'eventsource-parser/stream';\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<APIError>) => {\n if (error.response?.data) {\n throw new Error(error.response.data.message || error.response.data.error);\n }\n throw 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 */\n async login(email: string, password: string): Promise<{ access_token: string; user: UserProfile }> {\n const response = await this.client.post('/auth/login', { email, password });\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<{ key: string; prefix: 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 const error = await response.json() as { message?: string };\n throw new Error(error.message || 'Failed to get completion');\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 (error: unknown) {\n console.error('Failed to parse SSE message:', error);\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 const error = await response.json() as { message?: string };\n throw new Error(error.message || 'Failed to continue completion');\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 (error: unknown) {\n console.error('Failed to parse SSE message:', error);\n }\n }\n }\n }\n\n /**\n * Get project memory\n */\n async getProjectMemory(projectId: string): Promise<ProjectMemory[]> {\n const response = await this.client.get(`/memory/${projectId}`);\n return response.data;\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 return response.data;\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 terminalLink from 'terminal-link';\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: 'Email & Password', value: 'email' },\n { name: 'Via Browser (easiest)', value: 'browser' },\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', error);\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('@')) {\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 },\n ]);\n\n logger.startSpinner('Authenticating...');\n\n try {\n // Login to get JWT\n const { access_token, user } = await apiClient.login(email, password);\n\n // Store JWT temporarily for API key creation\n apiClient.setJwtToken(access_token);\n\n // Create a new CLI API key (uses JWT for auth)\n logger.updateSpinner('Creating API key...');\n const { key } = 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(key);\n\n logger.succeedSpinner(`Welcome back, ${user.full_name || user.email}!`);\n logger.success(`Plan: ${user.plan.toUpperCase()}`);\n logger.newline();\n\n // Show quick start\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Authentication failed');\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()}`;\n const initResponse = await apiClient.initiateCliAuth(deviceInfo);\n\n logger.succeedSpinner('Ready to authenticate!');\n logger.newline();\n\n // Display user code prominently\n logger.box(\n [\n 'Browser Authentication',\n '',\n `Code: ${chalk.bold.yellow(initResponse.user_code)}`,\n '',\n `Opening browser to ${chalk.cyan(initResponse.verification_url)}`,\n '',\n `Enter the code above when prompted.`,\n '',\n `Expires in ${Math.floor(initResponse.expires_in / 60)} minutes.`,\n ].join('\\n'),\n { title: 'Verify Device', color: 'blue' }\n );\n\n logger.newline();\n\n // Step 2: Open browser\n logger.info('Opening browser...');\n try {\n await open.default(initResponse.verification_url_complete);\n logger.success('Browser opened! Please complete authentication.');\n } catch (err) {\n logger.warn('Could not open browser automatically');\n logger.info(\n `Please visit: ${chalk.cyan(initResponse.verification_url_complete)}`\n );\n }\n\n logger.newline();\n logger.startSpinner('Waiting for authorization...');\n\n // Step 3: Poll for authorization\n const pollInterval = initResponse.interval * 1000; // Convert to milliseconds\n const maxAttempts = Math.floor(initResponse.expires_in / initResponse.interval);\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.'));\n return;\n }\n\n try {\n const pollResponse = await apiClient.pollCliAuth(\n initResponse.device_code\n );\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(\n new Error('Device code expired. Please run \"devwing login\" again.')\n );\n }\n // status === 'pending', continue polling\n } catch (error: any) {\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\n logger.succeedSpinner(`Welcome, ${user.full_name || user.email}!`);\n logger.success(`Plan: ${user.plan.toUpperCase()}`);\n logger.newline();\n\n showQuickStart();\n } catch (error: any) {\n logger.failSpinner('Browser authentication failed');\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\n logger.succeedSpinner(`Successfully authenticated as ${user.full_name || user.email}!`);\n logger.success(`Plan: ${user.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 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', 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\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: ${user.full_name || 'Not set'}`);\n console.log(` Plan: ${user.plan.toUpperCase()}`);\n console.log(\n ` Tokens used today: ${user.tokens_used_today.toLocaleString()}`\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) {\n logger.failSpinner('Failed to fetch profile');\n logger.error('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', 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 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 * 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 * 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 // In production, package.json is in the parent of dist\n // In development, it's two levels up from src/commands\n const packageJsonPath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.version;\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 const packageJsonPath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as PackageInfo;\n return packageJson.name;\n } catch (error) {\n logger.error('Failed to read package name', error);\n return '@devwing/cli';\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 {\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\n// Package info (in production, read from package.json)\nconst VERSION = '0.1.2';\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 * 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 * Main prompt command (default - no subcommand)\n * Usage: devwing \"your prompt here\"\n */\nprogram\n .argument('[prompt...]', 'Natural language prompt for AI')\n .action(async (promptParts: string[]) => {\n // If no arguments, show help\n if (promptParts.length === 0) {\n program.help();\n return;\n }\n\n const prompt = promptParts.join(' ');\n const opts = program.opts() as CLIOptions;\n\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 if (error.code === 'commander.help' || error.code === 'commander.version') {\n // Help and version are not errors\n process.exit(0);\n }\n\n logger.error('An error occurred', error);\n\n if (process.env.DEBUG) {\n console.error(error);\n }\n\n process.exit(1);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devwing",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "description": "DevWing.ai - Your AI Wingman in the Terminal",
6
6
  "main": "dist/index.js",
@@ -85,4 +85,4 @@
85
85
  "typescript": "^5.3.3",
86
86
  "vitest": "^1.2.0"
87
87
  }
88
- }
88
+ }