codelantern-agent-cli 0.0.0-stage → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/commands/interactive.ts","../src/ui/prompt.ts","../src/ui/banner.ts","../src/ui/slashCommands.ts","../src/commands/ask.ts","../src/commands/plan.ts","../src/commands/resume.ts","../src/commands/sessions.ts","../src/commands/configCmd.ts","../src/commands/doctor.ts","../src/commands/mcpCmd.ts","../src/commands/providersCmd.ts","../src/commands/modelsCmd.ts","../src/commands/keysCmd.ts","../src/commands/skillsCmd.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { interactiveCommand } from './commands/interactive.js';\nimport { askCommand } from './commands/ask.js';\nimport { planCommand } from './commands/plan.js';\nimport { resumeCommand } from './commands/resume.js';\nimport { sessionsCommand } from './commands/sessions.js';\nimport { configCommand } from './commands/configCmd.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { mcpCommand } from './commands/mcpCmd.js';\nimport { providersCommand } from './commands/providersCmd.js';\nimport { modelsCommand } from './commands/modelsCmd.js';\nimport { keysCommand } from './commands/keysCmd.js';\nimport { skillsCommand } from './commands/skillsCmd.js';\nimport { loadConfig } from './config/config.js';\n\nconst program = new Command();\nconst config = loadConfig();\n\nprogram\n .name('lantern')\n .description('Code Lantern CLI — Personal AI coding assistant for the terminal with multi-provider and skills support')\n .version('1.0.1');\n\n// Global flags\nprogram\n .option('-p, --provider <provider>', 'AI provider to use (gemini, openai, anthropic, openrouter, or custom)', config.activeProvider || 'gemini')\n .option('-m, --model <model>', 'Model ID to use', config.defaultModel || 'gemini-3.8-flash')\n .option('-C, --cwd <path>', 'Working directory for Code Lantern agent', process.cwd())\n .option('-s, --session <id>', 'Resume or use a specific session ID')\n .option('-a, --attach <files...>', 'Attach one or more files/images/documents to the request')\n .option('--yolo', 'Enable YOLO mode (auto-approve file edits and shell commands)', false)\n .option('--json', 'Output results formatted as JSON', false)\n .option('--timeout <ms>', 'Maximum total request duration in milliseconds (default: 60000)', (val) => parseInt(val, 10))\n .option('--first-token-timeout <ms>', 'Maximum wait time for initial token in milliseconds (default: 30000)', (val) => parseInt(val, 10))\n .option('--timing', 'Display detailed execution and latency timing diagnostics', false)\n .option('--fast', 'Enable low-latency streaming mode where supported', false)\n .option('--skill <skills...>', 'Activate specific skills by name for this run');\n\n// Subcommand: ask\nprogram\n .command('ask <question...>')\n .description('Ask a single question or task and stream the answer')\n .action(async (questionParts: string[]) => {\n const opts = program.opts();\n const question = questionParts.join(' ');\n await askCommand(question, {\n provider: opts.provider,\n model: opts.model,\n cwd: opts.cwd,\n attach: opts.attach,\n yolo: opts.yolo,\n json: opts.json,\n timeout: opts.timeout,\n firstTokenTimeout: opts.firstTokenTimeout,\n timing: opts.timing,\n fast: opts.fast,\n skill: opts.skill\n });\n });\n\n// Subcommand: plan\nprogram\n .command('plan <task...>')\n .description('Inspect the codebase and produce a read-only implementation plan')\n .action(async (taskParts: string[]) => {\n const opts = program.opts();\n const task = taskParts.join(' ');\n await planCommand(task, {\n provider: opts.provider,\n model: opts.model,\n cwd: opts.cwd,\n attach: opts.attach,\n json: opts.json,\n timeout: opts.timeout,\n firstTokenTimeout: opts.firstTokenTimeout,\n timing: opts.timing,\n skill: opts.skill\n });\n });\n\n// Subcommand: resume\nprogram\n .command('resume [sessionId]')\n .description('Continue a saved conversation session')\n .action(async (sessionId?: string) => {\n const opts = program.opts();\n await resumeCommand(sessionId, {\n provider: opts.provider,\n model: opts.model,\n cwd: opts.cwd,\n attach: opts.attach,\n yolo: opts.yolo,\n timeout: opts.timeout,\n firstTokenTimeout: opts.firstTokenTimeout,\n timing: opts.timing,\n fast: opts.fast,\n skill: opts.skill\n });\n });\n\n// Subcommand: sessions\nprogram\n .command('sessions')\n .description('List, delete, or export saved local sessions')\n .option('-d, --delete <id>', 'Delete session by ID')\n .option('-e, --export <id>', 'Export session transcript by ID')\n .action(async (cmdOpts: { delete?: string; export?: string }) => {\n const globalOpts = program.opts();\n await sessionsCommand({\n delete: cmdOpts.delete,\n export: cmdOpts.export,\n json: globalOpts.json\n });\n });\n\n// Subcommand: config\nprogram\n .command('config [action] [key] [value]')\n .description('View or update configuration (list, get, set, path)')\n .action(async (action?: string, key?: string, value?: string) => {\n await configCommand(action, key, value);\n });\n\n// Subcommand: doctor\nprogram\n .command('doctor')\n .description('Diagnose API keys, configuration, environment, and MCP server health')\n .action(async () => {\n await doctorCommand();\n });\n\n// Subcommand: mcp\nprogram\n .command('mcp [action] [serverName] [command] [args...]')\n .description('Manage configured MCP servers (list, add, remove, enable, disable, test)')\n .allowUnknownOption()\n .action(async (action?: string, serverName?: string, cmd?: string, ...rest: any[]) => {\n const rawArgs = rest.flat().filter(a => typeof a === 'string');\n await mcpCommand(action, serverName, cmd, rawArgs);\n });\n\n// Subcommand: providers\nprogram\n .command('providers [action] [target]')\n .description('Manage AI providers (list, set-default, test, add, remove)')\n .option('--base-url <url>', 'Base URL for custom OpenAI-compatible provider')\n .option('--api-key <key>', 'API key for provider')\n .option('--model <model>', 'Default model ID for provider')\n .action(async (action?: string, target?: string, cmdOpts?: { baseUrl?: string; apiKey?: string; model?: string }) => {\n await providersCommand(action, target, cmdOpts);\n });\n\n// Subcommand: models (alias: model)\nprogram\n .command('models [action] [modelId]')\n .alias('model')\n .description('List available models or switch the active model')\n .option('-p, --provider <provider>', 'Provider to inspect models for')\n .option('-r, --refresh', 'Bypass cache and query live model list', false)\n .option('--json', 'Output models list as JSON', false)\n .action(async (action?: string, modelId?: string, cmdOpts?: { provider?: string; refresh?: boolean; json?: boolean }) => {\n const globalOpts = program.opts();\n const provider = cmdOpts?.provider || globalOpts.provider;\n const json = Boolean(cmdOpts?.json || globalOpts.json);\n const refresh = Boolean(cmdOpts?.refresh);\n await modelsCommand(action, modelId, { provider, refresh, json });\n });\n\n// Subcommand: keys\nprogram\n .command('keys [action] [provider] [key]')\n .description('Securely manage API keys with local AES-256-GCM encryption (list, set, remove)')\n .action(async (action?: string, provider?: string, key?: string) => {\n await keysCommand(action, provider, key);\n });\n\n// Subcommand: skills\nprogram\n .command('skills [action] [target]')\n .description('Manage portable skills in SKILL.md format (list, show, add, enable, disable, remove)')\n .action(async (action?: string, target?: string) => {\n await skillsCommand(action, target);\n });\n\n// Default action when no subcommand is given\nprogram.action(async () => {\n const opts = program.opts();\n\n // Check if content was piped into stdin\n if (!process.stdin.isTTY) {\n let pipedData = '';\n process.stdin.setEncoding('utf8');\n\n for await (const chunk of process.stdin) {\n pipedData += chunk;\n }\n\n const trimmedPiped = pipedData.trim();\n if (trimmedPiped) {\n await askCommand(trimmedPiped, {\n provider: opts.provider,\n model: opts.model,\n cwd: opts.cwd,\n attach: opts.attach,\n yolo: opts.yolo,\n json: opts.json,\n timeout: opts.timeout,\n firstTokenTimeout: opts.firstTokenTimeout,\n timing: opts.timing,\n fast: opts.fast,\n skill: opts.skill\n });\n return;\n }\n }\n\n // Interactive mode\n await interactiveCommand({\n provider: opts.provider,\n model: opts.model,\n cwd: opts.cwd,\n session: opts.session,\n attach: opts.attach,\n yolo: opts.yolo,\n timeout: opts.timeout,\n firstTokenTimeout: opts.firstTokenTimeout,\n timing: opts.timing,\n fast: opts.fast,\n skill: opts.skill\n });\n});\n\nprogram.parseAsync(process.argv).catch(err => {\n console.error(`Error: ${err.message || err}`);\n process.exit(1);\n});\n","import pc from 'picocolors';\nimport { LanternAgent } from '../agent/lanternAgent.js';\nimport { createNewSession, loadSession, saveSession } from '../session/sessionManager.js';\nimport { loadConfig } from '../config/config.js';\nimport { loadAttachments } from '../provider/attachment.js';\nimport { TerminalPrompt } from '../ui/prompt.js';\nimport { printBanner } from '../ui/banner.js';\nimport { handleSlashCommand } from '../ui/slashCommands.js';\nimport { formatErrorMessage, CancelledError } from '../provider/errors.js';\nimport type { OrbitSession, AgentContext } from '../types.js';\n\nexport async function interactiveCommand(options: {\n provider?: string;\n model?: string;\n cwd?: string;\n session?: string;\n attach?: string[];\n yolo?: boolean;\n plan?: boolean;\n timing?: boolean;\n fast?: boolean;\n timeout?: number;\n firstTokenTimeout?: number;\n skill?: string[];\n}): Promise<void> {\n const config = loadConfig();\n const workspace = options.cwd || process.cwd();\n let provider = options.provider || config.activeProvider || 'gemini';\n let model = options.model || config.defaultModel || 'gemini-3.8-flash';\n let yolo = Boolean(options.yolo ?? config.yolo);\n let planMode = Boolean(options.plan);\n let showTiming = Boolean(options.timing ?? config.showTiming);\n let lowLatency = Boolean(options.fast ?? config.lowLatency);\n let activeSkills = options.skill || config.activeSkills || [];\n\n let session: OrbitSession;\n if (options.session) {\n const loaded = loadSession(options.session);\n if (!loaded) {\n console.error(pc.red(`Error: Session '${options.session}' not found.`));\n process.exit(1);\n }\n session = loaded;\n if (session.provider) provider = session.provider;\n if (session.model) model = session.model;\n if (session.activeSkills) activeSkills = session.activeSkills;\n console.log(pc.green(`✓ Resumed session: ${session.id} (${session.turns.length} turns)`));\n } else {\n session = createNewSession(workspace, model);\n session.provider = provider;\n }\n\n const attachments = loadAttachments(options.attach);\n\n printBanner({\n version: '1.0.1',\n provider,\n model,\n workspace,\n yolo,\n planMode\n });\n\n if (attachments.length > 0) {\n console.log(pc.cyan(`📎 Attached ${attachments.length} file(s): ${attachments.map(a => a.name).join(', ')}\\n`));\n }\n\n const agent = new LanternAgent();\n await agent.initMcp();\n\n const promptUI = new TerminalPrompt();\n\n const slashContext = {\n session,\n provider,\n model,\n workspace,\n yolo,\n planMode,\n showTiming,\n activeSkills,\n setProvider: (p: string) => {\n provider = p;\n session.provider = p;\n },\n setModel: (m: string) => {\n model = m;\n session.model = m;\n },\n setYolo: (y: boolean) => {\n yolo = y;\n },\n setPlanMode: (p: boolean) => {\n planMode = p;\n },\n setShowTiming: (t: boolean) => {\n showTiming = t;\n },\n setActiveSkills: (skills: string[]) => {\n activeSkills = skills;\n session.activeSkills = skills;\n }\n };\n\n try {\n while (true) {\n const modeIndicator = planMode ? pc.blue('[plan] ') : yolo ? pc.red('[yolo] ') : '';\n const promptStr = `${pc.yellow('lantern')} ${modeIndicator}${pc.dim('❯')} `;\n\n const input = await promptUI.askPrompt(promptStr);\n\n if (input === null || input === '/exit' || input === '/quit') {\n console.log(pc.dim('\\nGoodbye! Session saved: ' + session.id));\n break;\n }\n\n const trimmed = input.trim();\n if (!trimmed) {\n continue;\n }\n\n // Check slash commands\n if (trimmed.startsWith('/')) {\n const shouldContinue = await handleSlashCommand(trimmed, slashContext);\n if (!shouldContinue) {\n console.log(pc.dim('Session saved. Exiting Code Lantern.'));\n break;\n }\n continue;\n }\n\n // Prepare cancellation controller for in-flight turn\n const abortController = new AbortController();\n const onSigInt = () => {\n abortController.abort(new CancelledError('Request cancelled by user (Ctrl+C).'));\n };\n process.on('SIGINT', onSigInt);\n\n const context: AgentContext = {\n workspace,\n provider,\n model,\n yolo,\n planMode,\n jsonOutput: false,\n maxSteps: config.maxSteps || 25,\n timeoutMs: options.timeout || config.timeoutMs || 60000,\n firstTokenTimeoutMs: options.firstTokenTimeout || config.firstTokenTimeoutMs || 30000,\n showTiming,\n lowLatency,\n activeSkills,\n attachments,\n signal: abortController.signal\n };\n\n try {\n console.log('');\n const result = await agent.runTurn(session, trimmed, context, attachments);\n\n // Display usage & timing diagnostics\n const parts: string[] = [];\n if (result.usage.totalTokens > 0) {\n parts.push(`Tokens: ${result.usage.totalTokens.toLocaleString()}`);\n }\n if (showTiming && result.timing) {\n const ttft = result.timing.ttftMs ? `TTFT: ${result.timing.ttftMs}ms` : '';\n const total = `Total: ${(result.timing.totalMs / 1000).toFixed(2)}s`;\n parts.push(`[${[provider, model, ttft, total].filter(Boolean).join(' | ')}]`);\n }\n\n if (parts.length > 0) {\n console.log(pc.dim(`\\n[${parts.join(' | ')}]`));\n }\n console.log('');\n } catch (err: any) {\n if (err instanceof CancelledError || abortController.signal.aborted) {\n console.log(pc.yellow('\\n[Cancelled by user]'));\n } else {\n console.error('\\n' + formatErrorMessage(err) + '\\n');\n }\n } finally {\n process.removeListener('SIGINT', onSigInt);\n }\n }\n } finally {\n saveSession(session);\n await agent.shutdown();\n }\n}\n","import readline from 'node:readline';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport pc from 'picocolors';\nimport { getLanternHomeDir } from '../config/config.js';\n\nfunction getHistoryFilePath(): string {\n return path.join(getLanternHomeDir(), 'history.txt');\n}\n\nfunction loadHistory(): string[] {\n const filePath = getHistoryFilePath();\n if (!fs.existsSync(filePath)) return [];\n try {\n const raw = fs.readFileSync(filePath, 'utf8');\n return raw.replace(/\\r\\n/g, '\\n').split('\\n').filter(line => line.trim().length > 0);\n } catch {\n return [];\n }\n}\n\nfunction appendHistory(line: string): void {\n const clean = line.trim();\n if (!clean || clean.startsWith('/') || clean.length < 2) return;\n const filePath = getHistoryFilePath();\n try {\n fs.appendFileSync(filePath, clean + '\\n', { encoding: 'utf8' });\n } catch {\n // ignore\n }\n}\n\nexport class TerminalPrompt {\n private history: string[];\n\n constructor() {\n this.history = loadHistory();\n }\n\n public async askPrompt(promptPrefix = pc.yellow('lantern> ')): Promise<string | null> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n history: this.history,\n historySize: 200,\n prompt: promptPrefix\n });\n\n let sigintCount = 0;\n\n return new Promise(resolve => {\n let accumulated = '';\n let insideTripleQuotes = false;\n\n rl.prompt();\n\n rl.on('line', rawLine => {\n sigintCount = 0;\n // Clean any carriage returns\n const line = rawLine.replace(/\\r/g, '');\n\n // Check triple quote multi-line block\n if (!insideTripleQuotes && (line.trim().startsWith('\"\"\"') || line.trim().startsWith('```'))) {\n insideTripleQuotes = true;\n const content = line.trim().slice(3);\n accumulated += content + '\\n';\n rl.setPrompt(pc.dim('... '));\n rl.prompt();\n return;\n }\n\n if (insideTripleQuotes) {\n if (line.trim().endsWith('\"\"\"') || line.trim().endsWith('```')) {\n const content = line.trim().slice(0, -3);\n accumulated += content;\n insideTripleQuotes = false;\n rl.close();\n appendHistory(accumulated.trim());\n return resolve(accumulated.trim());\n }\n accumulated += line + '\\n';\n rl.prompt();\n return;\n }\n\n // Check line continuation with backslash '\\'\n if (line.endsWith('\\\\')) {\n accumulated += line.slice(0, -1) + '\\n';\n rl.setPrompt(pc.dim('... '));\n rl.prompt();\n return;\n }\n\n // Single line complete\n accumulated += line;\n rl.close();\n const result = accumulated.trim();\n if (result) {\n appendHistory(result);\n }\n resolve(result);\n });\n\n rl.on('SIGINT', () => {\n sigintCount++;\n if (sigintCount >= 2 || insideTripleQuotes) {\n console.log('\\nExiting Code Lantern.');\n rl.close();\n resolve('/exit');\n } else {\n console.log(pc.dim('\\n(Press Ctrl+C again or type /exit to quit)'));\n accumulated = '';\n insideTripleQuotes = false;\n rl.setPrompt(promptPrefix);\n rl.prompt();\n }\n });\n\n rl.on('close', () => {\n if (!accumulated) {\n resolve(null);\n }\n });\n });\n }\n}\n","import pc from 'picocolors';\n\nexport function printBanner(options: {\n version: string;\n provider?: string;\n model: string;\n workspace: string;\n yolo: boolean;\n planMode?: boolean;\n}): void {\n const logo = `\n ____ _ _ _ \n / ___|___ __| | ___ | | __ _ _ __ | |_ ___ _ __ _ __ \n | | / _ \\\\ / _\\` |/ _ \\\\ | | / _\\` | '_ \\\\ | __/ _ \\\\ '__| '_ \\\\ \n | |__| (_) | (_| | __/ | |__| (_| | | | || || __/ | | | | |\n \\\\____\\\\___/ \\\\__,_|\\\\___| |_____\\\\__,_|_| |_(_)__\\\\___|_| |_| |_|\n 🏮 Personal AI Coding Assistant for Terminal (Multi-Provider)\n`;\n\n console.log(pc.yellow(logo));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n const providerDisplay = options.provider ? `${pc.bold('Provider:')} ${pc.magenta(options.provider)} ` : '';\n console.log(`${pc.bold('Product:')} Code Lantern CLI (${pc.cyan('lantern')}) ${pc.bold('Version:')} ${options.version}`);\n console.log(`${providerDisplay}${pc.bold('Model:')} ${pc.green(options.model)}`);\n console.log(`${pc.bold('Workspace:')} ${pc.blue(options.workspace)}`);\n\n const modeBadge = options.planMode\n ? pc.bgBlue(pc.white(' PLAN MODE (Read-only) '))\n : options.yolo\n ? pc.bgRed(pc.white(' YOLO MODE (Auto-approve) '))\n : pc.bgGreen(pc.black(' SAFE MODE (Approval Prompts) '));\n\n console.log(`${pc.bold('Status:')} ${modeBadge}`);\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(pc.dim(`Type your task or question. Use ${pc.bold(pc.yellow('/help'))} for commands, ${pc.bold(pc.yellow('/exit'))} to quit.`));\n console.log(pc.dim(`Multiline tip: End a line with '\\\\' or enclose in '\"\"\"' for multiline blocks.\\n`));\n}\n","import pc from 'picocolors';\nimport { listSessions, exportSessionMarkdown } from '../session/sessionManager.js';\nimport { ProviderRegistry } from '../provider/registry.js';\nimport { SkillManager } from '../skills/skillManager.js';\nimport type { OrbitSession } from '../types.js';\n\nexport interface SlashCommandContext {\n session: OrbitSession;\n provider: string;\n model: string;\n workspace: string;\n yolo: boolean;\n planMode: boolean;\n showTiming: boolean;\n activeSkills: string[];\n setProvider: (p: string) => void;\n setModel: (m: string) => void;\n setYolo: (y: boolean) => void;\n setPlanMode: (p: boolean) => void;\n setShowTiming: (t: boolean) => void;\n setActiveSkills: (skills: string[]) => void;\n}\n\nexport async function handleSlashCommand(input: string, context: SlashCommandContext): Promise<boolean> {\n const parts = input.trim().split(/\\s+/);\n const command = parts[0].toLowerCase();\n const arg = parts.slice(1).join(' ');\n\n switch (command) {\n case '/help':\n console.log('\\n' + pc.bold(pc.yellow('🏮 Code Lantern CLI — Help & Commands')));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(pc.bold('Slash Commands:'));\n console.log(` ${pc.cyan('/help')} Show this help overview`);\n console.log(` ${pc.cyan('/clear')} Clear the terminal screen`);\n console.log(` ${pc.cyan('/status')} Display session, provider, model, and skill status`);\n console.log(` ${pc.cyan('/provider [name]')} View or switch active AI provider (gemini, openai, anthropic, openrouter)`);\n console.log(` ${pc.cyan('/model [id]')} View or switch active model`);\n console.log(` ${pc.cyan('/skills [name]')} List, enable, or disable active skills`);\n console.log(` ${pc.cyan('/timing [on|off]')} Toggle request timing diagnostics display`);\n console.log(` ${pc.cyan('/plan [on|off]')} Toggle read-only planning mode`);\n console.log(` ${pc.cyan('/yolo [on|off]')} Toggle YOLO auto-approval mode`);\n console.log(` ${pc.cyan('/sessions')} List saved local sessions`);\n console.log(` ${pc.cyan('/history')} Display recent turns in current session`);\n console.log(` ${pc.cyan('/export [md|json]')} Export current conversation transcript`);\n console.log(` ${pc.cyan('/exit')} or ${pc.cyan('/quit')} Exit Code Lantern CLI`);\n console.log('');\n console.log(pc.bold('Keyboard Shortcuts:'));\n console.log(` ${pc.dim('Enter')} Submit prompt`);\n console.log(` ${pc.dim('\\\\ + Enter')} Continue prompt on next line (multiline)`);\n console.log(` ${pc.dim('\"\"\" ... \"\"\"')} Multiline prompt block`);\n console.log(` ${pc.dim('Up/Down Arrows')} Navigate prompt history`);\n console.log(` ${pc.dim('Ctrl+C')} Cancel active request / double-tap to exit`);\n console.log(` ${pc.dim('Ctrl+D')} Exit session`);\n console.log('');\n return true;\n\n case '/clear':\n console.clear();\n return true;\n\n case '/status':\n console.log('\\n' + pc.bold(pc.yellow('🏮 Code Lantern Status')));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(`${pc.bold('Session ID:')} ${pc.cyan(context.session.id)}`);\n console.log(`${pc.bold('Workspace:')} ${pc.blue(context.workspace)}`);\n console.log(`${pc.bold('Active Provider:')} ${pc.magenta(context.provider)}`);\n console.log(`${pc.bold('Active Model:')} ${pc.green(context.model)}`);\n console.log(`${pc.bold('Active Skills:')} ${context.activeSkills.length > 0 ? pc.yellow(context.activeSkills.join(', ')) : pc.dim('none')}`);\n console.log(`${pc.bold('Turns:')} ${context.session.turns.length}`);\n console.log(`${pc.bold('Total Tokens:')} ${context.session.totalUsage.totalTokens.toLocaleString()}`);\n console.log(`${pc.bold('Timing Logs:')} ${context.showTiming ? pc.green('ON') : pc.dim('OFF')}`);\n console.log(`${pc.bold('YOLO Mode:')} ${context.yolo ? pc.red('ON (Auto-approve)') : pc.green('OFF (Prompt approval)')}`);\n console.log(`${pc.bold('Plan Mode:')} ${context.planMode ? pc.blue('ON (Read-only)') : pc.dim('OFF (Full execution)')}`);\n console.log('');\n return true;\n\n case '/provider': {\n const registry = new ProviderRegistry();\n if (arg) {\n const norm = arg.toLowerCase().trim();\n if (registry.hasProvider(norm)) {\n context.setProvider(norm);\n const p = registry.getProvider(norm);\n context.setModel(p.defaultModel);\n console.log(pc.green(`✓ Switched provider to '${p.displayName}' (default model: ${p.defaultModel})`));\n } else {\n console.log(pc.red(`Provider '${arg}' not found. Available: ${registry.listProviders().map(p => p.id).join(', ')}`));\n }\n } else {\n const providers = registry.listProviders();\n console.log(`\\nCurrent provider: ${pc.magenta(context.provider)}`);\n console.log('Available providers:');\n for (const p of providers) {\n const active = p.id === context.provider ? pc.green(' (active)') : '';\n console.log(` - ${pc.bold(p.id)}: ${p.displayName} [${p.isConfigured ? pc.green('Ready') : pc.yellow('Needs key')}]${active}`);\n }\n console.log(pc.dim(`Usage: /provider <name> (e.g. /provider openai)`));\n }\n return true;\n }\n\n case '/model':\n if (arg) {\n context.setModel(arg.trim());\n console.log(pc.green(`✓ Model changed to: ${arg.trim()}`));\n } else {\n console.log(`Current model: ${pc.cyan(context.model)} (Provider: ${context.provider})`);\n console.log(pc.dim(`Usage: /model <model-id> (or run 'lantern models list' to view available models)`));\n }\n return true;\n\n case '/skills': {\n const manager = new SkillManager();\n const skills = manager.listSkills(context.workspace);\n\n if (arg) {\n const target = arg.trim();\n const skill = manager.getSkill(target, context.workspace);\n if (skill) {\n const isCurrentlyActive = context.activeSkills.includes(skill.name);\n if (isCurrentlyActive) {\n context.setActiveSkills(context.activeSkills.filter(s => s !== skill.name));\n console.log(pc.yellow(`✓ Deactivated skill '${skill.name}' for this session.`));\n } else {\n context.setActiveSkills([...context.activeSkills, skill.name]);\n console.log(pc.green(`✓ Activated skill '${skill.name}' for this session.`));\n }\n } else {\n console.log(pc.red(`Skill '${target}' not found.`));\n }\n } else {\n console.log('\\n' + pc.bold(pc.yellow('🏮 Code Lantern Skills:')));\n if (skills.length === 0) {\n console.log(pc.dim(' (No skills currently installed. Add one with: lantern skills add <path>)'));\n } else {\n for (const s of skills) {\n const isSessionActive = context.activeSkills.includes(s.name);\n const status = isSessionActive ? pc.green('● ACTIVE') : s.enabled ? pc.cyan('○ default') : pc.dim('○ inactive');\n console.log(` ${status} ${pc.bold(s.name)} - ${pc.dim(s.description.slice(0, 50))}`);\n }\n }\n console.log(pc.dim(`\\nToggle skill for session: /skills <name>\\n`));\n }\n return true;\n }\n\n case '/timing':\n if (arg === 'off') {\n context.setShowTiming(false);\n console.log(pc.yellow('✓ Timing diagnostics disabled.'));\n } else if (arg === 'on') {\n context.setShowTiming(true);\n console.log(pc.green('✓ Timing diagnostics enabled.'));\n } else {\n const next = !context.showTiming;\n context.setShowTiming(next);\n console.log(next ? pc.green('✓ Timing diagnostics enabled.') : pc.yellow('✓ Timing diagnostics disabled.'));\n }\n return true;\n\n case '/plan':\n if (arg === 'off') {\n context.setPlanMode(false);\n console.log(pc.green('✓ Plan mode disabled (execution tools enabled).'));\n } else if (arg === 'on') {\n context.setPlanMode(true);\n console.log(pc.blue('✓ Plan mode enabled (read-only inspection).'));\n } else {\n const next = !context.planMode;\n context.setPlanMode(next);\n console.log(next ? pc.blue('✓ Plan mode enabled (read-only inspection).') : pc.green('✓ Plan mode disabled.'));\n }\n return true;\n\n case '/yolo':\n if (arg === 'off') {\n context.setYolo(false);\n console.log(pc.green('✓ YOLO mode disabled (safe approval prompts active).'));\n } else if (arg === 'on') {\n context.setYolo(true);\n console.log(pc.red('⚡ YOLO mode enabled (auto-approving edits & commands).'));\n } else {\n const next = !context.yolo;\n context.setYolo(next);\n console.log(next ? pc.red('⚡ YOLO mode enabled.') : pc.green('✓ Safe mode enabled.'));\n }\n return true;\n\n case '/sessions': {\n const list = listSessions();\n console.log('\\n' + pc.bold('Recent Sessions:'));\n if (list.length === 0) {\n console.log(pc.dim(' (No saved sessions)'));\n } else {\n for (const s of list.slice(0, 8)) {\n const isCurrent = s.id === context.session.id ? pc.green(' (current)') : '';\n console.log(` ${pc.cyan(s.id)} - ${s.title}${isCurrent} [${s.turnCount} turns]`);\n }\n }\n console.log('');\n return true;\n }\n\n case '/history':\n console.log('\\n' + pc.bold('Session History:'));\n if (context.session.turns.length === 0) {\n console.log(pc.dim(' (No messages yet in this session)'));\n } else {\n for (const t of context.session.turns) {\n const roleBadge = t.role === 'user' ? pc.cyan('[User]') : t.role === 'model' ? pc.yellow('[Lantern]') : pc.dim('[Tool]');\n const preview = t.text ? t.text.slice(0, 100).replace(/\\n/g, ' ') : `(Tool calls: ${t.toolCalls?.map(c => c.name).join(', ')})`;\n console.log(` ${roleBadge} ${preview}`);\n }\n }\n console.log('');\n return true;\n\n case '/export': {\n const format = arg.toLowerCase() === 'json' ? 'json' : 'markdown';\n if (format === 'json') {\n console.log('\\n' + JSON.stringify(context.session, null, 2));\n } else {\n console.log('\\n' + exportSessionMarkdown(context.session));\n }\n return true;\n }\n\n case '/exit':\n case '/quit':\n return false;\n\n default:\n console.log(pc.yellow(`Unknown slash command '${command}'. Type ${pc.bold('/help')} for available commands.`));\n return true;\n }\n}\n","import pc from 'picocolors';\nimport { LanternAgent } from '../agent/lanternAgent.js';\nimport { createNewSession } from '../session/sessionManager.js';\nimport { loadConfig } from '../config/config.js';\nimport { loadAttachments } from '../provider/attachment.js';\nimport { formatErrorMessage, CancelledError } from '../provider/errors.js';\nimport type { AgentContext } from '../types.js';\n\nexport async function askCommand(\n question: string,\n options: {\n provider?: string;\n model?: string;\n cwd?: string;\n attach?: string[];\n yolo?: boolean;\n json?: boolean;\n maxSteps?: number;\n timeout?: number;\n firstTokenTimeout?: number;\n timing?: boolean;\n fast?: boolean;\n skill?: string[];\n }\n): Promise<void> {\n const config = loadConfig();\n const workspace = options.cwd || process.cwd();\n const provider = options.provider || config.activeProvider || 'gemini';\n const model = options.model || config.defaultModel || 'gemini-3.8-flash';\n const yolo = Boolean(options.yolo ?? config.yolo);\n const jsonOutput = Boolean(options.json);\n const showTiming = Boolean(options.timing ?? config.showTiming);\n const lowLatency = Boolean(options.fast ?? config.lowLatency);\n\n const attachments = loadAttachments(options.attach);\n const session = createNewSession(workspace, model, `Ask: ${question.slice(0, 40)}`);\n session.provider = provider;\n\n const agent = new LanternAgent();\n await agent.initMcp();\n\n const abortController = new AbortController();\n const onSigInt = () => {\n abortController.abort(new CancelledError('Request cancelled by user (Ctrl+C).'));\n };\n process.on('SIGINT', onSigInt);\n\n const context: AgentContext = {\n workspace,\n provider,\n model,\n yolo,\n planMode: false,\n jsonOutput,\n maxSteps: options.maxSteps || config.maxSteps || 25,\n timeoutMs: options.timeout || config.timeoutMs || 60000,\n firstTokenTimeoutMs: options.firstTokenTimeout || config.firstTokenTimeoutMs || 30000,\n showTiming,\n lowLatency,\n activeSkills: options.skill || config.activeSkills || [],\n attachments,\n signal: abortController.signal\n };\n\n try {\n const result = await agent.runTurn(session, question, context, attachments);\n\n if (jsonOutput) {\n console.log(JSON.stringify({\n sessionId: session.id,\n provider,\n model,\n question,\n reply: result.reply,\n toolCount: result.toolCount,\n usage: result.usage,\n timing: result.timing\n }, null, 2));\n } else {\n const parts: string[] = [];\n if (result.usage.totalTokens > 0) {\n parts.push(`Tokens: ${result.usage.totalTokens.toLocaleString()}`);\n }\n if (showTiming && result.timing) {\n const ttft = result.timing.ttftMs ? `TTFT: ${result.timing.ttftMs}ms` : '';\n const total = `Total: ${(result.timing.totalMs / 1000).toFixed(2)}s`;\n parts.push(`[${[provider, model, ttft, total].filter(Boolean).join(' | ')}]`);\n }\n\n if (parts.length > 0) {\n console.log(pc.dim(`\\n[${parts.join(' | ')}]`));\n }\n }\n } catch (err: any) {\n if (jsonOutput) {\n console.error(JSON.stringify({ error: err.message }));\n } else if (err instanceof CancelledError || abortController.signal.aborted) {\n console.log(pc.yellow('\\n[Cancelled by user]'));\n } else {\n console.error(formatErrorMessage(err));\n }\n process.exit(1);\n } finally {\n process.removeListener('SIGINT', onSigInt);\n await agent.shutdown();\n }\n}\n","import pc from 'picocolors';\nimport { LanternAgent } from '../agent/lanternAgent.js';\nimport { createNewSession } from '../session/sessionManager.js';\nimport { loadConfig } from '../config/config.js';\nimport { loadAttachments } from '../provider/attachment.js';\nimport { formatErrorMessage, CancelledError } from '../provider/errors.js';\nimport type { AgentContext } from '../types.js';\n\nexport async function planCommand(\n task: string,\n options: {\n provider?: string;\n model?: string;\n cwd?: string;\n attach?: string[];\n json?: boolean;\n maxSteps?: number;\n timeout?: number;\n firstTokenTimeout?: number;\n timing?: boolean;\n skill?: string[];\n }\n): Promise<void> {\n const config = loadConfig();\n const workspace = options.cwd || process.cwd();\n const provider = options.provider || config.activeProvider || 'gemini';\n const model = options.model || config.defaultModel || 'gemini-3.8-flash';\n const jsonOutput = Boolean(options.json);\n const showTiming = Boolean(options.timing ?? config.showTiming);\n\n const attachments = loadAttachments(options.attach);\n const session = createNewSession(workspace, model, `Plan: ${task.slice(0, 40)}`);\n session.provider = provider;\n\n if (!jsonOutput) {\n console.log(pc.bold(pc.yellow('\\n🏮 Code Lantern Plan Mode (Read-Only)')));\n console.log(pc.dim(`Inspecting workspace with ${provider} (${model})...\\n`));\n }\n\n const agent = new LanternAgent();\n await agent.initMcp();\n\n const abortController = new AbortController();\n const onSigInt = () => {\n abortController.abort(new CancelledError('Plan cancelled by user (Ctrl+C).'));\n };\n process.on('SIGINT', onSigInt);\n\n const context: AgentContext = {\n workspace,\n provider,\n model,\n yolo: false,\n planMode: true,\n jsonOutput,\n maxSteps: options.maxSteps || config.maxSteps || 25,\n timeoutMs: options.timeout || config.timeoutMs || 60000,\n firstTokenTimeoutMs: options.firstTokenTimeout || config.firstTokenTimeoutMs || 30000,\n showTiming,\n lowLatency: false,\n activeSkills: options.skill || config.activeSkills || [],\n attachments,\n signal: abortController.signal\n };\n\n const planPrompt = `Please inspect the codebase as needed and generate a detailed, structured, read-only implementation plan for the following task:\\n\\n${task}`;\n\n try {\n const result = await agent.runTurn(session, planPrompt, context, attachments);\n\n if (jsonOutput) {\n console.log(JSON.stringify({\n sessionId: session.id,\n provider,\n model,\n task,\n plan: result.reply,\n usage: result.usage,\n timing: result.timing\n }, null, 2));\n } else {\n console.log(pc.dim(`\\n[Plan complete. Session ID: ${session.id}]`));\n if (showTiming && result.timing) {\n console.log(pc.dim(`[Total Plan Time: ${(result.timing.totalMs / 1000).toFixed(2)}s]`));\n }\n }\n } catch (err: any) {\n if (jsonOutput) {\n console.error(JSON.stringify({ error: err.message }));\n } else if (err instanceof CancelledError || abortController.signal.aborted) {\n console.log(pc.yellow('\\n[Plan cancelled by user]'));\n } else {\n console.error(formatErrorMessage(err));\n }\n process.exit(1);\n } finally {\n process.removeListener('SIGINT', onSigInt);\n await agent.shutdown();\n }\n}\n","import pc from 'picocolors';\nimport { listSessions, loadSession } from '../session/sessionManager.js';\nimport { interactiveCommand } from './interactive.js';\n\nexport async function resumeCommand(\n sessionId?: string,\n options: {\n provider?: string;\n model?: string;\n cwd?: string;\n attach?: string[];\n yolo?: boolean;\n timeout?: number;\n firstTokenTimeout?: number;\n timing?: boolean;\n fast?: boolean;\n skill?: string[];\n } = {}\n): Promise<void> {\n const sessions = listSessions();\n\n if (sessions.length === 0) {\n console.log(pc.yellow('No previous sessions found. Starting a fresh session...\\n'));\n await interactiveCommand(options);\n return;\n }\n\n let targetId = sessionId;\n\n if (!targetId) {\n // Default to the most recent session\n targetId = sessions[0].id;\n console.log(pc.cyan(`Resuming most recent session: ${sessions[0].title} (${targetId})`));\n } else {\n const existing = loadSession(targetId);\n if (!existing) {\n console.error(pc.red(`Error: Session '${targetId}' not found.`));\n console.log('\\nAvailable sessions:');\n for (const s of sessions.slice(0, 5)) {\n console.log(` - ${pc.cyan(s.id)} (${s.title})`);\n }\n process.exit(1);\n }\n }\n\n await interactiveCommand({\n ...options,\n session: targetId\n });\n}\n","import pc from 'picocolors';\nimport { listSessions, loadSession, deleteSession, exportSessionMarkdown } from '../session/sessionManager.js';\n\nexport async function sessionsCommand(options: {\n delete?: string;\n export?: string;\n json?: boolean;\n}): Promise<void> {\n if (options.delete) {\n const success = deleteSession(options.delete);\n if (success) {\n console.log(pc.green(`✓ Deleted session: ${options.delete}`));\n } else {\n console.error(pc.red(`✗ Could not find session: ${options.delete}`));\n process.exit(1);\n }\n return;\n }\n\n if (options.export) {\n const session = loadSession(options.export);\n if (!session) {\n console.error(pc.red(`✗ Session '${options.export}' not found.`));\n process.exit(1);\n }\n\n if (options.json) {\n console.log(JSON.stringify(session, null, 2));\n } else {\n console.log(exportSessionMarkdown(session));\n }\n return;\n }\n\n const sessions = listSessions();\n if (sessions.length === 0) {\n console.log(pc.dim('No saved Code Lantern sessions found.'));\n return;\n }\n\n if (options.json) {\n console.log(JSON.stringify(sessions, null, 2));\n return;\n }\n\n console.log('\\n' + pc.bold(pc.yellow('🏮 Saved Code Lantern Sessions')));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(\n pc.bold('Session ID'.padEnd(28)) +\n pc.bold('Turns'.padEnd(8)) +\n pc.bold('Model'.padEnd(20)) +\n pc.bold('Updated'.padEnd(20)) +\n pc.bold('Title')\n );\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n\n for (const s of sessions) {\n const dateStr = new Date(s.updatedAt).toLocaleString().slice(0, 18);\n console.log(\n pc.cyan(s.id.slice(0, 26).padEnd(28)) +\n String(s.turnCount).padEnd(8) +\n s.model.slice(0, 18).padEnd(20) +\n dateStr.padEnd(20) +\n pc.dim(s.title.slice(0, 30))\n );\n }\n\n console.log(pc.dim('\\nTo resume a session: lantern resume <session-id>'));\n console.log(pc.dim('To export a session: lantern sessions --export <session-id>'));\n console.log(pc.dim('To delete a session: lantern sessions --delete <session-id>\\n'));\n}\n","import pc from 'picocolors';\nimport { loadConfig, setConfigValue, getConfigFilePath } from '../config/config.js';\nimport { ALLOWED_CONFIG_KEYS } from '../config/schema.js';\n\nexport async function configCommand(\n action?: string,\n key?: string,\n value?: string\n): Promise<void> {\n const configPath = getConfigFilePath();\n\n if (!action || action === 'list') {\n const config = loadConfig();\n console.log('\\n' + pc.bold(pc.yellow('🏮 Code Lantern Configuration')));\n console.log(pc.dim(`File: ${configPath}`));\n console.log(pc.dim('─────────────────────────────────────────────────────────────'));\n for (const [k, v] of Object.entries(config)) {\n if (k === 'mcpServers') {\n const count = Object.keys(v as object).length;\n console.log(` ${pc.cyan(k.padEnd(24))} = ${pc.dim(`{ ${count} server(s) configured }`)}`);\n } else {\n console.log(` ${pc.cyan(k.padEnd(24))} = ${pc.green(JSON.stringify(v))}`);\n }\n }\n console.log(pc.dim('\\nUpdate setting: lantern config set <key> <value>'));\n console.log(pc.dim(`Supported keys: ${ALLOWED_CONFIG_KEYS.join(', ')}\\n`));\n return;\n }\n\n if (action === 'path') {\n console.log(configPath);\n return;\n }\n\n if (action === 'get') {\n if (!key) {\n console.error(pc.red('Error: Missing config key. Usage: orbit config get <key>'));\n process.exit(1);\n }\n const config = loadConfig() as unknown as Record<string, unknown>;\n if (!(key in config)) {\n console.error(pc.red(`Error: Unknown configuration key '${key}'`));\n process.exit(1);\n }\n console.log(JSON.stringify(config[key]));\n return;\n }\n\n if (action === 'set') {\n if (!key || value === undefined) {\n console.error(pc.red('Error: Missing key or value. Usage: orbit config set <key> <value>'));\n process.exit(1);\n }\n\n const res = setConfigValue(key, value);\n if (!res.success) {\n console.error(pc.red(`Error: ${res.error}`));\n process.exit(1);\n }\n\n console.log(pc.green(`✓ Set ${key} = ${value}`));\n return;\n }\n\n console.error(pc.red(`Error: Unknown config action '${action}'. Available: list, get, set, path`));\n process.exit(1);\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { execSync } from 'node:child_process';\nimport pc from 'picocolors';\nimport { getLanternHomeDir, getConfigFilePath, loadConfig } from '../config/config.js';\nimport { getSessionsDir } from '../session/sessionManager.js';\nimport { loadMcpConfig } from '../mcp/mcpConfig.js';\nimport { loadProjectInstructions } from '../config/projectInstructions.js';\nimport { ProviderRegistry } from '../provider/registry.js';\nimport { listConfiguredKeys } from '../security/credentials.js';\nimport { SkillManager } from '../skills/skillManager.js';\n\nexport async function doctorCommand(): Promise<void> {\n console.log('\\n' + pc.bold(pc.yellow('🏮 Code Lantern Doctor — Diagnostics')));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n\n let issuesFound = 0;\n const config = loadConfig();\n const registry = new ProviderRegistry();\n const skillManager = new SkillManager();\n\n // 1. Operating System & Architecture\n const platformName = process.platform === 'darwin'\n ? `macOS (${process.arch === 'arm64' ? 'Apple Silicon' : 'Intel'})`\n : process.platform === 'win32'\n ? `Windows (${process.arch})`\n : `${process.platform} (${process.arch})`;\n console.log(`${pc.green('✓')} Platform / OS: ${platformName}`);\n\n // 2. Node.js environment\n const nodeVer = process.version;\n const major = parseInt(nodeVer.replace('v', '').split('.')[0], 10);\n if (major >= 18) {\n console.log(`${pc.green('✓')} Node.js Runtime: ${nodeVer} (compatible)`);\n } else {\n issuesFound++;\n console.log(`${pc.red('✗')} Node.js Runtime: ${nodeVer} (Node 18+ required)`);\n }\n\n // 3. Provider & Key Diagnostics\n const activeProviderId = config.activeProvider || 'gemini';\n const activeProvider = registry.getProvider(activeProviderId);\n const keys = listConfiguredKeys();\n\n console.log(`${pc.green('✓')} Active Provider: ${pc.bold(activeProvider.displayName)} (${activeProviderId})`);\n console.log(`${pc.green('✓')} Active Model: ${config.defaultModel}`);\n\n const activeKeyInfo = keys[activeProviderId];\n if (!activeKeyInfo || !activeKeyInfo.configured) {\n issuesFound++;\n console.log(`${pc.red('✗')} API Key (${activeProviderId}): Missing!`);\n console.log(pc.yellow(` → To fix: set environment variable or run 'lantern keys set ${activeProviderId}'`));\n } else {\n const src = activeKeyInfo.source ? `[${activeKeyInfo.source}]` : '';\n console.log(`${pc.green('✓')} API Key (${activeProviderId}): Found (${activeKeyInfo.maskedKey}) ${src}`);\n\n // Verify connection to active provider\n try {\n const pingRes = await activeProvider.testConnection();\n if (pingRes.success) {\n console.log(`${pc.green('✓')} Provider Auth & Ping: Verified (${pingRes.latencyMs}ms latency)`);\n } else {\n issuesFound++;\n console.log(`${pc.red('✗')} Provider Auth & Ping: Failed: ${pingRes.error}`);\n }\n } catch (err: any) {\n issuesFound++;\n console.log(`${pc.red('✗')} Provider Auth & Ping: Error: ${err.message}`);\n }\n }\n\n // 4. Other Configured Providers\n const otherConfigured = Object.entries(keys).filter(([p, k]) => p !== activeProviderId && k.configured);\n if (otherConfigured.length > 0) {\n const others = otherConfigured.map(([p]) => p).join(', ');\n console.log(`${pc.cyan('ℹ')} Additional Providers: Configured (${others})`);\n }\n\n // 5. Git integration\n try {\n const gitVer = execSync('git --version', { stdio: 'pipe' }).toString().trim();\n console.log(`${pc.green('✓')} Git CLI: Available (${gitVer})`);\n } catch {\n console.log(`${pc.yellow('!')} Git CLI: Not found in PATH (some git tools will be unavailable)`);\n }\n\n // 6. Configuration & Timeouts\n try {\n const configFile = getConfigFilePath();\n console.log(`${pc.green('✓')} Config File: ${configFile} (Timeout: ${config.timeoutMs}ms, TTFT: ${config.firstTokenTimeoutMs}ms)`);\n } catch (err: any) {\n issuesFound++;\n console.log(`${pc.red('✗')} Config File: Invalid: ${err.message}`);\n }\n\n // 7. Session storage\n try {\n const sessionsDir = getSessionsDir();\n const count = fs.existsSync(sessionsDir) ? fs.readdirSync(sessionsDir).filter(f => f.endsWith('.json')).length : 0;\n console.log(`${pc.green('✓')} Session Storage: ${sessionsDir} (${count} stored session(s))`);\n } catch (err: any) {\n issuesFound++;\n console.log(`${pc.red('✗')} Session Storage: Failed: ${err.message}`);\n }\n\n // 8. Skills\n const installedSkills = skillManager.listSkills();\n if (installedSkills.length > 0) {\n const activeCount = installedSkills.filter(s => s.enabled).length;\n console.log(`${pc.green('✓')} Skills: ${installedSkills.length} installed (${activeCount} active default)`);\n } else {\n console.log(`${pc.cyan('ℹ')} Skills: None installed (add with: lantern skills add <path>)`);\n }\n\n // 9. MCP Servers\n const mcpServers = loadMcpConfig();\n const serverCount = Object.keys(mcpServers).length;\n if (serverCount === 0) {\n console.log(`${pc.cyan('ℹ')} MCP Servers: No external MCP servers configured (optional)`);\n } else {\n console.log(`${pc.green('✓')} MCP Servers: ${serverCount} server(s) configured`);\n }\n\n // 10. Workspace Instructions\n const cwd = process.cwd();\n const instructions = loadProjectInstructions(cwd);\n if (instructions.found) {\n console.log(`${pc.green('✓')} Project Instructions: Found (${path.basename(instructions.filePath || '')}) in ${cwd}`);\n } else {\n console.log(`${pc.dim('ℹ')} Project Instructions: None found in workspace (e.g. LANTERN.md, GEMINI.md)`);\n }\n\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n if (issuesFound === 0) {\n console.log(pc.bold(pc.green('✨ All systems healthy! Code Lantern CLI is ready to assist.')));\n } else {\n console.log(pc.bold(pc.yellow(`⚠️ Doctor found ${issuesFound} issue(s) to address before optimal use.`)));\n }\n console.log('');\n}\n","import pc from 'picocolors';\nimport { loadMcpConfig, addMcpServer, removeMcpServer, toggleMcpServer } from '../mcp/mcpConfig.js';\nimport { McpManager } from '../mcp/mcpManager.js';\n\nexport async function mcpCommand(\n action?: string,\n serverName?: string,\n command?: string,\n args: string[] = []\n): Promise<void> {\n const servers = loadMcpConfig();\n\n if (!action || action === 'list') {\n console.log('\\n' + pc.bold(pc.yellow('🏮 Code Lantern MCP Servers')));\n console.log(pc.dim('─────────────────────────────────────────────────────────────'));\n\n const entries = Object.entries(servers);\n if (entries.length === 0) {\n console.log(pc.dim('No MCP servers configured.'));\n console.log(pc.dim('\\nTo add a server: lantern mcp add <name> <command> [args...]'));\n console.log(pc.dim('Example: lantern mcp add sqlite npx -y @modelcontextprotocol/server-sqlite /path/to/db.sqlite\\n'));\n return;\n }\n\n for (const [name, s] of entries) {\n const statusBadge = s.disabled ? pc.red('[disabled]') : pc.green('[enabled]');\n console.log(`${pc.bold(name)} ${statusBadge}`);\n console.log(` Command: ${pc.cyan(s.command)} ${(s.args || []).join(' ')}`);\n if (s.env && Object.keys(s.env).length > 0) {\n console.log(` Env: ${JSON.stringify(s.env)}`);\n }\n console.log('');\n }\n return;\n }\n\n if (action === 'add') {\n if (!serverName || !command) {\n console.error(pc.red('Error: Missing arguments. Usage: orbit mcp add <name> <command> [args...]'));\n process.exit(1);\n }\n\n addMcpServer(serverName, {\n command,\n args: args.length > 0 ? args : undefined\n });\n\n console.log(pc.green(`✓ Added MCP server '${serverName}': ${command} ${args.join(' ')}`));\n return;\n }\n\n if (action === 'remove' || action === 'rm') {\n if (!serverName) {\n console.error(pc.red('Error: Missing server name. Usage: orbit mcp remove <name>'));\n process.exit(1);\n }\n\n const removed = removeMcpServer(serverName);\n if (removed) {\n console.log(pc.green(`✓ Removed MCP server '${serverName}'`));\n } else {\n console.error(pc.red(`✗ MCP server '${serverName}' not found`));\n process.exit(1);\n }\n return;\n }\n\n if (action === 'disable') {\n if (!serverName) {\n console.error(pc.red('Error: Missing server name. Usage: orbit mcp disable <name>'));\n process.exit(1);\n }\n toggleMcpServer(serverName, true);\n console.log(pc.yellow(`✓ Disabled MCP server '${serverName}'`));\n return;\n }\n\n if (action === 'enable') {\n if (!serverName) {\n console.error(pc.red('Error: Missing server name. Usage: orbit mcp enable <name>'));\n process.exit(1);\n }\n toggleMcpServer(serverName, false);\n console.log(pc.green(`✓ Enabled MCP server '${serverName}'`));\n return;\n }\n\n if (action === 'test') {\n if (!serverName) {\n console.error(pc.red('Error: Missing server name. Usage: orbit mcp test <name>'));\n process.exit(1);\n }\n\n const server = servers[serverName];\n if (!server) {\n console.error(pc.red(`✗ MCP server '${serverName}' not found in configuration`));\n process.exit(1);\n }\n\n console.log(`Connecting to MCP server '${serverName}'...`);\n const mgr = new McpManager();\n try {\n const tools = await mgr.connectServer(serverName, server);\n console.log(pc.green(`✓ Connected successfully! Exposing ${tools.length} tool(s):`));\n for (const t of tools) {\n console.log(` - ${pc.cyan(t.definition.name)}: ${t.definition.description}`);\n }\n } catch (err: any) {\n console.error(pc.red(`✗ Failed to connect to '${serverName}': ${err.message}`));\n process.exit(1);\n } finally {\n await mgr.closeAll();\n }\n return;\n }\n\n console.error(pc.red(`Error: Unknown action '${action}'. Available: list, add, remove, enable, disable, test`));\n process.exit(1);\n}\n","import pc from 'picocolors';\nimport readline from 'node:readline';\nimport { ProviderRegistry } from '../provider/registry.js';\nimport { loadConfig, setConfigValue } from '../config/config.js';\nimport { setApiKey, getApiKey, maskApiKey } from '../security/credentials.js';\n\nfunction promptLine(query: string, hide = false): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n return new Promise(resolve => {\n rl.question(query, answer => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nexport async function providersCommand(\n action?: string,\n target?: string,\n options?: {\n baseUrl?: string;\n apiKey?: string;\n model?: string;\n }\n): Promise<void> {\n const registry = new ProviderRegistry();\n const subAction = (action || 'list').toLowerCase();\n\n if (subAction === 'list') {\n const providers = registry.listProviders();\n console.log('\\n' + pc.bold(pc.yellow('🏮 Configured AI Providers')));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(\n pc.bold('Provider'.padEnd(16)) +\n pc.bold('Status'.padEnd(16)) +\n pc.bold('Default Model'.padEnd(30)) +\n pc.bold('Key Source')\n );\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n\n for (const p of providers) {\n const activeMarker = p.isActive ? pc.green(' (active)') : '';\n const nameCol = pc.bold(p.name) + activeMarker;\n const statusCol = p.isConfigured ? pc.green('✓ Ready') : pc.yellow('! Needs Key');\n const keyInfo = getApiKey(p.id);\n const sourceCol = keyInfo.source ? pc.cyan(`[${keyInfo.source}]`) : pc.dim('(missing)');\n\n console.log(\n nameCol.padEnd(p.isActive ? 25 : 16) +\n statusCol.padEnd(25) +\n p.defaultModel.padEnd(30) +\n sourceCol\n );\n }\n\n console.log(pc.dim('\\nTo set default: lantern providers set-default <name>'));\n console.log(pc.dim('To test connection: lantern providers test [name]'));\n console.log(pc.dim('To add custom provider: lantern providers add <name>\\n'));\n return;\n }\n\n if (subAction === 'set-default' || subAction === 'use') {\n if (!target) {\n console.error(pc.red('Error: Missing provider name. Usage: lantern providers set-default <name>'));\n process.exit(1);\n }\n\n const norm = target.toLowerCase();\n if (!registry.hasProvider(norm)) {\n console.error(pc.red(`Error: Provider '${target}' is not registered.`));\n process.exit(1);\n }\n\n setConfigValue('activeProvider', norm);\n const p = registry.getProvider(norm);\n setConfigValue('defaultModel', p.defaultModel);\n\n console.log(pc.green(`✓ Set active provider to '${p.displayName}' (default model: ${p.defaultModel})`));\n return;\n }\n\n if (subAction === 'test') {\n const targetProvider = target || loadConfig().activeProvider || 'gemini';\n const p = registry.getProvider(targetProvider);\n\n console.log(`Testing connection to ${pc.cyan(p.displayName)}...`);\n const result = await p.testConnection();\n\n if (result.success) {\n console.log(pc.green(`✓ Connection verified! Latency: ${result.latencyMs}ms`));\n if (result.modelsCount !== undefined) {\n console.log(pc.dim(` Available models discovered: ${result.modelsCount}`));\n }\n } else {\n console.log(pc.red(`✗ Connection failed: ${result.error}`));\n console.log(pc.yellow(` Check your credentials with 'lantern keys list'`));\n process.exit(1);\n }\n return;\n }\n\n if (subAction === 'add') {\n const name = target || await promptLine('Provider ID / Name: ');\n if (!name) {\n console.error(pc.red('Error: Provider name is required.'));\n process.exit(1);\n }\n\n const baseUrl = options?.baseUrl || await promptLine('Base URL (e.g. http://localhost:11434/v1): ');\n const defaultModel = options?.model || await promptLine('Default Model ID (e.g. llama3, qwen2.5): ');\n const apiKey = options?.apiKey || await promptLine('API Key (optional, press Enter to skip): ');\n\n registry.registerCustomProvider({\n id: name.toLowerCase(),\n name,\n type: 'custom',\n baseUrl,\n defaultModel: defaultModel || 'default'\n });\n\n if (apiKey) {\n setApiKey(name.toLowerCase(), apiKey);\n }\n\n console.log(pc.green(`✓ Registered custom OpenAI-compatible provider '${name}'`));\n return;\n }\n\n if (subAction === 'remove' || subAction === 'rm') {\n if (!target) {\n console.error(pc.red('Error: Missing provider name. Usage: lantern providers remove <name>'));\n process.exit(1);\n }\n\n const removed = registry.removeCustomProvider(target);\n if (removed) {\n console.log(pc.green(`✓ Removed provider '${target}'`));\n } else {\n console.log(pc.red(`Cannot remove built-in provider '${target}'. Only custom providers can be removed.`));\n process.exit(1);\n }\n return;\n }\n\n console.error(pc.red(`Unknown action '${action}'. Available: list, set-default, test, add, remove`));\n process.exit(1);\n}\n","import pc from 'picocolors';\nimport { ProviderRegistry } from '../provider/registry.js';\nimport { loadConfig, setConfigValue } from '../config/config.js';\n\nexport async function modelsCommand(\n action?: string,\n modelId?: string,\n options?: {\n provider?: string;\n refresh?: boolean;\n json?: boolean;\n }\n): Promise<void> {\n const registry = new ProviderRegistry();\n const config = loadConfig();\n const subAction = (action || 'list').toLowerCase();\n const providerId = options?.provider || config.activeProvider || 'gemini';\n const provider = registry.getProvider(providerId);\n\n if (subAction === 'list') {\n if (!options?.json) {\n console.log(`\\nFetching models for ${pc.cyan(provider.displayName)}...`);\n }\n const models = await provider.listModels(Boolean(options?.refresh));\n\n if (options?.json) {\n console.log(JSON.stringify(models, null, 2));\n return;\n }\n\n console.log('\\n' + pc.bold(pc.yellow(`🏮 Available Models for ${provider.displayName}`)));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(\n pc.bold('Model ID'.padEnd(36)) +\n pc.bold('Tools'.padEnd(8)) +\n pc.bold('Vision'.padEnd(8)) +\n pc.bold('Reasoning'.padEnd(12)) +\n pc.bold('Context Window')\n );\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n\n const currentModel = config.defaultModel;\n\n for (const m of models) {\n const isCurrent = m.id === currentModel;\n const marker = isCurrent ? pc.green(' (active)') : '';\n const idCol = (m.id + marker).slice(0, 34);\n const toolsCol = m.capabilities.tools ? pc.green('✓') : pc.dim('✗');\n const visionCol = m.capabilities.images ? pc.green('✓') : pc.dim('✗');\n const reasoningCol = m.capabilities.reasoning ? pc.magenta('✓') : pc.dim('✗');\n const ctxCol = m.contextWindow ? `${(m.contextWindow / 1000).toFixed(0)}k` : pc.dim('standard');\n\n console.log(\n idCol.padEnd(isCurrent ? 45 : 36) +\n toolsCol.padEnd(16) +\n visionCol.padEnd(16) +\n reasoningCol.padEnd(20) +\n ctxCol\n );\n }\n\n console.log(pc.dim('\\nTo set active model: lantern model set <model-id>'));\n console.log(pc.dim(`Example: lantern model set ${models[0]?.id || 'gemini-3.8-flash'}\\n`));\n return;\n }\n\n if (subAction === 'set') {\n if (!modelId) {\n console.error(pc.red('Error: Missing model ID. Usage: lantern model set <model-id> [--provider <provider>]'));\n process.exit(1);\n }\n\n if (options?.provider) {\n setConfigValue('activeProvider', options.provider.toLowerCase());\n }\n\n setConfigValue('defaultModel', modelId.trim());\n console.log(pc.green(`✓ Set active model to '${modelId.trim()}' (provider: ${provider.displayName})`));\n return;\n }\n\n console.error(pc.red(`Unknown action '${action}'. Available: list, set`));\n process.exit(1);\n}\n","import readline from 'node:readline';\nimport pc from 'picocolors';\nimport { listConfiguredKeys, setApiKey, removeApiKey, maskApiKey } from '../security/credentials.js';\n\nfunction promptPassword(prompt: string): Promise<string> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout\n });\n\n return new Promise(resolve => {\n rl.question(prompt, answer => {\n rl.close();\n resolve(answer.trim());\n });\n });\n}\n\nexport async function keysCommand(\n action?: string,\n provider?: string,\n key?: string\n): Promise<void> {\n const subAction = (action || 'list').toLowerCase();\n\n if (subAction === 'list') {\n const keys = listConfiguredKeys();\n console.log('\\n' + pc.bold(pc.yellow('🏮 Configured Provider API Keys')));\n console.log(pc.dim('─────────────────────────────────────────────────────────────'));\n console.log(\n pc.bold('Provider'.padEnd(16)) +\n pc.bold('Source'.padEnd(14)) +\n pc.bold('Masked Key')\n );\n console.log(pc.dim('─────────────────────────────────────────────────────────────'));\n\n for (const [p, info] of Object.entries(keys)) {\n const srcText = info.source ? pc.cyan(`[${info.source}]`) : pc.dim('none');\n console.log(\n pc.bold(p.padEnd(16)) +\n srcText.padEnd(22) +\n (info.configured ? pc.green(info.maskedKey) : pc.dim('(not configured)'))\n );\n }\n\n console.log(pc.dim('\\nTo set key: lantern keys set <provider> [key]'));\n console.log(pc.dim('To remove key: lantern keys remove <provider>\\n'));\n return;\n }\n\n if (subAction === 'set') {\n if (!provider) {\n console.error(pc.red('Error: Missing provider name. Usage: lantern keys set <provider> [key]'));\n process.exit(1);\n }\n\n let apiKey = key;\n if (!apiKey) {\n apiKey = await promptPassword(`Enter API key for '${provider}': `);\n }\n\n if (!apiKey) {\n console.error(pc.red('Error: API key cannot be empty.'));\n process.exit(1);\n }\n\n setApiKey(provider, apiKey);\n console.log(pc.green(`✓ Successfully saved encrypted API key for '${provider}' (${maskApiKey(apiKey)})`));\n return;\n }\n\n if (subAction === 'remove' || subAction === 'rm') {\n if (!provider) {\n console.error(pc.red('Error: Missing provider name. Usage: lantern keys remove <provider>'));\n process.exit(1);\n }\n\n const removed = removeApiKey(provider);\n if (removed) {\n console.log(pc.green(`✓ Removed stored key for '${provider}'`));\n } else {\n console.log(pc.yellow(`No stored key found for '${provider}'. (If set in environment variables, unset the env var).`));\n }\n return;\n }\n\n console.error(pc.red(`Unknown action '${action}'. Available: list, set, remove`));\n process.exit(1);\n}\n","import pc from 'picocolors';\nimport { SkillManager } from '../skills/skillManager.js';\n\nexport async function skillsCommand(\n action?: string,\n target?: string\n): Promise<void> {\n const manager = new SkillManager();\n const subAction = (action || 'list').toLowerCase();\n\n if (subAction === 'list') {\n const skills = manager.listSkills();\n console.log('\\n' + pc.bold(pc.yellow('🏮 Installed Code Lantern Skills')));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(\n pc.bold('Skill Name'.padEnd(24)) +\n pc.bold('Source'.padEnd(12)) +\n pc.bold('Status'.padEnd(14)) +\n pc.bold('Description')\n );\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n\n if (skills.length === 0) {\n console.log(pc.dim('No skills currently installed.'));\n console.log(pc.dim(`\\nAdd a skill using: lantern skills add <local-folder-or-git-url>`));\n console.log(pc.dim(`User skills folder: ${manager.getUserSkillsDir()}\\n`));\n return;\n }\n\n for (const s of skills) {\n const statusText = s.enabled ? pc.green('✓ Active') : pc.dim('Disabled');\n const sourceText = s.source === 'project' ? pc.cyan('[project]') : pc.blue('[user]');\n\n console.log(\n pc.bold(s.name.padEnd(24)) +\n sourceText.padEnd(20) +\n statusText.padEnd(22) +\n pc.dim(s.description.slice(0, 40))\n );\n }\n\n console.log(pc.dim('\\nTo inspect: lantern skills show <name>'));\n console.log(pc.dim('To enable: lantern skills enable <name>'));\n console.log(pc.dim('To disable: lantern skills disable <name>'));\n console.log(pc.dim('To add: lantern skills add <folder-path-or-git-url>\\n'));\n return;\n }\n\n if (subAction === 'show') {\n if (!target) {\n console.error(pc.red('Error: Missing skill name. Usage: lantern skills show <name>'));\n process.exit(1);\n }\n\n const skill = manager.getSkill(target);\n if (!skill) {\n console.error(pc.red(`Error: Skill '${target}' not found.`));\n process.exit(1);\n }\n\n console.log('\\n' + pc.bold(pc.yellow(`🏮 Skill: ${skill.name}`)));\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log(`${pc.bold('Source:')} ${skill.source}`);\n console.log(`${pc.bold('Path:')} ${skill.path}`);\n console.log(`${pc.bold('Status:')} ${skill.enabled ? pc.green('Enabled') : pc.dim('Disabled')}`);\n console.log(`${pc.bold('Description:')} ${skill.description}`);\n if (skill.references && skill.references.length > 0) {\n console.log(`${pc.bold('References:')} ${skill.references.length} reference file(s) available`);\n }\n console.log(pc.dim('──────────────────────────────────────────────────────────────────────────────'));\n console.log('\\n' + pc.cyan('Instructions Content:'));\n console.log(skill.content.slice(0, 1000) + (skill.content.length > 1000 ? '\\n... (truncated)' : ''));\n console.log('');\n return;\n }\n\n if (subAction === 'enable') {\n if (!target) {\n console.error(pc.red('Error: Missing skill name. Usage: lantern skills enable <name>'));\n process.exit(1);\n }\n\n const skill = manager.getSkill(target);\n if (!skill) {\n console.error(pc.red(`Error: Skill '${target}' not found.`));\n process.exit(1);\n }\n\n manager.enableSkill(skill.name);\n console.log(pc.green(`✓ Enabled skill '${skill.name}'`));\n return;\n }\n\n if (subAction === 'disable') {\n if (!target) {\n console.error(pc.red('Error: Missing skill name. Usage: lantern skills disable <name>'));\n process.exit(1);\n }\n\n manager.disableSkill(target);\n console.log(pc.yellow(`✓ Disabled skill '${target}'`));\n return;\n }\n\n if (subAction === 'add') {\n if (!target) {\n console.error(pc.red('Error: Missing path or repository URL. Usage: lantern skills add <path-or-git-url>'));\n process.exit(1);\n }\n\n console.log(`Adding skill from '${target}'...`);\n const isGit = target.startsWith('http://') || target.startsWith('https://') || target.startsWith('git@');\n const result = isGit ? manager.addSkillFromGit(target) : manager.addSkillFromPath(target);\n\n if (result.success) {\n console.log(pc.green(`✓ Successfully added and enabled skill '${result.skillName}'`));\n } else {\n console.error(pc.red(`✗ Failed to add skill: ${result.error}`));\n process.exit(1);\n }\n return;\n }\n\n if (subAction === 'remove' || subAction === 'rm') {\n if (!target) {\n console.error(pc.red('Error: Missing skill name. Usage: lantern skills remove <name>'));\n process.exit(1);\n }\n\n const removed = manager.removeSkill(target);\n if (removed) {\n console.log(pc.green(`✓ Removed skill '${target}'`));\n } else {\n console.error(pc.red(`✗ Skill '${target}' not found or could not be removed.`));\n process.exit(1);\n }\n return;\n }\n\n console.error(pc.red(`Unknown action '${action}'. Available: list, show, add, enable, disable, remove`));\n process.exit(1);\n}\n"],"mappings":"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","names":["pc","pc","pc","pc","config","pc","pc","config","pc","pc","config","pc","pc","pc","pc","pc","pc","config","pc","fs","path","pc","pc","config","fs","path","pc","pc","pc","readline","readline","pc","pc","config","pc","readline","pc","readline","pc","pc","pc"]}