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,685 @@
1
+ /**
2
+ * Codebase Context Integration
3
+ *
4
+ * Provides intelligent code selection for context management.
5
+ * Analyzes repository structure and selects relevant code based on:
6
+ * - Task relevance (semantic matching)
7
+ * - Architectural importance (entry points, core modules)
8
+ * - Token budget constraints
9
+ *
10
+ * Key features:
11
+ * - Budget-aware context building (select code that fits)
12
+ * - Importance scoring (imports, exports, modification frequency)
13
+ * - Incremental expansion (start minimal, expand as needed)
14
+ * - Semantic relevance matching (keyword + structure analysis)
15
+ *
16
+ * Implementation split (Phase 3d):
17
+ * - code-analyzer.ts — AST + dependency analysis helpers
18
+ * - code-selector.ts — Token-budget selection + ranking
19
+ * - codebase-context.ts — Main manager class + types + factory functions (this file)
20
+ */
21
+ import * as path from 'path';
22
+ // Analyzer functions (file discovery, processing, dependency analysis)
23
+ import { discoverFiles, processFile, extractDependencies, adjustImportanceByConnectivity, matchesPatterns, } from './code-analyzer.js';
24
+ import { clearASTCache, fullReparse, djb2Hash } from './codebase-ast.js';
25
+ // Selector functions (selection, search, ranking, LSP-enhanced context)
26
+ import { selectRelevantCode as selectRelevantCodeImpl, getEnhancedContext as getEnhancedContextImpl, expandContext as expandContextImpl, searchChunks, searchRanked as searchRankedImpl, } from './code-selector.js';
27
+ // Re-export extracted modules for direct consumer access
28
+ export { discoverFiles, processFile, extractDependencies, adjustImportanceByConnectivity, matchesPatterns, matchesGlob, normalizePath, determineChunkType, calculateBaseImportance, extractSymbols, extractSymbolDetails, extractDependencyNames, } from './code-analyzer.js';
29
+ export { selectRelevantCode as selectRelevantCodeFn, getEnhancedContext as getEnhancedContextFn, expandContext as expandContextFn, searchChunks, searchRanked as searchRankedFn, calculateRelevance, calculateSearchScore, sortByStrategy, tokenizeQuery, fuzzyMatch, levenshteinDistance, } from './code-selector.js';
30
+ // =============================================================================
31
+ // CONSTANTS
32
+ // =============================================================================
33
+ const DEFAULT_CONFIG = {
34
+ root: process.cwd(),
35
+ includePatterns: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx', '**/*.py', '**/*.go', '**/*.rs'],
36
+ excludePatterns: [
37
+ '**/node_modules/**',
38
+ '**/dist/**',
39
+ '**/build/**',
40
+ '**/.git/**',
41
+ '**/coverage/**',
42
+ '**/__pycache__/**',
43
+ '**/target/**',
44
+ '**/vendor/**',
45
+ ],
46
+ maxFileSize: 100 * 1024, // 100KB
47
+ tokensPerChar: 0.25, // Approximate: 4 chars per token
48
+ entryPointPatterns: [
49
+ '**/index.ts', '**/index.tsx', '**/index.js',
50
+ '**/main.ts', '**/main.py', '**/main.go',
51
+ '**/app.ts', '**/app.tsx', '**/app.py',
52
+ '**/server.ts', '**/server.js',
53
+ '**/cli.ts', '**/cli.js',
54
+ ],
55
+ coreModulePatterns: [
56
+ '**/src/**', '**/lib/**', '**/core/**',
57
+ '**/services/**', '**/modules/**',
58
+ ],
59
+ analyzeDependencies: true,
60
+ cacheResults: true,
61
+ cacheTTL: 5 * 60 * 1000, // 5 minutes
62
+ };
63
+ // =============================================================================
64
+ // CODEBASE CONTEXT MANAGER
65
+ // =============================================================================
66
+ /**
67
+ * Manages intelligent code selection for context building.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const codebase = createCodebaseContext({ root: './my-project' });
72
+ *
73
+ * // Analyze the repository
74
+ * const repoMap = await codebase.analyze();
75
+ *
76
+ * // Select relevant code for a task within budget
77
+ * const selection = await codebase.selectRelevantCode({
78
+ * task: 'implement user authentication',
79
+ * maxTokens: 8000,
80
+ * strategy: 'relevance_first',
81
+ * });
82
+ *
83
+ * // Use selected code in context
84
+ * const context = selection.chunks.map(c => c.content).join('\n\n');
85
+ * ```
86
+ */
87
+ export class CodebaseContextManager {
88
+ config;
89
+ repoMap = null;
90
+ cache = new Map();
91
+ listeners = [];
92
+ lspManager = null;
93
+ /** Optional trace collector for emitting codebase analysis events. */
94
+ traceCollector;
95
+ /** Optional store for persisting codebase analysis across sessions. */
96
+ persistenceStore = null;
97
+ constructor(config = {}) {
98
+ this.config = { ...DEFAULT_CONFIG, ...config };
99
+ }
100
+ /**
101
+ * Set the persistence store for warm startup across sessions.
102
+ * Accepts any object implementing saveCodebaseAnalysis/loadCodebaseAnalysis (e.g. SQLiteStore).
103
+ */
104
+ setPersistenceStore(store) {
105
+ this.persistenceStore = store;
106
+ }
107
+ /**
108
+ * Set the LSP manager for enhanced context selection.
109
+ * When set, context selection can use LSP for more accurate relevance scoring.
110
+ */
111
+ setLSPManager(lsp) {
112
+ this.lspManager = lsp;
113
+ }
114
+ /**
115
+ * Get the current LSP manager, if any.
116
+ */
117
+ getLSPManager() {
118
+ return this.lspManager;
119
+ }
120
+ /**
121
+ * Check if LSP is available and active.
122
+ */
123
+ hasActiveLSP() {
124
+ if (!this.lspManager)
125
+ return false;
126
+ const servers = this.lspManager.getActiveServers();
127
+ return servers.length > 0;
128
+ }
129
+ // ===========================================================================
130
+ // ANALYSIS
131
+ // ===========================================================================
132
+ /**
133
+ * Analyze a repository and build its structure map.
134
+ */
135
+ async analyze(root) {
136
+ const repoRoot = root ?? this.config.root;
137
+ this.emit({ type: 'analysis.started', root: repoRoot });
138
+ // Check cache
139
+ if (this.config.cacheResults) {
140
+ const cached = this.cache.get(repoRoot);
141
+ if (cached && cached.expires > Date.now()) {
142
+ this.emit({ type: 'cache.hit', root: repoRoot });
143
+ this.repoMap = cached.map;
144
+ return cached.map;
145
+ }
146
+ this.emit({ type: 'cache.miss', root: repoRoot });
147
+ }
148
+ try {
149
+ const chunks = new Map();
150
+ const entryPoints = [];
151
+ const coreModules = [];
152
+ const dependencyGraph = new Map();
153
+ const reverseDependencyGraph = new Map();
154
+ const analyzerDeps = this;
155
+ // Discover files
156
+ const files = await discoverFiles(analyzerDeps, repoRoot);
157
+ // Warm startup: try loading persisted analysis and only reprocess changed files
158
+ const savedAnalysis = this.persistenceStore
159
+ ? this.persistenceStore.loadCodebaseAnalysis(repoRoot)
160
+ : null;
161
+ const filesToProcess = savedAnalysis
162
+ ? await this.diffAgainstSaved(repoRoot, files, savedAnalysis, chunks)
163
+ : files;
164
+ // Process each file (only changed/new files when warm-starting)
165
+ for (const filePath of filesToProcess) {
166
+ const chunk = await processFile(analyzerDeps, repoRoot, filePath);
167
+ if (chunk) {
168
+ chunks.set(chunk.id, chunk);
169
+ // Track entry points
170
+ if (chunk.type === 'entry_point') {
171
+ entryPoints.push(filePath);
172
+ }
173
+ // Build dependency graph
174
+ if (this.config.analyzeDependencies) {
175
+ const fullPath = path.join(repoRoot, filePath);
176
+ const deps = extractDependencies(chunk.content, fullPath);
177
+ dependencyGraph.set(filePath, deps);
178
+ // Build reverse graph
179
+ for (const dep of deps) {
180
+ if (!reverseDependencyGraph.has(dep)) {
181
+ reverseDependencyGraph.set(dep, new Set());
182
+ }
183
+ reverseDependencyGraph.get(dep).add(filePath);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ // Restore dependency graph edges for unchanged files from saved analysis
189
+ if (savedAnalysis && this.config.analyzeDependencies) {
190
+ for (const [source, targets] of savedAnalysis.deps) {
191
+ if (!filesToProcess.includes(source) && chunks.has(source)) {
192
+ dependencyGraph.set(source, targets);
193
+ for (const dep of targets) {
194
+ if (!reverseDependencyGraph.has(dep)) {
195
+ reverseDependencyGraph.set(dep, new Set());
196
+ }
197
+ reverseDependencyGraph.get(dep).add(source);
198
+ }
199
+ }
200
+ }
201
+ }
202
+ // Ensure entry points include restored unchanged files
203
+ if (savedAnalysis) {
204
+ for (const [filePath, chunk] of chunks) {
205
+ if (chunk.type === 'entry_point' && !entryPoints.includes(filePath)) {
206
+ entryPoints.push(filePath);
207
+ }
208
+ }
209
+ }
210
+ // Calculate total tokens
211
+ let totalTokens = 0;
212
+ for (const chunk of chunks.values()) {
213
+ totalTokens += chunk.tokenCount;
214
+ }
215
+ // Adjust importance based on dependency graph
216
+ adjustImportanceByConnectivity(chunks, reverseDependencyGraph);
217
+ // Identify core modules
218
+ const moduleDirs = new Set();
219
+ for (const filePath of files) {
220
+ const dir = path.dirname(filePath);
221
+ if (matchesPatterns(analyzerDeps, dir, this.config.coreModulePatterns)) {
222
+ moduleDirs.add(dir);
223
+ }
224
+ }
225
+ coreModules.push(...moduleDirs);
226
+ const repoMap = {
227
+ root: repoRoot,
228
+ chunks,
229
+ entryPoints,
230
+ coreModules,
231
+ dependencyGraph,
232
+ reverseDependencyGraph,
233
+ totalTokens,
234
+ analyzedAt: new Date(),
235
+ };
236
+ // Cache result
237
+ if (this.config.cacheResults) {
238
+ this.cache.set(repoRoot, {
239
+ map: repoMap,
240
+ expires: Date.now() + this.config.cacheTTL,
241
+ });
242
+ }
243
+ this.repoMap = repoMap;
244
+ // Persist analysis to SQLite for warm startup next session
245
+ if (this.persistenceStore) {
246
+ try {
247
+ this.persistenceStore.saveCodebaseAnalysis(repoRoot, chunks.values(), dependencyGraph);
248
+ }
249
+ catch { /* persistence is non-blocking */ }
250
+ }
251
+ this.emit({
252
+ type: 'analysis.completed',
253
+ totalFiles: chunks.size,
254
+ totalTokens,
255
+ });
256
+ // Emit trace event with full codebase map data
257
+ this.traceCollector?.record({
258
+ type: 'codebase.map',
259
+ data: {
260
+ totalFiles: chunks.size,
261
+ totalTokens,
262
+ entryPoints,
263
+ coreModules,
264
+ dependencyEdges: Array.from(dependencyGraph.entries()).map(([file, imports]) => ({
265
+ file,
266
+ imports: Array.from(imports),
267
+ })),
268
+ topChunks: Array.from(chunks.values())
269
+ .sort((a, b) => b.importance - a.importance)
270
+ .slice(0, 50)
271
+ .map(chunk => ({
272
+ filePath: chunk.filePath,
273
+ tokenCount: chunk.tokenCount,
274
+ importance: chunk.importance,
275
+ type: chunk.type,
276
+ symbols: chunk.symbolDetails,
277
+ dependencies: chunk.dependencies,
278
+ })),
279
+ files: Array.from(chunks.values()).map((chunk) => ({
280
+ filePath: chunk.filePath,
281
+ directory: path.dirname(chunk.filePath) === '.' ? '' : path.dirname(chunk.filePath),
282
+ fileName: path.basename(chunk.filePath),
283
+ tokenCount: chunk.tokenCount,
284
+ importance: chunk.importance,
285
+ type: chunk.type,
286
+ symbols: chunk.symbolDetails,
287
+ inDegree: reverseDependencyGraph.get(chunk.filePath)?.size ?? 0,
288
+ outDegree: dependencyGraph.get(chunk.filePath)?.size ?? 0,
289
+ })),
290
+ },
291
+ });
292
+ return repoMap;
293
+ }
294
+ catch (error) {
295
+ this.emit({ type: 'analysis.error', error: error });
296
+ throw error;
297
+ }
298
+ }
299
+ // ===========================================================================
300
+ // SELECTION (delegates to code-selector.ts)
301
+ // ===========================================================================
302
+ /**
303
+ * Select relevant code chunks for a task within a token budget.
304
+ */
305
+ async selectRelevantCode(options) {
306
+ return selectRelevantCodeImpl(this.asSelectorDeps(), options);
307
+ }
308
+ // ===========================================================================
309
+ // LSP-ENHANCED CONTEXT SELECTION (delegates to code-selector.ts)
310
+ // ===========================================================================
311
+ /**
312
+ * Select relevant code with LSP-enhanced relevance scoring.
313
+ *
314
+ * When an LSP manager is set and active, this method uses LSP to:
315
+ * - Find files that reference the editing file (who uses this code?)
316
+ * - Find files that the editing file references (what does this depend on?)
317
+ * - Boost priority of related files in the selection
318
+ *
319
+ * @example
320
+ * ```typescript
321
+ * const codebase = createCodebaseContext({ root: './project' });
322
+ * codebase.setLSPManager(lspManager);
323
+ *
324
+ * const result = await codebase.getEnhancedContext({
325
+ * task: 'fix bug in authentication',
326
+ * maxTokens: 10000,
327
+ * editingFile: 'src/auth/login.ts',
328
+ * editingPosition: { line: 25, character: 10 },
329
+ * });
330
+ *
331
+ * // Result includes LSP-boosted files
332
+ * console.log('LSP boosted:', result.lspBoostedFiles);
333
+ * ```
334
+ */
335
+ async getEnhancedContext(options) {
336
+ return getEnhancedContextImpl(this.asSelectorDeps(), options);
337
+ }
338
+ // ===========================================================================
339
+ // INCREMENTAL EXPANSION (delegates to code-selector.ts)
340
+ // ===========================================================================
341
+ /**
342
+ * Expand context by adding related files to current selection.
343
+ */
344
+ async expandContext(currentChunks, options) {
345
+ return expandContextImpl(this.asSelectorDeps(), currentChunks, options);
346
+ }
347
+ // ===========================================================================
348
+ // UTILITIES
349
+ // ===========================================================================
350
+ /**
351
+ * Get a chunk by file path.
352
+ */
353
+ getChunk(filePath) {
354
+ return this.repoMap?.chunks.get(filePath);
355
+ }
356
+ /**
357
+ * Get all chunks.
358
+ */
359
+ getAllChunks() {
360
+ return this.repoMap ? Array.from(this.repoMap.chunks.values()) : [];
361
+ }
362
+ /**
363
+ * Get entry points.
364
+ */
365
+ getEntryPoints() {
366
+ if (!this.repoMap)
367
+ return [];
368
+ return this.repoMap.entryPoints
369
+ .map((ep) => this.repoMap.chunks.get(ep))
370
+ .filter((c) => c !== undefined);
371
+ }
372
+ /**
373
+ * Estimate tokens for a string.
374
+ */
375
+ estimateTokens(content) {
376
+ return Math.ceil(content.length * this.config.tokensPerChar);
377
+ }
378
+ /**
379
+ * Get the current repo map.
380
+ */
381
+ getRepoMap() {
382
+ return this.repoMap;
383
+ }
384
+ /**
385
+ * Clear cached data (including AST parse cache).
386
+ */
387
+ clearCache() {
388
+ this.cache.clear();
389
+ this.repoMap = null;
390
+ clearASTCache();
391
+ }
392
+ // ===========================================================================
393
+ // WARM STARTUP HELPERS (Phase 3)
394
+ // ===========================================================================
395
+ /**
396
+ * Diff discovered files against saved analysis.
397
+ * Reuses saved chunks for unchanged files, returns only files that need reprocessing.
398
+ */
399
+ async diffAgainstSaved(repoRoot, files, saved, chunks) {
400
+ const { default: fs } = await import('fs/promises');
401
+ const changedFiles = [];
402
+ for (const relativePath of files) {
403
+ const savedChunk = saved.chunks.get(relativePath);
404
+ if (savedChunk) {
405
+ // Check if file content has changed by reading + hashing
406
+ try {
407
+ const fullPath = path.join(repoRoot, relativePath);
408
+ const content = await fs.readFile(fullPath, 'utf-8');
409
+ const currentHash = djb2Hash(content).toString(36);
410
+ if (currentHash === savedChunk.contentHash) {
411
+ // Unchanged — restore chunk from saved data
412
+ const symbolDetails = JSON.parse(savedChunk.symbolsJson || '[]');
413
+ const dependencies = JSON.parse(savedChunk.dependenciesJson || '[]');
414
+ chunks.set(relativePath, {
415
+ id: relativePath,
416
+ filePath: relativePath,
417
+ content,
418
+ tokenCount: savedChunk.tokenCount,
419
+ importance: savedChunk.importance,
420
+ type: savedChunk.chunkType,
421
+ symbols: symbolDetails.map((s) => s.name),
422
+ symbolDetails,
423
+ dependencies,
424
+ lastModified: new Date(savedChunk.analyzedAt),
425
+ });
426
+ continue;
427
+ }
428
+ }
429
+ catch {
430
+ // File read failed — treat as changed
431
+ }
432
+ }
433
+ changedFiles.push(relativePath);
434
+ }
435
+ return changedFiles;
436
+ }
437
+ // ===========================================================================
438
+ // INCREMENTAL FILE UPDATES (Phase 2)
439
+ // ===========================================================================
440
+ /**
441
+ * Update a single file's chunk in-place after an edit.
442
+ * Reparses the file, patches the chunk's symbols/deps, and updates dependency graph edges.
443
+ * Avoids full re-analyze for single-file edits.
444
+ */
445
+ async updateFile(filePath, newContent) {
446
+ if (!this.repoMap)
447
+ return;
448
+ const relativePath = path.relative(this.config.root, filePath);
449
+ const parsed = fullReparse(filePath, newContent);
450
+ const existingChunk = this.repoMap.chunks.get(relativePath);
451
+ if (existingChunk) {
452
+ // Patch in-place
453
+ existingChunk.content = newContent;
454
+ existingChunk.tokenCount = Math.ceil(newContent.length * this.config.tokensPerChar);
455
+ existingChunk.lastModified = new Date();
456
+ if (parsed) {
457
+ existingChunk.symbols = parsed.symbols.map(s => s.name);
458
+ existingChunk.symbolDetails = parsed.symbols.map(s => ({
459
+ name: s.name, kind: s.kind, exported: s.exported, line: s.line,
460
+ }));
461
+ existingChunk.dependencies = parsed.dependencies
462
+ .flatMap(d => d.names.filter(n => !n.startsWith('* as ')));
463
+ }
464
+ // Update dependency graph edges for this file
465
+ this.updateDependencyEdges(relativePath, newContent);
466
+ // Recalculate total tokens
467
+ let totalTokens = 0;
468
+ for (const chunk of this.repoMap.chunks.values()) {
469
+ totalTokens += chunk.tokenCount;
470
+ }
471
+ this.repoMap.totalTokens = totalTokens;
472
+ }
473
+ // New files (not in chunks) require a full re-analyze
474
+ }
475
+ updateDependencyEdges(filePath, content) {
476
+ if (!this.repoMap)
477
+ return;
478
+ const { dependencyGraph, reverseDependencyGraph } = this.repoMap;
479
+ // Remove old forward edges
480
+ const oldDeps = dependencyGraph.get(filePath);
481
+ if (oldDeps) {
482
+ for (const dep of oldDeps) {
483
+ reverseDependencyGraph.get(dep)?.delete(filePath);
484
+ }
485
+ }
486
+ // Build new forward edges (use absolute path for AST cache lookup)
487
+ const fullPath = path.join(this.config.root, filePath);
488
+ const newDeps = extractDependencies(content, fullPath);
489
+ dependencyGraph.set(filePath, newDeps);
490
+ // Build new reverse edges
491
+ for (const dep of newDeps) {
492
+ if (!reverseDependencyGraph.has(dep)) {
493
+ reverseDependencyGraph.set(dep, new Set());
494
+ }
495
+ reverseDependencyGraph.get(dep).add(filePath);
496
+ }
497
+ }
498
+ /**
499
+ * Subscribe to events.
500
+ */
501
+ on(listener) {
502
+ this.listeners.push(listener);
503
+ return () => {
504
+ const idx = this.listeners.indexOf(listener);
505
+ if (idx >= 0)
506
+ this.listeners.splice(idx, 1);
507
+ };
508
+ }
509
+ emit(event) {
510
+ for (const listener of this.listeners) {
511
+ try {
512
+ listener(event);
513
+ }
514
+ catch {
515
+ // Ignore listener errors
516
+ }
517
+ }
518
+ }
519
+ // ===========================================================================
520
+ // ENHANCED SEARCH (delegates to code-selector.ts)
521
+ // ===========================================================================
522
+ /**
523
+ * Search for code chunks matching a query.
524
+ *
525
+ * @example
526
+ * ```typescript
527
+ * const results = codebase.search('authentication', {
528
+ * includeSymbols: true,
529
+ * includePaths: true,
530
+ * });
531
+ * ```
532
+ */
533
+ search(query, options = {}) {
534
+ return searchChunks(this.repoMap, query, options);
535
+ }
536
+ /**
537
+ * Search and rank results by relevance.
538
+ *
539
+ * @example
540
+ * ```typescript
541
+ * const ranked = codebase.searchRanked('user auth', { limit: 10 });
542
+ * ranked.forEach(r => console.log(`${r.chunk.filePath}: ${r.score}`));
543
+ * ```
544
+ */
545
+ searchRanked(query, options = {}) {
546
+ return searchRankedImpl(this.repoMap, query, options);
547
+ }
548
+ // ===========================================================================
549
+ // INTERNAL HELPERS
550
+ // ===========================================================================
551
+ /**
552
+ * Build the CodeSelectorDeps facade for delegating to code-selector functions.
553
+ */
554
+ asSelectorDeps() {
555
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
556
+ const self = this;
557
+ return {
558
+ get repoMap() {
559
+ return self.repoMap;
560
+ },
561
+ get lspManager() {
562
+ return self.lspManager;
563
+ },
564
+ hasActiveLSP: () => self.hasActiveLSP(),
565
+ analyze: () => self.analyze(),
566
+ emit: (event) => self.emit(event),
567
+ };
568
+ }
569
+ }
570
+ // =============================================================================
571
+ // FACTORY FUNCTIONS
572
+ // =============================================================================
573
+ /**
574
+ * Create a codebase context manager.
575
+ *
576
+ * @example
577
+ * ```typescript
578
+ * const codebase = createCodebaseContext({
579
+ * root: './my-project',
580
+ * includePatterns: ['src/**\/*.ts'],
581
+ * excludePatterns: ['node_modules/**'],
582
+ * });
583
+ *
584
+ * // Analyze repo
585
+ * await codebase.analyze();
586
+ *
587
+ * // Select code for task
588
+ * const selection = await codebase.selectRelevantCode({
589
+ * task: 'fix authentication bug',
590
+ * maxTokens: 10000,
591
+ * strategy: 'relevance_first',
592
+ * });
593
+ *
594
+ * console.log(`Selected ${selection.chunks.length} files`);
595
+ * console.log(`Using ${selection.totalTokens} tokens`);
596
+ * ```
597
+ */
598
+ export function createCodebaseContext(config = {}) {
599
+ return new CodebaseContextManager(config);
600
+ }
601
+ /**
602
+ * Build context string from selected chunks.
603
+ */
604
+ export function buildContextFromChunks(chunks, options = {}) {
605
+ const { includeFilePaths = true, includeSeparators = true, maxTotalTokens, } = options;
606
+ const parts = [];
607
+ let totalTokens = 0;
608
+ for (const chunk of chunks) {
609
+ if (maxTotalTokens && totalTokens + chunk.tokenCount > maxTotalTokens) {
610
+ break;
611
+ }
612
+ if (includeSeparators && parts.length > 0) {
613
+ parts.push('\n---\n');
614
+ }
615
+ if (includeFilePaths) {
616
+ parts.push(`// File: ${chunk.filePath}\n`);
617
+ }
618
+ parts.push(chunk.content);
619
+ totalTokens += chunk.tokenCount;
620
+ }
621
+ return parts.join('');
622
+ }
623
+ /**
624
+ * Create a summary of the repo structure.
625
+ */
626
+ export function summarizeRepoStructure(repoMap) {
627
+ const lines = [
628
+ `Repository: ${repoMap.root}`,
629
+ `Total files: ${repoMap.chunks.size}`,
630
+ `Total tokens: ${repoMap.totalTokens.toLocaleString()}`,
631
+ ``,
632
+ `Entry points:`,
633
+ ];
634
+ for (const ep of repoMap.entryPoints.slice(0, 5)) {
635
+ lines.push(` - ${ep}`);
636
+ }
637
+ lines.push(``, `Core modules:`);
638
+ for (const mod of repoMap.coreModules.slice(0, 5)) {
639
+ lines.push(` - ${mod}`);
640
+ }
641
+ // Type breakdown
642
+ const byType = new Map();
643
+ for (const chunk of repoMap.chunks.values()) {
644
+ byType.set(chunk.type, (byType.get(chunk.type) ?? 0) + 1);
645
+ }
646
+ lines.push(``, `File types:`);
647
+ for (const [type, count] of byType) {
648
+ lines.push(` - ${type}: ${count}`);
649
+ }
650
+ return lines.join('\n');
651
+ }
652
+ /**
653
+ * Generate an aider-style lightweight repo map: file tree with key symbols.
654
+ * Used as fallback when task-specific selection returns nothing.
655
+ */
656
+ export function generateLightweightRepoMap(repoMap, maxTokens = 10000) {
657
+ const lines = ['## Repository Map\n'];
658
+ const byDir = new Map();
659
+ for (const chunk of repoMap.chunks.values()) {
660
+ const dir = path.dirname(chunk.filePath);
661
+ if (!byDir.has(dir))
662
+ byDir.set(dir, []);
663
+ byDir.get(dir).push(chunk);
664
+ }
665
+ let tokenEstimate = 0;
666
+ for (const [dir, chunks] of [...byDir].sort((a, b) => a[0].localeCompare(b[0]))) {
667
+ const dirLine = `${dir}/`;
668
+ lines.push(dirLine);
669
+ tokenEstimate += dirLine.length * 0.25;
670
+ for (const chunk of chunks.sort((a, b) => b.importance - a.importance)) {
671
+ const symbols = chunk.symbols.slice(0, 5).join(', ');
672
+ const fileLine = ` ${path.basename(chunk.filePath)}${symbols ? ` (${symbols})` : ''}`;
673
+ lines.push(fileLine);
674
+ tokenEstimate += fileLine.length * 0.25;
675
+ if (tokenEstimate > maxTokens)
676
+ break;
677
+ }
678
+ if (tokenEstimate > maxTokens) {
679
+ lines.push(' ... (truncated)');
680
+ break;
681
+ }
682
+ }
683
+ return lines.join('\n');
684
+ }
685
+ //# sourceMappingURL=codebase-context.js.map