attocode 0.2.3 → 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 (787) hide show
  1. package/CHANGELOG.md +122 -1
  2. package/README.md +65 -5
  3. package/dist/src/adapters.d.ts +2 -1
  4. package/dist/src/adapters.d.ts.map +1 -1
  5. package/dist/src/adapters.js +74 -12
  6. package/dist/src/adapters.js.map +1 -1
  7. package/dist/src/agent/agent-builder.d.ts +117 -0
  8. package/dist/src/agent/agent-builder.d.ts.map +1 -0
  9. package/dist/src/agent/agent-builder.js +204 -0
  10. package/dist/src/agent/agent-builder.js.map +1 -0
  11. package/dist/src/agent/feature-initializer.d.ts +80 -0
  12. package/dist/src/agent/feature-initializer.d.ts.map +1 -0
  13. package/dist/src/agent/feature-initializer.js +677 -0
  14. package/dist/src/agent/feature-initializer.js.map +1 -0
  15. package/dist/src/agent/index.d.ts +13 -0
  16. package/dist/src/agent/index.d.ts.map +1 -0
  17. package/dist/src/agent/index.js +13 -0
  18. package/dist/src/agent/index.js.map +1 -0
  19. package/dist/src/agent/message-builder.d.ts +50 -0
  20. package/dist/src/agent/message-builder.d.ts.map +1 -0
  21. package/dist/src/agent/message-builder.js +173 -0
  22. package/dist/src/agent/message-builder.js.map +1 -0
  23. package/dist/src/agent/session-api.d.ts +94 -0
  24. package/dist/src/agent/session-api.d.ts.map +1 -0
  25. package/dist/src/agent/session-api.js +262 -0
  26. package/dist/src/agent/session-api.js.map +1 -0
  27. package/dist/src/agent-tools/lsp-file-tools.d.ts +1 -1
  28. package/dist/src/agent-tools/lsp-file-tools.d.ts.map +1 -1
  29. package/dist/src/agent.d.ts +52 -213
  30. package/dist/src/agent.d.ts.map +1 -1
  31. package/dist/src/agent.js +544 -4072
  32. package/dist/src/agent.js.map +1 -1
  33. package/dist/src/cli.d.ts.map +1 -1
  34. package/dist/src/cli.js +2 -1
  35. package/dist/src/cli.js.map +1 -1
  36. package/dist/src/commands/handler.d.ts.map +1 -1
  37. package/dist/src/commands/handler.js +18 -9
  38. package/dist/src/commands/handler.js.map +1 -1
  39. package/dist/src/commands/init-commands.d.ts.map +1 -1
  40. package/dist/src/commands/init-commands.js +16 -1
  41. package/dist/src/commands/init-commands.js.map +1 -1
  42. package/dist/src/commands/init.d.ts.map +1 -1
  43. package/dist/src/commands/init.js +31 -0
  44. package/dist/src/commands/init.js.map +1 -1
  45. package/dist/src/config/base-types.d.ts +45 -0
  46. package/dist/src/config/base-types.d.ts.map +1 -0
  47. package/dist/src/config/base-types.js +9 -0
  48. package/dist/src/config/base-types.js.map +1 -0
  49. package/dist/src/config/config-manager.d.ts +35 -0
  50. package/dist/src/config/config-manager.d.ts.map +1 -0
  51. package/dist/src/config/config-manager.js +108 -0
  52. package/dist/src/config/config-manager.js.map +1 -0
  53. package/dist/src/config/index.d.ts +4 -0
  54. package/dist/src/config/index.d.ts.map +1 -0
  55. package/dist/src/config/index.js +3 -0
  56. package/dist/src/config/index.js.map +1 -0
  57. package/dist/src/config/schema.d.ts +1546 -0
  58. package/dist/src/config/schema.d.ts.map +1 -0
  59. package/dist/src/config/schema.js +268 -0
  60. package/dist/src/config/schema.js.map +1 -0
  61. package/dist/src/config.d.ts +4 -1
  62. package/dist/src/config.d.ts.map +1 -1
  63. package/dist/src/config.js +8 -12
  64. package/dist/src/config.js.map +1 -1
  65. package/dist/src/core/agent-state-machine.d.ts +131 -0
  66. package/dist/src/core/agent-state-machine.d.ts.map +1 -0
  67. package/dist/src/core/agent-state-machine.js +302 -0
  68. package/dist/src/core/agent-state-machine.js.map +1 -0
  69. package/dist/src/core/base-manager.d.ts +79 -0
  70. package/dist/src/core/base-manager.d.ts.map +1 -0
  71. package/dist/src/core/base-manager.js +170 -0
  72. package/dist/src/core/base-manager.js.map +1 -0
  73. package/dist/src/core/completion-analyzer.d.ts +15 -0
  74. package/dist/src/core/completion-analyzer.d.ts.map +1 -0
  75. package/dist/src/core/completion-analyzer.js +53 -0
  76. package/dist/src/core/completion-analyzer.js.map +1 -0
  77. package/dist/src/core/execution-loop.d.ts +46 -0
  78. package/dist/src/core/execution-loop.d.ts.map +1 -0
  79. package/dist/src/core/execution-loop.js +1397 -0
  80. package/dist/src/core/execution-loop.js.map +1 -0
  81. package/dist/src/core/index.d.ts +7 -0
  82. package/dist/src/core/index.d.ts.map +1 -1
  83. package/dist/src/core/index.js +9 -0
  84. package/dist/src/core/index.js.map +1 -1
  85. package/dist/src/core/process-handlers.d.ts.map +1 -1
  86. package/dist/src/core/process-handlers.js +14 -0
  87. package/dist/src/core/process-handlers.js.map +1 -1
  88. package/dist/src/core/protocol/types.d.ts +12 -12
  89. package/dist/src/core/response-handler.d.ts +16 -0
  90. package/dist/src/core/response-handler.d.ts.map +1 -0
  91. package/dist/src/core/response-handler.js +235 -0
  92. package/dist/src/core/response-handler.js.map +1 -0
  93. package/dist/src/core/subagent-spawner.d.ts +43 -0
  94. package/dist/src/core/subagent-spawner.d.ts.map +1 -0
  95. package/dist/src/core/subagent-spawner.js +973 -0
  96. package/dist/src/core/subagent-spawner.js.map +1 -0
  97. package/dist/src/core/tool-executor.d.ts +59 -0
  98. package/dist/src/core/tool-executor.d.ts.map +1 -0
  99. package/dist/src/core/tool-executor.js +682 -0
  100. package/dist/src/core/tool-executor.js.map +1 -0
  101. package/dist/src/core/types.d.ts +134 -0
  102. package/dist/src/core/types.d.ts.map +1 -0
  103. package/dist/src/core/types.js +12 -0
  104. package/dist/src/core/types.js.map +1 -0
  105. package/dist/src/defaults.d.ts +2 -2
  106. package/dist/src/defaults.d.ts.map +1 -1
  107. package/dist/src/defaults.js +29 -1
  108. package/dist/src/defaults.js.map +1 -1
  109. package/dist/src/integrations/agents/agent-registry.d.ts +262 -0
  110. package/dist/src/integrations/agents/agent-registry.d.ts.map +1 -0
  111. package/dist/src/integrations/agents/agent-registry.js +686 -0
  112. package/dist/src/integrations/agents/agent-registry.js.map +1 -0
  113. package/dist/src/integrations/agents/async-subagent.d.ts +135 -0
  114. package/dist/src/integrations/agents/async-subagent.d.ts.map +1 -0
  115. package/dist/src/integrations/agents/async-subagent.js +213 -0
  116. package/dist/src/integrations/agents/async-subagent.js.map +1 -0
  117. package/dist/src/integrations/agents/complexity-classifier.d.ts +86 -0
  118. package/dist/src/integrations/agents/complexity-classifier.d.ts.map +1 -0
  119. package/dist/src/integrations/agents/complexity-classifier.js +233 -0
  120. package/dist/src/integrations/agents/complexity-classifier.js.map +1 -0
  121. package/dist/src/integrations/agents/delegation-protocol.d.ts +86 -0
  122. package/dist/src/integrations/agents/delegation-protocol.d.ts.map +1 -0
  123. package/dist/src/integrations/agents/delegation-protocol.js +127 -0
  124. package/dist/src/integrations/agents/delegation-protocol.js.map +1 -0
  125. package/dist/src/integrations/agents/multi-agent.d.ts +150 -0
  126. package/dist/src/integrations/agents/multi-agent.d.ts.map +1 -0
  127. package/dist/src/integrations/agents/multi-agent.js +306 -0
  128. package/dist/src/integrations/agents/multi-agent.js.map +1 -0
  129. package/dist/src/integrations/agents/result-synthesizer.d.ts +389 -0
  130. package/dist/src/integrations/agents/result-synthesizer.d.ts.map +1 -0
  131. package/dist/src/integrations/agents/result-synthesizer.js +951 -0
  132. package/dist/src/integrations/agents/result-synthesizer.js.map +1 -0
  133. package/dist/src/integrations/agents/shared-blackboard.d.ts +406 -0
  134. package/dist/src/integrations/agents/shared-blackboard.d.ts.map +1 -0
  135. package/dist/src/integrations/agents/shared-blackboard.js +757 -0
  136. package/dist/src/integrations/agents/shared-blackboard.js.map +1 -0
  137. package/dist/src/integrations/agents/subagent-output-store.d.ts +91 -0
  138. package/dist/src/integrations/agents/subagent-output-store.d.ts.map +1 -0
  139. package/dist/src/integrations/agents/subagent-output-store.js +257 -0
  140. package/dist/src/integrations/agents/subagent-output-store.js.map +1 -0
  141. package/dist/src/integrations/auto-compaction.d.ts.map +1 -1
  142. package/dist/src/integrations/auto-compaction.js +3 -2
  143. package/dist/src/integrations/auto-compaction.js.map +1 -1
  144. package/dist/src/integrations/budget/budget-pool.d.ts +115 -0
  145. package/dist/src/integrations/budget/budget-pool.d.ts.map +1 -0
  146. package/dist/src/integrations/budget/budget-pool.js +205 -0
  147. package/dist/src/integrations/budget/budget-pool.js.map +1 -0
  148. package/dist/src/integrations/budget/cancellation.d.ts +229 -0
  149. package/dist/src/integrations/budget/cancellation.d.ts.map +1 -0
  150. package/dist/src/integrations/budget/cancellation.js +520 -0
  151. package/dist/src/integrations/budget/cancellation.js.map +1 -0
  152. package/dist/src/integrations/budget/dynamic-budget.d.ts +81 -0
  153. package/dist/src/integrations/budget/dynamic-budget.d.ts.map +1 -0
  154. package/dist/src/integrations/budget/dynamic-budget.js +151 -0
  155. package/dist/src/integrations/budget/dynamic-budget.js.map +1 -0
  156. package/dist/src/integrations/budget/economics.d.ts +435 -0
  157. package/dist/src/integrations/budget/economics.d.ts.map +1 -0
  158. package/dist/src/integrations/budget/economics.js +1007 -0
  159. package/dist/src/integrations/budget/economics.js.map +1 -0
  160. package/dist/src/integrations/budget/injection-budget.d.ts +71 -0
  161. package/dist/src/integrations/budget/injection-budget.d.ts.map +1 -0
  162. package/dist/src/integrations/budget/injection-budget.js +137 -0
  163. package/dist/src/integrations/budget/injection-budget.js.map +1 -0
  164. package/dist/src/integrations/budget/loop-detector.d.ts +105 -0
  165. package/dist/src/integrations/budget/loop-detector.d.ts.map +1 -0
  166. package/dist/src/integrations/budget/loop-detector.js +287 -0
  167. package/dist/src/integrations/budget/loop-detector.js.map +1 -0
  168. package/dist/src/integrations/budget/phase-tracker.d.ts +114 -0
  169. package/dist/src/integrations/budget/phase-tracker.d.ts.map +1 -0
  170. package/dist/src/integrations/budget/phase-tracker.js +262 -0
  171. package/dist/src/integrations/budget/phase-tracker.js.map +1 -0
  172. package/dist/src/integrations/budget/resources.d.ts +182 -0
  173. package/dist/src/integrations/budget/resources.d.ts.map +1 -0
  174. package/dist/src/integrations/budget/resources.js +318 -0
  175. package/dist/src/integrations/budget/resources.js.map +1 -0
  176. package/dist/src/integrations/budget-pool.d.ts +7 -0
  177. package/dist/src/integrations/budget-pool.d.ts.map +1 -1
  178. package/dist/src/integrations/budget-pool.js +43 -0
  179. package/dist/src/integrations/budget-pool.js.map +1 -1
  180. package/dist/src/integrations/codebase-ast.d.ts +52 -0
  181. package/dist/src/integrations/codebase-ast.d.ts.map +1 -0
  182. package/dist/src/integrations/codebase-ast.js +457 -0
  183. package/dist/src/integrations/codebase-ast.js.map +1 -0
  184. package/dist/src/integrations/codebase-context.d.ts +18 -0
  185. package/dist/src/integrations/codebase-context.d.ts.map +1 -1
  186. package/dist/src/integrations/codebase-context.js +197 -17
  187. package/dist/src/integrations/codebase-context.js.map +1 -1
  188. package/dist/src/integrations/compaction.d.ts.map +1 -1
  189. package/dist/src/integrations/compaction.js +14 -6
  190. package/dist/src/integrations/compaction.js.map +1 -1
  191. package/dist/src/integrations/context/auto-compaction.d.ts +210 -0
  192. package/dist/src/integrations/context/auto-compaction.d.ts.map +1 -0
  193. package/dist/src/integrations/context/auto-compaction.js +477 -0
  194. package/dist/src/integrations/context/auto-compaction.js.map +1 -0
  195. package/dist/src/integrations/context/code-analyzer.d.ts +71 -0
  196. package/dist/src/integrations/context/code-analyzer.d.ts.map +1 -0
  197. package/dist/src/integrations/context/code-analyzer.js +448 -0
  198. package/dist/src/integrations/context/code-analyzer.js.map +1 -0
  199. package/dist/src/integrations/context/code-selector.d.ts +78 -0
  200. package/dist/src/integrations/context/code-selector.d.ts.map +1 -0
  201. package/dist/src/integrations/context/code-selector.js +649 -0
  202. package/dist/src/integrations/context/code-selector.js.map +1 -0
  203. package/dist/src/integrations/context/codebase-ast.d.ts +138 -0
  204. package/dist/src/integrations/context/codebase-ast.d.ts.map +1 -0
  205. package/dist/src/integrations/context/codebase-ast.js +818 -0
  206. package/dist/src/integrations/context/codebase-ast.js.map +1 -0
  207. package/dist/src/integrations/context/codebase-context.d.ts +473 -0
  208. package/dist/src/integrations/context/codebase-context.d.ts.map +1 -0
  209. package/dist/src/integrations/context/codebase-context.js +685 -0
  210. package/dist/src/integrations/context/codebase-context.js.map +1 -0
  211. package/dist/src/integrations/context/compaction.d.ts +191 -0
  212. package/dist/src/integrations/context/compaction.d.ts.map +1 -0
  213. package/dist/src/integrations/context/compaction.js +384 -0
  214. package/dist/src/integrations/context/compaction.js.map +1 -0
  215. package/dist/src/integrations/context/context-engineering.d.ts +274 -0
  216. package/dist/src/integrations/context/context-engineering.d.ts.map +1 -0
  217. package/dist/src/integrations/context/context-engineering.js +437 -0
  218. package/dist/src/integrations/context/context-engineering.js.map +1 -0
  219. package/dist/src/integrations/context/file-cache.d.ts +97 -0
  220. package/dist/src/integrations/context/file-cache.d.ts.map +1 -0
  221. package/dist/src/integrations/context/file-cache.js +218 -0
  222. package/dist/src/integrations/context/file-cache.js.map +1 -0
  223. package/dist/src/integrations/context/semantic-cache.d.ts +178 -0
  224. package/dist/src/integrations/context/semantic-cache.d.ts.map +1 -0
  225. package/dist/src/integrations/context/semantic-cache.js +372 -0
  226. package/dist/src/integrations/context/semantic-cache.js.map +1 -0
  227. package/dist/src/integrations/context-engineering.d.ts +8 -0
  228. package/dist/src/integrations/context-engineering.d.ts.map +1 -1
  229. package/dist/src/integrations/context-engineering.js +19 -0
  230. package/dist/src/integrations/context-engineering.js.map +1 -1
  231. package/dist/src/integrations/economics.d.ts +25 -1
  232. package/dist/src/integrations/economics.d.ts.map +1 -1
  233. package/dist/src/integrations/economics.js +217 -38
  234. package/dist/src/integrations/economics.js.map +1 -1
  235. package/dist/src/integrations/edit-validator.d.ts +30 -0
  236. package/dist/src/integrations/edit-validator.d.ts.map +1 -0
  237. package/dist/src/integrations/edit-validator.js +85 -0
  238. package/dist/src/integrations/edit-validator.js.map +1 -0
  239. package/dist/src/integrations/file-cache.d.ts +7 -0
  240. package/dist/src/integrations/file-cache.d.ts.map +1 -1
  241. package/dist/src/integrations/file-cache.js +54 -0
  242. package/dist/src/integrations/file-cache.js.map +1 -1
  243. package/dist/src/integrations/health-check.d.ts.map +1 -1
  244. package/dist/src/integrations/health-check.js +3 -2
  245. package/dist/src/integrations/health-check.js.map +1 -1
  246. package/dist/src/integrations/hierarchical-config.d.ts +3 -0
  247. package/dist/src/integrations/hierarchical-config.d.ts.map +1 -1
  248. package/dist/src/integrations/hierarchical-config.js +3 -0
  249. package/dist/src/integrations/hierarchical-config.js.map +1 -1
  250. package/dist/src/integrations/hooks.d.ts +2 -0
  251. package/dist/src/integrations/hooks.d.ts.map +1 -1
  252. package/dist/src/integrations/hooks.js +99 -15
  253. package/dist/src/integrations/hooks.js.map +1 -1
  254. package/dist/src/integrations/index.d.ts +77 -66
  255. package/dist/src/integrations/index.d.ts.map +1 -1
  256. package/dist/src/integrations/index.js +83 -67
  257. package/dist/src/integrations/index.js.map +1 -1
  258. package/dist/src/integrations/logger.d.ts +104 -0
  259. package/dist/src/integrations/logger.d.ts.map +1 -0
  260. package/dist/src/integrations/logger.js +219 -0
  261. package/dist/src/integrations/logger.js.map +1 -0
  262. package/dist/src/integrations/lsp/lsp.d.ts +196 -0
  263. package/dist/src/integrations/lsp/lsp.d.ts.map +1 -0
  264. package/dist/src/integrations/lsp/lsp.js +583 -0
  265. package/dist/src/integrations/lsp/lsp.js.map +1 -0
  266. package/dist/src/integrations/lsp.d.ts.map +1 -1
  267. package/dist/src/integrations/lsp.js +5 -4
  268. package/dist/src/integrations/lsp.js.map +1 -1
  269. package/dist/src/integrations/mcp/mcp-client.d.ts +279 -0
  270. package/dist/src/integrations/mcp/mcp-client.d.ts.map +1 -0
  271. package/dist/src/integrations/mcp/mcp-client.js +755 -0
  272. package/dist/src/integrations/mcp/mcp-client.js.map +1 -0
  273. package/dist/src/integrations/mcp/mcp-custom-tools.d.ts +102 -0
  274. package/dist/src/integrations/mcp/mcp-custom-tools.d.ts.map +1 -0
  275. package/dist/src/integrations/mcp/mcp-custom-tools.js +232 -0
  276. package/dist/src/integrations/mcp/mcp-custom-tools.js.map +1 -0
  277. package/dist/src/integrations/mcp/mcp-tool-search.d.ts +77 -0
  278. package/dist/src/integrations/mcp/mcp-tool-search.d.ts.map +1 -0
  279. package/dist/src/integrations/mcp/mcp-tool-search.js +220 -0
  280. package/dist/src/integrations/mcp/mcp-tool-search.js.map +1 -0
  281. package/dist/src/integrations/mcp/mcp-tool-validator.d.ts +60 -0
  282. package/dist/src/integrations/mcp/mcp-tool-validator.d.ts.map +1 -0
  283. package/dist/src/integrations/mcp/mcp-tool-validator.js +141 -0
  284. package/dist/src/integrations/mcp/mcp-tool-validator.js.map +1 -0
  285. package/dist/src/integrations/mcp-client.d.ts.map +1 -1
  286. package/dist/src/integrations/mcp-client.js +8 -7
  287. package/dist/src/integrations/mcp-client.js.map +1 -1
  288. package/dist/src/integrations/observability.d.ts.map +1 -1
  289. package/dist/src/integrations/observability.js +5 -4
  290. package/dist/src/integrations/observability.js.map +1 -1
  291. package/dist/src/integrations/openrouter-pricing.d.ts.map +1 -1
  292. package/dist/src/integrations/openrouter-pricing.js +4 -3
  293. package/dist/src/integrations/openrouter-pricing.js.map +1 -1
  294. package/dist/src/integrations/persistence/codebase-repository.d.ts +45 -0
  295. package/dist/src/integrations/persistence/codebase-repository.d.ts.map +1 -0
  296. package/dist/src/integrations/persistence/codebase-repository.js +81 -0
  297. package/dist/src/integrations/persistence/codebase-repository.js.map +1 -0
  298. package/dist/src/integrations/persistence/goal-repository.d.ts +71 -0
  299. package/dist/src/integrations/persistence/goal-repository.d.ts.map +1 -0
  300. package/dist/src/integrations/persistence/goal-repository.js +184 -0
  301. package/dist/src/integrations/persistence/goal-repository.js.map +1 -0
  302. package/dist/src/integrations/persistence/history.d.ts +72 -0
  303. package/dist/src/integrations/persistence/history.d.ts.map +1 -0
  304. package/dist/src/integrations/persistence/history.js +165 -0
  305. package/dist/src/integrations/persistence/history.js.map +1 -0
  306. package/dist/src/integrations/persistence/persistence.d.ts +49 -0
  307. package/dist/src/integrations/persistence/persistence.d.ts.map +1 -0
  308. package/dist/src/integrations/persistence/persistence.js +197 -0
  309. package/dist/src/integrations/persistence/persistence.js.map +1 -0
  310. package/dist/src/integrations/persistence/session-repository.d.ts +212 -0
  311. package/dist/src/integrations/persistence/session-repository.d.ts.map +1 -0
  312. package/dist/src/integrations/persistence/session-repository.js +770 -0
  313. package/dist/src/integrations/persistence/session-repository.js.map +1 -0
  314. package/dist/src/integrations/persistence/session-store.d.ts +184 -0
  315. package/dist/src/integrations/persistence/session-store.d.ts.map +1 -0
  316. package/dist/src/integrations/persistence/session-store.js +346 -0
  317. package/dist/src/integrations/persistence/session-store.js.map +1 -0
  318. package/dist/src/integrations/persistence/sqlite-store.d.ts +453 -0
  319. package/dist/src/integrations/persistence/sqlite-store.d.ts.map +1 -0
  320. package/dist/src/integrations/persistence/sqlite-store.js +676 -0
  321. package/dist/src/integrations/persistence/sqlite-store.js.map +1 -0
  322. package/dist/src/integrations/persistence/worker-repository.d.ts +65 -0
  323. package/dist/src/integrations/persistence/worker-repository.d.ts.map +1 -0
  324. package/dist/src/integrations/persistence/worker-repository.js +183 -0
  325. package/dist/src/integrations/persistence/worker-repository.js.map +1 -0
  326. package/dist/src/integrations/persistence.d.ts.map +1 -1
  327. package/dist/src/integrations/persistence.js +5 -4
  328. package/dist/src/integrations/persistence.js.map +1 -1
  329. package/dist/src/integrations/planning.d.ts.map +1 -1
  330. package/dist/src/integrations/planning.js +5 -4
  331. package/dist/src/integrations/planning.js.map +1 -1
  332. package/dist/src/integrations/quality/auto-checkpoint.d.ts +98 -0
  333. package/dist/src/integrations/quality/auto-checkpoint.d.ts.map +1 -0
  334. package/dist/src/integrations/quality/auto-checkpoint.js +252 -0
  335. package/dist/src/integrations/quality/auto-checkpoint.js.map +1 -0
  336. package/dist/src/integrations/quality/dead-letter-queue.d.ts +233 -0
  337. package/dist/src/integrations/quality/dead-letter-queue.d.ts.map +1 -0
  338. package/dist/src/integrations/quality/dead-letter-queue.js +543 -0
  339. package/dist/src/integrations/quality/dead-letter-queue.js.map +1 -0
  340. package/dist/src/integrations/quality/health-check.d.ts +218 -0
  341. package/dist/src/integrations/quality/health-check.d.ts.map +1 -0
  342. package/dist/src/integrations/quality/health-check.js +415 -0
  343. package/dist/src/integrations/quality/health-check.js.map +1 -0
  344. package/dist/src/integrations/quality/learning-store.d.ts +291 -0
  345. package/dist/src/integrations/quality/learning-store.d.ts.map +1 -0
  346. package/dist/src/integrations/quality/learning-store.js +646 -0
  347. package/dist/src/integrations/quality/learning-store.js.map +1 -0
  348. package/dist/src/integrations/quality/self-improvement.d.ts +90 -0
  349. package/dist/src/integrations/quality/self-improvement.d.ts.map +1 -0
  350. package/dist/src/integrations/quality/self-improvement.js +229 -0
  351. package/dist/src/integrations/quality/self-improvement.js.map +1 -0
  352. package/dist/src/integrations/quality/tool-recommendation.d.ts +61 -0
  353. package/dist/src/integrations/quality/tool-recommendation.d.ts.map +1 -0
  354. package/dist/src/integrations/quality/tool-recommendation.js +268 -0
  355. package/dist/src/integrations/quality/tool-recommendation.js.map +1 -0
  356. package/dist/src/integrations/retry.d.ts +1 -0
  357. package/dist/src/integrations/retry.d.ts.map +1 -1
  358. package/dist/src/integrations/retry.js.map +1 -1
  359. package/dist/src/integrations/routing.d.ts.map +1 -1
  360. package/dist/src/integrations/routing.js +2 -1
  361. package/dist/src/integrations/routing.js.map +1 -1
  362. package/dist/src/integrations/safety/bash-policy.d.ts +33 -0
  363. package/dist/src/integrations/safety/bash-policy.d.ts.map +1 -0
  364. package/dist/src/integrations/safety/bash-policy.js +144 -0
  365. package/dist/src/integrations/safety/bash-policy.js.map +1 -0
  366. package/dist/src/integrations/safety/edit-validator.d.ts +30 -0
  367. package/dist/src/integrations/safety/edit-validator.d.ts.map +1 -0
  368. package/dist/src/integrations/safety/edit-validator.js +87 -0
  369. package/dist/src/integrations/safety/edit-validator.js.map +1 -0
  370. package/dist/src/integrations/safety/execution-policy.d.ts +189 -0
  371. package/dist/src/integrations/safety/execution-policy.d.ts.map +1 -0
  372. package/dist/src/integrations/safety/execution-policy.js +352 -0
  373. package/dist/src/integrations/safety/execution-policy.js.map +1 -0
  374. package/dist/src/integrations/safety/policy-engine.d.ts +55 -0
  375. package/dist/src/integrations/safety/policy-engine.d.ts.map +1 -0
  376. package/dist/src/integrations/safety/policy-engine.js +247 -0
  377. package/dist/src/integrations/safety/policy-engine.js.map +1 -0
  378. package/dist/src/integrations/safety/safety.d.ts +174 -0
  379. package/dist/src/integrations/safety/safety.d.ts.map +1 -0
  380. package/dist/src/integrations/safety/safety.js +470 -0
  381. package/dist/src/integrations/safety/safety.js.map +1 -0
  382. package/dist/src/integrations/safety/sandbox/basic.d.ts +81 -0
  383. package/dist/src/integrations/safety/sandbox/basic.d.ts.map +1 -0
  384. package/dist/src/integrations/safety/sandbox/basic.js +335 -0
  385. package/dist/src/integrations/safety/sandbox/basic.js.map +1 -0
  386. package/dist/src/integrations/safety/sandbox/docker.d.ts +94 -0
  387. package/dist/src/integrations/safety/sandbox/docker.d.ts.map +1 -0
  388. package/dist/src/integrations/safety/sandbox/docker.js +294 -0
  389. package/dist/src/integrations/safety/sandbox/docker.js.map +1 -0
  390. package/dist/src/integrations/safety/sandbox/index.d.ts +188 -0
  391. package/dist/src/integrations/safety/sandbox/index.d.ts.map +1 -0
  392. package/dist/src/integrations/safety/sandbox/index.js +386 -0
  393. package/dist/src/integrations/safety/sandbox/index.js.map +1 -0
  394. package/dist/src/integrations/safety/sandbox/landlock.d.ts +59 -0
  395. package/dist/src/integrations/safety/sandbox/landlock.d.ts.map +1 -0
  396. package/dist/src/integrations/safety/sandbox/landlock.js +329 -0
  397. package/dist/src/integrations/safety/sandbox/landlock.js.map +1 -0
  398. package/dist/src/integrations/safety/sandbox/seatbelt.d.ts +68 -0
  399. package/dist/src/integrations/safety/sandbox/seatbelt.d.ts.map +1 -0
  400. package/dist/src/integrations/safety/sandbox/seatbelt.js +298 -0
  401. package/dist/src/integrations/safety/sandbox/seatbelt.js.map +1 -0
  402. package/dist/src/integrations/safety/type-checker.d.ts +53 -0
  403. package/dist/src/integrations/safety/type-checker.d.ts.map +1 -0
  404. package/dist/src/integrations/safety/type-checker.js +142 -0
  405. package/dist/src/integrations/safety/type-checker.js.map +1 -0
  406. package/dist/src/integrations/safety.d.ts.map +1 -1
  407. package/dist/src/integrations/safety.js +13 -13
  408. package/dist/src/integrations/safety.js.map +1 -1
  409. package/dist/src/integrations/sandbox/docker.d.ts.map +1 -1
  410. package/dist/src/integrations/sandbox/docker.js +2 -1
  411. package/dist/src/integrations/sandbox/docker.js.map +1 -1
  412. package/dist/src/integrations/sandbox/index.d.ts.map +1 -1
  413. package/dist/src/integrations/sandbox/index.js +5 -4
  414. package/dist/src/integrations/sandbox/index.js.map +1 -1
  415. package/dist/src/integrations/session-store.d.ts +1 -0
  416. package/dist/src/integrations/session-store.d.ts.map +1 -1
  417. package/dist/src/integrations/session-store.js +1 -0
  418. package/dist/src/integrations/session-store.js.map +1 -1
  419. package/dist/src/integrations/shared-blackboard.d.ts +3 -0
  420. package/dist/src/integrations/shared-blackboard.d.ts.map +1 -1
  421. package/dist/src/integrations/shared-blackboard.js +47 -0
  422. package/dist/src/integrations/shared-blackboard.js.map +1 -1
  423. package/dist/src/integrations/skills/skill-executor.d.ts +113 -0
  424. package/dist/src/integrations/skills/skill-executor.d.ts.map +1 -0
  425. package/dist/src/integrations/skills/skill-executor.js +270 -0
  426. package/dist/src/integrations/skills/skill-executor.js.map +1 -0
  427. package/dist/src/integrations/skills/skills.d.ts +262 -0
  428. package/dist/src/integrations/skills/skills.d.ts.map +1 -0
  429. package/dist/src/integrations/skills/skills.js +602 -0
  430. package/dist/src/integrations/skills/skills.js.map +1 -0
  431. package/dist/src/integrations/smart-decomposer.d.ts +27 -0
  432. package/dist/src/integrations/smart-decomposer.d.ts.map +1 -1
  433. package/dist/src/integrations/smart-decomposer.js +414 -30
  434. package/dist/src/integrations/smart-decomposer.js.map +1 -1
  435. package/dist/src/integrations/sqlite-store.d.ts +2 -0
  436. package/dist/src/integrations/sqlite-store.d.ts.map +1 -1
  437. package/dist/src/integrations/sqlite-store.js +18 -6
  438. package/dist/src/integrations/sqlite-store.js.map +1 -1
  439. package/dist/src/integrations/streaming/pty-shell.d.ts +169 -0
  440. package/dist/src/integrations/streaming/pty-shell.d.ts.map +1 -0
  441. package/dist/src/integrations/streaming/pty-shell.js +367 -0
  442. package/dist/src/integrations/streaming/pty-shell.js.map +1 -0
  443. package/dist/src/integrations/streaming/streaming.d.ts +102 -0
  444. package/dist/src/integrations/streaming/streaming.d.ts.map +1 -0
  445. package/dist/src/integrations/streaming/streaming.js +362 -0
  446. package/dist/src/integrations/streaming/streaming.js.map +1 -0
  447. package/dist/src/integrations/swarm/failure-classifier.d.ts +11 -0
  448. package/dist/src/integrations/swarm/failure-classifier.d.ts.map +1 -0
  449. package/dist/src/integrations/swarm/failure-classifier.js +95 -0
  450. package/dist/src/integrations/swarm/failure-classifier.js.map +1 -0
  451. package/dist/src/integrations/swarm/index.d.ts +2 -1
  452. package/dist/src/integrations/swarm/index.d.ts.map +1 -1
  453. package/dist/src/integrations/swarm/index.js +2 -0
  454. package/dist/src/integrations/swarm/index.js.map +1 -1
  455. package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -1
  456. package/dist/src/integrations/swarm/model-selector.js +2 -1
  457. package/dist/src/integrations/swarm/model-selector.js.map +1 -1
  458. package/dist/src/integrations/swarm/swarm-budget.d.ts +1 -1
  459. package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
  460. package/dist/src/integrations/swarm/swarm-budget.js +1 -1
  461. package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
  462. package/dist/src/integrations/swarm/swarm-config-loader.d.ts +8 -0
  463. package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
  464. package/dist/src/integrations/swarm/swarm-config-loader.js +102 -0
  465. package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
  466. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts +74 -0
  467. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -1
  468. package/dist/src/integrations/swarm/swarm-event-bridge.js +37 -0
  469. package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -1
  470. package/dist/src/integrations/swarm/swarm-events.d.ts +4 -1
  471. package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
  472. package/dist/src/integrations/swarm/swarm-events.js +1 -1
  473. package/dist/src/integrations/swarm/swarm-events.js.map +1 -1
  474. package/dist/src/integrations/swarm/swarm-execution.d.ts +27 -0
  475. package/dist/src/integrations/swarm/swarm-execution.d.ts.map +1 -0
  476. package/dist/src/integrations/swarm/swarm-execution.js +1021 -0
  477. package/dist/src/integrations/swarm/swarm-execution.js.map +1 -0
  478. package/dist/src/integrations/swarm/swarm-helpers.d.ts +26 -0
  479. package/dist/src/integrations/swarm/swarm-helpers.d.ts.map +1 -0
  480. package/dist/src/integrations/swarm/swarm-helpers.js +95 -0
  481. package/dist/src/integrations/swarm/swarm-helpers.js.map +1 -0
  482. package/dist/src/integrations/swarm/swarm-lifecycle.d.ts +100 -0
  483. package/dist/src/integrations/swarm/swarm-lifecycle.d.ts.map +1 -0
  484. package/dist/src/integrations/swarm/swarm-lifecycle.js +922 -0
  485. package/dist/src/integrations/swarm/swarm-lifecycle.js.map +1 -0
  486. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +96 -192
  487. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
  488. package/dist/src/integrations/swarm/swarm-orchestrator.js +384 -2528
  489. package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
  490. package/dist/src/integrations/swarm/swarm-quality-gate.js +1 -1
  491. package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
  492. package/dist/src/integrations/swarm/swarm-recovery.d.ts +75 -0
  493. package/dist/src/integrations/swarm/swarm-recovery.d.ts.map +1 -0
  494. package/dist/src/integrations/swarm/swarm-recovery.js +550 -0
  495. package/dist/src/integrations/swarm/swarm-recovery.js.map +1 -0
  496. package/dist/src/integrations/swarm/swarm-state-store.d.ts +4 -1
  497. package/dist/src/integrations/swarm/swarm-state-store.d.ts.map +1 -1
  498. package/dist/src/integrations/swarm/swarm-state-store.js +14 -1
  499. package/dist/src/integrations/swarm/swarm-state-store.js.map +1 -1
  500. package/dist/src/integrations/swarm/task-queue.d.ts +11 -1
  501. package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
  502. package/dist/src/integrations/swarm/task-queue.js +64 -2
  503. package/dist/src/integrations/swarm/task-queue.js.map +1 -1
  504. package/dist/src/integrations/swarm/types.d.ts +57 -4
  505. package/dist/src/integrations/swarm/types.d.ts.map +1 -1
  506. package/dist/src/integrations/swarm/types.js +9 -0
  507. package/dist/src/integrations/swarm/types.js.map +1 -1
  508. package/dist/src/integrations/swarm/worker-pool.d.ts +13 -3
  509. package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
  510. package/dist/src/integrations/swarm/worker-pool.js +66 -13
  511. package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
  512. package/dist/src/integrations/task-manager.d.ts +33 -1
  513. package/dist/src/integrations/task-manager.d.ts.map +1 -1
  514. package/dist/src/integrations/task-manager.js +78 -4
  515. package/dist/src/integrations/task-manager.js.map +1 -1
  516. package/dist/src/integrations/tasks/dependency-analyzer.d.ts +34 -0
  517. package/dist/src/integrations/tasks/dependency-analyzer.d.ts.map +1 -0
  518. package/dist/src/integrations/tasks/dependency-analyzer.js +232 -0
  519. package/dist/src/integrations/tasks/dependency-analyzer.js.map +1 -0
  520. package/dist/src/integrations/tasks/interactive-planning.d.ts +322 -0
  521. package/dist/src/integrations/tasks/interactive-planning.d.ts.map +1 -0
  522. package/dist/src/integrations/tasks/interactive-planning.js +655 -0
  523. package/dist/src/integrations/tasks/interactive-planning.js.map +1 -0
  524. package/dist/src/integrations/tasks/pending-plan.d.ts +196 -0
  525. package/dist/src/integrations/tasks/pending-plan.d.ts.map +1 -0
  526. package/dist/src/integrations/tasks/pending-plan.js +431 -0
  527. package/dist/src/integrations/tasks/pending-plan.js.map +1 -0
  528. package/dist/src/integrations/tasks/planning.d.ts +115 -0
  529. package/dist/src/integrations/tasks/planning.d.ts.map +1 -0
  530. package/dist/src/integrations/tasks/planning.js +413 -0
  531. package/dist/src/integrations/tasks/planning.js.map +1 -0
  532. package/dist/src/integrations/tasks/smart-decomposer.d.ts +316 -0
  533. package/dist/src/integrations/tasks/smart-decomposer.d.ts.map +1 -0
  534. package/dist/src/integrations/tasks/smart-decomposer.js +661 -0
  535. package/dist/src/integrations/tasks/smart-decomposer.js.map +1 -0
  536. package/dist/src/integrations/tasks/task-manager.d.ts +164 -0
  537. package/dist/src/integrations/tasks/task-manager.d.ts.map +1 -0
  538. package/dist/src/integrations/tasks/task-manager.js +383 -0
  539. package/dist/src/integrations/tasks/task-manager.js.map +1 -0
  540. package/dist/src/integrations/tasks/task-splitter.d.ts +56 -0
  541. package/dist/src/integrations/tasks/task-splitter.d.ts.map +1 -0
  542. package/dist/src/integrations/tasks/task-splitter.js +537 -0
  543. package/dist/src/integrations/tasks/task-splitter.js.map +1 -0
  544. package/dist/src/integrations/tasks/verification-gate.d.ts +103 -0
  545. package/dist/src/integrations/tasks/verification-gate.d.ts.map +1 -0
  546. package/dist/src/integrations/tasks/verification-gate.js +193 -0
  547. package/dist/src/integrations/tasks/verification-gate.js.map +1 -0
  548. package/dist/src/integrations/tasks/work-log.d.ts +87 -0
  549. package/dist/src/integrations/tasks/work-log.d.ts.map +1 -0
  550. package/dist/src/integrations/tasks/work-log.js +275 -0
  551. package/dist/src/integrations/tasks/work-log.js.map +1 -0
  552. package/dist/src/integrations/utilities/capabilities.d.ts +160 -0
  553. package/dist/src/integrations/utilities/capabilities.d.ts.map +1 -0
  554. package/dist/src/integrations/utilities/capabilities.js +426 -0
  555. package/dist/src/integrations/utilities/capabilities.js.map +1 -0
  556. package/dist/src/integrations/utilities/diff-utils.d.ts +105 -0
  557. package/dist/src/integrations/utilities/diff-utils.d.ts.map +1 -0
  558. package/dist/src/integrations/utilities/diff-utils.js +497 -0
  559. package/dist/src/integrations/utilities/diff-utils.js.map +1 -0
  560. package/dist/src/integrations/utilities/environment-facts.d.ts +52 -0
  561. package/dist/src/integrations/utilities/environment-facts.d.ts.map +1 -0
  562. package/dist/src/integrations/utilities/environment-facts.js +84 -0
  563. package/dist/src/integrations/utilities/environment-facts.js.map +1 -0
  564. package/dist/src/integrations/utilities/file-change-tracker.d.ts +162 -0
  565. package/dist/src/integrations/utilities/file-change-tracker.d.ts.map +1 -0
  566. package/dist/src/integrations/utilities/file-change-tracker.js +538 -0
  567. package/dist/src/integrations/utilities/file-change-tracker.js.map +1 -0
  568. package/dist/src/integrations/utilities/graph-visualization.d.ts +72 -0
  569. package/dist/src/integrations/utilities/graph-visualization.d.ts.map +1 -0
  570. package/dist/src/integrations/utilities/graph-visualization.js +383 -0
  571. package/dist/src/integrations/utilities/graph-visualization.js.map +1 -0
  572. package/dist/src/integrations/utilities/hierarchical-config.d.ts +215 -0
  573. package/dist/src/integrations/utilities/hierarchical-config.d.ts.map +1 -0
  574. package/dist/src/integrations/utilities/hierarchical-config.js +504 -0
  575. package/dist/src/integrations/utilities/hierarchical-config.js.map +1 -0
  576. package/dist/src/integrations/utilities/hooks.d.ts +116 -0
  577. package/dist/src/integrations/utilities/hooks.d.ts.map +1 -0
  578. package/dist/src/integrations/utilities/hooks.js +410 -0
  579. package/dist/src/integrations/utilities/hooks.js.map +1 -0
  580. package/dist/src/integrations/utilities/ignore.d.ts +143 -0
  581. package/dist/src/integrations/utilities/ignore.d.ts.map +1 -0
  582. package/dist/src/integrations/utilities/ignore.js +417 -0
  583. package/dist/src/integrations/utilities/ignore.js.map +1 -0
  584. package/dist/src/integrations/utilities/image-renderer.d.ts +119 -0
  585. package/dist/src/integrations/utilities/image-renderer.d.ts.map +1 -0
  586. package/dist/src/integrations/utilities/image-renderer.js +306 -0
  587. package/dist/src/integrations/utilities/image-renderer.js.map +1 -0
  588. package/dist/src/integrations/utilities/logger.d.ts +104 -0
  589. package/dist/src/integrations/utilities/logger.d.ts.map +1 -0
  590. package/dist/src/integrations/utilities/logger.js +219 -0
  591. package/dist/src/integrations/utilities/logger.js.map +1 -0
  592. package/dist/src/integrations/utilities/memory.d.ts +116 -0
  593. package/dist/src/integrations/utilities/memory.d.ts.map +1 -0
  594. package/dist/src/integrations/utilities/memory.js +311 -0
  595. package/dist/src/integrations/utilities/memory.js.map +1 -0
  596. package/dist/src/integrations/utilities/observability.d.ts +162 -0
  597. package/dist/src/integrations/utilities/observability.d.ts.map +1 -0
  598. package/dist/src/integrations/utilities/observability.js +407 -0
  599. package/dist/src/integrations/utilities/observability.js.map +1 -0
  600. package/dist/src/integrations/utilities/openrouter-pricing.d.ts +67 -0
  601. package/dist/src/integrations/utilities/openrouter-pricing.d.ts.map +1 -0
  602. package/dist/src/integrations/utilities/openrouter-pricing.js +166 -0
  603. package/dist/src/integrations/utilities/openrouter-pricing.js.map +1 -0
  604. package/dist/src/integrations/utilities/react.d.ts +139 -0
  605. package/dist/src/integrations/utilities/react.d.ts.map +1 -0
  606. package/dist/src/integrations/utilities/react.js +273 -0
  607. package/dist/src/integrations/utilities/react.js.map +1 -0
  608. package/dist/src/integrations/utilities/retry.d.ts +132 -0
  609. package/dist/src/integrations/utilities/retry.d.ts.map +1 -0
  610. package/dist/src/integrations/utilities/retry.js +233 -0
  611. package/dist/src/integrations/utilities/retry.js.map +1 -0
  612. package/dist/src/integrations/utilities/routing.d.ts +118 -0
  613. package/dist/src/integrations/utilities/routing.d.ts.map +1 -0
  614. package/dist/src/integrations/utilities/routing.js +348 -0
  615. package/dist/src/integrations/utilities/routing.js.map +1 -0
  616. package/dist/src/integrations/utilities/rules.d.ts +131 -0
  617. package/dist/src/integrations/utilities/rules.d.ts.map +1 -0
  618. package/dist/src/integrations/utilities/rules.js +284 -0
  619. package/dist/src/integrations/utilities/rules.js.map +1 -0
  620. package/dist/src/integrations/utilities/sourcegraph.d.ts +169 -0
  621. package/dist/src/integrations/utilities/sourcegraph.d.ts.map +1 -0
  622. package/dist/src/integrations/utilities/sourcegraph.js +379 -0
  623. package/dist/src/integrations/utilities/sourcegraph.js.map +1 -0
  624. package/dist/src/integrations/utilities/thinking-strategy.d.ts +52 -0
  625. package/dist/src/integrations/utilities/thinking-strategy.d.ts.map +1 -0
  626. package/dist/src/integrations/utilities/thinking-strategy.js +129 -0
  627. package/dist/src/integrations/utilities/thinking-strategy.js.map +1 -0
  628. package/dist/src/integrations/utilities/thread-manager.d.ts +199 -0
  629. package/dist/src/integrations/utilities/thread-manager.d.ts.map +1 -0
  630. package/dist/src/integrations/utilities/thread-manager.js +357 -0
  631. package/dist/src/integrations/utilities/thread-manager.js.map +1 -0
  632. package/dist/src/integrations/utilities/token-estimate.d.ts +11 -0
  633. package/dist/src/integrations/utilities/token-estimate.d.ts.map +1 -0
  634. package/dist/src/integrations/utilities/token-estimate.js +14 -0
  635. package/dist/src/integrations/utilities/token-estimate.js.map +1 -0
  636. package/dist/src/main.js +92 -35
  637. package/dist/src/main.js.map +1 -1
  638. package/dist/src/modes/repl.d.ts.map +1 -1
  639. package/dist/src/modes/repl.js +60 -11
  640. package/dist/src/modes/repl.js.map +1 -1
  641. package/dist/src/modes/tui.d.ts.map +1 -1
  642. package/dist/src/modes/tui.js +57 -10
  643. package/dist/src/modes/tui.js.map +1 -1
  644. package/dist/src/modes.js +1 -1
  645. package/dist/src/modes.js.map +1 -1
  646. package/dist/src/observability/tracer.d.ts.map +1 -1
  647. package/dist/src/observability/tracer.js +2 -1
  648. package/dist/src/observability/tracer.js.map +1 -1
  649. package/dist/src/persistence/schema.d.ts +2 -0
  650. package/dist/src/persistence/schema.d.ts.map +1 -1
  651. package/dist/src/persistence/schema.js +42 -0
  652. package/dist/src/persistence/schema.js.map +1 -1
  653. package/dist/src/providers/adapters/anthropic.d.ts +6 -0
  654. package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
  655. package/dist/src/providers/adapters/anthropic.js +101 -16
  656. package/dist/src/providers/adapters/anthropic.js.map +1 -1
  657. package/dist/src/providers/adapters/azure.d.ts +74 -0
  658. package/dist/src/providers/adapters/azure.d.ts.map +1 -0
  659. package/dist/src/providers/adapters/azure.js +354 -0
  660. package/dist/src/providers/adapters/azure.js.map +1 -0
  661. package/dist/src/providers/adapters/mock.d.ts +16 -2
  662. package/dist/src/providers/adapters/mock.d.ts.map +1 -1
  663. package/dist/src/providers/adapters/mock.js +44 -3
  664. package/dist/src/providers/adapters/mock.js.map +1 -1
  665. package/dist/src/providers/adapters/openai.d.ts +6 -1
  666. package/dist/src/providers/adapters/openai.d.ts.map +1 -1
  667. package/dist/src/providers/adapters/openai.js +41 -9
  668. package/dist/src/providers/adapters/openai.js.map +1 -1
  669. package/dist/src/providers/adapters/openrouter.d.ts +6 -0
  670. package/dist/src/providers/adapters/openrouter.d.ts.map +1 -1
  671. package/dist/src/providers/adapters/openrouter.js +83 -13
  672. package/dist/src/providers/adapters/openrouter.js.map +1 -1
  673. package/dist/src/providers/circuit-breaker.d.ts +1 -0
  674. package/dist/src/providers/circuit-breaker.d.ts.map +1 -1
  675. package/dist/src/providers/circuit-breaker.js.map +1 -1
  676. package/dist/src/providers/provider.d.ts.map +1 -1
  677. package/dist/src/providers/provider.js +2 -1
  678. package/dist/src/providers/provider.js.map +1 -1
  679. package/dist/src/providers/resilient-provider.d.ts.map +1 -1
  680. package/dist/src/providers/resilient-provider.js +2 -1
  681. package/dist/src/providers/resilient-provider.js.map +1 -1
  682. package/dist/src/providers/types.d.ts +23 -2
  683. package/dist/src/providers/types.d.ts.map +1 -1
  684. package/dist/src/session-picker.d.ts +1 -1
  685. package/dist/src/session-picker.d.ts.map +1 -1
  686. package/dist/src/session-picker.js +40 -5
  687. package/dist/src/session-picker.js.map +1 -1
  688. package/dist/src/shared/budget-tracker.d.ts +65 -0
  689. package/dist/src/shared/budget-tracker.d.ts.map +1 -0
  690. package/dist/src/shared/budget-tracker.js +128 -0
  691. package/dist/src/shared/budget-tracker.js.map +1 -0
  692. package/dist/src/shared/context-engine.d.ts +64 -0
  693. package/dist/src/shared/context-engine.d.ts.map +1 -0
  694. package/dist/src/shared/context-engine.js +117 -0
  695. package/dist/src/shared/context-engine.js.map +1 -0
  696. package/dist/src/shared/index.d.ts +12 -0
  697. package/dist/src/shared/index.d.ts.map +1 -0
  698. package/dist/src/shared/index.js +12 -0
  699. package/dist/src/shared/index.js.map +1 -0
  700. package/dist/src/shared/persistence.d.ts +57 -0
  701. package/dist/src/shared/persistence.d.ts.map +1 -0
  702. package/dist/src/shared/persistence.js +168 -0
  703. package/dist/src/shared/persistence.js.map +1 -0
  704. package/dist/src/shared/shared-context-state.d.ts +89 -0
  705. package/dist/src/shared/shared-context-state.d.ts.map +1 -0
  706. package/dist/src/shared/shared-context-state.js +175 -0
  707. package/dist/src/shared/shared-context-state.js.map +1 -0
  708. package/dist/src/shared/shared-economics-state.d.ts +61 -0
  709. package/dist/src/shared/shared-economics-state.d.ts.map +1 -0
  710. package/dist/src/shared/shared-economics-state.js +100 -0
  711. package/dist/src/shared/shared-economics-state.js.map +1 -0
  712. package/dist/src/tools/agent.d.ts +1 -1
  713. package/dist/src/tools/agent.d.ts.map +1 -1
  714. package/dist/src/tools/bash.d.ts +3 -3
  715. package/dist/src/tools/bash.d.ts.map +1 -1
  716. package/dist/src/tools/bash.js +2 -1
  717. package/dist/src/tools/bash.js.map +1 -1
  718. package/dist/src/tools/file.d.ts +3 -3
  719. package/dist/src/tools/file.js +1 -1
  720. package/dist/src/tools/file.js.map +1 -1
  721. package/dist/src/tools/permission.d.ts.map +1 -1
  722. package/dist/src/tools/permission.js +7 -6
  723. package/dist/src/tools/permission.js.map +1 -1
  724. package/dist/src/tools/registry.d.ts +1 -1
  725. package/dist/src/tools/registry.d.ts.map +1 -1
  726. package/dist/src/tools/registry.js +1 -1
  727. package/dist/src/tools/registry.js.map +1 -1
  728. package/dist/src/tools/tasks.d.ts +1 -1
  729. package/dist/src/tools/tasks.d.ts.map +1 -1
  730. package/dist/src/tools/types.d.ts +1 -0
  731. package/dist/src/tools/types.d.ts.map +1 -1
  732. package/dist/src/tools/types.js.map +1 -1
  733. package/dist/src/tools/undo.d.ts +1 -1
  734. package/dist/src/tools/undo.d.ts.map +1 -1
  735. package/dist/src/tracing/cache-boundary-tracker.d.ts.map +1 -1
  736. package/dist/src/tracing/cache-boundary-tracker.js +2 -2
  737. package/dist/src/tracing/cache-boundary-tracker.js.map +1 -1
  738. package/dist/src/tracing/trace-collector.d.ts +147 -0
  739. package/dist/src/tracing/trace-collector.d.ts.map +1 -1
  740. package/dist/src/tracing/trace-collector.js +138 -7
  741. package/dist/src/tracing/trace-collector.js.map +1 -1
  742. package/dist/src/tracing/types.d.ts +112 -1
  743. package/dist/src/tracing/types.d.ts.map +1 -1
  744. package/dist/src/tracing/types.js.map +1 -1
  745. package/dist/src/tricks/failure-evidence.d.ts.map +1 -1
  746. package/dist/src/tricks/failure-evidence.js +2 -1
  747. package/dist/src/tricks/failure-evidence.js.map +1 -1
  748. package/dist/src/tricks/recitation.d.ts.map +1 -1
  749. package/dist/src/tricks/recitation.js +2 -1
  750. package/dist/src/tricks/recitation.js.map +1 -1
  751. package/dist/src/tricks/recursive-context.d.ts.map +1 -1
  752. package/dist/src/tricks/recursive-context.js +2 -2
  753. package/dist/src/tricks/recursive-context.js.map +1 -1
  754. package/dist/src/tricks/reversible-compaction.d.ts.map +1 -1
  755. package/dist/src/tricks/reversible-compaction.js +6 -2
  756. package/dist/src/tricks/reversible-compaction.js.map +1 -1
  757. package/dist/src/tui/app.d.ts +16 -3
  758. package/dist/src/tui/app.d.ts.map +1 -1
  759. package/dist/src/tui/app.js +211 -25
  760. package/dist/src/tui/app.js.map +1 -1
  761. package/dist/src/tui/components/CollapsibleDiffView.d.ts +1 -1
  762. package/dist/src/tui/components/CollapsibleDiffView.d.ts.map +1 -1
  763. package/dist/src/tui/components/DiagnosticsPanel.d.ts +24 -0
  764. package/dist/src/tui/components/DiagnosticsPanel.d.ts.map +1 -0
  765. package/dist/src/tui/components/DiagnosticsPanel.js +47 -0
  766. package/dist/src/tui/components/DiagnosticsPanel.js.map +1 -0
  767. package/dist/src/tui/components/DiffView.d.ts +1 -1
  768. package/dist/src/tui/components/DiffView.d.ts.map +1 -1
  769. package/dist/src/tui/components/ErrorBoundary.d.ts.map +1 -1
  770. package/dist/src/tui/components/ErrorBoundary.js +3 -2
  771. package/dist/src/tui/components/ErrorBoundary.js.map +1 -1
  772. package/dist/src/tui/components/TasksPanel.d.ts +1 -1
  773. package/dist/src/tui/components/TasksPanel.d.ts.map +1 -1
  774. package/dist/src/tui/event-display.d.ts.map +1 -1
  775. package/dist/src/tui/event-display.js +36 -62
  776. package/dist/src/tui/event-display.js.map +1 -1
  777. package/dist/src/tui/index.d.ts +4 -0
  778. package/dist/src/tui/index.d.ts.map +1 -1
  779. package/dist/src/tui/index.js +17 -0
  780. package/dist/src/tui/index.js.map +1 -1
  781. package/dist/src/tui/transparency-aggregator.d.ts +13 -0
  782. package/dist/src/tui/transparency-aggregator.d.ts.map +1 -1
  783. package/dist/src/tui/transparency-aggregator.js +21 -0
  784. package/dist/src/tui/transparency-aggregator.js.map +1 -1
  785. package/dist/src/types.d.ts +170 -3
  786. package/dist/src/types.d.ts.map +1 -1
  787. package/package.json +18 -3
@@ -0,0 +1,682 @@
1
+ /**
2
+ * Tool Executor Module (Phase 2.1)
3
+ *
4
+ * Extracted from ProductionAgent.executeToolCalls() and executeSingleToolCall().
5
+ * Handles batch grouping, parallel/sequential dispatch, plan mode interception,
6
+ * policy enforcement, safety validation, blackboard coordination, file cache,
7
+ * and actual tool execution.
8
+ */
9
+ import { createComponentLogger } from '../integrations/utilities/logger.js';
10
+ // =============================================================================
11
+ // TOOL BATCHING CONSTANTS & UTILITIES (moved from agent.ts to break cycle)
12
+ // =============================================================================
13
+ /**
14
+ * Tools that are safe to execute in parallel (read-only, no side effects).
15
+ * These tools don't modify state, so running them concurrently is safe.
16
+ */
17
+ export const PARALLELIZABLE_TOOLS = new Set([
18
+ 'read_file', 'glob', 'grep', 'list_files', 'search_files',
19
+ 'search_code', 'get_file_info',
20
+ 'task_create', 'task_update', 'task_get', 'task_list',
21
+ ]);
22
+ /**
23
+ * Tools that can run in parallel IF they target different files.
24
+ * write_file and edit_file on different paths are safe to parallelize.
25
+ */
26
+ export const CONDITIONALLY_PARALLEL_TOOLS = new Set([
27
+ 'write_file', 'edit_file',
28
+ ]);
29
+ /**
30
+ * Extract the target file path from a tool call's arguments.
31
+ * Returns null if no file path can be determined.
32
+ */
33
+ export function extractToolFilePath(toolCall) {
34
+ const args = toolCall;
35
+ for (const key of ['path', 'file_path', 'filename', 'file']) {
36
+ if (typeof args[key] === 'string')
37
+ return args[key];
38
+ }
39
+ if (args.args && typeof args.args === 'object') {
40
+ const nested = args.args;
41
+ for (const key of ['path', 'file_path', 'filename', 'file']) {
42
+ if (typeof nested[key] === 'string')
43
+ return nested[key];
44
+ }
45
+ }
46
+ if (args.input && typeof args.input === 'object') {
47
+ const input = args.input;
48
+ for (const key of ['path', 'file_path', 'filename', 'file']) {
49
+ if (typeof input[key] === 'string')
50
+ return input[key];
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Check if a conditionally-parallel tool call conflicts with any tool
57
+ * in the current accumulator (same file path).
58
+ */
59
+ function hasFileConflict(toolCall, accumulator) {
60
+ const path = extractToolFilePath(toolCall);
61
+ if (!path)
62
+ return true;
63
+ for (const existing of accumulator) {
64
+ const existingPath = extractToolFilePath(existing);
65
+ if (existingPath === path)
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ /**
71
+ * Groups tool calls into batches for parallel/sequential execution.
72
+ */
73
+ export function groupToolCallsIntoBatches(toolCalls, isParallelizable = (tc) => PARALLELIZABLE_TOOLS.has(tc.name), isConditionallyParallel = (tc) => CONDITIONALLY_PARALLEL_TOOLS.has(tc.name)) {
74
+ if (toolCalls.length === 0)
75
+ return [];
76
+ const batches = [];
77
+ let parallelAccum = [];
78
+ for (const toolCall of toolCalls) {
79
+ if (isParallelizable(toolCall)) {
80
+ parallelAccum.push(toolCall);
81
+ }
82
+ else if (isConditionallyParallel(toolCall)) {
83
+ if (!hasFileConflict(toolCall, parallelAccum)) {
84
+ parallelAccum.push(toolCall);
85
+ }
86
+ else {
87
+ if (parallelAccum.length > 0) {
88
+ batches.push(parallelAccum);
89
+ parallelAccum = [];
90
+ }
91
+ parallelAccum.push(toolCall);
92
+ }
93
+ }
94
+ else {
95
+ if (parallelAccum.length > 0) {
96
+ batches.push(parallelAccum);
97
+ parallelAccum = [];
98
+ }
99
+ batches.push([toolCall]);
100
+ }
101
+ }
102
+ if (parallelAccum.length > 0) {
103
+ batches.push(parallelAccum);
104
+ }
105
+ return batches;
106
+ }
107
+ const log = createComponentLogger('ToolExecutor');
108
+ /**
109
+ * Execute tool calls with safety checks and execution policy enforcement.
110
+ * Parallelizable read-only tools are batched and executed concurrently.
111
+ */
112
+ export async function executeToolCalls(toolCalls, ctx) {
113
+ const results = [];
114
+ // Circuit breaker state
115
+ const circuitBreakerThreshold = ctx.economics?.getBudget()?.tuning?.circuitBreakerFailureThreshold ?? 5;
116
+ let consecutiveFailures = 0;
117
+ let circuitBroken = false;
118
+ // Group consecutive parallelizable tool calls into batches
119
+ const batches = groupToolCallsIntoBatches(toolCalls);
120
+ // Execute batches: parallel batches use Promise.allSettled, sequential execute one-by-one
121
+ for (const batch of batches) {
122
+ // SAFEGUARD: Circuit breaker — skip remaining batches with stub results
123
+ if (circuitBroken) {
124
+ for (const tc of batch) {
125
+ results.push({
126
+ callId: tc.id,
127
+ result: `Error: Skipped — circuit breaker tripped after ${circuitBreakerThreshold} consecutive failures`,
128
+ error: `Circuit breaker tripped after ${circuitBreakerThreshold} consecutive failures`,
129
+ });
130
+ }
131
+ continue;
132
+ }
133
+ if (batch.length > 1 && PARALLELIZABLE_TOOLS.has(batch[0].name)) {
134
+ // Execute parallelizable batch concurrently
135
+ const batchResults = await Promise.allSettled(batch.map(tc => executeSingleToolCall(tc, ctx)));
136
+ let batchFailures = 0;
137
+ for (const result of batchResults) {
138
+ if (result.status === 'fulfilled') {
139
+ results.push(result.value);
140
+ if (result.value.error) {
141
+ batchFailures++;
142
+ }
143
+ }
144
+ else {
145
+ const error = result.reason instanceof Error ? result.reason.message : String(result.reason);
146
+ results.push({ callId: 'unknown', result: `Error: ${error}`, error });
147
+ batchFailures++;
148
+ }
149
+ }
150
+ // If entire parallel batch failed, add to consecutive failures; any success resets
151
+ if (batchFailures === batchResults.length) {
152
+ consecutiveFailures += batchFailures;
153
+ }
154
+ else {
155
+ consecutiveFailures = 0;
156
+ }
157
+ }
158
+ else {
159
+ // Execute sequentially
160
+ for (const tc of batch) {
161
+ if (circuitBroken) {
162
+ results.push({
163
+ callId: tc.id,
164
+ result: `Error: Skipped — circuit breaker tripped after ${circuitBreakerThreshold} consecutive failures`,
165
+ error: `Circuit breaker tripped after ${circuitBreakerThreshold} consecutive failures`,
166
+ });
167
+ continue;
168
+ }
169
+ const result = await executeSingleToolCall(tc, ctx);
170
+ results.push(result);
171
+ if (result.error) {
172
+ consecutiveFailures++;
173
+ }
174
+ else {
175
+ consecutiveFailures = 0;
176
+ }
177
+ if (consecutiveFailures >= circuitBreakerThreshold) {
178
+ circuitBroken = true;
179
+ const skipped = toolCalls.length - results.length;
180
+ log.warn('Circuit breaker tripped — stopping tool execution', {
181
+ totalInBatch: toolCalls.length,
182
+ failures: consecutiveFailures,
183
+ threshold: circuitBreakerThreshold,
184
+ skipped,
185
+ });
186
+ ctx.emit({
187
+ type: 'safeguard.circuit_breaker',
188
+ totalInBatch: toolCalls.length,
189
+ failures: consecutiveFailures,
190
+ threshold: circuitBreakerThreshold,
191
+ skipped,
192
+ });
193
+ }
194
+ }
195
+ }
196
+ // Check circuit breaker after parallel batches too
197
+ if (!circuitBroken && consecutiveFailures >= circuitBreakerThreshold) {
198
+ circuitBroken = true;
199
+ const skipped = toolCalls.length - results.length;
200
+ log.warn('Circuit breaker tripped — stopping tool execution', {
201
+ totalInBatch: toolCalls.length,
202
+ failures: consecutiveFailures,
203
+ threshold: circuitBreakerThreshold,
204
+ skipped,
205
+ });
206
+ ctx.emit({
207
+ type: 'safeguard.circuit_breaker',
208
+ totalInBatch: toolCalls.length,
209
+ failures: consecutiveFailures,
210
+ threshold: circuitBreakerThreshold,
211
+ skipped,
212
+ });
213
+ }
214
+ }
215
+ return results;
216
+ }
217
+ /**
218
+ * Execute a single tool call with all safety checks, tracing, and error handling.
219
+ */
220
+ export async function executeSingleToolCall(toolCall, ctx) {
221
+ const spanId = ctx.observability?.tracer?.startSpan(`tool.${toolCall.name}`);
222
+ const executionId = `exec-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
223
+ ctx.emit({ type: 'tool.start', tool: toolCall.name, args: toolCall.arguments });
224
+ const startTime = Date.now();
225
+ // Short-circuit if tool call arguments failed to parse
226
+ if (toolCall.parseError) {
227
+ const errorMsg = `Tool arguments could not be parsed: ${toolCall.parseError}. Please retry with complete, valid JSON.`;
228
+ ctx.emit({ type: 'tool.blocked', tool: toolCall.name, reason: errorMsg });
229
+ ctx.traceCollector?.record({
230
+ type: 'tool.end',
231
+ data: { executionId, status: 'error', error: new Error(errorMsg), durationMs: Date.now() - startTime },
232
+ });
233
+ ctx.observability?.tracer?.endSpan(spanId);
234
+ return { callId: toolCall.id, result: `Error: ${errorMsg}`, error: errorMsg };
235
+ }
236
+ // Record tool start for tracing
237
+ ctx.traceCollector?.record({
238
+ type: 'tool.start',
239
+ data: {
240
+ executionId,
241
+ toolName: toolCall.name,
242
+ arguments: toolCall.arguments,
243
+ },
244
+ });
245
+ try {
246
+ // =====================================================================
247
+ // PLAN MODE WRITE INTERCEPTION
248
+ // =====================================================================
249
+ if (ctx.modeManager.shouldInterceptTool(toolCall.name, toolCall.arguments)) {
250
+ const reason = extractChangeReasoning(toolCall, ctx.state.messages);
251
+ // Start a new plan if needed
252
+ if (!ctx.pendingPlanManager.hasPendingPlan()) {
253
+ const lastUserMsg = [...ctx.state.messages].reverse().find(m => m.role === 'user');
254
+ const task = typeof lastUserMsg?.content === 'string' ? lastUserMsg.content : 'Plan';
255
+ ctx.pendingPlanManager.startPlan(task);
256
+ }
257
+ // Queue the write operation
258
+ const change = ctx.pendingPlanManager.addProposedChange(toolCall.name, toolCall.arguments, reason, toolCall.id);
259
+ // Emit event for UI
260
+ ctx.emit({
261
+ type: 'plan.change.queued',
262
+ tool: toolCall.name,
263
+ changeId: change?.id,
264
+ summary: formatToolArgsForPlan(toolCall.name, toolCall.arguments),
265
+ });
266
+ // Return a message indicating the change was queued
267
+ const queueMessage = `[PLAN MODE] Change queued for approval:\n` +
268
+ `Tool: ${toolCall.name}\n` +
269
+ `${formatToolArgsForPlan(toolCall.name, toolCall.arguments)}\n` +
270
+ `Use /show-plan to see all pending changes, /approve to execute, /reject to discard.`;
271
+ ctx.observability?.tracer?.endSpan(spanId);
272
+ return { callId: toolCall.id, result: queueMessage };
273
+ }
274
+ // =====================================================================
275
+ // EXECUTION POLICY ENFORCEMENT (Lesson 23)
276
+ // =====================================================================
277
+ let policyApprovedByUser = false;
278
+ if (ctx.executionPolicy) {
279
+ const policyContext = {
280
+ messages: ctx.state.messages,
281
+ currentMessage: ctx.state.messages.find(m => m.role === 'user')?.content,
282
+ previousToolCalls: [],
283
+ };
284
+ const evaluation = ctx.executionPolicy.evaluate(toolCall, policyContext);
285
+ // Emit policy event
286
+ ctx.emit({
287
+ type: 'policy.evaluated',
288
+ tool: toolCall.name,
289
+ policy: evaluation.policy,
290
+ reason: evaluation.reason,
291
+ });
292
+ // Emit decision transparency event
293
+ ctx.emit({
294
+ type: 'decision.tool',
295
+ tool: toolCall.name,
296
+ decision: evaluation.policy === 'forbidden' ? 'blocked'
297
+ : evaluation.policy === 'prompt' ? 'prompted'
298
+ : 'allowed',
299
+ policyMatch: evaluation.reason,
300
+ });
301
+ // Enhanced tracing: Record policy decision
302
+ ctx.traceCollector?.record({
303
+ type: 'decision',
304
+ data: {
305
+ type: 'policy',
306
+ decision: `Tool ${toolCall.name}: ${evaluation.policy}`,
307
+ outcome: evaluation.policy === 'forbidden' ? 'blocked'
308
+ : evaluation.policy === 'prompt' ? 'deferred'
309
+ : 'allowed',
310
+ reasoning: evaluation.reason,
311
+ factors: [
312
+ { name: 'policy', value: evaluation.policy },
313
+ { name: 'requiresApproval', value: evaluation.requiresApproval ?? false },
314
+ ],
315
+ confidence: evaluation.intent?.confidence ?? 0.8,
316
+ },
317
+ });
318
+ // Handle forbidden policy - always block
319
+ if (evaluation.policy === 'forbidden') {
320
+ ctx.emit({
321
+ type: 'policy.tool.blocked',
322
+ tool: toolCall.name,
323
+ phase: 'enforced',
324
+ reason: `Forbidden by execution policy: ${evaluation.reason}`,
325
+ });
326
+ throw new Error(`Forbidden by policy: ${evaluation.reason}`);
327
+ }
328
+ // Handle prompt policy - requires approval
329
+ if (evaluation.policy === 'prompt' && evaluation.requiresApproval) {
330
+ const humanInLoop = ctx.safety?.humanInLoop;
331
+ if (humanInLoop) {
332
+ const approval = await withPausedDuration(ctx, () => humanInLoop.requestApproval(toolCall, `Policy requires approval: ${evaluation.reason}`));
333
+ if (!approval.approved) {
334
+ throw new Error(`Denied by user: ${approval.reason || 'No reason provided'}`);
335
+ }
336
+ policyApprovedByUser = true;
337
+ // Create a grant for future similar calls if approved
338
+ ctx.executionPolicy.createGrant({
339
+ toolName: toolCall.name,
340
+ grantedBy: 'user',
341
+ reason: 'Approved during execution',
342
+ maxUsages: 5,
343
+ });
344
+ }
345
+ else {
346
+ // No approval handler — auto-allow with warning (defense-in-depth)
347
+ ctx.emit({
348
+ type: 'policy.tool.auto-allowed',
349
+ tool: toolCall.name,
350
+ reason: `No approval handler — auto-allowing (policy: ${evaluation.reason})`,
351
+ });
352
+ policyApprovedByUser = true;
353
+ }
354
+ }
355
+ // Log intent classification if available
356
+ if (evaluation.intent) {
357
+ ctx.emit({
358
+ type: 'intent.classified',
359
+ tool: toolCall.name,
360
+ intent: evaluation.intent.type,
361
+ confidence: evaluation.intent.confidence,
362
+ });
363
+ }
364
+ }
365
+ // =====================================================================
366
+ // SAFETY VALIDATION (Lesson 20-21)
367
+ // =====================================================================
368
+ if (ctx.safety) {
369
+ const safety = ctx.safety;
370
+ const validation = await withPausedDuration(ctx, () => safety.validateAndApprove(toolCall, `Executing tool: ${toolCall.name}`, { skipHumanApproval: policyApprovedByUser }));
371
+ if (!validation.allowed) {
372
+ ctx.emit({
373
+ type: 'policy.tool.blocked',
374
+ tool: toolCall.name,
375
+ phase: 'enforced',
376
+ reason: validation.reason || 'Blocked by safety manager',
377
+ });
378
+ if (toolCall.name === 'bash') {
379
+ const args = toolCall.arguments;
380
+ ctx.emit({
381
+ type: 'policy.bash.blocked',
382
+ phase: 'enforced',
383
+ command: String(args.command || args.cmd || ''),
384
+ reason: validation.reason || 'Blocked by safety manager',
385
+ });
386
+ }
387
+ throw new Error(`Tool call blocked: ${validation.reason}`);
388
+ }
389
+ }
390
+ // Get tool definition (with lazy-loading support for MCP tools)
391
+ let tool = ctx.tools.get(toolCall.name);
392
+ const wasPreloaded = !!tool;
393
+ if (!tool && ctx.toolResolver) {
394
+ const resolved = ctx.toolResolver(toolCall.name);
395
+ if (resolved) {
396
+ ctx.addTool(resolved);
397
+ tool = resolved;
398
+ if (process.env.DEBUG)
399
+ log.debug('Auto-loaded MCP tool', { tool: toolCall.name });
400
+ ctx.observability?.logger?.info('Tool auto-loaded', { tool: toolCall.name });
401
+ }
402
+ }
403
+ if (!tool) {
404
+ throw new Error(`Unknown tool: ${toolCall.name}`);
405
+ }
406
+ if (process.env.DEBUG && toolCall.name.startsWith('mcp_') && wasPreloaded) {
407
+ log.debug('Using pre-loaded MCP tool', { tool: toolCall.name });
408
+ }
409
+ // =====================================================================
410
+ // BLACKBOARD FILE COORDINATION (Parallel Subagent Support)
411
+ // =====================================================================
412
+ if (ctx.blackboard && (toolCall.name === 'write_file' || toolCall.name === 'edit_file')) {
413
+ const args = toolCall.arguments;
414
+ const filePath = String(args.path || args.file_path || '');
415
+ if (filePath) {
416
+ const agentId = ctx.agentId;
417
+ const claimed = ctx.blackboard.claim(filePath, agentId, 'write', {
418
+ ttl: 60000,
419
+ intent: `${toolCall.name}: ${filePath}`,
420
+ });
421
+ if (!claimed) {
422
+ const existingClaim = ctx.blackboard.getClaim(filePath);
423
+ throw new Error(`File "${filePath}" is being edited by another agent (${existingClaim?.agentId || 'unknown'}). ` +
424
+ `Wait for the other agent to complete or choose a different file.`);
425
+ }
426
+ }
427
+ }
428
+ // FILE CACHE: Check cache for read_file operations before executing
429
+ if (ctx.fileCache && toolCall.name === 'read_file') {
430
+ const args = toolCall.arguments;
431
+ const readPath = String(args.path || '');
432
+ if (readPath) {
433
+ const cached = ctx.fileCache.get(readPath);
434
+ if (cached !== undefined) {
435
+ const lines = cached.split('\n').length;
436
+ const cacheResult = { success: true, output: cached, metadata: { lines, bytes: cached.length, cached: true } };
437
+ const duration = Date.now() - startTime;
438
+ ctx.traceCollector?.record({ type: 'tool.end', data: { executionId, status: 'success', result: cacheResult, durationMs: duration } });
439
+ ctx.observability?.metrics?.recordToolCall(toolCall.name, duration, true);
440
+ ctx.state.metrics.toolCalls++;
441
+ ctx.emit({ type: 'tool.complete', tool: toolCall.name, result: cacheResult });
442
+ ctx.observability?.tracer?.endSpan(spanId);
443
+ return {
444
+ callId: toolCall.id,
445
+ result: typeof cacheResult === 'string' ? cacheResult : JSON.stringify(cacheResult),
446
+ };
447
+ }
448
+ }
449
+ }
450
+ // Execute tool (with sandbox if available)
451
+ let result;
452
+ if (ctx.safety?.sandbox) {
453
+ const isSpawnAgent = toolCall.name === 'spawn_agent';
454
+ const isSpawnParallel = toolCall.name === 'spawn_agents_parallel';
455
+ const isSubagentTool = isSpawnAgent || isSpawnParallel;
456
+ const subagentConfig = ctx.config.subagent;
457
+ const hasSubagentConfig = subagentConfig !== false && subagentConfig !== undefined;
458
+ const subagentTimeout = hasSubagentConfig
459
+ ? subagentConfig.defaultTimeout ?? 600000
460
+ : 600000;
461
+ const toolTimeout = isSubagentTool ? subagentTimeout + 30000 : undefined;
462
+ result = await ctx.safety.sandbox.executeWithLimits(() => tool.execute(toolCall.arguments), toolTimeout);
463
+ }
464
+ else {
465
+ // No sandbox — apply a safety timeout to prevent indefinite hangs
466
+ const DEFAULT_TOOL_TIMEOUT = 300_000; // 5 minutes
467
+ result = await Promise.race([
468
+ tool.execute(toolCall.arguments),
469
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool '${toolCall.name}' timed out after ${DEFAULT_TOOL_TIMEOUT / 1000}s (no sandbox)`)), DEFAULT_TOOL_TIMEOUT)),
470
+ ]);
471
+ }
472
+ const duration = Date.now() - startTime;
473
+ // Record tool completion for tracing
474
+ ctx.traceCollector?.record({
475
+ type: 'tool.end',
476
+ data: {
477
+ executionId,
478
+ status: 'success',
479
+ result,
480
+ durationMs: duration,
481
+ },
482
+ });
483
+ // Record metrics
484
+ ctx.observability?.metrics?.recordToolCall(toolCall.name, duration, true);
485
+ ctx.state.metrics.toolCalls++;
486
+ ctx.emit({ type: 'tool.complete', tool: toolCall.name, result });
487
+ // FILE CACHE: Store read results and invalidate on writes
488
+ if (ctx.fileCache) {
489
+ const args = toolCall.arguments;
490
+ const filePath = String(args.path || args.file_path || '');
491
+ if (toolCall.name === 'read_file' && filePath) {
492
+ const resultObj = result;
493
+ if (resultObj?.success && typeof resultObj.output === 'string') {
494
+ ctx.fileCache.set(filePath, resultObj.output);
495
+ }
496
+ }
497
+ else if ((toolCall.name === 'write_file' || toolCall.name === 'edit_file' || toolCall.name === 'undo_file_change') && filePath) {
498
+ ctx.fileCache.invalidate(filePath);
499
+ }
500
+ }
501
+ // Emit tool insight with result summary
502
+ const summary = summarizeToolResult(toolCall.name, result);
503
+ ctx.emit({
504
+ type: 'insight.tool',
505
+ tool: toolCall.name,
506
+ summary,
507
+ durationMs: duration,
508
+ success: true,
509
+ });
510
+ // Release blackboard claim after successful file write
511
+ if (ctx.blackboard && (toolCall.name === 'write_file' || toolCall.name === 'edit_file')) {
512
+ const args = toolCall.arguments;
513
+ const filePath = String(args.path || args.file_path || '');
514
+ if (filePath) {
515
+ const agentId = ctx.agentId;
516
+ ctx.blackboard.release(filePath, agentId);
517
+ }
518
+ }
519
+ // Self-improvement: record success pattern
520
+ ctx.selfImprovement?.recordSuccess(toolCall.name, toolCall.arguments, typeof result === 'string' ? result.slice(0, 200) : JSON.stringify(result).slice(0, 200));
521
+ ctx.observability?.tracer?.endSpan(spanId);
522
+ return { callId: toolCall.id, result };
523
+ }
524
+ catch (err) {
525
+ const error = err instanceof Error ? err : new Error(String(err));
526
+ const duration = Date.now() - startTime;
527
+ // Record tool error for tracing
528
+ ctx.traceCollector?.record({
529
+ type: 'tool.end',
530
+ data: {
531
+ executionId,
532
+ status: error.message.includes('Blocked') || error.message.includes('Policy') ? 'blocked' : 'error',
533
+ error,
534
+ durationMs: duration,
535
+ },
536
+ });
537
+ ctx.observability?.metrics?.recordToolCall(toolCall.name, duration, false);
538
+ ctx.observability?.tracer?.recordError(error);
539
+ ctx.observability?.tracer?.endSpan(spanId);
540
+ // FAILURE EVIDENCE RECORDING (Trick S)
541
+ ctx.contextEngineering?.recordFailure({
542
+ action: toolCall.name,
543
+ args: toolCall.arguments,
544
+ error,
545
+ intent: `Execute tool ${toolCall.name}`,
546
+ });
547
+ // FILE CACHE INVALIDATION ON FAILURE — ensure stale cache doesn't cause repeated failures
548
+ if (ctx.fileCache && ['write_file', 'edit_file'].includes(toolCall.name)) {
549
+ const args = toolCall.arguments;
550
+ const filePath = String(args.path || args.file_path || '');
551
+ if (filePath) {
552
+ ctx.fileCache.invalidate(filePath);
553
+ }
554
+ }
555
+ // Self-improvement: enhance error message with diagnosis
556
+ if (ctx.selfImprovement) {
557
+ const enhanced = ctx.selfImprovement.enhanceErrorMessage(toolCall.name, error.message, toolCall.arguments);
558
+ ctx.emit({ type: 'tool.blocked', tool: toolCall.name, reason: enhanced });
559
+ return { callId: toolCall.id, result: `Error: ${enhanced}`, error: enhanced };
560
+ }
561
+ ctx.emit({ type: 'tool.blocked', tool: toolCall.name, reason: error.message });
562
+ return { callId: toolCall.id, result: `Error: ${error.message}`, error: error.message };
563
+ }
564
+ }
565
+ // =============================================================================
566
+ // HELPER FUNCTIONS (extracted from ProductionAgent private methods)
567
+ // =============================================================================
568
+ /**
569
+ * Execute an async callback while excluding wall-clock wait time from duration budgeting.
570
+ */
571
+ async function withPausedDuration(ctx, fn) {
572
+ ctx.economics?.pauseDuration();
573
+ try {
574
+ return await fn();
575
+ }
576
+ finally {
577
+ ctx.economics?.resumeDuration();
578
+ }
579
+ }
580
+ /**
581
+ * Create a brief summary of a tool result for insight display.
582
+ */
583
+ export function summarizeToolResult(toolName, result) {
584
+ if (result === null || result === undefined) {
585
+ return 'No output';
586
+ }
587
+ const resultStr = typeof result === 'string' ? result : JSON.stringify(result);
588
+ if (toolName === 'list_files' || toolName === 'glob') {
589
+ const lines = resultStr.split('\n').filter(l => l.trim());
590
+ return `Found ${lines.length} file${lines.length !== 1 ? 's' : ''}`;
591
+ }
592
+ if (toolName === 'bash' || toolName === 'execute_command') {
593
+ const lines = resultStr.split('\n').filter(l => l.trim());
594
+ if (resultStr.includes('exit code: 0') || !resultStr.includes('exit code:')) {
595
+ return lines.length > 1 ? `Success (${lines.length} lines)` : 'Success';
596
+ }
597
+ return `Failed - ${lines[0]?.slice(0, 50) || 'see output'}`;
598
+ }
599
+ if (toolName === 'read_file') {
600
+ const lines = resultStr.split('\n').length;
601
+ return `Read ${lines} line${lines !== 1 ? 's' : ''}`;
602
+ }
603
+ if (toolName === 'write_file' || toolName === 'edit_file') {
604
+ return 'File updated';
605
+ }
606
+ if (toolName === 'search' || toolName === 'grep') {
607
+ const matches = (resultStr.match(/\n/g) || []).length;
608
+ return `${matches} match${matches !== 1 ? 'es' : ''}`;
609
+ }
610
+ if (resultStr.length <= 50) {
611
+ return resultStr;
612
+ }
613
+ return `${resultStr.slice(0, 47)}...`;
614
+ }
615
+ /**
616
+ * Format tool arguments for plan display.
617
+ */
618
+ export function formatToolArgsForPlan(toolName, args) {
619
+ if (toolName === 'write_file') {
620
+ const path = args.path || args.file_path;
621
+ const content = String(args.content || '');
622
+ const preview = content.slice(0, 100).replace(/\n/g, '\\n');
623
+ return `File: ${path}\nContent preview: ${preview}${content.length > 100 ? '...' : ''}`;
624
+ }
625
+ if (toolName === 'edit_file') {
626
+ const path = args.path || args.file_path;
627
+ return `File: ${path}\nOld: ${String(args.old_string || args.search || '').slice(0, 50)}...\nNew: ${String(args.new_string || args.replace || '').slice(0, 50)}...`;
628
+ }
629
+ if (toolName === 'bash') {
630
+ return `Command: ${String(args.command || '').slice(0, 100)}`;
631
+ }
632
+ if (toolName === 'delete_file') {
633
+ return `Delete: ${args.path || args.file_path}`;
634
+ }
635
+ if (toolName === 'spawn_agent' || toolName === 'researcher') {
636
+ const task = String(args.task || args.prompt || args.goal || '');
637
+ const model = args.model ? ` (${args.model})` : '';
638
+ const firstLine = task.split('\n')[0].slice(0, 100);
639
+ return `${firstLine}${task.length > 100 ? '...' : ''}${model}`;
640
+ }
641
+ return `Args: ${JSON.stringify(args).slice(0, 100)}...`;
642
+ }
643
+ /**
644
+ * Extract contextual reasoning for a proposed change in plan mode.
645
+ */
646
+ export function extractChangeReasoning(toolCall, messages) {
647
+ const assistantMsgs = messages
648
+ .filter(m => m.role === 'assistant' && typeof m.content === 'string')
649
+ .slice(-3)
650
+ .reverse();
651
+ if (assistantMsgs.length === 0) {
652
+ return `Proposed change: ${toolCall.name}`;
653
+ }
654
+ const lastMsg = assistantMsgs[0];
655
+ const content = lastMsg.content;
656
+ if (toolCall.name === 'spawn_agent') {
657
+ const args = toolCall.arguments;
658
+ const task = String(args.task || args.prompt || args.goal || '');
659
+ if (task.length > 0) {
660
+ const firstPara = task.split(/\n\n/)[0];
661
+ return firstPara.length > 500 ? firstPara.slice(0, 500) + '...' : firstPara;
662
+ }
663
+ }
664
+ if (['write_file', 'edit_file'].includes(toolCall.name)) {
665
+ const args = toolCall.arguments;
666
+ const path = String(args.path || args.file_path || '');
667
+ if (path && content.toLowerCase().includes(path.toLowerCase().split('/').pop() || '')) {
668
+ const sentences = content.split(/[.!?\n]+/).filter(s => s.toLowerCase().includes(path.toLowerCase().split('/').pop() || ''));
669
+ if (sentences.length > 0) {
670
+ const relevant = sentences.slice(0, 2).join('. ').trim();
671
+ return relevant.length > 500 ? relevant.slice(0, 500) + '...' : relevant;
672
+ }
673
+ }
674
+ }
675
+ const paragraphs = content.split(/\n\n+/).filter(p => p.trim().length > 20);
676
+ if (paragraphs.length > 0) {
677
+ const firstPara = paragraphs[0].trim();
678
+ return firstPara.length > 500 ? firstPara.slice(0, 500) + '...' : firstPara;
679
+ }
680
+ return content.length > 500 ? content.slice(0, 500) + '...' : content;
681
+ }
682
+ //# sourceMappingURL=tool-executor.js.map