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/project/services/project-analyzer.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { glob } from 'glob';\n\ninterface LanguageConfig {\n name: string;\n extensions: string[];\n configFiles: string[];\n entryPatterns: string[];\n importPatterns: RegExp[];\n commentPatterns: { single?: string; multi?: [string, string] };\n}\n\nconst LANGUAGES: Record<string, LanguageConfig> = {\n typescript: {\n name: 'TypeScript',\n extensions: ['.ts', '.tsx'],\n configFiles: ['tsconfig.json'],\n entryPatterns: ['src/main.ts', 'src/index.ts', 'index.ts', 'main.ts'],\n importPatterns: [\n /import\\s+.*?\\s+from\\s+['\"]([^'\"]+)['\"]/g,\n /import\\s*\\(['\"]([^'\"]+)['\"]\\)/g,\n /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n ],\n commentPatterns: { single: '//', multi: ['/*', '*/'] },\n },\n javascript: {\n name: 'JavaScript',\n extensions: ['.js', '.jsx', '.mjs'],\n configFiles: ['package.json', '.eslintrc.js'],\n entryPatterns: ['src/main.js', 'src/index.js', 'index.js', 'main.js', 'app.js'],\n importPatterns: [\n /import\\s+.*?\\s+from\\s+['\"]([^'\"]+)['\"]/g,\n /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n ],\n commentPatterns: { single: '//', multi: ['/*', '*/'] },\n },\n python: {\n name: 'Python',\n extensions: ['.py'],\n configFiles: ['pyproject.toml', 'requirements.txt', 'setup.py', 'Pipfile'],\n entryPatterns: ['main.py', 'app.py', 'src/main.py', '__main__.py', 'manage.py'],\n importPatterns: [\n /(?:from|import)\\s+([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)/g,\n ],\n commentPatterns: { single: '#', multi: ['\"\"\"', '\"\"\"'] },\n },\n go: {\n name: 'Go',\n extensions: ['.go'],\n configFiles: ['go.mod', 'go.sum'],\n entryPatterns: ['main.go', 'cmd/main.go', 'src/main.go'],\n importPatterns: [\n /import\\s+\\(\\s*([^)]+)\\)/g,\n /import\\s+['\"]([^'\"]+)['\"]/g,\n ],\n commentPatterns: { single: '//', multi: ['/*', '*/'] },\n },\n rust: {\n name: 'Rust',\n extensions: ['.rs'],\n configFiles: ['Cargo.toml', 'Cargo.lock'],\n entryPatterns: ['src/main.rs', 'src/lib.rs', 'main.rs'],\n importPatterns: [\n /use\\s+([a-zA-Z_][a-zA-Z0-9_:]*)/g,\n /extern\\s+crate\\s+([a-zA-Z_][a-zA-Z0-9_]*)/g,\n ],\n commentPatterns: { single: '//', multi: ['/*', '*/'] },\n },\n java: {\n name: 'Java',\n extensions: ['.java'],\n configFiles: ['pom.xml', 'build.gradle', 'gradlew'],\n entryPatterns: ['src/main/java/Main.java', 'src/Main.java', 'Main.java'],\n importPatterns: [\n /import\\s+([a-zA-Z_][a-zA-Z0-9_.]*)/g,\n ],\n commentPatterns: { single: '//', multi: ['/*', '*/'] },\n },\n php: {\n name: 'PHP',\n extensions: ['.php'],\n configFiles: ['composer.json', 'composer.lock'],\n entryPatterns: ['index.php', 'public/index.php', 'src/index.php'],\n importPatterns: [\n /use\\s+([a-zA-Z_][a-zA-Z0-9_\\\\]*)/g,\n /require(?:_once)?\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n /include(?:_once)?\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n ],\n commentPatterns: { single: '//', multi: ['/*', '*/'] },\n },\n ruby: {\n name: 'Ruby',\n extensions: ['.rb'],\n configFiles: ['Gemfile', 'Gemfile.lock', '*.gemspec'],\n entryPatterns: ['main.rb', 'app.rb', 'config.ru', 'bin/'],\n importPatterns: [\n /require\\s+['\"]([^'\"]+)['\"]/g,\n /require_relative\\s+['\"]([^'\"]+)['\"]/g,\n ],\n commentPatterns: { single: '#' },\n },\n csharp: {\n name: 'C#',\n extensions: ['.cs'],\n configFiles: ['*.csproj', '*.sln'],\n entryPatterns: ['Program.cs', 'Main.cs', 'Startup.cs'],\n importPatterns: [\n /using\\s+([a-zA-Z_][a-zA-Z0-9_.]*)/g,\n ],\n commentPatterns: { single: '//', multi: ['/*', '*/'] },\n },\n};\n\nconst ARCHITECTURE_PATTERNS = [\n {\n name: 'Layered Architecture',\n indicators: ['controllers', 'services', 'repositories', 'models', 'dao'],\n description: 'Separação em camadas: apresentação, negócio, dados',\n },\n {\n name: 'Clean Architecture',\n indicators: ['entities', 'usecases', 'adapters', 'frameworks', 'interfaces'],\n description: 'Independência de frameworks, testável, independente de UI e banco',\n },\n {\n name: 'Hexagonal Architecture (Ports & Adapters)',\n indicators: ['ports', 'adapters', 'domain', 'application'],\n description: 'Domínio no centro, adaptadores externos plugáveis',\n },\n {\n name: 'Microservices',\n indicators: ['services/', 'api/', 'gateway', 'proto/', 'grpc'],\n description: 'Serviços independentes, comunicação via API/mensagens',\n },\n {\n name: 'Serverless',\n indicators: ['functions/', 'handlers/', 'lambda', 'serverless.yml'],\n description: 'Funções como unidade de deployment, event-driven',\n },\n {\n name: 'Modular Monolith',\n indicators: ['modules/', 'bounded-contexts', 'packages/'],\n description: 'Monolito dividido em módulos bem definidos',\n },\n {\n name: 'Domain-Driven Design (DDD)',\n indicators: ['domain/', 'aggregates', 'value-objects', 'entities', 'domain-events'],\n description: 'Modelagem focada no domínio de negócio',\n },\n {\n name: 'CQRS',\n indicators: ['commands/', 'queries/', 'handlers/', 'read-model', 'write-model'],\n description: 'Separação de leitura e escrita',\n },\n {\n name: 'Event Sourcing',\n indicators: ['events/', 'event-store', 'projections', 'aggregates'],\n description: 'Estado derivado de uma sequência de eventos',\n },\n {\n name: 'MVC/MVP/MVVM',\n indicators: ['views/', 'viewmodels', 'presenters', 'controllers'],\n description: 'Separação de concerns de UI',\n },\n];\n\n// Pattern roles based on file/directory names\nconst PATTERN_ROLES: Record<string, string> = {\n // Controllers\n controller: 'Controlador - Recebe requisições, delega processamento',\n handler: 'Handler - Processa requisições/eventos',\n resource: 'Resource - Endpoints REST',\n router: 'Router - Define rotas',\n route: 'Route - Configuração de rota',\n service: 'Serviço - Lógica de negócio',\n usecase: 'Caso de Uso - Orquestra operação específica',\n interactor: 'Interactor - Coordena fluxo de dados',\n repository: 'Repositório - Acesso a dados',\n dao: 'DAO - Data Access Object',\n model: 'Modelo - Entidade/Modelo de dados',\n entity: 'Entidade - Objeto de domínio',\n schema: 'Schema - Definição de estrutura de dados',\n migration: 'Migration - Alteração de banco de dados',\n aggregate: 'Aggregate - Raiz de agregação DDD',\n valueobject: 'Value Object - Objeto de valor imutável',\n domainevent: 'Domain Event - Evento de domínio',\n adapter: 'Adapter - Adapta interface externa',\n gateway: 'Gateway - Interface para sistema externo',\n client: 'Client - Cliente HTTP/API',\n provider: 'Provider - Provedor de serviço/dependência',\n config: 'Configuração - Setup e configurações',\n settings: 'Settings - Configurações do projeto',\n env: 'Environment - Variáveis de ambiente',\n utils: 'Utilitários - Funções auxiliares',\n helpers: 'Helpers - Funções de apoio',\n common: 'Common - Código compartilhado',\n shared: 'Shared - Recursos compartilhados',\n lib: 'Library - Biblioteca interna',\n test: 'Teste - Testes unitários/integração',\n spec: 'Spec - Especificação/teste',\n mock: 'Mock - Simulação para testes',\n fixture: 'Fixture - Dados de teste',\n component: 'Componente - Componente de UI',\n page: 'Page - Página da aplicação',\n layout: 'Layout - Template de layout',\n style: 'Style - Estilos CSS/styled',\n event: 'Event - Definição de evento',\n listener: 'Listener - Ouvinte de evento',\n subscriber: 'Subscriber - Assinante de evento',\n producer: 'Producer - Produtor de evento',\n consumer: 'Consumer - Consumidor de evento/mensagem',\n middleware: 'Middleware - Interceptador de requisições',\n guard: 'Guard - Proteção de rotas/recursos',\n interceptor: 'Interceptor - Intercepta execução',\n filter: 'Filter - Filtro de dados/requisições',\n pipe: 'Pipe - Transformação de dados',\n decorator: 'Decorator - Decorador/annotation',\n job: 'Job - Tarefa em background',\n worker: 'Worker - Processador de tarefas',\n queue: 'Queue - Fila de processamento',\n schedule: 'Schedule - Tarefa agendada',\n cron: 'Cron - Job periódico',\n dto: 'DTO - Data Transfer Object',\n request: 'Request - Objeto de requisição',\n response: 'Response - Objeto de resposta',\n serializer: 'Serializer - Serialização de dados',\n validator: 'Validator - Validação de dados',\n};\n\nexport interface ProjectContext {\n name: string;\n objective: string;\n description: string;\n primaryLanguage: string;\n languages: string[];\n architecture?: {\n pattern: string;\n description: string;\n confidence: 'high' | 'medium' | 'low';\n };\n structure: {\n root: string;\n directories: string[];\n entryPoints: string[];\n };\n modules: Array<{\n name: string;\n path: string;\n role: string;\n fileCount: number;\n keyFiles: string[];\n }>;\n dependencies: {\n internal: string[];\n external: string[];\n };\n conventions: {\n naming: string;\n testing: boolean;\n linting: boolean;\n };\n rawData: {\n allFiles: string[];\n configFiles: string[];\n };\n}\n\n@Injectable()\nexport class ProjectAnalyzerService {\n \n async analyze(projectPath: string = process.cwd()): Promise<ProjectContext> {\n const name = path.basename(projectPath);\n \n const languages = await this.detectLanguages(projectPath);\n const primaryLanguage = languages[0] || 'unknown';\n \n const structure = await this.analyzeStructure(projectPath, primaryLanguage);\n \n const architecture = await this.detectArchitecture(projectPath, structure.directories);\n \n const modules = await this.analyzeModules(projectPath, structure.directories);\n \n const dependencies = await this.getDependencies(projectPath, primaryLanguage);\n \n const conventions = await this.detectConventions(projectPath);\n \n const allFiles = await this.getAllFiles(projectPath, languages);\n const configFiles = await this.getConfigFiles(projectPath);\n \n const objective = this.generateObjective(name, primaryLanguage, architecture);\n const description = this.generateDescription(name, primaryLanguage, architecture, modules.length);\n \n return {\n name,\n objective,\n description,\n primaryLanguage,\n languages,\n architecture,\n structure,\n modules,\n dependencies,\n conventions,\n rawData: {\n allFiles,\n configFiles,\n },\n };\n }\n \n private async detectLanguages(projectPath: string): Promise<string[]> {\n const languages: string[] = [];\n const counts: Record<string, number> = {};\n \n for (const [key, config] of Object.entries(LANGUAGES)) {\n try {\n const files = await glob(`**/*{${config.extensions.join(',')}}`, { \n cwd: projectPath,\n nodir: true,\n ignore: ['node_modules/**', '**/node_modules/**', '.git/**', 'dist/**', 'build/**', 'target/**'],\n });\n if (files.length > 0) {\n counts[key] = files.length;\n }\n } catch {}\n }\n \n return Object.entries(counts)\n .sort((a, b) => b[1] - a[1])\n .map(([lang]) => lang);\n }\n \n private async analyzeStructure(projectPath: string, primaryLanguage: string): Promise<ProjectContext['structure']> {\n const langConfig = LANGUAGES[primaryLanguage];\n const directories: string[] = [];\n const entryPoints: string[] = [];\n \n const commonDirs = ['src', 'lib', 'app', 'source', 'core', 'packages', 'internal', 'cmd', 'pkg'];\n \n for (const dir of commonDirs) {\n try {\n const stat = await fs.stat(path.join(projectPath, dir));\n if (stat.isDirectory()) {\n directories.push(dir);\n }\n } catch {}\n }\n \n if (langConfig) {\n for (const pattern of langConfig.entryPatterns) {\n try {\n await fs.access(path.join(projectPath, pattern));\n entryPoints.push(pattern);\n } catch {}\n }\n }\n \n return {\n root: projectPath,\n directories,\n entryPoints,\n };\n }\n \n private async detectArchitecture(\n projectPath: string, \n directories: string[]\n ): Promise<ProjectContext['architecture'] | undefined> {\n const dirSet = new Set(directories.map(d => d.toLowerCase()));\n const allDirs = await this.getAllDirectories(projectPath);\n const allDirsLower = allDirs.map(d => d.toLowerCase());\n \n let bestMatch: { pattern: typeof ARCHITECTURE_PATTERNS[0]; count: number } | null = null;\n \n for (const pattern of ARCHITECTURE_PATTERNS) {\n const matchingIndicators = pattern.indicators.filter(indicator => \n allDirsLower.some(dir => dir.includes(indicator.toLowerCase()))\n );\n \n if (matchingIndicators.length > 0) {\n if (!bestMatch || matchingIndicators.length > bestMatch.count) {\n bestMatch = { pattern, count: matchingIndicators.length };\n }\n }\n }\n \n if (bestMatch) {\n const confidence = bestMatch.count >= 3 ? 'high' : bestMatch.count >= 2 ? 'medium' : 'low';\n return {\n pattern: bestMatch.pattern.name,\n description: bestMatch.pattern.description,\n confidence,\n };\n }\n \n return undefined;\n }\n \n private async analyzeModules(projectPath: string, directories: string[]): Promise<ProjectContext['modules']> {\n const modules: ProjectContext['modules'] = [];\n \n for (const dir of directories) {\n const dirPath = path.join(projectPath, dir);\n try {\n const entries = await fs.readdir(dirPath, { withFileTypes: true });\n \n for (const entry of entries) {\n if (entry.isDirectory() && !entry.name.startsWith('.') && !entry.name.startsWith('_')) {\n const modulePath = path.join(dirPath, entry.name);\n const files = await this.getFilesInDir(modulePath);\n const keyFiles = files.slice(0, 5);\n \n const role = this.detectRole(entry.name);\n \n modules.push({\n name: entry.name,\n path: path.join(dir, entry.name),\n role,\n fileCount: files.length,\n keyFiles,\n });\n }\n }\n } catch {}\n }\n \n return modules.sort((a, b) => b.fileCount - a.fileCount);\n }\n \n private detectRole(dirName: string): string {\n const lower = dirName.toLowerCase();\n \n for (const [pattern, role] of Object.entries(PATTERN_ROLES)) {\n if (lower.includes(pattern)) {\n return role;\n }\n }\n \n if (['auth', 'authentication', 'security'].some(p => lower.includes(p))) {\n return 'Autenticação e autorização';\n }\n if (['user', 'users', 'account', 'accounts'].some(p => lower.includes(p))) {\n return 'Gestão de usuários/contas';\n }\n if (['payment', 'billing', 'finance', 'subscription'].some(p => lower.includes(p))) {\n return 'Pagamentos e faturamento';\n }\n if (['notification', 'email', 'sms', 'push'].some(p => lower.includes(p))) {\n return 'Notificações';\n }\n if (['api', 'rest', 'graphql', 'grpc'].some(p => lower.includes(p))) {\n return 'API/Interface externa';\n }\n if (['db', 'database', 'storage', 'cache'].some(p => lower.includes(p))) {\n return 'Persistência de dados';\n }\n if (['queue', 'job', 'worker', 'background'].some(p => lower.includes(p))) {\n return 'Processamento em background';\n }\n if (['frontend', 'web', 'ui', 'mobile', 'app'].some(p => lower.includes(p))) {\n return 'Interface do usuário';\n }\n \n return 'Funcionalidade específica do domínio';\n }\n \n private async getDependencies(\n projectPath: string, \n language: string\n ): Promise<ProjectContext['dependencies']> {\n const internal: string[] = [];\n const external: string[] = [];\n \n switch (language) {\n case 'typescript':\n case 'javascript':\n try {\n const pkg = JSON.parse(await fs.readFile(path.join(projectPath, 'package.json'), 'utf-8'));\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n \n for (const [name, version] of Object.entries(allDeps)) {\n if (name.startsWith('@') && name.includes('/')) {\n const scope = name.split('/')[0];\n if (scope === `@${pkg.name}` || name.startsWith('@internal')) {\n internal.push(name);\n } else {\n external.push(name);\n }\n } else {\n external.push(name);\n }\n }\n } catch {}\n break;\n \n case 'python':\n try {\n const requirements = await fs.readFile(path.join(projectPath, 'requirements.txt'), 'utf-8');\n external.push(...requirements\n .split('\\n')\n .map(line => line.split('==')[0].split('>=')[0].trim())\n .filter(line => line && !line.startsWith('#') && !line.startsWith('-'))\n );\n } catch {}\n break;\n \n case 'go':\n try {\n const modContent = await fs.readFile(path.join(projectPath, 'go.mod'), 'utf-8');\n const matches = modContent.match(/require\\s+\\(([^)]+)\\)/s);\n if (matches) {\n external.push(...matches[1]\n .split('\\n')\n .map(line => line.trim().split(' ')[0])\n .filter(line => line && !line.startsWith('//'))\n );\n }\n } catch {}\n break;\n \n case 'rust':\n try {\n const cargo = await fs.readFile(path.join(projectPath, 'Cargo.toml'), 'utf-8');\n const matches = cargo.match(/\\[dependencies\\]([^\\[]+)/);\n if (matches) {\n external.push(...matches[1]\n .split('\\n')\n .map(line => line.split('=')[0].trim())\n .filter(line => line && !line.startsWith('#'))\n );\n }\n } catch {}\n break;\n }\n \n return {\n internal: [...new Set(internal)].slice(0, 10),\n external: [...new Set(external)].slice(0, 20),\n };\n }\n \n private async detectConventions(projectPath: string): Promise<ProjectContext['conventions']> {\n const naming = 'mixed';\n let testing = false;\n let linting = false;\n \n try {\n await fs.access(path.join(projectPath, 'test'));\n testing = true;\n } catch {\n try {\n await fs.access(path.join(projectPath, 'tests'));\n testing = true;\n } catch {}\n }\n \n const lintFiles = ['.eslintrc', '.eslintrc.js', '.eslintrc.json', 'pyproject.toml', 'setup.cfg'];\n for (const file of lintFiles) {\n try {\n await fs.access(path.join(projectPath, file));\n linting = true;\n break;\n } catch {}\n }\n \n return { naming, testing, linting };\n }\n \n private async getAllFiles(projectPath: string, languages: string[]): Promise<string[]> {\n const allFiles: string[] = [];\n const extensions = languages.flatMap(lang => LANGUAGES[lang]?.extensions || []);\n \n if (extensions.length === 0) return allFiles;\n \n try {\n const files = await glob(`**/*{${extensions.join(',')}}`, {\n cwd: projectPath,\n nodir: true,\n ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**', '**/build/**', '**/target/**', '**/__pycache__/**'],\n });\n allFiles.push(...files);\n } catch {}\n \n return allFiles.slice(0, 100);\n }\n \n private async getConfigFiles(projectPath: string): Promise<string[]> {\n const configFiles: string[] = [];\n const patterns = [\n '*.config.*',\n '.*rc*',\n 'Makefile',\n 'Dockerfile*',\n 'docker-compose*',\n '.env*',\n '*.toml',\n '*.yaml',\n '*.yml',\n '*.json',\n ];\n \n for (const pattern of patterns) {\n try {\n const files = await glob(pattern, { cwd: projectPath, nodir: true });\n configFiles.push(...files);\n } catch {}\n }\n \n return [...new Set(configFiles)].slice(0, 20);\n }\n \n private async getAllDirectories(projectPath: string): Promise<string[]> {\n const dirs: string[] = [];\n \n try {\n const entries = await fs.readdir(projectPath, { withFileTypes: true, recursive: true });\n for (const entry of entries) {\n if (entry.isDirectory() && \n !entry.name.startsWith('.') && \n !entry.name.startsWith('_') &&\n entry.name !== 'node_modules' &&\n entry.name !== 'dist' &&\n entry.name !== 'build') {\n dirs.push(entry.name);\n }\n }\n } catch {}\n \n return dirs;\n }\n \n private async getFilesInDir(dirPath: string): Promise<string[]> {\n try {\n const files = await glob('**/*', {\n cwd: dirPath,\n nodir: true,\n ignore: ['*.spec.*', '*.test.*', '*_test.*', '__pycache__/**'],\n });\n return files;\n } catch {\n return [];\n }\n }\n \n private generateObjective(name: string, language: string, architecture?: ProjectContext['architecture']): string {\n const parts = [`Desenvolver e manter o projeto ${name}`];\n \n if (language !== 'unknown') {\n parts.push(`utilizando ${LANGUAGES[language]?.name || language}`);\n }\n \n if (architecture) {\n parts.push(`com arquitetura ${architecture.pattern}`);\n }\n \n return parts.join(' ') + '.';\n }\n \n private generateDescription(\n name: string, \n language: string, \n architecture: ProjectContext['architecture'] | undefined,\n moduleCount: number\n ): string {\n const parts = [`Projeto ${name}`];\n \n if (language !== 'unknown') {\n parts.push(`desenvolvido em ${LANGUAGES[language]?.name || language}`);\n }\n \n if (architecture) {\n parts.push(`seguindo ${architecture.pattern}`);\n }\n \n if (moduleCount > 0) {\n parts.push(`com ${moduleCount} módulo(s) organizado(s)`);\n }\n \n return parts.join(' ') + '.';\n }\n \n generateMarkdown(context: ProjectContext): string {\n const lines: string[] = [];\n \n lines.push('---');\n lines.push(`name: ${context.name}`);\n lines.push(`objective: |`);\n lines.push(` ${context.objective}`);\n lines.push(`primary_language: ${context.primaryLanguage}`);\n lines.push(`languages:`);\n context.languages.forEach(lang => {\n const langName = LANGUAGES[lang]?.name || lang;\n lines.push(` - ${langName}`);\n });\n if (context.architecture) {\n lines.push(`architecture:`);\n lines.push(` pattern: ${context.architecture.pattern}`);\n lines.push(` confidence: ${context.architecture.confidence}`);\n }\n lines.push('---');\n lines.push('');\n \n lines.push('# Visão Geral');\n lines.push('');\n lines.push(context.description);\n lines.push('');\n \n if (context.architecture) {\n lines.push('## Arquitetura');\n lines.push('');\n lines.push(`**Padrão:** ${context.architecture.pattern}`);\n lines.push('');\n lines.push(`**Confiança:** ${context.architecture.confidence}`);\n lines.push('');\n lines.push(context.architecture.description);\n lines.push('');\n }\n \n lines.push('## Estrutura');\n lines.push('');\n \n if (context.structure.entryPoints.length > 0) {\n lines.push('### Pontos de Entrada');\n context.structure.entryPoints.forEach(ep => lines.push(`- \\`${ep}\\``));\n lines.push('');\n }\n \n if (context.structure.directories.length > 0) {\n lines.push('### Diretórios Principais');\n context.structure.directories.forEach(dir => lines.push(`- \\`${dir}/\\``));\n lines.push('');\n }\n \n if (context.modules.length > 0) {\n lines.push('## Módulos');\n lines.push('');\n \n context.modules.forEach(mod => {\n lines.push(`### ${mod.name}`);\n lines.push('');\n lines.push(`**Caminho:** \\`${mod.path}\\``);\n lines.push('');\n lines.push(`**Papel:** ${mod.role}`);\n lines.push('');\n lines.push(`**Arquivos:** ${mod.fileCount}`);\n lines.push('');\n if (mod.keyFiles.length > 0) {\n lines.push('**Arquivos-chave:**');\n mod.keyFiles.forEach(file => lines.push(`- \\`${file}\\``));\n lines.push('');\n }\n lines.push('---');\n lines.push('');\n });\n }\n \n if (context.dependencies.external.length > 0) {\n lines.push('## Dependências');\n lines.push('');\n lines.push('### Externas Principais');\n context.dependencies.external.slice(0, 15).forEach(dep => lines.push(`- ${dep}`));\n lines.push('');\n }\n \n if (context.dependencies.internal.length > 0) {\n lines.push('### Internas');\n context.dependencies.internal.forEach(dep => lines.push(`- ${dep}`));\n lines.push('');\n }\n \n lines.push('## Convenções');\n lines.push('');\n lines.push(`- **Nomenclatura:** ${context.conventions.naming}`);\n lines.push(`- **Testes:** ${context.conventions.testing ? 'Sim' : 'Não detectado'}`);\n lines.push(`- **Linting:** ${context.conventions.linting ? 'Sim' : 'Não detectado'}`);\n lines.push('');\n \n lines.push('## Estatísticas');\n lines.push('');\n lines.push(`- **Total de arquivos:** ${context.rawData.allFiles.length}`);\n lines.push(`- **Arquivos de configuração:** ${context.rawData.configFiles.length}`);\n lines.push(`- **Módulos:** ${context.modules.length}`);\n lines.push('');\n \n return lines.join('\\n');\n }\n \n generateAgentInstructions(context: ProjectContext): string {\n return `Analise profundamente o projeto \"${context.name}\" localizado em ${context.structure.root}.\n\n## Tarefas:\n\n1. **Explore a estrutura completa**\n - Liste todos os diretórios principais\n - Identifique a organização de pastas\n - Encontre todos os arquivos de configuração\n\n2. **Analise os módulos**\n${context.modules.map(m => ` - **${m.name}** (${m.path}): ${m.role}`).join('\\n')}\n\n3. **Entenda as dependências**\n - Analise o arquivo de dependências principal\n - Identifique dependências críticas\n - Entenda o propósito de cada dependência principal\n\n4. **Documente padrões de código**\n - Como são organizados os imports?\n - Quais convenções de nomenclatura são usadas?\n - Existe um estilo consistente de código?\n\n5. **Identifique fluxos de dados**\n - Como os dados fluem entre camadas?\n - Onde estão as validações?\n - Como é feita a persistência?\n\n6. **Encontre exemplos representativos**\n - Um controller/handler típico\n - Um serviço/caso de uso típico\n - Um modelo/entidade típica\n - Um teste típico (se existir)\n\n## Formato do Relatório:\n\nGere um resumo estruturado em Markdown com:\n\n### 1. Resumo Executivo\n- Propósito do projeto (1 parágrafo)\n- Arquitetura geral\n- Complexidade estimada\n\n### 2. Módulos Detalhados\nPara cada módulo encontrado:\n- Nome e propósito\n- Responsabilidades específicas\n- Interações com outros módulos\n- Arquivos principais\n\n### 3. Fluxos de Negócio\n- Principais operações/casos de uso\n- Como os dados entram e saem\n- Pontos críticos de validação\n\n### 4. Stack Completa\n- Linguagens e frameworks\n- Bancos de dados\n- Ferramentas de build/deploy\n- Bibliotecas significativas\n\n### 5. Convenções e Padrões\n- Estilo de código\n- Estrutura de commits\n- Organização de testes\n- Documentação\n\n### 6. Pontos de Atenção\n- Débito técnico aparente\n- Código duplicado\n- Dependências desatualizadas\n- Áreas complexas\n\nUse as ferramentas disponíveis para explorar o código e gerar este relatório.`;\n }\n}\n"],"names":["ProjectAnalyzerService","LANGUAGES","typescript","name","extensions","configFiles","entryPatterns","importPatterns","commentPatterns","single","multi","javascript","python","go","rust","java","php","ruby","csharp","ARCHITECTURE_PATTERNS","indicators","description","PATTERN_ROLES","controller","handler","resource","router","route","service","usecase","interactor","repository","dao","model","entity","schema","migration","aggregate","valueobject","domainevent","adapter","gateway","client","provider","config","settings","env","utils","helpers","common","shared","lib","test","spec","mock","fixture","component","page","layout","style","event","listener","subscriber","producer","consumer","middleware","guard","interceptor","filter","pipe","decorator","job","worker","queue","schedule","cron","dto","request","response","serializer","validator","analyze","projectPath","process","cwd","path","basename","languages","detectLanguages","primaryLanguage","structure","analyzeStructure","architecture","detectArchitecture","directories","modules","analyzeModules","dependencies","getDependencies","conventions","detectConventions","allFiles","getAllFiles","getConfigFiles","objective","generateObjective","generateDescription","length","rawData","counts","key","Object","entries","files","glob","join","nodir","ignore","sort","a","b","map","lang","langConfig","entryPoints","commonDirs","dir","stat","fs","isDirectory","push","pattern","access","root","dirSet","Set","d","toLowerCase","allDirs","getAllDirectories","allDirsLower","bestMatch","matchingIndicators","indicator","some","includes","count","confidence","undefined","dirPath","readdir","withFileTypes","entry","startsWith","modulePath","getFilesInDir","keyFiles","slice","role","detectRole","fileCount","dirName","lower","p","language","internal","external","pkg","JSON","parse","readFile","allDeps","devDependencies","version","scope","split","requirements","line","trim","modContent","matches","match","cargo","naming","testing","linting","lintFiles","file","flatMap","patterns","dirs","recursive","parts","moduleCount","generateMarkdown","context","lines","forEach","langName","ep","mod","dep","generateAgentInstructions","m"],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ProjectContextService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ProjectContextService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ function _ts_decorate(decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
+ 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;
16
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
17
+ }
18
+ let ProjectContextService = class ProjectContextService {
19
+ setContext(context) {
20
+ this.context = context;
21
+ }
22
+ getContext() {
23
+ return this.context;
24
+ }
25
+ getContextPrompt() {
26
+ if (!this.context) {
27
+ return '';
28
+ }
29
+ const parts = [];
30
+ parts.push(`# Project: ${this.context.name}`);
31
+ if (this.context.stack.length > 0) {
32
+ parts.push(`\n## Tech Stack\n${this.context.stack.map((s)=>`- ${s}`).join('\n')}`);
33
+ }
34
+ if (this.context.conventions.length > 0) {
35
+ parts.push(`\n## Conventions\n${this.context.conventions.map((c)=>`- ${c}`).join('\n')}`);
36
+ }
37
+ if (this.context.description) {
38
+ parts.push(`\n## Description\n${this.context.description}`);
39
+ }
40
+ if (this.context.structure) {
41
+ parts.push(`\n## Structure\n${Object.entries(this.context.structure).map(([k, v])=>`- ${k}: ${v}`).join('\n')}`);
42
+ }
43
+ if (this.context.rules && this.context.rules.length > 0) {
44
+ parts.push(`\n## Business Rules\n${this.context.rules.map((r)=>`- ${r}`).join('\n')}`);
45
+ }
46
+ return parts.join('\n');
47
+ }
48
+ hasContext() {
49
+ return this.context !== null;
50
+ }
51
+ clearContext() {
52
+ this.context = null;
53
+ }
54
+ constructor(){
55
+ this.context = null;
56
+ }
57
+ };
58
+ ProjectContextService = _ts_decorate([
59
+ (0, _common.Injectable)()
60
+ ], ProjectContextService);
61
+
62
+ //# sourceMappingURL=project-context.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/project/services/project-context.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport { ProjectContext } from '../types';\n\n@Injectable()\nexport class ProjectContextService {\n private context: ProjectContext | null = null;\n\n setContext(context: ProjectContext) {\n this.context = context;\n }\n\n getContext(): ProjectContext | null {\n return this.context;\n }\n\n getContextPrompt(): string {\n if (!this.context) {\n return '';\n }\n\n const parts: string[] = [];\n\n parts.push(`# Project: ${this.context.name}`);\n\n if (this.context.stack.length > 0) {\n parts.push(`\\n## Tech Stack\\n${this.context.stack.map((s) => `- ${s}`).join('\\n')}`);\n }\n\n if (this.context.conventions.length > 0) {\n parts.push(\n `\\n## Conventions\\n${this.context.conventions.map((c) => `- ${c}`).join('\\n')}`,\n );\n }\n\n if (this.context.description) {\n parts.push(`\\n## Description\\n${this.context.description}`);\n }\n\n if (this.context.structure) {\n parts.push(\n `\\n## Structure\\n${Object.entries(this.context.structure)\n .map(([k, v]) => `- ${k}: ${v}`)\n .join('\\n')}`,\n );\n }\n\n if (this.context.rules && this.context.rules.length > 0) {\n parts.push(`\\n## Business Rules\\n${this.context.rules.map((r) => `- ${r}`).join('\\n')}`);\n }\n\n return parts.join('\\n');\n }\n\n hasContext(): boolean {\n return this.context !== null;\n }\n\n clearContext() {\n this.context = null;\n }\n}\n"],"names":["ProjectContextService","setContext","context","getContext","getContextPrompt","parts","push","name","stack","length","map","s","join","conventions","c","description","structure","Object","entries","k","v","rules","r","hasContext","clearContext"],"mappings":";;;;+BAIaA;;;eAAAA;;;wBAJc;;;;;;;AAIpB,IAAA,AAAMA,wBAAN,MAAMA;IAGXC,WAAWC,OAAuB,EAAE;QAClC,IAAI,CAACA,OAAO,GAAGA;IACjB;IAEAC,aAAoC;QAClC,OAAO,IAAI,CAACD,OAAO;IACrB;IAEAE,mBAA2B;QACzB,IAAI,CAAC,IAAI,CAACF,OAAO,EAAE;YACjB,OAAO;QACT;QAEA,MAAMG,QAAkB,EAAE;QAE1BA,MAAMC,IAAI,CAAC,CAAC,WAAW,EAAE,IAAI,CAACJ,OAAO,CAACK,IAAI,EAAE;QAE5C,IAAI,IAAI,CAACL,OAAO,CAACM,KAAK,CAACC,MAAM,GAAG,GAAG;YACjCJ,MAAMC,IAAI,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAACJ,OAAO,CAACM,KAAK,CAACE,GAAG,CAAC,CAACC,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO;QACrF;QAEA,IAAI,IAAI,CAACV,OAAO,CAACW,WAAW,CAACJ,MAAM,GAAG,GAAG;YACvCJ,MAAMC,IAAI,CACR,CAAC,kBAAkB,EAAE,IAAI,CAACJ,OAAO,CAACW,WAAW,CAACH,GAAG,CAAC,CAACI,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEF,IAAI,CAAC,OAAO;QAEnF;QAEA,IAAI,IAAI,CAACV,OAAO,CAACa,WAAW,EAAE;YAC5BV,MAAMC,IAAI,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAACJ,OAAO,CAACa,WAAW,EAAE;QAC5D;QAEA,IAAI,IAAI,CAACb,OAAO,CAACc,SAAS,EAAE;YAC1BX,MAAMC,IAAI,CACR,CAAC,gBAAgB,EAAEW,OAAOC,OAAO,CAAC,IAAI,CAAChB,OAAO,CAACc,SAAS,EACrDN,GAAG,CAAC,CAAC,CAACS,GAAGC,EAAE,GAAK,CAAC,EAAE,EAAED,EAAE,EAAE,EAAEC,GAAG,EAC9BR,IAAI,CAAC,OAAO;QAEnB;QAEA,IAAI,IAAI,CAACV,OAAO,CAACmB,KAAK,IAAI,IAAI,CAACnB,OAAO,CAACmB,KAAK,CAACZ,MAAM,GAAG,GAAG;YACvDJ,MAAMC,IAAI,CAAC,CAAC,qBAAqB,EAAE,IAAI,CAACJ,OAAO,CAACmB,KAAK,CAACX,GAAG,CAAC,CAACY,IAAM,CAAC,EAAE,EAAEA,GAAG,EAAEV,IAAI,CAAC,OAAO;QACzF;QAEA,OAAOP,MAAMO,IAAI,CAAC;IACpB;IAEAW,aAAsB;QACpB,OAAO,IAAI,CAACrB,OAAO,KAAK;IAC1B;IAEAsB,eAAe;QACb,IAAI,CAACtB,OAAO,GAAG;IACjB;;aAtDQA,UAAiC;;AAuD3C"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ProjectLoaderService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ProjectLoaderService;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
13
+ const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
14
+ const _markdownparserservice = require("../../../common/services/markdown-parser.service");
15
+ const _constants = require("../../../common/constants");
16
+ function _getRequireWildcardCache(nodeInterop) {
17
+ if (typeof WeakMap !== "function") return null;
18
+ var cacheBabelInterop = new WeakMap();
19
+ var cacheNodeInterop = new WeakMap();
20
+ return (_getRequireWildcardCache = function(nodeInterop) {
21
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
22
+ })(nodeInterop);
23
+ }
24
+ function _interop_require_wildcard(obj, nodeInterop) {
25
+ if (!nodeInterop && obj && obj.__esModule) {
26
+ return obj;
27
+ }
28
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
29
+ return {
30
+ default: obj
31
+ };
32
+ }
33
+ var cache = _getRequireWildcardCache(nodeInterop);
34
+ if (cache && cache.has(obj)) {
35
+ return cache.get(obj);
36
+ }
37
+ var newObj = {
38
+ __proto__: null
39
+ };
40
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
41
+ for(var key in obj){
42
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
43
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
44
+ if (desc && (desc.get || desc.set)) {
45
+ Object.defineProperty(newObj, key, desc);
46
+ } else {
47
+ newObj[key] = obj[key];
48
+ }
49
+ }
50
+ }
51
+ newObj.default = obj;
52
+ if (cache) {
53
+ cache.set(obj, newObj);
54
+ }
55
+ return newObj;
56
+ }
57
+ function _ts_decorate(decorators, target, key, desc) {
58
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
59
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
60
+ 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;
61
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
62
+ }
63
+ function _ts_metadata(k, v) {
64
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
65
+ }
66
+ let ProjectLoaderService = class ProjectLoaderService {
67
+ async detectProject(startPath = process.cwd()) {
68
+ let currentPath = startPath;
69
+ while(currentPath !== _path.parse(currentPath).root){
70
+ const configPath = _path.join(currentPath, _constants.CAST_DIR);
71
+ if (await this.markdownParser.exists(configPath)) {
72
+ return currentPath;
73
+ }
74
+ currentPath = _path.dirname(currentPath);
75
+ }
76
+ return null;
77
+ }
78
+ async loadProject(projectPath) {
79
+ const configDirPath = _path.join(projectPath, _constants.CAST_DIR);
80
+ if (!await this.markdownParser.exists(configDirPath)) {
81
+ return {};
82
+ }
83
+ const config = {};
84
+ const contextPath = _path.join(configDirPath, 'context.md');
85
+ if (await this.markdownParser.exists(contextPath)) {
86
+ const { frontmatter, content } = await this.markdownParser.parse(contextPath);
87
+ config.context = {
88
+ name: frontmatter.name || _path.basename(projectPath),
89
+ stack: frontmatter.stack || [],
90
+ conventions: frontmatter.conventions || [],
91
+ description: content
92
+ };
93
+ }
94
+ const mcpPath = _path.join(configDirPath, 'mcp');
95
+ if (await this.markdownParser.exists(mcpPath)) {
96
+ config.mcpConfigs = await this.loadMcpConfigs(mcpPath);
97
+ }
98
+ return config;
99
+ }
100
+ async loadMcpConfigs(mcpPath) {
101
+ const configs = {};
102
+ try {
103
+ const files = await _promises.readdir(mcpPath);
104
+ for (const file of files){
105
+ if (!file.endsWith('.json')) continue;
106
+ const filePath = _path.join(mcpPath, file);
107
+ const content = await _promises.readFile(filePath, 'utf-8');
108
+ const parsed = JSON.parse(content);
109
+ const name = file.replace('.json', '');
110
+ if (parsed.type) {
111
+ configs[name] = parsed;
112
+ } else {
113
+ for (const [serverName, serverConfig] of Object.entries(parsed)){
114
+ configs[serverName] = serverConfig;
115
+ }
116
+ }
117
+ }
118
+ } catch {
119
+ throw new _common.NotFoundException(`MCP configuration directory not found: ${mcpPath}`);
120
+ }
121
+ return configs;
122
+ }
123
+ getAgentsOverridePath(projectPath) {
124
+ return _path.join(projectPath, _constants.CAST_DIR, 'agents');
125
+ }
126
+ getSkillsOverridePath(projectPath) {
127
+ return _path.join(projectPath, _constants.CAST_DIR, 'skills');
128
+ }
129
+ getLegacyAgentsOverridePath(projectPath) {
130
+ return _path.join(projectPath, _constants.CAST_DIR, 'definitions', 'agents');
131
+ }
132
+ getLegacySkillsOverridePath(projectPath) {
133
+ return _path.join(projectPath, _constants.CAST_DIR, 'definitions', 'skills');
134
+ }
135
+ constructor(markdownParser){
136
+ this.markdownParser = markdownParser;
137
+ }
138
+ };
139
+ ProjectLoaderService = _ts_decorate([
140
+ (0, _common.Injectable)(),
141
+ _ts_metadata("design:type", Function),
142
+ _ts_metadata("design:paramtypes", [
143
+ typeof _markdownparserservice.MarkdownParserService === "undefined" ? Object : _markdownparserservice.MarkdownParserService
144
+ ])
145
+ ], ProjectLoaderService);
146
+
147
+ //# sourceMappingURL=project-loader.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/project/services/project-loader.service.ts"],"sourcesContent":["import { Injectable, NotFoundException } from '@nestjs/common';\nimport * as path from 'path';\nimport * as fs from 'fs/promises';\nimport { MarkdownParserService } from '../../../common/services/markdown-parser.service';\nimport { ProjectConfig, ProjectContextFrontmatter } from '../types';\nimport { McpConfig } from '../../mcp/types';\nimport { CAST_DIR } from '../../../common/constants';\n\n@Injectable()\nexport class ProjectLoaderService {\n constructor(private readonly markdownParser: MarkdownParserService) {}\n\n async detectProject(startPath: string = process.cwd()): Promise<string | null> {\n let currentPath = startPath;\n\n while (currentPath !== path.parse(currentPath).root) {\n const configPath = path.join(currentPath, CAST_DIR);\n\n if (await this.markdownParser.exists(configPath)) {\n return currentPath;\n }\n\n currentPath = path.dirname(currentPath);\n }\n\n return null;\n }\n\n async loadProject(projectPath: string): Promise<ProjectConfig> {\n const configDirPath = path.join(projectPath, CAST_DIR);\n\n if (!(await this.markdownParser.exists(configDirPath))) {\n return {};\n }\n\n const config: ProjectConfig = {};\n\n const contextPath = path.join(configDirPath, 'context.md');\n if (await this.markdownParser.exists(contextPath)) {\n const { frontmatter, content } =\n await this.markdownParser.parse<ProjectContextFrontmatter>(contextPath);\n\n config.context = {\n name: frontmatter.name || path.basename(projectPath),\n stack: frontmatter.stack || [],\n conventions: frontmatter.conventions || [],\n description: content,\n };\n }\n\n const mcpPath = path.join(configDirPath, 'mcp');\n if (await this.markdownParser.exists(mcpPath)) {\n config.mcpConfigs = await this.loadMcpConfigs(mcpPath);\n }\n\n return config;\n }\n\n private async loadMcpConfigs(mcpPath: string): Promise<Record<string, McpConfig>> {\n const configs: Record<string, McpConfig> = {};\n\n try {\n const files = await fs.readdir(mcpPath);\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue;\n\n const filePath = path.join(mcpPath, file);\n const content = await fs.readFile(filePath, 'utf-8');\n const parsed = JSON.parse(content);\n const name = file.replace('.json', '');\n\n if (parsed.type) {\n configs[name] = parsed as McpConfig;\n } else {\n for (const [serverName, serverConfig] of Object.entries(parsed)) {\n configs[serverName] = serverConfig as McpConfig;\n }\n }\n }\n } catch {\n throw new NotFoundException(`MCP configuration directory not found: ${mcpPath}`);\n }\n\n return configs;\n }\n\n getAgentsOverridePath(projectPath: string): string {\n return path.join(projectPath, CAST_DIR, 'agents');\n }\n\n getSkillsOverridePath(projectPath: string): string {\n return path.join(projectPath, CAST_DIR, 'skills');\n }\n\n getLegacyAgentsOverridePath(projectPath: string): string {\n return path.join(projectPath, CAST_DIR, 'definitions', 'agents');\n }\n\n getLegacySkillsOverridePath(projectPath: string): string {\n return path.join(projectPath, CAST_DIR, 'definitions', 'skills');\n }\n}\n"],"names":["ProjectLoaderService","detectProject","startPath","process","cwd","currentPath","path","parse","root","configPath","join","CAST_DIR","markdownParser","exists","dirname","loadProject","projectPath","configDirPath","config","contextPath","frontmatter","content","context","name","basename","stack","conventions","description","mcpPath","mcpConfigs","loadMcpConfigs","configs","files","fs","readdir","file","endsWith","filePath","readFile","parsed","JSON","replace","type","serverName","serverConfig","Object","entries","NotFoundException","getAgentsOverridePath","getSkillsOverridePath","getLegacyAgentsOverridePath","getLegacySkillsOverridePath"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _export_star(require("./project.types"), exports);
6
+ function _export_star(from, to) {
7
+ Object.keys(from).forEach(function(k) {
8
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
+ Object.defineProperty(to, k, {
10
+ enumerable: true,
11
+ get: function() {
12
+ return from[k];
13
+ }
14
+ });
15
+ }
16
+ });
17
+ return from;
18
+ }
19
+
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/project/types/index.ts"],"sourcesContent":["export * from './project.types';\n"],"names":[],"mappings":";;;;qBAAc"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=project.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/modules/project/types/project.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _export_star(require("./repl.module"), exports);
6
+ _export_star(require("./services/repl.service"), exports);
7
+ function _export_star(from, to) {
8
+ Object.keys(from).forEach(function(k) {
9
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
10
+ Object.defineProperty(to, k, {
11
+ enumerable: true,
12
+ get: function() {
13
+ return from[k];
14
+ }
15
+ });
16
+ }
17
+ });
18
+ return from;
19
+ }
20
+
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/repl/index.ts"],"sourcesContent":["export * from './repl.module';\nexport * from './services/repl.service';\n"],"names":[],"mappings":";;;;qBAAc;qBACA"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ReplModule", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ReplModule;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _replservice = require("./services/repl.service");
13
+ const _welcomescreenservice = require("./services/welcome-screen.service");
14
+ const _replcommandsservice = require("./services/commands/repl-commands.service");
15
+ const _gitcommandsservice = require("./services/commands/git-commands.service");
16
+ const _agentcommandsservice = require("./services/commands/agent-commands.service");
17
+ const _mcpcommandsservice = require("./services/commands/mcp-commands.service");
18
+ const _configcommandsservice = require("../config/services/config-commands.service");
19
+ const _projectcommandsservice = require("./services/commands/project-commands.service");
20
+ const _coremodule = require("../core/core.module");
21
+ const _toolsmodule = require("../tools/tools.module");
22
+ const _gitmodule = require("../git/git.module");
23
+ const _agentsmodule = require("../agents/agents.module");
24
+ const _skillsmodule = require("../skills/skills.module");
25
+ const _mcpmodule = require("../mcp/mcp.module");
26
+ const _projectmodule = require("../project/project.module");
27
+ const _memorymodule = require("../memory/memory.module");
28
+ const _config = require("../config");
29
+ function _ts_decorate(decorators, target, key, desc) {
30
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
31
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
32
+ 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;
33
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
34
+ }
35
+ let ReplModule = class ReplModule {
36
+ };
37
+ ReplModule = _ts_decorate([
38
+ (0, _common.Module)({
39
+ imports: [
40
+ _config.ConfigModule,
41
+ _coremodule.CoreModule,
42
+ _toolsmodule.ToolsModule,
43
+ _gitmodule.GitModule,
44
+ _agentsmodule.AgentsModule,
45
+ _skillsmodule.SkillsModule,
46
+ _mcpmodule.McpModule,
47
+ _projectmodule.ProjectModule,
48
+ _memorymodule.MemoryModule
49
+ ],
50
+ providers: [
51
+ _replservice.ReplService,
52
+ _welcomescreenservice.WelcomeScreenService,
53
+ _replcommandsservice.ReplCommandsService,
54
+ _gitcommandsservice.GitCommandsService,
55
+ _agentcommandsservice.AgentCommandsService,
56
+ _mcpcommandsservice.McpCommandsService,
57
+ _configcommandsservice.ConfigCommandsService,
58
+ _projectcommandsservice.ProjectCommandsService
59
+ ],
60
+ exports: [
61
+ _replservice.ReplService
62
+ ]
63
+ })
64
+ ], ReplModule);
65
+
66
+ //# sourceMappingURL=repl.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/repl/repl.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common';\nimport { ReplService } from './services/repl.service';\nimport { WelcomeScreenService } from './services/welcome-screen.service';\nimport { ReplCommandsService } from './services/commands/repl-commands.service';\nimport { GitCommandsService } from './services/commands/git-commands.service';\nimport { AgentCommandsService } from './services/commands/agent-commands.service';\nimport { McpCommandsService } from './services/commands/mcp-commands.service';\nimport { ConfigCommandsService } from '../config/services/config-commands.service';\nimport { ProjectCommandsService } from './services/commands/project-commands.service';\nimport { CoreModule } from '../core/core.module';\nimport { ToolsModule } from '../tools/tools.module';\nimport { GitModule } from '../git/git.module';\nimport { AgentsModule } from '../agents/agents.module';\nimport { SkillsModule } from '../skills/skills.module';\nimport { McpModule } from '../mcp/mcp.module';\nimport { ProjectModule } from '../project/project.module';\nimport { MemoryModule } from '../memory/memory.module';\nimport { ConfigModule } from '../config';\n\n@Module({\n imports: [ConfigModule, CoreModule, ToolsModule, GitModule, AgentsModule, SkillsModule, McpModule, ProjectModule, MemoryModule],\n providers: [\n ReplService,\n WelcomeScreenService,\n ReplCommandsService,\n GitCommandsService,\n AgentCommandsService,\n McpCommandsService,\n ConfigCommandsService,\n ProjectCommandsService,\n ],\n exports: [ReplService],\n})\nexport class ReplModule {}\n"],"names":["ReplModule","imports","ConfigModule","CoreModule","ToolsModule","GitModule","AgentsModule","SkillsModule","McpModule","ProjectModule","MemoryModule","providers","ReplService","WelcomeScreenService","ReplCommandsService","GitCommandsService","AgentCommandsService","McpCommandsService","ConfigCommandsService","ProjectCommandsService","exports"],"mappings":";;;;+BAiCaA;;;eAAAA;;;wBAjCU;6BACK;sCACS;qCACD;oCACD;sCACE;oCACF;uCACG;wCACC;4BACZ;6BACC;2BACF;8BACG;8BACA;2BACH;+BACI;8BACD;wBACA;;;;;;;AAgBtB,IAAA,AAAMA,aAAN,MAAMA;AAAY;;;QAbvBC,SAAS;YAACC,oBAAY;YAAEC,sBAAU;YAAEC,wBAAW;YAAEC,oBAAS;YAAEC,0BAAY;YAAEC,0BAAY;YAAEC,oBAAS;YAAEC,4BAAa;YAAEC,0BAAY;SAAC;QAC/HC,WAAW;YACTC,wBAAW;YACXC,0CAAoB;YACpBC,wCAAmB;YACnBC,sCAAkB;YAClBC,0CAAoB;YACpBC,sCAAkB;YAClBC,4CAAqB;YACrBC,8CAAsB;SACvB;QACDC,SAAS;YAACR,wBAAW;SAAC"}