attocode 0.2.4 → 0.2.6

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 (813) hide show
  1. package/CHANGELOG.md +88 -1
  2. package/dist/src/adapters.d.ts +39 -1
  3. package/dist/src/adapters.d.ts.map +1 -1
  4. package/dist/src/adapters.js +201 -16
  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 +676 -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 +176 -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 +264 -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-tools/lsp-file-tools.js +17 -13
  29. package/dist/src/agent-tools/lsp-file-tools.js.map +1 -1
  30. package/dist/src/agent.d.ts +26 -117
  31. package/dist/src/agent.d.ts.map +1 -1
  32. package/dist/src/agent.js +239 -1249
  33. package/dist/src/agent.js.map +1 -1
  34. package/dist/src/analysis/feedback-loop.d.ts.map +1 -1
  35. package/dist/src/analysis/feedback-loop.js +13 -9
  36. package/dist/src/analysis/feedback-loop.js.map +1 -1
  37. package/dist/src/analysis/index.d.ts +1 -1
  38. package/dist/src/analysis/index.d.ts.map +1 -1
  39. package/dist/src/analysis/index.js +1 -1
  40. package/dist/src/analysis/index.js.map +1 -1
  41. package/dist/src/analysis/prompt-templates.d.ts.map +1 -1
  42. package/dist/src/analysis/prompt-templates.js.map +1 -1
  43. package/dist/src/analysis/trace-summary.d.ts.map +1 -1
  44. package/dist/src/analysis/trace-summary.js +25 -9
  45. package/dist/src/analysis/trace-summary.js.map +1 -1
  46. package/dist/src/cli.d.ts.map +1 -1
  47. package/dist/src/cli.js +4 -2
  48. package/dist/src/cli.js.map +1 -1
  49. package/dist/src/commands/agents-commands.d.ts.map +1 -1
  50. package/dist/src/commands/agents-commands.js +3 -3
  51. package/dist/src/commands/agents-commands.js.map +1 -1
  52. package/dist/src/commands/handler.d.ts.map +1 -1
  53. package/dist/src/commands/handler.js +68 -44
  54. package/dist/src/commands/handler.js.map +1 -1
  55. package/dist/src/commands/init-commands.d.ts.map +1 -1
  56. package/dist/src/commands/init-commands.js +8 -10
  57. package/dist/src/commands/init-commands.js.map +1 -1
  58. package/dist/src/commands/init.js +17 -17
  59. package/dist/src/commands/init.js.map +1 -1
  60. package/dist/src/commands/skills-commands.d.ts.map +1 -1
  61. package/dist/src/commands/skills-commands.js +10 -7
  62. package/dist/src/commands/skills-commands.js.map +1 -1
  63. package/dist/src/commands/types.d.ts.map +1 -1
  64. package/dist/src/config/config-manager.d.ts.map +1 -1
  65. package/dist/src/config/config-manager.js +4 -1
  66. package/dist/src/config/config-manager.js.map +1 -1
  67. package/dist/src/config/index.d.ts +1 -1
  68. package/dist/src/config/index.d.ts.map +1 -1
  69. package/dist/src/config/schema.d.ts +6 -6
  70. package/dist/src/config/schema.d.ts.map +1 -1
  71. package/dist/src/config/schema.js +6 -2
  72. package/dist/src/config/schema.js.map +1 -1
  73. package/dist/src/core/agent-state-machine.d.ts.map +1 -1
  74. package/dist/src/core/agent-state-machine.js +5 -2
  75. package/dist/src/core/agent-state-machine.js.map +1 -1
  76. package/dist/src/core/completion-analyzer.d.ts.map +1 -1
  77. package/dist/src/core/completion-analyzer.js +2 -2
  78. package/dist/src/core/completion-analyzer.js.map +1 -1
  79. package/dist/src/core/execution-loop.d.ts +172 -1
  80. package/dist/src/core/execution-loop.d.ts.map +1 -1
  81. package/dist/src/core/execution-loop.js +597 -360
  82. package/dist/src/core/execution-loop.js.map +1 -1
  83. package/dist/src/core/index.d.ts +2 -2
  84. package/dist/src/core/index.d.ts.map +1 -1
  85. package/dist/src/core/index.js +1 -1
  86. package/dist/src/core/index.js.map +1 -1
  87. package/dist/src/core/queues/event-queue.d.ts.map +1 -1
  88. package/dist/src/core/queues/event-queue.js.map +1 -1
  89. package/dist/src/core/response-handler.d.ts.map +1 -1
  90. package/dist/src/core/response-handler.js +20 -10
  91. package/dist/src/core/response-handler.js.map +1 -1
  92. package/dist/src/core/subagent-spawner.d.ts.map +1 -1
  93. package/dist/src/core/subagent-spawner.js +98 -59
  94. package/dist/src/core/subagent-spawner.js.map +1 -1
  95. package/dist/src/core/tool-executor.d.ts.map +1 -1
  96. package/dist/src/core/tool-executor.js +63 -27
  97. package/dist/src/core/tool-executor.js.map +1 -1
  98. package/dist/src/core/types.d.ts +1 -0
  99. package/dist/src/core/types.d.ts.map +1 -1
  100. package/dist/src/core/types.js.map +1 -1
  101. package/dist/src/costs/model-registry.js +6 -6
  102. package/dist/src/costs/model-registry.js.map +1 -1
  103. package/dist/src/defaults.d.ts.map +1 -1
  104. package/dist/src/defaults.js +67 -20
  105. package/dist/src/defaults.js.map +1 -1
  106. package/dist/src/errors/index.d.ts.map +1 -1
  107. package/dist/src/errors/index.js +6 -8
  108. package/dist/src/errors/index.js.map +1 -1
  109. package/dist/src/first-run.d.ts.map +1 -1
  110. package/dist/src/first-run.js +11 -11
  111. package/dist/src/first-run.js.map +1 -1
  112. package/dist/src/integrations/agents/agent-registry.d.ts +262 -0
  113. package/dist/src/integrations/agents/agent-registry.d.ts.map +1 -0
  114. package/dist/src/integrations/agents/agent-registry.js +686 -0
  115. package/dist/src/integrations/agents/agent-registry.js.map +1 -0
  116. package/dist/src/integrations/agents/async-subagent.d.ts +135 -0
  117. package/dist/src/integrations/agents/async-subagent.d.ts.map +1 -0
  118. package/dist/src/integrations/agents/async-subagent.js +211 -0
  119. package/dist/src/integrations/agents/async-subagent.js.map +1 -0
  120. package/dist/src/integrations/agents/complexity-classifier.d.ts +86 -0
  121. package/dist/src/integrations/agents/complexity-classifier.d.ts.map +1 -0
  122. package/dist/src/integrations/agents/complexity-classifier.js +264 -0
  123. package/dist/src/integrations/agents/complexity-classifier.js.map +1 -0
  124. package/dist/src/integrations/agents/delegation-protocol.d.ts +86 -0
  125. package/dist/src/integrations/agents/delegation-protocol.d.ts.map +1 -0
  126. package/dist/src/integrations/agents/delegation-protocol.js +127 -0
  127. package/dist/src/integrations/agents/delegation-protocol.js.map +1 -0
  128. package/dist/src/integrations/agents/multi-agent.d.ts +150 -0
  129. package/dist/src/integrations/agents/multi-agent.d.ts.map +1 -0
  130. package/dist/src/integrations/agents/multi-agent.js +302 -0
  131. package/dist/src/integrations/agents/multi-agent.js.map +1 -0
  132. package/dist/src/integrations/agents/result-synthesizer.d.ts +389 -0
  133. package/dist/src/integrations/agents/result-synthesizer.d.ts.map +1 -0
  134. package/dist/src/integrations/agents/result-synthesizer.js +953 -0
  135. package/dist/src/integrations/agents/result-synthesizer.js.map +1 -0
  136. package/dist/src/integrations/agents/shared-blackboard.d.ts +406 -0
  137. package/dist/src/integrations/agents/shared-blackboard.d.ts.map +1 -0
  138. package/dist/src/integrations/agents/shared-blackboard.js +757 -0
  139. package/dist/src/integrations/agents/shared-blackboard.js.map +1 -0
  140. package/dist/src/integrations/agents/subagent-output-store.d.ts +91 -0
  141. package/dist/src/integrations/agents/subagent-output-store.d.ts.map +1 -0
  142. package/dist/src/integrations/agents/subagent-output-store.js +256 -0
  143. package/dist/src/integrations/agents/subagent-output-store.js.map +1 -0
  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 +201 -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 +534 -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 +149 -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 +1039 -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 +304 -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 +265 -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 +362 -0
  175. package/dist/src/integrations/budget/resources.js.map +1 -0
  176. package/dist/src/integrations/context/auto-compaction.d.ts +210 -0
  177. package/dist/src/integrations/context/auto-compaction.d.ts.map +1 -0
  178. package/dist/src/integrations/context/auto-compaction.js +485 -0
  179. package/dist/src/integrations/context/auto-compaction.js.map +1 -0
  180. package/dist/src/integrations/context/code-analyzer.d.ts +71 -0
  181. package/dist/src/integrations/context/code-analyzer.d.ts.map +1 -0
  182. package/dist/src/integrations/context/code-analyzer.js +445 -0
  183. package/dist/src/integrations/context/code-analyzer.js.map +1 -0
  184. package/dist/src/integrations/context/code-selector.d.ts +78 -0
  185. package/dist/src/integrations/context/code-selector.d.ts.map +1 -0
  186. package/dist/src/integrations/context/code-selector.js +668 -0
  187. package/dist/src/integrations/context/code-selector.js.map +1 -0
  188. package/dist/src/integrations/context/codebase-ast.d.ts +138 -0
  189. package/dist/src/integrations/context/codebase-ast.d.ts.map +1 -0
  190. package/dist/src/integrations/context/codebase-ast.js +881 -0
  191. package/dist/src/integrations/context/codebase-ast.js.map +1 -0
  192. package/dist/src/integrations/context/codebase-context.d.ts +473 -0
  193. package/dist/src/integrations/context/codebase-context.d.ts.map +1 -0
  194. package/dist/src/integrations/context/codebase-context.js +694 -0
  195. package/dist/src/integrations/context/codebase-context.js.map +1 -0
  196. package/dist/src/integrations/context/compaction.d.ts +191 -0
  197. package/dist/src/integrations/context/compaction.d.ts.map +1 -0
  198. package/dist/src/integrations/context/compaction.js +391 -0
  199. package/dist/src/integrations/context/compaction.js.map +1 -0
  200. package/dist/src/integrations/context/context-engineering.d.ts +274 -0
  201. package/dist/src/integrations/context/context-engineering.d.ts.map +1 -0
  202. package/dist/src/integrations/context/context-engineering.js +437 -0
  203. package/dist/src/integrations/context/context-engineering.js.map +1 -0
  204. package/dist/src/integrations/context/file-cache.d.ts +97 -0
  205. package/dist/src/integrations/context/file-cache.d.ts.map +1 -0
  206. package/dist/src/integrations/context/file-cache.js +218 -0
  207. package/dist/src/integrations/context/file-cache.js.map +1 -0
  208. package/dist/src/integrations/context/semantic-cache.d.ts +178 -0
  209. package/dist/src/integrations/context/semantic-cache.d.ts.map +1 -0
  210. package/dist/src/integrations/context/semantic-cache.js +377 -0
  211. package/dist/src/integrations/context/semantic-cache.js.map +1 -0
  212. package/dist/src/integrations/index.d.ts +72 -68
  213. package/dist/src/integrations/index.d.ts.map +1 -1
  214. package/dist/src/integrations/index.js +76 -68
  215. package/dist/src/integrations/index.js.map +1 -1
  216. package/dist/src/integrations/lsp/lsp.d.ts +196 -0
  217. package/dist/src/integrations/lsp/lsp.d.ts.map +1 -0
  218. package/dist/src/integrations/lsp/lsp.js +583 -0
  219. package/dist/src/integrations/lsp/lsp.js.map +1 -0
  220. package/dist/src/integrations/mcp/mcp-client.d.ts +279 -0
  221. package/dist/src/integrations/mcp/mcp-client.d.ts.map +1 -0
  222. package/dist/src/integrations/mcp/mcp-client.js +776 -0
  223. package/dist/src/integrations/mcp/mcp-client.js.map +1 -0
  224. package/dist/src/integrations/mcp/mcp-custom-tools.d.ts +102 -0
  225. package/dist/src/integrations/mcp/mcp-custom-tools.d.ts.map +1 -0
  226. package/dist/src/integrations/mcp/mcp-custom-tools.js +232 -0
  227. package/dist/src/integrations/mcp/mcp-custom-tools.js.map +1 -0
  228. package/dist/src/integrations/mcp/mcp-tool-search.d.ts +77 -0
  229. package/dist/src/integrations/mcp/mcp-tool-search.d.ts.map +1 -0
  230. package/dist/src/integrations/mcp/mcp-tool-search.js +220 -0
  231. package/dist/src/integrations/mcp/mcp-tool-search.js.map +1 -0
  232. package/dist/src/integrations/mcp/mcp-tool-validator.d.ts +60 -0
  233. package/dist/src/integrations/mcp/mcp-tool-validator.d.ts.map +1 -0
  234. package/dist/src/integrations/mcp/mcp-tool-validator.js +139 -0
  235. package/dist/src/integrations/mcp/mcp-tool-validator.js.map +1 -0
  236. package/dist/src/integrations/persistence/codebase-repository.d.ts +45 -0
  237. package/dist/src/integrations/persistence/codebase-repository.d.ts.map +1 -0
  238. package/dist/src/integrations/persistence/codebase-repository.js +85 -0
  239. package/dist/src/integrations/persistence/codebase-repository.js.map +1 -0
  240. package/dist/src/integrations/persistence/goal-repository.d.ts +71 -0
  241. package/dist/src/integrations/persistence/goal-repository.d.ts.map +1 -0
  242. package/dist/src/integrations/persistence/goal-repository.js +187 -0
  243. package/dist/src/integrations/persistence/goal-repository.js.map +1 -0
  244. package/dist/src/integrations/persistence/history.d.ts +72 -0
  245. package/dist/src/integrations/persistence/history.d.ts.map +1 -0
  246. package/dist/src/integrations/persistence/history.js +163 -0
  247. package/dist/src/integrations/persistence/history.js.map +1 -0
  248. package/dist/src/integrations/persistence/persistence.d.ts +49 -0
  249. package/dist/src/integrations/persistence/persistence.d.ts.map +1 -0
  250. package/dist/src/integrations/persistence/persistence.js +200 -0
  251. package/dist/src/integrations/persistence/persistence.js.map +1 -0
  252. package/dist/src/integrations/persistence/session-repository.d.ts +212 -0
  253. package/dist/src/integrations/persistence/session-repository.d.ts.map +1 -0
  254. package/dist/src/integrations/persistence/session-repository.js +781 -0
  255. package/dist/src/integrations/persistence/session-repository.js.map +1 -0
  256. package/dist/src/integrations/persistence/session-store.d.ts +184 -0
  257. package/dist/src/integrations/persistence/session-store.d.ts.map +1 -0
  258. package/dist/src/integrations/persistence/session-store.js +346 -0
  259. package/dist/src/integrations/persistence/session-store.js.map +1 -0
  260. package/dist/src/integrations/persistence/sqlite-store.d.ts +453 -0
  261. package/dist/src/integrations/persistence/sqlite-store.d.ts.map +1 -0
  262. package/dist/src/integrations/persistence/sqlite-store.js +680 -0
  263. package/dist/src/integrations/persistence/sqlite-store.js.map +1 -0
  264. package/dist/src/integrations/persistence/worker-repository.d.ts +65 -0
  265. package/dist/src/integrations/persistence/worker-repository.d.ts.map +1 -0
  266. package/dist/src/integrations/persistence/worker-repository.js +181 -0
  267. package/dist/src/integrations/persistence/worker-repository.js.map +1 -0
  268. package/dist/src/integrations/quality/auto-checkpoint.d.ts +98 -0
  269. package/dist/src/integrations/quality/auto-checkpoint.d.ts.map +1 -0
  270. package/dist/src/integrations/quality/auto-checkpoint.js +250 -0
  271. package/dist/src/integrations/quality/auto-checkpoint.js.map +1 -0
  272. package/dist/src/integrations/quality/dead-letter-queue.d.ts +233 -0
  273. package/dist/src/integrations/quality/dead-letter-queue.d.ts.map +1 -0
  274. package/dist/src/integrations/quality/dead-letter-queue.js +549 -0
  275. package/dist/src/integrations/quality/dead-letter-queue.js.map +1 -0
  276. package/dist/src/integrations/quality/health-check.d.ts +218 -0
  277. package/dist/src/integrations/quality/health-check.d.ts.map +1 -0
  278. package/dist/src/integrations/quality/health-check.js +418 -0
  279. package/dist/src/integrations/quality/health-check.js.map +1 -0
  280. package/dist/src/integrations/quality/learning-store.d.ts +291 -0
  281. package/dist/src/integrations/quality/learning-store.d.ts.map +1 -0
  282. package/dist/src/integrations/quality/learning-store.js +723 -0
  283. package/dist/src/integrations/quality/learning-store.js.map +1 -0
  284. package/dist/src/integrations/quality/self-improvement.d.ts +90 -0
  285. package/dist/src/integrations/quality/self-improvement.d.ts.map +1 -0
  286. package/dist/src/integrations/quality/self-improvement.js +229 -0
  287. package/dist/src/integrations/quality/self-improvement.js.map +1 -0
  288. package/dist/src/integrations/quality/tool-recommendation.d.ts +61 -0
  289. package/dist/src/integrations/quality/tool-recommendation.d.ts.map +1 -0
  290. package/dist/src/integrations/quality/tool-recommendation.js +298 -0
  291. package/dist/src/integrations/quality/tool-recommendation.js.map +1 -0
  292. package/dist/src/integrations/safety/bash-policy.d.ts +33 -0
  293. package/dist/src/integrations/safety/bash-policy.d.ts.map +1 -0
  294. package/dist/src/integrations/safety/bash-policy.js +147 -0
  295. package/dist/src/integrations/safety/bash-policy.js.map +1 -0
  296. package/dist/src/integrations/safety/edit-validator.d.ts +30 -0
  297. package/dist/src/integrations/safety/edit-validator.d.ts.map +1 -0
  298. package/dist/src/integrations/safety/edit-validator.js +87 -0
  299. package/dist/src/integrations/safety/edit-validator.js.map +1 -0
  300. package/dist/src/integrations/safety/execution-policy.d.ts +189 -0
  301. package/dist/src/integrations/safety/execution-policy.d.ts.map +1 -0
  302. package/dist/src/integrations/safety/execution-policy.js +362 -0
  303. package/dist/src/integrations/safety/execution-policy.js.map +1 -0
  304. package/dist/src/integrations/safety/policy-engine.d.ts +55 -0
  305. package/dist/src/integrations/safety/policy-engine.d.ts.map +1 -0
  306. package/dist/src/integrations/safety/policy-engine.js +287 -0
  307. package/dist/src/integrations/safety/policy-engine.js.map +1 -0
  308. package/dist/src/integrations/safety/safety.d.ts +174 -0
  309. package/dist/src/integrations/safety/safety.d.ts.map +1 -0
  310. package/dist/src/integrations/safety/safety.js +473 -0
  311. package/dist/src/integrations/safety/safety.js.map +1 -0
  312. package/dist/src/integrations/safety/sandbox/basic.d.ts +81 -0
  313. package/dist/src/integrations/safety/sandbox/basic.d.ts.map +1 -0
  314. package/dist/src/integrations/safety/sandbox/basic.js +333 -0
  315. package/dist/src/integrations/safety/sandbox/basic.js.map +1 -0
  316. package/dist/src/integrations/safety/sandbox/docker.d.ts +94 -0
  317. package/dist/src/integrations/safety/sandbox/docker.d.ts.map +1 -0
  318. package/dist/src/integrations/safety/sandbox/docker.js +294 -0
  319. package/dist/src/integrations/safety/sandbox/docker.js.map +1 -0
  320. package/dist/src/integrations/safety/sandbox/index.d.ts +188 -0
  321. package/dist/src/integrations/safety/sandbox/index.d.ts.map +1 -0
  322. package/dist/src/integrations/safety/sandbox/index.js +410 -0
  323. package/dist/src/integrations/safety/sandbox/index.js.map +1 -0
  324. package/dist/src/integrations/safety/sandbox/landlock.d.ts +59 -0
  325. package/dist/src/integrations/safety/sandbox/landlock.d.ts.map +1 -0
  326. package/dist/src/integrations/safety/sandbox/landlock.js +333 -0
  327. package/dist/src/integrations/safety/sandbox/landlock.js.map +1 -0
  328. package/dist/src/integrations/safety/sandbox/seatbelt.d.ts +68 -0
  329. package/dist/src/integrations/safety/sandbox/seatbelt.d.ts.map +1 -0
  330. package/dist/src/integrations/safety/sandbox/seatbelt.js +291 -0
  331. package/dist/src/integrations/safety/sandbox/seatbelt.js.map +1 -0
  332. package/dist/src/integrations/safety/type-checker.d.ts +53 -0
  333. package/dist/src/integrations/safety/type-checker.d.ts.map +1 -0
  334. package/dist/src/integrations/safety/type-checker.js +146 -0
  335. package/dist/src/integrations/safety/type-checker.js.map +1 -0
  336. package/dist/src/integrations/skills/skill-executor.d.ts +113 -0
  337. package/dist/src/integrations/skills/skill-executor.d.ts.map +1 -0
  338. package/dist/src/integrations/skills/skill-executor.js +266 -0
  339. package/dist/src/integrations/skills/skill-executor.js.map +1 -0
  340. package/dist/src/integrations/skills/skills.d.ts +262 -0
  341. package/dist/src/integrations/skills/skills.d.ts.map +1 -0
  342. package/dist/src/integrations/skills/skills.js +611 -0
  343. package/dist/src/integrations/skills/skills.js.map +1 -0
  344. package/dist/src/integrations/streaming/pty-shell.d.ts +169 -0
  345. package/dist/src/integrations/streaming/pty-shell.d.ts.map +1 -0
  346. package/dist/src/integrations/streaming/pty-shell.js +371 -0
  347. package/dist/src/integrations/streaming/pty-shell.js.map +1 -0
  348. package/dist/src/integrations/streaming/streaming.d.ts +102 -0
  349. package/dist/src/integrations/streaming/streaming.d.ts.map +1 -0
  350. package/dist/src/integrations/streaming/streaming.js +364 -0
  351. package/dist/src/integrations/streaming/streaming.js.map +1 -0
  352. package/dist/src/integrations/swarm/failure-classifier.d.ts.map +1 -1
  353. package/dist/src/integrations/swarm/failure-classifier.js +18 -3
  354. package/dist/src/integrations/swarm/failure-classifier.js.map +1 -1
  355. package/dist/src/integrations/swarm/index.d.ts +6 -5
  356. package/dist/src/integrations/swarm/index.d.ts.map +1 -1
  357. package/dist/src/integrations/swarm/index.js +5 -3
  358. package/dist/src/integrations/swarm/index.js.map +1 -1
  359. package/dist/src/integrations/swarm/model-selector.d.ts.map +1 -1
  360. package/dist/src/integrations/swarm/model-selector.js +21 -24
  361. package/dist/src/integrations/swarm/model-selector.js.map +1 -1
  362. package/dist/src/integrations/swarm/request-throttle.d.ts.map +1 -1
  363. package/dist/src/integrations/swarm/request-throttle.js +7 -4
  364. package/dist/src/integrations/swarm/request-throttle.js.map +1 -1
  365. package/dist/src/integrations/swarm/swarm-budget.d.ts +1 -1
  366. package/dist/src/integrations/swarm/swarm-budget.d.ts.map +1 -1
  367. package/dist/src/integrations/swarm/swarm-budget.js +1 -1
  368. package/dist/src/integrations/swarm/swarm-budget.js.map +1 -1
  369. package/dist/src/integrations/swarm/swarm-config-loader.d.ts.map +1 -1
  370. package/dist/src/integrations/swarm/swarm-config-loader.js +53 -17
  371. package/dist/src/integrations/swarm/swarm-config-loader.js.map +1 -1
  372. package/dist/src/integrations/swarm/swarm-event-bridge.d.ts.map +1 -1
  373. package/dist/src/integrations/swarm/swarm-event-bridge.js +69 -23
  374. package/dist/src/integrations/swarm/swarm-event-bridge.js.map +1 -1
  375. package/dist/src/integrations/swarm/swarm-events.d.ts +1 -1
  376. package/dist/src/integrations/swarm/swarm-events.d.ts.map +1 -1
  377. package/dist/src/integrations/swarm/swarm-events.js +1 -1
  378. package/dist/src/integrations/swarm/swarm-events.js.map +1 -1
  379. package/dist/src/integrations/swarm/swarm-execution.d.ts +27 -0
  380. package/dist/src/integrations/swarm/swarm-execution.d.ts.map +1 -0
  381. package/dist/src/integrations/swarm/swarm-execution.js +1071 -0
  382. package/dist/src/integrations/swarm/swarm-execution.js.map +1 -0
  383. package/dist/src/integrations/swarm/swarm-helpers.d.ts +26 -0
  384. package/dist/src/integrations/swarm/swarm-helpers.d.ts.map +1 -0
  385. package/dist/src/integrations/swarm/swarm-helpers.js +108 -0
  386. package/dist/src/integrations/swarm/swarm-helpers.js.map +1 -0
  387. package/dist/src/integrations/swarm/swarm-lifecycle.d.ts +100 -0
  388. package/dist/src/integrations/swarm/swarm-lifecycle.d.ts.map +1 -0
  389. package/dist/src/integrations/swarm/swarm-lifecycle.js +977 -0
  390. package/dist/src/integrations/swarm/swarm-lifecycle.js.map +1 -0
  391. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts +84 -203
  392. package/dist/src/integrations/swarm/swarm-orchestrator.d.ts.map +1 -1
  393. package/dist/src/integrations/swarm/swarm-orchestrator.js +338 -2899
  394. package/dist/src/integrations/swarm/swarm-orchestrator.js.map +1 -1
  395. package/dist/src/integrations/swarm/swarm-quality-gate.d.ts.map +1 -1
  396. package/dist/src/integrations/swarm/swarm-quality-gate.js +19 -15
  397. package/dist/src/integrations/swarm/swarm-quality-gate.js.map +1 -1
  398. package/dist/src/integrations/swarm/swarm-recovery.d.ts +75 -0
  399. package/dist/src/integrations/swarm/swarm-recovery.d.ts.map +1 -0
  400. package/dist/src/integrations/swarm/swarm-recovery.js +563 -0
  401. package/dist/src/integrations/swarm/swarm-recovery.js.map +1 -0
  402. package/dist/src/integrations/swarm/swarm-state-store.d.ts.map +1 -1
  403. package/dist/src/integrations/swarm/swarm-state-store.js +8 -0
  404. package/dist/src/integrations/swarm/swarm-state-store.js.map +1 -1
  405. package/dist/src/integrations/swarm/task-queue.d.ts +8 -2
  406. package/dist/src/integrations/swarm/task-queue.d.ts.map +1 -1
  407. package/dist/src/integrations/swarm/task-queue.js +60 -26
  408. package/dist/src/integrations/swarm/task-queue.js.map +1 -1
  409. package/dist/src/integrations/swarm/types.d.ts +17 -5
  410. package/dist/src/integrations/swarm/types.d.ts.map +1 -1
  411. package/dist/src/integrations/swarm/types.js +89 -12
  412. package/dist/src/integrations/swarm/types.js.map +1 -1
  413. package/dist/src/integrations/swarm/worker-pool.d.ts +1 -1
  414. package/dist/src/integrations/swarm/worker-pool.d.ts.map +1 -1
  415. package/dist/src/integrations/swarm/worker-pool.js +43 -31
  416. package/dist/src/integrations/swarm/worker-pool.js.map +1 -1
  417. package/dist/src/integrations/tasks/dependency-analyzer.d.ts +34 -0
  418. package/dist/src/integrations/tasks/dependency-analyzer.d.ts.map +1 -0
  419. package/dist/src/integrations/tasks/dependency-analyzer.js +231 -0
  420. package/dist/src/integrations/tasks/dependency-analyzer.js.map +1 -0
  421. package/dist/src/integrations/tasks/interactive-planning.d.ts +322 -0
  422. package/dist/src/integrations/tasks/interactive-planning.d.ts.map +1 -0
  423. package/dist/src/integrations/tasks/interactive-planning.js +648 -0
  424. package/dist/src/integrations/tasks/interactive-planning.js.map +1 -0
  425. package/dist/src/integrations/tasks/pending-plan.d.ts +196 -0
  426. package/dist/src/integrations/tasks/pending-plan.d.ts.map +1 -0
  427. package/dist/src/integrations/tasks/pending-plan.js +431 -0
  428. package/dist/src/integrations/tasks/pending-plan.js.map +1 -0
  429. package/dist/src/integrations/tasks/planning.d.ts +115 -0
  430. package/dist/src/integrations/tasks/planning.d.ts.map +1 -0
  431. package/dist/src/integrations/tasks/planning.js +432 -0
  432. package/dist/src/integrations/tasks/planning.js.map +1 -0
  433. package/dist/src/integrations/tasks/smart-decomposer.d.ts +316 -0
  434. package/dist/src/integrations/tasks/smart-decomposer.d.ts.map +1 -0
  435. package/dist/src/integrations/tasks/smart-decomposer.js +668 -0
  436. package/dist/src/integrations/tasks/smart-decomposer.js.map +1 -0
  437. package/dist/src/integrations/tasks/task-manager.d.ts +164 -0
  438. package/dist/src/integrations/tasks/task-manager.d.ts.map +1 -0
  439. package/dist/src/integrations/tasks/task-manager.js +390 -0
  440. package/dist/src/integrations/tasks/task-manager.js.map +1 -0
  441. package/dist/src/integrations/tasks/task-splitter.d.ts +56 -0
  442. package/dist/src/integrations/tasks/task-splitter.d.ts.map +1 -0
  443. package/dist/src/integrations/tasks/task-splitter.js +542 -0
  444. package/dist/src/integrations/tasks/task-splitter.js.map +1 -0
  445. package/dist/src/integrations/tasks/verification-gate.d.ts +103 -0
  446. package/dist/src/integrations/tasks/verification-gate.d.ts.map +1 -0
  447. package/dist/src/integrations/tasks/verification-gate.js +195 -0
  448. package/dist/src/integrations/tasks/verification-gate.js.map +1 -0
  449. package/dist/src/integrations/tasks/work-log.d.ts +87 -0
  450. package/dist/src/integrations/tasks/work-log.d.ts.map +1 -0
  451. package/dist/src/integrations/tasks/work-log.js +287 -0
  452. package/dist/src/integrations/tasks/work-log.js.map +1 -0
  453. package/dist/src/integrations/utilities/capabilities.d.ts +160 -0
  454. package/dist/src/integrations/utilities/capabilities.d.ts.map +1 -0
  455. package/dist/src/integrations/utilities/capabilities.js +464 -0
  456. package/dist/src/integrations/utilities/capabilities.js.map +1 -0
  457. package/dist/src/integrations/utilities/diff-utils.d.ts +105 -0
  458. package/dist/src/integrations/utilities/diff-utils.d.ts.map +1 -0
  459. package/dist/src/integrations/utilities/diff-utils.js +496 -0
  460. package/dist/src/integrations/utilities/diff-utils.js.map +1 -0
  461. package/dist/src/integrations/utilities/environment-facts.d.ts +52 -0
  462. package/dist/src/integrations/utilities/environment-facts.d.ts.map +1 -0
  463. package/dist/src/integrations/utilities/environment-facts.js +94 -0
  464. package/dist/src/integrations/utilities/environment-facts.js.map +1 -0
  465. package/dist/src/integrations/utilities/file-change-tracker.d.ts +162 -0
  466. package/dist/src/integrations/utilities/file-change-tracker.d.ts.map +1 -0
  467. package/dist/src/integrations/utilities/file-change-tracker.js +537 -0
  468. package/dist/src/integrations/utilities/file-change-tracker.js.map +1 -0
  469. package/dist/src/integrations/utilities/graph-visualization.d.ts +72 -0
  470. package/dist/src/integrations/utilities/graph-visualization.d.ts.map +1 -0
  471. package/dist/src/integrations/utilities/graph-visualization.js +385 -0
  472. package/dist/src/integrations/utilities/graph-visualization.js.map +1 -0
  473. package/dist/src/integrations/utilities/hierarchical-config.d.ts +215 -0
  474. package/dist/src/integrations/utilities/hierarchical-config.d.ts.map +1 -0
  475. package/dist/src/integrations/utilities/hierarchical-config.js +508 -0
  476. package/dist/src/integrations/utilities/hierarchical-config.js.map +1 -0
  477. package/dist/src/integrations/utilities/hooks.d.ts +116 -0
  478. package/dist/src/integrations/utilities/hooks.d.ts.map +1 -0
  479. package/dist/src/integrations/utilities/hooks.js +410 -0
  480. package/dist/src/integrations/utilities/hooks.js.map +1 -0
  481. package/dist/src/integrations/utilities/ignore.d.ts +143 -0
  482. package/dist/src/integrations/utilities/ignore.d.ts.map +1 -0
  483. package/dist/src/integrations/utilities/ignore.js +417 -0
  484. package/dist/src/integrations/utilities/ignore.js.map +1 -0
  485. package/dist/src/integrations/utilities/image-renderer.d.ts +119 -0
  486. package/dist/src/integrations/utilities/image-renderer.d.ts.map +1 -0
  487. package/dist/src/integrations/utilities/image-renderer.js +301 -0
  488. package/dist/src/integrations/utilities/image-renderer.js.map +1 -0
  489. package/dist/src/integrations/utilities/logger.d.ts +104 -0
  490. package/dist/src/integrations/utilities/logger.d.ts.map +1 -0
  491. package/dist/src/integrations/utilities/logger.js +217 -0
  492. package/dist/src/integrations/utilities/logger.js.map +1 -0
  493. package/dist/src/integrations/utilities/memory.d.ts +116 -0
  494. package/dist/src/integrations/utilities/memory.d.ts.map +1 -0
  495. package/dist/src/integrations/utilities/memory.js +309 -0
  496. package/dist/src/integrations/utilities/memory.js.map +1 -0
  497. package/dist/src/integrations/utilities/observability.d.ts +162 -0
  498. package/dist/src/integrations/utilities/observability.d.ts.map +1 -0
  499. package/dist/src/integrations/utilities/observability.js +408 -0
  500. package/dist/src/integrations/utilities/observability.js.map +1 -0
  501. package/dist/src/integrations/utilities/openrouter-pricing.d.ts +67 -0
  502. package/dist/src/integrations/utilities/openrouter-pricing.d.ts.map +1 -0
  503. package/dist/src/integrations/utilities/openrouter-pricing.js +166 -0
  504. package/dist/src/integrations/utilities/openrouter-pricing.js.map +1 -0
  505. package/dist/src/integrations/utilities/react.d.ts +139 -0
  506. package/dist/src/integrations/utilities/react.d.ts.map +1 -0
  507. package/dist/src/integrations/utilities/react.js +269 -0
  508. package/dist/src/integrations/utilities/react.js.map +1 -0
  509. package/dist/src/integrations/utilities/retry.d.ts +132 -0
  510. package/dist/src/integrations/utilities/retry.d.ts.map +1 -0
  511. package/dist/src/integrations/utilities/retry.js +233 -0
  512. package/dist/src/integrations/utilities/retry.js.map +1 -0
  513. package/dist/src/integrations/utilities/routing.d.ts +118 -0
  514. package/dist/src/integrations/utilities/routing.d.ts.map +1 -0
  515. package/dist/src/integrations/utilities/routing.js +360 -0
  516. package/dist/src/integrations/utilities/routing.js.map +1 -0
  517. package/dist/src/integrations/utilities/rules.d.ts +131 -0
  518. package/dist/src/integrations/utilities/rules.d.ts.map +1 -0
  519. package/dist/src/integrations/utilities/rules.js +282 -0
  520. package/dist/src/integrations/utilities/rules.js.map +1 -0
  521. package/dist/src/integrations/utilities/sourcegraph.d.ts +169 -0
  522. package/dist/src/integrations/utilities/sourcegraph.d.ts.map +1 -0
  523. package/dist/src/integrations/utilities/sourcegraph.js +377 -0
  524. package/dist/src/integrations/utilities/sourcegraph.js.map +1 -0
  525. package/dist/src/integrations/utilities/thinking-strategy.d.ts +52 -0
  526. package/dist/src/integrations/utilities/thinking-strategy.d.ts.map +1 -0
  527. package/dist/src/integrations/utilities/thinking-strategy.js +129 -0
  528. package/dist/src/integrations/utilities/thinking-strategy.js.map +1 -0
  529. package/dist/src/integrations/utilities/thread-manager.d.ts +199 -0
  530. package/dist/src/integrations/utilities/thread-manager.d.ts.map +1 -0
  531. package/dist/src/integrations/utilities/thread-manager.js +359 -0
  532. package/dist/src/integrations/utilities/thread-manager.js.map +1 -0
  533. package/dist/src/integrations/utilities/token-estimate.d.ts +16 -0
  534. package/dist/src/integrations/utilities/token-estimate.d.ts.map +1 -0
  535. package/dist/src/integrations/utilities/token-estimate.js +20 -0
  536. package/dist/src/integrations/utilities/token-estimate.js.map +1 -0
  537. package/dist/src/main.js +50 -27
  538. package/dist/src/main.js.map +1 -1
  539. package/dist/src/modes/repl.d.ts.map +1 -1
  540. package/dist/src/modes/repl.js +73 -22
  541. package/dist/src/modes/repl.js.map +1 -1
  542. package/dist/src/modes/tui.d.ts.map +1 -1
  543. package/dist/src/modes/tui.js +93 -16
  544. package/dist/src/modes/tui.js.map +1 -1
  545. package/dist/src/modes.d.ts.map +1 -1
  546. package/dist/src/modes.js +14 -14
  547. package/dist/src/modes.js.map +1 -1
  548. package/dist/src/observability/tracer.d.ts.map +1 -1
  549. package/dist/src/observability/tracer.js +8 -4
  550. package/dist/src/observability/tracer.js.map +1 -1
  551. package/dist/src/observability/types.d.ts.map +1 -1
  552. package/dist/src/observability/types.js.map +1 -1
  553. package/dist/src/paths.d.ts.map +1 -1
  554. package/dist/src/paths.js +2 -6
  555. package/dist/src/paths.js.map +1 -1
  556. package/dist/src/persistence/migrator.d.ts.map +1 -1
  557. package/dist/src/persistence/migrator.js +7 -7
  558. package/dist/src/persistence/migrator.js.map +1 -1
  559. package/dist/src/persistence/schema.d.ts +2 -0
  560. package/dist/src/persistence/schema.d.ts.map +1 -1
  561. package/dist/src/persistence/schema.js +31 -0
  562. package/dist/src/persistence/schema.js.map +1 -1
  563. package/dist/src/providers/adapters/anthropic.d.ts +6 -0
  564. package/dist/src/providers/adapters/anthropic.d.ts.map +1 -1
  565. package/dist/src/providers/adapters/anthropic.js +132 -36
  566. package/dist/src/providers/adapters/anthropic.js.map +1 -1
  567. package/dist/src/providers/adapters/azure.d.ts +74 -0
  568. package/dist/src/providers/adapters/azure.d.ts.map +1 -0
  569. package/dist/src/providers/adapters/azure.js +369 -0
  570. package/dist/src/providers/adapters/azure.js.map +1 -0
  571. package/dist/src/providers/adapters/mock.d.ts +16 -2
  572. package/dist/src/providers/adapters/mock.d.ts.map +1 -1
  573. package/dist/src/providers/adapters/mock.js +51 -10
  574. package/dist/src/providers/adapters/mock.js.map +1 -1
  575. package/dist/src/providers/adapters/openai.d.ts +6 -1
  576. package/dist/src/providers/adapters/openai.d.ts.map +1 -1
  577. package/dist/src/providers/adapters/openai.js +57 -19
  578. package/dist/src/providers/adapters/openai.js.map +1 -1
  579. package/dist/src/providers/adapters/openrouter.d.ts +6 -0
  580. package/dist/src/providers/adapters/openrouter.d.ts.map +1 -1
  581. package/dist/src/providers/adapters/openrouter.js +127 -30
  582. package/dist/src/providers/adapters/openrouter.js.map +1 -1
  583. package/dist/src/providers/circuit-breaker.d.ts.map +1 -1
  584. package/dist/src/providers/circuit-breaker.js +4 -3
  585. package/dist/src/providers/circuit-breaker.js.map +1 -1
  586. package/dist/src/providers/fallback-chain.d.ts.map +1 -1
  587. package/dist/src/providers/fallback-chain.js +3 -3
  588. package/dist/src/providers/fallback-chain.js.map +1 -1
  589. package/dist/src/providers/llm-resilience.d.ts.map +1 -1
  590. package/dist/src/providers/llm-resilience.js +2 -2
  591. package/dist/src/providers/llm-resilience.js.map +1 -1
  592. package/dist/src/providers/provider.d.ts.map +1 -1
  593. package/dist/src/providers/provider.js +2 -3
  594. package/dist/src/providers/provider.js.map +1 -1
  595. package/dist/src/providers/resilient-fetch.d.ts.map +1 -1
  596. package/dist/src/providers/resilient-fetch.js +3 -4
  597. package/dist/src/providers/resilient-fetch.js.map +1 -1
  598. package/dist/src/providers/resilient-provider.d.ts.map +1 -1
  599. package/dist/src/providers/resilient-provider.js +9 -6
  600. package/dist/src/providers/resilient-provider.js.map +1 -1
  601. package/dist/src/providers/types.d.ts +23 -2
  602. package/dist/src/providers/types.d.ts.map +1 -1
  603. package/dist/src/session-picker.d.ts +1 -1
  604. package/dist/src/session-picker.d.ts.map +1 -1
  605. package/dist/src/session-picker.js +10 -6
  606. package/dist/src/session-picker.js.map +1 -1
  607. package/dist/src/shared/budget-tracker.d.ts.map +1 -1
  608. package/dist/src/shared/budget-tracker.js +2 -2
  609. package/dist/src/shared/budget-tracker.js.map +1 -1
  610. package/dist/src/shared/context-engine.d.ts.map +1 -1
  611. package/dist/src/shared/context-engine.js +1 -1
  612. package/dist/src/shared/context-engine.js.map +1 -1
  613. package/dist/src/shared/persistence.d.ts.map +1 -1
  614. package/dist/src/shared/persistence.js +2 -6
  615. package/dist/src/shared/persistence.js.map +1 -1
  616. package/dist/src/shared/shared-context-state.d.ts.map +1 -1
  617. package/dist/src/shared/shared-context-state.js.map +1 -1
  618. package/dist/src/shared/shared-economics-state.d.ts.map +1 -1
  619. package/dist/src/shared/shared-economics-state.js.map +1 -1
  620. package/dist/src/tools/agent.d.ts +2 -2
  621. package/dist/src/tools/agent.d.ts.map +1 -1
  622. package/dist/src/tools/agent.js +10 -7
  623. package/dist/src/tools/agent.js.map +1 -1
  624. package/dist/src/tools/bash.d.ts.map +1 -1
  625. package/dist/src/tools/bash.js +1 -1
  626. package/dist/src/tools/bash.js.map +1 -1
  627. package/dist/src/tools/coercion.js +1 -1
  628. package/dist/src/tools/coercion.js.map +1 -1
  629. package/dist/src/tools/file.d.ts.map +1 -1
  630. package/dist/src/tools/file.js +2 -2
  631. package/dist/src/tools/file.js.map +1 -1
  632. package/dist/src/tools/permission.js +7 -8
  633. package/dist/src/tools/permission.js.map +1 -1
  634. package/dist/src/tools/registry.d.ts +1 -1
  635. package/dist/src/tools/registry.d.ts.map +1 -1
  636. package/dist/src/tools/registry.js +4 -6
  637. package/dist/src/tools/registry.js.map +1 -1
  638. package/dist/src/tools/standard.d.ts.map +1 -1
  639. package/dist/src/tools/standard.js +1 -3
  640. package/dist/src/tools/standard.js.map +1 -1
  641. package/dist/src/tools/tasks.d.ts +1 -1
  642. package/dist/src/tools/tasks.d.ts.map +1 -1
  643. package/dist/src/tools/tasks.js +4 -4
  644. package/dist/src/tools/tasks.js.map +1 -1
  645. package/dist/src/tools/types.d.ts.map +1 -1
  646. package/dist/src/tools/types.js +5 -1
  647. package/dist/src/tools/types.js.map +1 -1
  648. package/dist/src/tools/undo.d.ts +1 -1
  649. package/dist/src/tools/undo.d.ts.map +1 -1
  650. package/dist/src/tools/undo.js +4 -2
  651. package/dist/src/tools/undo.js.map +1 -1
  652. package/dist/src/tracing/cache-boundary-tracker.d.ts.map +1 -1
  653. package/dist/src/tracing/cache-boundary-tracker.js +9 -13
  654. package/dist/src/tracing/cache-boundary-tracker.js.map +1 -1
  655. package/dist/src/tracing/trace-collector.d.ts +22 -0
  656. package/dist/src/tracing/trace-collector.d.ts.map +1 -1
  657. package/dist/src/tracing/trace-collector.js +55 -31
  658. package/dist/src/tracing/trace-collector.js.map +1 -1
  659. package/dist/src/tracing/types.d.ts +17 -1
  660. package/dist/src/tracing/types.d.ts.map +1 -1
  661. package/dist/src/tracing/types.js.map +1 -1
  662. package/dist/src/tricks/failure-evidence.d.ts.map +1 -1
  663. package/dist/src/tricks/failure-evidence.js +17 -27
  664. package/dist/src/tricks/failure-evidence.js.map +1 -1
  665. package/dist/src/tricks/json-utils.d.ts.map +1 -1
  666. package/dist/src/tricks/json-utils.js +1 -4
  667. package/dist/src/tricks/json-utils.js.map +1 -1
  668. package/dist/src/tricks/kv-cache-context.d.ts.map +1 -1
  669. package/dist/src/tricks/kv-cache-context.js +2 -3
  670. package/dist/src/tricks/kv-cache-context.js.map +1 -1
  671. package/dist/src/tricks/recitation.d.ts.map +1 -1
  672. package/dist/src/tricks/recitation.js +24 -19
  673. package/dist/src/tricks/recitation.js.map +1 -1
  674. package/dist/src/tricks/recursive-context.d.ts.map +1 -1
  675. package/dist/src/tricks/recursive-context.js +10 -7
  676. package/dist/src/tricks/recursive-context.js.map +1 -1
  677. package/dist/src/tricks/reversible-compaction.d.ts.map +1 -1
  678. package/dist/src/tricks/reversible-compaction.js +17 -9
  679. package/dist/src/tricks/reversible-compaction.js.map +1 -1
  680. package/dist/src/tricks/serialization-diversity.d.ts.map +1 -1
  681. package/dist/src/tricks/serialization-diversity.js +12 -12
  682. package/dist/src/tricks/serialization-diversity.js.map +1 -1
  683. package/dist/src/tui/app.d.ts +9 -5
  684. package/dist/src/tui/app.d.ts.map +1 -1
  685. package/dist/src/tui/app.js +690 -565
  686. package/dist/src/tui/app.js.map +1 -1
  687. package/dist/src/tui/components/ActiveAgentsPanel.d.ts +2 -0
  688. package/dist/src/tui/components/ActiveAgentsPanel.d.ts.map +1 -1
  689. package/dist/src/tui/components/ActiveAgentsPanel.js +5 -5
  690. package/dist/src/tui/components/ActiveAgentsPanel.js.map +1 -1
  691. package/dist/src/tui/components/ApprovalDialog.d.ts.map +1 -1
  692. package/dist/src/tui/components/ApprovalDialog.js +14 -0
  693. package/dist/src/tui/components/ApprovalDialog.js.map +1 -1
  694. package/dist/src/tui/components/BudgetExtensionDialog.d.ts +18 -0
  695. package/dist/src/tui/components/BudgetExtensionDialog.d.ts.map +1 -0
  696. package/dist/src/tui/components/BudgetExtensionDialog.js +40 -0
  697. package/dist/src/tui/components/BudgetExtensionDialog.js.map +1 -0
  698. package/dist/src/tui/components/CollapsibleDiffView.d.ts +1 -1
  699. package/dist/src/tui/components/CollapsibleDiffView.d.ts.map +1 -1
  700. package/dist/src/tui/components/CollapsibleDiffView.js +18 -13
  701. package/dist/src/tui/components/CollapsibleDiffView.js.map +1 -1
  702. package/dist/src/tui/components/DebugPanel.d.ts.map +1 -1
  703. package/dist/src/tui/components/DebugPanel.js +46 -26
  704. package/dist/src/tui/components/DebugPanel.js.map +1 -1
  705. package/dist/src/tui/components/DiagnosticsPanel.d.ts +24 -0
  706. package/dist/src/tui/components/DiagnosticsPanel.d.ts.map +1 -0
  707. package/dist/src/tui/components/DiagnosticsPanel.js +63 -0
  708. package/dist/src/tui/components/DiagnosticsPanel.js.map +1 -0
  709. package/dist/src/tui/components/DiffView.d.ts +1 -1
  710. package/dist/src/tui/components/DiffView.d.ts.map +1 -1
  711. package/dist/src/tui/components/DiffView.js +21 -14
  712. package/dist/src/tui/components/DiffView.js.map +1 -1
  713. package/dist/src/tui/components/ErrorBoundary.d.ts.map +1 -1
  714. package/dist/src/tui/components/ErrorBoundary.js +8 -3
  715. package/dist/src/tui/components/ErrorBoundary.js.map +1 -1
  716. package/dist/src/tui/components/ErrorDetailPanel.d.ts.map +1 -1
  717. package/dist/src/tui/components/ErrorDetailPanel.js +4 -4
  718. package/dist/src/tui/components/ErrorDetailPanel.js.map +1 -1
  719. package/dist/src/tui/components/FileChangeSummary.d.ts.map +1 -1
  720. package/dist/src/tui/components/FileChangeSummary.js +3 -3
  721. package/dist/src/tui/components/FileChangeSummary.js.map +1 -1
  722. package/dist/src/tui/components/InputArea.d.ts.map +1 -1
  723. package/dist/src/tui/components/InputArea.js +32 -15
  724. package/dist/src/tui/components/InputArea.js.map +1 -1
  725. package/dist/src/tui/components/LearningValidationDialog.d.ts +25 -0
  726. package/dist/src/tui/components/LearningValidationDialog.d.ts.map +1 -0
  727. package/dist/src/tui/components/LearningValidationDialog.js +35 -0
  728. package/dist/src/tui/components/LearningValidationDialog.js.map +1 -0
  729. package/dist/src/tui/components/MessageItem.d.ts.map +1 -1
  730. package/dist/src/tui/components/MessageItem.js.map +1 -1
  731. package/dist/src/tui/components/PlanPanel.d.ts +27 -0
  732. package/dist/src/tui/components/PlanPanel.d.ts.map +1 -0
  733. package/dist/src/tui/components/PlanPanel.js +45 -0
  734. package/dist/src/tui/components/PlanPanel.js.map +1 -0
  735. package/dist/src/tui/components/ScrollableBox.d.ts.map +1 -1
  736. package/dist/src/tui/components/ScrollableBox.js +2 -2
  737. package/dist/src/tui/components/ScrollableBox.js.map +1 -1
  738. package/dist/src/tui/components/SideBySideDiff.d.ts.map +1 -1
  739. package/dist/src/tui/components/SideBySideDiff.js +20 -18
  740. package/dist/src/tui/components/SideBySideDiff.js.map +1 -1
  741. package/dist/src/tui/components/StatusBar.d.ts +41 -0
  742. package/dist/src/tui/components/StatusBar.d.ts.map +1 -0
  743. package/dist/src/tui/components/StatusBar.js +114 -0
  744. package/dist/src/tui/components/StatusBar.js.map +1 -0
  745. package/dist/src/tui/components/SwarmStatusPanel.d.ts.map +1 -1
  746. package/dist/src/tui/components/SwarmStatusPanel.js +25 -17
  747. package/dist/src/tui/components/SwarmStatusPanel.js.map +1 -1
  748. package/dist/src/tui/components/TasksPanel.d.ts +1 -1
  749. package/dist/src/tui/components/TasksPanel.d.ts.map +1 -1
  750. package/dist/src/tui/components/TasksPanel.js +12 -11
  751. package/dist/src/tui/components/TasksPanel.js.map +1 -1
  752. package/dist/src/tui/components/ToolCallItem.d.ts.map +1 -1
  753. package/dist/src/tui/components/ToolCallItem.js +19 -6
  754. package/dist/src/tui/components/ToolCallItem.js.map +1 -1
  755. package/dist/src/tui/components/ToolCallsPanel.d.ts +15 -0
  756. package/dist/src/tui/components/ToolCallsPanel.d.ts.map +1 -0
  757. package/dist/src/tui/components/ToolCallsPanel.js +34 -0
  758. package/dist/src/tui/components/ToolCallsPanel.js.map +1 -0
  759. package/dist/src/tui/components/TransparencyPanel.d.ts +15 -0
  760. package/dist/src/tui/components/TransparencyPanel.d.ts.map +1 -0
  761. package/dist/src/tui/components/TransparencyPanel.js +46 -0
  762. package/dist/src/tui/components/TransparencyPanel.js.map +1 -0
  763. package/dist/src/tui/components/index.d.ts +8 -2
  764. package/dist/src/tui/components/index.d.ts.map +1 -1
  765. package/dist/src/tui/components/index.js +14 -2
  766. package/dist/src/tui/components/index.js.map +1 -1
  767. package/dist/src/tui/event-display.d.ts.map +1 -1
  768. package/dist/src/tui/event-display.js +13 -4
  769. package/dist/src/tui/event-display.js.map +1 -1
  770. package/dist/src/tui/hooks/index.d.ts +1 -0
  771. package/dist/src/tui/hooks/index.d.ts.map +1 -1
  772. package/dist/src/tui/hooks/index.js +1 -0
  773. package/dist/src/tui/hooks/index.js.map +1 -1
  774. package/dist/src/tui/hooks/use-agent-events.d.ts +53 -0
  775. package/dist/src/tui/hooks/use-agent-events.d.ts.map +1 -0
  776. package/dist/src/tui/hooks/use-agent-events.js +444 -0
  777. package/dist/src/tui/hooks/use-agent-events.js.map +1 -0
  778. package/dist/src/tui/hooks/use-throttled-state.d.ts +18 -0
  779. package/dist/src/tui/hooks/use-throttled-state.d.ts.map +1 -0
  780. package/dist/src/tui/hooks/use-throttled-state.js +93 -0
  781. package/dist/src/tui/hooks/use-throttled-state.js.map +1 -0
  782. package/dist/src/tui/hooks/useMessagePruning.d.ts.map +1 -1
  783. package/dist/src/tui/hooks/useMessagePruning.js.map +1 -1
  784. package/dist/src/tui/index.d.ts +2 -2
  785. package/dist/src/tui/index.d.ts.map +1 -1
  786. package/dist/src/tui/index.js +102 -7
  787. package/dist/src/tui/index.js.map +1 -1
  788. package/dist/src/tui/input/CommandPalette.d.ts.map +1 -1
  789. package/dist/src/tui/input/CommandPalette.js +2 -2
  790. package/dist/src/tui/input/CommandPalette.js.map +1 -1
  791. package/dist/src/tui/input/index.d.ts +1 -1
  792. package/dist/src/tui/input/index.d.ts.map +1 -1
  793. package/dist/src/tui/input/index.js +1 -1
  794. package/dist/src/tui/input/index.js.map +1 -1
  795. package/dist/src/tui/syntax/languages/bash.js +94 -16
  796. package/dist/src/tui/syntax/languages/bash.js.map +1 -1
  797. package/dist/src/tui/syntax/languages/javascript.js +65 -12
  798. package/dist/src/tui/syntax/languages/javascript.js.map +1 -1
  799. package/dist/src/tui/syntax/languages/json.js.map +1 -1
  800. package/dist/src/tui/syntax/languages/python.js +81 -15
  801. package/dist/src/tui/syntax/languages/python.js.map +1 -1
  802. package/dist/src/tui/theme/index.js.map +1 -1
  803. package/dist/src/tui/transparency-aggregator.d.ts +13 -0
  804. package/dist/src/tui/transparency-aggregator.d.ts.map +1 -1
  805. package/dist/src/tui/transparency-aggregator.js +39 -4
  806. package/dist/src/tui/transparency-aggregator.js.map +1 -1
  807. package/dist/src/tui/types.d.ts.map +1 -1
  808. package/dist/src/tui/types.js.map +1 -1
  809. package/dist/src/tui/utils/keyboard.d.ts.map +1 -1
  810. package/dist/src/tui/utils/keyboard.js.map +1 -1
  811. package/dist/src/types.d.ts +39 -2
  812. package/dist/src/types.d.ts.map +1 -1
  813. package/package.json +1 -1
@@ -0,0 +1,776 @@
1
+ /**
2
+ * Lesson 25: MCP Client
3
+ *
4
+ * Connects to Model Context Protocol (MCP) servers to extend agent capabilities.
5
+ * Supports stdio-based servers (spawned as child processes).
6
+ */
7
+ import { spawn } from 'node:child_process';
8
+ import { readFile } from 'node:fs/promises';
9
+ import { existsSync } from 'node:fs';
10
+ import { createInterface } from 'node:readline';
11
+ import { withRetry, MCP_RETRY_CONFIG } from '../utilities/retry.js';
12
+ import { MCPError, isRecoverable } from '../../errors/index.js';
13
+ import { validateAllTools, formatValidationSummary } from './mcp-tool-validator.js';
14
+ import { logger } from '../utilities/logger.js';
15
+ // =============================================================================
16
+ // MCP CLIENT
17
+ // =============================================================================
18
+ /**
19
+ * MCP Client manages connections to MCP servers.
20
+ */
21
+ export class MCPClient {
22
+ config;
23
+ servers = new Map();
24
+ listeners = [];
25
+ dlq = null;
26
+ sessionId;
27
+ constructor(config = {}) {
28
+ this.config = {
29
+ configPath: config.configPath || '.mcp.json',
30
+ configPaths: config.configPaths ?? [],
31
+ requestTimeout: config.requestTimeout ?? 30000,
32
+ autoConnect: config.autoConnect ?? true,
33
+ lazyLoading: config.lazyLoading ?? false,
34
+ alwaysLoadTools: config.alwaysLoadTools ?? [],
35
+ summaryDescriptionLimit: config.summaryDescriptionLimit ?? 100,
36
+ maxToolsPerSearch: config.maxToolsPerSearch ?? 5,
37
+ };
38
+ }
39
+ /**
40
+ * Load servers from config file.
41
+ */
42
+ async loadFromConfig(configPath) {
43
+ const path = configPath || this.config.configPath;
44
+ if (!existsSync(path)) {
45
+ return; // No config file, silently skip
46
+ }
47
+ try {
48
+ const content = await readFile(path, 'utf-8');
49
+ const mcpConfig = JSON.parse(content);
50
+ for (const [name, serverConfig] of Object.entries(mcpConfig.servers)) {
51
+ // Expand environment variables in config
52
+ const expandedConfig = this.expandEnvVars(serverConfig);
53
+ this.registerServer(name, expandedConfig);
54
+ if (this.config.autoConnect) {
55
+ await this.connectServer(name).catch((err) => {
56
+ logger.warn('Failed to connect to MCP server', {
57
+ server: name,
58
+ error: String(err.message),
59
+ });
60
+ });
61
+ }
62
+ }
63
+ }
64
+ catch (err) {
65
+ logger.warn('Failed to load MCP config', { path, error: String(err) });
66
+ }
67
+ }
68
+ /**
69
+ * Load servers from multiple config files (hierarchical).
70
+ * Later configs override earlier ones for the same server name.
71
+ * Servers from all configs are merged together.
72
+ */
73
+ async loadFromHierarchicalConfigs(configPaths) {
74
+ const mergedServers = {};
75
+ // Load and merge all configs
76
+ for (const configPath of configPaths) {
77
+ if (!existsSync(configPath)) {
78
+ continue;
79
+ }
80
+ try {
81
+ const content = await readFile(configPath, 'utf-8');
82
+ const mcpConfig = JSON.parse(content);
83
+ // Merge servers (later overrides earlier)
84
+ for (const [name, serverConfig] of Object.entries(mcpConfig.servers)) {
85
+ mergedServers[name] = this.expandEnvVars(serverConfig);
86
+ }
87
+ }
88
+ catch (err) {
89
+ logger.warn('Failed to load MCP config', { configPath, error: String(err) });
90
+ }
91
+ }
92
+ // Register all merged servers
93
+ for (const [name, config] of Object.entries(mergedServers)) {
94
+ this.registerServer(name, config);
95
+ if (this.config.autoConnect) {
96
+ await this.connectServer(name).catch((err) => {
97
+ logger.warn('Failed to connect to MCP server', {
98
+ server: name,
99
+ error: String(err.message),
100
+ });
101
+ });
102
+ }
103
+ }
104
+ }
105
+ /**
106
+ * Expand environment variables in config.
107
+ */
108
+ expandEnvVars(config) {
109
+ const expand = (str) => {
110
+ return str.replace(/\$\{(\w+)\}/g, (_, name) => process.env[name] || '');
111
+ };
112
+ return {
113
+ command: expand(config.command),
114
+ args: config.args?.map(expand),
115
+ env: config.env
116
+ ? Object.fromEntries(Object.entries(config.env).map(([k, v]) => [k, expand(v)]))
117
+ : undefined,
118
+ cwd: config.cwd ? expand(config.cwd) : undefined,
119
+ };
120
+ }
121
+ /**
122
+ * Register a server (without connecting).
123
+ */
124
+ registerServer(name, config) {
125
+ this.servers.set(name, {
126
+ name,
127
+ config,
128
+ process: null,
129
+ readline: null,
130
+ tools: [],
131
+ status: 'disconnected',
132
+ pendingRequests: new Map(),
133
+ nextRequestId: 1,
134
+ loadedTools: new Set(),
135
+ });
136
+ }
137
+ /**
138
+ * Connect to a registered server.
139
+ */
140
+ async connectServer(name) {
141
+ const server = this.servers.get(name);
142
+ if (!server) {
143
+ throw MCPError.serverNotFound(name);
144
+ }
145
+ if (server.status === 'connected') {
146
+ return; // Already connected
147
+ }
148
+ server.status = 'connecting';
149
+ this.emit({ type: 'server.connecting', name });
150
+ try {
151
+ // Spawn the server process
152
+ const proc = spawn(server.config.command, server.config.args || [], {
153
+ env: { ...process.env, ...server.config.env },
154
+ cwd: server.config.cwd,
155
+ stdio: ['pipe', 'pipe', 'pipe'],
156
+ });
157
+ server.process = proc;
158
+ // Set up readline for stdout
159
+ server.readline = createInterface({
160
+ input: proc.stdout,
161
+ crlfDelay: Infinity,
162
+ });
163
+ // Handle incoming messages
164
+ server.readline.on('line', (line) => {
165
+ this.handleServerMessage(server, line);
166
+ });
167
+ // Handle errors
168
+ proc.stderr?.on('data', (data) => {
169
+ logger.error('MCP server stderr output', { server: name, output: data.toString() });
170
+ });
171
+ proc.on('error', (err) => {
172
+ server.status = 'error';
173
+ server.error = err.message;
174
+ // CRITICAL: Reject ALL pending requests before clearing
175
+ const errorMsg = new Error(`MCP server "${name}" process error: ${err.message}`);
176
+ for (const [_id, pending] of server.pendingRequests) {
177
+ pending.reject(errorMsg);
178
+ }
179
+ server.pendingRequests.clear();
180
+ this.emit({ type: 'server.error', name, error: err.message });
181
+ });
182
+ proc.on('exit', (code, signal) => {
183
+ // CRITICAL: Reject ALL pending requests before clearing
184
+ // This prevents orphaned promises that never resolve
185
+ const exitError = new Error(`MCP server "${name}" exited unexpectedly (code: ${code}, signal: ${signal})`);
186
+ for (const [_id, pending] of server.pendingRequests) {
187
+ pending.reject(exitError);
188
+ }
189
+ server.pendingRequests.clear();
190
+ server.status = 'disconnected';
191
+ server.process = null;
192
+ server.readline = null;
193
+ this.emit({ type: 'server.disconnected', name });
194
+ });
195
+ // Initialize the connection
196
+ await this.initializeServer(server);
197
+ server.status = 'connected';
198
+ this.emit({ type: 'server.connected', name, toolCount: server.tools.length });
199
+ }
200
+ catch (err) {
201
+ server.status = 'error';
202
+ server.error = err instanceof Error ? err.message : String(err);
203
+ this.emit({ type: 'server.error', name, error: server.error });
204
+ throw err;
205
+ }
206
+ }
207
+ /**
208
+ * Initialize MCP protocol with server.
209
+ */
210
+ async initializeServer(server) {
211
+ // Send initialize request
212
+ const initResult = await this.sendRequest(server, 'initialize', {
213
+ protocolVersion: '2024-11-05',
214
+ capabilities: {},
215
+ clientInfo: {
216
+ name: 'first-principles-agent',
217
+ version: '1.0.0',
218
+ },
219
+ });
220
+ // Send initialized notification
221
+ this.sendNotification(server, 'notifications/initialized', {});
222
+ // List available tools
223
+ const toolsResult = (await this.sendRequest(server, 'tools/list', {}));
224
+ server.tools = toolsResult.tools || [];
225
+ }
226
+ /**
227
+ * Send a JSON-RPC request and wait for response.
228
+ */
229
+ sendRequest(server, method, params) {
230
+ return new Promise((resolve, reject) => {
231
+ const id = server.nextRequestId++;
232
+ const request = {
233
+ jsonrpc: '2.0',
234
+ id,
235
+ method,
236
+ params,
237
+ };
238
+ server.pendingRequests.set(id, { resolve, reject });
239
+ // Set timeout
240
+ const timeout = setTimeout(() => {
241
+ server.pendingRequests.delete(id);
242
+ reject(MCPError.timeout(server.name, method));
243
+ }, this.config.requestTimeout);
244
+ // Store timeout to clear later
245
+ const originalResolve = resolve;
246
+ server.pendingRequests.set(id, {
247
+ resolve: (result) => {
248
+ clearTimeout(timeout);
249
+ originalResolve(result);
250
+ },
251
+ reject: (error) => {
252
+ clearTimeout(timeout);
253
+ reject(error);
254
+ },
255
+ });
256
+ // Send request
257
+ server.process?.stdin?.write(JSON.stringify(request) + '\n');
258
+ });
259
+ }
260
+ /**
261
+ * Send a JSON-RPC notification (no response expected).
262
+ */
263
+ sendNotification(server, method, params) {
264
+ const notification = {
265
+ jsonrpc: '2.0',
266
+ method,
267
+ params,
268
+ };
269
+ server.process?.stdin?.write(JSON.stringify(notification) + '\n');
270
+ }
271
+ /**
272
+ * Handle incoming message from server.
273
+ */
274
+ handleServerMessage(server, line) {
275
+ let message;
276
+ try {
277
+ message = JSON.parse(line);
278
+ }
279
+ catch (parseError) {
280
+ // Log malformed JSON instead of silently ignoring
281
+ // This helps diagnose protocol desync issues
282
+ const preview = line.length > 100 ? line.substring(0, 100) + '...' : line;
283
+ logger.error('Malformed JSON-RPC message from MCP server', { server: server.name, preview });
284
+ this.emit({
285
+ type: 'server.error',
286
+ name: server.name,
287
+ error: 'Protocol error: malformed JSON',
288
+ });
289
+ return; // Don't crash, just skip this malformed message
290
+ }
291
+ // Handle response
292
+ if (message.id !== undefined) {
293
+ const pending = server.pendingRequests.get(message.id);
294
+ if (pending) {
295
+ server.pendingRequests.delete(message.id);
296
+ if (message.error) {
297
+ pending.reject(new Error(message.error.message || 'Unknown error'));
298
+ }
299
+ else {
300
+ pending.resolve(message.result);
301
+ }
302
+ }
303
+ }
304
+ // Handle notifications from server (if any)
305
+ // MCP servers can send notifications for things like resource updates
306
+ }
307
+ /**
308
+ * Disconnect from a server.
309
+ */
310
+ async disconnectServer(name) {
311
+ const server = this.servers.get(name);
312
+ if (!server) {
313
+ return;
314
+ }
315
+ if (server.process) {
316
+ server.process.kill();
317
+ server.process = null;
318
+ }
319
+ if (server.readline) {
320
+ server.readline.close();
321
+ server.readline = null;
322
+ }
323
+ server.status = 'disconnected';
324
+ server.tools = [];
325
+ this.emit({ type: 'server.disconnected', name });
326
+ }
327
+ /**
328
+ * Call a tool on a specific server.
329
+ * Includes automatic retry for transient failures (timeouts, connection resets).
330
+ */
331
+ async callTool(serverName, toolName, args) {
332
+ const server = this.servers.get(serverName);
333
+ if (!server) {
334
+ throw MCPError.serverNotFound(serverName);
335
+ }
336
+ if (server.status !== 'connected') {
337
+ throw MCPError.serverNotConnected(serverName);
338
+ }
339
+ this.emit({ type: 'tool.call', server: serverName, tool: toolName });
340
+ try {
341
+ // Wrap the request with retry logic for transient failures
342
+ const result = await withRetry(async () => {
343
+ return (await this.sendRequest(server, 'tools/call', {
344
+ name: toolName,
345
+ arguments: args,
346
+ }));
347
+ }, {
348
+ maxAttempts: 2, // Initial + 1 retry
349
+ ...MCP_RETRY_CONFIG,
350
+ onRetry: (attempt, error, delay) => {
351
+ this.emit({
352
+ type: 'tool.call',
353
+ server: serverName,
354
+ tool: toolName,
355
+ // @ts-expect-error Extended event with retry info
356
+ retry: { attempt, error: error.message, delayMs: delay },
357
+ });
358
+ },
359
+ });
360
+ this.emit({ type: 'tool.result', server: serverName, tool: toolName, success: true });
361
+ // Extract text content from result
362
+ const textContent = result.content
363
+ ?.filter((c) => c.type === 'text')
364
+ .map((c) => c.text)
365
+ .join('\n');
366
+ return textContent || result;
367
+ }
368
+ catch (err) {
369
+ this.emit({ type: 'tool.result', server: serverName, tool: toolName, success: false });
370
+ // Write to DLQ if the error is not recoverable (permanent failure)
371
+ if (this.dlq?.isAvailable() && !isRecoverable(err)) {
372
+ try {
373
+ this.dlq.add({
374
+ operation: `mcp:${serverName}:${toolName}`,
375
+ args,
376
+ error: err,
377
+ sessionId: this.sessionId,
378
+ });
379
+ }
380
+ catch {
381
+ // Don't let DLQ errors affect MCP execution
382
+ }
383
+ }
384
+ throw err;
385
+ }
386
+ }
387
+ /**
388
+ * List all servers and their status.
389
+ */
390
+ listServers() {
391
+ return Array.from(this.servers.values()).map((s) => ({
392
+ name: s.name,
393
+ status: s.status,
394
+ toolCount: s.tools.length,
395
+ error: s.error,
396
+ }));
397
+ }
398
+ /**
399
+ * Get tools from a specific server.
400
+ */
401
+ getServerTools(serverName) {
402
+ const server = this.servers.get(serverName);
403
+ return server?.tools || [];
404
+ }
405
+ // ===========================================================================
406
+ // LAZY LOADING METHODS
407
+ // ===========================================================================
408
+ /**
409
+ * Get lightweight summaries for all tools (low token cost).
410
+ * Use this for initial context, then load full definitions on-demand.
411
+ */
412
+ getAllToolSummaries() {
413
+ const summaries = [];
414
+ const descLimit = this.config.summaryDescriptionLimit;
415
+ for (const server of this.servers.values()) {
416
+ if (server.status !== 'connected')
417
+ continue;
418
+ for (const tool of server.tools) {
419
+ const fullName = `mcp_${server.name}_${tool.name}`;
420
+ const desc = tool.description || `MCP tool: ${tool.name}`;
421
+ summaries.push({
422
+ name: fullName,
423
+ description: desc.length > descLimit ? desc.slice(0, descLimit) + '...' : desc,
424
+ serverName: server.name,
425
+ originalName: tool.name,
426
+ });
427
+ }
428
+ }
429
+ return summaries;
430
+ }
431
+ /**
432
+ * Search tools by name or description with BM25-style scoring.
433
+ * Returns matching tool summaries sorted by relevance.
434
+ */
435
+ searchTools(query, options = {}) {
436
+ const { limit = this.config.maxToolsPerSearch, regex = false } = options;
437
+ const summaries = this.getAllToolSummaries();
438
+ if (!query.trim()) {
439
+ return summaries.slice(0, limit);
440
+ }
441
+ // Normalize query
442
+ const queryLower = query.toLowerCase();
443
+ const queryTerms = queryLower.split(/\s+/).filter((t) => t.length > 0);
444
+ // Score each tool
445
+ const scored = summaries.map((summary) => {
446
+ let score = 0;
447
+ const nameLower = summary.name.toLowerCase();
448
+ const descLower = summary.description.toLowerCase();
449
+ const originalLower = summary.originalName.toLowerCase();
450
+ if (regex) {
451
+ try {
452
+ const re = new RegExp(query, 'i');
453
+ if (re.test(summary.name))
454
+ score += 10;
455
+ if (re.test(summary.description))
456
+ score += 5;
457
+ if (re.test(summary.originalName))
458
+ score += 8;
459
+ }
460
+ catch {
461
+ // Invalid regex, fall back to substring matching
462
+ }
463
+ }
464
+ // BM25-style term frequency scoring
465
+ for (const term of queryTerms) {
466
+ // Exact match bonuses
467
+ if (originalLower === term)
468
+ score += 20;
469
+ if (nameLower.includes(term))
470
+ score += 10;
471
+ if (originalLower.includes(term))
472
+ score += 8;
473
+ if (descLower.includes(term))
474
+ score += 3;
475
+ // Partial match (prefix)
476
+ if (originalLower.startsWith(term))
477
+ score += 5;
478
+ }
479
+ // Boost if all terms appear
480
+ const allTermsInName = queryTerms.every((t) => nameLower.includes(t));
481
+ const allTermsInDesc = queryTerms.every((t) => descLower.includes(t));
482
+ if (allTermsInName)
483
+ score += 15;
484
+ if (allTermsInDesc)
485
+ score += 5;
486
+ return { summary, score };
487
+ });
488
+ // Filter and sort by score
489
+ const results = scored
490
+ .filter((s) => s.score > 0)
491
+ .sort((a, b) => b.score - a.score)
492
+ .slice(0, limit)
493
+ .map((s) => s.summary);
494
+ this.emit({ type: 'tool.search', query, resultCount: results.length });
495
+ return results;
496
+ }
497
+ /**
498
+ * Get full tool definition for a specific tool.
499
+ * Marks the tool as loaded for context tracking.
500
+ */
501
+ getFullToolDefinition(toolName) {
502
+ // Parse tool name: mcp_{serverName}_{originalToolName}
503
+ const match = toolName.match(/^mcp_([^_]+)_(.+)$/);
504
+ if (!match)
505
+ return null;
506
+ const [, serverName, originalName] = match;
507
+ const server = this.servers.get(serverName);
508
+ if (!server || server.status !== 'connected')
509
+ return null;
510
+ const mcpTool = server.tools.find((t) => t.name === originalName);
511
+ if (!mcpTool)
512
+ return null;
513
+ // Mark as loaded
514
+ server.loadedTools.add(originalName);
515
+ this.emit({ type: 'tool.dynamicLoad', name: toolName, serverName });
516
+ return {
517
+ name: toolName,
518
+ description: mcpTool.description || `MCP tool: ${mcpTool.name} (from ${serverName})`,
519
+ parameters: mcpTool.inputSchema || {
520
+ type: 'object',
521
+ properties: {},
522
+ },
523
+ execute: async (args) => {
524
+ return this.callTool(serverName, originalName, args);
525
+ },
526
+ };
527
+ }
528
+ /**
529
+ * Batch load multiple tools by name.
530
+ * Returns array of loaded ToolDefinitions.
531
+ */
532
+ loadTools(toolNames) {
533
+ const loaded = [];
534
+ for (const name of toolNames) {
535
+ const tool = this.getFullToolDefinition(name);
536
+ if (tool) {
537
+ loaded.push(tool);
538
+ }
539
+ }
540
+ return loaded;
541
+ }
542
+ /**
543
+ * Get context statistics for MCP tools.
544
+ * Useful for monitoring token usage with lazy loading.
545
+ */
546
+ getContextStats() {
547
+ let summaryCount = 0;
548
+ let loadedCount = 0;
549
+ let summaryTokens = 0;
550
+ let definitionTokens = 0;
551
+ for (const server of this.servers.values()) {
552
+ if (server.status !== 'connected')
553
+ continue;
554
+ for (const tool of server.tools) {
555
+ const isLoaded = server.loadedTools.has(tool.name);
556
+ if (isLoaded) {
557
+ loadedCount++;
558
+ // Full definition tokens: name + description + schema
559
+ const schemaStr = tool.inputSchema ? JSON.stringify(tool.inputSchema) : '{}';
560
+ const defChars = tool.name.length + (tool.description?.length || 0) + schemaStr.length;
561
+ definitionTokens += Math.ceil(defChars / 4); // ~4 chars per token
562
+ }
563
+ else {
564
+ summaryCount++;
565
+ // Summary tokens: name + truncated description
566
+ const descLen = Math.min(tool.description?.length || 0, this.config.summaryDescriptionLimit);
567
+ const sumChars = tool.name.length + descLen + server.name.length;
568
+ summaryTokens += Math.ceil(sumChars / 4);
569
+ }
570
+ }
571
+ }
572
+ return {
573
+ summaryTokens,
574
+ definitionTokens,
575
+ summaryCount,
576
+ loadedCount,
577
+ totalTools: summaryCount + loadedCount,
578
+ };
579
+ }
580
+ /**
581
+ * Check if a tool is fully loaded (has schema in context).
582
+ */
583
+ isToolLoaded(toolName) {
584
+ const match = toolName.match(/^mcp_([^_]+)_(.+)$/);
585
+ if (!match)
586
+ return false;
587
+ const [, serverName, originalName] = match;
588
+ const server = this.servers.get(serverName);
589
+ return server?.loadedTools.has(originalName) ?? false;
590
+ }
591
+ /**
592
+ * Get all tools with lazy loading support.
593
+ * When lazyMode is true, only returns always-loaded tools + previously loaded tools.
594
+ * When lazyMode is false (default), returns all tools with full definitions.
595
+ */
596
+ getAllTools(options = {}) {
597
+ const { lazyMode = this.config.lazyLoading } = options;
598
+ if (!lazyMode) {
599
+ // Original behavior: return all tools with full definitions
600
+ const tools = [];
601
+ for (const server of this.servers.values()) {
602
+ if (server.status !== 'connected')
603
+ continue;
604
+ for (const tool of server.tools) {
605
+ tools.push({
606
+ name: `mcp_${server.name}_${tool.name}`,
607
+ description: tool.description || `MCP tool: ${tool.name} (from ${server.name})`,
608
+ parameters: tool.inputSchema || {
609
+ type: 'object',
610
+ properties: {},
611
+ },
612
+ execute: async (args) => {
613
+ return this.callTool(server.name, tool.name, args);
614
+ },
615
+ });
616
+ }
617
+ }
618
+ // Validate tool descriptions (non-invasive: logs warnings, doesn't reject tools)
619
+ if (tools.length > 0) {
620
+ try {
621
+ const results = validateAllTools(tools);
622
+ const poor = results.filter((r) => r.score < 50);
623
+ if (poor.length > 0) {
624
+ logger.warn('MCP tool quality issues detected', {
625
+ poorCount: poor.length,
626
+ totalCount: tools.length,
627
+ summary: formatValidationSummary(poor),
628
+ });
629
+ }
630
+ }
631
+ catch {
632
+ // Validation is optional — don't fail if module has issues
633
+ }
634
+ }
635
+ return tools;
636
+ }
637
+ // Lazy mode: only return always-loaded tools + previously loaded tools
638
+ const tools = [];
639
+ for (const server of this.servers.values()) {
640
+ if (server.status !== 'connected')
641
+ continue;
642
+ for (const tool of server.tools) {
643
+ const fullName = `mcp_${server.name}_${tool.name}`;
644
+ const isAlwaysLoaded = this.config.alwaysLoadTools.some((pattern) => fullName.includes(pattern) || tool.name.includes(pattern));
645
+ const isPreviouslyLoaded = server.loadedTools.has(tool.name);
646
+ if (isAlwaysLoaded || isPreviouslyLoaded) {
647
+ // Mark as loaded
648
+ server.loadedTools.add(tool.name);
649
+ tools.push({
650
+ name: fullName,
651
+ description: tool.description || `MCP tool: ${tool.name} (from ${server.name})`,
652
+ parameters: tool.inputSchema || {
653
+ type: 'object',
654
+ properties: {},
655
+ },
656
+ execute: async (args) => {
657
+ return this.callTool(server.name, tool.name, args);
658
+ },
659
+ });
660
+ }
661
+ }
662
+ }
663
+ return tools;
664
+ }
665
+ /**
666
+ * Check if a server is connected.
667
+ */
668
+ isConnected(serverName) {
669
+ const server = this.servers.get(serverName);
670
+ return server?.status === 'connected';
671
+ }
672
+ /**
673
+ * Subscribe to events.
674
+ */
675
+ on(listener) {
676
+ this.listeners.push(listener);
677
+ return () => {
678
+ const idx = this.listeners.indexOf(listener);
679
+ if (idx >= 0)
680
+ this.listeners.splice(idx, 1);
681
+ };
682
+ }
683
+ /**
684
+ * Set the dead letter queue for failed operation tracking.
685
+ * When set, permanent failures will be logged to the DLQ for later retry.
686
+ */
687
+ setDeadLetterQueue(dlq, sessionId) {
688
+ this.dlq = dlq;
689
+ this.sessionId = sessionId;
690
+ }
691
+ /**
692
+ * Emit an event.
693
+ */
694
+ emit(event) {
695
+ for (const listener of this.listeners) {
696
+ try {
697
+ listener(event);
698
+ }
699
+ catch {
700
+ // Ignore listener errors
701
+ }
702
+ }
703
+ }
704
+ /**
705
+ * Cleanup - disconnect all servers.
706
+ */
707
+ async cleanup() {
708
+ for (const name of this.servers.keys()) {
709
+ await this.disconnectServer(name);
710
+ }
711
+ this.servers.clear();
712
+ }
713
+ }
714
+ // =============================================================================
715
+ // FACTORY
716
+ // =============================================================================
717
+ /**
718
+ * Create and initialize an MCP client.
719
+ */
720
+ export async function createMCPClient(config) {
721
+ const client = new MCPClient(config);
722
+ // Use hierarchical loading if configPaths provided, otherwise single config
723
+ if (config?.configPaths && config.configPaths.length > 0) {
724
+ await client.loadFromHierarchicalConfigs(config.configPaths);
725
+ }
726
+ else {
727
+ await client.loadFromConfig();
728
+ }
729
+ return client;
730
+ }
731
+ // =============================================================================
732
+ // UTILITIES
733
+ // =============================================================================
734
+ /**
735
+ * Format server list for display.
736
+ */
737
+ export function formatServerList(servers) {
738
+ if (servers.length === 0) {
739
+ return 'No MCP servers configured.';
740
+ }
741
+ const lines = ['MCP Servers:'];
742
+ for (const server of servers) {
743
+ const statusIcon = server.status === 'connected' ? '✓' : server.status === 'error' ? '✗' : '○';
744
+ const statusColor = server.status === 'connected' ? 'green' : server.status === 'error' ? 'red' : 'dim';
745
+ lines.push(` ${statusIcon} ${server.name} (${server.status}) - ${server.toolCount} tools`);
746
+ if (server.error) {
747
+ lines.push(` Error: ${server.error}`);
748
+ }
749
+ }
750
+ return lines.join('\n');
751
+ }
752
+ /**
753
+ * Create a sample .mcp.json config file content.
754
+ */
755
+ export function getSampleMCPConfig() {
756
+ return JSON.stringify({
757
+ servers: {
758
+ filesystem: {
759
+ command: 'npx',
760
+ args: ['-y', '@anthropic/mcp-server-filesystem', '/path/to/allowed/dir'],
761
+ },
762
+ sqlite: {
763
+ command: 'npx',
764
+ args: ['-y', '@anthropic/mcp-server-sqlite', '~/database.db'],
765
+ },
766
+ github: {
767
+ command: 'npx',
768
+ args: ['-y', '@anthropic/mcp-server-github'],
769
+ env: {
770
+ GITHUB_TOKEN: '${GITHUB_TOKEN}',
771
+ },
772
+ },
773
+ },
774
+ }, null, 2);
775
+ }
776
+ //# sourceMappingURL=mcp-client.js.map