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,755 @@
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', { server: name, error: String(err.message) });
57
+ });
58
+ }
59
+ }
60
+ }
61
+ catch (err) {
62
+ logger.warn('Failed to load MCP config', { path, error: String(err) });
63
+ }
64
+ }
65
+ /**
66
+ * Load servers from multiple config files (hierarchical).
67
+ * Later configs override earlier ones for the same server name.
68
+ * Servers from all configs are merged together.
69
+ */
70
+ async loadFromHierarchicalConfigs(configPaths) {
71
+ const mergedServers = {};
72
+ // Load and merge all configs
73
+ for (const configPath of configPaths) {
74
+ if (!existsSync(configPath)) {
75
+ continue;
76
+ }
77
+ try {
78
+ const content = await readFile(configPath, 'utf-8');
79
+ const mcpConfig = JSON.parse(content);
80
+ // Merge servers (later overrides earlier)
81
+ for (const [name, serverConfig] of Object.entries(mcpConfig.servers)) {
82
+ mergedServers[name] = this.expandEnvVars(serverConfig);
83
+ }
84
+ }
85
+ catch (err) {
86
+ logger.warn('Failed to load MCP config', { configPath, error: String(err) });
87
+ }
88
+ }
89
+ // Register all merged servers
90
+ for (const [name, config] of Object.entries(mergedServers)) {
91
+ this.registerServer(name, config);
92
+ if (this.config.autoConnect) {
93
+ await this.connectServer(name).catch(err => {
94
+ logger.warn('Failed to connect to MCP server', { server: name, error: String(err.message) });
95
+ });
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Expand environment variables in config.
101
+ */
102
+ expandEnvVars(config) {
103
+ const expand = (str) => {
104
+ return str.replace(/\$\{(\w+)\}/g, (_, name) => process.env[name] || '');
105
+ };
106
+ return {
107
+ command: expand(config.command),
108
+ args: config.args?.map(expand),
109
+ env: config.env
110
+ ? Object.fromEntries(Object.entries(config.env).map(([k, v]) => [k, expand(v)]))
111
+ : undefined,
112
+ cwd: config.cwd ? expand(config.cwd) : undefined,
113
+ };
114
+ }
115
+ /**
116
+ * Register a server (without connecting).
117
+ */
118
+ registerServer(name, config) {
119
+ this.servers.set(name, {
120
+ name,
121
+ config,
122
+ process: null,
123
+ readline: null,
124
+ tools: [],
125
+ status: 'disconnected',
126
+ pendingRequests: new Map(),
127
+ nextRequestId: 1,
128
+ loadedTools: new Set(),
129
+ });
130
+ }
131
+ /**
132
+ * Connect to a registered server.
133
+ */
134
+ async connectServer(name) {
135
+ const server = this.servers.get(name);
136
+ if (!server) {
137
+ throw MCPError.serverNotFound(name);
138
+ }
139
+ if (server.status === 'connected') {
140
+ return; // Already connected
141
+ }
142
+ server.status = 'connecting';
143
+ this.emit({ type: 'server.connecting', name });
144
+ try {
145
+ // Spawn the server process
146
+ const proc = spawn(server.config.command, server.config.args || [], {
147
+ env: { ...process.env, ...server.config.env },
148
+ cwd: server.config.cwd,
149
+ stdio: ['pipe', 'pipe', 'pipe'],
150
+ });
151
+ server.process = proc;
152
+ // Set up readline for stdout
153
+ server.readline = createInterface({
154
+ input: proc.stdout,
155
+ crlfDelay: Infinity,
156
+ });
157
+ // Handle incoming messages
158
+ server.readline.on('line', (line) => {
159
+ this.handleServerMessage(server, line);
160
+ });
161
+ // Handle errors
162
+ proc.stderr?.on('data', (data) => {
163
+ logger.error('MCP server stderr output', { server: name, output: data.toString() });
164
+ });
165
+ proc.on('error', (err) => {
166
+ server.status = 'error';
167
+ server.error = err.message;
168
+ // CRITICAL: Reject ALL pending requests before clearing
169
+ const errorMsg = new Error(`MCP server "${name}" process error: ${err.message}`);
170
+ for (const [_id, pending] of server.pendingRequests) {
171
+ pending.reject(errorMsg);
172
+ }
173
+ server.pendingRequests.clear();
174
+ this.emit({ type: 'server.error', name, error: err.message });
175
+ });
176
+ proc.on('exit', (code, signal) => {
177
+ // CRITICAL: Reject ALL pending requests before clearing
178
+ // This prevents orphaned promises that never resolve
179
+ const exitError = new Error(`MCP server "${name}" exited unexpectedly (code: ${code}, signal: ${signal})`);
180
+ for (const [_id, pending] of server.pendingRequests) {
181
+ pending.reject(exitError);
182
+ }
183
+ server.pendingRequests.clear();
184
+ server.status = 'disconnected';
185
+ server.process = null;
186
+ server.readline = null;
187
+ this.emit({ type: 'server.disconnected', name });
188
+ });
189
+ // Initialize the connection
190
+ await this.initializeServer(server);
191
+ server.status = 'connected';
192
+ this.emit({ type: 'server.connected', name, toolCount: server.tools.length });
193
+ }
194
+ catch (err) {
195
+ server.status = 'error';
196
+ server.error = err instanceof Error ? err.message : String(err);
197
+ this.emit({ type: 'server.error', name, error: server.error });
198
+ throw err;
199
+ }
200
+ }
201
+ /**
202
+ * Initialize MCP protocol with server.
203
+ */
204
+ async initializeServer(server) {
205
+ // Send initialize request
206
+ const initResult = await this.sendRequest(server, 'initialize', {
207
+ protocolVersion: '2024-11-05',
208
+ capabilities: {},
209
+ clientInfo: {
210
+ name: 'first-principles-agent',
211
+ version: '1.0.0',
212
+ },
213
+ });
214
+ // Send initialized notification
215
+ this.sendNotification(server, 'notifications/initialized', {});
216
+ // List available tools
217
+ const toolsResult = await this.sendRequest(server, 'tools/list', {});
218
+ server.tools = toolsResult.tools || [];
219
+ }
220
+ /**
221
+ * Send a JSON-RPC request and wait for response.
222
+ */
223
+ sendRequest(server, method, params) {
224
+ return new Promise((resolve, reject) => {
225
+ const id = server.nextRequestId++;
226
+ const request = {
227
+ jsonrpc: '2.0',
228
+ id,
229
+ method,
230
+ params,
231
+ };
232
+ server.pendingRequests.set(id, { resolve, reject });
233
+ // Set timeout
234
+ const timeout = setTimeout(() => {
235
+ server.pendingRequests.delete(id);
236
+ reject(MCPError.timeout(server.name, method));
237
+ }, this.config.requestTimeout);
238
+ // Store timeout to clear later
239
+ const originalResolve = resolve;
240
+ server.pendingRequests.set(id, {
241
+ resolve: (result) => {
242
+ clearTimeout(timeout);
243
+ originalResolve(result);
244
+ },
245
+ reject: (error) => {
246
+ clearTimeout(timeout);
247
+ reject(error);
248
+ },
249
+ });
250
+ // Send request
251
+ server.process?.stdin?.write(JSON.stringify(request) + '\n');
252
+ });
253
+ }
254
+ /**
255
+ * Send a JSON-RPC notification (no response expected).
256
+ */
257
+ sendNotification(server, method, params) {
258
+ const notification = {
259
+ jsonrpc: '2.0',
260
+ method,
261
+ params,
262
+ };
263
+ server.process?.stdin?.write(JSON.stringify(notification) + '\n');
264
+ }
265
+ /**
266
+ * Handle incoming message from server.
267
+ */
268
+ handleServerMessage(server, line) {
269
+ let message;
270
+ try {
271
+ message = JSON.parse(line);
272
+ }
273
+ catch (parseError) {
274
+ // Log malformed JSON instead of silently ignoring
275
+ // This helps diagnose protocol desync issues
276
+ const preview = line.length > 100 ? line.substring(0, 100) + '...' : line;
277
+ logger.error('Malformed JSON-RPC message from MCP server', { server: server.name, preview });
278
+ this.emit({ type: 'server.error', name: server.name, error: 'Protocol error: malformed JSON' });
279
+ return; // Don't crash, just skip this malformed message
280
+ }
281
+ // Handle response
282
+ if (message.id !== undefined) {
283
+ const pending = server.pendingRequests.get(message.id);
284
+ if (pending) {
285
+ server.pendingRequests.delete(message.id);
286
+ if (message.error) {
287
+ pending.reject(new Error(message.error.message || 'Unknown error'));
288
+ }
289
+ else {
290
+ pending.resolve(message.result);
291
+ }
292
+ }
293
+ }
294
+ // Handle notifications from server (if any)
295
+ // MCP servers can send notifications for things like resource updates
296
+ }
297
+ /**
298
+ * Disconnect from a server.
299
+ */
300
+ async disconnectServer(name) {
301
+ const server = this.servers.get(name);
302
+ if (!server) {
303
+ return;
304
+ }
305
+ if (server.process) {
306
+ server.process.kill();
307
+ server.process = null;
308
+ }
309
+ if (server.readline) {
310
+ server.readline.close();
311
+ server.readline = null;
312
+ }
313
+ server.status = 'disconnected';
314
+ server.tools = [];
315
+ this.emit({ type: 'server.disconnected', name });
316
+ }
317
+ /**
318
+ * Call a tool on a specific server.
319
+ * Includes automatic retry for transient failures (timeouts, connection resets).
320
+ */
321
+ async callTool(serverName, toolName, args) {
322
+ const server = this.servers.get(serverName);
323
+ if (!server) {
324
+ throw MCPError.serverNotFound(serverName);
325
+ }
326
+ if (server.status !== 'connected') {
327
+ throw MCPError.serverNotConnected(serverName);
328
+ }
329
+ this.emit({ type: 'tool.call', server: serverName, tool: toolName });
330
+ try {
331
+ // Wrap the request with retry logic for transient failures
332
+ const result = await withRetry(async () => {
333
+ return await this.sendRequest(server, 'tools/call', {
334
+ name: toolName,
335
+ arguments: args,
336
+ });
337
+ }, {
338
+ maxAttempts: 2, // Initial + 1 retry
339
+ ...MCP_RETRY_CONFIG,
340
+ onRetry: (attempt, error, delay) => {
341
+ this.emit({
342
+ type: 'tool.call',
343
+ server: serverName,
344
+ tool: toolName,
345
+ // @ts-expect-error Extended event with retry info
346
+ retry: { attempt, error: error.message, delayMs: delay },
347
+ });
348
+ },
349
+ });
350
+ this.emit({ type: 'tool.result', server: serverName, tool: toolName, success: true });
351
+ // Extract text content from result
352
+ const textContent = result.content
353
+ ?.filter(c => c.type === 'text')
354
+ .map(c => c.text)
355
+ .join('\n');
356
+ return textContent || result;
357
+ }
358
+ catch (err) {
359
+ this.emit({ type: 'tool.result', server: serverName, tool: toolName, success: false });
360
+ // Write to DLQ if the error is not recoverable (permanent failure)
361
+ if (this.dlq?.isAvailable() && !isRecoverable(err)) {
362
+ try {
363
+ this.dlq.add({
364
+ operation: `mcp:${serverName}:${toolName}`,
365
+ args,
366
+ error: err,
367
+ sessionId: this.sessionId,
368
+ });
369
+ }
370
+ catch {
371
+ // Don't let DLQ errors affect MCP execution
372
+ }
373
+ }
374
+ throw err;
375
+ }
376
+ }
377
+ /**
378
+ * List all servers and their status.
379
+ */
380
+ listServers() {
381
+ return Array.from(this.servers.values()).map(s => ({
382
+ name: s.name,
383
+ status: s.status,
384
+ toolCount: s.tools.length,
385
+ error: s.error,
386
+ }));
387
+ }
388
+ /**
389
+ * Get tools from a specific server.
390
+ */
391
+ getServerTools(serverName) {
392
+ const server = this.servers.get(serverName);
393
+ return server?.tools || [];
394
+ }
395
+ // ===========================================================================
396
+ // LAZY LOADING METHODS
397
+ // ===========================================================================
398
+ /**
399
+ * Get lightweight summaries for all tools (low token cost).
400
+ * Use this for initial context, then load full definitions on-demand.
401
+ */
402
+ getAllToolSummaries() {
403
+ const summaries = [];
404
+ const descLimit = this.config.summaryDescriptionLimit;
405
+ for (const server of this.servers.values()) {
406
+ if (server.status !== 'connected')
407
+ continue;
408
+ for (const tool of server.tools) {
409
+ const fullName = `mcp_${server.name}_${tool.name}`;
410
+ const desc = tool.description || `MCP tool: ${tool.name}`;
411
+ summaries.push({
412
+ name: fullName,
413
+ description: desc.length > descLimit ? desc.slice(0, descLimit) + '...' : desc,
414
+ serverName: server.name,
415
+ originalName: tool.name,
416
+ });
417
+ }
418
+ }
419
+ return summaries;
420
+ }
421
+ /**
422
+ * Search tools by name or description with BM25-style scoring.
423
+ * Returns matching tool summaries sorted by relevance.
424
+ */
425
+ searchTools(query, options = {}) {
426
+ const { limit = this.config.maxToolsPerSearch, regex = false } = options;
427
+ const summaries = this.getAllToolSummaries();
428
+ if (!query.trim()) {
429
+ return summaries.slice(0, limit);
430
+ }
431
+ // Normalize query
432
+ const queryLower = query.toLowerCase();
433
+ const queryTerms = queryLower.split(/\s+/).filter(t => t.length > 0);
434
+ // Score each tool
435
+ const scored = summaries.map(summary => {
436
+ let score = 0;
437
+ const nameLower = summary.name.toLowerCase();
438
+ const descLower = summary.description.toLowerCase();
439
+ const originalLower = summary.originalName.toLowerCase();
440
+ if (regex) {
441
+ try {
442
+ const re = new RegExp(query, 'i');
443
+ if (re.test(summary.name))
444
+ score += 10;
445
+ if (re.test(summary.description))
446
+ score += 5;
447
+ if (re.test(summary.originalName))
448
+ score += 8;
449
+ }
450
+ catch {
451
+ // Invalid regex, fall back to substring matching
452
+ }
453
+ }
454
+ // BM25-style term frequency scoring
455
+ for (const term of queryTerms) {
456
+ // Exact match bonuses
457
+ if (originalLower === term)
458
+ score += 20;
459
+ if (nameLower.includes(term))
460
+ score += 10;
461
+ if (originalLower.includes(term))
462
+ score += 8;
463
+ if (descLower.includes(term))
464
+ score += 3;
465
+ // Partial match (prefix)
466
+ if (originalLower.startsWith(term))
467
+ score += 5;
468
+ }
469
+ // Boost if all terms appear
470
+ const allTermsInName = queryTerms.every(t => nameLower.includes(t));
471
+ const allTermsInDesc = queryTerms.every(t => descLower.includes(t));
472
+ if (allTermsInName)
473
+ score += 15;
474
+ if (allTermsInDesc)
475
+ score += 5;
476
+ return { summary, score };
477
+ });
478
+ // Filter and sort by score
479
+ const results = scored
480
+ .filter(s => s.score > 0)
481
+ .sort((a, b) => b.score - a.score)
482
+ .slice(0, limit)
483
+ .map(s => s.summary);
484
+ this.emit({ type: 'tool.search', query, resultCount: results.length });
485
+ return results;
486
+ }
487
+ /**
488
+ * Get full tool definition for a specific tool.
489
+ * Marks the tool as loaded for context tracking.
490
+ */
491
+ getFullToolDefinition(toolName) {
492
+ // Parse tool name: mcp_{serverName}_{originalToolName}
493
+ const match = toolName.match(/^mcp_([^_]+)_(.+)$/);
494
+ if (!match)
495
+ return null;
496
+ const [, serverName, originalName] = match;
497
+ const server = this.servers.get(serverName);
498
+ if (!server || server.status !== 'connected')
499
+ return null;
500
+ const mcpTool = server.tools.find(t => t.name === originalName);
501
+ if (!mcpTool)
502
+ return null;
503
+ // Mark as loaded
504
+ server.loadedTools.add(originalName);
505
+ this.emit({ type: 'tool.dynamicLoad', name: toolName, serverName });
506
+ return {
507
+ name: toolName,
508
+ description: mcpTool.description || `MCP tool: ${mcpTool.name} (from ${serverName})`,
509
+ parameters: mcpTool.inputSchema || { type: 'object', properties: {} },
510
+ execute: async (args) => {
511
+ return this.callTool(serverName, originalName, args);
512
+ },
513
+ };
514
+ }
515
+ /**
516
+ * Batch load multiple tools by name.
517
+ * Returns array of loaded ToolDefinitions.
518
+ */
519
+ loadTools(toolNames) {
520
+ const loaded = [];
521
+ for (const name of toolNames) {
522
+ const tool = this.getFullToolDefinition(name);
523
+ if (tool) {
524
+ loaded.push(tool);
525
+ }
526
+ }
527
+ return loaded;
528
+ }
529
+ /**
530
+ * Get context statistics for MCP tools.
531
+ * Useful for monitoring token usage with lazy loading.
532
+ */
533
+ getContextStats() {
534
+ let summaryCount = 0;
535
+ let loadedCount = 0;
536
+ let summaryTokens = 0;
537
+ let definitionTokens = 0;
538
+ for (const server of this.servers.values()) {
539
+ if (server.status !== 'connected')
540
+ continue;
541
+ for (const tool of server.tools) {
542
+ const isLoaded = server.loadedTools.has(tool.name);
543
+ if (isLoaded) {
544
+ loadedCount++;
545
+ // Full definition tokens: name + description + schema
546
+ const schemaStr = tool.inputSchema ? JSON.stringify(tool.inputSchema) : '{}';
547
+ const defChars = (tool.name.length) +
548
+ (tool.description?.length || 0) +
549
+ schemaStr.length;
550
+ definitionTokens += Math.ceil(defChars / 4); // ~4 chars per token
551
+ }
552
+ else {
553
+ summaryCount++;
554
+ // Summary tokens: name + truncated description
555
+ const descLen = Math.min(tool.description?.length || 0, this.config.summaryDescriptionLimit);
556
+ const sumChars = tool.name.length + descLen + server.name.length;
557
+ summaryTokens += Math.ceil(sumChars / 4);
558
+ }
559
+ }
560
+ }
561
+ return {
562
+ summaryTokens,
563
+ definitionTokens,
564
+ summaryCount,
565
+ loadedCount,
566
+ totalTools: summaryCount + loadedCount,
567
+ };
568
+ }
569
+ /**
570
+ * Check if a tool is fully loaded (has schema in context).
571
+ */
572
+ isToolLoaded(toolName) {
573
+ const match = toolName.match(/^mcp_([^_]+)_(.+)$/);
574
+ if (!match)
575
+ return false;
576
+ const [, serverName, originalName] = match;
577
+ const server = this.servers.get(serverName);
578
+ return server?.loadedTools.has(originalName) ?? false;
579
+ }
580
+ /**
581
+ * Get all tools with lazy loading support.
582
+ * When lazyMode is true, only returns always-loaded tools + previously loaded tools.
583
+ * When lazyMode is false (default), returns all tools with full definitions.
584
+ */
585
+ getAllTools(options = {}) {
586
+ const { lazyMode = this.config.lazyLoading } = options;
587
+ if (!lazyMode) {
588
+ // Original behavior: return all tools with full definitions
589
+ const tools = [];
590
+ for (const server of this.servers.values()) {
591
+ if (server.status !== 'connected')
592
+ continue;
593
+ for (const tool of server.tools) {
594
+ tools.push({
595
+ name: `mcp_${server.name}_${tool.name}`,
596
+ description: tool.description || `MCP tool: ${tool.name} (from ${server.name})`,
597
+ parameters: tool.inputSchema || { type: 'object', properties: {} },
598
+ execute: async (args) => {
599
+ return this.callTool(server.name, tool.name, args);
600
+ },
601
+ });
602
+ }
603
+ }
604
+ // Validate tool descriptions (non-invasive: logs warnings, doesn't reject tools)
605
+ if (tools.length > 0) {
606
+ try {
607
+ const results = validateAllTools(tools);
608
+ const poor = results.filter(r => r.score < 50);
609
+ if (poor.length > 0) {
610
+ logger.warn('MCP tool quality issues detected', { poorCount: poor.length, totalCount: tools.length, summary: formatValidationSummary(poor) });
611
+ }
612
+ }
613
+ catch {
614
+ // Validation is optional — don't fail if module has issues
615
+ }
616
+ }
617
+ return tools;
618
+ }
619
+ // Lazy mode: only return always-loaded tools + previously loaded tools
620
+ const tools = [];
621
+ for (const server of this.servers.values()) {
622
+ if (server.status !== 'connected')
623
+ continue;
624
+ for (const tool of server.tools) {
625
+ const fullName = `mcp_${server.name}_${tool.name}`;
626
+ const isAlwaysLoaded = this.config.alwaysLoadTools.some(pattern => fullName.includes(pattern) || tool.name.includes(pattern));
627
+ const isPreviouslyLoaded = server.loadedTools.has(tool.name);
628
+ if (isAlwaysLoaded || isPreviouslyLoaded) {
629
+ // Mark as loaded
630
+ server.loadedTools.add(tool.name);
631
+ tools.push({
632
+ name: fullName,
633
+ description: tool.description || `MCP tool: ${tool.name} (from ${server.name})`,
634
+ parameters: tool.inputSchema || { type: 'object', properties: {} },
635
+ execute: async (args) => {
636
+ return this.callTool(server.name, tool.name, args);
637
+ },
638
+ });
639
+ }
640
+ }
641
+ }
642
+ return tools;
643
+ }
644
+ /**
645
+ * Check if a server is connected.
646
+ */
647
+ isConnected(serverName) {
648
+ const server = this.servers.get(serverName);
649
+ return server?.status === 'connected';
650
+ }
651
+ /**
652
+ * Subscribe to events.
653
+ */
654
+ on(listener) {
655
+ this.listeners.push(listener);
656
+ return () => {
657
+ const idx = this.listeners.indexOf(listener);
658
+ if (idx >= 0)
659
+ this.listeners.splice(idx, 1);
660
+ };
661
+ }
662
+ /**
663
+ * Set the dead letter queue for failed operation tracking.
664
+ * When set, permanent failures will be logged to the DLQ for later retry.
665
+ */
666
+ setDeadLetterQueue(dlq, sessionId) {
667
+ this.dlq = dlq;
668
+ this.sessionId = sessionId;
669
+ }
670
+ /**
671
+ * Emit an event.
672
+ */
673
+ emit(event) {
674
+ for (const listener of this.listeners) {
675
+ try {
676
+ listener(event);
677
+ }
678
+ catch {
679
+ // Ignore listener errors
680
+ }
681
+ }
682
+ }
683
+ /**
684
+ * Cleanup - disconnect all servers.
685
+ */
686
+ async cleanup() {
687
+ for (const name of this.servers.keys()) {
688
+ await this.disconnectServer(name);
689
+ }
690
+ this.servers.clear();
691
+ }
692
+ }
693
+ // =============================================================================
694
+ // FACTORY
695
+ // =============================================================================
696
+ /**
697
+ * Create and initialize an MCP client.
698
+ */
699
+ export async function createMCPClient(config) {
700
+ const client = new MCPClient(config);
701
+ // Use hierarchical loading if configPaths provided, otherwise single config
702
+ if (config?.configPaths && config.configPaths.length > 0) {
703
+ await client.loadFromHierarchicalConfigs(config.configPaths);
704
+ }
705
+ else {
706
+ await client.loadFromConfig();
707
+ }
708
+ return client;
709
+ }
710
+ // =============================================================================
711
+ // UTILITIES
712
+ // =============================================================================
713
+ /**
714
+ * Format server list for display.
715
+ */
716
+ export function formatServerList(servers) {
717
+ if (servers.length === 0) {
718
+ return 'No MCP servers configured.';
719
+ }
720
+ const lines = ['MCP Servers:'];
721
+ for (const server of servers) {
722
+ const statusIcon = server.status === 'connected' ? '✓' : server.status === 'error' ? '✗' : '○';
723
+ const statusColor = server.status === 'connected' ? 'green' : server.status === 'error' ? 'red' : 'dim';
724
+ lines.push(` ${statusIcon} ${server.name} (${server.status}) - ${server.toolCount} tools`);
725
+ if (server.error) {
726
+ lines.push(` Error: ${server.error}`);
727
+ }
728
+ }
729
+ return lines.join('\n');
730
+ }
731
+ /**
732
+ * Create a sample .mcp.json config file content.
733
+ */
734
+ export function getSampleMCPConfig() {
735
+ return JSON.stringify({
736
+ servers: {
737
+ filesystem: {
738
+ command: 'npx',
739
+ args: ['-y', '@anthropic/mcp-server-filesystem', '/path/to/allowed/dir'],
740
+ },
741
+ sqlite: {
742
+ command: 'npx',
743
+ args: ['-y', '@anthropic/mcp-server-sqlite', '~/database.db'],
744
+ },
745
+ github: {
746
+ command: 'npx',
747
+ args: ['-y', '@anthropic/mcp-server-github'],
748
+ env: {
749
+ GITHUB_TOKEN: '${GITHUB_TOKEN}',
750
+ },
751
+ },
752
+ },
753
+ }, null, 2);
754
+ }
755
+ //# sourceMappingURL=mcp-client.js.map