cast-code 1.0.2 → 1.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/modules/repl/services/commands/mcp-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { Colors, colorize, Box, Icons } from '../../utils/theme';\nimport { McpRegistryService } from '../../../mcp/services/mcp-registry.service';\nimport { McpClientService } from '../../../mcp/services/mcp-client.service';\nimport {\n selectWithEsc,\n inputWithEsc,\n confirmWithEsc,\n CancelledPromptError,\n} from '../../utils/prompts-with-esc';\nimport { getAllTemplates, getTemplatesByCategory, getTemplate, McpCategory } from '../../../mcp/catalog/mcp-templates';\n\ninterface SmartInput {\n askChoice: (question: string, choices: { key: string; label: string; description: string }[]) => Promise<string>;\n question: (prompt: string) => Promise<string>;\n}\n\n@Injectable()\nexport class McpCommandsService {\n constructor(\n private readonly mcpRegistry: McpRegistryService,\n private readonly mcpClient: McpClientService,\n ) {}\n\n async cmdMcp(args: string[], smartInput: SmartInput & { pause: () => void; resume: () => void }): Promise<void> {\n const sub = args[0] || 'menu';\n\n // 'menu' uses SmartInput directly — must NOT pause before it\n if (sub === 'menu') {\n try {\n await this.showMcpMenu(smartInput);\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error?.name === 'CancelledPromptError') {\n console.log(colorize('\\n❌ Cancelado. Voltando ao chat...\\n', 'warning'));\n } else {\n throw error;\n }\n }\n return;\n }\n\n // Other sub-commands use inquirer and need pause/resume\n smartInput.pause();\n try {\n switch (sub) {\n case 'list':\n await this.listServers();\n break;\n case 'tools':\n await this.listTools();\n break;\n case 'add':\n await this.addMcpWizard(smartInput);\n break;\n case 'remove':\n await this.removeMcpWizard(smartInput);\n break;\n case 'test':\n await this.testMcpTool(smartInput);\n break;\n case 'what':\n case 'about':\n this.printWhatIsMcp();\n break;\n case 'help':\n default:\n this.printMcpHelp();\n break;\n }\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error?.name === 'CancelledPromptError') {\n console.log(colorize('\\n❌ Cancelado. Voltando ao chat...\\n', 'warning'));\n return;\n }\n throw error;\n } finally {\n smartInput.resume();\n }\n }\n\n private async showMcpMenu(smartInput: SmartInput): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n\n while (true) {\n w(`\\n${colorize('☁️ MCP Hub', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(30), 'subtle')}\\n\\n`);\n\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w(`${colorize('Servidores:', 'muted')} ${summaries.length} `);\n w(`${colorize('Ferramentas:', 'muted')} ${totalTools}\\n\\n`);\n\n console.log(colorize('(pressione ESC para voltar ao chat)\\n', 'muted'));\n\n const action = await this.withEsc(() => smartInput.askChoice('O que deseja fazer?', [\n { key: '1', label: 'Ver servidores', description: 'Listar MCPs configurados' },\n { key: '2', label: 'Ver ferramentas', description: 'Todas as tools disponíveis' },\n { key: '3', label: 'Conectar servidores', description: 'Conectar/reconectar MCPs configurados' },\n { key: '4', label: 'Adicionar servidor', description: 'Configurar novo MCP' },\n { key: '5', label: 'Remover servidor', description: 'Desconectar MCP' },\n { key: '6', label: 'O que é MCP?', description: 'Entenda o protocolo' },\n { key: 'q', label: 'Voltar', description: 'Sair do MCP Hub' },\n ]));\n\n if (action === null) {\n console.log(colorize('\\nSaindo do MCP Hub...\\n', 'muted'));\n return;\n }\n\n let pause = true;\n switch (action) {\n case '1':\n await this.listServers();\n break;\n case '2':\n await this.listTools();\n break;\n case '3':\n await this.connectServers(smartInput as any);\n break;\n case '4':\n await this.addMcpWizard(smartInput);\n pause = false;\n break;\n case '5':\n await this.removeMcpWizard(smartInput);\n pause = false;\n break;\n case '6':\n this.printWhatIsMcp();\n break;\n case 'q':\n return;\n }\n\n if (pause) {\n await smartInput.question(colorize('\\nEnter para continuar...', 'muted'));\n }\n }\n }\n\n private async withEsc<T>(fn: () => Promise<T>): Promise<T | null> {\n try {\n return await fn();\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error.name === 'CancelledPromptError') {\n return null;\n }\n throw error;\n }\n }\n\n private async connectServers(smartInput?: SmartInput & { pause: () => void; resume: () => void }): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Conectar Servidores MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n\\n');\n\n if (summaries.length === 0) {\n w(` ${colorize('Nenhum servidor configurado. Use a opção Adicionar servidor.', 'muted')}\\r\\n\\n`);\n return;\n }\n\n w(` ${colorize('Conectando ' + summaries.length + ' servidor(es)...', 'muted')}\\r\\n\\n`);\n\n const results = await this.mcpRegistry.connectAll();\n\n for (const [name, ok] of results.entries()) {\n const icon = ok ? colorize('●', 'success') : colorize('○', 'error');\n const status = ok ? colorize('conectado', 'success') : colorize('falhou', 'error');\n w(` ${icon} ${colorize(name, 'cyan')} — ${status}\\r\\n`);\n\n if (!ok) {\n const config = this.mcpRegistry.getConfig(name);\n\n // OAuth/HTTP: the SDK already ran the full flow. Failure = server blocked DCR\n if (config?.type === 'http') {\n w(`\\r\\n ${colorize('⚠️ ' + name + ': OAuth bloqueado pelo servidor', 'warning')}\\r\\n`);\n w(` Este servidor só aceita clientes pré-aprovados (ex: VS Code, Cursor).\\r\\n`);\n w(` Alternativa: use o proxy mcp-remote para redirecionar via cliente aprovado.\\r\\n\\r\\n`);\n\n // stdio server — check for missing credentials\n } else if (config?.type === 'stdio' && smartInput) {\n const template = getTemplate(name);\n if (template?.credentials?.length) {\n const missing = template.credentials.filter(cred => {\n if (cred.isArg) return false; // args are set at add time\n return !config.env?.[cred.envVar];\n });\n\n if (missing.length > 0) {\n w(`\\r\\n ${colorize('🔑 Credenciais necessárias para ' + name, 'warning')}\\r\\n\\r\\n`);\n\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n const filePath = path.join(mcpDir, `${name}.json`);\n const updatedConfig = JSON.parse(JSON.stringify(config));\n if (!updatedConfig.env) updatedConfig.env = {};\n\n for (const cred of missing) {\n const value = await smartInput.question(\n colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'),\n );\n if (value.trim()) {\n updatedConfig.env[cred.envVar] = value.trim();\n }\n }\n\n // Save updated config\n fs.writeFileSync(filePath, JSON.stringify({ [name]: updatedConfig }, null, 2));\n this.mcpRegistry.registerMcp(name, updatedConfig);\n\n // Retry connection\n w(`\\r\\n ${colorize('Reconectando ' + name + '...', 'muted')}\\r\\n`);\n const retryOk = await this.mcpRegistry.connectMcp(name);\n const retryIcon = retryOk ? colorize('●', 'success') : colorize('○', 'error');\n const retryStatus = retryOk ? colorize('conectado', 'success') : colorize('falhou — verifique a credencial', 'error');\n w(` ${retryIcon} ${colorize(name, 'cyan')} — ${retryStatus}\\r\\n\\r\\n`);\n } else {\n w(` ${colorize('Verifique se o servidor está disponível e tente novamente.', 'muted')}\\r\\n\\r\\n`);\n }\n }\n }\n }\n }\n\n const finalResults = await this.mcpRegistry.connectAll();\n const connected = [...finalResults.values()].filter(Boolean).length;\n w(` ${colorize(`${connected}/${finalResults.size} conectado(s)`, connected === finalResults.size ? 'success' : 'warning')}\\r\\n\\r\\n`);\n }\n\n private async listServers(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('MCP Servers', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n\\n');\n\n if (summaries.length === 0) {\n w(` ${colorize('Nenhum servidor MCP configurado', 'muted')}\\r\\n\\n`);\n w(` ${colorize('O que é MCP?', 'cyan')} → /mcp what\\r\\n`);\n w(` ${colorize('Como adicionar?', 'cyan')} → /mcp add\\r\\n\\n`);\n return;\n }\n\n for (const s of summaries) {\n const statusIcon = s.status === 'connected' ? colorize('●', 'success') : colorize('○', 'error');\n const statusText = s.status === 'connected' ? colorize('conectado', 'success') : colorize(s.status, 'error');\n \n w(` ${statusIcon} ${colorize(s.name, 'cyan')} ${colorize(`(${s.transport})`, 'muted')}\\r\\n`);\n w(` Status: ${statusText} | Ferramentas: ${s.toolCount}\\r\\n`);\n \n if (s.toolCount > 0) {\n const toolNames = s.toolDescriptions.slice(0, 3).map(t => t.name.split('_').pop()).join(', ');\n const more = s.toolCount > 3 ? ` +${s.toolCount - 3} mais` : '';\n w(` Tools: ${colorize(toolNames + more, 'muted')}\\r\\n`);\n }\n w('\\r\\n');\n }\n }\n\n private async listTools(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w('\\r\\n');\n w(colorize(Icons.tool + ' ', 'accent') + colorize(`MCP Tools (${totalTools})`, 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n');\n\n if (totalTools === 0) {\n w(`\\n ${colorize('Nenhuma ferramenta disponível', 'muted')}\\r\\n\\n`);\n return;\n }\n\n for (const server of summaries) {\n if (server.toolCount === 0) continue;\n \n w(`\\n ${colorize(server.name, 'bold')} ${colorize(`(${server.transport}, ${server.status})`, 'muted')}\\r\\n`);\n w(` ${colorize(Box.horizontal.repeat(30), 'subtle')}\\r\\n`);\n \n for (const td of server.toolDescriptions) {\n const shortName = td.name.replace(`${server.name}_`, '');\n w(` ${colorize('•', 'primary')} ${colorize(shortName, 'cyan')}\\r\\n`);\n const desc = td.description.length > 70 \n ? td.description.slice(0, 67) + '...' \n : td.description;\n w(` ${colorize(desc, 'muted')}\\r\\n`);\n }\n }\n w('\\r\\n');\n }\n\n private async addMcpWizard(smartInput: SmartInput): Promise<void> {\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n fs.mkdirSync(mcpDir, { recursive: true });\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Adicionar Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(30), 'subtle') + '\\r\\n\\r\\n');\n\n console.log(colorize('(pressione ESC para cancelar a qualquer momento)\\r\\n', 'muted'));\n\n const category = await selectWithEsc<McpCategory | 'custom'>({\n message: 'Escolha uma categoria:',\n choices: [\n { name: '🔧 Dev Tools (GitHub, Linear, Jira, Sentry, Docker)', value: 'dev' as McpCategory },\n { name: '🎨 Design (Figma)', value: 'design' as McpCategory },\n { name: '🗄️ Data (PostgreSQL, MongoDB, Redis, Supabase)', value: 'data' as McpCategory },\n { name: '🔍 Search (Brave, Exa, Perplexity, Context7)', value: 'search' as McpCategory },\n { name: '☁️ Cloud (Vercel, Cloudflare, AWS S3)', value: 'cloud' as McpCategory },\n { name: '📋 Productivity (Slack, Notion, Google Drive, Maps)', value: 'productivity' as McpCategory },\n { name: '💳 Payments (Stripe, Twilio)', value: 'payments' as McpCategory },\n { name: '🌐 Browser (Puppeteer)', value: 'browser' as McpCategory },\n { name: '📁 Filesystem', value: 'filesystem' as McpCategory },\n { name: '➕ Configuração manual', value: 'custom' },\n ],\n });\n\n if (category === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n let config: Record<string, any> = {};\n let name: string;\n\n if (category !== 'custom') {\n const templates = getTemplatesByCategory(category);\n const templateId = await selectWithEsc<string>({\n message: 'Escolha um servidor:',\n choices: templates.map(t => ({\n name: `${t.name} - ${t.description}`,\n value: t.id,\n })),\n });\n\n if (templateId === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n const template = getTemplate(templateId);\n if (!template) {\n w(colorize('\\r\\n ❌ Template não encontrado.\\r\\n\\r\\n', 'error'));\n return;\n }\n\n name = template.id;\n config = JSON.parse(JSON.stringify(template.config)); // Deep clone\n\n if (template.credentials.length > 0) {\n w(`\\r\\n${colorize('📝 Configuração:', 'bold')}\\r\\n`);\n\n for (const cred of template.credentials) {\n if (cred.isArg) {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n config.args.push(value.trim());\n }\n } else {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n if (!config.env) config.env = {};\n config.env[cred.envVar] = value.trim();\n }\n }\n }\n }\n\n const filePath = path.join(mcpDir, `${name}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name]: config }, null, 2));\n w(`\\r\\n${colorize('✓', 'success')} MCP configurado: ${colorize(filePath, 'accent')}\\r\\n`);\n\n if (name === 'figma') {\n w('\\r\\n');\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w(colorize(' Tutorial — Figma Desktop MCP\\r\\n', 'bold'));\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w('\\r\\n');\n w(colorize(' Passo 1: ', 'accent') + 'Instale o Figma Desktop\\r\\n');\n w(colorize(' https://www.figma.com/downloads/\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 2: ', 'accent') + 'Abra qualquer arquivo de Design no Figma\\r\\n');\n w('\\r\\n');\n w(colorize(' Passo 3: ', 'accent') + 'Ative o Dev Mode\\r\\n');\n w(colorize(' Clique no botão \"<>\" no canto superior direito\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 4: ', 'accent') + 'Habilite o servidor MCP\\r\\n');\n w(colorize(' Painel Inspect → seção MCP\\r\\n', 'muted'));\n w(colorize(' Ative \"Enable desktop MCP server\"\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 5: ', 'accent') + 'Conecte via Cast\\r\\n');\n w(colorize(' Reinicie o Cast e use /mcp → Conectar servidores\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w('\\r\\n');\n } else if (template.config.type === 'http') {\n w(colorize('\\r\\n ⚠️ Servidor HTTP/OAuth detectado!\\r\\n', 'warning'));\n w(colorize(' Autenticação pode ser necessária após conectar.\\r\\n\\r\\n', 'muted'));\n }\n\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n return;\n }\n\n const nameInput = await inputWithEsc({\n message: colorize(' Nome do servidor: ', 'cyan'),\n });\n if (nameInput === null || !nameInput.trim()) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n name = nameInput;\n\n const typeChoice = await smartInput.askChoice(' Tipo de transporte:', [\n { key: 'stdio', label: 'stdio', description: 'Processo local (npx, node, python)' },\n { key: 'http', label: 'http', description: 'Endpoint HTTP' },\n ]);\n\n config.type = typeChoice;\n\n if (typeChoice === 'stdio') {\n const command = await inputWithEsc({\n message: colorize(' Comando: ', 'cyan'),\n });\n if (command === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n const argsInput = await inputWithEsc({\n message: colorize(' Argumentos (separados por vírgula): ', 'cyan'),\n });\n if (argsInput === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n config.command = command.trim();\n config.args = argsInput.trim() ? argsInput.split(',').map((a: string) => a.trim()) : [];\n \n const hasEnv = await confirmWithEsc({ message: 'Precisa de variáveis de ambiente?', default: false });\n if (hasEnv === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (hasEnv) {\n config.env = {};\n while (true) {\n const key = await inputWithEsc({\n message: colorize(' Nome da variável (ou vazio para parar): ', 'cyan'),\n });\n if (key === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (!key) break;\n \n const value = await inputWithEsc({\n message: colorize(` Valor para ${key}: `, 'cyan'),\n });\n if (value === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.env[key] = value;\n }\n }\n } else {\n const endpoint = await inputWithEsc({\n message: colorize(' URL do endpoint: ', 'cyan'),\n });\n if (endpoint === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.endpoint = endpoint.trim();\n }\n\n const filePath = path.join(mcpDir, `${name.trim().toLowerCase()}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name.trim()]: config }, null, 2));\n\n w(`\\r\\n${colorize('✓', 'success')} Config salva: ${colorize(filePath, 'accent')}\\r\\n`);\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n }\n\n private async removeMcpWizard(smartInput: SmartInput): Promise<void> {\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const files = fs.readdirSync(mcpDir).filter((f: string) => f.endsWith('.json'));\n if (files.length === 0) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Remover Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(25), 'subtle') + '\\r\\n\\n');\n\n const toRemove = await select<string>({\n message: 'Qual servidor remover?',\n choices: files.map((f: string) => ({ \n name: f.replace('.json', ''), \n value: f \n })),\n });\n\n const confirmRemove = await confirm({\n message: `Tem certeza que deseja remover \"${toRemove.replace('.json', '')}\"?`,\n default: false,\n });\n\n if (confirmRemove) {\n fs.unlinkSync(path.join(mcpDir, toRemove));\n console.log(colorize(`\\n✓ Servidor removido\\n`, 'success'));\n }\n }\n\n private async testMcpTool(smartInput: SmartInput): Promise<void> {\n console.log(colorize('\\nEm breve!\\n', 'muted'));\n }\n\n private printWhatIsMcp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ O que é MCP?', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Model Context Protocol (MCP)', 'cyan')} é um protocolo aberto\\n`);\n w(`que permite que assistentes de IA se conectem a fontes de dados\\n`);\n w(`e ferramentas externas de forma padronizada.\\n\\n`);\n\n w(`${colorize('Como funciona:', 'bold')}\\n`);\n w(` ${colorize('1.', 'primary')} Um servidor MCP expõe ferramentas (tools)\\n`);\n w(` ${colorize('2.', 'primary')} O Cast se conecta a esse servidor\\n`);\n w(` ${colorize('3.', 'primary')} A IA pode chamar essas ferramentas automaticamente\\n\\n`);\n\n w(`${colorize('Exemplos de uso:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} GitHub: criar issues, ler PRs, fazer commits\\n`);\n w(` ${colorize('•', 'muted')} Filesystem: acessar arquivos fora do projeto\\n`);\n w(` ${colorize('•', 'muted')} PostgreSQL: consultar bancos de dados\\n`);\n w(` ${colorize('•', 'muted')} Brave: buscar informações atualizadas na web\\n\\n`);\n\n w(`${colorize('Vantagens:', 'bold')}\\n`);\n w(` ${colorize('✓', 'success')} Segurança: o usuário controla o acesso\\n`);\n w(` ${colorize('✓', 'success')} Flexibilidade: qualquer linguagem/framework\\n`);\n w(` ${colorize('✓', 'success')} Padrão aberto: não é vendor lock-in\\n\\n`);\n\n w(`${colorize('Quer criar seu próprio MCP?', 'accent')}\\n`);\n w(` → /mcp help (guia completo)\\n`);\n w(` → https://modelcontextprotocol.io\\n\\n`);\n }\n\n private printHowToCreate(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('🛠️ Como Criar um Servidor MCP', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Opção 1: TypeScript/JavaScript (mais fácil)', 'bold')}\\n\\n`);\n w(`${colorize('1.', 'primary')} Crie um projeto:\\n`);\n w(` ${colorize('mkdir meu-mcp && cd meu-mcp', 'muted')}\\n`);\n w(` ${colorize('npm init -y', 'muted')}\\n`);\n w(` ${colorize('npm install @modelcontextprotocol/sdk zod', 'muted')}\\n\\n`);\n\n w(`${colorize('2.', 'primary')} Crie o servidor (index.ts):\\n`);\n w(colorize(` import { Server } from '@modelcontextprotocol/sdk/server/index.js';\\n`, 'muted'));\n w(colorize(` import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const server = new Server(\\n`, 'muted'));\n w(colorize(` { name: 'meu-mcp', version: '1.0.0' },\\n`, 'muted'));\n w(colorize(` { capabilities: { tools: {} } }\\n`, 'muted'));\n w(colorize(` );\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(ListToolsRequestSchema, async () => ({\\n`, 'muted'));\n w(colorize(` tools: [{\\n`, 'muted'));\n w(colorize(` name: 'minha_tool',\\n`, 'muted'));\n w(colorize(` description: 'Faz algo útil',\\n`, 'muted'));\n w(colorize(` inputSchema: {\\n`, 'muted'));\n w(colorize(` type: 'object',\\n`, 'muted'));\n w(colorize(` properties: { nome: { type: 'string' } },\\n`, 'muted'));\n w(colorize(` required: ['nome']\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }]\\n`, 'muted'));\n w(colorize(` }));\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(CallToolRequestSchema, async (req) => {\\n`, 'muted'));\n w(colorize(` const args = req.params.arguments;\\n`, 'muted'));\n w(colorize(` return { content: [{ type: 'text', text: 'Resultado!' }] };\\n`, 'muted'));\n w(colorize(` });\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const transport = new StdioServerTransport();\\n`, 'muted'));\n w(colorize(` await server.connect(transport);\\n`, 'muted'));\n w(`\\n`);\n\n w(`${colorize('Opção 2: Python', 'bold')}\\n\\n`);\n w(` ${colorize('pip install mcp', 'muted')}\\n\\n`);\n w(` Veja: ${colorize('https://github.com/modelcontextprotocol/python-sdk', 'accent')}\\n\\n`);\n\n w(`${colorize('3.', 'primary')} Publique no npm (opcional):\\n`);\n w(` Outros poderão usar: ${colorize('npx -y seu-mcp-server', 'muted')}\\n\\n`);\n\n w(`${colorize('Recursos:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} Documentação: https://modelcontextprotocol.io\\n`);\n w(` ${colorize('•', 'muted')} SDK TypeScript: @modelcontextprotocol/sdk\\n`);\n w(` ${colorize('•', 'muted')} Exemplos: github.com/modelcontextprotocol/servers\\n\\n`);\n }\n\n private printMcpHelp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ MCP - Guia Rápido', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(40), 'subtle')}\\n\\n`);\n\n w(`${colorize('Comandos:', 'bold')}\\n`);\n w(` ${colorize('/mcp', 'cyan')} → Menu interativo\\n`);\n w(` ${colorize('/mcp list', 'cyan')} → Ver servidores\\n`);\n w(` ${colorize('/mcp tools', 'cyan')} → Ver ferramentas\\n`);\n w(` ${colorize('/mcp add', 'cyan')} → Adicionar servidor\\n`);\n w(` ${colorize('/mcp remove', 'cyan')} → Remover servidor\\n`);\n w(` ${colorize('/mcp what', 'cyan')} → O que é MCP?\\n\\n`);\n\n w(`${colorize('Servidores populares:', 'bold')}\\n`);\n w(` ${colorize('@modelcontextprotocol/server-github', 'muted')}\\n`);\n w(` Acesse repositórios, issues, PRs\\n\\n`);\n w(` ${colorize('@figma/mcp-server (HTTP)', 'muted')}\\n`);\n w(` Acesse designs e componentes (requer OAuth)\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-filesystem', 'muted')}\\n`);\n w(` Leia/escrita de arquivos locais\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-postgres', 'muted')}\\n`);\n w(` Consulte bancos PostgreSQL\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-brave-search', 'muted')}\\n`);\n w(` Busca na web via Brave\\n\\n`);\n\n w(`${colorize('Servidores HTTP (OAuth):', 'bold')}\\n`);\n w(` Alguns servidores como Figma usam HTTP + OAuth.\\n`);\n w(` Após adicionar, a autenticação será solicitada.\\n\\n`);\n\n w(`${colorize('Configuração manual:', 'bold')}\\n`);\n w(` Crie: ${colorize('.cast/mcp/nome.json', 'cyan')}\\n\\n`);\n w(colorize(` {\\n`, 'muted'));\n w(colorize(` \"meu-mcp\": {\\n`, 'muted'));\n w(colorize(` \"type\": \"stdio\",\\n`, 'muted'));\n w(colorize(` \"command\": \"npx\",\\n`, 'muted'));\n w(colorize(` \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\\n`, 'muted'));\n w(colorize(` \"env\": { \"GITHUB_TOKEN\": \"...\" }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(`\\n`);\n }\n}\n"],"names":["McpCommandsService","cmdMcp","args","smartInput","sub","showMcpMenu","error","CancelledPromptError","name","console","log","colorize","pause","listServers","listTools","addMcpWizard","removeMcpWizard","testMcpTool","printWhatIsMcp","printMcpHelp","resume","w","s","process","stdout","write","Box","horizontal","repeat","summaries","mcpRegistry","getServerSummaries","totalTools","reduce","sum","toolCount","length","action","withEsc","askChoice","key","label","description","connectServers","question","fn","Icons","cloud","results","connectAll","ok","entries","icon","status","config","getConfig","type","template","getTemplate","credentials","missing","filter","cred","isArg","env","envVar","mcpDir","path","join","cwd","filePath","updatedConfig","JSON","parse","stringify","value","placeholder","trim","fs","writeFileSync","registerMcp","retryOk","connectMcp","retryIcon","retryStatus","finalResults","connected","values","Boolean","size","statusIcon","statusText","transport","toolNames","toolDescriptions","slice","map","t","split","pop","more","tool","server","td","shortName","replace","desc","existsSync","mkdirSync","recursive","category","selectWithEsc","message","choices","templates","getTemplatesByCategory","templateId","id","required","push","nameInput","inputWithEsc","typeChoice","command","argsInput","a","hasEnv","confirmWithEsc","default","endpoint","toLowerCase","files","readdirSync","f","endsWith","toRemove","select","confirmRemove","confirm","unlinkSync","printHowToCreate","mcpClient"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/modules/repl/services/commands/mcp-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { Colors, colorize, Box, Icons } from '../../utils/theme';\nimport { McpRegistryService } from '../../../mcp/services/mcp-registry.service';\nimport { McpClientService } from '../../../mcp/services/mcp-client.service';\nimport {\n selectWithEsc,\n inputWithEsc,\n confirmWithEsc,\n CancelledPromptError,\n} from '../../utils/prompts-with-esc';\nimport { getAllTemplates, getTemplatesByCategory, getTemplate, McpCategory } from '../../../mcp/catalog/mcp-templates';\n\ninterface SmartInput {\n askChoice: (question: string, choices: { key: string; label: string; description: string }[]) => Promise<string>;\n question: (prompt: string) => Promise<string>;\n}\n\n@Injectable()\nexport class McpCommandsService {\n constructor(\n private readonly mcpRegistry: McpRegistryService,\n private readonly mcpClient: McpClientService,\n ) {}\n\n async cmdMcp(args: string[], smartInput: SmartInput & { pause: () => void; resume: () => void }): Promise<void> {\n const sub = args[0] || 'menu';\n\n if (sub === 'menu') {\n try {\n await this.showMcpMenu(smartInput);\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error?.name === 'CancelledPromptError') {\n console.log(colorize('\\n❌ Cancelado. Voltando ao chat...\\n', 'warning'));\n } else {\n throw error;\n }\n }\n return;\n }\n\n smartInput.pause();\n try {\n switch (sub) {\n case 'list':\n await this.listServers();\n break;\n case 'tools':\n await this.listTools();\n break;\n case 'add':\n await this.addMcpWizard(smartInput);\n break;\n case 'remove':\n await this.removeMcpWizard(smartInput);\n break;\n case 'test':\n await this.testMcpTool(smartInput);\n break;\n case 'what':\n case 'about':\n this.printWhatIsMcp();\n break;\n case 'help':\n default:\n this.printMcpHelp();\n break;\n }\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error?.name === 'CancelledPromptError') {\n console.log(colorize('\\n❌ Cancelado. Voltando ao chat...\\n', 'warning'));\n return;\n }\n throw error;\n } finally {\n smartInput.resume();\n }\n }\n\n private async showMcpMenu(smartInput: SmartInput): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n\n while (true) {\n w(`\\n${colorize('☁️ MCP Hub', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(30), 'subtle')}\\n\\n`);\n\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w(`${colorize('Servidores:', 'muted')} ${summaries.length} `);\n w(`${colorize('Ferramentas:', 'muted')} ${totalTools}\\n\\n`);\n\n console.log(colorize('(pressione ESC para voltar ao chat)\\n', 'muted'));\n\n const action = await this.withEsc(() => smartInput.askChoice('O que deseja fazer?', [\n { key: '1', label: 'Ver servidores', description: 'Listar MCPs configurados' },\n { key: '2', label: 'Ver ferramentas', description: 'Todas as tools disponíveis' },\n { key: '3', label: 'Conectar servidores', description: 'Conectar/reconectar MCPs configurados' },\n { key: '4', label: 'Adicionar servidor', description: 'Configurar novo MCP' },\n { key: '5', label: 'Remover servidor', description: 'Desconectar MCP' },\n { key: '6', label: 'O que é MCP?', description: 'Entenda o protocolo' },\n { key: 'q', label: 'Voltar', description: 'Sair do MCP Hub' },\n ]));\n\n if (action === null) {\n console.log(colorize('\\nSaindo do MCP Hub...\\n', 'muted'));\n return;\n }\n\n let pause = true;\n switch (action) {\n case '1':\n await this.listServers();\n break;\n case '2':\n await this.listTools();\n break;\n case '3':\n await this.connectServers(smartInput as any);\n break;\n case '4':\n await this.addMcpWizard(smartInput);\n pause = false;\n break;\n case '5':\n await this.removeMcpWizard(smartInput);\n pause = false;\n break;\n case '6':\n this.printWhatIsMcp();\n break;\n case 'q':\n return;\n }\n\n if (pause) {\n await smartInput.question(colorize('\\nEnter para continuar...', 'muted'));\n }\n }\n }\n\n private async withEsc<T>(fn: () => Promise<T>): Promise<T | null> {\n try {\n return await fn();\n } catch (error: any) {\n if (error instanceof CancelledPromptError || error.name === 'CancelledPromptError') {\n return null;\n }\n throw error;\n }\n }\n\n private async connectServers(smartInput?: SmartInput & { pause: () => void; resume: () => void }): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Conectar Servidores MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n\\n');\n\n if (summaries.length === 0) {\n w(` ${colorize('Nenhum servidor configurado. Use a opção Adicionar servidor.', 'muted')}\\r\\n\\n`);\n return;\n }\n\n w(` ${colorize('Conectando ' + summaries.length + ' servidor(es)...', 'muted')}\\r\\n\\n`);\n\n const results = await this.mcpRegistry.connectAll();\n\n for (const [name, ok] of results.entries()) {\n const icon = ok ? colorize('●', 'success') : colorize('○', 'error');\n const status = ok ? colorize('conectado', 'success') : colorize('falhou', 'error');\n w(` ${icon} ${colorize(name, 'cyan')} — ${status}\\r\\n`);\n\n if (!ok) {\n const config = this.mcpRegistry.getConfig(name);\n\n if (config?.type === 'http') {\n w(`\\r\\n ${colorize('⚠️ ' + name + ': OAuth bloqueado pelo servidor', 'warning')}\\r\\n`);\n w(` Este servidor só aceita clientes pré-aprovados (ex: VS Code, Cursor).\\r\\n`);\n w(` Alternativa: use o proxy mcp-remote para redirecionar via cliente aprovado.\\r\\n\\r\\n`);\n\n } else if (config?.type === 'stdio' && smartInput) {\n const template = getTemplate(name);\n if (template?.credentials?.length) {\n const missing = template.credentials.filter(cred => {\n if (cred.isArg) return false; \n return !config.env?.[cred.envVar];\n });\n\n if (missing.length > 0) {\n w(`\\r\\n ${colorize('🔑 Credenciais necessárias para ' + name, 'warning')}\\r\\n\\r\\n`);\n\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n const filePath = path.join(mcpDir, `${name}.json`);\n const updatedConfig = JSON.parse(JSON.stringify(config));\n if (!updatedConfig.env) updatedConfig.env = {};\n\n for (const cred of missing) {\n const value = await smartInput.question(\n colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'),\n );\n if (value.trim()) {\n updatedConfig.env[cred.envVar] = value.trim();\n }\n }\n\n fs.writeFileSync(filePath, JSON.stringify({ [name]: updatedConfig }, null, 2));\n this.mcpRegistry.registerMcp(name, updatedConfig);\n\n w(`\\r\\n ${colorize('Reconectando ' + name + '...', 'muted')}\\r\\n`);\n const retryOk = await this.mcpRegistry.connectMcp(name);\n const retryIcon = retryOk ? colorize('●', 'success') : colorize('○', 'error');\n const retryStatus = retryOk ? colorize('conectado', 'success') : colorize('falhou — verifique a credencial', 'error');\n w(` ${retryIcon} ${colorize(name, 'cyan')} — ${retryStatus}\\r\\n\\r\\n`);\n } else {\n w(` ${colorize('Verifique se o servidor está disponível e tente novamente.', 'muted')}\\r\\n\\r\\n`);\n }\n }\n }\n }\n }\n\n const finalResults = await this.mcpRegistry.connectAll();\n const connected = [...finalResults.values()].filter(Boolean).length;\n w(` ${colorize(`${connected}/${finalResults.size} conectado(s)`, connected === finalResults.size ? 'success' : 'warning')}\\r\\n\\r\\n`);\n }\n\n private async listServers(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('MCP Servers', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n\\n');\n\n if (summaries.length === 0) {\n w(` ${colorize('Nenhum servidor MCP configurado', 'muted')}\\r\\n\\n`);\n w(` ${colorize('O que é MCP?', 'cyan')} → /mcp what\\r\\n`);\n w(` ${colorize('Como adicionar?', 'cyan')} → /mcp add\\r\\n\\n`);\n return;\n }\n\n for (const s of summaries) {\n const statusIcon = s.status === 'connected' ? colorize('●', 'success') : colorize('○', 'error');\n const statusText = s.status === 'connected' ? colorize('conectado', 'success') : colorize(s.status, 'error');\n \n w(` ${statusIcon} ${colorize(s.name, 'cyan')} ${colorize(`(${s.transport})`, 'muted')}\\r\\n`);\n w(` Status: ${statusText} | Ferramentas: ${s.toolCount}\\r\\n`);\n \n if (s.toolCount > 0) {\n const toolNames = s.toolDescriptions.slice(0, 3).map(t => t.name.split('_').pop()).join(', ');\n const more = s.toolCount > 3 ? ` +${s.toolCount - 3} mais` : '';\n w(` Tools: ${colorize(toolNames + more, 'muted')}\\r\\n`);\n }\n w('\\r\\n');\n }\n }\n\n private async listTools(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const summaries = this.mcpRegistry.getServerSummaries();\n const totalTools = summaries.reduce((sum, s) => sum + s.toolCount, 0);\n\n w('\\r\\n');\n w(colorize(Icons.tool + ' ', 'accent') + colorize(`MCP Tools (${totalTools})`, 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(40), 'subtle') + '\\r\\n');\n\n if (totalTools === 0) {\n w(`\\n ${colorize('Nenhuma ferramenta disponível', 'muted')}\\r\\n\\n`);\n return;\n }\n\n for (const server of summaries) {\n if (server.toolCount === 0) continue;\n \n w(`\\n ${colorize(server.name, 'bold')} ${colorize(`(${server.transport}, ${server.status})`, 'muted')}\\r\\n`);\n w(` ${colorize(Box.horizontal.repeat(30), 'subtle')}\\r\\n`);\n \n for (const td of server.toolDescriptions) {\n const shortName = td.name.replace(`${server.name}_`, '');\n w(` ${colorize('•', 'primary')} ${colorize(shortName, 'cyan')}\\r\\n`);\n const desc = td.description.length > 70 \n ? td.description.slice(0, 67) + '...' \n : td.description;\n w(` ${colorize(desc, 'muted')}\\r\\n`);\n }\n }\n w('\\r\\n');\n }\n\n private async addMcpWizard(smartInput: SmartInput): Promise<void> {\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n fs.mkdirSync(mcpDir, { recursive: true });\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Adicionar Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(30), 'subtle') + '\\r\\n\\r\\n');\n\n console.log(colorize('(pressione ESC para cancelar a qualquer momento)\\r\\n', 'muted'));\n\n const category = await selectWithEsc<McpCategory | 'custom'>({\n message: 'Escolha uma categoria:',\n choices: [\n { name: '🔧 Dev Tools (GitHub, Linear, Jira, Sentry, Docker)', value: 'dev' as McpCategory },\n { name: '🎨 Design (Figma)', value: 'design' as McpCategory },\n { name: '🗄️ Data (PostgreSQL, MongoDB, Redis, Supabase)', value: 'data' as McpCategory },\n { name: '🔍 Search (Brave, Exa, Perplexity, Context7)', value: 'search' as McpCategory },\n { name: '☁️ Cloud (Vercel, Cloudflare, AWS S3)', value: 'cloud' as McpCategory },\n { name: '📋 Productivity (Slack, Notion, Google Drive, Maps)', value: 'productivity' as McpCategory },\n { name: '💳 Payments (Stripe, Twilio)', value: 'payments' as McpCategory },\n { name: '🌐 Browser (Puppeteer)', value: 'browser' as McpCategory },\n { name: '📁 Filesystem', value: 'filesystem' as McpCategory },\n { name: '➕ Configuração manual', value: 'custom' },\n ],\n });\n\n if (category === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n let config: Record<string, any> = {};\n let name: string;\n\n if (category !== 'custom') {\n const templates = getTemplatesByCategory(category);\n const templateId = await selectWithEsc<string>({\n message: 'Escolha um servidor:',\n choices: templates.map(t => ({\n name: `${t.name} - ${t.description}`,\n value: t.id,\n })),\n });\n\n if (templateId === null) {\n w(colorize('\\r\\n ❌ Cancelado.\\r\\n\\r\\n', 'warning'));\n return;\n }\n\n const template = getTemplate(templateId);\n if (!template) {\n w(colorize('\\r\\n ❌ Template não encontrado.\\r\\n\\r\\n', 'error'));\n return;\n }\n\n name = template.id;\n config = JSON.parse(JSON.stringify(template.config)); // Deep clone\n\n if (template.credentials.length > 0) {\n w(`\\r\\n${colorize('📝 Configuração:', 'bold')}\\r\\n`);\n\n for (const cred of template.credentials) {\n if (cred.isArg) {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n config.args.push(value.trim());\n }\n } else {\n const value = await smartInput.question(colorize(` ${cred.name} (${cred.placeholder}): `, 'cyan'));\n if (!value.trim() && cred.required) {\n w(colorize('\\r\\n ❌ Campo obrigatório!\\r\\n\\r\\n', 'error'));\n return;\n }\n if (value.trim()) {\n if (!config.env) config.env = {};\n config.env[cred.envVar] = value.trim();\n }\n }\n }\n }\n\n const filePath = path.join(mcpDir, `${name}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name]: config }, null, 2));\n w(`\\r\\n${colorize('✓', 'success')} MCP configurado: ${colorize(filePath, 'accent')}\\r\\n`);\n\n if (name === 'figma') {\n w('\\r\\n');\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w(colorize(' Tutorial — Figma Desktop MCP\\r\\n', 'bold'));\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w('\\r\\n');\n w(colorize(' Passo 1: ', 'accent') + 'Instale o Figma Desktop\\r\\n');\n w(colorize(' https://www.figma.com/downloads/\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 2: ', 'accent') + 'Abra qualquer arquivo de Design no Figma\\r\\n');\n w('\\r\\n');\n w(colorize(' Passo 3: ', 'accent') + 'Ative o Dev Mode\\r\\n');\n w(colorize(' Clique no botão \"<>\" no canto superior direito\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 4: ', 'accent') + 'Habilite o servidor MCP\\r\\n');\n w(colorize(' Painel Inspect → seção MCP\\r\\n', 'muted'));\n w(colorize(' Ative \"Enable desktop MCP server\"\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' Passo 5: ', 'accent') + 'Conecte via Cast\\r\\n');\n w(colorize(' Reinicie o Cast e use /mcp → Conectar servidores\\r\\n', 'muted'));\n w('\\r\\n');\n w(colorize(' ─────────────────────────────────────────\\r\\n', 'subtle'));\n w('\\r\\n');\n } else if (template.config.type === 'http') {\n w(colorize('\\r\\n ⚠️ Servidor HTTP/OAuth detectado!\\r\\n', 'warning'));\n w(colorize(' Autenticação pode ser necessária após conectar.\\r\\n\\r\\n', 'muted'));\n }\n\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n return;\n }\n\n const nameInput = await inputWithEsc({\n message: colorize(' Nome do servidor: ', 'cyan'),\n });\n if (nameInput === null || !nameInput.trim()) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n name = nameInput;\n\n const typeChoice = await smartInput.askChoice(' Tipo de transporte:', [\n { key: 'stdio', label: 'stdio', description: 'Processo local (npx, node, python)' },\n { key: 'http', label: 'http', description: 'Endpoint HTTP' },\n ]);\n\n config.type = typeChoice;\n\n if (typeChoice === 'stdio') {\n const command = await inputWithEsc({\n message: colorize(' Comando: ', 'cyan'),\n });\n if (command === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n const argsInput = await inputWithEsc({\n message: colorize(' Argumentos (separados por vírgula): ', 'cyan'),\n });\n if (argsInput === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n \n config.command = command.trim();\n config.args = argsInput.trim() ? argsInput.split(',').map((a: string) => a.trim()) : [];\n \n const hasEnv = await confirmWithEsc({ message: 'Precisa de variáveis de ambiente?', default: false });\n if (hasEnv === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (hasEnv) {\n config.env = {};\n while (true) {\n const key = await inputWithEsc({\n message: colorize(' Nome da variável (ou vazio para parar): ', 'cyan'),\n });\n if (key === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n if (!key) break;\n \n const value = await inputWithEsc({\n message: colorize(` Valor para ${key}: `, 'cyan'),\n });\n if (value === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.env[key] = value;\n }\n }\n } else {\n const endpoint = await inputWithEsc({\n message: colorize(' URL do endpoint: ', 'cyan'),\n });\n if (endpoint === null) {\n w(colorize('\\r\\n ❌ Cancelado\\r\\n', 'muted'));\n return;\n }\n config.endpoint = endpoint.trim();\n }\n\n const filePath = path.join(mcpDir, `${name.trim().toLowerCase()}.json`);\n fs.writeFileSync(filePath, JSON.stringify({ [name.trim()]: config }, null, 2));\n\n w(`\\r\\n${colorize('✓', 'success')} Config salva: ${colorize(filePath, 'accent')}\\r\\n`);\n w(colorize(' Reinicie o Cast para conectar\\r\\n\\r\\n', 'muted'));\n }\n\n private async removeMcpWizard(smartInput: SmartInput): Promise<void> {\n const mcpDir = path.join(process.cwd(), '.cast', 'mcp');\n\n if (!fs.existsSync(mcpDir)) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const files = fs.readdirSync(mcpDir).filter((f: string) => f.endsWith('.json'));\n if (files.length === 0) {\n console.log(colorize('\\nNenhum MCP configurado\\n', 'muted'));\n return;\n }\n\n const w = (s: string) => process.stdout.write(s);\n w('\\r\\n');\n w(colorize(Icons.cloud + ' ', 'accent') + colorize('Remover Servidor MCP', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(25), 'subtle') + '\\r\\n\\n');\n\n const toRemove = await select<string>({\n message: 'Qual servidor remover?',\n choices: files.map((f: string) => ({ \n name: f.replace('.json', ''), \n value: f \n })),\n });\n\n const confirmRemove = await confirm({\n message: `Tem certeza que deseja remover \"${toRemove.replace('.json', '')}\"?`,\n default: false,\n });\n\n if (confirmRemove) {\n fs.unlinkSync(path.join(mcpDir, toRemove));\n console.log(colorize(`\\n✓ Servidor removido\\n`, 'success'));\n }\n }\n\n private async testMcpTool(smartInput: SmartInput): Promise<void> {\n console.log(colorize('\\nEm breve!\\n', 'muted'));\n }\n\n private printWhatIsMcp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ O que é MCP?', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Model Context Protocol (MCP)', 'cyan')} é um protocolo aberto\\n`);\n w(`que permite que assistentes de IA se conectem a fontes de dados\\n`);\n w(`e ferramentas externas de forma padronizada.\\n\\n`);\n\n w(`${colorize('Como funciona:', 'bold')}\\n`);\n w(` ${colorize('1.', 'primary')} Um servidor MCP expõe ferramentas (tools)\\n`);\n w(` ${colorize('2.', 'primary')} O Cast se conecta a esse servidor\\n`);\n w(` ${colorize('3.', 'primary')} A IA pode chamar essas ferramentas automaticamente\\n\\n`);\n\n w(`${colorize('Exemplos de uso:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} GitHub: criar issues, ler PRs, fazer commits\\n`);\n w(` ${colorize('•', 'muted')} Filesystem: acessar arquivos fora do projeto\\n`);\n w(` ${colorize('•', 'muted')} PostgreSQL: consultar bancos de dados\\n`);\n w(` ${colorize('•', 'muted')} Brave: buscar informações atualizadas na web\\n\\n`);\n\n w(`${colorize('Vantagens:', 'bold')}\\n`);\n w(` ${colorize('✓', 'success')} Segurança: o usuário controla o acesso\\n`);\n w(` ${colorize('✓', 'success')} Flexibilidade: qualquer linguagem/framework\\n`);\n w(` ${colorize('✓', 'success')} Padrão aberto: não é vendor lock-in\\n\\n`);\n\n w(`${colorize('Quer criar seu próprio MCP?', 'accent')}\\n`);\n w(` → /mcp help (guia completo)\\n`);\n w(` → https://modelcontextprotocol.io\\n\\n`);\n }\n\n private printHowToCreate(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('🛠️ Como Criar um Servidor MCP', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(50), 'subtle')}\\n\\n`);\n\n w(`${colorize('Opção 1: TypeScript/JavaScript (mais fácil)', 'bold')}\\n\\n`);\n w(`${colorize('1.', 'primary')} Crie um projeto:\\n`);\n w(` ${colorize('mkdir meu-mcp && cd meu-mcp', 'muted')}\\n`);\n w(` ${colorize('npm init -y', 'muted')}\\n`);\n w(` ${colorize('npm install @modelcontextprotocol/sdk zod', 'muted')}\\n\\n`);\n\n w(`${colorize('2.', 'primary')} Crie o servidor (index.ts):\\n`);\n w(colorize(` import { Server } from '@modelcontextprotocol/sdk/server/index.js';\\n`, 'muted'));\n w(colorize(` import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const server = new Server(\\n`, 'muted'));\n w(colorize(` { name: 'meu-mcp', version: '1.0.0' },\\n`, 'muted'));\n w(colorize(` { capabilities: { tools: {} } }\\n`, 'muted'));\n w(colorize(` );\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(ListToolsRequestSchema, async () => ({\\n`, 'muted'));\n w(colorize(` tools: [{\\n`, 'muted'));\n w(colorize(` name: 'minha_tool',\\n`, 'muted'));\n w(colorize(` description: 'Faz algo útil',\\n`, 'muted'));\n w(colorize(` inputSchema: {\\n`, 'muted'));\n w(colorize(` type: 'object',\\n`, 'muted'));\n w(colorize(` properties: { nome: { type: 'string' } },\\n`, 'muted'));\n w(colorize(` required: ['nome']\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }]\\n`, 'muted'));\n w(colorize(` }));\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` server.setRequestHandler(CallToolRequestSchema, async (req) => {\\n`, 'muted'));\n w(colorize(` const args = req.params.arguments;\\n`, 'muted'));\n w(colorize(` return { content: [{ type: 'text', text: 'Resultado!' }] };\\n`, 'muted'));\n w(colorize(` });\\n`, 'muted'));\n w(colorize(`\\n`, 'muted'));\n w(colorize(` const transport = new StdioServerTransport();\\n`, 'muted'));\n w(colorize(` await server.connect(transport);\\n`, 'muted'));\n w(`\\n`);\n\n w(`${colorize('Opção 2: Python', 'bold')}\\n\\n`);\n w(` ${colorize('pip install mcp', 'muted')}\\n\\n`);\n w(` Veja: ${colorize('https://github.com/modelcontextprotocol/python-sdk', 'accent')}\\n\\n`);\n\n w(`${colorize('3.', 'primary')} Publique no npm (opcional):\\n`);\n w(` Outros poderão usar: ${colorize('npx -y seu-mcp-server', 'muted')}\\n\\n`);\n\n w(`${colorize('Recursos:', 'bold')}\\n`);\n w(` ${colorize('•', 'muted')} Documentação: https://modelcontextprotocol.io\\n`);\n w(` ${colorize('•', 'muted')} SDK TypeScript: @modelcontextprotocol/sdk\\n`);\n w(` ${colorize('•', 'muted')} Exemplos: github.com/modelcontextprotocol/servers\\n\\n`);\n }\n\n private printMcpHelp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w(`\\n${colorize('☁️ MCP - Guia Rápido', 'bold')}\\n`);\n w(`${colorize(Box.horizontal.repeat(40), 'subtle')}\\n\\n`);\n\n w(`${colorize('Comandos:', 'bold')}\\n`);\n w(` ${colorize('/mcp', 'cyan')} → Menu interativo\\n`);\n w(` ${colorize('/mcp list', 'cyan')} → Ver servidores\\n`);\n w(` ${colorize('/mcp tools', 'cyan')} → Ver ferramentas\\n`);\n w(` ${colorize('/mcp add', 'cyan')} → Adicionar servidor\\n`);\n w(` ${colorize('/mcp remove', 'cyan')} → Remover servidor\\n`);\n w(` ${colorize('/mcp what', 'cyan')} → O que é MCP?\\n\\n`);\n\n w(`${colorize('Servidores populares:', 'bold')}\\n`);\n w(` ${colorize('@modelcontextprotocol/server-github', 'muted')}\\n`);\n w(` Acesse repositórios, issues, PRs\\n\\n`);\n w(` ${colorize('@figma/mcp-server (HTTP)', 'muted')}\\n`);\n w(` Acesse designs e componentes (requer OAuth)\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-filesystem', 'muted')}\\n`);\n w(` Leia/escrita de arquivos locais\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-postgres', 'muted')}\\n`);\n w(` Consulte bancos PostgreSQL\\n\\n`);\n w(` ${colorize('@modelcontextprotocol/server-brave-search', 'muted')}\\n`);\n w(` Busca na web via Brave\\n\\n`);\n\n w(`${colorize('Servidores HTTP (OAuth):', 'bold')}\\n`);\n w(` Alguns servidores como Figma usam HTTP + OAuth.\\n`);\n w(` Após adicionar, a autenticação será solicitada.\\n\\n`);\n\n w(`${colorize('Configuração manual:', 'bold')}\\n`);\n w(` Crie: ${colorize('.cast/mcp/nome.json', 'cyan')}\\n\\n`);\n w(colorize(` {\\n`, 'muted'));\n w(colorize(` \"meu-mcp\": {\\n`, 'muted'));\n w(colorize(` \"type\": \"stdio\",\\n`, 'muted'));\n w(colorize(` \"command\": \"npx\",\\n`, 'muted'));\n w(colorize(` \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\\n`, 'muted'));\n w(colorize(` \"env\": { \"GITHUB_TOKEN\": \"...\" }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(colorize(` }\\n`, 'muted'));\n w(`\\n`);\n }\n}\n"],"names":["McpCommandsService","cmdMcp","args","smartInput","sub","showMcpMenu","error","CancelledPromptError","name","console","log","colorize","pause","listServers","listTools","addMcpWizard","removeMcpWizard","testMcpTool","printWhatIsMcp","printMcpHelp","resume","w","s","process","stdout","write","Box","horizontal","repeat","summaries","mcpRegistry","getServerSummaries","totalTools","reduce","sum","toolCount","length","action","withEsc","askChoice","key","label","description","connectServers","question","fn","Icons","cloud","results","connectAll","ok","entries","icon","status","config","getConfig","type","template","getTemplate","credentials","missing","filter","cred","isArg","env","envVar","mcpDir","path","join","cwd","filePath","updatedConfig","JSON","parse","stringify","value","placeholder","trim","fs","writeFileSync","registerMcp","retryOk","connectMcp","retryIcon","retryStatus","finalResults","connected","values","Boolean","size","statusIcon","statusText","transport","toolNames","toolDescriptions","slice","map","t","split","pop","more","tool","server","td","shortName","replace","desc","existsSync","mkdirSync","recursive","category","selectWithEsc","message","choices","templates","getTemplatesByCategory","templateId","id","required","push","nameInput","inputWithEsc","typeChoice","command","argsInput","a","hasEnv","confirmWithEsc","default","endpoint","toLowerCase","files","readdirSync","f","endsWith","toRemove","select","confirmRemove","confirm","unlinkSync","printHowToCreate","mcpClient"],"mappings":"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"}
@@ -321,6 +321,8 @@ let ReplService = class ReplService {
321
321
  break;
322
322
  case 'config':
323
323
  await this.configCommands.handleConfigCommand(args, this.smartInput);
324
+ await this.configManager.loadConfig();
325
+ await this.deepAgent.reinitializeModel();
324
326
  break;
325
327
  case 'model':
326
328
  this.replCommands.cmdModel(args);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/repl/services/repl.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { DeepAgentService } from '../../core/services/deep-agent.service';\nimport { ConfigService } from '../../../common/services/config.service';\nimport { ConfigManagerService } from '../../config/services/config-manager.service';\nimport { MentionsService } from '../../mentions/services/mentions.service';\nimport { McpRegistryService } from '../../mcp/services/mcp-registry.service';\nimport { AgentRegistryService } from '../../agents/services/agent-registry.service';\nimport { SkillRegistryService } from '../../skills/services/skill-registry.service';\nimport { PlanModeService } from '../../core/services/plan-mode.service';\nimport { SmartInput } from './smart-input';\nimport { WelcomeScreenService } from './welcome-screen.service';\nimport { ReplCommandsService } from './commands/repl-commands.service';\nimport { GitCommandsService } from './commands/git-commands.service';\nimport { AgentCommandsService } from './commands/agent-commands.service';\nimport { McpCommandsService } from './commands/mcp-commands.service';\nimport { ConfigCommandsService } from '../../config/services/config-commands.service';\nimport { ProjectCommandsService } from './commands/project-commands.service';\nimport { ToolsRegistryService } from '../../tools/services/tools-registry.service';\nimport { Colors, Icons } from '../utils/theme';\n\n@Injectable()\nexport class ReplService {\n private smartInput: SmartInput | null = null;\n private abortController: AbortController | null = null;\n private isProcessing = false;\n private spinnerTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private readonly deepAgent: DeepAgentService,\n private readonly configService: ConfigService,\n private readonly configManager: ConfigManagerService,\n private readonly mentionsService: MentionsService,\n private readonly mcpRegistry: McpRegistryService,\n private readonly agentRegistry: AgentRegistryService,\n private readonly skillRegistry: SkillRegistryService,\n private readonly welcomeScreen: WelcomeScreenService,\n private readonly planMode: PlanModeService,\n private readonly replCommands: ReplCommandsService,\n private readonly gitCommands: GitCommandsService,\n private readonly agentCommands: AgentCommandsService,\n private readonly mcpCommands: McpCommandsService,\n private readonly configCommands: ConfigCommandsService,\n private readonly projectCommands: ProjectCommandsService,\n private readonly toolsRegistry: ToolsRegistryService,\n ) {}\n\n async start(): Promise<void> {\n const initResult = await this.deepAgent.initialize();\n const agentCount = this.agentRegistry.resolveAllAgents().length;\n\n this.welcomeScreen.printWelcomeScreen({\n projectPath: initResult.projectPath || undefined,\n model: this.getModelDisplayName(),\n toolCount: initResult.toolCount,\n agentCount,\n });\n\n this.smartInput = new SmartInput({\n prompt: `${Colors.cyan}${Colors.bold}>${Colors.reset} `,\n promptVisibleLen: 2,\n getCommandSuggestions: (input) => this.getCommandSuggestions(input),\n getMentionSuggestions: (partial) => this.getMentionSuggestions(partial),\n onSubmit: (line) => this.handleLine(line),\n onCancel: () => this.handleCancel(),\n onExit: () => this.handleExit(),\n });\n\n this.smartInput.start();\n }\n\n private getCommandSuggestions(input: string): Array<{ text: string; display: string; description: string }> {\n const commands = [\n { text: '/help', display: '/help', description: 'Show help' },\n { text: '/clear', display: '/clear', description: 'Clear conversation' },\n { text: '/compact', display: '/compact', description: 'Compact history' },\n { text: '/exit', display: '/exit', description: 'Exit' },\n { text: '/status', display: '/status', description: 'Git status' },\n { text: '/diff', display: '/diff', description: 'Git diff' },\n { text: '/log', display: '/log', description: 'Git log' },\n { text: '/commit', display: '/commit', description: 'Commit changes' },\n { text: '/up', display: '/up', description: 'Smart commit & push' },\n { text: '/split-up', display: '/split-up', description: 'Split commits' },\n { text: '/pr', display: '/pr', description: 'Create Pull Request' },\n { text: '/review', display: '/review', description: 'Code review' },\n { text: '/fix', display: '/fix', description: 'Auto-fix code' },\n { text: '/ident', display: '/ident', description: 'Format code' },\n { text: '/release', display: '/release', description: 'Release notes' },\n { text: '/tools', display: '/tools', description: 'List tools' },\n { text: '/agents', display: '/agents', description: 'List agents' },\n { text: '/skills', display: '/skills', description: 'List skills' },\n { text: '/context', display: '/context', description: 'Session info' },\n { text: '/mentions', display: '/mentions', description: 'Mentions help' },\n { text: '/model', display: '/model', description: 'Show model' },\n { text: '/config', display: '/config', description: 'Configuration' },\n { text: '/project', display: '/project', description: 'Project context' },\n { text: '/project-deep', display: '/project-deep', description: 'Deep project analysis' },\n { text: '/init', display: '/init', description: 'Analyze project and generate context' },\n { text: '/mcp', display: '/mcp', description: 'MCP servers' },\n ];\n\n return commands.filter(c => c.text.startsWith(input));\n }\n\n private getMentionSuggestions(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n const gitOpts = [\n { text: '@git:status', display: '@git:status', description: 'Git status' },\n { text: '@git:diff', display: '@git:diff', description: 'Git diff' },\n { text: '@git:log', display: '@git:log', description: 'Git log' },\n { text: '@git:branch', display: '@git:branch', description: 'Branches' },\n ];\n\n if (partial === '') return [...gitOpts, ...this.getFileEntries('')];\n if (partial.startsWith('git:')) return gitOpts.filter(o => o.text.startsWith('@' + partial));\n\n return [...gitOpts.filter(o => o.text.startsWith('@' + partial)), ...this.getFileEntries(partial)].slice(0, 30);\n }\n\n private getFileEntries(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n try {\n let dir: string;\n let prefix: string;\n\n if (partial.endsWith('/')) {\n dir = partial.slice(0, -1) || '.';\n prefix = '';\n } else if (partial.includes('/')) {\n dir = path.dirname(partial);\n prefix = path.basename(partial);\n } else {\n dir = '.';\n prefix = partial;\n }\n\n const resolved = path.resolve(process.cwd(), dir);\n if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) return [];\n\n const entries = fs.readdirSync(resolved, { withFileTypes: true });\n const ignore = ['node_modules', '.git', 'dist', 'coverage', '.next', '__pycache__'];\n\n return entries\n .filter(e => !ignore.includes(e.name))\n .filter(e => !e.name.startsWith('.') || prefix.startsWith('.'))\n .filter(e => prefix === '' || e.name.toLowerCase().startsWith(prefix.toLowerCase()))\n .map(e => {\n const relDir = dir === '.' ? '' : dir + '/';\n const isDir = e.isDirectory();\n return {\n text: '@' + relDir + e.name + (isDir ? '/' : ''),\n display: '@' + relDir + e.name + (isDir ? '/' : ''),\n description: isDir ? 'dir' : '',\n };\n })\n .slice(0, 20);\n } catch {\n return [];\n }\n }\n\n private handleCancel(): void {\n if (this.isProcessing && this.abortController) {\n this.abortController.abort();\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.yellow} Cancelled${Colors.reset}\\r\\n\\r\\n`);\n this.isProcessing = false;\n } else {\n process.stdout.write(`${Colors.dim} (Use /exit to quit)${Colors.reset}\\r\\n`);\n this.smartInput?.showPrompt();\n }\n }\n\n private handleExit(): void {\n process.stdout.write(`${Colors.dim} Goodbye!${Colors.reset}\\r\\n`);\n this.stop();\n process.exit(0);\n }\n\n private async handleLine(input: string): Promise<void> {\n const trimmed = input.trim();\n\n if (!trimmed) {\n this.smartInput?.showPrompt();\n return;\n }\n\n if (trimmed.startsWith('/')) {\n await this.handleCommand(trimmed);\n } else {\n await this.handleMessage(trimmed);\n }\n\n this.smartInput?.showPrompt();\n }\n\n private async handleCommand(command: string): Promise<void> {\n const parts = command.slice(1).split(/\\s+/);\n const cmd = parts[0].toLowerCase();\n const args = parts.slice(1);\n\n switch (cmd) {\n case 'help': this.replCommands.printHelp(); break;\n case 'clear': this.replCommands.cmdClear(this.welcomeScreen); break;\n case 'exit':\n case 'quit': this.handleExit(); return;\n case 'compact': await this.handleCompact(); break;\n case 'context': this.replCommands.cmdContext(); break;\n case 'config': \n await this.configCommands.handleConfigCommand(args, this.smartInput!); \n break;\n case 'model': this.replCommands.cmdModel(args); break;\n case 'init':\n await this.projectCommands.cmdProject(['analyze'], this.smartInput!);\n break;\n case 'mentions': this.replCommands.cmdMentionsHelp(); break;\n case 'tools': this.cmdTools(); break;\n\n case 'status': this.gitCommands.runGit('git status'); break;\n case 'diff': this.gitCommands.runGit(args.length ? `git diff ${args.join(' ')}` : 'git diff'); break;\n case 'log': this.gitCommands.runGit('git log --oneline -15'); break;\n case 'commit': \n await this.gitCommands.cmdCommit(args, this.smartInput!); \n break;\n case 'up': \n await this.gitCommands.cmdUp(this.smartInput!); \n break;\n case 'split-up': \n await this.gitCommands.cmdSplitUp(this.smartInput!); \n break;\n case 'pr': \n await this.gitCommands.cmdPr(this.smartInput!); \n break;\n case 'review': await this.gitCommands.cmdReview(args); break;\n case 'fix': await this.gitCommands.cmdFix(args); break;\n case 'ident': await this.gitCommands.cmdIdent(); break;\n case 'release': await this.gitCommands.cmdRelease(args); break;\n\n case 'agents': \n await this.agentCommands.cmdAgents(args, this.smartInput!); \n break;\n case 'skills': \n await this.agentCommands.cmdSkills(args, this.smartInput!); \n break;\n\n case 'mcp': \n await this.mcpCommands.cmdMcp(args, this.smartInput!); \n break;\n\n case 'project':\n await this.projectCommands.cmdProject(args, this.smartInput!);\n break;\n case 'project-deep':\n await this.projectCommands.cmdProject(['deep'], this.smartInput!);\n break;\n\n default:\n process.stdout.write(`${Colors.red} Unknown: /${cmd}${Colors.reset} ${Colors.dim}Try /help${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleCompact(): Promise<void> {\n const msgCount = this.deepAgent.getMessageCount();\n if (msgCount < 4) {\n process.stdout.write(`${Colors.dim} Nothing to compact (${msgCount} messages)${Colors.reset}\\r\\n`);\n return;\n }\n process.stdout.write(`${Colors.dim} Summarizing ${msgCount} messages...${Colors.reset}\\r\\n`);\n const result = await this.deepAgent.compactHistory();\n if (result.compacted) {\n process.stdout.write(`${Colors.green} Compacted: ${result.messagesBefore} → ${result.messagesAfter} messages${Colors.reset}\\r\\n`);\n } else {\n process.stdout.write(`${Colors.yellow} Could not compact (summarization failed)${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleMessage(message: string): Promise<void> {\n this.isProcessing = true;\n this.abortController = new AbortController();\n this.smartInput?.enterPassiveMode();\n\n try {\n let messageToProcess = message;\n\n const planCheck = await this.planMode.shouldEnterPlanMode(message);\n if (planCheck.shouldPlan) {\n const usePlan = await this.smartInput!.askChoice(\n '📝 Complex task. Create a plan?',\n [\n { key: 'y', label: 'yes', description: 'Create structured plan' },\n { key: 'n', label: 'no', description: 'Proceed without plan' },\n ]\n );\n \n if (usePlan === 'y') {\n const plannedMessage = await this.runInteractivePlanMode(message);\n if (!plannedMessage) {\n this.isProcessing = false;\n this.smartInput?.exitPassiveMode();\n return;\n }\n messageToProcess = plannedMessage;\n }\n }\n\n const mentionResult = await this.mentionsService.processMessage(messageToProcess);\n if (mentionResult.mentions.length > 0) {\n const summary = this.mentionsService.getMentionsSummary(mentionResult.mentions);\n for (const line of summary) {\n process.stdout.write(`${Colors.dim}${line}${Colors.reset}\\r\\n`);\n }\n process.stdout.write('\\r\\n');\n }\n\n this.startSpinner('Thinking');\n\n let firstChunk = true;\n let fullResponse = '';\n\n for await (const chunk of this.deepAgent.chat(mentionResult.expandedMessage)) {\n if (this.abortController?.signal.aborted) break;\n\n const isToolOutput = chunk.includes('\\x1b[') && (\n chunk.includes('⏿') ||\n chunk.includes('tokens:') ||\n chunk.includes('conversation compacted')\n );\n\n if (firstChunk && !isToolOutput) {\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.magenta}${Colors.bold}${Icons.chestnut} Cast${Colors.reset}\\r\\n`);\n firstChunk = false;\n }\n\n if (!isToolOutput) {\n fullResponse += chunk;\n }\n process.stdout.write(chunk);\n }\n\n if (!firstChunk) {\n process.stdout.write('\\r\\n');\n } else {\n this.stopSpinner();\n }\n } catch (error) {\n this.stopSpinner();\n const msg = (error as Error).message;\n if (!msg.includes('abort')) {\n process.stdout.write(`\\r\\n${Colors.red} Error: ${msg}${Colors.reset}\\r\\n\\r\\n`);\n }\n } finally {\n this.isProcessing = false;\n this.abortController = null;\n this.smartInput?.exitPassiveMode();\n }\n }\n\n private async runInteractivePlanMode(userMessage: string): Promise<string | null> {\n process.stdout.write(`\\r\\n${Colors.cyan}${Colors.bold}📋 PLAN MODE${Colors.reset}\\r\\n`);\n process.stdout.write(`${Colors.dim}Build plan first, execute after approval${Colors.reset}\\r\\n\\r\\n`);\n\n const clarifyingQuestions = await this.planMode.generateClarifyingQuestions(userMessage);\n const answers: string[] = [];\n\n if (clarifyingQuestions.length > 0) {\n process.stdout.write(`${Colors.dim}I need a few quick clarifications:${Colors.reset}\\r\\n`);\n for (let i = 0; i < clarifyingQuestions.length; i++) {\n const q = clarifyingQuestions[i];\n const answer = await this.smartInput!.question(`${Colors.yellow}Q${i + 1}:${Colors.reset} ${q} `);\n if (answer.trim()) {\n answers.push(`- ${q} => ${answer.trim()}`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n const context = answers.length > 0 ? `User clarifications:\\n${answers.join('\\n')}` : undefined;\n let plan = await this.planMode.generatePlan(userMessage, context);\n\n while (true) {\n process.stdout.write(this.planMode.formatPlanForDisplay(plan));\n\n const action = await this.smartInput!.askChoice('Plan options', [\n { key: 'a', label: 'accept', description: 'Use this plan and continue' },\n { key: 'r', label: 'refine', description: 'Refine plan with extra feedback' },\n { key: 'c', label: 'cancel', description: 'Cancel and return to prompt' },\n ]);\n\n if (action === 'c') {\n process.stdout.write(`${Colors.dim} Plan cancelled${Colors.reset}\\r\\n\\r\\n`);\n return null;\n }\n\n if (action === 'r') {\n const feedback = await this.smartInput!.question(`${Colors.cyan}Refinement feedback:${Colors.reset} `);\n if (!feedback.trim()) {\n process.stdout.write(`${Colors.dim} No feedback provided. Keeping current plan.${Colors.reset}\\r\\n\\r\\n`);\n continue;\n }\n plan = await this.planMode.refinePlan(plan, feedback.trim());\n continue;\n }\n\n return this.buildPlanExecutionPrompt(userMessage, plan, answers);\n }\n }\n\n private buildPlanExecutionPrompt(userMessage: string, plan: { title: string; overview: string; steps: Array<{ id: number; description: string; files: string[] }> }, clarifications: string[]): string {\n const lines: string[] = [];\n lines.push(userMessage);\n lines.push('');\n lines.push('Approved execution plan:');\n lines.push(`Title: ${plan.title}`);\n lines.push(`Overview: ${plan.overview}`);\n lines.push('Steps:');\n for (const step of plan.steps) {\n const files = step.files.length > 0 ? ` | files: ${step.files.join(', ')}` : '';\n lines.push(`${step.id}. ${step.description}${files}`);\n }\n if (clarifications.length > 0) {\n lines.push('');\n lines.push('User clarifications:');\n lines.push(...clarifications);\n }\n lines.push('');\n lines.push('Execute the task following this approved plan and report progress by step.');\n return lines.join('\\n');\n }\n\n private startSpinner(label: string): void {\n let i = 0;\n this.spinnerTimer = setInterval(() => {\n process.stdout.write(`\\r${Colors.cyan}${Icons.thinkingChestnut[i++ % Icons.thinkingChestnut.length]}${Colors.reset} ${Colors.dim}${label}...${Colors.reset}`);\n }, 80);\n }\n\n private stopSpinner(): void {\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n process.stdout.write('\\r\\x1b[K');\n }\n }\n\n private cmdTools(): void {\n const allTools = this.toolsRegistry.getAllTools();\n const tools: [string, string][] = allTools.map(t => [t.name, t.description.slice(0, 60)]);\n\n if (tools.length > 0) {\n const maxLen = Math.max(...tools.map(([n]) => n.length));\n\n process.stdout.write('\\r\\n');\n process.stdout.write(`${Colors.bold}Built-in Tools (${tools.length}):${Colors.reset}\\r\\n`);\n for (const [name, desc] of tools) {\n process.stdout.write(` ${Colors.cyan}${name.padEnd(maxLen)}${Colors.reset} ${Colors.dim}${desc}${Colors.reset}\\r\\n`);\n }\n }\n\n const mcpTools = this.mcpRegistry.getAllMcpTools();\n if (mcpTools.length > 0) {\n process.stdout.write(`\\r\\n${Colors.bold}MCP Tools (${mcpTools.length}):${Colors.reset}\\r\\n`);\n for (const t of mcpTools.slice(0, 10)) {\n process.stdout.write(` ${Colors.cyan}${t.name}${Colors.reset} ${Colors.dim}${t.description.slice(0, 50)}${Colors.reset}\\r\\n`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n private getModelDisplayName(): string {\n try {\n const modelConfig = this.configManager.getModelConfig('default');\n if (modelConfig) {\n return `${modelConfig.provider}/${modelConfig.model}`;\n }\n } catch {\n }\n return `${this.configService.getProvider()}/${this.configService.getModel()}`;\n }\n\n stop(): void {\n this.stopSpinner();\n this.smartInput?.destroy();\n }\n}\n"],"names":["ReplService","start","initResult","deepAgent","initialize","agentCount","agentRegistry","resolveAllAgents","length","welcomeScreen","printWelcomeScreen","projectPath","undefined","model","getModelDisplayName","toolCount","smartInput","SmartInput","prompt","Colors","cyan","bold","reset","promptVisibleLen","getCommandSuggestions","input","getMentionSuggestions","partial","onSubmit","line","handleLine","onCancel","handleCancel","onExit","handleExit","commands","text","display","description","filter","c","startsWith","fs","require","path","gitOpts","getFileEntries","o","slice","dir","prefix","endsWith","includes","dirname","basename","resolved","resolve","process","cwd","existsSync","statSync","isDirectory","entries","readdirSync","withFileTypes","ignore","e","name","toLowerCase","map","relDir","isDir","isProcessing","abortController","abort","stopSpinner","stdout","write","yellow","dim","showPrompt","stop","exit","trimmed","trim","handleCommand","handleMessage","command","parts","split","cmd","args","replCommands","printHelp","cmdClear","handleCompact","cmdContext","configCommands","handleConfigCommand","cmdModel","projectCommands","cmdProject","cmdMentionsHelp","cmdTools","gitCommands","runGit","join","cmdCommit","cmdUp","cmdSplitUp","cmdPr","cmdReview","cmdFix","cmdIdent","cmdRelease","agentCommands","cmdAgents","cmdSkills","mcpCommands","cmdMcp","red","msgCount","getMessageCount","result","compactHistory","compacted","green","messagesBefore","messagesAfter","message","AbortController","enterPassiveMode","messageToProcess","planCheck","planMode","shouldEnterPlanMode","shouldPlan","usePlan","askChoice","key","label","plannedMessage","runInteractivePlanMode","exitPassiveMode","mentionResult","mentionsService","processMessage","mentions","summary","getMentionsSummary","startSpinner","firstChunk","fullResponse","chunk","chat","expandedMessage","signal","aborted","isToolOutput","magenta","Icons","chestnut","error","msg","userMessage","clarifyingQuestions","generateClarifyingQuestions","answers","i","q","answer","question","push","context","plan","generatePlan","formatPlanForDisplay","action","feedback","refinePlan","buildPlanExecutionPrompt","clarifications","lines","title","overview","step","steps","files","id","spinnerTimer","setInterval","thinkingChestnut","clearInterval","allTools","toolsRegistry","getAllTools","tools","t","maxLen","Math","max","n","desc","padEnd","mcpTools","mcpRegistry","getAllMcpTools","modelConfig","configManager","getModelConfig","provider","configService","getProvider","getModel","destroy","skillRegistry"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/modules/repl/services/repl.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { DeepAgentService } from '../../core/services/deep-agent.service';\nimport { ConfigService } from '../../../common/services/config.service';\nimport { ConfigManagerService } from '../../config/services/config-manager.service';\nimport { MentionsService } from '../../mentions/services/mentions.service';\nimport { McpRegistryService } from '../../mcp/services/mcp-registry.service';\nimport { AgentRegistryService } from '../../agents/services/agent-registry.service';\nimport { SkillRegistryService } from '../../skills/services/skill-registry.service';\nimport { PlanModeService } from '../../core/services/plan-mode.service';\nimport { SmartInput } from './smart-input';\nimport { WelcomeScreenService } from './welcome-screen.service';\nimport { ReplCommandsService } from './commands/repl-commands.service';\nimport { GitCommandsService } from './commands/git-commands.service';\nimport { AgentCommandsService } from './commands/agent-commands.service';\nimport { McpCommandsService } from './commands/mcp-commands.service';\nimport { ConfigCommandsService } from '../../config/services/config-commands.service';\nimport { ProjectCommandsService } from './commands/project-commands.service';\nimport { ToolsRegistryService } from '../../tools/services/tools-registry.service';\nimport { Colors, Icons } from '../utils/theme';\n\n@Injectable()\nexport class ReplService {\n private smartInput: SmartInput | null = null;\n private abortController: AbortController | null = null;\n private isProcessing = false;\n private spinnerTimer: ReturnType<typeof setInterval> | null = null;\n\n constructor(\n private readonly deepAgent: DeepAgentService,\n private readonly configService: ConfigService,\n private readonly configManager: ConfigManagerService,\n private readonly mentionsService: MentionsService,\n private readonly mcpRegistry: McpRegistryService,\n private readonly agentRegistry: AgentRegistryService,\n private readonly skillRegistry: SkillRegistryService,\n private readonly welcomeScreen: WelcomeScreenService,\n private readonly planMode: PlanModeService,\n private readonly replCommands: ReplCommandsService,\n private readonly gitCommands: GitCommandsService,\n private readonly agentCommands: AgentCommandsService,\n private readonly mcpCommands: McpCommandsService,\n private readonly configCommands: ConfigCommandsService,\n private readonly projectCommands: ProjectCommandsService,\n private readonly toolsRegistry: ToolsRegistryService,\n ) {}\n\n async start(): Promise<void> {\n const initResult = await this.deepAgent.initialize();\n const agentCount = this.agentRegistry.resolveAllAgents().length;\n\n this.welcomeScreen.printWelcomeScreen({\n projectPath: initResult.projectPath || undefined,\n model: this.getModelDisplayName(),\n toolCount: initResult.toolCount,\n agentCount,\n });\n\n this.smartInput = new SmartInput({\n prompt: `${Colors.cyan}${Colors.bold}>${Colors.reset} `,\n promptVisibleLen: 2,\n getCommandSuggestions: (input) => this.getCommandSuggestions(input),\n getMentionSuggestions: (partial) => this.getMentionSuggestions(partial),\n onSubmit: (line) => this.handleLine(line),\n onCancel: () => this.handleCancel(),\n onExit: () => this.handleExit(),\n });\n\n this.smartInput.start();\n }\n\n private getCommandSuggestions(input: string): Array<{ text: string; display: string; description: string }> {\n const commands = [\n { text: '/help', display: '/help', description: 'Show help' },\n { text: '/clear', display: '/clear', description: 'Clear conversation' },\n { text: '/compact', display: '/compact', description: 'Compact history' },\n { text: '/exit', display: '/exit', description: 'Exit' },\n { text: '/status', display: '/status', description: 'Git status' },\n { text: '/diff', display: '/diff', description: 'Git diff' },\n { text: '/log', display: '/log', description: 'Git log' },\n { text: '/commit', display: '/commit', description: 'Commit changes' },\n { text: '/up', display: '/up', description: 'Smart commit & push' },\n { text: '/split-up', display: '/split-up', description: 'Split commits' },\n { text: '/pr', display: '/pr', description: 'Create Pull Request' },\n { text: '/review', display: '/review', description: 'Code review' },\n { text: '/fix', display: '/fix', description: 'Auto-fix code' },\n { text: '/ident', display: '/ident', description: 'Format code' },\n { text: '/release', display: '/release', description: 'Release notes' },\n { text: '/tools', display: '/tools', description: 'List tools' },\n { text: '/agents', display: '/agents', description: 'List agents' },\n { text: '/skills', display: '/skills', description: 'List skills' },\n { text: '/context', display: '/context', description: 'Session info' },\n { text: '/mentions', display: '/mentions', description: 'Mentions help' },\n { text: '/model', display: '/model', description: 'Show model' },\n { text: '/config', display: '/config', description: 'Configuration' },\n { text: '/project', display: '/project', description: 'Project context' },\n { text: '/project-deep', display: '/project-deep', description: 'Deep project analysis' },\n { text: '/init', display: '/init', description: 'Analyze project and generate context' },\n { text: '/mcp', display: '/mcp', description: 'MCP servers' },\n ];\n\n return commands.filter(c => c.text.startsWith(input));\n }\n\n private getMentionSuggestions(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n const gitOpts = [\n { text: '@git:status', display: '@git:status', description: 'Git status' },\n { text: '@git:diff', display: '@git:diff', description: 'Git diff' },\n { text: '@git:log', display: '@git:log', description: 'Git log' },\n { text: '@git:branch', display: '@git:branch', description: 'Branches' },\n ];\n\n if (partial === '') return [...gitOpts, ...this.getFileEntries('')];\n if (partial.startsWith('git:')) return gitOpts.filter(o => o.text.startsWith('@' + partial));\n\n return [...gitOpts.filter(o => o.text.startsWith('@' + partial)), ...this.getFileEntries(partial)].slice(0, 30);\n }\n\n private getFileEntries(partial: string): Array<{ text: string; display: string; description: string }> {\n const fs = require('fs');\n const path = require('path');\n\n try {\n let dir: string;\n let prefix: string;\n\n if (partial.endsWith('/')) {\n dir = partial.slice(0, -1) || '.';\n prefix = '';\n } else if (partial.includes('/')) {\n dir = path.dirname(partial);\n prefix = path.basename(partial);\n } else {\n dir = '.';\n prefix = partial;\n }\n\n const resolved = path.resolve(process.cwd(), dir);\n if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) return [];\n\n const entries = fs.readdirSync(resolved, { withFileTypes: true });\n const ignore = ['node_modules', '.git', 'dist', 'coverage', '.next', '__pycache__'];\n\n return entries\n .filter(e => !ignore.includes(e.name))\n .filter(e => !e.name.startsWith('.') || prefix.startsWith('.'))\n .filter(e => prefix === '' || e.name.toLowerCase().startsWith(prefix.toLowerCase()))\n .map(e => {\n const relDir = dir === '.' ? '' : dir + '/';\n const isDir = e.isDirectory();\n return {\n text: '@' + relDir + e.name + (isDir ? '/' : ''),\n display: '@' + relDir + e.name + (isDir ? '/' : ''),\n description: isDir ? 'dir' : '',\n };\n })\n .slice(0, 20);\n } catch {\n return [];\n }\n }\n\n private handleCancel(): void {\n if (this.isProcessing && this.abortController) {\n this.abortController.abort();\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.yellow} Cancelled${Colors.reset}\\r\\n\\r\\n`);\n this.isProcessing = false;\n } else {\n process.stdout.write(`${Colors.dim} (Use /exit to quit)${Colors.reset}\\r\\n`);\n this.smartInput?.showPrompt();\n }\n }\n\n private handleExit(): void {\n process.stdout.write(`${Colors.dim} Goodbye!${Colors.reset}\\r\\n`);\n this.stop();\n process.exit(0);\n }\n\n private async handleLine(input: string): Promise<void> {\n const trimmed = input.trim();\n\n if (!trimmed) {\n this.smartInput?.showPrompt();\n return;\n }\n\n if (trimmed.startsWith('/')) {\n await this.handleCommand(trimmed);\n } else {\n await this.handleMessage(trimmed);\n }\n\n this.smartInput?.showPrompt();\n }\n\n private async handleCommand(command: string): Promise<void> {\n const parts = command.slice(1).split(/\\s+/);\n const cmd = parts[0].toLowerCase();\n const args = parts.slice(1);\n\n switch (cmd) {\n case 'help': this.replCommands.printHelp(); break;\n case 'clear': this.replCommands.cmdClear(this.welcomeScreen); break;\n case 'exit':\n case 'quit': this.handleExit(); return;\n case 'compact': await this.handleCompact(); break;\n case 'context': this.replCommands.cmdContext(); break;\n case 'config':\n await this.configCommands.handleConfigCommand(args, this.smartInput!);\n await this.configManager.loadConfig();\n await this.deepAgent.reinitializeModel();\n break;\n case 'model': this.replCommands.cmdModel(args); break;\n case 'init':\n await this.projectCommands.cmdProject(['analyze'], this.smartInput!);\n break;\n case 'mentions': this.replCommands.cmdMentionsHelp(); break;\n case 'tools': this.cmdTools(); break;\n\n case 'status': this.gitCommands.runGit('git status'); break;\n case 'diff': this.gitCommands.runGit(args.length ? `git diff ${args.join(' ')}` : 'git diff'); break;\n case 'log': this.gitCommands.runGit('git log --oneline -15'); break;\n case 'commit': \n await this.gitCommands.cmdCommit(args, this.smartInput!); \n break;\n case 'up': \n await this.gitCommands.cmdUp(this.smartInput!); \n break;\n case 'split-up': \n await this.gitCommands.cmdSplitUp(this.smartInput!); \n break;\n case 'pr': \n await this.gitCommands.cmdPr(this.smartInput!); \n break;\n case 'review': await this.gitCommands.cmdReview(args); break;\n case 'fix': await this.gitCommands.cmdFix(args); break;\n case 'ident': await this.gitCommands.cmdIdent(); break;\n case 'release': await this.gitCommands.cmdRelease(args); break;\n\n case 'agents': \n await this.agentCommands.cmdAgents(args, this.smartInput!); \n break;\n case 'skills': \n await this.agentCommands.cmdSkills(args, this.smartInput!); \n break;\n\n case 'mcp': \n await this.mcpCommands.cmdMcp(args, this.smartInput!); \n break;\n\n case 'project':\n await this.projectCommands.cmdProject(args, this.smartInput!);\n break;\n case 'project-deep':\n await this.projectCommands.cmdProject(['deep'], this.smartInput!);\n break;\n\n default:\n process.stdout.write(`${Colors.red} Unknown: /${cmd}${Colors.reset} ${Colors.dim}Try /help${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleCompact(): Promise<void> {\n const msgCount = this.deepAgent.getMessageCount();\n if (msgCount < 4) {\n process.stdout.write(`${Colors.dim} Nothing to compact (${msgCount} messages)${Colors.reset}\\r\\n`);\n return;\n }\n process.stdout.write(`${Colors.dim} Summarizing ${msgCount} messages...${Colors.reset}\\r\\n`);\n const result = await this.deepAgent.compactHistory();\n if (result.compacted) {\n process.stdout.write(`${Colors.green} Compacted: ${result.messagesBefore} → ${result.messagesAfter} messages${Colors.reset}\\r\\n`);\n } else {\n process.stdout.write(`${Colors.yellow} Could not compact (summarization failed)${Colors.reset}\\r\\n`);\n }\n }\n\n private async handleMessage(message: string): Promise<void> {\n this.isProcessing = true;\n this.abortController = new AbortController();\n this.smartInput?.enterPassiveMode();\n\n try {\n let messageToProcess = message;\n\n const planCheck = await this.planMode.shouldEnterPlanMode(message);\n if (planCheck.shouldPlan) {\n const usePlan = await this.smartInput!.askChoice(\n '📝 Complex task. Create a plan?',\n [\n { key: 'y', label: 'yes', description: 'Create structured plan' },\n { key: 'n', label: 'no', description: 'Proceed without plan' },\n ]\n );\n \n if (usePlan === 'y') {\n const plannedMessage = await this.runInteractivePlanMode(message);\n if (!plannedMessage) {\n this.isProcessing = false;\n this.smartInput?.exitPassiveMode();\n return;\n }\n messageToProcess = plannedMessage;\n }\n }\n\n const mentionResult = await this.mentionsService.processMessage(messageToProcess);\n if (mentionResult.mentions.length > 0) {\n const summary = this.mentionsService.getMentionsSummary(mentionResult.mentions);\n for (const line of summary) {\n process.stdout.write(`${Colors.dim}${line}${Colors.reset}\\r\\n`);\n }\n process.stdout.write('\\r\\n');\n }\n\n this.startSpinner('Thinking');\n\n let firstChunk = true;\n let fullResponse = '';\n\n for await (const chunk of this.deepAgent.chat(mentionResult.expandedMessage)) {\n if (this.abortController?.signal.aborted) break;\n\n const isToolOutput = chunk.includes('\\x1b[') && (\n chunk.includes('⏿') ||\n chunk.includes('tokens:') ||\n chunk.includes('conversation compacted')\n );\n\n if (firstChunk && !isToolOutput) {\n this.stopSpinner();\n process.stdout.write(`\\r\\n${Colors.magenta}${Colors.bold}${Icons.chestnut} Cast${Colors.reset}\\r\\n`);\n firstChunk = false;\n }\n\n if (!isToolOutput) {\n fullResponse += chunk;\n }\n process.stdout.write(chunk);\n }\n\n if (!firstChunk) {\n process.stdout.write('\\r\\n');\n } else {\n this.stopSpinner();\n }\n } catch (error) {\n this.stopSpinner();\n const msg = (error as Error).message;\n if (!msg.includes('abort')) {\n process.stdout.write(`\\r\\n${Colors.red} Error: ${msg}${Colors.reset}\\r\\n\\r\\n`);\n }\n } finally {\n this.isProcessing = false;\n this.abortController = null;\n this.smartInput?.exitPassiveMode();\n }\n }\n\n private async runInteractivePlanMode(userMessage: string): Promise<string | null> {\n process.stdout.write(`\\r\\n${Colors.cyan}${Colors.bold}📋 PLAN MODE${Colors.reset}\\r\\n`);\n process.stdout.write(`${Colors.dim}Build plan first, execute after approval${Colors.reset}\\r\\n\\r\\n`);\n\n const clarifyingQuestions = await this.planMode.generateClarifyingQuestions(userMessage);\n const answers: string[] = [];\n\n if (clarifyingQuestions.length > 0) {\n process.stdout.write(`${Colors.dim}I need a few quick clarifications:${Colors.reset}\\r\\n`);\n for (let i = 0; i < clarifyingQuestions.length; i++) {\n const q = clarifyingQuestions[i];\n const answer = await this.smartInput!.question(`${Colors.yellow}Q${i + 1}:${Colors.reset} ${q} `);\n if (answer.trim()) {\n answers.push(`- ${q} => ${answer.trim()}`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n const context = answers.length > 0 ? `User clarifications:\\n${answers.join('\\n')}` : undefined;\n let plan = await this.planMode.generatePlan(userMessage, context);\n\n while (true) {\n process.stdout.write(this.planMode.formatPlanForDisplay(plan));\n\n const action = await this.smartInput!.askChoice('Plan options', [\n { key: 'a', label: 'accept', description: 'Use this plan and continue' },\n { key: 'r', label: 'refine', description: 'Refine plan with extra feedback' },\n { key: 'c', label: 'cancel', description: 'Cancel and return to prompt' },\n ]);\n\n if (action === 'c') {\n process.stdout.write(`${Colors.dim} Plan cancelled${Colors.reset}\\r\\n\\r\\n`);\n return null;\n }\n\n if (action === 'r') {\n const feedback = await this.smartInput!.question(`${Colors.cyan}Refinement feedback:${Colors.reset} `);\n if (!feedback.trim()) {\n process.stdout.write(`${Colors.dim} No feedback provided. Keeping current plan.${Colors.reset}\\r\\n\\r\\n`);\n continue;\n }\n plan = await this.planMode.refinePlan(plan, feedback.trim());\n continue;\n }\n\n return this.buildPlanExecutionPrompt(userMessage, plan, answers);\n }\n }\n\n private buildPlanExecutionPrompt(userMessage: string, plan: { title: string; overview: string; steps: Array<{ id: number; description: string; files: string[] }> }, clarifications: string[]): string {\n const lines: string[] = [];\n lines.push(userMessage);\n lines.push('');\n lines.push('Approved execution plan:');\n lines.push(`Title: ${plan.title}`);\n lines.push(`Overview: ${plan.overview}`);\n lines.push('Steps:');\n for (const step of plan.steps) {\n const files = step.files.length > 0 ? ` | files: ${step.files.join(', ')}` : '';\n lines.push(`${step.id}. ${step.description}${files}`);\n }\n if (clarifications.length > 0) {\n lines.push('');\n lines.push('User clarifications:');\n lines.push(...clarifications);\n }\n lines.push('');\n lines.push('Execute the task following this approved plan and report progress by step.');\n return lines.join('\\n');\n }\n\n private startSpinner(label: string): void {\n let i = 0;\n this.spinnerTimer = setInterval(() => {\n process.stdout.write(`\\r${Colors.cyan}${Icons.thinkingChestnut[i++ % Icons.thinkingChestnut.length]}${Colors.reset} ${Colors.dim}${label}...${Colors.reset}`);\n }, 80);\n }\n\n private stopSpinner(): void {\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n process.stdout.write('\\r\\x1b[K');\n }\n }\n\n private cmdTools(): void {\n const allTools = this.toolsRegistry.getAllTools();\n const tools: [string, string][] = allTools.map(t => [t.name, t.description.slice(0, 60)]);\n\n if (tools.length > 0) {\n const maxLen = Math.max(...tools.map(([n]) => n.length));\n\n process.stdout.write('\\r\\n');\n process.stdout.write(`${Colors.bold}Built-in Tools (${tools.length}):${Colors.reset}\\r\\n`);\n for (const [name, desc] of tools) {\n process.stdout.write(` ${Colors.cyan}${name.padEnd(maxLen)}${Colors.reset} ${Colors.dim}${desc}${Colors.reset}\\r\\n`);\n }\n }\n\n const mcpTools = this.mcpRegistry.getAllMcpTools();\n if (mcpTools.length > 0) {\n process.stdout.write(`\\r\\n${Colors.bold}MCP Tools (${mcpTools.length}):${Colors.reset}\\r\\n`);\n for (const t of mcpTools.slice(0, 10)) {\n process.stdout.write(` ${Colors.cyan}${t.name}${Colors.reset} ${Colors.dim}${t.description.slice(0, 50)}${Colors.reset}\\r\\n`);\n }\n }\n process.stdout.write('\\r\\n');\n }\n\n private getModelDisplayName(): string {\n try {\n const modelConfig = this.configManager.getModelConfig('default');\n if (modelConfig) {\n return `${modelConfig.provider}/${modelConfig.model}`;\n }\n } catch {\n }\n return `${this.configService.getProvider()}/${this.configService.getModel()}`;\n }\n\n stop(): void {\n this.stopSpinner();\n this.smartInput?.destroy();\n }\n}\n"],"names":["ReplService","start","initResult","deepAgent","initialize","agentCount","agentRegistry","resolveAllAgents","length","welcomeScreen","printWelcomeScreen","projectPath","undefined","model","getModelDisplayName","toolCount","smartInput","SmartInput","prompt","Colors","cyan","bold","reset","promptVisibleLen","getCommandSuggestions","input","getMentionSuggestions","partial","onSubmit","line","handleLine","onCancel","handleCancel","onExit","handleExit","commands","text","display","description","filter","c","startsWith","fs","require","path","gitOpts","getFileEntries","o","slice","dir","prefix","endsWith","includes","dirname","basename","resolved","resolve","process","cwd","existsSync","statSync","isDirectory","entries","readdirSync","withFileTypes","ignore","e","name","toLowerCase","map","relDir","isDir","isProcessing","abortController","abort","stopSpinner","stdout","write","yellow","dim","showPrompt","stop","exit","trimmed","trim","handleCommand","handleMessage","command","parts","split","cmd","args","replCommands","printHelp","cmdClear","handleCompact","cmdContext","configCommands","handleConfigCommand","configManager","loadConfig","reinitializeModel","cmdModel","projectCommands","cmdProject","cmdMentionsHelp","cmdTools","gitCommands","runGit","join","cmdCommit","cmdUp","cmdSplitUp","cmdPr","cmdReview","cmdFix","cmdIdent","cmdRelease","agentCommands","cmdAgents","cmdSkills","mcpCommands","cmdMcp","red","msgCount","getMessageCount","result","compactHistory","compacted","green","messagesBefore","messagesAfter","message","AbortController","enterPassiveMode","messageToProcess","planCheck","planMode","shouldEnterPlanMode","shouldPlan","usePlan","askChoice","key","label","plannedMessage","runInteractivePlanMode","exitPassiveMode","mentionResult","mentionsService","processMessage","mentions","summary","getMentionsSummary","startSpinner","firstChunk","fullResponse","chunk","chat","expandedMessage","signal","aborted","isToolOutput","magenta","Icons","chestnut","error","msg","userMessage","clarifyingQuestions","generateClarifyingQuestions","answers","i","q","answer","question","push","context","plan","generatePlan","formatPlanForDisplay","action","feedback","refinePlan","buildPlanExecutionPrompt","clarifications","lines","title","overview","step","steps","files","id","spinnerTimer","setInterval","thinkingChestnut","clearInterval","allTools","toolsRegistry","getAllTools","tools","t","maxLen","Math","max","n","desc","padEnd","mcpTools","mcpRegistry","getAllMcpTools","modelConfig","getModelConfig","provider","configService","getProvider","getModel","destroy","skillRegistry"],"mappings":"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"}
@@ -38,6 +38,7 @@ let SmartInput = class SmartInput {
38
38
  this.cursor = 0;
39
39
  this.suggestions = [];
40
40
  this.selectedIndex = -1;
41
+ this.cursorRow = 0;
41
42
  this.mode = 'input';
42
43
  this.render();
43
44
  }
@@ -442,30 +443,25 @@ let SmartInput = class SmartInput {
442
443
  }
443
444
  render() {
444
445
  const write = (s)=>process.stdout.write(s);
445
- // Calcular quantas linhas o buffer atual ocupa
446
446
  const totalLength = this.promptLen + this.buffer.length;
447
- const linesUsed = Math.ceil(totalLength / this.terminalWidth);
448
- // Ir para o início do input (primeira linha do input)
449
- if (linesUsed > 1) {
450
- write(`\x1b[${linesUsed - 1}A`); // Sobe para primeira linha do input
447
+ const linesUsed = Math.max(1, Math.ceil(totalLength / this.terminalWidth));
448
+ const exactWrap = totalLength > 0 && totalLength % this.terminalWidth === 0;
449
+ if (this.cursorRow > 0) {
450
+ write(`\x1b[${this.cursorRow}A`);
451
451
  }
452
- write('\r'); // Volta para início da linha
453
- // Limpar todas as linhas usadas pelo input
454
- for(let i = 0; i < linesUsed; i++){
455
- write('\x1b[K'); // Limpa linha atual
456
- if (i < linesUsed - 1) write('\n'); // Desce se não for última linha
452
+ write('\r');
453
+ const linesToClear = linesUsed + (exactWrap ? 1 : 0);
454
+ for(let i = 0; i < linesToClear; i++){
455
+ write('\x1b[K');
456
+ if (i < linesToClear - 1) write('\n');
457
457
  }
458
- // Voltar para primeira linha
459
- if (linesUsed > 1) {
460
- write(`\x1b[${linesUsed - 1}A`);
458
+ if (linesToClear > 1) {
459
+ write(`\x1b[${linesToClear - 1}A`);
461
460
  }
462
461
  write('\r');
463
- // Escrever prompt + buffer
464
462
  write(this.prompt + this.buffer);
465
- // Limpar resto da tela (para sugestões antigas)
466
463
  write('\x1b[J');
467
464
  this.renderedLines = 0;
468
- // Renderizar sugestões
469
465
  if (this.suggestions.length > 0) {
470
466
  const maxVisible = 10;
471
467
  const total = this.suggestions.length;
@@ -497,25 +493,28 @@ let SmartInput = class SmartInput {
497
493
  this.renderedLines++;
498
494
  }
499
495
  }
500
- // Voltar para linha do input se renderizou sugestões
501
496
  if (this.renderedLines > 0) {
502
497
  write(`\x1b[${this.renderedLines}A`);
503
498
  }
504
- // Posicionar cursor corretamente considerando wrapping
505
- const { row, col } = this.calculateCursorPosition();
506
- if (row > 0) {
507
- write(`\x1b[${row}B`); // Desce 'row' linhas
508
- }
509
- write(`\x1b[${col}G`); // Move para coluna
499
+ const { row: targetRow, col: targetCol } = this.calculateCursorPosition();
500
+ const afterWriteRow = exactWrap ? linesUsed : linesUsed - 1;
501
+ const delta = targetRow - afterWriteRow;
502
+ if (delta > 0) write(`\x1b[${delta}B`);
503
+ else if (delta < 0) write(`\x1b[${-delta}A`);
504
+ write(`\x1b[${targetCol}G`);
505
+ this.cursorRow = targetRow;
510
506
  }
511
507
  clearSuggestions() {
512
508
  if (this.renderedLines > 0) {
513
- const { row, col } = this.calculateCursorPosition();
514
- // Posiciona no fim do buffer
515
- if (row > 0) {
516
- process.stdout.write(`\x1b[${row}B`);
517
- }
518
- process.stdout.write(`\x1b[${col}G\x1b[J`);
509
+ const totalLength = this.promptLen + this.buffer.length;
510
+ const linesUsed = Math.max(1, Math.ceil(totalLength / this.terminalWidth));
511
+ const exactWrap = totalLength > 0 && totalLength % this.terminalWidth === 0;
512
+ const afterWriteRow = exactWrap ? linesUsed : linesUsed - 1;
513
+ const afterWriteCol = exactWrap ? 1 : totalLength % this.terminalWidth + 1;
514
+ const delta = afterWriteRow - this.cursorRow;
515
+ if (delta > 0) process.stdout.write(`\x1b[${delta}B`);
516
+ else if (delta < 0) process.stdout.write(`\x1b[${-delta}A`);
517
+ process.stdout.write(`\x1b[${afterWriteCol}G\x1b[J`);
519
518
  this.renderedLines = 0;
520
519
  }
521
520
  }
@@ -532,8 +531,9 @@ let SmartInput = class SmartInput {
532
531
  this.questionResolve = null;
533
532
  this.questionBuffer = '';
534
533
  this.dataHandler = null;
535
- this.terminalWidth = 80; // default
534
+ this.terminalWidth = 80;
536
535
  this.isPaused = false;
536
+ this.cursorRow = 0;
537
537
  this.lastCtrlCTime = 0;
538
538
  this.opts = opts;
539
539
  this.prompt = opts.prompt;