attocode 0.2.4 → 0.2.5

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 (577) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/dist/src/adapters.d.ts +2 -1
  3. package/dist/src/adapters.d.ts.map +1 -1
  4. package/dist/src/adapters.js +60 -2
  5. package/dist/src/adapters.js.map +1 -1
  6. package/dist/src/agent/agent-builder.d.ts +117 -0
  7. package/dist/src/agent/agent-builder.d.ts.map +1 -0
  8. package/dist/src/agent/agent-builder.js +204 -0
  9. package/dist/src/agent/agent-builder.js.map +1 -0
  10. package/dist/src/agent/feature-initializer.d.ts +80 -0
  11. package/dist/src/agent/feature-initializer.d.ts.map +1 -0
  12. package/dist/src/agent/feature-initializer.js +677 -0
  13. package/dist/src/agent/feature-initializer.js.map +1 -0
  14. package/dist/src/agent/index.d.ts +13 -0
  15. package/dist/src/agent/index.d.ts.map +1 -0
  16. package/dist/src/agent/index.js +13 -0
  17. package/dist/src/agent/index.js.map +1 -0
  18. package/dist/src/agent/message-builder.d.ts +50 -0
  19. package/dist/src/agent/message-builder.d.ts.map +1 -0
  20. package/dist/src/agent/message-builder.js +173 -0
  21. package/dist/src/agent/message-builder.js.map +1 -0
  22. package/dist/src/agent/session-api.d.ts +94 -0
  23. package/dist/src/agent/session-api.d.ts.map +1 -0
  24. package/dist/src/agent/session-api.js +262 -0
  25. package/dist/src/agent/session-api.js.map +1 -0
  26. package/dist/src/agent-tools/lsp-file-tools.d.ts +1 -1
  27. package/dist/src/agent-tools/lsp-file-tools.d.ts.map +1 -1
  28. package/dist/src/agent.d.ts +14 -115
  29. package/dist/src/agent.d.ts.map +1 -1
  30. package/dist/src/agent.js +36 -1177
  31. package/dist/src/agent.js.map +1 -1
  32. package/dist/src/cli.js +1 -1
  33. package/dist/src/cli.js.map +1 -1
  34. package/dist/src/commands/handler.d.ts.map +1 -1
  35. package/dist/src/commands/handler.js +8 -7
  36. package/dist/src/commands/handler.js.map +1 -1
  37. package/dist/src/commands/init.js +1 -1
  38. package/dist/src/commands/init.js.map +1 -1
  39. package/dist/src/config/schema.d.ts +6 -6
  40. package/dist/src/core/execution-loop.d.ts.map +1 -1
  41. package/dist/src/core/execution-loop.js +155 -16
  42. package/dist/src/core/execution-loop.js.map +1 -1
  43. package/dist/src/core/response-handler.d.ts.map +1 -1
  44. package/dist/src/core/response-handler.js +3 -2
  45. package/dist/src/core/response-handler.js.map +1 -1
  46. package/dist/src/core/subagent-spawner.d.ts.map +1 -1
  47. package/dist/src/core/subagent-spawner.js +13 -6
  48. package/dist/src/core/subagent-spawner.js.map +1 -1
  49. package/dist/src/core/tool-executor.d.ts.map +1 -1
  50. package/dist/src/core/tool-executor.js +7 -2
  51. package/dist/src/core/tool-executor.js.map +1 -1
  52. package/dist/src/core/types.d.ts +1 -0
  53. package/dist/src/core/types.d.ts.map +1 -1
  54. package/dist/src/core/types.js.map +1 -1
  55. package/dist/src/integrations/agents/agent-registry.d.ts +262 -0
  56. package/dist/src/integrations/agents/agent-registry.d.ts.map +1 -0
  57. package/dist/src/integrations/agents/agent-registry.js +686 -0
  58. package/dist/src/integrations/agents/agent-registry.js.map +1 -0
  59. package/dist/src/integrations/agents/async-subagent.d.ts +135 -0
  60. package/dist/src/integrations/agents/async-subagent.d.ts.map +1 -0
  61. package/dist/src/integrations/agents/async-subagent.js +213 -0
  62. package/dist/src/integrations/agents/async-subagent.js.map +1 -0
  63. package/dist/src/integrations/agents/complexity-classifier.d.ts +86 -0
  64. package/dist/src/integrations/agents/complexity-classifier.d.ts.map +1 -0
  65. package/dist/src/integrations/agents/complexity-classifier.js +233 -0
  66. package/dist/src/integrations/agents/complexity-classifier.js.map +1 -0
  67. package/dist/src/integrations/agents/delegation-protocol.d.ts +86 -0
  68. package/dist/src/integrations/agents/delegation-protocol.d.ts.map +1 -0
  69. package/dist/src/integrations/agents/delegation-protocol.js +127 -0
  70. package/dist/src/integrations/agents/delegation-protocol.js.map +1 -0
  71. package/dist/src/integrations/agents/multi-agent.d.ts +150 -0
  72. package/dist/src/integrations/agents/multi-agent.d.ts.map +1 -0
  73. package/dist/src/integrations/agents/multi-agent.js +306 -0
  74. package/dist/src/integrations/agents/multi-agent.js.map +1 -0
  75. package/dist/src/integrations/agents/result-synthesizer.d.ts +389 -0
  76. package/dist/src/integrations/agents/result-synthesizer.d.ts.map +1 -0
  77. package/dist/src/integrations/agents/result-synthesizer.js +951 -0
  78. package/dist/src/integrations/agents/result-synthesizer.js.map +1 -0
  79. package/dist/src/integrations/agents/shared-blackboard.d.ts +406 -0
  80. package/dist/src/integrations/agents/shared-blackboard.d.ts.map +1 -0
  81. package/dist/src/integrations/agents/shared-blackboard.js +757 -0
  82. package/dist/src/integrations/agents/shared-blackboard.js.map +1 -0
  83. package/dist/src/integrations/agents/subagent-output-store.d.ts +91 -0
  84. package/dist/src/integrations/agents/subagent-output-store.d.ts.map +1 -0
  85. package/dist/src/integrations/agents/subagent-output-store.js +257 -0
  86. package/dist/src/integrations/agents/subagent-output-store.js.map +1 -0
  87. package/dist/src/integrations/budget/budget-pool.d.ts +115 -0
  88. package/dist/src/integrations/budget/budget-pool.d.ts.map +1 -0
  89. package/dist/src/integrations/budget/budget-pool.js +205 -0
  90. package/dist/src/integrations/budget/budget-pool.js.map +1 -0
  91. package/dist/src/integrations/budget/cancellation.d.ts +229 -0
  92. package/dist/src/integrations/budget/cancellation.d.ts.map +1 -0
  93. package/dist/src/integrations/budget/cancellation.js +520 -0
  94. package/dist/src/integrations/budget/cancellation.js.map +1 -0
  95. package/dist/src/integrations/budget/dynamic-budget.d.ts +81 -0
  96. package/dist/src/integrations/budget/dynamic-budget.d.ts.map +1 -0
  97. package/dist/src/integrations/budget/dynamic-budget.js +151 -0
  98. package/dist/src/integrations/budget/dynamic-budget.js.map +1 -0
  99. package/dist/src/integrations/budget/economics.d.ts +435 -0
  100. package/dist/src/integrations/budget/economics.d.ts.map +1 -0
  101. package/dist/src/integrations/budget/economics.js +1007 -0
  102. package/dist/src/integrations/budget/economics.js.map +1 -0
  103. package/dist/src/integrations/budget/injection-budget.d.ts +71 -0
  104. package/dist/src/integrations/budget/injection-budget.d.ts.map +1 -0
  105. package/dist/src/integrations/budget/injection-budget.js +137 -0
  106. package/dist/src/integrations/budget/injection-budget.js.map +1 -0
  107. package/dist/src/integrations/budget/loop-detector.d.ts +105 -0
  108. package/dist/src/integrations/budget/loop-detector.d.ts.map +1 -0
  109. package/dist/src/integrations/budget/loop-detector.js +287 -0
  110. package/dist/src/integrations/budget/loop-detector.js.map +1 -0
  111. package/dist/src/integrations/budget/phase-tracker.d.ts +114 -0
  112. package/dist/src/integrations/budget/phase-tracker.d.ts.map +1 -0
  113. package/dist/src/integrations/budget/phase-tracker.js +262 -0
  114. package/dist/src/integrations/budget/phase-tracker.js.map +1 -0
  115. package/dist/src/integrations/budget/resources.d.ts +182 -0
  116. package/dist/src/integrations/budget/resources.d.ts.map +1 -0
  117. package/dist/src/integrations/budget/resources.js +318 -0
  118. package/dist/src/integrations/budget/resources.js.map +1 -0
  119. package/dist/src/integrations/context/auto-compaction.d.ts +210 -0
  120. package/dist/src/integrations/context/auto-compaction.d.ts.map +1 -0
  121. package/dist/src/integrations/context/auto-compaction.js +477 -0
  122. package/dist/src/integrations/context/auto-compaction.js.map +1 -0
  123. package/dist/src/integrations/context/code-analyzer.d.ts +71 -0
  124. package/dist/src/integrations/context/code-analyzer.d.ts.map +1 -0
  125. package/dist/src/integrations/context/code-analyzer.js +448 -0
  126. package/dist/src/integrations/context/code-analyzer.js.map +1 -0
  127. package/dist/src/integrations/context/code-selector.d.ts +78 -0
  128. package/dist/src/integrations/context/code-selector.d.ts.map +1 -0
  129. package/dist/src/integrations/context/code-selector.js +649 -0
  130. package/dist/src/integrations/context/code-selector.js.map +1 -0
  131. package/dist/src/integrations/context/codebase-ast.d.ts +138 -0
  132. package/dist/src/integrations/context/codebase-ast.d.ts.map +1 -0
  133. package/dist/src/integrations/context/codebase-ast.js +818 -0
  134. package/dist/src/integrations/context/codebase-ast.js.map +1 -0
  135. package/dist/src/integrations/context/codebase-context.d.ts +473 -0
  136. package/dist/src/integrations/context/codebase-context.d.ts.map +1 -0
  137. package/dist/src/integrations/context/codebase-context.js +685 -0
  138. package/dist/src/integrations/context/codebase-context.js.map +1 -0
  139. package/dist/src/integrations/context/compaction.d.ts +191 -0
  140. package/dist/src/integrations/context/compaction.d.ts.map +1 -0
  141. package/dist/src/integrations/context/compaction.js +384 -0
  142. package/dist/src/integrations/context/compaction.js.map +1 -0
  143. package/dist/src/integrations/context/context-engineering.d.ts +274 -0
  144. package/dist/src/integrations/context/context-engineering.d.ts.map +1 -0
  145. package/dist/src/integrations/context/context-engineering.js +437 -0
  146. package/dist/src/integrations/context/context-engineering.js.map +1 -0
  147. package/dist/src/integrations/context/file-cache.d.ts +97 -0
  148. package/dist/src/integrations/context/file-cache.d.ts.map +1 -0
  149. package/dist/src/integrations/context/file-cache.js +218 -0
  150. package/dist/src/integrations/context/file-cache.js.map +1 -0
  151. package/dist/src/integrations/context/semantic-cache.d.ts +178 -0
  152. package/dist/src/integrations/context/semantic-cache.d.ts.map +1 -0
  153. package/dist/src/integrations/context/semantic-cache.js +372 -0
  154. package/dist/src/integrations/context/semantic-cache.js.map +1 -0
  155. package/dist/src/integrations/index.d.ts +72 -68
  156. package/dist/src/integrations/index.d.ts.map +1 -1
  157. package/dist/src/integrations/index.js +76 -68
  158. package/dist/src/integrations/index.js.map +1 -1
  159. package/dist/src/integrations/lsp/lsp.d.ts +196 -0
  160. package/dist/src/integrations/lsp/lsp.d.ts.map +1 -0
  161. package/dist/src/integrations/lsp/lsp.js +583 -0
  162. package/dist/src/integrations/lsp/lsp.js.map +1 -0
  163. package/dist/src/integrations/mcp/mcp-client.d.ts +279 -0
  164. package/dist/src/integrations/mcp/mcp-client.d.ts.map +1 -0
  165. package/dist/src/integrations/mcp/mcp-client.js +755 -0
  166. package/dist/src/integrations/mcp/mcp-client.js.map +1 -0
  167. package/dist/src/integrations/mcp/mcp-custom-tools.d.ts +102 -0
  168. package/dist/src/integrations/mcp/mcp-custom-tools.d.ts.map +1 -0
  169. package/dist/src/integrations/mcp/mcp-custom-tools.js +232 -0
  170. package/dist/src/integrations/mcp/mcp-custom-tools.js.map +1 -0
  171. package/dist/src/integrations/mcp/mcp-tool-search.d.ts +77 -0
  172. package/dist/src/integrations/mcp/mcp-tool-search.d.ts.map +1 -0
  173. package/dist/src/integrations/mcp/mcp-tool-search.js +220 -0
  174. package/dist/src/integrations/mcp/mcp-tool-search.js.map +1 -0
  175. package/dist/src/integrations/mcp/mcp-tool-validator.d.ts +60 -0
  176. package/dist/src/integrations/mcp/mcp-tool-validator.d.ts.map +1 -0
  177. package/dist/src/integrations/mcp/mcp-tool-validator.js +141 -0
  178. package/dist/src/integrations/mcp/mcp-tool-validator.js.map +1 -0
  179. package/dist/src/integrations/persistence/codebase-repository.d.ts +45 -0
  180. package/dist/src/integrations/persistence/codebase-repository.d.ts.map +1 -0
  181. package/dist/src/integrations/persistence/codebase-repository.js +81 -0
  182. package/dist/src/integrations/persistence/codebase-repository.js.map +1 -0
  183. package/dist/src/integrations/persistence/goal-repository.d.ts +71 -0
  184. package/dist/src/integrations/persistence/goal-repository.d.ts.map +1 -0
  185. package/dist/src/integrations/persistence/goal-repository.js +184 -0
  186. package/dist/src/integrations/persistence/goal-repository.js.map +1 -0
  187. package/dist/src/integrations/persistence/history.d.ts +72 -0
  188. package/dist/src/integrations/persistence/history.d.ts.map +1 -0
  189. package/dist/src/integrations/persistence/history.js +165 -0
  190. package/dist/src/integrations/persistence/history.js.map +1 -0
  191. package/dist/src/integrations/persistence/persistence.d.ts +49 -0
  192. package/dist/src/integrations/persistence/persistence.d.ts.map +1 -0
  193. package/dist/src/integrations/persistence/persistence.js +197 -0
  194. package/dist/src/integrations/persistence/persistence.js.map +1 -0
  195. package/dist/src/integrations/persistence/session-repository.d.ts +212 -0
  196. package/dist/src/integrations/persistence/session-repository.d.ts.map +1 -0
  197. package/dist/src/integrations/persistence/session-repository.js +770 -0
  198. package/dist/src/integrations/persistence/session-repository.js.map +1 -0
  199. package/dist/src/integrations/persistence/session-store.d.ts +184 -0
  200. package/dist/src/integrations/persistence/session-store.d.ts.map +1 -0
  201. package/dist/src/integrations/persistence/session-store.js +346 -0
  202. package/dist/src/integrations/persistence/session-store.js.map +1 -0
  203. package/dist/src/integrations/persistence/sqlite-store.d.ts +453 -0
  204. package/dist/src/integrations/persistence/sqlite-store.d.ts.map +1 -0
  205. package/dist/src/integrations/persistence/sqlite-store.js +676 -0
  206. package/dist/src/integrations/persistence/sqlite-store.js.map +1 -0
  207. package/dist/src/integrations/persistence/worker-repository.d.ts +65 -0
  208. package/dist/src/integrations/persistence/worker-repository.d.ts.map +1 -0
  209. package/dist/src/integrations/persistence/worker-repository.js +183 -0
  210. package/dist/src/integrations/persistence/worker-repository.js.map +1 -0
  211. package/dist/src/integrations/quality/auto-checkpoint.d.ts +98 -0
  212. package/dist/src/integrations/quality/auto-checkpoint.d.ts.map +1 -0
  213. package/dist/src/integrations/quality/auto-checkpoint.js +252 -0
  214. package/dist/src/integrations/quality/auto-checkpoint.js.map +1 -0
  215. package/dist/src/integrations/quality/dead-letter-queue.d.ts +233 -0
  216. package/dist/src/integrations/quality/dead-letter-queue.d.ts.map +1 -0
  217. package/dist/src/integrations/quality/dead-letter-queue.js +543 -0
  218. package/dist/src/integrations/quality/dead-letter-queue.js.map +1 -0
  219. package/dist/src/integrations/quality/health-check.d.ts +218 -0
  220. package/dist/src/integrations/quality/health-check.d.ts.map +1 -0
  221. package/dist/src/integrations/quality/health-check.js +415 -0
  222. package/dist/src/integrations/quality/health-check.js.map +1 -0
  223. package/dist/src/integrations/quality/learning-store.d.ts +291 -0
  224. package/dist/src/integrations/quality/learning-store.d.ts.map +1 -0
  225. package/dist/src/integrations/quality/learning-store.js +646 -0
  226. package/dist/src/integrations/quality/learning-store.js.map +1 -0
  227. package/dist/src/integrations/quality/self-improvement.d.ts +90 -0
  228. package/dist/src/integrations/quality/self-improvement.d.ts.map +1 -0
  229. package/dist/src/integrations/quality/self-improvement.js +229 -0
  230. package/dist/src/integrations/quality/self-improvement.js.map +1 -0
  231. package/dist/src/integrations/quality/tool-recommendation.d.ts +61 -0
  232. package/dist/src/integrations/quality/tool-recommendation.d.ts.map +1 -0
  233. package/dist/src/integrations/quality/tool-recommendation.js +268 -0
  234. package/dist/src/integrations/quality/tool-recommendation.js.map +1 -0
  235. package/dist/src/integrations/safety/bash-policy.d.ts +33 -0
  236. package/dist/src/integrations/safety/bash-policy.d.ts.map +1 -0
  237. package/dist/src/integrations/safety/bash-policy.js +144 -0
  238. package/dist/src/integrations/safety/bash-policy.js.map +1 -0
  239. package/dist/src/integrations/safety/edit-validator.d.ts +30 -0
  240. package/dist/src/integrations/safety/edit-validator.d.ts.map +1 -0
  241. package/dist/src/integrations/safety/edit-validator.js +87 -0
  242. package/dist/src/integrations/safety/edit-validator.js.map +1 -0
  243. package/dist/src/integrations/safety/execution-policy.d.ts +189 -0
  244. package/dist/src/integrations/safety/execution-policy.d.ts.map +1 -0
  245. package/dist/src/integrations/safety/execution-policy.js +352 -0
  246. package/dist/src/integrations/safety/execution-policy.js.map +1 -0
  247. package/dist/src/integrations/safety/policy-engine.d.ts +55 -0
  248. package/dist/src/integrations/safety/policy-engine.d.ts.map +1 -0
  249. package/dist/src/integrations/safety/policy-engine.js +247 -0
  250. package/dist/src/integrations/safety/policy-engine.js.map +1 -0
  251. package/dist/src/integrations/safety/safety.d.ts +174 -0
  252. package/dist/src/integrations/safety/safety.d.ts.map +1 -0
  253. package/dist/src/integrations/safety/safety.js +470 -0
  254. package/dist/src/integrations/safety/safety.js.map +1 -0
  255. package/dist/src/integrations/safety/sandbox/basic.d.ts +81 -0
  256. package/dist/src/integrations/safety/sandbox/basic.d.ts.map +1 -0
  257. package/dist/src/integrations/safety/sandbox/basic.js +335 -0
  258. package/dist/src/integrations/safety/sandbox/basic.js.map +1 -0
  259. package/dist/src/integrations/safety/sandbox/docker.d.ts +94 -0
  260. package/dist/src/integrations/safety/sandbox/docker.d.ts.map +1 -0
  261. package/dist/src/integrations/safety/sandbox/docker.js +294 -0
  262. package/dist/src/integrations/safety/sandbox/docker.js.map +1 -0
  263. package/dist/src/integrations/safety/sandbox/index.d.ts +188 -0
  264. package/dist/src/integrations/safety/sandbox/index.d.ts.map +1 -0
  265. package/dist/src/integrations/safety/sandbox/index.js +386 -0
  266. package/dist/src/integrations/safety/sandbox/index.js.map +1 -0
  267. package/dist/src/integrations/safety/sandbox/landlock.d.ts +59 -0
  268. package/dist/src/integrations/safety/sandbox/landlock.d.ts.map +1 -0
  269. package/dist/src/integrations/safety/sandbox/landlock.js +329 -0
  270. package/dist/src/integrations/safety/sandbox/landlock.js.map +1 -0
  271. package/dist/src/integrations/safety/sandbox/seatbelt.d.ts +68 -0
  272. package/dist/src/integrations/safety/sandbox/seatbelt.d.ts.map +1 -0
  273. package/dist/src/integrations/safety/sandbox/seatbelt.js +298 -0
  274. package/dist/src/integrations/safety/sandbox/seatbelt.js.map +1 -0
  275. package/dist/src/integrations/safety/type-checker.d.ts +53 -0
  276. package/dist/src/integrations/safety/type-checker.d.ts.map +1 -0
  277. package/dist/src/integrations/safety/type-checker.js +142 -0
  278. package/dist/src/integrations/safety/type-checker.js.map +1 -0
  279. package/dist/src/integrations/skills/skill-executor.d.ts +113 -0
  280. package/dist/src/integrations/skills/skill-executor.d.ts.map +1 -0
  281. package/dist/src/integrations/skills/skill-executor.js +270 -0
  282. package/dist/src/integrations/skills/skill-executor.js.map +1 -0
  283. package/dist/src/integrations/skills/skills.d.ts +262 -0
  284. package/dist/src/integrations/skills/skills.d.ts.map +1 -0
  285. package/dist/src/integrations/skills/skills.js +602 -0
  286. package/dist/src/integrations/skills/skills.js.map +1 -0
  287. package/dist/src/integrations/streaming/pty-shell.d.ts +169 -0
  288. package/dist/src/integrations/streaming/pty-shell.d.ts.map +1 -0
  289. package/dist/src/integrations/streaming/pty-shell.js +367 -0
  290. package/dist/src/integrations/streaming/pty-shell.js.map +1 -0
  291. package/dist/src/integrations/streaming/streaming.d.ts +102 -0
  292. package/dist/src/integrations/streaming/streaming.d.ts.map +1 -0
  293. package/dist/src/integrations/streaming/streaming.js +362 -0
  294. package/dist/src/integrations/streaming/streaming.js.map +1 -0
  295. package/dist/src/integrations/swarm/index.d.ts +2 -1
  296. package/dist/src/integrations/swarm/index.d.ts.map +1 -1
  297. package/dist/src/integrations/swarm/index.js +2 -0
  298. package/dist/src/integrations/swarm/index.js.map +1 -1
  299. package/dist/src/integrations/swarm/model-selector.js +1 -1
  300. package/dist/src/integrations/swarm/model-selector.js.map +1 -1
  301. package/dist/src/integrations/swarm/swarm-budget.d.ts +1 -1
  302. package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
  303. package/dist/src/integrations/swarm/swarm-budget.js +1 -1
  304. package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
  305. package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
  306. package/dist/src/integrations/swarm/swarm-config-loader.js +7 -0
  307. package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
  308. package/dist/src/integrations/swarm/swarm-events.d.ts +1 -1
  309. package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
  310. package/dist/src/integrations/swarm/swarm-execution.d.ts +27 -0
  311. package/dist/src/integrations/swarm/swarm-execution.d.ts.map +1 -0
  312. package/dist/src/integrations/swarm/swarm-execution.js +1021 -0
  313. package/dist/src/integrations/swarm/swarm-execution.js.map +1 -0
  314. package/dist/src/integrations/swarm/swarm-helpers.d.ts +26 -0
  315. package/dist/src/integrations/swarm/swarm-helpers.d.ts.map +1 -0
  316. package/dist/src/integrations/swarm/swarm-helpers.js +95 -0
  317. package/dist/src/integrations/swarm/swarm-helpers.js.map +1 -0
  318. package/dist/src/integrations/swarm/swarm-lifecycle.d.ts +100 -0
  319. package/dist/src/integrations/swarm/swarm-lifecycle.d.ts.map +1 -0
  320. package/dist/src/integrations/swarm/swarm-lifecycle.js +922 -0
  321. package/dist/src/integrations/swarm/swarm-lifecycle.js.map +1 -0
  322. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +84 -203
  323. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
  324. package/dist/src/integrations/swarm/swarm-orchestrator.js +251 -2870
  325. package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
  326. package/dist/src/integrations/swarm/swarm-quality-gate.js +1 -1
  327. package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
  328. package/dist/src/integrations/swarm/swarm-recovery.d.ts +75 -0
  329. package/dist/src/integrations/swarm/swarm-recovery.d.ts.map +1 -0
  330. package/dist/src/integrations/swarm/swarm-recovery.js +550 -0
  331. package/dist/src/integrations/swarm/swarm-recovery.js.map +1 -0
  332. package/dist/src/integrations/swarm/swarm-state-store.d.ts.map +1 -1
  333. package/dist/src/integrations/swarm/swarm-state-store.js +6 -0
  334. package/dist/src/integrations/swarm/swarm-state-store.js.map +1 -1
  335. package/dist/src/integrations/swarm/task-queue.d.ts +1 -1
  336. package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
  337. package/dist/src/integrations/swarm/task-queue.js +28 -1
  338. package/dist/src/integrations/swarm/task-queue.js.map +1 -1
  339. package/dist/src/integrations/swarm/types.d.ts +17 -5
  340. package/dist/src/integrations/swarm/types.d.ts.map +1 -1
  341. package/dist/src/integrations/swarm/types.js.map +1 -1
  342. package/dist/src/integrations/swarm/worker-pool.d.ts +1 -1
  343. package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
  344. package/dist/src/integrations/swarm/worker-pool.js +13 -9
  345. package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
  346. package/dist/src/integrations/tasks/dependency-analyzer.d.ts +34 -0
  347. package/dist/src/integrations/tasks/dependency-analyzer.d.ts.map +1 -0
  348. package/dist/src/integrations/tasks/dependency-analyzer.js +232 -0
  349. package/dist/src/integrations/tasks/dependency-analyzer.js.map +1 -0
  350. package/dist/src/integrations/tasks/interactive-planning.d.ts +322 -0
  351. package/dist/src/integrations/tasks/interactive-planning.d.ts.map +1 -0
  352. package/dist/src/integrations/tasks/interactive-planning.js +655 -0
  353. package/dist/src/integrations/tasks/interactive-planning.js.map +1 -0
  354. package/dist/src/integrations/tasks/pending-plan.d.ts +196 -0
  355. package/dist/src/integrations/tasks/pending-plan.d.ts.map +1 -0
  356. package/dist/src/integrations/tasks/pending-plan.js +431 -0
  357. package/dist/src/integrations/tasks/pending-plan.js.map +1 -0
  358. package/dist/src/integrations/tasks/planning.d.ts +115 -0
  359. package/dist/src/integrations/tasks/planning.d.ts.map +1 -0
  360. package/dist/src/integrations/tasks/planning.js +413 -0
  361. package/dist/src/integrations/tasks/planning.js.map +1 -0
  362. package/dist/src/integrations/tasks/smart-decomposer.d.ts +316 -0
  363. package/dist/src/integrations/tasks/smart-decomposer.d.ts.map +1 -0
  364. package/dist/src/integrations/tasks/smart-decomposer.js +661 -0
  365. package/dist/src/integrations/tasks/smart-decomposer.js.map +1 -0
  366. package/dist/src/integrations/tasks/task-manager.d.ts +164 -0
  367. package/dist/src/integrations/tasks/task-manager.d.ts.map +1 -0
  368. package/dist/src/integrations/tasks/task-manager.js +383 -0
  369. package/dist/src/integrations/tasks/task-manager.js.map +1 -0
  370. package/dist/src/integrations/tasks/task-splitter.d.ts +56 -0
  371. package/dist/src/integrations/tasks/task-splitter.d.ts.map +1 -0
  372. package/dist/src/integrations/tasks/task-splitter.js +537 -0
  373. package/dist/src/integrations/tasks/task-splitter.js.map +1 -0
  374. package/dist/src/integrations/tasks/verification-gate.d.ts +103 -0
  375. package/dist/src/integrations/tasks/verification-gate.d.ts.map +1 -0
  376. package/dist/src/integrations/tasks/verification-gate.js +193 -0
  377. package/dist/src/integrations/tasks/verification-gate.js.map +1 -0
  378. package/dist/src/integrations/tasks/work-log.d.ts +87 -0
  379. package/dist/src/integrations/tasks/work-log.d.ts.map +1 -0
  380. package/dist/src/integrations/tasks/work-log.js +275 -0
  381. package/dist/src/integrations/tasks/work-log.js.map +1 -0
  382. package/dist/src/integrations/utilities/capabilities.d.ts +160 -0
  383. package/dist/src/integrations/utilities/capabilities.d.ts.map +1 -0
  384. package/dist/src/integrations/utilities/capabilities.js +426 -0
  385. package/dist/src/integrations/utilities/capabilities.js.map +1 -0
  386. package/dist/src/integrations/utilities/diff-utils.d.ts +105 -0
  387. package/dist/src/integrations/utilities/diff-utils.d.ts.map +1 -0
  388. package/dist/src/integrations/utilities/diff-utils.js +497 -0
  389. package/dist/src/integrations/utilities/diff-utils.js.map +1 -0
  390. package/dist/src/integrations/utilities/environment-facts.d.ts +52 -0
  391. package/dist/src/integrations/utilities/environment-facts.d.ts.map +1 -0
  392. package/dist/src/integrations/utilities/environment-facts.js +84 -0
  393. package/dist/src/integrations/utilities/environment-facts.js.map +1 -0
  394. package/dist/src/integrations/utilities/file-change-tracker.d.ts +162 -0
  395. package/dist/src/integrations/utilities/file-change-tracker.d.ts.map +1 -0
  396. package/dist/src/integrations/utilities/file-change-tracker.js +538 -0
  397. package/dist/src/integrations/utilities/file-change-tracker.js.map +1 -0
  398. package/dist/src/integrations/utilities/graph-visualization.d.ts +72 -0
  399. package/dist/src/integrations/utilities/graph-visualization.d.ts.map +1 -0
  400. package/dist/src/integrations/utilities/graph-visualization.js +383 -0
  401. package/dist/src/integrations/utilities/graph-visualization.js.map +1 -0
  402. package/dist/src/integrations/utilities/hierarchical-config.d.ts +215 -0
  403. package/dist/src/integrations/utilities/hierarchical-config.d.ts.map +1 -0
  404. package/dist/src/integrations/utilities/hierarchical-config.js +504 -0
  405. package/dist/src/integrations/utilities/hierarchical-config.js.map +1 -0
  406. package/dist/src/integrations/utilities/hooks.d.ts +116 -0
  407. package/dist/src/integrations/utilities/hooks.d.ts.map +1 -0
  408. package/dist/src/integrations/utilities/hooks.js +410 -0
  409. package/dist/src/integrations/utilities/hooks.js.map +1 -0
  410. package/dist/src/integrations/utilities/ignore.d.ts +143 -0
  411. package/dist/src/integrations/utilities/ignore.d.ts.map +1 -0
  412. package/dist/src/integrations/utilities/ignore.js +417 -0
  413. package/dist/src/integrations/utilities/ignore.js.map +1 -0
  414. package/dist/src/integrations/utilities/image-renderer.d.ts +119 -0
  415. package/dist/src/integrations/utilities/image-renderer.d.ts.map +1 -0
  416. package/dist/src/integrations/utilities/image-renderer.js +306 -0
  417. package/dist/src/integrations/utilities/image-renderer.js.map +1 -0
  418. package/dist/src/integrations/utilities/logger.d.ts +104 -0
  419. package/dist/src/integrations/utilities/logger.d.ts.map +1 -0
  420. package/dist/src/integrations/utilities/logger.js +219 -0
  421. package/dist/src/integrations/utilities/logger.js.map +1 -0
  422. package/dist/src/integrations/utilities/memory.d.ts +116 -0
  423. package/dist/src/integrations/utilities/memory.d.ts.map +1 -0
  424. package/dist/src/integrations/utilities/memory.js +311 -0
  425. package/dist/src/integrations/utilities/memory.js.map +1 -0
  426. package/dist/src/integrations/utilities/observability.d.ts +162 -0
  427. package/dist/src/integrations/utilities/observability.d.ts.map +1 -0
  428. package/dist/src/integrations/utilities/observability.js +407 -0
  429. package/dist/src/integrations/utilities/observability.js.map +1 -0
  430. package/dist/src/integrations/utilities/openrouter-pricing.d.ts +67 -0
  431. package/dist/src/integrations/utilities/openrouter-pricing.d.ts.map +1 -0
  432. package/dist/src/integrations/utilities/openrouter-pricing.js +166 -0
  433. package/dist/src/integrations/utilities/openrouter-pricing.js.map +1 -0
  434. package/dist/src/integrations/utilities/react.d.ts +139 -0
  435. package/dist/src/integrations/utilities/react.d.ts.map +1 -0
  436. package/dist/src/integrations/utilities/react.js +273 -0
  437. package/dist/src/integrations/utilities/react.js.map +1 -0
  438. package/dist/src/integrations/utilities/retry.d.ts +132 -0
  439. package/dist/src/integrations/utilities/retry.d.ts.map +1 -0
  440. package/dist/src/integrations/utilities/retry.js +233 -0
  441. package/dist/src/integrations/utilities/retry.js.map +1 -0
  442. package/dist/src/integrations/utilities/routing.d.ts +118 -0
  443. package/dist/src/integrations/utilities/routing.d.ts.map +1 -0
  444. package/dist/src/integrations/utilities/routing.js +348 -0
  445. package/dist/src/integrations/utilities/routing.js.map +1 -0
  446. package/dist/src/integrations/utilities/rules.d.ts +131 -0
  447. package/dist/src/integrations/utilities/rules.d.ts.map +1 -0
  448. package/dist/src/integrations/utilities/rules.js +284 -0
  449. package/dist/src/integrations/utilities/rules.js.map +1 -0
  450. package/dist/src/integrations/utilities/sourcegraph.d.ts +169 -0
  451. package/dist/src/integrations/utilities/sourcegraph.d.ts.map +1 -0
  452. package/dist/src/integrations/utilities/sourcegraph.js +379 -0
  453. package/dist/src/integrations/utilities/sourcegraph.js.map +1 -0
  454. package/dist/src/integrations/utilities/thinking-strategy.d.ts +52 -0
  455. package/dist/src/integrations/utilities/thinking-strategy.d.ts.map +1 -0
  456. package/dist/src/integrations/utilities/thinking-strategy.js +129 -0
  457. package/dist/src/integrations/utilities/thinking-strategy.js.map +1 -0
  458. package/dist/src/integrations/utilities/thread-manager.d.ts +199 -0
  459. package/dist/src/integrations/utilities/thread-manager.d.ts.map +1 -0
  460. package/dist/src/integrations/utilities/thread-manager.js +357 -0
  461. package/dist/src/integrations/utilities/thread-manager.js.map +1 -0
  462. package/dist/src/integrations/utilities/token-estimate.d.ts +11 -0
  463. package/dist/src/integrations/utilities/token-estimate.d.ts.map +1 -0
  464. package/dist/src/integrations/utilities/token-estimate.js +14 -0
  465. package/dist/src/integrations/utilities/token-estimate.js.map +1 -0
  466. package/dist/src/main.js +10 -4
  467. package/dist/src/main.js.map +1 -1
  468. package/dist/src/modes/repl.d.ts.map +1 -1
  469. package/dist/src/modes/repl.js +22 -5
  470. package/dist/src/modes/repl.js.map +1 -1
  471. package/dist/src/modes/tui.d.ts.map +1 -1
  472. package/dist/src/modes/tui.js +23 -6
  473. package/dist/src/modes/tui.js.map +1 -1
  474. package/dist/src/modes.js +1 -1
  475. package/dist/src/modes.js.map +1 -1
  476. package/dist/src/observability/tracer.js +1 -1
  477. package/dist/src/observability/tracer.js.map +1 -1
  478. package/dist/src/persistence/schema.d.ts +2 -0
  479. package/dist/src/persistence/schema.d.ts.map +1 -1
  480. package/dist/src/persistence/schema.js +31 -0
  481. package/dist/src/persistence/schema.js.map +1 -1
  482. package/dist/src/providers/adapters/anthropic.d.ts +6 -0
  483. package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
  484. package/dist/src/providers/adapters/anthropic.js +99 -15
  485. package/dist/src/providers/adapters/anthropic.js.map +1 -1
  486. package/dist/src/providers/adapters/azure.d.ts +74 -0
  487. package/dist/src/providers/adapters/azure.d.ts.map +1 -0
  488. package/dist/src/providers/adapters/azure.js +354 -0
  489. package/dist/src/providers/adapters/azure.js.map +1 -0
  490. package/dist/src/providers/adapters/mock.d.ts +16 -2
  491. package/dist/src/providers/adapters/mock.d.ts.map +1 -1
  492. package/dist/src/providers/adapters/mock.js +44 -3
  493. package/dist/src/providers/adapters/mock.js.map +1 -1
  494. package/dist/src/providers/adapters/openai.d.ts +6 -1
  495. package/dist/src/providers/adapters/openai.d.ts.map +1 -1
  496. package/dist/src/providers/adapters/openai.js +39 -8
  497. package/dist/src/providers/adapters/openai.js.map +1 -1
  498. package/dist/src/providers/adapters/openrouter.d.ts +6 -0
  499. package/dist/src/providers/adapters/openrouter.d.ts.map +1 -1
  500. package/dist/src/providers/adapters/openrouter.js +73 -3
  501. package/dist/src/providers/adapters/openrouter.js.map +1 -1
  502. package/dist/src/providers/provider.js +1 -1
  503. package/dist/src/providers/provider.js.map +1 -1
  504. package/dist/src/providers/resilient-provider.js +1 -1
  505. package/dist/src/providers/resilient-provider.js.map +1 -1
  506. package/dist/src/providers/types.d.ts +23 -2
  507. package/dist/src/providers/types.d.ts.map +1 -1
  508. package/dist/src/session-picker.d.ts +1 -1
  509. package/dist/src/session-picker.d.ts.map +1 -1
  510. package/dist/src/session-picker.js +1 -1
  511. package/dist/src/session-picker.js.map +1 -1
  512. package/dist/src/shared/budget-tracker.js +1 -1
  513. package/dist/src/shared/budget-tracker.js.map +1 -1
  514. package/dist/src/tools/agent.d.ts +1 -1
  515. package/dist/src/tools/agent.d.ts.map +1 -1
  516. package/dist/src/tools/bash.js +1 -1
  517. package/dist/src/tools/bash.js.map +1 -1
  518. package/dist/src/tools/file.js +1 -1
  519. package/dist/src/tools/file.js.map +1 -1
  520. package/dist/src/tools/permission.js +2 -2
  521. package/dist/src/tools/permission.js.map +1 -1
  522. package/dist/src/tools/registry.d.ts +1 -1
  523. package/dist/src/tools/registry.d.ts.map +1 -1
  524. package/dist/src/tools/registry.js +1 -1
  525. package/dist/src/tools/registry.js.map +1 -1
  526. package/dist/src/tools/tasks.d.ts +1 -1
  527. package/dist/src/tools/tasks.d.ts.map +1 -1
  528. package/dist/src/tools/undo.d.ts +1 -1
  529. package/dist/src/tools/undo.d.ts.map +1 -1
  530. package/dist/src/tracing/cache-boundary-tracker.d.ts.map +1 -1
  531. package/dist/src/tracing/cache-boundary-tracker.js +2 -2
  532. package/dist/src/tracing/cache-boundary-tracker.js.map +1 -1
  533. package/dist/src/tracing/trace-collector.d.ts +22 -0
  534. package/dist/src/tracing/trace-collector.d.ts.map +1 -1
  535. package/dist/src/tracing/trace-collector.js +27 -3
  536. package/dist/src/tracing/trace-collector.js.map +1 -1
  537. package/dist/src/tracing/types.d.ts +17 -1
  538. package/dist/src/tracing/types.d.ts.map +1 -1
  539. package/dist/src/tracing/types.js.map +1 -1
  540. package/dist/src/tricks/failure-evidence.js +1 -1
  541. package/dist/src/tricks/failure-evidence.js.map +1 -1
  542. package/dist/src/tricks/recitation.d.ts.map +1 -1
  543. package/dist/src/tricks/recitation.js +2 -1
  544. package/dist/src/tricks/recitation.js.map +1 -1
  545. package/dist/src/tricks/recursive-context.d.ts.map +1 -1
  546. package/dist/src/tricks/recursive-context.js +2 -2
  547. package/dist/src/tricks/recursive-context.js.map +1 -1
  548. package/dist/src/tricks/reversible-compaction.d.ts.map +1 -1
  549. package/dist/src/tricks/reversible-compaction.js +6 -2
  550. package/dist/src/tricks/reversible-compaction.js.map +1 -1
  551. package/dist/src/tui/app.d.ts +3 -3
  552. package/dist/src/tui/app.d.ts.map +1 -1
  553. package/dist/src/tui/app.js +86 -14
  554. package/dist/src/tui/app.js.map +1 -1
  555. package/dist/src/tui/components/CollapsibleDiffView.d.ts +1 -1
  556. package/dist/src/tui/components/CollapsibleDiffView.d.ts.map +1 -1
  557. package/dist/src/tui/components/DiagnosticsPanel.d.ts +24 -0
  558. package/dist/src/tui/components/DiagnosticsPanel.d.ts.map +1 -0
  559. package/dist/src/tui/components/DiagnosticsPanel.js +47 -0
  560. package/dist/src/tui/components/DiagnosticsPanel.js.map +1 -0
  561. package/dist/src/tui/components/DiffView.d.ts +1 -1
  562. package/dist/src/tui/components/DiffView.d.ts.map +1 -1
  563. package/dist/src/tui/components/ErrorBoundary.js +1 -1
  564. package/dist/src/tui/components/ErrorBoundary.js.map +1 -1
  565. package/dist/src/tui/components/TasksPanel.d.ts +1 -1
  566. package/dist/src/tui/components/TasksPanel.d.ts.map +1 -1
  567. package/dist/src/tui/event-display.js +1 -1
  568. package/dist/src/tui/event-display.js.map +1 -1
  569. package/dist/src/tui/index.js +1 -1
  570. package/dist/src/tui/index.js.map +1 -1
  571. package/dist/src/tui/transparency-aggregator.d.ts +13 -0
  572. package/dist/src/tui/transparency-aggregator.d.ts.map +1 -1
  573. package/dist/src/tui/transparency-aggregator.js +21 -0
  574. package/dist/src/tui/transparency-aggregator.js.map +1 -1
  575. package/dist/src/types.d.ts +27 -2
  576. package/dist/src/types.d.ts.map +1 -1
  577. package/package.json +1 -1
@@ -0,0 +1,818 @@
1
+ /**
2
+ * Codebase AST Module
3
+ *
4
+ * Provides accurate symbol and dependency extraction using tree-sitter AST parsing.
5
+ * Supports TypeScript/TSX, JavaScript/JSX, Python, and polyglot languages via
6
+ * pluggable language profiles.
7
+ *
8
+ * Key features:
9
+ * - ASTCache: Parse once per file, extract symbols + dependencies from single tree
10
+ * - Content-hash invalidation: Detects when file content changes
11
+ * - Incremental reparse: Leverages tree-sitter's tree.edit() for fast updates
12
+ * - Polyglot support: Unified LanguageProfile system for adding new languages
13
+ */
14
+ import * as path from 'path';
15
+ let tsParser = null;
16
+ let tsxParser = null;
17
+ let pyParser = null;
18
+ let parserInitAttempted = false;
19
+ const parserInitFailed = new Set();
20
+ const parsers = new Map();
21
+ export function getParser(ext) {
22
+ // Check polyglot parser cache first
23
+ if (parsers.has(ext))
24
+ return parsers.get(ext);
25
+ if (parserInitFailed.has(ext))
26
+ return null;
27
+ if (!parserInitAttempted) {
28
+ parserInitAttempted = true;
29
+ try {
30
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
31
+ const Parser = require('tree-sitter');
32
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
33
+ const tsLangs = require('tree-sitter-typescript');
34
+ tsParser = new Parser();
35
+ tsParser.setLanguage(tsLangs.typescript);
36
+ tsxParser = new Parser();
37
+ tsxParser.setLanguage(tsLangs.tsx);
38
+ try {
39
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
40
+ const pyLang = require('tree-sitter-python');
41
+ pyParser = new Parser();
42
+ pyParser.setLanguage(pyLang);
43
+ }
44
+ catch {
45
+ // Python grammar not available — not fatal
46
+ }
47
+ }
48
+ catch {
49
+ // tree-sitter not available at all
50
+ tsParser = null;
51
+ tsxParser = null;
52
+ pyParser = null;
53
+ }
54
+ }
55
+ switch (ext) {
56
+ case '.ts': return tsParser;
57
+ case '.tsx': return tsxParser;
58
+ case '.js': return tsParser; // TS parser handles JS fine
59
+ case '.jsx': return tsxParser;
60
+ case '.py': return pyParser;
61
+ default: {
62
+ // Try polyglot language profiles (LANGUAGE_PROFILES defined below, accessed lazily at call time)
63
+ const profile = getLanguageProfile(ext);
64
+ if (!profile)
65
+ return null;
66
+ return initPolyglotParser(ext, profile);
67
+ }
68
+ }
69
+ }
70
+ // =============================================================================
71
+ // AST CACHE
72
+ // =============================================================================
73
+ /** Module-level cache: filePath (absolute) -> ParsedFile */
74
+ const astCache = new Map();
75
+ /** Module-level parse counters for diagnostics visibility. */
76
+ let totalParses = 0;
77
+ let cacheHits = 0;
78
+ /** Normalize cache key to absolute path to prevent absolute/relative mismatch. */
79
+ function cacheKey(filePath) {
80
+ return path.resolve(filePath);
81
+ }
82
+ /**
83
+ * djb2 string hash — fast, non-cryptographic hash for content invalidation.
84
+ */
85
+ export function djb2Hash(str) {
86
+ let hash = 5381;
87
+ for (let i = 0; i < str.length; i++) {
88
+ hash = ((hash << 5) + hash + str.charCodeAt(i)) | 0;
89
+ }
90
+ return hash >>> 0; // Ensure unsigned
91
+ }
92
+ /**
93
+ * Parse a file once and extract symbols + dependencies from the same tree.
94
+ * Results are cached by filePath + contentHash.
95
+ */
96
+ export function parseFile(content, filePath) {
97
+ const ext = path.extname(filePath).toLowerCase();
98
+ const parser = getParser(ext);
99
+ if (!parser)
100
+ return null;
101
+ const hash = djb2Hash(content);
102
+ const key = cacheKey(filePath);
103
+ // Check cache
104
+ const cached = astCache.get(key);
105
+ if (cached && cached.contentHash === hash) {
106
+ cacheHits++;
107
+ return cached;
108
+ }
109
+ try {
110
+ totalParses++;
111
+ const tree = parser.parse(content);
112
+ const symbols = extractSymbolsFromRoot(tree.rootNode, ext);
113
+ const dependencies = extractDependenciesFromRoot(tree.rootNode, ext);
114
+ const result = { tree, symbols, dependencies, contentHash: hash, parsedAt: Date.now() };
115
+ astCache.set(key, result);
116
+ return result;
117
+ }
118
+ catch {
119
+ return null;
120
+ }
121
+ }
122
+ /**
123
+ * Full reparse for write_file (no edit ranges available).
124
+ * Parses from scratch and caches the result.
125
+ */
126
+ export function fullReparse(filePath, newContent) {
127
+ return parseFile(newContent, filePath);
128
+ }
129
+ /**
130
+ * Incremental reparse using tree-sitter's tree.edit() + old tree reference.
131
+ * Falls back to full reparse if no cached tree is available.
132
+ */
133
+ export function incrementalReparse(filePath, newContent, edit) {
134
+ const key = cacheKey(filePath);
135
+ const cached = astCache.get(key);
136
+ const ext = path.extname(filePath).toLowerCase();
137
+ const parser = getParser(ext);
138
+ if (!parser)
139
+ return null;
140
+ try {
141
+ let newTree;
142
+ if (cached?.tree?.edit) {
143
+ // Incremental: edit old tree, reparse with old tree reference
144
+ cached.tree.edit(edit);
145
+ newTree = parser.parse(newContent, cached.tree);
146
+ }
147
+ else {
148
+ // No cached tree — full parse
149
+ newTree = parser.parse(newContent);
150
+ }
151
+ const symbols = extractSymbolsFromRoot(newTree.rootNode, ext);
152
+ const dependencies = extractDependenciesFromRoot(newTree.rootNode, ext);
153
+ const hash = djb2Hash(newContent);
154
+ const result = { tree: newTree, symbols, dependencies, contentHash: hash, parsedAt: Date.now() };
155
+ astCache.set(key, result);
156
+ return result;
157
+ }
158
+ catch {
159
+ // Fall back to full reparse
160
+ return parseFile(newContent, filePath);
161
+ }
162
+ }
163
+ /** Remove a single file from the cache. */
164
+ export function invalidateAST(filePath) { astCache.delete(cacheKey(filePath)); }
165
+ /** Clear all cached parse results. */
166
+ export function clearASTCache() { astCache.clear(); }
167
+ /** Get number of cached files. */
168
+ export function getASTCacheSize() { return astCache.size; }
169
+ /** Get cached parse result without re-parsing. */
170
+ export function getCachedParse(filePath) { return astCache.get(cacheKey(filePath)) ?? null; }
171
+ /** Get AST cache diagnostics stats. */
172
+ export function getASTCacheStats() {
173
+ const languages = {};
174
+ for (const [key] of astCache) {
175
+ const ext = key.slice(key.lastIndexOf('.')).toLowerCase();
176
+ const lang = ext === '.ts' || ext === '.tsx' ? 'typescript'
177
+ : ext === '.js' || ext === '.jsx' ? 'javascript'
178
+ : ext === '.py' ? 'python'
179
+ : ext;
180
+ languages[lang] = (languages[lang] || 0) + 1;
181
+ }
182
+ return { fileCount: astCache.size, languages, totalParses, cacheHits };
183
+ }
184
+ /** Reset parse counters (for testing). */
185
+ export function resetASTCacheStats() {
186
+ totalParses = 0;
187
+ cacheHits = 0;
188
+ }
189
+ // =============================================================================
190
+ // PUBLIC API
191
+ // =============================================================================
192
+ /**
193
+ * Check if AST parsing is available for a file extension.
194
+ */
195
+ export function isASTSupported(filePath) {
196
+ const ext = path.extname(filePath).toLowerCase();
197
+ return getParser(ext) !== null;
198
+ }
199
+ /**
200
+ * Extract symbols from source code using tree-sitter AST.
201
+ * Uses ASTCache — parses once, reuses cached result.
202
+ */
203
+ export function extractSymbolsAST(content, filePath) {
204
+ return parseFile(content, filePath)?.symbols ?? [];
205
+ }
206
+ /**
207
+ * Extract dependencies from source code using tree-sitter AST.
208
+ * Uses ASTCache — parses once, reuses cached result.
209
+ */
210
+ export function extractDependenciesAST(content, filePath) {
211
+ return parseFile(content, filePath)?.dependencies ?? [];
212
+ }
213
+ // =============================================================================
214
+ // INTERNAL: Root-level extraction dispatchers
215
+ // =============================================================================
216
+ /** Lookup a polyglot language profile by extension. */
217
+ function getLanguageProfile(ext) {
218
+ return LANGUAGE_PROFILES.find(p => p.extensions.includes(ext));
219
+ }
220
+ function extractSymbolsFromRoot(root, ext) {
221
+ if (ext === '.py')
222
+ return extractPythonSymbols(root);
223
+ const profile = getLanguageProfile(ext);
224
+ if (profile)
225
+ return extractSymbolsGeneric(root, profile);
226
+ return extractTSSymbols(root);
227
+ }
228
+ function extractDependenciesFromRoot(root, ext) {
229
+ if (ext === '.py')
230
+ return extractPythonDependencies(root);
231
+ const profile = getLanguageProfile(ext);
232
+ if (profile)
233
+ return extractDependenciesGeneric(root, profile);
234
+ return extractTSDependencies(root);
235
+ }
236
+ // =============================================================================
237
+ // TYPESCRIPT / JAVASCRIPT EXTRACTION
238
+ // =============================================================================
239
+ function extractTSSymbols(root) {
240
+ const symbols = [];
241
+ for (let i = 0; i < root.childCount; i++) {
242
+ const node = root.child(i);
243
+ if (!node)
244
+ continue;
245
+ if (node.type === 'export_statement') {
246
+ extractFromExportStatement(node, symbols);
247
+ }
248
+ else {
249
+ // Non-exported top-level declarations
250
+ const kind = declarationKind(node.type);
251
+ if (kind) {
252
+ const name = getDeclarationName(node);
253
+ if (name) {
254
+ symbols.push({
255
+ name,
256
+ kind,
257
+ exported: false,
258
+ line: node.startPosition.row + 1,
259
+ });
260
+ }
261
+ }
262
+ }
263
+ }
264
+ return symbols;
265
+ }
266
+ function extractFromExportStatement(exportNode, symbols) {
267
+ const decl = exportNode.childForFieldName('declaration');
268
+ if (decl) {
269
+ const kind = declarationKind(decl.type);
270
+ if (kind) {
271
+ const name = getDeclarationName(decl);
272
+ if (name) {
273
+ symbols.push({
274
+ name,
275
+ kind,
276
+ exported: true,
277
+ line: decl.startPosition.row + 1,
278
+ });
279
+ // Extract class methods
280
+ if (kind === 'class') {
281
+ extractClassMembers(decl, symbols);
282
+ }
283
+ }
284
+ }
285
+ else if (decl.type === 'lexical_declaration') {
286
+ // export const x = 1; export let y = 2;
287
+ for (const child of decl.namedChildren) {
288
+ if (child.type === 'variable_declarator') {
289
+ const nameNode = child.childForFieldName('name');
290
+ if (nameNode) {
291
+ symbols.push({
292
+ name: nameNode.text,
293
+ kind: 'variable',
294
+ exported: true,
295
+ line: child.startPosition.row + 1,
296
+ });
297
+ }
298
+ }
299
+ }
300
+ }
301
+ return;
302
+ }
303
+ // export { A, B } or export { A, B } from './other'
304
+ for (let i = 0; i < exportNode.childCount; i++) {
305
+ const child = exportNode.child(i);
306
+ if (!child)
307
+ continue;
308
+ if (child.type === 'export_clause') {
309
+ for (const specifier of child.namedChildren) {
310
+ if (specifier.type === 'export_specifier') {
311
+ const nameNode = specifier.childForFieldName('name');
312
+ if (nameNode) {
313
+ symbols.push({
314
+ name: nameNode.text,
315
+ kind: 'variable', // We don't know the kind from re-exports
316
+ exported: true,
317
+ line: specifier.startPosition.row + 1,
318
+ });
319
+ }
320
+ }
321
+ }
322
+ }
323
+ }
324
+ // export default class/function (without declaration field — fallback)
325
+ let hasDefault = false;
326
+ for (let i = 0; i < exportNode.childCount; i++) {
327
+ const child = exportNode.child(i);
328
+ if (child?.type === 'default')
329
+ hasDefault = true;
330
+ }
331
+ if (hasDefault && !decl) {
332
+ // Check for inline class/function after 'default'
333
+ for (let i = 0; i < exportNode.childCount; i++) {
334
+ const child = exportNode.child(i);
335
+ if (!child)
336
+ continue;
337
+ const kind = declarationKind(child.type);
338
+ if (kind) {
339
+ const name = getDeclarationName(child);
340
+ symbols.push({
341
+ name: name || 'default',
342
+ kind,
343
+ exported: true,
344
+ line: child.startPosition.row + 1,
345
+ });
346
+ if (kind === 'class') {
347
+ extractClassMembers(child, symbols);
348
+ }
349
+ }
350
+ }
351
+ }
352
+ }
353
+ function extractClassMembers(classNode, symbols) {
354
+ const body = classNode.childForFieldName('body');
355
+ if (!body)
356
+ return;
357
+ for (const member of body.namedChildren) {
358
+ if (member.type === 'method_definition' || member.type === 'public_field_definition') {
359
+ const nameNode = member.childForFieldName('name');
360
+ if (nameNode) {
361
+ symbols.push({
362
+ name: nameNode.text,
363
+ kind: 'method',
364
+ exported: true,
365
+ line: member.startPosition.row + 1,
366
+ });
367
+ }
368
+ }
369
+ }
370
+ }
371
+ function extractTSDependencies(root) {
372
+ const deps = [];
373
+ for (let i = 0; i < root.childCount; i++) {
374
+ const node = root.child(i);
375
+ if (!node)
376
+ continue;
377
+ if (node.type === 'import_statement') {
378
+ const dep = extractImportDependency(node);
379
+ if (dep)
380
+ deps.push(dep);
381
+ }
382
+ // Also handle export ... from '...'
383
+ if (node.type === 'export_statement') {
384
+ const source = findSourceString(node);
385
+ if (source) {
386
+ const names = extractExportNames(node);
387
+ deps.push({
388
+ source,
389
+ names,
390
+ isRelative: source.startsWith('.'),
391
+ });
392
+ }
393
+ }
394
+ }
395
+ return deps;
396
+ }
397
+ function extractImportDependency(importNode) {
398
+ const sourceNode = importNode.childForFieldName('source');
399
+ if (!sourceNode) {
400
+ // Side-effect import: import './init' — source is a direct string child
401
+ for (let i = 0; i < importNode.childCount; i++) {
402
+ const child = importNode.child(i);
403
+ if (child?.type === 'string') {
404
+ const source = stripQuotes(child.text);
405
+ return { source, names: [], isRelative: source.startsWith('.') };
406
+ }
407
+ }
408
+ return null;
409
+ }
410
+ const source = stripQuotes(sourceNode.text);
411
+ const names = [];
412
+ // Find the import_clause
413
+ for (let i = 0; i < importNode.childCount; i++) {
414
+ const child = importNode.child(i);
415
+ if (child?.type === 'import_clause') {
416
+ extractImportClauseNames(child, names);
417
+ }
418
+ }
419
+ return { source, names, isRelative: source.startsWith('.') };
420
+ }
421
+ function extractImportClauseNames(clause, names) {
422
+ for (let i = 0; i < clause.childCount; i++) {
423
+ const child = clause.child(i);
424
+ if (!child)
425
+ continue;
426
+ if (child.type === 'identifier') {
427
+ // Default import
428
+ names.push(child.text);
429
+ }
430
+ else if (child.type === 'named_imports') {
431
+ for (const specifier of child.namedChildren) {
432
+ if (specifier.type === 'import_specifier') {
433
+ const nameNode = specifier.childForFieldName('name');
434
+ if (nameNode)
435
+ names.push(nameNode.text);
436
+ }
437
+ }
438
+ }
439
+ else if (child.type === 'namespace_import') {
440
+ // import * as NS
441
+ const nameNode = child.childForFieldName('name') ?? child.namedChildren.find(c => c.type === 'identifier');
442
+ if (nameNode)
443
+ names.push(`* as ${nameNode.text}`);
444
+ }
445
+ }
446
+ }
447
+ function extractExportNames(exportNode) {
448
+ const names = [];
449
+ for (let i = 0; i < exportNode.childCount; i++) {
450
+ const child = exportNode.child(i);
451
+ if (child?.type === 'export_clause') {
452
+ for (const specifier of child.namedChildren) {
453
+ if (specifier.type === 'export_specifier') {
454
+ const nameNode = specifier.childForFieldName('name');
455
+ if (nameNode)
456
+ names.push(nameNode.text);
457
+ }
458
+ }
459
+ }
460
+ }
461
+ return names;
462
+ }
463
+ function findSourceString(node) {
464
+ for (let i = 0; i < node.childCount; i++) {
465
+ const child = node.child(i);
466
+ if (child?.type === 'string' || child?.type === 'string_fragment') {
467
+ return stripQuotes(child.text);
468
+ }
469
+ }
470
+ // Check if the 'source' field exists
471
+ const source = node.childForFieldName('source');
472
+ if (source)
473
+ return stripQuotes(source.text);
474
+ return null;
475
+ }
476
+ // =============================================================================
477
+ // PYTHON EXTRACTION
478
+ // =============================================================================
479
+ function extractPythonSymbols(root) {
480
+ const symbols = [];
481
+ for (let i = 0; i < root.childCount; i++) {
482
+ const node = root.child(i);
483
+ if (!node)
484
+ continue;
485
+ if (node.type === 'function_definition') {
486
+ const name = node.childForFieldName('name');
487
+ if (name) {
488
+ symbols.push({
489
+ name: name.text,
490
+ kind: 'function',
491
+ exported: !name.text.startsWith('_'),
492
+ line: node.startPosition.row + 1,
493
+ });
494
+ }
495
+ }
496
+ else if (node.type === 'class_definition') {
497
+ const name = node.childForFieldName('name');
498
+ if (name) {
499
+ symbols.push({
500
+ name: name.text,
501
+ kind: 'class',
502
+ exported: !name.text.startsWith('_'),
503
+ line: node.startPosition.row + 1,
504
+ });
505
+ }
506
+ }
507
+ }
508
+ return symbols;
509
+ }
510
+ function extractPythonDependencies(root) {
511
+ const deps = [];
512
+ for (let i = 0; i < root.childCount; i++) {
513
+ const node = root.child(i);
514
+ if (!node)
515
+ continue;
516
+ if (node.type === 'import_statement') {
517
+ // import module
518
+ for (const child of node.namedChildren) {
519
+ if (child.type === 'dotted_name') {
520
+ deps.push({
521
+ source: child.text,
522
+ names: [child.text],
523
+ isRelative: false,
524
+ });
525
+ }
526
+ else if (child.type === 'aliased_import') {
527
+ const nameNode = child.childForFieldName('name');
528
+ if (nameNode) {
529
+ deps.push({
530
+ source: nameNode.text,
531
+ names: [nameNode.text],
532
+ isRelative: false,
533
+ });
534
+ }
535
+ }
536
+ }
537
+ }
538
+ else if (node.type === 'import_from_statement') {
539
+ // from module import name
540
+ let source = '';
541
+ let isRelative = false;
542
+ const names = [];
543
+ for (let j = 0; j < node.childCount; j++) {
544
+ const child = node.child(j);
545
+ if (!child)
546
+ continue;
547
+ if (child.type === 'dotted_name' && source === '') {
548
+ source = child.text;
549
+ }
550
+ else if (child.type === 'relative_import') {
551
+ source = child.text;
552
+ isRelative = true;
553
+ }
554
+ else if (child.type === 'dotted_name' && source !== '') {
555
+ names.push(child.text);
556
+ }
557
+ else if (child.type === 'aliased_import') {
558
+ const nameNode = child.childForFieldName('name');
559
+ if (nameNode)
560
+ names.push(nameNode.text);
561
+ }
562
+ }
563
+ if (source) {
564
+ deps.push({ source, names, isRelative });
565
+ }
566
+ }
567
+ }
568
+ return deps;
569
+ }
570
+ // =============================================================================
571
+ // HELPERS
572
+ // =============================================================================
573
+ function declarationKind(nodeType) {
574
+ switch (nodeType) {
575
+ case 'function_declaration': return 'function';
576
+ case 'class_declaration': return 'class';
577
+ case 'interface_declaration': return 'interface';
578
+ case 'type_alias_declaration': return 'type';
579
+ case 'enum_declaration': return 'enum';
580
+ default: return null;
581
+ }
582
+ }
583
+ function getDeclarationName(node) {
584
+ const nameNode = node.childForFieldName('name');
585
+ return nameNode?.text ?? null;
586
+ }
587
+ function stripQuotes(str) {
588
+ if ((str.startsWith("'") && str.endsWith("'")) ||
589
+ (str.startsWith('"') && str.endsWith('"'))) {
590
+ return str.slice(1, -1);
591
+ }
592
+ return str;
593
+ }
594
+ export const LANGUAGE_PROFILES = [
595
+ {
596
+ extensions: ['.go'],
597
+ grammar: 'tree-sitter-go',
598
+ symbolNodes: {
599
+ 'function_declaration': 'function',
600
+ 'method_declaration': 'method',
601
+ 'type_declaration': 'class',
602
+ },
603
+ importNodes: ['import_declaration'],
604
+ exportDetection: 'convention',
605
+ extractImport: (node) => {
606
+ // Go: import "pkg" or import ( "pkg1"; "pkg2" )
607
+ const deps = [];
608
+ const walkImport = (n) => {
609
+ if (n.type === 'import_spec' || n.type === 'interpreted_string_literal') {
610
+ const source = stripQuotes(n.text);
611
+ if (source && !source.startsWith('(')) {
612
+ deps.push({ source, names: [path.basename(source)], isRelative: source.startsWith('.') });
613
+ }
614
+ }
615
+ for (const child of n.namedChildren)
616
+ walkImport(child);
617
+ };
618
+ walkImport(node);
619
+ return deps;
620
+ },
621
+ },
622
+ {
623
+ extensions: ['.rs'],
624
+ grammar: 'tree-sitter-rust',
625
+ symbolNodes: {
626
+ 'function_item': 'function',
627
+ 'impl_item': 'class',
628
+ 'struct_item': 'class',
629
+ 'enum_item': 'enum',
630
+ 'trait_item': 'interface',
631
+ 'type_item': 'type',
632
+ },
633
+ importNodes: ['use_declaration'],
634
+ exportDetection: 'keyword',
635
+ extractImport: (node) => {
636
+ const text = node.text;
637
+ const match = /use\s+(.+?)(?:\s+as\s+\w+)?;/.exec(text);
638
+ if (match) {
639
+ const source = match[1].replace(/::/g, '/');
640
+ return [{ source, names: [path.basename(source)], isRelative: source.startsWith('self') || source.startsWith('super') }];
641
+ }
642
+ return [];
643
+ },
644
+ },
645
+ {
646
+ extensions: ['.java'],
647
+ grammar: 'tree-sitter-java',
648
+ symbolNodes: {
649
+ 'class_declaration': 'class',
650
+ 'interface_declaration': 'interface',
651
+ 'method_declaration': 'method',
652
+ 'enum_declaration': 'enum',
653
+ },
654
+ importNodes: ['import_declaration'],
655
+ exportDetection: 'visibility',
656
+ extractImport: (node) => {
657
+ const text = node.text;
658
+ const match = /import\s+(?:static\s+)?(.+?);/.exec(text);
659
+ if (match) {
660
+ const source = match[1];
661
+ const parts = source.split('.');
662
+ return [{ source, names: [parts[parts.length - 1]], isRelative: false }];
663
+ }
664
+ return [];
665
+ },
666
+ },
667
+ {
668
+ extensions: ['.c', '.h'],
669
+ grammar: 'tree-sitter-c',
670
+ symbolNodes: {
671
+ 'function_definition': 'function',
672
+ 'struct_specifier': 'class',
673
+ 'enum_specifier': 'enum',
674
+ 'type_definition': 'type',
675
+ },
676
+ importNodes: ['preproc_include'],
677
+ exportDetection: 'convention',
678
+ extractImport: (node) => {
679
+ const text = node.text;
680
+ const match = /#include\s+[<"](.+?)[>"]/.exec(text);
681
+ if (match) {
682
+ const source = match[1];
683
+ return [{ source, names: [path.basename(source)], isRelative: source.includes('/') || text.includes('"') }];
684
+ }
685
+ return [];
686
+ },
687
+ },
688
+ {
689
+ extensions: ['.cpp', '.cc', '.cxx', '.hpp'],
690
+ grammar: 'tree-sitter-cpp',
691
+ symbolNodes: {
692
+ 'function_definition': 'function',
693
+ 'class_specifier': 'class',
694
+ 'struct_specifier': 'class',
695
+ 'enum_specifier': 'enum',
696
+ 'namespace_definition': 'variable',
697
+ },
698
+ importNodes: ['preproc_include'],
699
+ exportDetection: 'convention',
700
+ extractImport: (node) => {
701
+ const text = node.text;
702
+ const match = /#include\s+[<"](.+?)[>"]/.exec(text);
703
+ if (match) {
704
+ const source = match[1];
705
+ return [{ source, names: [path.basename(source)], isRelative: source.includes('/') || text.includes('"') }];
706
+ }
707
+ return [];
708
+ },
709
+ },
710
+ {
711
+ extensions: ['.rb'],
712
+ grammar: 'tree-sitter-ruby',
713
+ symbolNodes: {
714
+ 'method': 'function',
715
+ 'singleton_method': 'function',
716
+ 'class': 'class',
717
+ 'module': 'class',
718
+ },
719
+ importNodes: ['call'],
720
+ exportDetection: 'convention',
721
+ extractImport: (node) => {
722
+ const text = node.text;
723
+ const match = /(?:require|require_relative)\s+['"](.+?)['"]/.exec(text);
724
+ if (match) {
725
+ const source = match[1];
726
+ return [{ source, names: [path.basename(source)], isRelative: text.includes('require_relative') }];
727
+ }
728
+ return [];
729
+ },
730
+ },
731
+ {
732
+ extensions: ['.sh', '.bash'],
733
+ grammar: 'tree-sitter-bash',
734
+ symbolNodes: {
735
+ 'function_definition': 'function',
736
+ },
737
+ importNodes: ['command'],
738
+ exportDetection: 'convention',
739
+ extractImport: (node) => {
740
+ const text = node.text;
741
+ const match = /(?:source|\.)\s+['"]?(.+?)['"]?(?:\s|$)/.exec(text);
742
+ if (match) {
743
+ const source = match[1];
744
+ return [{ source, names: [path.basename(source)], isRelative: source.startsWith('.') || source.startsWith('/') }];
745
+ }
746
+ return [];
747
+ },
748
+ },
749
+ ];
750
+ // =============================================================================
751
+ // POLYGLOT: GENERIC EXTRACTORS
752
+ // =============================================================================
753
+ function initPolyglotParser(ext, profile) {
754
+ try {
755
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
756
+ const Parser = require('tree-sitter');
757
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
758
+ const lang = require(profile.grammar);
759
+ const parser = new Parser();
760
+ parser.setLanguage(lang.default ?? lang);
761
+ parsers.set(ext, parser);
762
+ return parser;
763
+ }
764
+ catch {
765
+ parserInitFailed.add(ext);
766
+ return null;
767
+ }
768
+ }
769
+ function extractSymbolsGeneric(root, profile) {
770
+ const symbols = [];
771
+ walkTopLevel(root, (node) => {
772
+ const kind = profile.symbolNodes[node.type];
773
+ if (kind) {
774
+ const name = getDeclarationName(node);
775
+ if (name) {
776
+ const exported = detectExport(node, name, profile.exportDetection);
777
+ symbols.push({ name, kind, exported, line: node.startPosition.row + 1 });
778
+ }
779
+ }
780
+ });
781
+ return symbols;
782
+ }
783
+ function extractDependenciesGeneric(root, profile) {
784
+ const deps = [];
785
+ walkTopLevel(root, (node) => {
786
+ if (profile.importNodes.includes(node.type)) {
787
+ deps.push(...profile.extractImport(node));
788
+ }
789
+ });
790
+ return deps;
791
+ }
792
+ function walkTopLevel(root, callback) {
793
+ for (let i = 0; i < root.childCount; i++) {
794
+ const node = root.child(i);
795
+ if (node)
796
+ callback(node);
797
+ }
798
+ }
799
+ function detectExport(node, name, detection) {
800
+ switch (detection) {
801
+ case 'convention':
802
+ // Go: uppercase first letter = exported; C/C++/Ruby/Bash: treat all as exported
803
+ return name.length > 0 && name[0] === name[0].toUpperCase() && name[0] !== name[0].toLowerCase();
804
+ case 'keyword': {
805
+ // Rust: check for 'pub' keyword
806
+ const nodeText = node.text;
807
+ return nodeText.startsWith('pub ') || nodeText.startsWith('pub(');
808
+ }
809
+ case 'visibility': {
810
+ // Java: check for 'public' modifier
811
+ const nodeText = node.text;
812
+ return nodeText.includes('public ');
813
+ }
814
+ default:
815
+ return true;
816
+ }
817
+ }
818
+ //# sourceMappingURL=codebase-ast.js.map