cast-code 1.0.0

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.
Files changed (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -0
  3. package/dist/app.module.js +45 -0
  4. package/dist/app.module.js.map +1 -0
  5. package/dist/common/common.module.js +49 -0
  6. package/dist/common/common.module.js.map +1 -0
  7. package/dist/common/constants/index.js +105 -0
  8. package/dist/common/constants/index.js.map +1 -0
  9. package/dist/common/index.js +24 -0
  10. package/dist/common/index.js.map +1 -0
  11. package/dist/common/services/config.service.js +119 -0
  12. package/dist/common/services/config.service.js.map +1 -0
  13. package/dist/common/services/llm.service.js +56 -0
  14. package/dist/common/services/llm.service.js.map +1 -0
  15. package/dist/common/services/markdown-parser.service.js +101 -0
  16. package/dist/common/services/markdown-parser.service.js.map +1 -0
  17. package/dist/common/services/markdown-renderer.service.js +220 -0
  18. package/dist/common/services/markdown-renderer.service.js.map +1 -0
  19. package/dist/common/services/multi-llm.service.js +115 -0
  20. package/dist/common/services/multi-llm.service.js.map +1 -0
  21. package/dist/common/types/index.js +20 -0
  22. package/dist/common/types/index.js.map +1 -0
  23. package/dist/common/types/markdown.types.js +6 -0
  24. package/dist/common/types/markdown.types.js.map +1 -0
  25. package/dist/main.js +84 -0
  26. package/dist/main.js.map +1 -0
  27. package/dist/modules/agents/agents.module.js +43 -0
  28. package/dist/modules/agents/agents.module.js.map +1 -0
  29. package/dist/modules/agents/definitions/architect.md +35 -0
  30. package/dist/modules/agents/definitions/backend.md +43 -0
  31. package/dist/modules/agents/definitions/coder.md +34 -0
  32. package/dist/modules/agents/definitions/devops.md +42 -0
  33. package/dist/modules/agents/definitions/frontend.md +46 -0
  34. package/dist/modules/agents/definitions/reviewer.md +35 -0
  35. package/dist/modules/agents/definitions/tester.md +41 -0
  36. package/dist/modules/agents/index.js +23 -0
  37. package/dist/modules/agents/index.js.map +1 -0
  38. package/dist/modules/agents/services/agent-loader.service.js +150 -0
  39. package/dist/modules/agents/services/agent-loader.service.js.map +1 -0
  40. package/dist/modules/agents/services/agent-registry.service.js +108 -0
  41. package/dist/modules/agents/services/agent-registry.service.js.map +1 -0
  42. package/dist/modules/agents/types/agent.types.js +6 -0
  43. package/dist/modules/agents/types/agent.types.js.map +1 -0
  44. package/dist/modules/agents/types/index.js +20 -0
  45. package/dist/modules/agents/types/index.js.map +1 -0
  46. package/dist/modules/config/config.module.js +38 -0
  47. package/dist/modules/config/config.module.js.map +1 -0
  48. package/dist/modules/config/index.js +24 -0
  49. package/dist/modules/config/index.js.map +1 -0
  50. package/dist/modules/config/services/config-commands.service.js +405 -0
  51. package/dist/modules/config/services/config-commands.service.js.map +1 -0
  52. package/dist/modules/config/services/config-manager.service.js +175 -0
  53. package/dist/modules/config/services/config-manager.service.js.map +1 -0
  54. package/dist/modules/config/services/init-config.service.js +238 -0
  55. package/dist/modules/config/services/init-config.service.js.map +1 -0
  56. package/dist/modules/config/types/config.types.js +163 -0
  57. package/dist/modules/config/types/config.types.js.map +1 -0
  58. package/dist/modules/config/types/index.js +20 -0
  59. package/dist/modules/config/types/index.js.map +1 -0
  60. package/dist/modules/core/core.module.js +60 -0
  61. package/dist/modules/core/core.module.js.map +1 -0
  62. package/dist/modules/core/index.js +22 -0
  63. package/dist/modules/core/index.js.map +1 -0
  64. package/dist/modules/core/services/deep-agent.service.js +575 -0
  65. package/dist/modules/core/services/deep-agent.service.js.map +1 -0
  66. package/dist/modules/core/services/plan-mode.service.js +225 -0
  67. package/dist/modules/core/services/plan-mode.service.js.map +1 -0
  68. package/dist/modules/git/git.module.js +48 -0
  69. package/dist/modules/git/git.module.js.map +1 -0
  70. package/dist/modules/git/index.js +23 -0
  71. package/dist/modules/git/index.js.map +1 -0
  72. package/dist/modules/git/services/code-review.service.js +330 -0
  73. package/dist/modules/git/services/code-review.service.js.map +1 -0
  74. package/dist/modules/git/services/commit-generator.service.js +403 -0
  75. package/dist/modules/git/services/commit-generator.service.js.map +1 -0
  76. package/dist/modules/git/services/index.js +21 -0
  77. package/dist/modules/git/services/index.js.map +1 -0
  78. package/dist/modules/git/services/monorepo-detector.service.js +338 -0
  79. package/dist/modules/git/services/monorepo-detector.service.js.map +1 -0
  80. package/dist/modules/git/services/pr-generator.service.js +429 -0
  81. package/dist/modules/git/services/pr-generator.service.js.map +1 -0
  82. package/dist/modules/git/services/release-notes.service.js +426 -0
  83. package/dist/modules/git/services/release-notes.service.js.map +1 -0
  84. package/dist/modules/git/types/git.types.js +6 -0
  85. package/dist/modules/git/types/git.types.js.map +1 -0
  86. package/dist/modules/git/types/index.js +20 -0
  87. package/dist/modules/git/types/index.js.map +1 -0
  88. package/dist/modules/mcp/catalog/mcp-templates.js +606 -0
  89. package/dist/modules/mcp/catalog/mcp-templates.js.map +1 -0
  90. package/dist/modules/mcp/index.js +23 -0
  91. package/dist/modules/mcp/index.js.map +1 -0
  92. package/dist/modules/mcp/mcp.module.js +35 -0
  93. package/dist/modules/mcp/mcp.module.js.map +1 -0
  94. package/dist/modules/mcp/services/mcp-client.service.js +289 -0
  95. package/dist/modules/mcp/services/mcp-client.service.js.map +1 -0
  96. package/dist/modules/mcp/services/mcp-registry.service.js +197 -0
  97. package/dist/modules/mcp/services/mcp-registry.service.js.map +1 -0
  98. package/dist/modules/mcp/types/index.js +20 -0
  99. package/dist/modules/mcp/types/index.js.map +1 -0
  100. package/dist/modules/mcp/types/mcp.types.js +6 -0
  101. package/dist/modules/mcp/types/mcp.types.js.map +1 -0
  102. package/dist/modules/memory/index.js +23 -0
  103. package/dist/modules/memory/index.js.map +1 -0
  104. package/dist/modules/memory/memory.module.js +35 -0
  105. package/dist/modules/memory/memory.module.js.map +1 -0
  106. package/dist/modules/memory/services/memory-tools.service.js +78 -0
  107. package/dist/modules/memory/services/memory-tools.service.js.map +1 -0
  108. package/dist/modules/memory/services/memory.service.js +169 -0
  109. package/dist/modules/memory/services/memory.service.js.map +1 -0
  110. package/dist/modules/memory/types/index.js +20 -0
  111. package/dist/modules/memory/types/index.js.map +1 -0
  112. package/dist/modules/memory/types/memory.types.js +6 -0
  113. package/dist/modules/memory/types/memory.types.js.map +1 -0
  114. package/dist/modules/mentions/index.js +22 -0
  115. package/dist/modules/mentions/index.js.map +1 -0
  116. package/dist/modules/mentions/mentions.module.js +32 -0
  117. package/dist/modules/mentions/mentions.module.js.map +1 -0
  118. package/dist/modules/mentions/services/mentions.service.js +336 -0
  119. package/dist/modules/mentions/services/mentions.service.js.map +1 -0
  120. package/dist/modules/mentions/types/index.js +20 -0
  121. package/dist/modules/mentions/types/index.js.map +1 -0
  122. package/dist/modules/mentions/types/mention.types.js +19 -0
  123. package/dist/modules/mentions/types/mention.types.js.map +1 -0
  124. package/dist/modules/permissions/index.js +23 -0
  125. package/dist/modules/permissions/index.js.map +1 -0
  126. package/dist/modules/permissions/permissions.module.js +35 -0
  127. package/dist/modules/permissions/permissions.module.js.map +1 -0
  128. package/dist/modules/permissions/services/permission.service.js +269 -0
  129. package/dist/modules/permissions/services/permission.service.js.map +1 -0
  130. package/dist/modules/permissions/services/prompt.service.js +116 -0
  131. package/dist/modules/permissions/services/prompt.service.js.map +1 -0
  132. package/dist/modules/permissions/types/permission.types.js +32 -0
  133. package/dist/modules/permissions/types/permission.types.js.map +1 -0
  134. package/dist/modules/project/index.js +24 -0
  135. package/dist/modules/project/index.js.map +1 -0
  136. package/dist/modules/project/project.module.js +38 -0
  137. package/dist/modules/project/project.module.js.map +1 -0
  138. package/dist/modules/project/services/project-analyzer.service.js +1063 -0
  139. package/dist/modules/project/services/project-analyzer.service.js.map +1 -0
  140. package/dist/modules/project/services/project-context.service.js +62 -0
  141. package/dist/modules/project/services/project-context.service.js.map +1 -0
  142. package/dist/modules/project/services/project-loader.service.js +147 -0
  143. package/dist/modules/project/services/project-loader.service.js.map +1 -0
  144. package/dist/modules/project/types/index.js +20 -0
  145. package/dist/modules/project/types/index.js.map +1 -0
  146. package/dist/modules/project/types/project.types.js +6 -0
  147. package/dist/modules/project/types/project.types.js.map +1 -0
  148. package/dist/modules/repl/index.js +21 -0
  149. package/dist/modules/repl/index.js.map +1 -0
  150. package/dist/modules/repl/repl.module.js +66 -0
  151. package/dist/modules/repl/repl.module.js.map +1 -0
  152. package/dist/modules/repl/services/commands/agent-commands.service.js +196 -0
  153. package/dist/modules/repl/services/commands/agent-commands.service.js.map +1 -0
  154. package/dist/modules/repl/services/commands/git-commands.service.js +500 -0
  155. package/dist/modules/repl/services/commands/git-commands.service.js.map +1 -0
  156. package/dist/modules/repl/services/commands/mcp-commands.service.js +579 -0
  157. package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -0
  158. package/dist/modules/repl/services/commands/project-commands.service.js +226 -0
  159. package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -0
  160. package/dist/modules/repl/services/commands/repl-commands.service.js +254 -0
  161. package/dist/modules/repl/services/commands/repl-commands.service.js.map +1 -0
  162. package/dist/modules/repl/services/repl.service.js +647 -0
  163. package/dist/modules/repl/services/repl.service.js.map +1 -0
  164. package/dist/modules/repl/services/smart-input.js +544 -0
  165. package/dist/modules/repl/services/smart-input.js.map +1 -0
  166. package/dist/modules/repl/services/welcome-screen.service.js +117 -0
  167. package/dist/modules/repl/services/welcome-screen.service.js.map +1 -0
  168. package/dist/modules/repl/utils/prompts-with-esc.js +187 -0
  169. package/dist/modules/repl/utils/prompts-with-esc.js.map +1 -0
  170. package/dist/modules/repl/utils/theme.js +185 -0
  171. package/dist/modules/repl/utils/theme.js.map +1 -0
  172. package/dist/modules/skills/definitions/general/file-operations.md +60 -0
  173. package/dist/modules/skills/definitions/general/git-operations.md +59 -0
  174. package/dist/modules/skills/definitions/general/planning.md +86 -0
  175. package/dist/modules/skills/definitions/general/search.md +59 -0
  176. package/dist/modules/skills/definitions/specialized/api-design.md +85 -0
  177. package/dist/modules/skills/definitions/specialized/database-operations.md +78 -0
  178. package/dist/modules/skills/definitions/specialized/frontend-bootstrap.md +71 -0
  179. package/dist/modules/skills/definitions/specialized/react-patterns.md +77 -0
  180. package/dist/modules/skills/definitions/specialized/testing-strategies.md +79 -0
  181. package/dist/modules/skills/index.js +23 -0
  182. package/dist/modules/skills/index.js.map +1 -0
  183. package/dist/modules/skills/services/skill-loader.service.js +130 -0
  184. package/dist/modules/skills/services/skill-loader.service.js.map +1 -0
  185. package/dist/modules/skills/services/skill-registry.service.js +96 -0
  186. package/dist/modules/skills/services/skill-registry.service.js.map +1 -0
  187. package/dist/modules/skills/skills.module.js +38 -0
  188. package/dist/modules/skills/skills.module.js.map +1 -0
  189. package/dist/modules/skills/types/index.js +20 -0
  190. package/dist/modules/skills/types/index.js.map +1 -0
  191. package/dist/modules/skills/types/skill.types.js +6 -0
  192. package/dist/modules/skills/types/skill.types.js.map +1 -0
  193. package/dist/modules/tasks/index.js +24 -0
  194. package/dist/modules/tasks/index.js.map +1 -0
  195. package/dist/modules/tasks/services/plan-executor.service.js +199 -0
  196. package/dist/modules/tasks/services/plan-executor.service.js.map +1 -0
  197. package/dist/modules/tasks/services/plan-mode.service.js +118 -0
  198. package/dist/modules/tasks/services/plan-mode.service.js.map +1 -0
  199. package/dist/modules/tasks/services/plan-persistence.service.js +148 -0
  200. package/dist/modules/tasks/services/plan-persistence.service.js.map +1 -0
  201. package/dist/modules/tasks/services/task-management.service.js +255 -0
  202. package/dist/modules/tasks/services/task-management.service.js.map +1 -0
  203. package/dist/modules/tasks/services/task-tools.service.js +270 -0
  204. package/dist/modules/tasks/services/task-tools.service.js.map +1 -0
  205. package/dist/modules/tasks/tasks.module.js +49 -0
  206. package/dist/modules/tasks/tasks.module.js.map +1 -0
  207. package/dist/modules/tasks/types/task.types.js +21 -0
  208. package/dist/modules/tasks/types/task.types.js.map +1 -0
  209. package/dist/modules/tools/index.js +24 -0
  210. package/dist/modules/tools/index.js.map +1 -0
  211. package/dist/modules/tools/services/filesystem-tools.service.js +450 -0
  212. package/dist/modules/tools/services/filesystem-tools.service.js.map +1 -0
  213. package/dist/modules/tools/services/search-tools.service.js +63 -0
  214. package/dist/modules/tools/services/search-tools.service.js.map +1 -0
  215. package/dist/modules/tools/services/shell-tools.service.js +194 -0
  216. package/dist/modules/tools/services/shell-tools.service.js.map +1 -0
  217. package/dist/modules/tools/services/tools-registry.service.js +83 -0
  218. package/dist/modules/tools/services/tools-registry.service.js.map +1 -0
  219. package/dist/modules/tools/tools.module.js +46 -0
  220. package/dist/modules/tools/tools.module.js.map +1 -0
  221. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/modules/repl/services/commands/mcp-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\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 const w = (s: string) => process.stdout.write(s);\n \n smartInput.pause();\n\n try {\n switch (sub) {\n case 'menu':\n await this.showMcpMenu(smartInput);\n break;\n\n case 'list': {\n await this.listServers();\n break;\n }\n\n case 'tools': {\n await this.listTools();\n break;\n }\n\n case 'add': {\n await this.addMcpWizard(smartInput);\n break;\n }\n\n case 'remove': {\n await this.removeMcpWizard(smartInput);\n break;\n }\n\n case 'test': {\n await this.testMcpTool(smartInput);\n break;\n }\n\n case 'what':\n case 'about':\n this.printWhatIsMcp();\n break;\n\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: 'Adicionar servidor', description: 'Configurar novo MCP' },\n { key: '4', label: 'Remover servidor', description: 'Desconectar MCP' },\n { key: '5', label: 'O que é MCP?', description: 'Entenda o protocolo' },\n { key: '6', label: 'Como criar um MCP', description: 'Guia de desenvolvimento' },\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 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.addMcpWizard(smartInput);\n break;\n case '4':\n await this.removeMcpWizard(smartInput);\n break;\n case '5':\n this.printWhatIsMcp();\n break;\n case '6':\n this.printHowToCreate();\n break;\n case 'q':\n return;\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 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 fs = require('fs');\n const path = require('path');\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 (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 fs = require('fs');\n const path = require('path');\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","w","s","process","stdout","write","pause","showMcpMenu","listServers","listTools","addMcpWizard","removeMcpWizard","testMcpTool","printWhatIsMcp","printMcpHelp","error","CancelledPromptError","name","console","log","colorize","resume","Box","horizontal","repeat","summaries","mcpRegistry","getServerSummaries","totalTools","reduce","sum","toolCount","length","action","withEsc","askChoice","key","label","description","printHowToCreate","fn","Icons","cloud","statusIcon","status","statusText","transport","toolNames","toolDescriptions","slice","map","t","split","pop","join","more","tool","server","td","shortName","replace","desc","fs","require","path","mcpDir","cwd","existsSync","mkdirSync","recursive","category","selectWithEsc","message","choices","value","config","templates","getTemplatesByCategory","templateId","id","template","getTemplate","JSON","parse","stringify","credentials","cred","isArg","question","placeholder","trim","required","push","env","envVar","filePath","writeFileSync","type","nameInput","inputWithEsc","typeChoice","command","argsInput","a","hasEnv","confirmWithEsc","default","endpoint","toLowerCase","files","readdirSync","filter","f","endsWith","toRemove","select","confirmRemove","confirm","unlinkSync","mcpClient"],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ProjectCommandsService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ProjectCommandsService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
13
+ const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
14
+ const _projectanalyzerservice = require("../../../project/services/project-analyzer.service");
15
+ const _theme = require("../../utils/theme");
16
+ const _promptswithesc = require("../../utils/prompts-with-esc");
17
+ function _getRequireWildcardCache(nodeInterop) {
18
+ if (typeof WeakMap !== "function") return null;
19
+ var cacheBabelInterop = new WeakMap();
20
+ var cacheNodeInterop = new WeakMap();
21
+ return (_getRequireWildcardCache = function(nodeInterop) {
22
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
23
+ })(nodeInterop);
24
+ }
25
+ function _interop_require_wildcard(obj, nodeInterop) {
26
+ if (!nodeInterop && obj && obj.__esModule) {
27
+ return obj;
28
+ }
29
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
30
+ return {
31
+ default: obj
32
+ };
33
+ }
34
+ var cache = _getRequireWildcardCache(nodeInterop);
35
+ if (cache && cache.has(obj)) {
36
+ return cache.get(obj);
37
+ }
38
+ var newObj = {
39
+ __proto__: null
40
+ };
41
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
42
+ for(var key in obj){
43
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
44
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
45
+ if (desc && (desc.get || desc.set)) {
46
+ Object.defineProperty(newObj, key, desc);
47
+ } else {
48
+ newObj[key] = obj[key];
49
+ }
50
+ }
51
+ }
52
+ newObj.default = obj;
53
+ if (cache) {
54
+ cache.set(obj, newObj);
55
+ }
56
+ return newObj;
57
+ }
58
+ function _ts_decorate(decorators, target, key, desc) {
59
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
60
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
61
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
62
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
63
+ }
64
+ function _ts_metadata(k, v) {
65
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
66
+ }
67
+ let ProjectCommandsService = class ProjectCommandsService {
68
+ async cmdProject(args, smartInput) {
69
+ const sub = args[0] || 'analyze';
70
+ switch(sub){
71
+ case 'analyze':
72
+ case 'generate':
73
+ await this.generateContext(smartInput, false);
74
+ break;
75
+ case 'deep':
76
+ case 'project-deep':
77
+ await this.generateContext(smartInput, true);
78
+ break;
79
+ case 'show':
80
+ await this.showContext();
81
+ break;
82
+ case 'edit':
83
+ await this.editContext();
84
+ break;
85
+ case 'help':
86
+ default:
87
+ this.printProjectHelp();
88
+ break;
89
+ }
90
+ }
91
+ async generateContext(smartInput, useAgent) {
92
+ smartInput.pause();
93
+ const w = (s)=>process.stdout.write(s);
94
+ w('\r\n');
95
+ w((0, _theme.colorize)(_theme.Icons.folder + ' ', 'accent') + (0, _theme.colorize)('Análise de Projeto', 'bold') + '\r\n');
96
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(30), 'subtle') + '\r\n\r\n');
97
+ const castDir = _path.join(process.cwd(), '.cast');
98
+ const contextPath = _path.join(castDir, 'context.md');
99
+ const agentInstructionsPath = _path.join(castDir, 'agent-instructions.md');
100
+ try {
101
+ await _promises.mkdir(castDir, {
102
+ recursive: true
103
+ });
104
+ } catch {}
105
+ w((0, _theme.colorize)(' 🔍 Analisando estrutura do projeto...\r\n', 'info'));
106
+ try {
107
+ const context = await this.projectAnalyzer.analyze();
108
+ w((0, _theme.colorize)(` ✓ Linguagem principal: ${context.primaryLanguage}\r\n`, 'success'));
109
+ if (context.languages.length > 1) {
110
+ w((0, _theme.colorize)(` ✓ Outras linguagens: ${context.languages.slice(1).join(', ')}\r\n`, 'success'));
111
+ }
112
+ if (context.architecture) {
113
+ w((0, _theme.colorize)(` ✓ Arquitetura detectada: ${context.architecture.pattern} (${context.architecture.confidence})\r\n`, 'success'));
114
+ }
115
+ w((0, _theme.colorize)(` ✓ ${context.modules.length} módulo(s) encontrado(s)\r\n`, 'success'));
116
+ w((0, _theme.colorize)(` ✓ ${context.rawData.allFiles.length} arquivo(s) de código\r\n`, 'success'));
117
+ const markdown = this.projectAnalyzer.generateMarkdown(context);
118
+ await _promises.writeFile(contextPath, markdown, 'utf-8');
119
+ w(`\r\n${(0, _theme.colorize)('✓', 'success')} Contexto básico gerado: ${(0, _theme.colorize)(contextPath, 'accent')}\r\n`);
120
+ w((0, _theme.colorize)(' O Cast usará este contexto em todas as conversas!\r\n\r\n', 'muted'));
121
+ if (useAgent) {
122
+ w((0, _theme.colorize)(' 🤖 Gerando instruções para análise profunda...\r\n\r\n', 'info'));
123
+ const agentInstructions = this.projectAnalyzer.generateAgentInstructions(context);
124
+ await _promises.writeFile(agentInstructionsPath, agentInstructions, 'utf-8');
125
+ w(`${(0, _theme.colorize)('✓', 'success')} Instruções para agente: ${(0, _theme.colorize)(agentInstructionsPath, 'accent')}\r\n\r\n`);
126
+ w((0, _theme.colorize)('📋 Para análise profunda, você pode:\r\n', 'bold'));
127
+ w((0, _theme.colorize)(' 1. Copiar as instruções de ' + agentInstructionsPath + '\r\n', 'muted'));
128
+ w((0, _theme.colorize)(' 2. Colar em uma nova conversa com um agente especialista\r\n', 'muted'));
129
+ w((0, _theme.colorize)(' 3. O agente analisará profundamente o projeto\r\n\r\n', 'muted'));
130
+ }
131
+ const showPreview = await (0, _promptswithesc.confirmWithEsc)({
132
+ message: 'Deseja ver um preview do contexto gerado?',
133
+ default: true
134
+ });
135
+ if (showPreview === true) {
136
+ w('\r\n');
137
+ w((0, _theme.colorize)('─'.repeat(60), 'subtle') + '\r\n');
138
+ const lines = markdown.split('\n').slice(0, 40);
139
+ lines.forEach((line)=>{
140
+ const truncated = line.length > 78 ? line.slice(0, 75) + '...' : line;
141
+ w(' ' + truncated + '\r\n');
142
+ });
143
+ if (markdown.split('\n').length > 40) {
144
+ w((0, _theme.colorize)(' ... (mais conteúdo no arquivo)\r\n', 'muted'));
145
+ }
146
+ w((0, _theme.colorize)('─'.repeat(60), 'subtle') + '\r\n\r\n');
147
+ }
148
+ } catch (error) {
149
+ w(`\r\n${(0, _theme.colorize)('✗', 'error')} Erro ao analisar projeto: ${error.message}\r\n\r\n`);
150
+ } finally{
151
+ smartInput.resume();
152
+ }
153
+ }
154
+ async showContext() {
155
+ const w = (s)=>process.stdout.write(s);
156
+ const contextPath = _path.join(process.cwd(), '.cast', 'context.md');
157
+ w('\r\n');
158
+ w((0, _theme.colorize)(_theme.Icons.file + ' ', 'accent') + (0, _theme.colorize)('Contexto do Projeto', 'bold') + '\r\n');
159
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(30), 'subtle') + '\r\n\r\n');
160
+ try {
161
+ const content = await _promises.readFile(contextPath, 'utf-8');
162
+ w(content);
163
+ w('\r\n');
164
+ } catch {
165
+ w((0, _theme.colorize)(' ⚠️ Nenhum context.md encontrado!\r\n', 'warning'));
166
+ w((0, _theme.colorize)(' Use "/project" ou "/project analyze" para gerar.\r\n\r\n', 'muted'));
167
+ }
168
+ }
169
+ async editContext() {
170
+ const contextPath = _path.join(process.cwd(), '.cast', 'context.md');
171
+ const { spawn } = require('child_process');
172
+ const editor = process.env.EDITOR || 'code';
173
+ try {
174
+ spawn(editor, [
175
+ contextPath
176
+ ], {
177
+ detached: true,
178
+ stdio: 'ignore'
179
+ }).unref();
180
+ console.log(`\r\n ${(0, _theme.colorize)('✓', 'success')} Abrindo ${contextPath} no editor...\r\n`);
181
+ } catch {
182
+ console.log(`\r\n ${(0, _theme.colorize)('✗', 'error')} Não foi possível abrir o editor.\r\n`);
183
+ console.log(` ${(0, _theme.colorize)('Arquivo:', 'muted')} ${contextPath}\r\n\r\n`);
184
+ }
185
+ }
186
+ printProjectHelp() {
187
+ const w = (s)=>process.stdout.write(s);
188
+ w('\r\n');
189
+ w((0, _theme.colorize)(_theme.Icons.folder + ' ', 'accent') + (0, _theme.colorize)('Project Context Commands', 'bold') + '\r\n');
190
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(35), 'subtle') + '\r\n\r\n');
191
+ w((0, _theme.colorize)('Comandos:', 'bold') + '\r\n');
192
+ w(` ${(0, _theme.colorize)('/project', 'cyan')} → Análise rápida do projeto\r\n`);
193
+ w(` ${(0, _theme.colorize)('/project-deep', 'cyan')} → Análise profunda (gera instruções para agente)\r\n`);
194
+ w(` ${(0, _theme.colorize)('/project analyze', 'cyan')} → Gera context.md (mesmo que /project)\r\n`);
195
+ w(` ${(0, _theme.colorize)('/project deep', 'cyan')} → Análise + instruções para agente\r\n`);
196
+ w(` ${(0, _theme.colorize)('/project show', 'cyan')} → Mostra o contexto atual\r\n`);
197
+ w(` ${(0, _theme.colorize)('/project edit', 'cyan')} → Abre no editor\r\n\r\n`);
198
+ w((0, _theme.colorize)('Modo Rápido vs Profundo:', 'bold') + '\r\n\r\n');
199
+ w((0, _theme.colorize)('⚡ Modo Rápido (/project):', 'accent') + '\r\n');
200
+ w(` • Detecta linguagem (TypeScript, Python, Go, Rust, Java, etc.)\r\n`);
201
+ w(` • Identifica arquitetura (MVC, Clean, Hexagonal, DDD, etc.)\r\n`);
202
+ w(` • Lista módulos e suas responsabilidades\r\n`);
203
+ w(` • Extrai dependências principais\r\n`);
204
+ w(` • Funciona com QUALQUER linguagem/framework\r\n\r\n`);
205
+ w((0, _theme.colorize)('🤖 Modo Profundo (/project-deep):', 'accent') + '\r\n');
206
+ w(` • Faz tudo do modo rápido\r\n`);
207
+ w(` • Gera instruções para um agente especialista\r\n`);
208
+ w(` • O agente pode analisar fluxos de dados completos\r\n`);
209
+ w(` • Documenta casos de uso e regras de negócio\r\n`);
210
+ w(` • Identifica débito técnico\r\n\r\n`);
211
+ w((0, _theme.colorize)('Suporte a Linguagens:', 'bold') + '\r\n');
212
+ w(` TypeScript/JavaScript, Python, Go, Rust, Java, PHP, Ruby, C#\r\n\r\n`);
213
+ }
214
+ constructor(projectAnalyzer){
215
+ this.projectAnalyzer = projectAnalyzer;
216
+ }
217
+ };
218
+ ProjectCommandsService = _ts_decorate([
219
+ (0, _common.Injectable)(),
220
+ _ts_metadata("design:type", Function),
221
+ _ts_metadata("design:paramtypes", [
222
+ typeof _projectanalyzerservice.ProjectAnalyzerService === "undefined" ? Object : _projectanalyzerservice.ProjectAnalyzerService
223
+ ])
224
+ ], ProjectCommandsService);
225
+
226
+ //# sourceMappingURL=project-commands.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/modules/repl/services/commands/project-commands.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { ProjectAnalyzerService, ProjectContext } from '../../../project/services/project-analyzer.service';\nimport { Colors, colorize, Box, Icons } from '../../utils/theme';\nimport { confirmWithEsc } from '../../utils/prompts-with-esc';\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 ProjectCommandsService {\n constructor(\n private readonly projectAnalyzer: ProjectAnalyzerService,\n ) {}\n\n async cmdProject(args: string[], smartInput: SmartInput): Promise<void> {\n const sub = args[0] || 'analyze';\n \n switch (sub) {\n case 'analyze':\n case 'generate':\n await this.generateContext(smartInput, false);\n break;\n\n case 'deep':\n case 'project-deep':\n await this.generateContext(smartInput, true);\n break;\n\n case 'show':\n await this.showContext();\n break;\n\n case 'edit':\n await this.editContext();\n break;\n\n case 'help':\n default:\n this.printProjectHelp();\n break;\n }\n }\n\n private async generateContext(smartInput: SmartInput, useAgent: boolean): Promise<void> {\n smartInput.pause();\n \n const w = (s: string) => process.stdout.write(s);\n \n w('\\r\\n');\n w(colorize(Icons.folder + ' ', 'accent') + colorize('Análise de Projeto', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(30), 'subtle') + '\\r\\n\\r\\n');\n\n const castDir = path.join(process.cwd(), '.cast');\n const contextPath = path.join(castDir, 'context.md');\n const agentInstructionsPath = path.join(castDir, 'agent-instructions.md');\n\n try {\n await fs.mkdir(castDir, { recursive: true });\n } catch {}\n\n w(colorize(' 🔍 Analisando estrutura do projeto...\\r\\n', 'info'));\n\n try {\n const context = await this.projectAnalyzer.analyze();\n \n w(colorize(` ✓ Linguagem principal: ${context.primaryLanguage}\\r\\n`, 'success'));\n if (context.languages.length > 1) {\n w(colorize(` ✓ Outras linguagens: ${context.languages.slice(1).join(', ')}\\r\\n`, 'success'));\n }\n if (context.architecture) {\n w(colorize(` ✓ Arquitetura detectada: ${context.architecture.pattern} (${context.architecture.confidence})\\r\\n`, 'success'));\n }\n w(colorize(` ✓ ${context.modules.length} módulo(s) encontrado(s)\\r\\n`, 'success'));\n w(colorize(` ✓ ${context.rawData.allFiles.length} arquivo(s) de código\\r\\n`, 'success'));\n\n const markdown = this.projectAnalyzer.generateMarkdown(context);\n await fs.writeFile(contextPath, markdown, 'utf-8');\n\n w(`\\r\\n${colorize('✓', 'success')} Contexto básico gerado: ${colorize(contextPath, 'accent')}\\r\\n`);\n w(colorize(' O Cast usará este contexto em todas as conversas!\\r\\n\\r\\n', 'muted'));\n\n if (useAgent) {\n w(colorize(' 🤖 Gerando instruções para análise profunda...\\r\\n\\r\\n', 'info'));\n \n const agentInstructions = this.projectAnalyzer.generateAgentInstructions(context);\n await fs.writeFile(agentInstructionsPath, agentInstructions, 'utf-8');\n \n w(`${colorize('✓', 'success')} Instruções para agente: ${colorize(agentInstructionsPath, 'accent')}\\r\\n\\r\\n`);\n \n w(colorize('📋 Para análise profunda, você pode:\\r\\n', 'bold'));\n w(colorize(' 1. Copiar as instruções de ' + agentInstructionsPath + '\\r\\n', 'muted'));\n w(colorize(' 2. Colar em uma nova conversa com um agente especialista\\r\\n', 'muted'));\n w(colorize(' 3. O agente analisará profundamente o projeto\\r\\n\\r\\n', 'muted'));\n }\n\n const showPreview = await confirmWithEsc({\n message: 'Deseja ver um preview do contexto gerado?',\n default: true,\n });\n \n if (showPreview === true) {\n w('\\r\\n');\n w(colorize('─'.repeat(60), 'subtle') + '\\r\\n');\n const lines = markdown.split('\\n').slice(0, 40);\n lines.forEach(line => {\n const truncated = line.length > 78 ? line.slice(0, 75) + '...' : line;\n w(' ' + truncated + '\\r\\n');\n });\n if (markdown.split('\\n').length > 40) {\n w(colorize(' ... (mais conteúdo no arquivo)\\r\\n', 'muted'));\n }\n w(colorize('─'.repeat(60), 'subtle') + '\\r\\n\\r\\n');\n }\n\n } catch (error: any) {\n w(`\\r\\n${colorize('✗', 'error')} Erro ao analisar projeto: ${error.message}\\r\\n\\r\\n`);\n } finally {\n smartInput.resume();\n }\n }\n\n private async showContext(): Promise<void> {\n const w = (s: string) => process.stdout.write(s);\n const contextPath = path.join(process.cwd(), '.cast', 'context.md');\n\n w('\\r\\n');\n w(colorize(Icons.file + ' ', 'accent') + colorize('Contexto do Projeto', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(30), 'subtle') + '\\r\\n\\r\\n');\n\n try {\n const content = await fs.readFile(contextPath, 'utf-8');\n w(content);\n w('\\r\\n');\n } catch {\n w(colorize(' ⚠️ Nenhum context.md encontrado!\\r\\n', 'warning'));\n w(colorize(' Use \"/project\" ou \"/project analyze\" para gerar.\\r\\n\\r\\n', 'muted'));\n }\n }\n\n private async editContext(): Promise<void> {\n const contextPath = path.join(process.cwd(), '.cast', 'context.md');\n \n const { spawn } = require('child_process');\n const editor = process.env.EDITOR || 'code';\n\n try {\n spawn(editor, [contextPath], { \n detached: true, \n stdio: 'ignore'\n }).unref();\n \n console.log(`\\r\\n ${colorize('✓', 'success')} Abrindo ${contextPath} no editor...\\r\\n`);\n } catch {\n console.log(`\\r\\n ${colorize('✗', 'error')} Não foi possível abrir o editor.\\r\\n`);\n console.log(` ${colorize('Arquivo:', 'muted')} ${contextPath}\\r\\n\\r\\n`);\n }\n }\n\n private printProjectHelp(): void {\n const w = (s: string) => process.stdout.write(s);\n\n w('\\r\\n');\n w(colorize(Icons.folder + ' ', 'accent') + colorize('Project Context Commands', 'bold') + '\\r\\n');\n w(colorize(Box.horizontal.repeat(35), 'subtle') + '\\r\\n\\r\\n');\n\n w(colorize('Comandos:', 'bold') + '\\r\\n');\n w(` ${colorize('/project', 'cyan')} → Análise rápida do projeto\\r\\n`);\n w(` ${colorize('/project-deep', 'cyan')} → Análise profunda (gera instruções para agente)\\r\\n`);\n w(` ${colorize('/project analyze', 'cyan')} → Gera context.md (mesmo que /project)\\r\\n`);\n w(` ${colorize('/project deep', 'cyan')} → Análise + instruções para agente\\r\\n`);\n w(` ${colorize('/project show', 'cyan')} → Mostra o contexto atual\\r\\n`);\n w(` ${colorize('/project edit', 'cyan')} → Abre no editor\\r\\n\\r\\n`);\n\n w(colorize('Modo Rápido vs Profundo:', 'bold') + '\\r\\n\\r\\n');\n \n w(colorize('⚡ Modo Rápido (/project):', 'accent') + '\\r\\n');\n w(` • Detecta linguagem (TypeScript, Python, Go, Rust, Java, etc.)\\r\\n`);\n w(` • Identifica arquitetura (MVC, Clean, Hexagonal, DDD, etc.)\\r\\n`);\n w(` • Lista módulos e suas responsabilidades\\r\\n`);\n w(` • Extrai dependências principais\\r\\n`);\n w(` • Funciona com QUALQUER linguagem/framework\\r\\n\\r\\n`);\n \n w(colorize('🤖 Modo Profundo (/project-deep):', 'accent') + '\\r\\n');\n w(` • Faz tudo do modo rápido\\r\\n`);\n w(` • Gera instruções para um agente especialista\\r\\n`);\n w(` • O agente pode analisar fluxos de dados completos\\r\\n`);\n w(` • Documenta casos de uso e regras de negócio\\r\\n`);\n w(` • Identifica débito técnico\\r\\n\\r\\n`);\n\n w(colorize('Suporte a Linguagens:', 'bold') + '\\r\\n');\n w(` TypeScript/JavaScript, Python, Go, Rust, Java, PHP, Ruby, C#\\r\\n\\r\\n`);\n }\n}\n"],"names":["ProjectCommandsService","cmdProject","args","smartInput","sub","generateContext","showContext","editContext","printProjectHelp","useAgent","pause","w","s","process","stdout","write","colorize","Icons","folder","Box","horizontal","repeat","castDir","path","join","cwd","contextPath","agentInstructionsPath","fs","mkdir","recursive","context","projectAnalyzer","analyze","primaryLanguage","languages","length","slice","architecture","pattern","confidence","modules","rawData","allFiles","markdown","generateMarkdown","writeFile","agentInstructions","generateAgentInstructions","showPreview","confirmWithEsc","message","default","lines","split","forEach","line","truncated","error","resume","file","content","readFile","spawn","require","editor","env","EDITOR","detached","stdio","unref","console","log"],"mappings":"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"}
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ReplCommandsService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ReplCommandsService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _theme = require("../../utils/theme");
13
+ const _configservice = require("../../../../common/services/config.service");
14
+ const _deepagentservice = require("../../../core/services/deep-agent.service");
15
+ const _mcpregistryservice = require("../../../mcp/services/mcp-registry.service");
16
+ const _agentloaderservice = require("../../../agents/services/agent-loader.service");
17
+ const _skillregistryservice = require("../../../skills/services/skill-registry.service");
18
+ const _projectcontextservice = require("../../../project/services/project-context.service");
19
+ const _memoryservice = require("../../../memory/services/memory.service");
20
+ function _ts_decorate(decorators, target, key, desc) {
21
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
24
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
25
+ }
26
+ function _ts_metadata(k, v) {
27
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28
+ }
29
+ let ReplCommandsService = class ReplCommandsService {
30
+ printHelp() {
31
+ const header = (text, icon)=>{
32
+ const iconStr = icon ? (0, _theme.colorize)(icon + ' ', 'accent') : '';
33
+ return '\n' + iconStr + (0, _theme.colorize)(text, 'bold') + '\n' + (0, _theme.colorize)(_theme.Box.horizontal.repeat(text.length + (icon ? 2 : 0)), 'subtle') + '\n';
34
+ };
35
+ const cmd = (name, desc, nameWidth = 16)=>{
36
+ const paddedName = name.padEnd(nameWidth);
37
+ return ` ${(0, _theme.colorize)(paddedName, 'cyan')} ${(0, _theme.colorize)(desc, 'muted')}\r\n`;
38
+ };
39
+ process.stdout.write('\r\n');
40
+ process.stdout.write(header('Commands', _theme.Icons.diamond));
41
+ process.stdout.write(cmd('/help', 'Show this help'));
42
+ process.stdout.write(cmd('/clear', 'Clear conversation'));
43
+ process.stdout.write(cmd('/compact', 'Compact history'));
44
+ process.stdout.write(cmd('/exit', 'Exit'));
45
+ process.stdout.write(header('Git', _theme.Icons.branch));
46
+ process.stdout.write(cmd('/status', 'Git status'));
47
+ process.stdout.write(cmd('/diff', 'Git diff'));
48
+ process.stdout.write(cmd('/log', 'Git log (recent 15)'));
49
+ process.stdout.write(cmd('/commit [msg]', 'Commit (AI-assisted or manual)'));
50
+ process.stdout.write(cmd('/up', 'Smart commit & push'));
51
+ process.stdout.write(cmd('/split-up', 'Split into multiple commits'));
52
+ process.stdout.write(cmd('/pr', 'Create PR with AI description'));
53
+ process.stdout.write(cmd('/review [files]', 'Code review'));
54
+ process.stdout.write(cmd('/fix <file>', 'Auto-fix code issues'));
55
+ process.stdout.write(cmd('/ident', 'Format all code files'));
56
+ process.stdout.write(cmd('/release [tag]', 'Generate release notes'));
57
+ process.stdout.write(header('Agents & Skills', _theme.Icons.robot));
58
+ process.stdout.write(cmd('/agents', 'List agents'));
59
+ process.stdout.write(cmd('/agents create', 'Create new agent'));
60
+ process.stdout.write(cmd('/skills', 'List skills'));
61
+ process.stdout.write(cmd('/skills create', 'Create new skill'));
62
+ process.stdout.write(header('Info', _theme.Icons.search));
63
+ process.stdout.write(cmd('/tools', 'List available tools'));
64
+ process.stdout.write(cmd('/context', 'Session info'));
65
+ process.stdout.write(cmd('/mentions', 'Mentions help (@)'));
66
+ process.stdout.write(header('Config', _theme.Icons.gear));
67
+ process.stdout.write(cmd('/model', 'Show/change model'));
68
+ process.stdout.write(cmd('/config', 'Show configuration'));
69
+ process.stdout.write(cmd('/init', 'Analyze project and generate context'));
70
+ process.stdout.write(cmd('/project-deep', 'Generate deep context + agent brief'));
71
+ process.stdout.write(header('MCP', _theme.Icons.cloud));
72
+ process.stdout.write(cmd('/mcp list', 'List MCP servers'));
73
+ process.stdout.write(cmd('/mcp tools', 'List MCP tools'));
74
+ process.stdout.write(cmd('/mcp add', 'Add new MCP server'));
75
+ process.stdout.write(cmd('/mcp help', 'MCP setup guide'));
76
+ process.stdout.write(header('Frontend Flow', _theme.Icons.lightbulb));
77
+ process.stdout.write(cmd('1) /mcp add', 'Connect Figma MCP'));
78
+ process.stdout.write(cmd('2) /init', 'Map project and create context'));
79
+ process.stdout.write(cmd('3) /agents', 'Ensure frontend agent is loaded'));
80
+ process.stdout.write(cmd('4) prompt', 'Ask to scaffold screens/components from Figma'));
81
+ process.stdout.write(header('Mentions', _theme.Icons.file));
82
+ process.stdout.write(cmd('@file.ts', 'Inject file content'));
83
+ process.stdout.write(cmd('@dir/', 'Inject directory listing'));
84
+ process.stdout.write(cmd('@git:status', 'Inject git status'));
85
+ process.stdout.write(header('Tips', _theme.Icons.lightbulb));
86
+ process.stdout.write(` ${(0, _theme.colorize)('Type /', 'dim')} Commands appear as you type\r\n`);
87
+ process.stdout.write(` ${(0, _theme.colorize)('Type @', 'dim')} File suggestions appear\r\n`);
88
+ process.stdout.write(` ${(0, _theme.colorize)('Tab', 'dim')} Accept suggestion\r\n`);
89
+ process.stdout.write(` ${(0, _theme.colorize)('↑↓', 'dim')} Navigate suggestions\r\n`);
90
+ process.stdout.write(` ${(0, _theme.colorize)('Ctrl+C', 'dim')} Cancel operation\r\n`);
91
+ process.stdout.write(` ${(0, _theme.colorize)('Ctrl+D', 'dim')} Exit\r\n`);
92
+ process.stdout.write('\r\n');
93
+ }
94
+ cmdClear(welcomeScreen) {
95
+ this.deepAgent.clearHistory();
96
+ process.stdout.write('\x1b[2J\x1b[H');
97
+ welcomeScreen.printBanner();
98
+ process.stdout.write(`${_theme.Colors.green} Conversation cleared${_theme.Colors.reset}\r\n`);
99
+ }
100
+ cmdContext() {
101
+ const w = (s)=>process.stdout.write(s);
102
+ w('\r\n');
103
+ w((0, _theme.colorize)(_theme.Icons.circle + ' ', 'accent') + (0, _theme.colorize)('Session Info', 'bold') + '\r\n');
104
+ w((0, _theme.colorize)(_theme.Box.horizontal.repeat(40), 'subtle') + '\r\n\r\n');
105
+ w(` ${(0, _theme.colorize)('Messages:', 'muted')} ${this.deepAgent.getMessageCount()}\r\n`);
106
+ w(` ${(0, _theme.colorize)('Tokens:', 'muted')} ${(0, _theme.colorize)(this.deepAgent.getTokenCount().toLocaleString(), 'cyan')}\r\n`);
107
+ w(` ${(0, _theme.colorize)('CWD:', 'muted')} ${(0, _theme.colorize)(process.cwd(), 'accent')}\r\n`);
108
+ w(` ${(0, _theme.colorize)('Model:', 'muted')} ${(0, _theme.colorize)(this.configService.getProvider() + '/' + this.configService.getModel(), 'cyan')}\r\n\r\n`);
109
+ const mcpSummaries = this.mcpRegistry.getServerSummaries();
110
+ const mcpConnected = mcpSummaries.filter((s)=>s.status === 'connected').length;
111
+ const mcpTotal = mcpSummaries.length;
112
+ const mcpTools = mcpSummaries.reduce((sum, s)=>sum + s.toolCount, 0);
113
+ w(` ${(0, _theme.colorize)('MCP Servers:', 'muted')} ${(0, _theme.colorize)(mcpConnected.toString(), mcpConnected > 0 ? 'success' : 'muted')}/${mcpTotal}`);
114
+ if (mcpTools > 0) {
115
+ w(` ${(0, _theme.colorize)(`(${mcpTools} tools)`, 'muted')}`);
116
+ }
117
+ w('\r\n');
118
+ if (mcpSummaries.length > 0) {
119
+ mcpSummaries.forEach((s)=>{
120
+ const icon = s.status === 'connected' ? (0, _theme.colorize)('●', 'success') : (0, _theme.colorize)('○', 'error');
121
+ w(` ${icon} ${(0, _theme.colorize)(s.name, 'cyan')} ${(0, _theme.colorize)(`(${s.toolCount} tools)`, 'muted')}\r\n`);
122
+ });
123
+ w('\r\n');
124
+ }
125
+ const agents = this.agentLoader.getAllAgents();
126
+ w(` ${(0, _theme.colorize)('Agents:', 'muted')} ${(0, _theme.colorize)(agents.length.toString(), 'cyan')}\r\n`);
127
+ if (agents.length > 0) {
128
+ const agentNames = agents.slice(0, 5).map((a)=>a.name).join(', ');
129
+ const more = agents.length > 5 ? ` +${agents.length - 5}` : '';
130
+ w(` ${(0, _theme.colorize)(agentNames + more, 'muted')}\r\n\r\n`);
131
+ } else {
132
+ w('\r\n');
133
+ }
134
+ const skills = this.skillRegistry.getAllSkills();
135
+ w(` ${(0, _theme.colorize)('Skills:', 'muted')} ${(0, _theme.colorize)(skills.length.toString(), 'cyan')}\r\n`);
136
+ if (skills.length > 0) {
137
+ const skillNames = skills.slice(0, 5).map((s)=>s.name).join(', ');
138
+ const more = skills.length > 5 ? ` +${skills.length - 5}` : '';
139
+ w(` ${(0, _theme.colorize)(skillNames + more, 'muted')}\r\n\r\n`);
140
+ } else {
141
+ w('\r\n');
142
+ }
143
+ const hasContext = this.projectContext.hasContext();
144
+ w(` ${(0, _theme.colorize)('Project:', 'muted')} ${hasContext ? (0, _theme.colorize)('✓ loaded', 'success') : (0, _theme.colorize)('not loaded', 'muted')}\r\n`);
145
+ try {
146
+ const memoryPath = this.memoryService['memoryPath'];
147
+ if (memoryPath) {
148
+ w(` ${(0, _theme.colorize)('Memory:', 'muted')} ${(0, _theme.colorize)('✓ enabled', 'success')}\r\n`);
149
+ }
150
+ } catch {
151
+ w(` ${(0, _theme.colorize)('Memory:', 'muted')} ${(0, _theme.colorize)('not configured', 'muted')}\r\n`);
152
+ }
153
+ w('\r\n');
154
+ }
155
+ cmdConfig() {
156
+ const fs = require('fs');
157
+ const path = require('path');
158
+ const castDir = path.join(process.cwd(), '.cast');
159
+ const hasCastDir = fs.existsSync(castDir);
160
+ process.stdout.write('\r\n');
161
+ process.stdout.write((0, _theme.colorize)(_theme.Icons.gear + ' ', 'accent') + (0, _theme.colorize)('Configuration', 'bold') + '\r\n');
162
+ process.stdout.write((0, _theme.colorize)(_theme.Box.horizontal.repeat(25), 'subtle') + '\r\n');
163
+ process.stdout.write(` ${(0, _theme.colorize)('Provider:', 'muted')} ${(0, _theme.colorize)(this.configService.getProvider(), 'cyan')}\r\n`);
164
+ process.stdout.write(` ${(0, _theme.colorize)('Model:', 'muted')} ${(0, _theme.colorize)(this.configService.getModel(), 'cyan')}\r\n`);
165
+ process.stdout.write(` ${(0, _theme.colorize)('CWD:', 'muted')} ${(0, _theme.colorize)(process.cwd(), 'accent')}\r\n`);
166
+ process.stdout.write(` ${(0, _theme.colorize)('Messages:', 'muted')} ${this.deepAgent.getMessageCount()}\r\n`);
167
+ process.stdout.write(` ${(0, _theme.colorize)('.cast/:', 'muted')} ${hasCastDir ? (0, _theme.colorize)('✓ found', 'success') : (0, _theme.colorize)('not found (use /project)', 'warning')}\r\n`);
168
+ process.stdout.write('\r\n');
169
+ }
170
+ cmdModel(args) {
171
+ if (args.length === 0) {
172
+ process.stdout.write('\r\n' + (0, _theme.colorize)(_theme.Icons.robot + ' ', 'accent') + (0, _theme.colorize)('Current Model', 'bold') + '\r\n');
173
+ process.stdout.write((0, _theme.colorize)(_theme.Box.horizontal.repeat(20), 'subtle') + '\r\n');
174
+ process.stdout.write(` Provider: ${(0, _theme.colorize)(this.configService.getProvider(), 'cyan')}\r\n`);
175
+ process.stdout.write(` Model: ${(0, _theme.colorize)(this.configService.getModel(), 'cyan')}\r\n\r\n`);
176
+ process.stdout.write(` ${(0, _theme.colorize)('Tip:', 'muted')} Set via env vars or .cast/config.md\r\n\r\n`);
177
+ return;
178
+ }
179
+ process.stdout.write(`${_theme.Colors.yellow} Model change requires restart${_theme.Colors.reset}\r\n`);
180
+ }
181
+ cmdInit() {
182
+ const fs = require('fs');
183
+ const path = require('path');
184
+ const castDir = path.join(process.cwd(), '.cast');
185
+ if (fs.existsSync(castDir)) {
186
+ process.stdout.write(` ${_theme.Colors.dim}.cast/ already exists${_theme.Colors.reset}\r\n`);
187
+ return;
188
+ }
189
+ fs.mkdirSync(castDir, {
190
+ recursive: true
191
+ });
192
+ fs.mkdirSync(path.join(castDir, 'agents'), {
193
+ recursive: true
194
+ });
195
+ fs.mkdirSync(path.join(castDir, 'skills'), {
196
+ recursive: true
197
+ });
198
+ fs.mkdirSync(path.join(castDir, 'mcp'), {
199
+ recursive: true
200
+ });
201
+ fs.writeFileSync(path.join(castDir, 'config.md'), [
202
+ '---',
203
+ 'model: gpt-4.1',
204
+ '---',
205
+ '',
206
+ '# Project Context',
207
+ '',
208
+ 'Describe your project here.',
209
+ ''
210
+ ].join('\n'));
211
+ process.stdout.write(`${_theme.Colors.green} Initialized .cast/ directory${_theme.Colors.reset}\r\n`);
212
+ process.stdout.write(` ${_theme.Colors.dim}Created: config.md, agents/, skills/, mcp/${_theme.Colors.reset}\r\n\r\n`);
213
+ }
214
+ cmdMentionsHelp() {
215
+ process.stdout.write('\r\n');
216
+ process.stdout.write((0, _theme.colorize)(_theme.Icons.file + ' ', 'accent') + (0, _theme.colorize)('Mentions — inject context with @', 'bold') + '\r\n');
217
+ process.stdout.write((0, _theme.colorize)(_theme.Box.horizontal.repeat(35), 'subtle') + '\r\n');
218
+ process.stdout.write(` ${(0, _theme.colorize)('@path/to/file.ts', 'cyan')} Read file content\r\n`);
219
+ process.stdout.write(` ${(0, _theme.colorize)('@path/to/dir/', 'cyan')} List directory\r\n`);
220
+ process.stdout.write(` ${(0, _theme.colorize)('@https://url.com', 'cyan')} Fetch URL\r\n`);
221
+ process.stdout.write(` ${(0, _theme.colorize)('@git:status', 'cyan')} Git status\r\n`);
222
+ process.stdout.write(` ${(0, _theme.colorize)('@git:diff', 'cyan')} Git diff\r\n`);
223
+ process.stdout.write(` ${(0, _theme.colorize)('@git:log', 'cyan')} Git log\r\n`);
224
+ process.stdout.write(` ${(0, _theme.colorize)('@git:branch', 'cyan')} List branches\r\n`);
225
+ process.stdout.write('\r\n');
226
+ process.stdout.write(` ${(0, _theme.colorize)('Example:', 'muted')} "Explain this @src/main.ts"\r\n`);
227
+ process.stdout.write(` ${(0, _theme.colorize)('Tip:', 'muted')} Type @ and suggestions will appear\r\n`);
228
+ process.stdout.write('\r\n');
229
+ }
230
+ constructor(deepAgent, configService, mcpRegistry, agentLoader, skillRegistry, projectContext, memoryService){
231
+ this.deepAgent = deepAgent;
232
+ this.configService = configService;
233
+ this.mcpRegistry = mcpRegistry;
234
+ this.agentLoader = agentLoader;
235
+ this.skillRegistry = skillRegistry;
236
+ this.projectContext = projectContext;
237
+ this.memoryService = memoryService;
238
+ }
239
+ };
240
+ ReplCommandsService = _ts_decorate([
241
+ (0, _common.Injectable)(),
242
+ _ts_metadata("design:type", Function),
243
+ _ts_metadata("design:paramtypes", [
244
+ typeof _deepagentservice.DeepAgentService === "undefined" ? Object : _deepagentservice.DeepAgentService,
245
+ typeof _configservice.ConfigService === "undefined" ? Object : _configservice.ConfigService,
246
+ typeof _mcpregistryservice.McpRegistryService === "undefined" ? Object : _mcpregistryservice.McpRegistryService,
247
+ typeof _agentloaderservice.AgentLoaderService === "undefined" ? Object : _agentloaderservice.AgentLoaderService,
248
+ typeof _skillregistryservice.SkillRegistryService === "undefined" ? Object : _skillregistryservice.SkillRegistryService,
249
+ typeof _projectcontextservice.ProjectContextService === "undefined" ? Object : _projectcontextservice.ProjectContextService,
250
+ typeof _memoryservice.MemoryService === "undefined" ? Object : _memoryservice.MemoryService
251
+ ])
252
+ ], ReplCommandsService);
253
+
254
+ //# sourceMappingURL=repl-commands.service.js.map