ai-first-cli 1.2.3 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/.github/workflows/publish.yml +4 -1
  2. package/CHANGELOG.md +292 -6
  3. package/README.md +24 -4
  4. package/dist/analyzers/symbols.d.ts.map +1 -1
  5. package/dist/analyzers/symbols.js +9 -7
  6. package/dist/analyzers/symbols.js.map +1 -1
  7. package/dist/analyzers/techStack.d.ts.map +1 -1
  8. package/dist/analyzers/techStack.js +198 -3
  9. package/dist/analyzers/techStack.js.map +1 -1
  10. package/dist/commands/ai-first.d.ts.map +1 -1
  11. package/dist/commands/ai-first.js +14 -13
  12. package/dist/commands/ai-first.js.map +1 -1
  13. package/dist/core/analysis/architectureDetector.d.ts +37 -0
  14. package/dist/core/analysis/architectureDetector.d.ts.map +1 -0
  15. package/dist/core/analysis/architectureDetector.js +316 -0
  16. package/dist/core/analysis/architectureDetector.js.map +1 -0
  17. package/dist/core/analysis/callGraphBuilder.d.ts +37 -0
  18. package/dist/core/analysis/callGraphBuilder.d.ts.map +1 -0
  19. package/dist/core/analysis/callGraphBuilder.js +101 -0
  20. package/dist/core/analysis/callGraphBuilder.js.map +1 -0
  21. package/dist/core/analysis/dependencyAnalyzer.d.ts +45 -0
  22. package/dist/core/analysis/dependencyAnalyzer.d.ts.map +1 -0
  23. package/dist/core/analysis/dependencyAnalyzer.js +98 -0
  24. package/dist/core/analysis/dependencyAnalyzer.js.map +1 -0
  25. package/dist/core/analysis/index.d.ts +5 -0
  26. package/dist/core/analysis/index.d.ts.map +1 -0
  27. package/dist/core/analysis/index.js +5 -0
  28. package/dist/core/analysis/index.js.map +1 -0
  29. package/dist/core/analysis/inheritanceAnalyzer.d.ts +35 -0
  30. package/dist/core/analysis/inheritanceAnalyzer.d.ts.map +1 -0
  31. package/dist/core/analysis/inheritanceAnalyzer.js +115 -0
  32. package/dist/core/analysis/inheritanceAnalyzer.js.map +1 -0
  33. package/dist/core/ccp.d.ts.map +1 -1
  34. package/dist/core/ccp.js +3 -2
  35. package/dist/core/ccp.js.map +1 -1
  36. package/dist/core/generation/aiContextGenerator.d.ts +71 -0
  37. package/dist/core/generation/aiContextGenerator.d.ts.map +1 -0
  38. package/dist/core/generation/aiContextGenerator.js +217 -0
  39. package/dist/core/generation/aiContextGenerator.js.map +1 -0
  40. package/dist/core/generation/architectureGenerator.d.ts +17 -0
  41. package/dist/core/generation/architectureGenerator.d.ts.map +1 -0
  42. package/dist/core/generation/architectureGenerator.js +160 -0
  43. package/dist/core/generation/architectureGenerator.js.map +1 -0
  44. package/dist/core/generation/flowGenerator.d.ts +52 -0
  45. package/dist/core/generation/flowGenerator.d.ts.map +1 -0
  46. package/dist/core/generation/flowGenerator.js +164 -0
  47. package/dist/core/generation/flowGenerator.js.map +1 -0
  48. package/dist/core/generation/index.d.ts +4 -0
  49. package/dist/core/generation/index.d.ts.map +1 -0
  50. package/dist/core/generation/index.js +4 -0
  51. package/dist/core/generation/index.js.map +1 -0
  52. package/dist/core/hierarchyGenerator.d.ts.map +1 -1
  53. package/dist/core/hierarchyGenerator.js +3 -2
  54. package/dist/core/hierarchyGenerator.js.map +1 -1
  55. package/dist/core/parsers/index.d.ts +20 -0
  56. package/dist/core/parsers/index.d.ts.map +1 -0
  57. package/dist/core/parsers/index.js +76 -0
  58. package/dist/core/parsers/index.js.map +1 -0
  59. package/dist/core/parsers/pythonParser.d.ts +37 -0
  60. package/dist/core/parsers/pythonParser.d.ts.map +1 -0
  61. package/dist/core/parsers/pythonParser.js +229 -0
  62. package/dist/core/parsers/pythonParser.js.map +1 -0
  63. package/dist/core/parsers/typescriptParser.d.ts +54 -0
  64. package/dist/core/parsers/typescriptParser.d.ts.map +1 -0
  65. package/dist/core/parsers/typescriptParser.js +291 -0
  66. package/dist/core/parsers/typescriptParser.js.map +1 -0
  67. package/dist/core/pipeline.d.ts +42 -0
  68. package/dist/core/pipeline.d.ts.map +1 -0
  69. package/dist/core/pipeline.js +172 -0
  70. package/dist/core/pipeline.js.map +1 -0
  71. package/dist/core/semanticContexts.js +1 -1
  72. package/dist/core/semanticContexts.js.map +1 -1
  73. package/dist/utils/constants.d.ts +46 -0
  74. package/dist/utils/constants.d.ts.map +1 -0
  75. package/dist/utils/constants.js +67 -0
  76. package/dist/utils/constants.js.map +1 -0
  77. package/package.json +1 -1
  78. package/run-all-tests.sh +184 -0
  79. package/src/analyzers/symbols.ts +12 -7
  80. package/src/analyzers/techStack.ts +203 -3
  81. package/src/commands/ai-first.ts +14 -13
  82. package/src/core/analysis/architectureDetector.ts +487 -0
  83. package/src/core/analysis/callGraphBuilder.ts +158 -0
  84. package/src/core/analysis/dependencyAnalyzer.ts +167 -0
  85. package/src/core/analysis/index.ts +28 -0
  86. package/src/core/analysis/inheritanceAnalyzer.ts +169 -0
  87. package/src/core/ccp.ts +3 -2
  88. package/src/core/generation/aiContextGenerator.ts +335 -0
  89. package/src/core/generation/architectureGenerator.ts +200 -0
  90. package/src/core/generation/flowGenerator.ts +238 -0
  91. package/src/core/generation/index.ts +16 -0
  92. package/src/core/hierarchyGenerator.ts +3 -2
  93. package/src/core/parsers/index.ts +99 -0
  94. package/src/core/parsers/pythonParser.ts +302 -0
  95. package/src/core/parsers/typescriptParser.ts +445 -0
  96. package/src/core/pipeline.ts +241 -0
  97. package/src/core/semanticContexts.ts +1 -1
  98. package/src/utils/constants.ts +78 -0
  99. package/test-ai-context-understanding.sh +21 -0
  100. package/test_adapters.mjs +11 -11
  101. package/tests/analysis.test.ts +283 -0
  102. package/tests/architectureDetector.test.ts +137 -0
  103. package/tests/generation.test.ts +216 -0
  104. package/tests/parserRegistry.test.ts +139 -0
  105. package/tests/pipeline.integration.test.ts +245 -0
  106. package/tests/pythonParser.test.ts +210 -0
  107. package/tests/typescriptParser.test.ts +197 -0
  108. package/.ai-dev/index.db +0 -0
  109. package/BUGS.md +0 -455
  110. package/PLAN_MEJORAS.md +0 -216
  111. package/STATUS_ADAPTADORES +0 -126
  112. package/TEST_RESULTS_PHASE1.md +0 -420
  113. package/ai/dependencies.json +0 -15
  114. package/ai/graph/knowledge-graph.json +0 -12
  115. package/ai-context/ai_context.md +0 -130
  116. package/ai-context/ai_rules.md +0 -54
  117. package/ai-context/architecture.md +0 -136
  118. package/ai-context/cache.json +0 -2349
  119. package/ai-context/ccp/jira-123/context.json +0 -7
  120. package/ai-context/context/features/commands.json +0 -18
  121. package/ai-context/context/features/src.json +0 -61
  122. package/ai-context/context/features/test-projects.json +0 -69
  123. package/ai-context/context/flows/account.json +0 -9
  124. package/ai-context/context/flows/ai-first.json +0 -9
  125. package/ai-context/context/flows/api.json +0 -9
  126. package/ai-context/context/flows/auth.json +0 -13
  127. package/ai-context/context/flows/category.json +0 -12
  128. package/ai-context/context/flows/comment.json +0 -16
  129. package/ai-context/context/flows/dashboard.json +0 -9
  130. package/ai-context/context/flows/doctor.json +0 -9
  131. package/ai-context/context/flows/explore.json +0 -9
  132. package/ai-context/context/flows/login.json +0 -9
  133. package/ai-context/context/flows/opportunity.json +0 -9
  134. package/ai-context/context/flows/post.json +0 -18
  135. package/ai-context/context/flows/routes.json +0 -19
  136. package/ai-context/context/flows/user.json +0 -20
  137. package/ai-context/context/flows/users.json +0 -9
  138. package/ai-context/context/flows/views.json +0 -14
  139. package/ai-context/context/repo.json +0 -56
  140. package/ai-context/context/utils.json +0 -7
  141. package/ai-context/conventions.md +0 -53
  142. package/ai-context/dependencies.json +0 -2978
  143. package/ai-context/embeddings.json +0 -23828
  144. package/ai-context/entrypoints.md +0 -42
  145. package/ai-context/files.json +0 -2944
  146. package/ai-context/git/commit-activity.json +0 -8646
  147. package/ai-context/git/recent-features.json +0 -1
  148. package/ai-context/git/recent-files.json +0 -52
  149. package/ai-context/git/recent-flows.json +0 -1
  150. package/ai-context/graph/knowledge-graph.json +0 -44129
  151. package/ai-context/graph/module-graph.json +0 -866
  152. package/ai-context/graph/symbol-graph.json +0 -200622
  153. package/ai-context/graph/symbol-references.json +0 -6778
  154. package/ai-context/hierarchy.json +0 -20
  155. package/ai-context/index-state.json +0 -4487
  156. package/ai-context/index.db +0 -0
  157. package/ai-context/modules.json +0 -933
  158. package/ai-context/project.json +0 -30
  159. package/ai-context/repo_map.json +0 -9116
  160. package/ai-context/repo_map.md +0 -2061
  161. package/ai-context/schema.json +0 -5
  162. package/ai-context/summary.md +0 -47
  163. package/ai-context/symbols.json +0 -65351
  164. package/ai-context/tech_stack.md +0 -47
  165. package/ai-context/tools.json +0 -10
  166. package/test-projects/django-app/.ai-dev/index.db +0 -0
  167. package/test-projects/django-app/ai-context/ai_context.md +0 -92
  168. package/test-projects/django-app/ai-context/ai_rules.md +0 -47
  169. package/test-projects/django-app/ai-context/architecture.md +0 -57
  170. package/test-projects/django-app/ai-context/cache.json +0 -169
  171. package/test-projects/django-app/ai-context/context/flows/views.json +0 -10
  172. package/test-projects/django-app/ai-context/conventions.md +0 -51
  173. package/test-projects/django-app/ai-context/dependencies.json +0 -312
  174. package/test-projects/django-app/ai-context/entrypoints.md +0 -4
  175. package/test-projects/django-app/ai-context/files.json +0 -209
  176. package/test-projects/django-app/ai-context/graph/knowledge-graph.json +0 -36
  177. package/test-projects/django-app/ai-context/graph/module-graph.json +0 -145
  178. package/test-projects/django-app/ai-context/graph/symbol-graph.json +0 -1488
  179. package/test-projects/django-app/ai-context/graph/symbol-references.json +0 -1
  180. package/test-projects/django-app/ai-context/index-state.json +0 -294
  181. package/test-projects/django-app/ai-context/index.db +0 -0
  182. package/test-projects/django-app/ai-context/modules.json +0 -35
  183. package/test-projects/django-app/ai-context/project.json +0 -11
  184. package/test-projects/django-app/ai-context/repo_map.json +0 -412
  185. package/test-projects/django-app/ai-context/repo_map.md +0 -105
  186. package/test-projects/django-app/ai-context/schema.json +0 -5
  187. package/test-projects/django-app/ai-context/summary.md +0 -15
  188. package/test-projects/django-app/ai-context/symbols.json +0 -1
  189. package/test-projects/django-app/ai-context/tech_stack.md +0 -32
  190. package/test-projects/django-app/ai-context/tools.json +0 -10
  191. package/test-projects/express-api/ai-context/ai_context.md +0 -112
  192. package/test-projects/express-api/ai-context/ai_rules.md +0 -50
  193. package/test-projects/express-api/ai-context/architecture.md +0 -62
  194. package/test-projects/express-api/ai-context/context/features/controllers.json +0 -13
  195. package/test-projects/express-api/ai-context/context/features/services.json +0 -13
  196. package/test-projects/express-api/ai-context/context/flows/auth.json +0 -12
  197. package/test-projects/express-api/ai-context/context/flows/user.json +0 -13
  198. package/test-projects/express-api/ai-context/conventions.md +0 -51
  199. package/test-projects/express-api/ai-context/dependencies.json +0 -54
  200. package/test-projects/express-api/ai-context/entrypoints.md +0 -17
  201. package/test-projects/express-api/ai-context/modules.json +0 -30
  202. package/test-projects/express-api/ai-context/project.json +0 -15
  203. package/test-projects/express-api/ai-context/repo_map.json +0 -100
  204. package/test-projects/express-api/ai-context/repo_map.md +0 -36
  205. package/test-projects/express-api/ai-context/schema.json +0 -5
  206. package/test-projects/express-api/ai-context/summary.md +0 -14
  207. package/test-projects/express-api/ai-context/symbols.json +0 -7
  208. package/test-projects/express-api/ai-context/tech_stack.md +0 -38
  209. package/test-projects/express-api/ai-context/tools.json +0 -10
  210. package/test-projects/fastapi-app/.ai-dev/index.db +0 -0
  211. package/test-projects/fastapi-app/ai-context/ai_context.md +0 -89
  212. package/test-projects/fastapi-app/ai-context/ai_rules.md +0 -47
  213. package/test-projects/fastapi-app/ai-context/architecture.md +0 -39
  214. package/test-projects/fastapi-app/ai-context/cache.json +0 -125
  215. package/test-projects/fastapi-app/ai-context/conventions.md +0 -51
  216. package/test-projects/fastapi-app/ai-context/dependencies.json +0 -244
  217. package/test-projects/fastapi-app/ai-context/entrypoints.md +0 -4
  218. package/test-projects/fastapi-app/ai-context/files.json +0 -154
  219. package/test-projects/fastapi-app/ai-context/graph/knowledge-graph.json +0 -15
  220. package/test-projects/fastapi-app/ai-context/graph/module-graph.json +0 -78
  221. package/test-projects/fastapi-app/ai-context/graph/symbol-graph.json +0 -1724
  222. package/test-projects/fastapi-app/ai-context/graph/symbol-references.json +0 -51
  223. package/test-projects/fastapi-app/ai-context/index-state.json +0 -217
  224. package/test-projects/fastapi-app/ai-context/index.db +0 -0
  225. package/test-projects/fastapi-app/ai-context/modules.json +0 -16
  226. package/test-projects/fastapi-app/ai-context/project.json +0 -9
  227. package/test-projects/fastapi-app/ai-context/repo_map.json +0 -298
  228. package/test-projects/fastapi-app/ai-context/repo_map.md +0 -74
  229. package/test-projects/fastapi-app/ai-context/schema.json +0 -5
  230. package/test-projects/fastapi-app/ai-context/summary.md +0 -12
  231. package/test-projects/fastapi-app/ai-context/symbols.json +0 -1
  232. package/test-projects/fastapi-app/ai-context/tech_stack.md +0 -32
  233. package/test-projects/fastapi-app/ai-context/tools.json +0 -10
  234. package/test-projects/flask-app/.ai-dev/index.db +0 -0
  235. package/test-projects/flask-app/ai-context/ai_context.md +0 -94
  236. package/test-projects/flask-app/ai-context/ai_rules.md +0 -47
  237. package/test-projects/flask-app/ai-context/architecture.md +0 -49
  238. package/test-projects/flask-app/ai-context/cache.json +0 -157
  239. package/test-projects/flask-app/ai-context/context/features/app.json +0 -25
  240. package/test-projects/flask-app/ai-context/context/flows/routes.json +0 -14
  241. package/test-projects/flask-app/ai-context/conventions.md +0 -51
  242. package/test-projects/flask-app/ai-context/dependencies.json +0 -298
  243. package/test-projects/flask-app/ai-context/entrypoints.md +0 -4
  244. package/test-projects/flask-app/ai-context/files.json +0 -194
  245. package/test-projects/flask-app/ai-context/graph/knowledge-graph.json +0 -60
  246. package/test-projects/flask-app/ai-context/graph/module-graph.json +0 -95
  247. package/test-projects/flask-app/ai-context/graph/symbol-graph.json +0 -1448
  248. package/test-projects/flask-app/ai-context/graph/symbol-references.json +0 -45
  249. package/test-projects/flask-app/ai-context/index-state.json +0 -273
  250. package/test-projects/flask-app/ai-context/index.db +0 -0
  251. package/test-projects/flask-app/ai-context/modules.json +0 -21
  252. package/test-projects/flask-app/ai-context/project.json +0 -13
  253. package/test-projects/flask-app/ai-context/repo_map.json +0 -400
  254. package/test-projects/flask-app/ai-context/repo_map.md +0 -98
  255. package/test-projects/flask-app/ai-context/schema.json +0 -5
  256. package/test-projects/flask-app/ai-context/summary.md +0 -13
  257. package/test-projects/flask-app/ai-context/symbols.json +0 -1
  258. package/test-projects/flask-app/ai-context/tech_stack.md +0 -32
  259. package/test-projects/flask-app/ai-context/tools.json +0 -10
  260. package/test-projects/laravel-app/.ai-dev/index.db +0 -0
  261. package/test-projects/laravel-app/ai-context/ai_context.md +0 -97
  262. package/test-projects/laravel-app/ai-context/ai_rules.md +0 -47
  263. package/test-projects/laravel-app/ai-context/architecture.md +0 -60
  264. package/test-projects/laravel-app/ai-context/cache.json +0 -161
  265. package/test-projects/laravel-app/ai-context/context/features/app.json +0 -21
  266. package/test-projects/laravel-app/ai-context/context/flows/.json +0 -9
  267. package/test-projects/laravel-app/ai-context/context/flows/category.json +0 -12
  268. package/test-projects/laravel-app/ai-context/context/flows/comment.json +0 -12
  269. package/test-projects/laravel-app/ai-context/context/flows/post.json +0 -12
  270. package/test-projects/laravel-app/ai-context/context/flows/unnamed.json +0 -9
  271. package/test-projects/laravel-app/ai-context/conventions.md +0 -51
  272. package/test-projects/laravel-app/ai-context/dependencies.json +0 -6
  273. package/test-projects/laravel-app/ai-context/entrypoints.md +0 -4
  274. package/test-projects/laravel-app/ai-context/files.json +0 -199
  275. package/test-projects/laravel-app/ai-context/graph/knowledge-graph.json +0 -98
  276. package/test-projects/laravel-app/ai-context/graph/module-graph.json +0 -30
  277. package/test-projects/laravel-app/ai-context/graph/symbol-graph.json +0 -5
  278. package/test-projects/laravel-app/ai-context/graph/symbol-references.json +0 -1
  279. package/test-projects/laravel-app/ai-context/index-state.json +0 -280
  280. package/test-projects/laravel-app/ai-context/index.db +0 -0
  281. package/test-projects/laravel-app/ai-context/modules.json +0 -29
  282. package/test-projects/laravel-app/ai-context/project.json +0 -17
  283. package/test-projects/laravel-app/ai-context/repo_map.json +0 -419
  284. package/test-projects/laravel-app/ai-context/repo_map.md +0 -106
  285. package/test-projects/laravel-app/ai-context/schema.json +0 -5
  286. package/test-projects/laravel-app/ai-context/summary.md +0 -15
  287. package/test-projects/laravel-app/ai-context/symbols.json +0 -1
  288. package/test-projects/laravel-app/ai-context/tech_stack.md +0 -34
  289. package/test-projects/laravel-app/ai-context/tools.json +0 -10
  290. package/test-projects/nestjs-backend/.ai-dev/index.db +0 -0
  291. package/test-projects/nestjs-backend/ai-context/ai_context.md +0 -111
  292. package/test-projects/nestjs-backend/ai-context/ai_rules.md +0 -52
  293. package/test-projects/nestjs-backend/ai-context/architecture.md +0 -49
  294. package/test-projects/nestjs-backend/ai-context/cache.json +0 -169
  295. package/test-projects/nestjs-backend/ai-context/context/features/src.json +0 -23
  296. package/test-projects/nestjs-backend/ai-context/context/flows/auth.controller.json +0 -14
  297. package/test-projects/nestjs-backend/ai-context/context/flows/auth.json +0 -10
  298. package/test-projects/nestjs-backend/ai-context/context/flows/users..json +0 -10
  299. package/test-projects/nestjs-backend/ai-context/context/flows/users.controller.json +0 -14
  300. package/test-projects/nestjs-backend/ai-context/context/flows/users.json +0 -10
  301. package/test-projects/nestjs-backend/ai-context/conventions.md +0 -52
  302. package/test-projects/nestjs-backend/ai-context/dependencies.json +0 -152
  303. package/test-projects/nestjs-backend/ai-context/entrypoints.md +0 -18
  304. package/test-projects/nestjs-backend/ai-context/files.json +0 -209
  305. package/test-projects/nestjs-backend/ai-context/graph/knowledge-graph.json +0 -132
  306. package/test-projects/nestjs-backend/ai-context/graph/module-graph.json +0 -29
  307. package/test-projects/nestjs-backend/ai-context/graph/symbol-graph.json +0 -304
  308. package/test-projects/nestjs-backend/ai-context/graph/symbol-references.json +0 -5
  309. package/test-projects/nestjs-backend/ai-context/index-state.json +0 -294
  310. package/test-projects/nestjs-backend/ai-context/index.db +0 -0
  311. package/test-projects/nestjs-backend/ai-context/modules.json +0 -19
  312. package/test-projects/nestjs-backend/ai-context/project.json +0 -18
  313. package/test-projects/nestjs-backend/ai-context/repo_map.json +0 -427
  314. package/test-projects/nestjs-backend/ai-context/repo_map.md +0 -104
  315. package/test-projects/nestjs-backend/ai-context/schema.json +0 -5
  316. package/test-projects/nestjs-backend/ai-context/summary.md +0 -13
  317. package/test-projects/nestjs-backend/ai-context/symbols.json +0 -1
  318. package/test-projects/nestjs-backend/ai-context/tech_stack.md +0 -38
  319. package/test-projects/nestjs-backend/ai-context/tools.json +0 -10
  320. package/test-projects/python-cli/.ai-dev/index.db +0 -0
  321. package/test-projects/python-cli/ai-context/ai_context.md +0 -95
  322. package/test-projects/python-cli/ai-context/ai_rules.md +0 -47
  323. package/test-projects/python-cli/ai-context/architecture.md +0 -55
  324. package/test-projects/python-cli/ai-context/cache.json +0 -149
  325. package/test-projects/python-cli/ai-context/context/features/cli.json +0 -16
  326. package/test-projects/python-cli/ai-context/context/flows/list_.json +0 -9
  327. package/test-projects/python-cli/ai-context/context/flows/remove_.json +0 -9
  328. package/test-projects/python-cli/ai-context/conventions.md +0 -51
  329. package/test-projects/python-cli/ai-context/dependencies.json +0 -66
  330. package/test-projects/python-cli/ai-context/entrypoints.md +0 -4
  331. package/test-projects/python-cli/ai-context/files.json +0 -184
  332. package/test-projects/python-cli/ai-context/graph/knowledge-graph.json +0 -83
  333. package/test-projects/python-cli/ai-context/graph/module-graph.json +0 -31
  334. package/test-projects/python-cli/ai-context/graph/symbol-graph.json +0 -358
  335. package/test-projects/python-cli/ai-context/graph/symbol-references.json +0 -11
  336. package/test-projects/python-cli/ai-context/index-state.json +0 -259
  337. package/test-projects/python-cli/ai-context/index.db +0 -0
  338. package/test-projects/python-cli/ai-context/modules.json +0 -21
  339. package/test-projects/python-cli/ai-context/project.json +0 -15
  340. package/test-projects/python-cli/ai-context/repo_map.json +0 -367
  341. package/test-projects/python-cli/ai-context/repo_map.md +0 -93
  342. package/test-projects/python-cli/ai-context/schema.json +0 -5
  343. package/test-projects/python-cli/ai-context/summary.md +0 -14
  344. package/test-projects/python-cli/ai-context/symbols.json +0 -1
  345. package/test-projects/python-cli/ai-context/tech_stack.md +0 -32
  346. package/test-projects/python-cli/ai-context/tools.json +0 -10
  347. package/test-projects/rails-app/.ai-dev/index.db +0 -0
  348. package/test-projects/rails-app/ai-context/ai_context.md +0 -94
  349. package/test-projects/rails-app/ai-context/ai_rules.md +0 -47
  350. package/test-projects/rails-app/ai-context/architecture.md +0 -49
  351. package/test-projects/rails-app/ai-context/cache.json +0 -193
  352. package/test-projects/rails-app/ai-context/context/features/app.json +0 -24
  353. package/test-projects/rails-app/ai-context/context/features/config.json +0 -13
  354. package/test-projects/rails-app/ai-context/context/flows/application.json +0 -9
  355. package/test-projects/rails-app/ai-context/context/flows/application_.json +0 -9
  356. package/test-projects/rails-app/ai-context/context/flows/comments.json +0 -11
  357. package/test-projects/rails-app/ai-context/context/flows/comments_.json +0 -11
  358. package/test-projects/rails-app/ai-context/context/flows/posts.json +0 -11
  359. package/test-projects/rails-app/ai-context/context/flows/posts_.json +0 -11
  360. package/test-projects/rails-app/ai-context/context/flows/routes.json +0 -9
  361. package/test-projects/rails-app/ai-context/context/flows/users.json +0 -11
  362. package/test-projects/rails-app/ai-context/context/flows/users_.json +0 -11
  363. package/test-projects/rails-app/ai-context/conventions.md +0 -51
  364. package/test-projects/rails-app/ai-context/dependencies.json +0 -6
  365. package/test-projects/rails-app/ai-context/entrypoints.md +0 -4
  366. package/test-projects/rails-app/ai-context/files.json +0 -239
  367. package/test-projects/rails-app/ai-context/graph/knowledge-graph.json +0 -130
  368. package/test-projects/rails-app/ai-context/graph/module-graph.json +0 -27
  369. package/test-projects/rails-app/ai-context/graph/symbol-graph.json +0 -5
  370. package/test-projects/rails-app/ai-context/graph/symbol-references.json +0 -1
  371. package/test-projects/rails-app/ai-context/index-state.json +0 -336
  372. package/test-projects/rails-app/ai-context/index.db +0 -0
  373. package/test-projects/rails-app/ai-context/modules.json +0 -26
  374. package/test-projects/rails-app/ai-context/project.json +0 -22
  375. package/test-projects/rails-app/ai-context/repo_map.json +0 -486
  376. package/test-projects/rails-app/ai-context/repo_map.md +0 -117
  377. package/test-projects/rails-app/ai-context/schema.json +0 -5
  378. package/test-projects/rails-app/ai-context/summary.md +0 -13
  379. package/test-projects/rails-app/ai-context/symbols.json +0 -1
  380. package/test-projects/rails-app/ai-context/tech_stack.md +0 -32
  381. package/test-projects/rails-app/ai-context/tools.json +0 -10
  382. package/test-projects/react-app/.ai-dev/index.db +0 -0
  383. package/test-projects/react-app/ai-context/ai_context.md +0 -96
  384. package/test-projects/react-app/ai-context/ai_rules.md +0 -49
  385. package/test-projects/react-app/ai-context/architecture.md +0 -39
  386. package/test-projects/react-app/ai-context/cache.json +0 -153
  387. package/test-projects/react-app/ai-context/context/features/src.json +0 -18
  388. package/test-projects/react-app/ai-context/context/flows/UsersPage.json +0 -14
  389. package/test-projects/react-app/ai-context/context/flows/dashboard.json +0 -9
  390. package/test-projects/react-app/ai-context/context/flows/login.json +0 -9
  391. package/test-projects/react-app/ai-context/context/flows/users.json +0 -9
  392. package/test-projects/react-app/ai-context/conventions.md +0 -52
  393. package/test-projects/react-app/ai-context/dependencies.json +0 -128
  394. package/test-projects/react-app/ai-context/entrypoints.md +0 -4
  395. package/test-projects/react-app/ai-context/files.json +0 -189
  396. package/test-projects/react-app/ai-context/graph/knowledge-graph.json +0 -112
  397. package/test-projects/react-app/ai-context/graph/module-graph.json +0 -31
  398. package/test-projects/react-app/ai-context/graph/symbol-graph.json +0 -868
  399. package/test-projects/react-app/ai-context/graph/symbol-references.json +0 -31
  400. package/test-projects/react-app/ai-context/index-state.json +0 -266
  401. package/test-projects/react-app/ai-context/index.db +0 -0
  402. package/test-projects/react-app/ai-context/modules.json +0 -17
  403. package/test-projects/react-app/ai-context/project.json +0 -16
  404. package/test-projects/react-app/ai-context/repo_map.json +0 -391
  405. package/test-projects/react-app/ai-context/repo_map.md +0 -94
  406. package/test-projects/react-app/ai-context/schema.json +0 -5
  407. package/test-projects/react-app/ai-context/summary.md +0 -13
  408. package/test-projects/react-app/ai-context/symbols.json +0 -1
  409. package/test-projects/react-app/ai-context/tech_stack.md +0 -39
  410. package/test-projects/react-app/ai-context/tools.json +0 -10
  411. package/test-projects/salesforce-cli/.ai-dev/index.db +0 -0
  412. package/test-projects/salesforce-cli/ai-context/ai_context.md +0 -89
  413. package/test-projects/salesforce-cli/ai-context/ai_rules.md +0 -47
  414. package/test-projects/salesforce-cli/ai-context/architecture.md +0 -39
  415. package/test-projects/salesforce-cli/ai-context/cache.json +0 -125
  416. package/test-projects/salesforce-cli/ai-context/context/features/force-app.json +0 -14
  417. package/test-projects/salesforce-cli/ai-context/context/flows/account.json +0 -9
  418. package/test-projects/salesforce-cli/ai-context/context/flows/opportunity.json +0 -9
  419. package/test-projects/salesforce-cli/ai-context/conventions.md +0 -51
  420. package/test-projects/salesforce-cli/ai-context/dependencies.json +0 -6
  421. package/test-projects/salesforce-cli/ai-context/entrypoints.md +0 -4
  422. package/test-projects/salesforce-cli/ai-context/files.json +0 -154
  423. package/test-projects/salesforce-cli/ai-context/graph/knowledge-graph.json +0 -64
  424. package/test-projects/salesforce-cli/ai-context/graph/module-graph.json +0 -13
  425. package/test-projects/salesforce-cli/ai-context/graph/symbol-graph.json +0 -148
  426. package/test-projects/salesforce-cli/ai-context/graph/symbol-references.json +0 -1
  427. package/test-projects/salesforce-cli/ai-context/index-state.json +0 -217
  428. package/test-projects/salesforce-cli/ai-context/index.db +0 -0
  429. package/test-projects/salesforce-cli/ai-context/modules.json +0 -12
  430. package/test-projects/salesforce-cli/ai-context/project.json +0 -14
  431. package/test-projects/salesforce-cli/ai-context/repo_map.json +0 -328
  432. package/test-projects/salesforce-cli/ai-context/repo_map.md +0 -80
  433. package/test-projects/salesforce-cli/ai-context/schema.json +0 -5
  434. package/test-projects/salesforce-cli/ai-context/summary.md +0 -13
  435. package/test-projects/salesforce-cli/ai-context/symbols.json +0 -1
  436. package/test-projects/salesforce-cli/ai-context/tech_stack.md +0 -31
  437. package/test-projects/salesforce-cli/ai-context/tools.json +0 -10
  438. package/test-projects/spring-boot-app/.ai-dev/index.db +0 -0
  439. package/test-projects/spring-boot-app/ai-context/ai_context.md +0 -91
  440. package/test-projects/spring-boot-app/ai-context/ai_rules.md +0 -48
  441. package/test-projects/spring-boot-app/ai-context/architecture.md +0 -39
  442. package/test-projects/spring-boot-app/ai-context/cache.json +0 -173
  443. package/test-projects/spring-boot-app/ai-context/context/features/src.json +0 -26
  444. package/test-projects/spring-boot-app/ai-context/context/flows/PostController.json +0 -19
  445. package/test-projects/spring-boot-app/ai-context/context/flows/UserController.json +0 -19
  446. package/test-projects/spring-boot-app/ai-context/context/flows/comment.json +0 -11
  447. package/test-projects/spring-boot-app/ai-context/context/flows/post.json +0 -14
  448. package/test-projects/spring-boot-app/ai-context/context/flows/user.json +0 -14
  449. package/test-projects/spring-boot-app/ai-context/conventions.md +0 -52
  450. package/test-projects/spring-boot-app/ai-context/dependencies.json +0 -326
  451. package/test-projects/spring-boot-app/ai-context/entrypoints.md +0 -4
  452. package/test-projects/spring-boot-app/ai-context/files.json +0 -214
  453. package/test-projects/spring-boot-app/ai-context/graph/knowledge-graph.json +0 -231
  454. package/test-projects/spring-boot-app/ai-context/graph/module-graph.json +0 -22
  455. package/test-projects/spring-boot-app/ai-context/graph/symbol-graph.json +0 -794
  456. package/test-projects/spring-boot-app/ai-context/graph/symbol-references.json +0 -70
  457. package/test-projects/spring-boot-app/ai-context/index-state.json +0 -301
  458. package/test-projects/spring-boot-app/ai-context/index.db +0 -0
  459. package/test-projects/spring-boot-app/ai-context/modules.json +0 -21
  460. package/test-projects/spring-boot-app/ai-context/project.json +0 -17
  461. package/test-projects/spring-boot-app/ai-context/repo_map.json +0 -461
  462. package/test-projects/spring-boot-app/ai-context/repo_map.md +0 -109
  463. package/test-projects/spring-boot-app/ai-context/schema.json +0 -5
  464. package/test-projects/spring-boot-app/ai-context/summary.md +0 -12
  465. package/test-projects/spring-boot-app/ai-context/symbols.json +0 -1
  466. package/test-projects/spring-boot-app/ai-context/tech_stack.md +0 -32
  467. 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.1",
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
  */