ai-first-cli 1.2.3 → 1.3.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 (470) hide show
  1. package/CHANGELOG.md +292 -6
  2. package/README.md +24 -4
  3. package/dist/analyzers/symbols.d.ts.map +1 -1
  4. package/dist/analyzers/symbols.js +9 -7
  5. package/dist/analyzers/symbols.js.map +1 -1
  6. package/dist/analyzers/techStack.d.ts.map +1 -1
  7. package/dist/analyzers/techStack.js +198 -3
  8. package/dist/analyzers/techStack.js.map +1 -1
  9. package/dist/commands/ai-first.d.ts.map +1 -1
  10. package/dist/commands/ai-first.js +14 -13
  11. package/dist/commands/ai-first.js.map +1 -1
  12. package/dist/core/analysis/architectureDetector.d.ts +37 -0
  13. package/dist/core/analysis/architectureDetector.d.ts.map +1 -0
  14. package/dist/core/analysis/architectureDetector.js +316 -0
  15. package/dist/core/analysis/architectureDetector.js.map +1 -0
  16. package/dist/core/analysis/callGraphBuilder.d.ts +37 -0
  17. package/dist/core/analysis/callGraphBuilder.d.ts.map +1 -0
  18. package/dist/core/analysis/callGraphBuilder.js +101 -0
  19. package/dist/core/analysis/callGraphBuilder.js.map +1 -0
  20. package/dist/core/analysis/dependencyAnalyzer.d.ts +45 -0
  21. package/dist/core/analysis/dependencyAnalyzer.d.ts.map +1 -0
  22. package/dist/core/analysis/dependencyAnalyzer.js +98 -0
  23. package/dist/core/analysis/dependencyAnalyzer.js.map +1 -0
  24. package/dist/core/analysis/index.d.ts +5 -0
  25. package/dist/core/analysis/index.d.ts.map +1 -0
  26. package/dist/core/analysis/index.js +5 -0
  27. package/dist/core/analysis/index.js.map +1 -0
  28. package/dist/core/analysis/inheritanceAnalyzer.d.ts +35 -0
  29. package/dist/core/analysis/inheritanceAnalyzer.d.ts.map +1 -0
  30. package/dist/core/analysis/inheritanceAnalyzer.js +115 -0
  31. package/dist/core/analysis/inheritanceAnalyzer.js.map +1 -0
  32. package/dist/core/ccp.d.ts.map +1 -1
  33. package/dist/core/ccp.js +3 -2
  34. package/dist/core/ccp.js.map +1 -1
  35. package/dist/core/generation/aiContextGenerator.d.ts +71 -0
  36. package/dist/core/generation/aiContextGenerator.d.ts.map +1 -0
  37. package/dist/core/generation/aiContextGenerator.js +217 -0
  38. package/dist/core/generation/aiContextGenerator.js.map +1 -0
  39. package/dist/core/generation/architectureGenerator.d.ts +17 -0
  40. package/dist/core/generation/architectureGenerator.d.ts.map +1 -0
  41. package/dist/core/generation/architectureGenerator.js +160 -0
  42. package/dist/core/generation/architectureGenerator.js.map +1 -0
  43. package/dist/core/generation/flowGenerator.d.ts +52 -0
  44. package/dist/core/generation/flowGenerator.d.ts.map +1 -0
  45. package/dist/core/generation/flowGenerator.js +164 -0
  46. package/dist/core/generation/flowGenerator.js.map +1 -0
  47. package/dist/core/generation/index.d.ts +4 -0
  48. package/dist/core/generation/index.d.ts.map +1 -0
  49. package/dist/core/generation/index.js +4 -0
  50. package/dist/core/generation/index.js.map +1 -0
  51. package/dist/core/hierarchyGenerator.d.ts.map +1 -1
  52. package/dist/core/hierarchyGenerator.js +3 -2
  53. package/dist/core/hierarchyGenerator.js.map +1 -1
  54. package/dist/core/parsers/index.d.ts +20 -0
  55. package/dist/core/parsers/index.d.ts.map +1 -0
  56. package/dist/core/parsers/index.js +76 -0
  57. package/dist/core/parsers/index.js.map +1 -0
  58. package/dist/core/parsers/pythonParser.d.ts +37 -0
  59. package/dist/core/parsers/pythonParser.d.ts.map +1 -0
  60. package/dist/core/parsers/pythonParser.js +229 -0
  61. package/dist/core/parsers/pythonParser.js.map +1 -0
  62. package/dist/core/parsers/typescriptParser.d.ts +54 -0
  63. package/dist/core/parsers/typescriptParser.d.ts.map +1 -0
  64. package/dist/core/parsers/typescriptParser.js +291 -0
  65. package/dist/core/parsers/typescriptParser.js.map +1 -0
  66. package/dist/core/pipeline.d.ts +42 -0
  67. package/dist/core/pipeline.d.ts.map +1 -0
  68. package/dist/core/pipeline.js +172 -0
  69. package/dist/core/pipeline.js.map +1 -0
  70. package/dist/core/semanticContexts.js +1 -1
  71. package/dist/core/semanticContexts.js.map +1 -1
  72. package/dist/utils/constants.d.ts +46 -0
  73. package/dist/utils/constants.d.ts.map +1 -0
  74. package/dist/utils/constants.js +67 -0
  75. package/dist/utils/constants.js.map +1 -0
  76. package/package.json +1 -1
  77. package/run-all-tests.sh +184 -0
  78. package/src/analyzers/symbols.ts +12 -7
  79. package/src/analyzers/techStack.ts +203 -3
  80. package/src/commands/ai-first.ts +14 -13
  81. package/src/core/analysis/architectureDetector.ts +487 -0
  82. package/src/core/analysis/callGraphBuilder.ts +158 -0
  83. package/src/core/analysis/dependencyAnalyzer.ts +167 -0
  84. package/src/core/analysis/index.ts +28 -0
  85. package/src/core/analysis/inheritanceAnalyzer.ts +169 -0
  86. package/src/core/ccp.ts +3 -2
  87. package/src/core/generation/aiContextGenerator.ts +335 -0
  88. package/src/core/generation/architectureGenerator.ts +200 -0
  89. package/src/core/generation/flowGenerator.ts +238 -0
  90. package/src/core/generation/index.ts +16 -0
  91. package/src/core/hierarchyGenerator.ts +3 -2
  92. package/src/core/parsers/index.ts +99 -0
  93. package/src/core/parsers/pythonParser.ts +302 -0
  94. package/src/core/parsers/typescriptParser.ts +445 -0
  95. package/src/core/pipeline.ts +241 -0
  96. package/src/core/semanticContexts.ts +1 -1
  97. package/src/utils/constants.ts +78 -0
  98. package/tests/analysis.test.ts +283 -0
  99. package/tests/architectureDetector.test.ts +137 -0
  100. package/tests/generation.test.ts +216 -0
  101. package/tests/parserRegistry.test.ts +139 -0
  102. package/tests/pipeline.integration.test.ts +245 -0
  103. package/tests/pythonParser.test.ts +210 -0
  104. package/tests/typescriptParser.test.ts +197 -0
  105. package/.ai-dev/index.db +0 -0
  106. package/ANALISIS_COMPLETO.md +0 -424
  107. package/ANALISIS_MEJORAS.md +0 -327
  108. package/BUGS.md +0 -455
  109. package/PLAN_MEJORAS.md +0 -216
  110. package/STATUS_ADAPTADORES +0 -126
  111. package/TEST_RESULTS.md +0 -198
  112. package/TEST_RESULTS_COMPARATIVE.md +0 -159
  113. package/TEST_RESULTS_COMPLETE.md +0 -127
  114. package/TEST_RESULTS_COMPREHENSIVE.md +0 -208
  115. package/TEST_RESULTS_PHASE1.md +0 -420
  116. package/ai/dependencies.json +0 -15
  117. package/ai/graph/knowledge-graph.json +0 -12
  118. package/ai-context/ai_context.md +0 -130
  119. package/ai-context/ai_rules.md +0 -54
  120. package/ai-context/architecture.md +0 -136
  121. package/ai-context/cache.json +0 -2349
  122. package/ai-context/ccp/jira-123/context.json +0 -7
  123. package/ai-context/context/features/commands.json +0 -18
  124. package/ai-context/context/features/src.json +0 -61
  125. package/ai-context/context/features/test-projects.json +0 -69
  126. package/ai-context/context/flows/account.json +0 -9
  127. package/ai-context/context/flows/ai-first.json +0 -9
  128. package/ai-context/context/flows/api.json +0 -9
  129. package/ai-context/context/flows/auth.json +0 -13
  130. package/ai-context/context/flows/category.json +0 -12
  131. package/ai-context/context/flows/comment.json +0 -16
  132. package/ai-context/context/flows/dashboard.json +0 -9
  133. package/ai-context/context/flows/doctor.json +0 -9
  134. package/ai-context/context/flows/explore.json +0 -9
  135. package/ai-context/context/flows/login.json +0 -9
  136. package/ai-context/context/flows/opportunity.json +0 -9
  137. package/ai-context/context/flows/post.json +0 -18
  138. package/ai-context/context/flows/routes.json +0 -19
  139. package/ai-context/context/flows/user.json +0 -20
  140. package/ai-context/context/flows/users.json +0 -9
  141. package/ai-context/context/flows/views.json +0 -14
  142. package/ai-context/context/repo.json +0 -56
  143. package/ai-context/context/utils.json +0 -7
  144. package/ai-context/conventions.md +0 -53
  145. package/ai-context/dependencies.json +0 -2978
  146. package/ai-context/embeddings.json +0 -23828
  147. package/ai-context/entrypoints.md +0 -42
  148. package/ai-context/files.json +0 -2944
  149. package/ai-context/git/commit-activity.json +0 -8646
  150. package/ai-context/git/recent-features.json +0 -1
  151. package/ai-context/git/recent-files.json +0 -52
  152. package/ai-context/git/recent-flows.json +0 -1
  153. package/ai-context/graph/knowledge-graph.json +0 -44129
  154. package/ai-context/graph/module-graph.json +0 -866
  155. package/ai-context/graph/symbol-graph.json +0 -200622
  156. package/ai-context/graph/symbol-references.json +0 -6778
  157. package/ai-context/hierarchy.json +0 -20
  158. package/ai-context/index-state.json +0 -4487
  159. package/ai-context/index.db +0 -0
  160. package/ai-context/modules.json +0 -933
  161. package/ai-context/project.json +0 -30
  162. package/ai-context/repo_map.json +0 -9116
  163. package/ai-context/repo_map.md +0 -2061
  164. package/ai-context/schema.json +0 -5
  165. package/ai-context/summary.md +0 -47
  166. package/ai-context/symbols.json +0 -65351
  167. package/ai-context/tech_stack.md +0 -47
  168. package/ai-context/tools.json +0 -10
  169. package/test-projects/django-app/.ai-dev/index.db +0 -0
  170. package/test-projects/django-app/ai-context/ai_context.md +0 -92
  171. package/test-projects/django-app/ai-context/ai_rules.md +0 -47
  172. package/test-projects/django-app/ai-context/architecture.md +0 -57
  173. package/test-projects/django-app/ai-context/cache.json +0 -169
  174. package/test-projects/django-app/ai-context/context/flows/views.json +0 -10
  175. package/test-projects/django-app/ai-context/conventions.md +0 -51
  176. package/test-projects/django-app/ai-context/dependencies.json +0 -312
  177. package/test-projects/django-app/ai-context/entrypoints.md +0 -4
  178. package/test-projects/django-app/ai-context/files.json +0 -209
  179. package/test-projects/django-app/ai-context/graph/knowledge-graph.json +0 -36
  180. package/test-projects/django-app/ai-context/graph/module-graph.json +0 -145
  181. package/test-projects/django-app/ai-context/graph/symbol-graph.json +0 -1488
  182. package/test-projects/django-app/ai-context/graph/symbol-references.json +0 -1
  183. package/test-projects/django-app/ai-context/index-state.json +0 -294
  184. package/test-projects/django-app/ai-context/index.db +0 -0
  185. package/test-projects/django-app/ai-context/modules.json +0 -35
  186. package/test-projects/django-app/ai-context/project.json +0 -11
  187. package/test-projects/django-app/ai-context/repo_map.json +0 -412
  188. package/test-projects/django-app/ai-context/repo_map.md +0 -105
  189. package/test-projects/django-app/ai-context/schema.json +0 -5
  190. package/test-projects/django-app/ai-context/summary.md +0 -15
  191. package/test-projects/django-app/ai-context/symbols.json +0 -1
  192. package/test-projects/django-app/ai-context/tech_stack.md +0 -32
  193. package/test-projects/django-app/ai-context/tools.json +0 -10
  194. package/test-projects/express-api/ai-context/ai_context.md +0 -112
  195. package/test-projects/express-api/ai-context/ai_rules.md +0 -50
  196. package/test-projects/express-api/ai-context/architecture.md +0 -62
  197. package/test-projects/express-api/ai-context/context/features/controllers.json +0 -13
  198. package/test-projects/express-api/ai-context/context/features/services.json +0 -13
  199. package/test-projects/express-api/ai-context/context/flows/auth.json +0 -12
  200. package/test-projects/express-api/ai-context/context/flows/user.json +0 -13
  201. package/test-projects/express-api/ai-context/conventions.md +0 -51
  202. package/test-projects/express-api/ai-context/dependencies.json +0 -54
  203. package/test-projects/express-api/ai-context/entrypoints.md +0 -17
  204. package/test-projects/express-api/ai-context/modules.json +0 -30
  205. package/test-projects/express-api/ai-context/project.json +0 -15
  206. package/test-projects/express-api/ai-context/repo_map.json +0 -100
  207. package/test-projects/express-api/ai-context/repo_map.md +0 -36
  208. package/test-projects/express-api/ai-context/schema.json +0 -5
  209. package/test-projects/express-api/ai-context/summary.md +0 -14
  210. package/test-projects/express-api/ai-context/symbols.json +0 -7
  211. package/test-projects/express-api/ai-context/tech_stack.md +0 -38
  212. package/test-projects/express-api/ai-context/tools.json +0 -10
  213. package/test-projects/fastapi-app/.ai-dev/index.db +0 -0
  214. package/test-projects/fastapi-app/ai-context/ai_context.md +0 -89
  215. package/test-projects/fastapi-app/ai-context/ai_rules.md +0 -47
  216. package/test-projects/fastapi-app/ai-context/architecture.md +0 -39
  217. package/test-projects/fastapi-app/ai-context/cache.json +0 -125
  218. package/test-projects/fastapi-app/ai-context/conventions.md +0 -51
  219. package/test-projects/fastapi-app/ai-context/dependencies.json +0 -244
  220. package/test-projects/fastapi-app/ai-context/entrypoints.md +0 -4
  221. package/test-projects/fastapi-app/ai-context/files.json +0 -154
  222. package/test-projects/fastapi-app/ai-context/graph/knowledge-graph.json +0 -15
  223. package/test-projects/fastapi-app/ai-context/graph/module-graph.json +0 -78
  224. package/test-projects/fastapi-app/ai-context/graph/symbol-graph.json +0 -1724
  225. package/test-projects/fastapi-app/ai-context/graph/symbol-references.json +0 -51
  226. package/test-projects/fastapi-app/ai-context/index-state.json +0 -217
  227. package/test-projects/fastapi-app/ai-context/index.db +0 -0
  228. package/test-projects/fastapi-app/ai-context/modules.json +0 -16
  229. package/test-projects/fastapi-app/ai-context/project.json +0 -9
  230. package/test-projects/fastapi-app/ai-context/repo_map.json +0 -298
  231. package/test-projects/fastapi-app/ai-context/repo_map.md +0 -74
  232. package/test-projects/fastapi-app/ai-context/schema.json +0 -5
  233. package/test-projects/fastapi-app/ai-context/summary.md +0 -12
  234. package/test-projects/fastapi-app/ai-context/symbols.json +0 -1
  235. package/test-projects/fastapi-app/ai-context/tech_stack.md +0 -32
  236. package/test-projects/fastapi-app/ai-context/tools.json +0 -10
  237. package/test-projects/flask-app/.ai-dev/index.db +0 -0
  238. package/test-projects/flask-app/ai-context/ai_context.md +0 -94
  239. package/test-projects/flask-app/ai-context/ai_rules.md +0 -47
  240. package/test-projects/flask-app/ai-context/architecture.md +0 -49
  241. package/test-projects/flask-app/ai-context/cache.json +0 -157
  242. package/test-projects/flask-app/ai-context/context/features/app.json +0 -25
  243. package/test-projects/flask-app/ai-context/context/flows/routes.json +0 -14
  244. package/test-projects/flask-app/ai-context/conventions.md +0 -51
  245. package/test-projects/flask-app/ai-context/dependencies.json +0 -298
  246. package/test-projects/flask-app/ai-context/entrypoints.md +0 -4
  247. package/test-projects/flask-app/ai-context/files.json +0 -194
  248. package/test-projects/flask-app/ai-context/graph/knowledge-graph.json +0 -60
  249. package/test-projects/flask-app/ai-context/graph/module-graph.json +0 -95
  250. package/test-projects/flask-app/ai-context/graph/symbol-graph.json +0 -1448
  251. package/test-projects/flask-app/ai-context/graph/symbol-references.json +0 -45
  252. package/test-projects/flask-app/ai-context/index-state.json +0 -273
  253. package/test-projects/flask-app/ai-context/index.db +0 -0
  254. package/test-projects/flask-app/ai-context/modules.json +0 -21
  255. package/test-projects/flask-app/ai-context/project.json +0 -13
  256. package/test-projects/flask-app/ai-context/repo_map.json +0 -400
  257. package/test-projects/flask-app/ai-context/repo_map.md +0 -98
  258. package/test-projects/flask-app/ai-context/schema.json +0 -5
  259. package/test-projects/flask-app/ai-context/summary.md +0 -13
  260. package/test-projects/flask-app/ai-context/symbols.json +0 -1
  261. package/test-projects/flask-app/ai-context/tech_stack.md +0 -32
  262. package/test-projects/flask-app/ai-context/tools.json +0 -10
  263. package/test-projects/laravel-app/.ai-dev/index.db +0 -0
  264. package/test-projects/laravel-app/ai-context/ai_context.md +0 -97
  265. package/test-projects/laravel-app/ai-context/ai_rules.md +0 -47
  266. package/test-projects/laravel-app/ai-context/architecture.md +0 -60
  267. package/test-projects/laravel-app/ai-context/cache.json +0 -161
  268. package/test-projects/laravel-app/ai-context/context/features/app.json +0 -21
  269. package/test-projects/laravel-app/ai-context/context/flows/.json +0 -9
  270. package/test-projects/laravel-app/ai-context/context/flows/category.json +0 -12
  271. package/test-projects/laravel-app/ai-context/context/flows/comment.json +0 -12
  272. package/test-projects/laravel-app/ai-context/context/flows/post.json +0 -12
  273. package/test-projects/laravel-app/ai-context/context/flows/unnamed.json +0 -9
  274. package/test-projects/laravel-app/ai-context/conventions.md +0 -51
  275. package/test-projects/laravel-app/ai-context/dependencies.json +0 -6
  276. package/test-projects/laravel-app/ai-context/entrypoints.md +0 -4
  277. package/test-projects/laravel-app/ai-context/files.json +0 -199
  278. package/test-projects/laravel-app/ai-context/graph/knowledge-graph.json +0 -98
  279. package/test-projects/laravel-app/ai-context/graph/module-graph.json +0 -30
  280. package/test-projects/laravel-app/ai-context/graph/symbol-graph.json +0 -5
  281. package/test-projects/laravel-app/ai-context/graph/symbol-references.json +0 -1
  282. package/test-projects/laravel-app/ai-context/index-state.json +0 -280
  283. package/test-projects/laravel-app/ai-context/index.db +0 -0
  284. package/test-projects/laravel-app/ai-context/modules.json +0 -29
  285. package/test-projects/laravel-app/ai-context/project.json +0 -17
  286. package/test-projects/laravel-app/ai-context/repo_map.json +0 -419
  287. package/test-projects/laravel-app/ai-context/repo_map.md +0 -106
  288. package/test-projects/laravel-app/ai-context/schema.json +0 -5
  289. package/test-projects/laravel-app/ai-context/summary.md +0 -15
  290. package/test-projects/laravel-app/ai-context/symbols.json +0 -1
  291. package/test-projects/laravel-app/ai-context/tech_stack.md +0 -34
  292. package/test-projects/laravel-app/ai-context/tools.json +0 -10
  293. package/test-projects/nestjs-backend/.ai-dev/index.db +0 -0
  294. package/test-projects/nestjs-backend/ai-context/ai_context.md +0 -111
  295. package/test-projects/nestjs-backend/ai-context/ai_rules.md +0 -52
  296. package/test-projects/nestjs-backend/ai-context/architecture.md +0 -49
  297. package/test-projects/nestjs-backend/ai-context/cache.json +0 -169
  298. package/test-projects/nestjs-backend/ai-context/context/features/src.json +0 -23
  299. package/test-projects/nestjs-backend/ai-context/context/flows/auth.controller.json +0 -14
  300. package/test-projects/nestjs-backend/ai-context/context/flows/auth.json +0 -10
  301. package/test-projects/nestjs-backend/ai-context/context/flows/users..json +0 -10
  302. package/test-projects/nestjs-backend/ai-context/context/flows/users.controller.json +0 -14
  303. package/test-projects/nestjs-backend/ai-context/context/flows/users.json +0 -10
  304. package/test-projects/nestjs-backend/ai-context/conventions.md +0 -52
  305. package/test-projects/nestjs-backend/ai-context/dependencies.json +0 -152
  306. package/test-projects/nestjs-backend/ai-context/entrypoints.md +0 -18
  307. package/test-projects/nestjs-backend/ai-context/files.json +0 -209
  308. package/test-projects/nestjs-backend/ai-context/graph/knowledge-graph.json +0 -132
  309. package/test-projects/nestjs-backend/ai-context/graph/module-graph.json +0 -29
  310. package/test-projects/nestjs-backend/ai-context/graph/symbol-graph.json +0 -304
  311. package/test-projects/nestjs-backend/ai-context/graph/symbol-references.json +0 -5
  312. package/test-projects/nestjs-backend/ai-context/index-state.json +0 -294
  313. package/test-projects/nestjs-backend/ai-context/index.db +0 -0
  314. package/test-projects/nestjs-backend/ai-context/modules.json +0 -19
  315. package/test-projects/nestjs-backend/ai-context/project.json +0 -18
  316. package/test-projects/nestjs-backend/ai-context/repo_map.json +0 -427
  317. package/test-projects/nestjs-backend/ai-context/repo_map.md +0 -104
  318. package/test-projects/nestjs-backend/ai-context/schema.json +0 -5
  319. package/test-projects/nestjs-backend/ai-context/summary.md +0 -13
  320. package/test-projects/nestjs-backend/ai-context/symbols.json +0 -1
  321. package/test-projects/nestjs-backend/ai-context/tech_stack.md +0 -38
  322. package/test-projects/nestjs-backend/ai-context/tools.json +0 -10
  323. package/test-projects/python-cli/.ai-dev/index.db +0 -0
  324. package/test-projects/python-cli/ai-context/ai_context.md +0 -95
  325. package/test-projects/python-cli/ai-context/ai_rules.md +0 -47
  326. package/test-projects/python-cli/ai-context/architecture.md +0 -55
  327. package/test-projects/python-cli/ai-context/cache.json +0 -149
  328. package/test-projects/python-cli/ai-context/context/features/cli.json +0 -16
  329. package/test-projects/python-cli/ai-context/context/flows/list_.json +0 -9
  330. package/test-projects/python-cli/ai-context/context/flows/remove_.json +0 -9
  331. package/test-projects/python-cli/ai-context/conventions.md +0 -51
  332. package/test-projects/python-cli/ai-context/dependencies.json +0 -66
  333. package/test-projects/python-cli/ai-context/entrypoints.md +0 -4
  334. package/test-projects/python-cli/ai-context/files.json +0 -184
  335. package/test-projects/python-cli/ai-context/graph/knowledge-graph.json +0 -83
  336. package/test-projects/python-cli/ai-context/graph/module-graph.json +0 -31
  337. package/test-projects/python-cli/ai-context/graph/symbol-graph.json +0 -358
  338. package/test-projects/python-cli/ai-context/graph/symbol-references.json +0 -11
  339. package/test-projects/python-cli/ai-context/index-state.json +0 -259
  340. package/test-projects/python-cli/ai-context/index.db +0 -0
  341. package/test-projects/python-cli/ai-context/modules.json +0 -21
  342. package/test-projects/python-cli/ai-context/project.json +0 -15
  343. package/test-projects/python-cli/ai-context/repo_map.json +0 -367
  344. package/test-projects/python-cli/ai-context/repo_map.md +0 -93
  345. package/test-projects/python-cli/ai-context/schema.json +0 -5
  346. package/test-projects/python-cli/ai-context/summary.md +0 -14
  347. package/test-projects/python-cli/ai-context/symbols.json +0 -1
  348. package/test-projects/python-cli/ai-context/tech_stack.md +0 -32
  349. package/test-projects/python-cli/ai-context/tools.json +0 -10
  350. package/test-projects/rails-app/.ai-dev/index.db +0 -0
  351. package/test-projects/rails-app/ai-context/ai_context.md +0 -94
  352. package/test-projects/rails-app/ai-context/ai_rules.md +0 -47
  353. package/test-projects/rails-app/ai-context/architecture.md +0 -49
  354. package/test-projects/rails-app/ai-context/cache.json +0 -193
  355. package/test-projects/rails-app/ai-context/context/features/app.json +0 -24
  356. package/test-projects/rails-app/ai-context/context/features/config.json +0 -13
  357. package/test-projects/rails-app/ai-context/context/flows/application.json +0 -9
  358. package/test-projects/rails-app/ai-context/context/flows/application_.json +0 -9
  359. package/test-projects/rails-app/ai-context/context/flows/comments.json +0 -11
  360. package/test-projects/rails-app/ai-context/context/flows/comments_.json +0 -11
  361. package/test-projects/rails-app/ai-context/context/flows/posts.json +0 -11
  362. package/test-projects/rails-app/ai-context/context/flows/posts_.json +0 -11
  363. package/test-projects/rails-app/ai-context/context/flows/routes.json +0 -9
  364. package/test-projects/rails-app/ai-context/context/flows/users.json +0 -11
  365. package/test-projects/rails-app/ai-context/context/flows/users_.json +0 -11
  366. package/test-projects/rails-app/ai-context/conventions.md +0 -51
  367. package/test-projects/rails-app/ai-context/dependencies.json +0 -6
  368. package/test-projects/rails-app/ai-context/entrypoints.md +0 -4
  369. package/test-projects/rails-app/ai-context/files.json +0 -239
  370. package/test-projects/rails-app/ai-context/graph/knowledge-graph.json +0 -130
  371. package/test-projects/rails-app/ai-context/graph/module-graph.json +0 -27
  372. package/test-projects/rails-app/ai-context/graph/symbol-graph.json +0 -5
  373. package/test-projects/rails-app/ai-context/graph/symbol-references.json +0 -1
  374. package/test-projects/rails-app/ai-context/index-state.json +0 -336
  375. package/test-projects/rails-app/ai-context/index.db +0 -0
  376. package/test-projects/rails-app/ai-context/modules.json +0 -26
  377. package/test-projects/rails-app/ai-context/project.json +0 -22
  378. package/test-projects/rails-app/ai-context/repo_map.json +0 -486
  379. package/test-projects/rails-app/ai-context/repo_map.md +0 -117
  380. package/test-projects/rails-app/ai-context/schema.json +0 -5
  381. package/test-projects/rails-app/ai-context/summary.md +0 -13
  382. package/test-projects/rails-app/ai-context/symbols.json +0 -1
  383. package/test-projects/rails-app/ai-context/tech_stack.md +0 -32
  384. package/test-projects/rails-app/ai-context/tools.json +0 -10
  385. package/test-projects/react-app/.ai-dev/index.db +0 -0
  386. package/test-projects/react-app/ai-context/ai_context.md +0 -96
  387. package/test-projects/react-app/ai-context/ai_rules.md +0 -49
  388. package/test-projects/react-app/ai-context/architecture.md +0 -39
  389. package/test-projects/react-app/ai-context/cache.json +0 -153
  390. package/test-projects/react-app/ai-context/context/features/src.json +0 -18
  391. package/test-projects/react-app/ai-context/context/flows/UsersPage.json +0 -14
  392. package/test-projects/react-app/ai-context/context/flows/dashboard.json +0 -9
  393. package/test-projects/react-app/ai-context/context/flows/login.json +0 -9
  394. package/test-projects/react-app/ai-context/context/flows/users.json +0 -9
  395. package/test-projects/react-app/ai-context/conventions.md +0 -52
  396. package/test-projects/react-app/ai-context/dependencies.json +0 -128
  397. package/test-projects/react-app/ai-context/entrypoints.md +0 -4
  398. package/test-projects/react-app/ai-context/files.json +0 -189
  399. package/test-projects/react-app/ai-context/graph/knowledge-graph.json +0 -112
  400. package/test-projects/react-app/ai-context/graph/module-graph.json +0 -31
  401. package/test-projects/react-app/ai-context/graph/symbol-graph.json +0 -868
  402. package/test-projects/react-app/ai-context/graph/symbol-references.json +0 -31
  403. package/test-projects/react-app/ai-context/index-state.json +0 -266
  404. package/test-projects/react-app/ai-context/index.db +0 -0
  405. package/test-projects/react-app/ai-context/modules.json +0 -17
  406. package/test-projects/react-app/ai-context/project.json +0 -16
  407. package/test-projects/react-app/ai-context/repo_map.json +0 -391
  408. package/test-projects/react-app/ai-context/repo_map.md +0 -94
  409. package/test-projects/react-app/ai-context/schema.json +0 -5
  410. package/test-projects/react-app/ai-context/summary.md +0 -13
  411. package/test-projects/react-app/ai-context/symbols.json +0 -1
  412. package/test-projects/react-app/ai-context/tech_stack.md +0 -39
  413. package/test-projects/react-app/ai-context/tools.json +0 -10
  414. package/test-projects/salesforce-cli/.ai-dev/index.db +0 -0
  415. package/test-projects/salesforce-cli/ai-context/ai_context.md +0 -89
  416. package/test-projects/salesforce-cli/ai-context/ai_rules.md +0 -47
  417. package/test-projects/salesforce-cli/ai-context/architecture.md +0 -39
  418. package/test-projects/salesforce-cli/ai-context/cache.json +0 -125
  419. package/test-projects/salesforce-cli/ai-context/context/features/force-app.json +0 -14
  420. package/test-projects/salesforce-cli/ai-context/context/flows/account.json +0 -9
  421. package/test-projects/salesforce-cli/ai-context/context/flows/opportunity.json +0 -9
  422. package/test-projects/salesforce-cli/ai-context/conventions.md +0 -51
  423. package/test-projects/salesforce-cli/ai-context/dependencies.json +0 -6
  424. package/test-projects/salesforce-cli/ai-context/entrypoints.md +0 -4
  425. package/test-projects/salesforce-cli/ai-context/files.json +0 -154
  426. package/test-projects/salesforce-cli/ai-context/graph/knowledge-graph.json +0 -64
  427. package/test-projects/salesforce-cli/ai-context/graph/module-graph.json +0 -13
  428. package/test-projects/salesforce-cli/ai-context/graph/symbol-graph.json +0 -148
  429. package/test-projects/salesforce-cli/ai-context/graph/symbol-references.json +0 -1
  430. package/test-projects/salesforce-cli/ai-context/index-state.json +0 -217
  431. package/test-projects/salesforce-cli/ai-context/index.db +0 -0
  432. package/test-projects/salesforce-cli/ai-context/modules.json +0 -12
  433. package/test-projects/salesforce-cli/ai-context/project.json +0 -14
  434. package/test-projects/salesforce-cli/ai-context/repo_map.json +0 -328
  435. package/test-projects/salesforce-cli/ai-context/repo_map.md +0 -80
  436. package/test-projects/salesforce-cli/ai-context/schema.json +0 -5
  437. package/test-projects/salesforce-cli/ai-context/summary.md +0 -13
  438. package/test-projects/salesforce-cli/ai-context/symbols.json +0 -1
  439. package/test-projects/salesforce-cli/ai-context/tech_stack.md +0 -31
  440. package/test-projects/salesforce-cli/ai-context/tools.json +0 -10
  441. package/test-projects/spring-boot-app/.ai-dev/index.db +0 -0
  442. package/test-projects/spring-boot-app/ai-context/ai_context.md +0 -91
  443. package/test-projects/spring-boot-app/ai-context/ai_rules.md +0 -48
  444. package/test-projects/spring-boot-app/ai-context/architecture.md +0 -39
  445. package/test-projects/spring-boot-app/ai-context/cache.json +0 -173
  446. package/test-projects/spring-boot-app/ai-context/context/features/src.json +0 -26
  447. package/test-projects/spring-boot-app/ai-context/context/flows/PostController.json +0 -19
  448. package/test-projects/spring-boot-app/ai-context/context/flows/UserController.json +0 -19
  449. package/test-projects/spring-boot-app/ai-context/context/flows/comment.json +0 -11
  450. package/test-projects/spring-boot-app/ai-context/context/flows/post.json +0 -14
  451. package/test-projects/spring-boot-app/ai-context/context/flows/user.json +0 -14
  452. package/test-projects/spring-boot-app/ai-context/conventions.md +0 -52
  453. package/test-projects/spring-boot-app/ai-context/dependencies.json +0 -326
  454. package/test-projects/spring-boot-app/ai-context/entrypoints.md +0 -4
  455. package/test-projects/spring-boot-app/ai-context/files.json +0 -214
  456. package/test-projects/spring-boot-app/ai-context/graph/knowledge-graph.json +0 -231
  457. package/test-projects/spring-boot-app/ai-context/graph/module-graph.json +0 -22
  458. package/test-projects/spring-boot-app/ai-context/graph/symbol-graph.json +0 -794
  459. package/test-projects/spring-boot-app/ai-context/graph/symbol-references.json +0 -70
  460. package/test-projects/spring-boot-app/ai-context/index-state.json +0 -301
  461. package/test-projects/spring-boot-app/ai-context/index.db +0 -0
  462. package/test-projects/spring-boot-app/ai-context/modules.json +0 -21
  463. package/test-projects/spring-boot-app/ai-context/project.json +0 -17
  464. package/test-projects/spring-boot-app/ai-context/repo_map.json +0 -461
  465. package/test-projects/spring-boot-app/ai-context/repo_map.md +0 -109
  466. package/test-projects/spring-boot-app/ai-context/schema.json +0 -5
  467. package/test-projects/spring-boot-app/ai-context/summary.md +0 -12
  468. package/test-projects/spring-boot-app/ai-context/symbols.json +0 -1
  469. package/test-projects/spring-boot-app/ai-context/tech_stack.md +0 -32
  470. package/test-projects/spring-boot-app/ai-context/tools.json +0 -10
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Constantes centralizadas para rutas del sistema ai-first-cli
3
+ *
4
+ * Esta migración de ai/ a ai-context/ fue realizada para estandarizar
5
+ * la arquitectura y evitar inconsistencias entre comandos.
6
+ */
7
+ export declare const AI_CONTEXT_DIR = "ai-context";
8
+ export declare const AI_LEGACY_DIR = "ai";
9
+ /**
10
+ * Obtiene la ruta completa al directorio ai-context/
11
+ */
12
+ export declare function getAiContextDir(rootDir: string): string;
13
+ /**
14
+ * Obtiene la ruta completa al archivo index.db
15
+ */
16
+ export declare function getIndexDbPath(rootDir: string): string;
17
+ /**
18
+ * Obtiene la ruta completa al archivo hierarchy.json
19
+ */
20
+ export declare function getHierarchyPath(rootDir: string): string;
21
+ /**
22
+ * Obtiene la ruta al directorio ccp/
23
+ */
24
+ export declare function getCcpDir(rootDir: string): string;
25
+ /**
26
+ * Obtiene la ruta completa a un archivo CCP específico
27
+ */
28
+ export declare function getCcpPath(rootDir: string, name: string): string;
29
+ /**
30
+ * Obtiene la ruta al directorio de features
31
+ */
32
+ export declare function getFeaturesDir(rootDir: string): string;
33
+ /**
34
+ * Obtiene la ruta al directorio de flows
35
+ */
36
+ export declare function getFlowsDir(rootDir: string): string;
37
+ /**
38
+ * Obtiene la ruta al directorio graph/
39
+ */
40
+ export declare function getGraphDir(rootDir: string): string;
41
+ /**
42
+ * Verifica si una ruta corresponde al directorio ai-context/ o ai/ legacy
43
+ * Util para excluir estos directorios del análisis
44
+ */
45
+ export declare function isAiDirectory(dirName: string): boolean;
46
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAGH,eAAO,MAAM,cAAc,eAAe,CAAC;AAG3C,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -0,0 +1,67 @@
1
+ import path from "path";
2
+ /**
3
+ * Constantes centralizadas para rutas del sistema ai-first-cli
4
+ *
5
+ * Esta migración de ai/ a ai-context/ fue realizada para estandarizar
6
+ * la arquitectura y evitar inconsistencias entre comandos.
7
+ */
8
+ // Directorio principal de contexto (arquitectura nueva)
9
+ export const AI_CONTEXT_DIR = "ai-context";
10
+ // Directorio legacy (para compatibilidad hacia atrás)
11
+ export const AI_LEGACY_DIR = "ai";
12
+ /**
13
+ * Obtiene la ruta completa al directorio ai-context/
14
+ */
15
+ export function getAiContextDir(rootDir) {
16
+ return path.join(rootDir, AI_CONTEXT_DIR);
17
+ }
18
+ /**
19
+ * Obtiene la ruta completa al archivo index.db
20
+ */
21
+ export function getIndexDbPath(rootDir) {
22
+ return path.join(rootDir, AI_CONTEXT_DIR, "index.db");
23
+ }
24
+ /**
25
+ * Obtiene la ruta completa al archivo hierarchy.json
26
+ */
27
+ export function getHierarchyPath(rootDir) {
28
+ return path.join(rootDir, AI_CONTEXT_DIR, "hierarchy.json");
29
+ }
30
+ /**
31
+ * Obtiene la ruta al directorio ccp/
32
+ */
33
+ export function getCcpDir(rootDir) {
34
+ return path.join(rootDir, AI_CONTEXT_DIR, "ccp");
35
+ }
36
+ /**
37
+ * Obtiene la ruta completa a un archivo CCP específico
38
+ */
39
+ export function getCcpPath(rootDir, name) {
40
+ return path.join(rootDir, AI_CONTEXT_DIR, "ccp", name, "context.json");
41
+ }
42
+ /**
43
+ * Obtiene la ruta al directorio de features
44
+ */
45
+ export function getFeaturesDir(rootDir) {
46
+ return path.join(rootDir, AI_CONTEXT_DIR, "context", "features");
47
+ }
48
+ /**
49
+ * Obtiene la ruta al directorio de flows
50
+ */
51
+ export function getFlowsDir(rootDir) {
52
+ return path.join(rootDir, AI_CONTEXT_DIR, "context", "flows");
53
+ }
54
+ /**
55
+ * Obtiene la ruta al directorio graph/
56
+ */
57
+ export function getGraphDir(rootDir) {
58
+ return path.join(rootDir, AI_CONTEXT_DIR, "graph");
59
+ }
60
+ /**
61
+ * Verifica si una ruta corresponde al directorio ai-context/ o ai/ legacy
62
+ * Util para excluir estos directorios del análisis
63
+ */
64
+ export function isAiDirectory(dirName) {
65
+ return dirName === AI_CONTEXT_DIR || dirName === AI_LEGACY_DIR;
66
+ }
67
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;GAKG;AAEH,wDAAwD;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC;AAE3C,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAElC;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAAY;IACtD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,OAAO,KAAK,cAAc,IAAI,OAAO,KAAK,aAAa,CAAC;AACjE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-first-cli",
3
- "version": "1.2.3",
3
+ "version": "1.3.0",
4
4
  "description": "CLI tool that prepares any repository to be used effectively by AI coding agents",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -0,0 +1,184 @@
1
+ #!/bin/bash
2
+ #
3
+ # MASTER TEST SCRIPT - ai-first-cli
4
+ # Ejecuta TODOS los tests: unitarios + funcionales + integracion
5
+ #
6
+
7
+ set -e
8
+
9
+ PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)"
10
+ DIST_DIR="$PROJECT_ROOT/dist"
11
+ CLI="$DIST_DIR/commands/ai-first.js"
12
+
13
+ # Colors
14
+ RED='\033[0;31m'
15
+ GREEN='\033[0;32m'
16
+ YELLOW='\033[1;33m'
17
+ BLUE='\033[0;34m'
18
+ NC='\033[0m'
19
+
20
+ TESTS_PASSED=0
21
+ TESTS_FAILED=0
22
+
23
+ log_info() {
24
+ echo -e "${BLUE}[INFO]${NC} $1"
25
+ }
26
+
27
+ log_success() {
28
+ echo -e "${GREEN}[PASS]${NC} $1"
29
+ ((TESTS_PASSED++))
30
+ }
31
+
32
+ log_error() {
33
+ echo -e "${RED}[FAIL]${NC} $1"
34
+ ((TESTS_FAILED++))
35
+ }
36
+
37
+ # ============================================
38
+ # PHASE 1: BUILD
39
+ # ============================================
40
+ echo ""
41
+ echo "==================================================="
42
+ echo "PHASE 1: BUILD"
43
+ echo "==================================================="
44
+ echo ""
45
+
46
+ log_info "Building TypeScript..."
47
+ if npm run build > /dev/null 2>&1; then
48
+ log_success "TypeScript build"
49
+ else
50
+ log_error "TypeScript build FAILED"
51
+ exit 1
52
+ fi
53
+
54
+ # ============================================
55
+ # PHASE 2: UNIT TESTS (Vitest)
56
+ # ============================================
57
+ echo ""
58
+ echo "==================================================="
59
+ echo "PHASE 2: UNIT TESTS (Vitest)"
60
+ echo "==================================================="
61
+ echo ""
62
+
63
+ log_info "Running vitest..."
64
+ if npx vitest run 2>&1 | grep -q "passed"; then
65
+ # Extract test count
66
+ VITEST_OUTPUT=$(npx vitest run 2>&1)
67
+ TEST_COUNT=$(echo "$VITEST_OUTPUT" | grep -oE '[0-9]+ passed' | head -1 | grep -oE '[0-9]+')
68
+ log_success "Unit tests: $TEST_COUNT passed"
69
+ else
70
+ log_error "Unit tests FAILED"
71
+ fi
72
+
73
+ # ============================================
74
+ # PHASE 3: FUNCTIONAL TESTS
75
+ # ============================================
76
+ echo ""
77
+ echo "==================================================="
78
+ echo "PHASE 3: FUNCTIONAL TESTS (11 Adapters)"
79
+ echo "==================================================="
80
+ echo ""
81
+
82
+ ADAPTERS="django-app laravel-app fastapi-app flask-app rails-app spring-boot-app nestjs-backend express-api react-app salesforce-cli python-cli"
83
+ SYMBOLS_OK=0
84
+
85
+ log_info "Testing symbol extraction..."
86
+ for adapter in $ADAPTERS; do
87
+ PROJECT_DIR="$PROJECT_ROOT/test-projects/$adapter"
88
+ if [ -f "$PROJECT_DIR/ai-context/symbols.json" ]; then
89
+ SYMBOL_COUNT=$(cat "$PROJECT_DIR/ai-context/symbols.json" | grep -o '"id"' | wc -l)
90
+ if [ "$SYMBOL_COUNT" -gt 0 ]; then
91
+ ((SYMBOLS_OK++))
92
+ log_success "$adapter: $SYMBOL_COUNT symbols"
93
+ else
94
+ log_error "$adapter: 0 symbols"
95
+ fi
96
+ else
97
+ log_error "$adapter: symbols.json not found"
98
+ fi
99
+ done
100
+
101
+ if [ "$SYMBOLS_OK" -eq 11 ]; then
102
+ log_success "All 11 adapters have symbols > 0"
103
+ else
104
+ log_error "Only $SYMBOLS_OK/11 adapters have symbols"
105
+ fi
106
+
107
+ # ============================================
108
+ # PHASE 4: INTEGRATION TESTS
109
+ # ============================================
110
+ echo ""
111
+ echo "==================================================="
112
+ echo "PHASE 4: INTEGRATION TESTS"
113
+ echo "==================================================="
114
+ echo ""
115
+
116
+ COMMANDS="init map index doctor"
117
+ TOTAL_TESTS=0
118
+ PASSED_TESTS=0
119
+
120
+ for adapter in $ADAPTERS; do
121
+ PROJECT_DIR="$PROJECT_ROOT/test-projects/$adapter"
122
+
123
+ for cmd in $COMMANDS; do
124
+ ((TOTAL_TESTS++))
125
+
126
+ case $cmd in
127
+ "init")
128
+ if [ -d "$PROJECT_DIR/ai-context" ] && [ -f "$PROJECT_DIR/ai-context/symbols.json" ]; then
129
+ ((PASSED_TESTS++))
130
+ else
131
+ log_error "$adapter: init failed"
132
+ fi
133
+ ;;
134
+ "map")
135
+ if [ -f "$PROJECT_DIR/ai-context/graph/module-graph.json" ]; then
136
+ ((PASSED_TESTS++))
137
+ else
138
+ log_error "$adapter: map failed"
139
+ fi
140
+ ;;
141
+ "index")
142
+ if [ -f "$PROJECT_DIR/ai-context/index.db" ]; then
143
+ ((PASSED_TESTS++))
144
+ else
145
+ log_error "$adapter: index failed"
146
+ fi
147
+ ;;
148
+ "doctor")
149
+ if [ -f "$PROJECT_DIR/ai-context/repo_map.json" ]; then
150
+ ((PASSED_TESTS++))
151
+ else
152
+ log_error "$adapter: doctor failed"
153
+ fi
154
+ ;;
155
+ esac
156
+ done
157
+ done
158
+
159
+ log_info "Integration tests: $PASSED_TESTS/$TOTAL_TESTS passed"
160
+ if [ "$PASSED_TESTS" -eq "$TOTAL_TESTS" ]; then
161
+ log_success "All integration tests passed"
162
+ else
163
+ log_error "Some integration tests failed"
164
+ fi
165
+
166
+ # ============================================
167
+ # FINAL SUMMARY
168
+ # ============================================
169
+ echo ""
170
+ echo "==================================================="
171
+ echo "FINAL SUMMARY"
172
+ echo "==================================================="
173
+ echo ""
174
+ echo "Tests Passed: $TESTS_PASSED"
175
+ echo "Tests Failed: $TESTS_FAILED"
176
+ echo ""
177
+
178
+ if [ "$TESTS_FAILED" -eq 0 ]; then
179
+ echo -e "${GREEN}ALL TESTS PASSED!${NC}"
180
+ exit 0
181
+ else
182
+ echo -e "${RED}SOME TESTS FAILED!${NC}"
183
+ exit 1
184
+ fi
@@ -1,5 +1,6 @@
1
1
  import { FileInfo } from "../core/repoScanner.js";
2
2
  import { readFile } from "../utils/fileUtils.js";
3
+ import { parserRegistry, createSymbolFromParsed } from "../core/parsers/index.js";
3
4
 
4
5
  export interface Symbol {
5
6
  id: string; // Unique ID: filePath#symbolName (e.g., src/auth/login.ts#loginUser)
@@ -61,16 +62,20 @@ export function extractSymbols(files: FileInfo[]): SymbolsAnalysis {
61
62
  */
62
63
  function parseFileForSymbols(file: FileInfo): Symbol[] {
63
64
  const symbols: Symbol[] = [];
64
-
65
+
65
66
  try {
66
67
  const content = readFile(file.path);
68
+
69
+ const ext = "." + file.extension;
70
+ if (parserRegistry.hasParser(ext)) {
71
+ const parsed = parserRegistry.parse(file.relativePath, content, ext);
72
+ if (parsed) {
73
+ return createSymbolFromParsed(parsed, file.relativePath);
74
+ }
75
+ }
76
+
67
77
  const lines = content.split("\n");
68
-
69
- if (file.extension === "ts" || file.extension === "tsx" || file.extension === "js" || file.extension === "jsx") {
70
- parseJavaScriptTypeScript(file, content, lines, symbols);
71
- } else if (file.extension === "py") {
72
- parsePython(file, content, lines, symbols);
73
- } else if (file.extension === "go") {
78
+ if (file.extension === "go") {
74
79
  parseGo(file, content, lines, symbols);
75
80
  } else if (file.extension === "rs") {
76
81
  parseRust(file, content, lines, symbols);
@@ -1,6 +1,7 @@
1
1
  import { FileInfo } from "../core/repoScanner.js";
2
2
  import { readFile, readJsonFile } from "../utils/fileUtils.js";
3
3
  import path from "path";
4
+ import fs from "fs";
4
5
 
5
6
  export interface TechStack {
6
7
  languages: string[];
@@ -155,9 +156,9 @@ function detectFrameworks(files: FileInfo[], fileNames: Set<string>, rootDir: st
155
156
  }
156
157
 
157
158
  /**
158
- * Detect libraries
159
+ * Detect Node.js libraries from package.json
159
160
  */
160
- function detectLibraries(files: FileInfo[], rootDir: string): string[] {
161
+ function detectNodeLibraries(rootDir: string): string[] {
161
162
  const libraries: string[] = [];
162
163
 
163
164
  try {
@@ -185,7 +186,69 @@ function detectLibraries(files: FileInfo[], rootDir: string): string[] {
185
186
  }
186
187
  } catch {}
187
188
 
188
- return [...new Set(libraries)];
189
+ return libraries;
190
+ }
191
+
192
+ function detectSwiftLibraries(rootDir: string): string[] {
193
+ const libraries: string[] = [];
194
+ const packagePath = path.join(rootDir, "Package.swift");
195
+
196
+ try {
197
+ const content = readFile(packagePath);
198
+ const libMap: Record<string, string> = {
199
+ "Vapor": "Vapor",
200
+ "Fluent": "Fluent ORM",
201
+ "FluentPostgresDriver": "Fluent PostgreSQL",
202
+ "FluentMySQLDriver": "Fluent MySQL",
203
+ "FluentSQLiteDriver": "Fluent SQLite",
204
+ "FluentMongoDriver": "Fluent MongoDB",
205
+ "Leaf": "Leaf",
206
+ "APNS": "APNS",
207
+ "Queues": "Queues",
208
+ "QueuesRedisDriver": "Queues Redis",
209
+ "QueuesFluentDriver": "Queues Fluent",
210
+ "Mailgun": "Mailgun",
211
+ "SendGrid": "SendGrid",
212
+ "JWTKit": "JWTKit",
213
+ "Crypto": "Apple CryptoKit",
214
+ "NIO": "SwiftNIO",
215
+ "NIOSSL": "SwiftNIO SSL",
216
+ "NIOHTTP1": "SwiftNIO HTTP",
217
+ "NIOWebSocket": "SwiftNIO WebSocket",
218
+ "NIOTransportServices": "SwiftNIO Transport Services",
219
+ "AsyncHTTPClient": "AsyncHTTPClient",
220
+ "Alamofire": "Alamofire",
221
+ "Moya": "Moya",
222
+ "RxSwift": "RxSwift",
223
+ "PromiseKit": "PromiseKit",
224
+ "SwiftyJSON": "SwiftyJSON",
225
+ "ObjectMapper": "ObjectMapper",
226
+ "SnapKit": "SnapKit",
227
+ "Kingfisher": "Kingfisher",
228
+ "SDWebImage": "SDWebImage Swift",
229
+ "Lottie": "Lottie",
230
+ "SwiftLint": "SwiftLint",
231
+ "SwiftFormat": "SwiftFormat",
232
+ };
233
+
234
+ const depPattern = /\.package\s*\(\s*url:\s*"[^"]+"\s*,\s*(?:from|\.upToNextMajor|\.upToNextMinor|\.exact):\s*"[^"]+"\s*\)/g;
235
+ let match;
236
+
237
+ while ((match = depPattern.exec(content)) !== null) {
238
+ const depString = match[0];
239
+ const urlMatch = depString.match(/url:\s*"([^"]+)"/);
240
+ if (urlMatch) {
241
+ const url = urlMatch[1];
242
+ const depName = url.split("/").pop()?.replace(".git", "") || "";
243
+ const libName = libMap[depName] || depName;
244
+ if (!libraries.includes(libName)) {
245
+ libraries.push(libName);
246
+ }
247
+ }
248
+ }
249
+ } catch {}
250
+
251
+ return libraries;
189
252
  }
190
253
 
191
254
  /**
@@ -386,6 +449,143 @@ function generateTechStackDescription(
386
449
  return lines.join("\n\n");
387
450
  }
388
451
 
452
+ function detectGradleLibraries(_files: FileInfo[], rootDir: string): string[] {
453
+ const libraries: string[] = [];
454
+ const gradleFiles: string[] = [];
455
+
456
+ function findGradleFiles(dir: string, depth: number = 0) {
457
+ if (depth > 3) return;
458
+ try {
459
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
460
+ for (const entry of entries) {
461
+ const fullPath = path.join(dir, entry.name);
462
+ if (entry.isDirectory() && !entry.name.startsWith('.') && entry.name !== 'node_modules') {
463
+ findGradleFiles(fullPath, depth + 1);
464
+ } else if (entry.isFile() && (entry.name === 'build.gradle' || entry.name === 'build.gradle.kts')) {
465
+ gradleFiles.push(fullPath);
466
+ }
467
+ }
468
+ } catch {}
469
+ }
470
+
471
+ findGradleFiles(rootDir);
472
+
473
+ const libMap: Record<string, string> = {
474
+ "androidx.core": "AndroidX Core", "androidx.appcompat": "AppCompat",
475
+ "com.google.android.material": "Material Design",
476
+ "androidx.constraintlayout": "ConstraintLayout",
477
+ "androidx.navigation": "Navigation", "androidx.room": "Room",
478
+ "org.jetbrains.kotlin": "Kotlin", "kotlinx.coroutines": "Kotlin Coroutines",
479
+ "com.squareup.retrofit2": "Retrofit", "com.squareup.okhttp3": "OkHttp",
480
+ "com.google.dagger": "Dagger", "junit": "JUnit",
481
+ "org.mockito": "Mockito", "com.jakewharton.timber": "Timber",
482
+ "com.github.bumptech.glide": "Glide", "io.coil-kt": "Coil",
483
+ "com.google.code.gson": "Gson",
484
+ };
485
+
486
+ for (const gf of gradleFiles) {
487
+ try {
488
+ const content = readFile(gf);
489
+ const depPattern = /(?:implementation|api|compileOnly|runtimeOnly|testImplementation|androidTestImplementation|kapt|annotationProcessor)\s*(?:\(|\s)?['"]([^'"]+)['"](?:\))?/g;
490
+ let match;
491
+ while ((match = depPattern.exec(content)) !== null) {
492
+ const parts = match[1].split(':');
493
+ if (parts.length >= 2) {
494
+ const libName = libMap[parts[0]] || `${parts[0]}:${parts[1]}`;
495
+ if (!libraries.includes(libName)) libraries.push(libName);
496
+ }
497
+ }
498
+ if (content.includes("com.android.application") && !libraries.includes("Android Gradle Plugin")) {
499
+ libraries.push("Android Gradle Plugin");
500
+ }
501
+ } catch {}
502
+ }
503
+
504
+ return libraries;
505
+ }
506
+
507
+ function detectCargoLibraries(rootDir: string): string[] {
508
+ const libraries: string[] = [];
509
+ try {
510
+ const content = readFile(path.join(rootDir, "Cargo.toml"));
511
+ const libMap: Record<string, string> = {
512
+ tokio: "Tokio", serde: "Serde", "serde_json": "Serde JSON",
513
+ reqwest: "Reqwest", actix_web: "Actix Web", axum: "Axum",
514
+ sqlx: "SQLx", diesel: "Diesel", mongodb: "MongoDB",
515
+ redis: "Redis", chrono: "Chrono", regex: "Regex",
516
+ clap: "Clap", log: "Log", tracing: "Tracing",
517
+ anyhow: "Anyhow", thiserror: "ThisError", rayon: "Rayon",
518
+ uuid: "UUID", rand: "Rand", hyper: "Hyper",
519
+ };
520
+ const depSection = content.match(/\[dependencies\]([^\[]*)/);
521
+ if (depSection) {
522
+ const depPattern = /^(\w+)\s*=/gm;
523
+ let match;
524
+ while ((match = depPattern.exec(depSection[1])) !== null) {
525
+ const libName = libMap[match[1]] || match[1];
526
+ if (!libraries.includes(libName)) libraries.push(libName);
527
+ }
528
+ }
529
+ } catch {}
530
+ return libraries;
531
+ }
532
+
533
+ function detectGoLibraries(rootDir: string): string[] {
534
+ const libraries: string[] = [];
535
+ try {
536
+ const content = readFile(path.join(rootDir, "go.mod"));
537
+ const libMap: Record<string, string> = {
538
+ "gin-gonic/gin": "Gin", "labstack/echo": "Echo",
539
+ "gorilla/mux": "Gorilla Mux", "go-chi/chi": "Chi",
540
+ "gofiber/fiber": "Fiber", "gorm.io/gorm": "GORM",
541
+ "github.com/jmoiron/sqlx": "SQLx",
542
+ "github.com/lib/pq": "PostgreSQL Driver",
543
+ "github.com/spf13/cobra": "Cobra", "github.com/spf13/viper": "Viper",
544
+ };
545
+ const requirePattern = /^\s*(\S+)\s+v?[\d\.]+/gm;
546
+ let match;
547
+ while ((match = requirePattern.exec(content)) !== null) {
548
+ const libName = libMap[match[1]] || match[1];
549
+ if (!libraries.includes(libName)) libraries.push(libName);
550
+ }
551
+ } catch {}
552
+ return libraries;
553
+ }
554
+
555
+ function detectMavenLibraries(rootDir: string): string[] {
556
+ const libraries: string[] = [];
557
+ try {
558
+ const content = readFile(path.join(rootDir, "pom.xml"));
559
+ const libMap: Record<string, string> = {
560
+ "org.springframework.boot": "Spring Boot",
561
+ "org.springframework": "Spring Framework",
562
+ "org.springframework.data": "Spring Data",
563
+ "org.springframework.security": "Spring Security",
564
+ "org.springframework.cloud": "Spring Cloud",
565
+ };
566
+ const depPattern = /<dependency>\s*<groupId>([^<]+)<\/groupId>\s*<artifactId>([^<]+)<\/artifactId>/g;
567
+ let match;
568
+ while ((match = depPattern.exec(content)) !== null) {
569
+ const libName = libMap[match[1]] || `${match[1]}:${match[2]}`;
570
+ if (!libraries.includes(libName)) libraries.push(libName);
571
+ }
572
+ } catch {}
573
+ return libraries;
574
+ }
575
+
576
+ function detectLibraries(files: FileInfo[], rootDir: string): string[] {
577
+ const libraries: string[] = [];
578
+
579
+ libraries.push(...detectNodeLibraries(rootDir));
580
+ libraries.push(...detectGradleLibraries(files, rootDir));
581
+ libraries.push(...detectCargoLibraries(rootDir));
582
+ libraries.push(...detectGoLibraries(rootDir));
583
+ libraries.push(...detectMavenLibraries(rootDir));
584
+ libraries.push(...detectSwiftLibraries(rootDir));
585
+
586
+ return [...new Set(libraries)];
587
+ }
588
+
389
589
  /**
390
590
  * Generate tech_stack.md content
391
591
  */