@claude-flow/cli 3.32.2 → 3.32.3

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 (655) hide show
  1. package/.claude/helpers/helpers.manifest.json +3 -3
  2. package/.claude/helpers/statusline.cjs +38 -38
  3. package/catalog-manifest.json +2 -2
  4. package/package.json +2 -2
  5. package/plugins/ruflo-metaharness/scripts/smoke.sh +11 -11
  6. package/dist/src/agenticow/speculative-exploration.d.ts +0 -148
  7. package/dist/src/agenticow/speculative-exploration.js +0 -218
  8. package/dist/src/appliance/gguf-engine.d.ts +0 -91
  9. package/dist/src/appliance/gguf-engine.js +0 -425
  10. package/dist/src/appliance/ruvllm-bridge.d.ts +0 -102
  11. package/dist/src/appliance/ruvllm-bridge.js +0 -292
  12. package/dist/src/appliance/rvfa-builder.d.ts +0 -44
  13. package/dist/src/appliance/rvfa-builder.js +0 -329
  14. package/dist/src/appliance/rvfa-distribution.d.ts +0 -97
  15. package/dist/src/appliance/rvfa-distribution.js +0 -370
  16. package/dist/src/appliance/rvfa-format.d.ts +0 -111
  17. package/dist/src/appliance/rvfa-format.js +0 -393
  18. package/dist/src/appliance/rvfa-runner.d.ts +0 -69
  19. package/dist/src/appliance/rvfa-runner.js +0 -237
  20. package/dist/src/appliance/rvfa-signing.d.ts +0 -123
  21. package/dist/src/appliance/rvfa-signing.js +0 -347
  22. package/dist/src/autopilot-state.d.ts +0 -77
  23. package/dist/src/autopilot-state.js +0 -271
  24. package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts +0 -18
  25. package/dist/src/benchmarks/gaia-agent-planning.smoke.js +0 -253
  26. package/dist/src/benchmarks/gaia-agent.d.ts +0 -198
  27. package/dist/src/benchmarks/gaia-agent.js +0 -651
  28. package/dist/src/benchmarks/gaia-causal-memory.d.ts +0 -133
  29. package/dist/src/benchmarks/gaia-causal-memory.js +0 -281
  30. package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts +0 -22
  31. package/dist/src/benchmarks/gaia-causal-memory.smoke.js +0 -300
  32. package/dist/src/benchmarks/gaia-convergence.d.ts +0 -138
  33. package/dist/src/benchmarks/gaia-convergence.js +0 -260
  34. package/dist/src/benchmarks/gaia-convergence.smoke.d.ts +0 -19
  35. package/dist/src/benchmarks/gaia-convergence.smoke.js +0 -246
  36. package/dist/src/benchmarks/gaia-critic.d.ts +0 -123
  37. package/dist/src/benchmarks/gaia-critic.js +0 -312
  38. package/dist/src/benchmarks/gaia-critic.smoke.d.ts +0 -21
  39. package/dist/src/benchmarks/gaia-critic.smoke.js +0 -327
  40. package/dist/src/benchmarks/gaia-decomposer.d.ts +0 -125
  41. package/dist/src/benchmarks/gaia-decomposer.js +0 -350
  42. package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts +0 -21
  43. package/dist/src/benchmarks/gaia-decomposer.smoke.js +0 -228
  44. package/dist/src/benchmarks/gaia-e2e-smoke.d.ts +0 -27
  45. package/dist/src/benchmarks/gaia-e2e-smoke.js +0 -136
  46. package/dist/src/benchmarks/gaia-extract.smoke.d.ts +0 -45
  47. package/dist/src/benchmarks/gaia-extract.smoke.js +0 -242
  48. package/dist/src/benchmarks/gaia-hardness/features.d.ts +0 -46
  49. package/dist/src/benchmarks/gaia-hardness/features.js +0 -170
  50. package/dist/src/benchmarks/gaia-hardness/predictor.d.ts +0 -105
  51. package/dist/src/benchmarks/gaia-hardness/predictor.js +0 -260
  52. package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts +0 -20
  53. package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js +0 -235
  54. package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts +0 -51
  55. package/dist/src/benchmarks/gaia-hardness/train-data-loader.js +0 -179
  56. package/dist/src/benchmarks/gaia-judge.d.ts +0 -88
  57. package/dist/src/benchmarks/gaia-judge.js +0 -437
  58. package/dist/src/benchmarks/gaia-loader.d.ts +0 -87
  59. package/dist/src/benchmarks/gaia-loader.js +0 -326
  60. package/dist/src/benchmarks/gaia-tools/file_read.d.ts +0 -35
  61. package/dist/src/benchmarks/gaia-tools/file_read.js +0 -403
  62. package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts +0 -126
  63. package/dist/src/benchmarks/gaia-tools/grounded_query.js +0 -225
  64. package/dist/src/benchmarks/gaia-tools/index.d.ts +0 -32
  65. package/dist/src/benchmarks/gaia-tools/index.js +0 -36
  66. package/dist/src/benchmarks/gaia-tools/types.d.ts +0 -62
  67. package/dist/src/benchmarks/gaia-tools/types.js +0 -12
  68. package/dist/src/benchmarks/gaia-tools/web_search.d.ts +0 -30
  69. package/dist/src/benchmarks/gaia-tools/web_search.js +0 -210
  70. package/dist/src/benchmarks/gaia-voting.d.ts +0 -88
  71. package/dist/src/benchmarks/gaia-voting.js +0 -297
  72. package/dist/src/benchmarks/gaia-voting.smoke.d.ts +0 -20
  73. package/dist/src/benchmarks/gaia-voting.smoke.js +0 -332
  74. package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
  75. package/dist/src/benchmarks/pretrain/index.js +0 -404
  76. package/dist/src/business-pods/bbs-budget-tracker.d.ts +0 -139
  77. package/dist/src/business-pods/bbs-budget-tracker.js +0 -358
  78. package/dist/src/business-pods/domain-affinity-policy.d.ts +0 -47
  79. package/dist/src/business-pods/domain-affinity-policy.js +0 -65
  80. package/dist/src/business-pods/pod-schema.d.ts +0 -96
  81. package/dist/src/business-pods/pod-schema.js +0 -225
  82. package/dist/src/commands/advisor.d.ts +0 -15
  83. package/dist/src/commands/advisor.js +0 -94
  84. package/dist/src/commands/agent-wasm.d.ts +0 -14
  85. package/dist/src/commands/agent-wasm.js +0 -333
  86. package/dist/src/commands/agent.d.ts +0 -8
  87. package/dist/src/commands/agent.js +0 -927
  88. package/dist/src/commands/analyze.d.ts +0 -19
  89. package/dist/src/commands/analyze.js +0 -2047
  90. package/dist/src/commands/announcements.d.ts +0 -17
  91. package/dist/src/commands/announcements.js +0 -0
  92. package/dist/src/commands/appliance-advanced.d.ts +0 -9
  93. package/dist/src/commands/appliance-advanced.js +0 -215
  94. package/dist/src/commands/appliance.d.ts +0 -8
  95. package/dist/src/commands/appliance.js +0 -404
  96. package/dist/src/commands/autopilot.d.ts +0 -15
  97. package/dist/src/commands/autopilot.js +0 -407
  98. package/dist/src/commands/benchmark.d.ts +0 -10
  99. package/dist/src/commands/benchmark.js +0 -460
  100. package/dist/src/commands/claims.d.ts +0 -10
  101. package/dist/src/commands/claims.js +0 -620
  102. package/dist/src/commands/cleanup.d.ts +0 -13
  103. package/dist/src/commands/cleanup.js +0 -250
  104. package/dist/src/commands/completions.d.ts +0 -10
  105. package/dist/src/commands/completions.js +0 -539
  106. package/dist/src/commands/config.d.ts +0 -8
  107. package/dist/src/commands/config.js +0 -428
  108. package/dist/src/commands/daemon.d.ts +0 -59
  109. package/dist/src/commands/daemon.js +0 -1733
  110. package/dist/src/commands/deployment.d.ts +0 -10
  111. package/dist/src/commands/deployment.js +0 -672
  112. package/dist/src/commands/doctor.d.ts +0 -10
  113. package/dist/src/commands/doctor.js +0 -1695
  114. package/dist/src/commands/eject.d.ts +0 -33
  115. package/dist/src/commands/eject.js +0 -195
  116. package/dist/src/commands/embeddings.d.ts +0 -18
  117. package/dist/src/commands/embeddings.js +0 -1623
  118. package/dist/src/commands/funnel.d.ts +0 -18
  119. package/dist/src/commands/funnel.js +0 -302
  120. package/dist/src/commands/gaia-bench.d.ts +0 -40
  121. package/dist/src/commands/gaia-bench.js +0 -597
  122. package/dist/src/commands/guidance.d.ts +0 -8
  123. package/dist/src/commands/guidance.js +0 -556
  124. package/dist/src/commands/hive-mind.d.ts +0 -11
  125. package/dist/src/commands/hive-mind.js +0 -1319
  126. package/dist/src/commands/hooks.d.ts +0 -8
  127. package/dist/src/commands/hooks.js +0 -4606
  128. package/dist/src/commands/index.d.ts +0 -118
  129. package/dist/src/commands/index.js +0 -364
  130. package/dist/src/commands/init.d.ts +0 -13
  131. package/dist/src/commands/init.js +0 -1297
  132. package/dist/src/commands/issues.d.ts +0 -21
  133. package/dist/src/commands/issues.js +0 -567
  134. package/dist/src/commands/mcp.d.ts +0 -11
  135. package/dist/src/commands/mcp.js +0 -732
  136. package/dist/src/commands/memory-backup.d.ts +0 -11
  137. package/dist/src/commands/memory-backup.js +0 -46
  138. package/dist/src/commands/memory-distill.d.ts +0 -27
  139. package/dist/src/commands/memory-distill.js +0 -374
  140. package/dist/src/commands/memory.d.ts +0 -8
  141. package/dist/src/commands/memory.js +0 -1596
  142. package/dist/src/commands/metaharness.d.ts +0 -39
  143. package/dist/src/commands/metaharness.js +0 -215
  144. package/dist/src/commands/migrate.d.ts +0 -8
  145. package/dist/src/commands/migrate.js +0 -742
  146. package/dist/src/commands/neural.d.ts +0 -10
  147. package/dist/src/commands/neural.js +0 -4331
  148. package/dist/src/commands/performance.d.ts +0 -10
  149. package/dist/src/commands/performance.js +0 -583
  150. package/dist/src/commands/plugins.d.ts +0 -11
  151. package/dist/src/commands/plugins.js +0 -826
  152. package/dist/src/commands/process.d.ts +0 -10
  153. package/dist/src/commands/process.js +0 -694
  154. package/dist/src/commands/progress.d.ts +0 -11
  155. package/dist/src/commands/progress.js +0 -259
  156. package/dist/src/commands/providers.d.ts +0 -10
  157. package/dist/src/commands/providers.js +0 -502
  158. package/dist/src/commands/proxy.d.ts +0 -21
  159. package/dist/src/commands/proxy.js +0 -310
  160. package/dist/src/commands/route.d.ts +0 -16
  161. package/dist/src/commands/route.js +0 -822
  162. package/dist/src/commands/ruvector/backup.d.ts +0 -11
  163. package/dist/src/commands/ruvector/backup.js +0 -747
  164. package/dist/src/commands/ruvector/benchmark.d.ts +0 -11
  165. package/dist/src/commands/ruvector/benchmark.js +0 -490
  166. package/dist/src/commands/ruvector/import.d.ts +0 -18
  167. package/dist/src/commands/ruvector/import.js +0 -373
  168. package/dist/src/commands/ruvector/index.d.ts +0 -29
  169. package/dist/src/commands/ruvector/index.js +0 -129
  170. package/dist/src/commands/ruvector/init.d.ts +0 -11
  171. package/dist/src/commands/ruvector/init.js +0 -467
  172. package/dist/src/commands/ruvector/migrate.d.ts +0 -11
  173. package/dist/src/commands/ruvector/migrate.js +0 -498
  174. package/dist/src/commands/ruvector/optimize.d.ts +0 -11
  175. package/dist/src/commands/ruvector/optimize.js +0 -505
  176. package/dist/src/commands/ruvector/pg-utils.d.ts +0 -14
  177. package/dist/src/commands/ruvector/pg-utils.js +0 -41
  178. package/dist/src/commands/ruvector/setup.d.ts +0 -18
  179. package/dist/src/commands/ruvector/setup.js +0 -765
  180. package/dist/src/commands/ruvector/status.d.ts +0 -11
  181. package/dist/src/commands/ruvector/status.js +0 -479
  182. package/dist/src/commands/security.d.ts +0 -10
  183. package/dist/src/commands/security.js +0 -1012
  184. package/dist/src/commands/session.d.ts +0 -8
  185. package/dist/src/commands/session.js +0 -757
  186. package/dist/src/commands/settings.d.ts +0 -19
  187. package/dist/src/commands/settings.js +0 -180
  188. package/dist/src/commands/spinner.d.ts +0 -16
  189. package/dist/src/commands/spinner.js +0 -329
  190. package/dist/src/commands/start.d.ts +0 -8
  191. package/dist/src/commands/start.js +0 -418
  192. package/dist/src/commands/status.d.ts +0 -8
  193. package/dist/src/commands/status.js +0 -608
  194. package/dist/src/commands/swarm.d.ts +0 -8
  195. package/dist/src/commands/swarm.js +0 -891
  196. package/dist/src/commands/task.d.ts +0 -8
  197. package/dist/src/commands/task.js +0 -675
  198. package/dist/src/commands/transfer-store.d.ts +0 -13
  199. package/dist/src/commands/transfer-store.js +0 -428
  200. package/dist/src/commands/update.d.ts +0 -8
  201. package/dist/src/commands/update.js +0 -276
  202. package/dist/src/commands/verify.d.ts +0 -19
  203. package/dist/src/commands/verify.js +0 -261
  204. package/dist/src/commands/version.d.ts +0 -42
  205. package/dist/src/commands/version.js +0 -106
  206. package/dist/src/commands/workflow.d.ts +0 -8
  207. package/dist/src/commands/workflow.js +0 -617
  208. package/dist/src/config/harness-feedback-applier.d.ts +0 -50
  209. package/dist/src/config/harness-feedback-applier.js +0 -122
  210. package/dist/src/config/proven-config-refresh.d.ts +0 -39
  211. package/dist/src/config/proven-config-refresh.js +0 -154
  212. package/dist/src/config/proven-config-rvfa.d.ts +0 -23
  213. package/dist/src/config/proven-config-rvfa.js +0 -73
  214. package/dist/src/config/proven-config.d.ts +0 -86
  215. package/dist/src/config/proven-config.js +0 -176
  216. package/dist/src/config-adapter.d.ts +0 -15
  217. package/dist/src/config-adapter.js +0 -186
  218. package/dist/src/encryption/vault.d.ts +0 -94
  219. package/dist/src/encryption/vault.js +0 -172
  220. package/dist/src/fs-secure.d.ts +0 -86
  221. package/dist/src/fs-secure.js +0 -133
  222. package/dist/src/funnel/advisor-tip.d.ts +0 -58
  223. package/dist/src/funnel/advisor-tip.js +0 -92
  224. package/dist/src/funnel/attribution.d.ts +0 -37
  225. package/dist/src/funnel/attribution.js +0 -101
  226. package/dist/src/funnel/consent.d.ts +0 -22
  227. package/dist/src/funnel/consent.js +0 -58
  228. package/dist/src/funnel/credit-errors.d.ts +0 -31
  229. package/dist/src/funnel/credit-errors.js +0 -88
  230. package/dist/src/funnel/credit-notifier.d.ts +0 -44
  231. package/dist/src/funnel/credit-notifier.js +0 -74
  232. package/dist/src/funnel/disclosure.d.ts +0 -47
  233. package/dist/src/funnel/disclosure.js +0 -109
  234. package/dist/src/funnel/enrollment.d.ts +0 -36
  235. package/dist/src/funnel/enrollment.js +0 -64
  236. package/dist/src/funnel/environment.d.ts +0 -17
  237. package/dist/src/funnel/environment.js +0 -39
  238. package/dist/src/funnel/event-transport.d.ts +0 -51
  239. package/dist/src/funnel/event-transport.js +0 -199
  240. package/dist/src/funnel/events.d.ts +0 -42
  241. package/dist/src/funnel/events.js +0 -150
  242. package/dist/src/funnel/index.d.ts +0 -21
  243. package/dist/src/funnel/index.js +0 -21
  244. package/dist/src/funnel/insights.d.ts +0 -50
  245. package/dist/src/funnel/insights.js +0 -120
  246. package/dist/src/funnel/local-signals.d.ts +0 -20
  247. package/dist/src/funnel/local-signals.js +0 -77
  248. package/dist/src/funnel/message-transport.d.ts +0 -51
  249. package/dist/src/funnel/message-transport.js +0 -149
  250. package/dist/src/funnel/messages.d.ts +0 -55
  251. package/dist/src/funnel/messages.js +0 -160
  252. package/dist/src/funnel/payout.d.ts +0 -40
  253. package/dist/src/funnel/payout.js +0 -60
  254. package/dist/src/funnel/power-saver-notifier.d.ts +0 -44
  255. package/dist/src/funnel/power-saver-notifier.js +0 -92
  256. package/dist/src/funnel/precedence.d.ts +0 -16
  257. package/dist/src/funnel/precedence.js +0 -85
  258. package/dist/src/funnel/promo.d.ts +0 -41
  259. package/dist/src/funnel/promo.js +0 -144
  260. package/dist/src/funnel/rate-limit-notifier.d.ts +0 -55
  261. package/dist/src/funnel/rate-limit-notifier.js +0 -102
  262. package/dist/src/funnel/rotation.d.ts +0 -19
  263. package/dist/src/funnel/rotation.js +0 -70
  264. package/dist/src/funnel/state.d.ts +0 -13
  265. package/dist/src/funnel/state.js +0 -52
  266. package/dist/src/funnel/toggle-cooldown.d.ts +0 -17
  267. package/dist/src/funnel/toggle-cooldown.js +0 -32
  268. package/dist/src/funnel/types.d.ts +0 -98
  269. package/dist/src/funnel/types.js +0 -26
  270. package/dist/src/index.d.ts +0 -81
  271. package/dist/src/index.js +0 -609
  272. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  273. package/dist/src/infrastructure/in-memory-repositories.js +0 -264
  274. package/dist/src/init/claudemd-generator.d.ts +0 -16
  275. package/dist/src/init/claudemd-generator.js +0 -368
  276. package/dist/src/init/executor.d.ts +0 -41
  277. package/dist/src/init/executor.js +0 -2142
  278. package/dist/src/init/helper-refresh.d.ts +0 -79
  279. package/dist/src/init/helper-refresh.js +0 -347
  280. package/dist/src/init/helper-signing.d.ts +0 -37
  281. package/dist/src/init/helper-signing.js +0 -67
  282. package/dist/src/init/helpers-generator.d.ts +0 -87
  283. package/dist/src/init/helpers-generator.js +0 -1456
  284. package/dist/src/init/index.d.ts +0 -13
  285. package/dist/src/init/index.js +0 -15
  286. package/dist/src/init/mcp-generator.d.ts +0 -26
  287. package/dist/src/init/mcp-generator.js +0 -126
  288. package/dist/src/init/memory-package-resolver.d.ts +0 -53
  289. package/dist/src/init/memory-package-resolver.js +0 -118
  290. package/dist/src/init/settings-generator.d.ts +0 -14
  291. package/dist/src/init/settings-generator.js +0 -462
  292. package/dist/src/init/statusline-generator.d.ts +0 -28
  293. package/dist/src/init/statusline-generator.js +0 -177
  294. package/dist/src/init/types.d.ts +0 -331
  295. package/dist/src/init/types.js +0 -276
  296. package/dist/src/log-filters.d.ts +0 -46
  297. package/dist/src/log-filters.js +0 -107
  298. package/dist/src/mcp-client.d.ts +0 -92
  299. package/dist/src/mcp-client.js +0 -397
  300. package/dist/src/mcp-server.d.ts +0 -163
  301. package/dist/src/mcp-server.js +0 -751
  302. package/dist/src/mcp-tools/agent-execute-core.d.ts +0 -115
  303. package/dist/src/mcp-tools/agent-execute-core.js +0 -587
  304. package/dist/src/mcp-tools/agent-tools.d.ts +0 -9
  305. package/dist/src/mcp-tools/agent-tools.js +0 -837
  306. package/dist/src/mcp-tools/agentbbs-tools.d.ts +0 -28
  307. package/dist/src/mcp-tools/agentbbs-tools.js +0 -394
  308. package/dist/src/mcp-tools/agentdb-tools.d.ts +0 -35
  309. package/dist/src/mcp-tools/agentdb-tools.js +0 -1473
  310. package/dist/src/mcp-tools/agenticow-loader.d.ts +0 -59
  311. package/dist/src/mcp-tools/agenticow-loader.js +0 -105
  312. package/dist/src/mcp-tools/agenticow-speculate-tools.d.ts +0 -24
  313. package/dist/src/mcp-tools/agenticow-speculate-tools.js +0 -209
  314. package/dist/src/mcp-tools/agenticow-tools.d.ts +0 -36
  315. package/dist/src/mcp-tools/agenticow-tools.js +0 -360
  316. package/dist/src/mcp-tools/analyze-tools.d.ts +0 -38
  317. package/dist/src/mcp-tools/analyze-tools.js +0 -346
  318. package/dist/src/mcp-tools/auto-install.d.ts +0 -83
  319. package/dist/src/mcp-tools/auto-install.js +0 -131
  320. package/dist/src/mcp-tools/autopilot-tools.d.ts +0 -12
  321. package/dist/src/mcp-tools/autopilot-tools.js +0 -231
  322. package/dist/src/mcp-tools/browser-intent-tools.d.ts +0 -162
  323. package/dist/src/mcp-tools/browser-intent-tools.js +0 -548
  324. package/dist/src/mcp-tools/browser-session-tools.d.ts +0 -27
  325. package/dist/src/mcp-tools/browser-session-tools.js +0 -398
  326. package/dist/src/mcp-tools/browser-tools.d.ts +0 -21
  327. package/dist/src/mcp-tools/browser-tools.js +0 -760
  328. package/dist/src/mcp-tools/business-pod-tools.d.ts +0 -20
  329. package/dist/src/mcp-tools/business-pod-tools.js +0 -169
  330. package/dist/src/mcp-tools/claims-tools.d.ts +0 -12
  331. package/dist/src/mcp-tools/claims-tools.js +0 -863
  332. package/dist/src/mcp-tools/config-tools.d.ts +0 -8
  333. package/dist/src/mcp-tools/config-tools.js +0 -411
  334. package/dist/src/mcp-tools/coordination-tools.d.ts +0 -13
  335. package/dist/src/mcp-tools/coordination-tools.js +0 -729
  336. package/dist/src/mcp-tools/daa-tools.d.ts +0 -13
  337. package/dist/src/mcp-tools/daa-tools.js +0 -534
  338. package/dist/src/mcp-tools/embeddings-tools.d.ts +0 -9
  339. package/dist/src/mcp-tools/embeddings-tools.js +0 -904
  340. package/dist/src/mcp-tools/github-tools.d.ts +0 -9
  341. package/dist/src/mcp-tools/github-tools.js +0 -659
  342. package/dist/src/mcp-tools/guidance-tools.d.ts +0 -15
  343. package/dist/src/mcp-tools/guidance-tools.js +0 -639
  344. package/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -8
  345. package/dist/src/mcp-tools/hive-mind-tools.js +0 -953
  346. package/dist/src/mcp-tools/hooks-tools.d.ts +0 -65
  347. package/dist/src/mcp-tools/hooks-tools.js +0 -4836
  348. package/dist/src/mcp-tools/http-fetch-tools.d.ts +0 -55
  349. package/dist/src/mcp-tools/http-fetch-tools.js +0 -329
  350. package/dist/src/mcp-tools/index.d.ts +0 -34
  351. package/dist/src/mcp-tools/index.js +0 -40
  352. package/dist/src/mcp-tools/managed-agent-tools.d.ts +0 -22
  353. package/dist/src/mcp-tools/managed-agent-tools.js +0 -357
  354. package/dist/src/mcp-tools/memory-tools.d.ts +0 -14
  355. package/dist/src/mcp-tools/memory-tools.js +0 -1330
  356. package/dist/src/mcp-tools/metaharness-tools.d.ts +0 -51
  357. package/dist/src/mcp-tools/metaharness-tools.js +0 -684
  358. package/dist/src/mcp-tools/neural-tools.d.ts +0 -54
  359. package/dist/src/mcp-tools/neural-tools.js +0 -1168
  360. package/dist/src/mcp-tools/performance-tools.d.ts +0 -16
  361. package/dist/src/mcp-tools/performance-tools.js +0 -675
  362. package/dist/src/mcp-tools/progress-tools.d.ts +0 -14
  363. package/dist/src/mcp-tools/progress-tools.js +0 -348
  364. package/dist/src/mcp-tools/request-tracker.d.ts +0 -17
  365. package/dist/src/mcp-tools/request-tracker.js +0 -27
  366. package/dist/src/mcp-tools/ruvllm-tools.d.ts +0 -9
  367. package/dist/src/mcp-tools/ruvllm-tools.js +0 -355
  368. package/dist/src/mcp-tools/security-tools.d.ts +0 -18
  369. package/dist/src/mcp-tools/security-tools.js +0 -556
  370. package/dist/src/mcp-tools/session-tools.d.ts +0 -8
  371. package/dist/src/mcp-tools/session-tools.js +0 -517
  372. package/dist/src/mcp-tools/swarm-tools.d.ts +0 -37
  373. package/dist/src/mcp-tools/swarm-tools.js +0 -390
  374. package/dist/src/mcp-tools/system-tools.d.ts +0 -13
  375. package/dist/src/mcp-tools/system-tools.js +0 -688
  376. package/dist/src/mcp-tools/task-tools.d.ts +0 -8
  377. package/dist/src/mcp-tools/task-tools.js +0 -487
  378. package/dist/src/mcp-tools/terminal-tools.d.ts +0 -8
  379. package/dist/src/mcp-tools/terminal-tools.js +0 -306
  380. package/dist/src/mcp-tools/testgen-tools.d.ts +0 -26
  381. package/dist/src/mcp-tools/testgen-tools.js +0 -168
  382. package/dist/src/mcp-tools/tool-loop-guardrail.d.ts +0 -31
  383. package/dist/src/mcp-tools/tool-loop-guardrail.js +0 -71
  384. package/dist/src/mcp-tools/transfer-tools.d.ts +0 -14
  385. package/dist/src/mcp-tools/transfer-tools.js +0 -447
  386. package/dist/src/mcp-tools/types.d.ts +0 -8
  387. package/dist/src/mcp-tools/types.js +0 -8
  388. package/dist/src/mcp-tools/validate-input.d.ts +0 -9
  389. package/dist/src/mcp-tools/validate-input.js +0 -9
  390. package/dist/src/mcp-tools/wasm-agent-tools.d.ts +0 -13
  391. package/dist/src/mcp-tools/wasm-agent-tools.js +0 -840
  392. package/dist/src/mcp-tools/workflow-tools.d.ts +0 -8
  393. package/dist/src/mcp-tools/workflow-tools.js +0 -884
  394. package/dist/src/memory/bge-embedder.d.ts +0 -25
  395. package/dist/src/memory/bge-embedder.js +0 -121
  396. package/dist/src/memory/cross-encoder-rerank.d.ts +0 -33
  397. package/dist/src/memory/cross-encoder-rerank.js +0 -123
  398. package/dist/src/memory/embedding-policy.d.ts +0 -21
  399. package/dist/src/memory/embedding-policy.js +0 -30
  400. package/dist/src/memory/embedding-quantization.d.ts +0 -62
  401. package/dist/src/memory/embedding-quantization.js +0 -156
  402. package/dist/src/memory/ewc-consolidation.d.ts +0 -305
  403. package/dist/src/memory/ewc-consolidation.js +0 -611
  404. package/dist/src/memory/graph-edge-writer.d.ts +0 -95
  405. package/dist/src/memory/graph-edge-writer.js +0 -217
  406. package/dist/src/memory/hybrid-retrieval.d.ts +0 -77
  407. package/dist/src/memory/hybrid-retrieval.js +0 -192
  408. package/dist/src/memory/intelligence.d.ts +0 -405
  409. package/dist/src/memory/intelligence.js +0 -1316
  410. package/dist/src/memory/lucene-bm25.d.ts +0 -19
  411. package/dist/src/memory/lucene-bm25.js +0 -308
  412. package/dist/src/memory/memory-bridge.d.ts +0 -537
  413. package/dist/src/memory/memory-bridge.js +0 -2460
  414. package/dist/src/memory/memory-initializer.d.ts +0 -556
  415. package/dist/src/memory/memory-initializer.js +0 -3021
  416. package/dist/src/memory/neural-package-bridge.d.ts +0 -48
  417. package/dist/src/memory/neural-package-bridge.js +0 -87
  418. package/dist/src/memory/rabitq-index.d.ts +0 -60
  419. package/dist/src/memory/rabitq-index.js +0 -242
  420. package/dist/src/memory/sona-optimizer.d.ts +0 -267
  421. package/dist/src/memory/sona-optimizer.js +0 -779
  422. package/dist/src/memory/structured-distill.d.ts +0 -48
  423. package/dist/src/memory/structured-distill.js +0 -125
  424. package/dist/src/output.d.ts +0 -9
  425. package/dist/src/output.js +0 -9
  426. package/dist/src/parser.d.ts +0 -89
  427. package/dist/src/parser.js +0 -516
  428. package/dist/src/plugins/manager.d.ts +0 -133
  429. package/dist/src/plugins/manager.js +0 -415
  430. package/dist/src/plugins/store/discovery.d.ts +0 -99
  431. package/dist/src/plugins/store/discovery.js +0 -1224
  432. package/dist/src/plugins/store/index.d.ts +0 -76
  433. package/dist/src/plugins/store/index.js +0 -141
  434. package/dist/src/plugins/store/search.d.ts +0 -46
  435. package/dist/src/plugins/store/search.js +0 -230
  436. package/dist/src/plugins/store/types.d.ts +0 -279
  437. package/dist/src/plugins/store/types.js +0 -7
  438. package/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -7
  439. package/dist/src/plugins/tests/demo-plugin-store.js +0 -126
  440. package/dist/src/plugins/tests/standalone-test.d.ts +0 -12
  441. package/dist/src/plugins/tests/standalone-test.js +0 -188
  442. package/dist/src/plugins/tests/test-plugin-store.d.ts +0 -7
  443. package/dist/src/plugins/tests/test-plugin-store.js +0 -206
  444. package/dist/src/production/circuit-breaker.d.ts +0 -101
  445. package/dist/src/production/circuit-breaker.js +0 -241
  446. package/dist/src/production/error-handler.d.ts +0 -92
  447. package/dist/src/production/error-handler.js +0 -299
  448. package/dist/src/production/index.d.ts +0 -23
  449. package/dist/src/production/index.js +0 -18
  450. package/dist/src/production/monitoring.d.ts +0 -161
  451. package/dist/src/production/monitoring.js +0 -356
  452. package/dist/src/production/rate-limiter.d.ts +0 -80
  453. package/dist/src/production/rate-limiter.js +0 -201
  454. package/dist/src/production/retry.d.ts +0 -48
  455. package/dist/src/production/retry.js +0 -179
  456. package/dist/src/prompt.d.ts +0 -44
  457. package/dist/src/prompt.js +0 -501
  458. package/dist/src/runtime/headless.d.ts +0 -60
  459. package/dist/src/runtime/headless.js +0 -284
  460. package/dist/src/runtime/parent-death-watchdog.d.ts +0 -42
  461. package/dist/src/runtime/parent-death-watchdog.js +0 -70
  462. package/dist/src/ruvector/agent-wasm.d.ts +0 -228
  463. package/dist/src/ruvector/agent-wasm.js +0 -463
  464. package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
  465. package/dist/src/ruvector/ast-analyzer.js +0 -277
  466. package/dist/src/ruvector/codemods/engine.d.ts +0 -45
  467. package/dist/src/ruvector/codemods/engine.js +0 -291
  468. package/dist/src/ruvector/codemods/scope-analysis.d.ts +0 -29
  469. package/dist/src/ruvector/codemods/scope-analysis.js +0 -162
  470. package/dist/src/ruvector/coverage-router.d.ts +0 -160
  471. package/dist/src/ruvector/coverage-router.js +0 -531
  472. package/dist/src/ruvector/coverage-tools.d.ts +0 -33
  473. package/dist/src/ruvector/coverage-tools.js +0 -157
  474. package/dist/src/ruvector/diff-classifier.d.ts +0 -175
  475. package/dist/src/ruvector/diff-classifier.js +0 -699
  476. package/dist/src/ruvector/diskann-backend.d.ts +0 -78
  477. package/dist/src/ruvector/diskann-backend.js +0 -310
  478. package/dist/src/ruvector/enhanced-model-router.d.ts +0 -172
  479. package/dist/src/ruvector/enhanced-model-router.js +0 -577
  480. package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
  481. package/dist/src/ruvector/graph-analyzer.js +0 -929
  482. package/dist/src/ruvector/graph-backend.d.ts +0 -79
  483. package/dist/src/ruvector/graph-backend.js +0 -220
  484. package/dist/src/ruvector/index.d.ts +0 -38
  485. package/dist/src/ruvector/index.js +0 -86
  486. package/dist/src/ruvector/lora-adapter.d.ts +0 -292
  487. package/dist/src/ruvector/lora-adapter.js +0 -710
  488. package/dist/src/ruvector/model-prices.d.ts +0 -50
  489. package/dist/src/ruvector/model-prices.js +0 -72
  490. package/dist/src/ruvector/model-router.d.ts +0 -408
  491. package/dist/src/ruvector/model-router.js +0 -1162
  492. package/dist/src/ruvector/neural-router.d.ts +0 -182
  493. package/dist/src/ruvector/neural-router.js +0 -825
  494. package/dist/src/ruvector/output-verifier.d.ts +0 -83
  495. package/dist/src/ruvector/output-verifier.js +0 -277
  496. package/dist/src/ruvector/q-learning-router.d.ts +0 -227
  497. package/dist/src/ruvector/q-learning-router.js +0 -721
  498. package/dist/src/ruvector/router-calibrator.d.ts +0 -65
  499. package/dist/src/ruvector/router-calibrator.js +0 -120
  500. package/dist/src/ruvector/router-parallel-recorder.d.ts +0 -127
  501. package/dist/src/ruvector/router-parallel-recorder.js +0 -183
  502. package/dist/src/ruvector/router-trajectory.d.ts +0 -194
  503. package/dist/src/ruvector/router-trajectory.js +0 -281
  504. package/dist/src/ruvector/run-transcript-recorder.d.ts +0 -154
  505. package/dist/src/ruvector/run-transcript-recorder.js +0 -209
  506. package/dist/src/ruvector/ruvllm-wasm.d.ts +0 -179
  507. package/dist/src/ruvector/ruvllm-wasm.js +0 -379
  508. package/dist/src/ruvector/semantic-router.d.ts +0 -77
  509. package/dist/src/ruvector/semantic-router.js +0 -178
  510. package/dist/src/ruvector/task-embedder.d.ts +0 -56
  511. package/dist/src/ruvector/task-embedder.js +0 -237
  512. package/dist/src/ruvector/trajectory-tree.d.ts +0 -113
  513. package/dist/src/ruvector/trajectory-tree.js +0 -237
  514. package/dist/src/ruvector/vector-db.d.ts +0 -73
  515. package/dist/src/ruvector/vector-db.js +0 -301
  516. package/dist/src/ruvector/wasm-embedder.d.ts +0 -13
  517. package/dist/src/ruvector/wasm-embedder.js +0 -143
  518. package/dist/src/security/builtin-aidefence.d.ts +0 -34
  519. package/dist/src/security/builtin-aidefence.js +0 -86
  520. package/dist/src/services/agentic-flow-bridge.d.ts +0 -50
  521. package/dist/src/services/agentic-flow-bridge.js +0 -95
  522. package/dist/src/services/ai-job-dedup.d.ts +0 -61
  523. package/dist/src/services/ai-job-dedup.js +0 -136
  524. package/dist/src/services/checkpoint-gate.d.ts +0 -140
  525. package/dist/src/services/checkpoint-gate.js +0 -223
  526. package/dist/src/services/claim-service.d.ts +0 -204
  527. package/dist/src/services/claim-service.js +0 -818
  528. package/dist/src/services/config-file-manager.d.ts +0 -37
  529. package/dist/src/services/config-file-manager.js +0 -224
  530. package/dist/src/services/container-worker-pool.d.ts +0 -204
  531. package/dist/src/services/container-worker-pool.js +0 -589
  532. package/dist/src/services/daemon-autostart.d.ts +0 -17
  533. package/dist/src/services/daemon-autostart.js +0 -102
  534. package/dist/src/services/distill-oracle.d.ts +0 -190
  535. package/dist/src/services/distill-oracle.js +0 -349
  536. package/dist/src/services/distill-tuning.d.ts +0 -111
  537. package/dist/src/services/distill-tuning.js +0 -510
  538. package/dist/src/services/evolve-proof.d.ts +0 -253
  539. package/dist/src/services/evolve-proof.js +0 -343
  540. package/dist/src/services/fable-harness.d.ts +0 -208
  541. package/dist/src/services/fable-harness.js +0 -388
  542. package/dist/src/services/git-workspace-identity.d.ts +0 -42
  543. package/dist/src/services/git-workspace-identity.js +0 -99
  544. package/dist/src/services/global-ai-budget.d.ts +0 -135
  545. package/dist/src/services/global-ai-budget.js +0 -415
  546. package/dist/src/services/harness-benchmark.d.ts +0 -68
  547. package/dist/src/services/harness-benchmark.js +0 -94
  548. package/dist/src/services/harness-canary.d.ts +0 -60
  549. package/dist/src/services/harness-canary.js +0 -69
  550. package/dist/src/services/harness-corpus-harvester.d.ts +0 -51
  551. package/dist/src/services/harness-corpus-harvester.js +0 -74
  552. package/dist/src/services/harness-flywheel-generations.d.ts +0 -115
  553. package/dist/src/services/harness-flywheel-generations.js +0 -360
  554. package/dist/src/services/harness-flywheel-runtime.d.ts +0 -25
  555. package/dist/src/services/harness-flywheel-runtime.js +0 -92
  556. package/dist/src/services/harness-flywheel.d.ts +0 -48
  557. package/dist/src/services/harness-flywheel.js +0 -207
  558. package/dist/src/services/harness-frozen-eval.d.ts +0 -22
  559. package/dist/src/services/harness-frozen-eval.js +0 -66
  560. package/dist/src/services/harness-hosts.d.ts +0 -40
  561. package/dist/src/services/harness-hosts.js +0 -88
  562. package/dist/src/services/harness-improvement-ledger.d.ts +0 -63
  563. package/dist/src/services/harness-improvement-ledger.js +0 -101
  564. package/dist/src/services/harness-loop.d.ts +0 -53
  565. package/dist/src/services/harness-loop.js +0 -85
  566. package/dist/src/services/harness-qualification.d.ts +0 -66
  567. package/dist/src/services/harness-qualification.js +0 -143
  568. package/dist/src/services/harness-replay.d.ts +0 -37
  569. package/dist/src/services/harness-replay.js +0 -92
  570. package/dist/src/services/harness-verify.d.ts +0 -33
  571. package/dist/src/services/harness-verify.js +0 -26
  572. package/dist/src/services/harness-worker.d.ts +0 -23
  573. package/dist/src/services/harness-worker.js +0 -66
  574. package/dist/src/services/headless-worker-executor.d.ts +0 -358
  575. package/dist/src/services/headless-worker-executor.js +0 -1269
  576. package/dist/src/services/index.d.ts +0 -13
  577. package/dist/src/services/index.js +0 -11
  578. package/dist/src/services/memory-backup.d.ts +0 -53
  579. package/dist/src/services/memory-backup.js +0 -198
  580. package/dist/src/services/memory-distillation.d.ts +0 -41
  581. package/dist/src/services/memory-distillation.js +0 -277
  582. package/dist/src/services/native-training.d.ts +0 -68
  583. package/dist/src/services/native-training.js +0 -141
  584. package/dist/src/services/registry-api.d.ts +0 -58
  585. package/dist/src/services/registry-api.js +0 -146
  586. package/dist/src/services/repo-supervisor.d.ts +0 -70
  587. package/dist/src/services/repo-supervisor.js +0 -228
  588. package/dist/src/services/ruvector-training.d.ts +0 -222
  589. package/dist/src/services/ruvector-training.js +0 -693
  590. package/dist/src/services/swarm-memory-branches.d.ts +0 -135
  591. package/dist/src/services/swarm-memory-branches.js +0 -213
  592. package/dist/src/services/weight-eft.d.ts +0 -305
  593. package/dist/src/services/weight-eft.js +0 -296
  594. package/dist/src/services/worker-daemon.d.ts +0 -439
  595. package/dist/src/services/worker-daemon.js +0 -1865
  596. package/dist/src/services/worker-queue.d.ts +0 -194
  597. package/dist/src/services/worker-queue.js +0 -513
  598. package/dist/src/services/workspace-lease.d.ts +0 -55
  599. package/dist/src/services/workspace-lease.js +0 -191
  600. package/dist/src/suggest.d.ts +0 -53
  601. package/dist/src/suggest.js +0 -200
  602. package/dist/src/transfer/anonymization/index.d.ts +0 -25
  603. package/dist/src/transfer/anonymization/index.js +0 -175
  604. package/dist/src/transfer/deploy-seraphine.d.ts +0 -13
  605. package/dist/src/transfer/deploy-seraphine.js +0 -205
  606. package/dist/src/transfer/export.d.ts +0 -25
  607. package/dist/src/transfer/export.js +0 -113
  608. package/dist/src/transfer/index.d.ts +0 -12
  609. package/dist/src/transfer/index.js +0 -31
  610. package/dist/src/transfer/ipfs/client.d.ts +0 -109
  611. package/dist/src/transfer/ipfs/client.js +0 -307
  612. package/dist/src/transfer/ipfs/upload.d.ts +0 -95
  613. package/dist/src/transfer/ipfs/upload.js +0 -413
  614. package/dist/src/transfer/models/seraphine.d.ts +0 -72
  615. package/dist/src/transfer/models/seraphine.js +0 -373
  616. package/dist/src/transfer/serialization/cfp.d.ts +0 -49
  617. package/dist/src/transfer/serialization/cfp.js +0 -183
  618. package/dist/src/transfer/storage/gcs.d.ts +0 -82
  619. package/dist/src/transfer/storage/gcs.js +0 -272
  620. package/dist/src/transfer/storage/index.d.ts +0 -6
  621. package/dist/src/transfer/storage/index.js +0 -6
  622. package/dist/src/transfer/store/discovery.d.ts +0 -84
  623. package/dist/src/transfer/store/discovery.js +0 -382
  624. package/dist/src/transfer/store/download.d.ts +0 -70
  625. package/dist/src/transfer/store/download.js +0 -334
  626. package/dist/src/transfer/store/index.d.ts +0 -84
  627. package/dist/src/transfer/store/index.js +0 -153
  628. package/dist/src/transfer/store/publish.d.ts +0 -76
  629. package/dist/src/transfer/store/publish.js +0 -294
  630. package/dist/src/transfer/store/registry.d.ts +0 -58
  631. package/dist/src/transfer/store/registry.js +0 -285
  632. package/dist/src/transfer/store/search.d.ts +0 -54
  633. package/dist/src/transfer/store/search.js +0 -232
  634. package/dist/src/transfer/store/tests/standalone-test.d.ts +0 -12
  635. package/dist/src/transfer/store/tests/standalone-test.js +0 -190
  636. package/dist/src/transfer/store/types.d.ts +0 -193
  637. package/dist/src/transfer/store/types.js +0 -6
  638. package/dist/src/transfer/test-seraphine.d.ts +0 -6
  639. package/dist/src/transfer/test-seraphine.js +0 -105
  640. package/dist/src/transfer/tests/test-store.d.ts +0 -7
  641. package/dist/src/transfer/tests/test-store.js +0 -214
  642. package/dist/src/transfer/types.d.ts +0 -245
  643. package/dist/src/transfer/types.js +0 -6
  644. package/dist/src/types.d.ts +0 -13
  645. package/dist/src/types.js +0 -13
  646. package/dist/src/update/checker.d.ts +0 -34
  647. package/dist/src/update/checker.js +0 -191
  648. package/dist/src/update/executor.d.ts +0 -33
  649. package/dist/src/update/executor.js +0 -217
  650. package/dist/src/update/index.d.ts +0 -33
  651. package/dist/src/update/index.js +0 -64
  652. package/dist/src/update/rate-limiter.d.ts +0 -20
  653. package/dist/src/update/rate-limiter.js +0 -96
  654. package/dist/src/update/validator.d.ts +0 -17
  655. package/dist/src/update/validator.js +0 -123
@@ -1,837 +0,0 @@
1
- /**
2
- * Agent MCP Tools for CLI
3
- *
4
- * Tool definitions for agent lifecycle management with file persistence.
5
- * Includes model routing integration for intelligent model selection.
6
- */
7
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
8
- import { join } from 'node:path';
9
- import { getProjectCwd } from './types.js';
10
- import { validateIdentifier, validateText, validateAgentSpawn } from './validate-input.js';
11
- import { executeAgentTask } from './agent-execute-core.js';
12
- // Storage paths
13
- const STORAGE_DIR = '.claude-flow';
14
- const AGENT_DIR = 'agents';
15
- const AGENT_FILE = 'store.json';
16
- // #1916: hive-mind_spawn writes its workers to `.claude-flow/agents.json`
17
- // (a *different* file from the canonical `.claude-flow/agents/store.json`
18
- // used here). agent_status / agent_list / agent_logs merge that store so a
19
- // hive-spawned worker is resolvable instead of returning `not_found`.
20
- const HIVE_AGENT_FILE = 'agents.json';
21
- function getAgentDir() {
22
- return join(getProjectCwd(), STORAGE_DIR, AGENT_DIR);
23
- }
24
- function getAgentPath() {
25
- return join(getAgentDir(), AGENT_FILE);
26
- }
27
- function ensureAgentDir() {
28
- const dir = getAgentDir();
29
- if (!existsSync(dir)) {
30
- mkdirSync(dir, { recursive: true });
31
- }
32
- }
33
- function loadAgentStore() {
34
- try {
35
- const path = getAgentPath();
36
- if (existsSync(path)) {
37
- const data = readFileSync(path, 'utf-8');
38
- return JSON.parse(data);
39
- }
40
- }
41
- catch {
42
- // Return empty store on error
43
- }
44
- return { agents: {}, version: '3.0.0' };
45
- }
46
- function saveAgentStore(store) {
47
- ensureAgentDir();
48
- writeFileSync(getAgentPath(), JSON.stringify(store, null, 2), 'utf-8');
49
- }
50
- // #1916: read hive-mind-spawned workers from `.claude-flow/agents.json`.
51
- function getHiveAgentPath() {
52
- return join(getProjectCwd(), STORAGE_DIR, HIVE_AGENT_FILE);
53
- }
54
- function loadHiveAgents() {
55
- try {
56
- const path = getHiveAgentPath();
57
- if (existsSync(path)) {
58
- const data = JSON.parse(readFileSync(path, 'utf-8'));
59
- if (data && typeof data.agents === 'object' && data.agents) {
60
- return data.agents;
61
- }
62
- }
63
- }
64
- catch {
65
- // Ignore — hive store is optional/best-effort.
66
- }
67
- return {};
68
- }
69
- /**
70
- * #1916: merged view of every tracked agent — the canonical agent store
71
- * plus hive-mind-spawned workers. On an id collision the canonical record
72
- * wins (it carries model-routing + lastResult that the hive store omits).
73
- */
74
- function loadAllAgents() {
75
- return { ...loadHiveAgents(), ...loadAgentStore().agents };
76
- }
77
- // Default model mappings for agent types (can be overridden)
78
- const AGENT_TYPE_MODEL_DEFAULTS = {
79
- // Complex agents → opus
80
- 'architect': 'opus',
81
- 'security-architect': 'opus',
82
- 'system-architect': 'opus',
83
- 'core-architect': 'opus',
84
- // Medium complexity → sonnet
85
- 'coder': 'sonnet',
86
- 'reviewer': 'sonnet',
87
- 'researcher': 'sonnet',
88
- 'tester': 'sonnet',
89
- 'analyst': 'sonnet',
90
- // Simple/fast agents → haiku
91
- 'formatter': 'haiku',
92
- 'linter': 'haiku',
93
- 'documenter': 'haiku',
94
- };
95
- // Lazy-loaded model router
96
- let modelRouterInstance = null;
97
- async function getModelRouter() {
98
- if (!modelRouterInstance) {
99
- try {
100
- const { getModelRouter } = await import('../ruvector/model-router.js');
101
- modelRouterInstance = getModelRouter();
102
- }
103
- catch (e) {
104
- // Log but don't fail - model router is optional
105
- console.error('[agent-tools] Model router load failed:', e.message);
106
- }
107
- }
108
- return modelRouterInstance;
109
- }
110
- // ADR-149 — the cost-optimal neural router fires only when
111
- // `routeToModelFull(task, embedding)` is called with a real embedding. We
112
- // delegate to the shared task-embedder module (ADR-149 iter 9) so the
113
- // @xenova/transformers MiniLM pipeline + LRU cache are shared across
114
- // agent-tools and the agent-execute-core fallback path.
115
- async function embedTaskSafe(task) {
116
- const { embedTaskWithCache } = await import('../ruvector/task-embedder.js');
117
- return embedTaskWithCache(task);
118
- }
119
- /**
120
- * Determine model for agent based on (ADR-026 3-tier routing):
121
- * 1. Explicit model in config
122
- * 2. Enhanced task-based routing with deterministic Tier-1 codemods (if task provided)
123
- * 3. Agent type defaults
124
- * 4. Fallback to sonnet
125
- */
126
- async function determineAgentModel(agentType, config, task) {
127
- // 1. Explicit model in config
128
- if (config.model && ['haiku', 'sonnet', 'opus', 'opus-4.7', 'inherit'].includes(config.model)) {
129
- return { model: config.model, routedBy: 'explicit' };
130
- }
131
- // 2. Enhanced task-based routing with deterministic Tier-1 codemods
132
- if (task) {
133
- try {
134
- // Try enhanced router first (includes codemod-intent detection)
135
- const { getEnhancedModelRouter } = await import('../ruvector/enhanced-model-router.js');
136
- const enhancedRouter = getEnhancedModelRouter();
137
- // ADR-149 — embed the task so the cost-optimal neural backend fires.
138
- // We probe the embedder lazily; if it can't load (no @xenova/transformers
139
- // available), the enhanced router falls back to heuristic+bandit and
140
- // the existing behaviour is preserved.
141
- const embedding = await embedTaskSafe(task);
142
- const routeResult = await enhancedRouter.route(task, { filePath: config.filePath, embedding });
143
- if (routeResult.tier === 1 && routeResult.canSkipLLM) {
144
- // Deterministic codemod can apply this edit ($0, no LLM)
145
- return {
146
- model: 'haiku', // fallback model if the codemod can't apply
147
- routedBy: 'codemod',
148
- canSkipLLM: true,
149
- codemodIntent: (routeResult.codemodIntent ?? routeResult.agentBoosterIntent)?.type,
150
- tier: 1,
151
- };
152
- }
153
- // ADR-149 — forward the per-model fields. When the neural backend
154
- // fired, modelId carries the cost-optimal pick (e.g. Ling); when
155
- // it didn't, these are undefined and downstream behaviour is unchanged.
156
- const routedBy = routeResult.routedBy === 'hybrid' ? 'hybrid' : 'router';
157
- return {
158
- model: routeResult.model,
159
- routedBy,
160
- tier: routeResult.tier,
161
- modelId: routeResult.modelId,
162
- provider: routeResult.provider,
163
- openrouterModel: routeResult.openrouterModel,
164
- };
165
- }
166
- catch {
167
- // Enhanced router not available, try basic router
168
- const router = await getModelRouter();
169
- if (router) {
170
- try {
171
- // ADR-149 — embed the task so the cost-optimal neural backend
172
- // fires (it's gated on `embedding && embedding.length > 0`).
173
- // Without the embedding, route() falls back to heuristic+bandit
174
- // and every per-model Pareto win the v2 measurement landed is
175
- // invisible. embedTaskSafe returns undefined on any failure;
176
- // route(task, undefined) behaves exactly as the prior code.
177
- const embedding = await embedTaskSafe(task);
178
- const result = await router.route(task, embedding);
179
- // Map the routing mechanism to the broader agent-record taxonomy.
180
- // 'hybrid' = neural prior + bandit blended (ADR-149); fold the rest
181
- // into 'router' for back-compat with consumers reading modelRoutedBy.
182
- const routedBy = result.routedBy === 'hybrid' ? 'hybrid' : 'router';
183
- return {
184
- model: result.model,
185
- routedBy,
186
- modelId: result.modelId,
187
- provider: result.provider,
188
- openrouterModel: result.openrouterModel,
189
- };
190
- }
191
- catch {
192
- // Fall through to defaults on router error
193
- }
194
- }
195
- }
196
- }
197
- // 3. Agent type defaults
198
- const defaultModel = AGENT_TYPE_MODEL_DEFAULTS[agentType];
199
- if (defaultModel) {
200
- return { model: defaultModel, routedBy: 'default' };
201
- }
202
- // 4. Fallback to sonnet (balanced)
203
- return { model: 'sonnet', routedBy: 'default' };
204
- }
205
- export const agentTools = [
206
- {
207
- name: 'agent_spawn',
208
- description: 'Spawn a Ruflo-tracked agent with cost attribution + memory persistence + swarm coordination. Use when native Task tool is wrong because you need (a) cost tracking per agent in the cost-tracking namespace, (b) cross-session learning via the patterns namespace, or (c) coordination with other agents in a swarm topology (hierarchical / mesh / consensus). For one-shot subtasks with no learning loop, native Task is fine. Pair with hooks_route to pick the right model first.',
209
- category: 'agent',
210
- inputSchema: {
211
- type: 'object',
212
- properties: {
213
- agentType: { type: 'string', description: 'Type of agent to spawn' },
214
- agentId: { type: 'string', description: 'Optional custom agent ID' },
215
- // #2085 — accept swarmId so spawned agents register in the
216
- // swarm.agents array that swarm_status reports. Omit to register
217
- // with the most-recently-created swarm.
218
- swarmId: { type: 'string', description: 'Optional swarm to register the agent with (defaults to most-recent swarm)' },
219
- config: { type: 'object', description: 'Agent configuration' },
220
- domain: { type: 'string', description: 'Agent domain' },
221
- model: {
222
- type: 'string',
223
- enum: ['haiku', 'sonnet', 'opus', 'opus-4.7', 'inherit'],
224
- description: 'Claude model alias (haiku=fast/cheap, sonnet=balanced, opus=current Opus 4.8, opus-4.7=prior Opus pin)'
225
- },
226
- task: { type: 'string', description: 'Task description for intelligent model routing' },
227
- memoryBase: { type: 'string', description: 'Opt-in: base .rvf memory file to fork a per-agent Copy-On-Write branch from (agenticow). When set, the agent gets an isolated ~162-byte COW branch instead of a full copy — promote on success, discard on terminate. Requires the optional `agenticow` dep; degrades to a no-op when absent or when CLAUDE_FLOW_NO_COW_MEMORY=1.' },
228
- memoryDimension: { type: 'integer', description: 'Vector dimension for the COW base (required only when memoryBase does not exist yet)' },
229
- },
230
- required: ['agentType'],
231
- },
232
- handler: async (input) => {
233
- // Validate user-provided input (#1425: wire security validators to runtime)
234
- const validation = await validateAgentSpawn(input);
235
- if (!validation.valid) {
236
- return { success: false, error: `Input validation failed: ${validation.errors.join('; ')}` };
237
- }
238
- const store = loadAgentStore();
239
- const agentId = input.agentId || `agent-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
240
- const agentType = input.agentType;
241
- const config = input.config || {};
242
- // Add explicit model to config if provided
243
- if (input.model) {
244
- config.model = input.model;
245
- }
246
- // Get task from either top-level or config (CLI passes it in config.task)
247
- const task = input.task || config.task || undefined;
248
- // Determine model using ADR-026 3-tier routing logic
249
- const routingResult = await determineAgentModel(agentType, config, task);
250
- const agent = {
251
- agentId,
252
- agentType,
253
- status: 'idle',
254
- health: 1.0,
255
- taskCount: 0,
256
- config,
257
- createdAt: new Date().toISOString(),
258
- domain: input.domain,
259
- model: routingResult.model,
260
- modelRoutedBy: routingResult.routedBy,
261
- ...(routingResult.modelId ? { modelId: routingResult.modelId } : {}),
262
- ...(routingResult.provider ? { provider: routingResult.provider } : {}),
263
- ...(routingResult.openrouterModel ? { openrouterModel: routingResult.openrouterModel } : {}),
264
- };
265
- store.agents[agentId] = agent;
266
- saveAgentStore(store);
267
- // #2085 — also push to the swarm store's agents array so that
268
- // swarm_status reports the new agent. Without this, agent_spawn
269
- // and swarm_status read/write separate stores and agents added
270
- // post-init never show up in swarm_status.agents — confirmed for
271
- // all topologies (hierarchical, mesh, etc.).
272
- try {
273
- const { loadSwarmStore: _loadSwarmStore, saveSwarmStore: _saveSwarmStore } = await import('./swarm-tools.js');
274
- const swarmStore = _loadSwarmStore();
275
- let targetSwarmId = input.swarmId || '';
276
- if (!targetSwarmId) {
277
- // Default to the most-recently-created swarm.
278
- const all = Object.values(swarmStore.swarms);
279
- const latest = all.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())[0];
280
- targetSwarmId = latest?.swarmId || '';
281
- }
282
- if (targetSwarmId && swarmStore.swarms[targetSwarmId]) {
283
- const swarm = swarmStore.swarms[targetSwarmId];
284
- if (!Array.isArray(swarm.agents))
285
- swarm.agents = [];
286
- // Idempotent — don't duplicate if agent_spawn is retried.
287
- if (!swarm.agents.includes(agentId)) {
288
- swarm.agents.push(agentId);
289
- _saveSwarmStore(swarmStore);
290
- }
291
- }
292
- }
293
- catch { /* swarm store unavailable — agent still registered globally */ }
294
- // Record agent in graph database (ADR-087, best-effort)
295
- try {
296
- const { addNode } = await import('../ruvector/graph-backend.js');
297
- await addNode({ id: agentId, type: 'agent', name: agentType });
298
- }
299
- catch { /* graph-node not available */ }
300
- // ACOW — opt-in per-agent COW memory branch. Only when the caller
301
- // supplies `memoryBase` does the agent get an isolated 162-byte branch
302
- // (vs a full .rvf copy). Lazy-imported so agenticow stays off the
303
- // startup path. Non-fatal: a branch failure never blocks the spawn —
304
- // the agent is already registered above.
305
- let memoryBranch;
306
- if (input.memoryBase) {
307
- try {
308
- const { SwarmMemoryBranches } = await import('../services/swarm-memory-branches.js');
309
- const svc = new SwarmMemoryBranches();
310
- const br = await svc.branchForAgent(String(input.memoryBase), agentId, {
311
- dimension: typeof input.memoryDimension === 'number' ? input.memoryDimension : undefined,
312
- });
313
- if (br.branchPath) {
314
- memoryBranch = br.branchPath;
315
- agent.memoryBranch = br.branchPath;
316
- agent.memoryBase = br.basePath;
317
- store.agents[agentId] = agent;
318
- saveAgentStore(store);
319
- }
320
- // else: degraded (agenticow missing / kill-switched) — agent stands
321
- // without an isolated branch; callers see no memoryBranch field.
322
- }
323
- catch { /* COW branch is best-effort; agent already registered */ }
324
- }
325
- // Include deterministic codemod routing info if applicable
326
- const response = {
327
- success: true,
328
- agentId,
329
- agentType: agent.agentType,
330
- model: agent.model,
331
- modelRoutedBy: routingResult.routedBy,
332
- ...(routingResult.modelId ? { modelId: routingResult.modelId } : {}),
333
- ...(routingResult.provider ? { provider: routingResult.provider } : {}),
334
- ...(routingResult.openrouterModel ? { openrouterModel: routingResult.openrouterModel } : {}),
335
- status: 'registered',
336
- createdAt: agent.createdAt,
337
- ...(memoryBranch ? { memoryBranch, memoryBase: agent.memoryBase } : {}),
338
- note: 'Agent registered for coordination. Three execution paths: ' +
339
- '(1) call agent_execute(agentId, prompt) — direct LLM call via Anthropic Messages API (requires ANTHROPIC_API_KEY); ' +
340
- '(2) Claude Code Task tool — spawns a real subagent; ' +
341
- '(3) claude -p — headless background instance.',
342
- };
343
- // Add codemod info if task can skip LLM (deterministic Tier-1, ADR-143)
344
- if (routingResult.canSkipLLM) {
345
- response.canSkipLLM = true;
346
- response.codemodIntent = routingResult.codemodIntent;
347
- response.tier = routingResult.tier;
348
- response.note = `Deterministic codemod can apply "${routingResult.codemodIntent}" — call the hooks_codemod MCP tool (intent="${routingResult.codemodIntent}"), $0, no LLM`;
349
- }
350
- else if (routingResult.tier) {
351
- response.tier = routingResult.tier;
352
- }
353
- return response;
354
- },
355
- },
356
- {
357
- // ADR-095 G1: real LLM execution via the agent registry. Previously
358
- // agent_spawn registered metadata but nothing dispatched work to a
359
- // provider — the wire between AnthropicProvider and the agent
360
- // registry was missing, as the April audit (@roman-rr) called out.
361
- // agent_execute closes that wire by reading the agent's configured
362
- // model, calling the Anthropic Messages API directly via fetch, and
363
- // updating the agent record with lastResult / taskCount / status.
364
- // No mock — actual HTTP request to api.anthropic.com.
365
- name: 'agent_execute',
366
- description: 'Run a task on a previously-spawned agent_spawn record via the Anthropic Messages API with that agent\'s configured model. Use when native Task tool is wrong because (a) you need the spawned agent\'s persistent config (model, instructions, cost-tracking attribution) to apply to this turn, (b) the result needs to feed back into the agent\'s lifecycle (taskCount, lastResult, swarm-coordinated state), or (c) you want explicit model routing via the spawn record\'s `model` field instead of inheriting. For one-shot Claude prompts without a tracked agent, native Task is fine. Requires ANTHROPIC_API_KEY in env.',
367
- category: 'agent',
368
- inputSchema: {
369
- type: 'object',
370
- properties: {
371
- agentId: { type: 'string', description: 'ID of the spawned agent' },
372
- prompt: { type: 'string', description: 'Task / prompt for the agent to execute' },
373
- systemPrompt: { type: 'string', description: 'Optional system prompt (overrides agent default)' },
374
- maxTokens: { type: 'number', description: 'Max output tokens (default 1024)' },
375
- temperature: { type: 'number', description: 'Sampling temperature 0..1 (default 0.7)' },
376
- },
377
- required: ['agentId', 'prompt'],
378
- },
379
- handler: async (input) => {
380
- const vId = validateIdentifier(input.agentId, 'agentId');
381
- if (!vId.valid)
382
- return { success: false, error: `Input validation failed: ${vId.error}` };
383
- const vP = validateText(input.prompt, 'prompt');
384
- if (!vP.valid)
385
- return { success: false, error: `Input validation failed: ${vP.error}` };
386
- // Delegate to the shared core (also used by the workflow runtime).
387
- return executeAgentTask({
388
- agentId: input.agentId,
389
- prompt: input.prompt,
390
- systemPrompt: input.systemPrompt,
391
- maxTokens: input.maxTokens,
392
- temperature: input.temperature,
393
- timeoutMs: input.timeoutMs,
394
- });
395
- },
396
- },
397
- {
398
- name: 'agent_terminate',
399
- description: 'Remove a Ruflo-tracked agent from the registry and free its swarm slot. Use when you need to (a) clean up a spawned agent so its cost-tracking row finalizes, (b) reclaim a swarm-topology slot for another agent, or (c) end a stuck agent without restarting the whole swarm. For one-shot Task tool invocations that already self-terminate, this tool is not needed. Pair with agent_list first to confirm the agentId.',
400
- category: 'agent',
401
- inputSchema: {
402
- type: 'object',
403
- properties: {
404
- agentId: { type: 'string', description: 'ID of agent to terminate' },
405
- force: { type: 'boolean', description: 'Force immediate termination' },
406
- promoteMemory: { type: 'boolean', description: 'When the agent has a per-agent COW memory branch (spawned with memoryBase), promote (merge) its edits into the shared base on terminate. Default false → discard the branch (throw its edits away). No-op when the agent has no branch.' },
407
- },
408
- required: ['agentId'],
409
- },
410
- handler: async (input) => {
411
- const v = validateIdentifier(input.agentId, 'agentId');
412
- if (!v.valid)
413
- return { success: false, error: `Input validation failed: ${v.error}` };
414
- const store = loadAgentStore();
415
- const agentId = input.agentId;
416
- if (store.agents[agentId]) {
417
- const rec = store.agents[agentId];
418
- rec.status = 'terminated';
419
- saveAgentStore(store);
420
- // ACOW — resolve the agent's COW memory branch on teardown: promote
421
- // (merge into base) when asked, else discard. Non-fatal — a failure
422
- // here never blocks termination. Discard needs no agenticow (pure fs),
423
- // so cleanup still works in the degraded path.
424
- let memory;
425
- if (rec.memoryBranch) {
426
- try {
427
- const { SwarmMemoryBranches } = await import('../services/swarm-memory-branches.js');
428
- const svc = new SwarmMemoryBranches();
429
- memory = input.promoteMemory
430
- ? (await svc.promoteAgent(agentId))
431
- : (await svc.discardAgent(agentId));
432
- }
433
- catch { /* best-effort teardown */ }
434
- }
435
- return {
436
- success: true,
437
- agentId,
438
- terminated: true,
439
- terminatedAt: new Date().toISOString(),
440
- ...(memory ? { memory } : {}),
441
- };
442
- }
443
- return {
444
- success: false,
445
- agentId,
446
- error: 'Agent not found',
447
- };
448
- },
449
- },
450
- {
451
- name: 'agent_status',
452
- description: 'Read the lifecycle state of a single tracked agent: idle/running/stopped, current taskCount, lastResult, model, health score. Use when native Task tool is wrong because you need agent-level state (status across turns, accumulated taskCount, last error, swarm coordination) rather than a one-shot response. For inspecting a Task you just ran, native Task output is fine. Pair with agent_list to find the agentId first.',
453
- category: 'agent',
454
- inputSchema: {
455
- type: 'object',
456
- properties: {
457
- agentId: { type: 'string', description: 'ID of agent' },
458
- },
459
- required: ['agentId'],
460
- },
461
- handler: async (input) => {
462
- const v = validateIdentifier(input.agentId, 'agentId');
463
- if (!v.valid)
464
- return { agentId: input.agentId, status: 'not_found', error: `Input validation failed: ${v.error}` };
465
- const agentId = input.agentId;
466
- const agent = loadAllAgents()[agentId]; // #1916: includes hive-mind-spawned workers
467
- if (agent) {
468
- return {
469
- agentId: agent.agentId,
470
- agentType: agent.agentType,
471
- status: agent.status,
472
- health: agent.health,
473
- taskCount: agent.taskCount,
474
- createdAt: agent.createdAt,
475
- domain: agent.domain,
476
- lastResult: agent.lastResult || null,
477
- };
478
- }
479
- return {
480
- agentId,
481
- status: 'not_found',
482
- error: 'Agent not found',
483
- };
484
- },
485
- },
486
- {
487
- name: 'agent_list',
488
- description: 'List every Ruflo-tracked agent in the registry with its type, model, status, and taskCount. Use when native Task tool is wrong because you need to see the swarm-wide agent inventory across turns (which agents exist, their roles, their cost-tracking handles) rather than spawn a new one-shot Task. Filter by status/domain/agentType if needed. For starting a fresh single-shot subagent, native Task is fine.',
489
- category: 'agent',
490
- inputSchema: {
491
- type: 'object',
492
- properties: {
493
- status: { type: 'string', description: 'Filter by status' },
494
- domain: { type: 'string', description: 'Filter by domain' },
495
- includeTerminated: { type: 'boolean', description: 'Include terminated agents' },
496
- },
497
- },
498
- handler: async (input) => {
499
- if (input.status) {
500
- const v = validateIdentifier(input.status, 'status');
501
- if (!v.valid)
502
- return { agents: [], total: 0, error: `Input validation failed: ${v.error}` };
503
- }
504
- if (input.domain) {
505
- const v = validateIdentifier(input.domain, 'domain');
506
- if (!v.valid)
507
- return { agents: [], total: 0, error: `Input validation failed: ${v.error}` };
508
- }
509
- let agents = Object.values(loadAllAgents()); // #1916: includes hive-mind-spawned workers
510
- // Filter by status
511
- if (input.status) {
512
- agents = agents.filter(a => a.status === input.status);
513
- }
514
- else if (!input.includeTerminated) {
515
- agents = agents.filter(a => a.status !== 'terminated');
516
- }
517
- // Filter by domain
518
- if (input.domain) {
519
- agents = agents.filter(a => a.domain === input.domain);
520
- }
521
- return {
522
- agents: agents.map(a => ({
523
- agentId: a.agentId,
524
- agentType: a.agentType,
525
- status: a.status,
526
- health: a.health,
527
- taskCount: a.taskCount,
528
- createdAt: a.createdAt,
529
- domain: a.domain,
530
- })),
531
- total: agents.length,
532
- filters: {
533
- status: input.status,
534
- domain: input.domain,
535
- includeTerminated: input.includeTerminated,
536
- },
537
- };
538
- },
539
- },
540
- {
541
- name: 'agent_pool',
542
- description: 'Manage a fixed-size warm pool of pre-spawned agents to skip cold-start cost on bursty workloads. Use when native Task is wrong because (a) you have a queue of similar tasks and want to amortize spawn latency, (b) cost-tracking wants stable agentIds across requests, or (c) swarm topology requires a known agent count at all times. For one-shot work, just call agent_spawn or native Task. Pool sizes and warm/idle thresholds are set per-pool.',
543
- category: 'agent',
544
- inputSchema: {
545
- type: 'object',
546
- properties: {
547
- action: { type: 'string', enum: ['status', 'scale', 'drain', 'fill'], description: 'Pool action' },
548
- targetSize: { type: 'number', description: 'Target pool size (for scale action)' },
549
- agentType: { type: 'string', description: 'Agent type filter' },
550
- },
551
- required: ['action'],
552
- },
553
- handler: async (input) => {
554
- if (input.agentType) {
555
- const v = validateIdentifier(input.agentType, 'agentType');
556
- if (!v.valid)
557
- return { action: input.action, error: `Input validation failed: ${v.error}` };
558
- }
559
- const store = loadAgentStore();
560
- const agents = Object.values(store.agents).filter(a => a.status !== 'terminated');
561
- const action = input.action || 'status'; // Default to status
562
- if (action === 'status') {
563
- const byType = {};
564
- const byStatus = {};
565
- for (const agent of agents) {
566
- byType[agent.agentType] = (byType[agent.agentType] || 0) + 1;
567
- byStatus[agent.status] = (byStatus[agent.status] || 0) + 1;
568
- }
569
- const idleAgents = agents.filter(a => a.status === 'idle').length;
570
- const busyAgents = agents.filter(a => a.status === 'busy').length;
571
- const utilization = agents.length > 0 ? busyAgents / agents.length : 0;
572
- return {
573
- action,
574
- // CLI expected fields
575
- poolId: 'agent-pool-default',
576
- currentSize: agents.length,
577
- minSize: input.min || 0,
578
- maxSize: input.max || 100,
579
- autoScale: input.autoScale ?? false,
580
- utilization,
581
- agents: agents.map(a => ({
582
- id: a.agentId,
583
- type: a.agentType,
584
- status: a.status,
585
- })),
586
- // Additional fields
587
- id: 'agent-pool-default',
588
- size: agents.length,
589
- totalAgents: agents.length,
590
- byType,
591
- byStatus,
592
- avgHealth: agents.length > 0 ? agents.reduce((sum, a) => sum + a.health, 0) / agents.length : 0,
593
- };
594
- }
595
- if (action === 'scale') {
596
- const targetSize = input.targetSize || 5;
597
- const agentType = input.agentType || 'worker';
598
- const currentSize = agents.filter(a => a.agentType === agentType).length;
599
- const delta = targetSize - currentSize;
600
- const added = [];
601
- const removed = [];
602
- if (delta > 0) {
603
- for (let i = 0; i < delta; i++) {
604
- const agentId = `agent-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
605
- store.agents[agentId] = {
606
- agentId,
607
- agentType,
608
- status: 'idle',
609
- health: 1.0,
610
- taskCount: 0,
611
- config: {},
612
- createdAt: new Date().toISOString(),
613
- };
614
- added.push(agentId);
615
- }
616
- }
617
- else if (delta < 0) {
618
- const toRemove = agents.filter(a => a.agentType === agentType && a.status === 'idle').slice(0, -delta);
619
- for (const agent of toRemove) {
620
- store.agents[agent.agentId].status = 'terminated';
621
- removed.push(agent.agentId);
622
- }
623
- }
624
- saveAgentStore(store);
625
- return {
626
- action,
627
- agentType,
628
- previousSize: currentSize,
629
- targetSize,
630
- newSize: currentSize + delta,
631
- added,
632
- removed,
633
- };
634
- }
635
- if (action === 'drain') {
636
- const agentType = input.agentType;
637
- let drained = 0;
638
- for (const agent of agents) {
639
- if (!agentType || agent.agentType === agentType) {
640
- if (agent.status === 'idle') {
641
- store.agents[agent.agentId].status = 'terminated';
642
- drained++;
643
- }
644
- }
645
- }
646
- saveAgentStore(store);
647
- return {
648
- action,
649
- agentType: agentType || 'all',
650
- drained,
651
- remaining: agents.length - drained,
652
- };
653
- }
654
- return { action, error: 'Unknown action' };
655
- },
656
- },
657
- {
658
- name: 'agent_health',
659
- description: 'Compute an agent\'s rolling health score (0-1) from recent task success ratio + response-latency p50/p95 + error rate. Use when native Task tool is wrong because you\'re running a long-lived agent (autonomous loop / hive-mind worker / federation peer) and need to detect degradation before the breaker trips it. For one-shot Task invocations there is no history to score. Pair with hooks_post-task so the scores stay current.',
660
- category: 'agent',
661
- inputSchema: {
662
- type: 'object',
663
- properties: {
664
- agentId: { type: 'string', description: 'Specific agent ID (optional)' },
665
- threshold: { type: 'number', description: 'Health threshold (0-1)' },
666
- },
667
- },
668
- handler: async (input) => {
669
- if (input.agentId) {
670
- const v = validateIdentifier(input.agentId, 'agentId');
671
- if (!v.valid)
672
- return { agentId: input.agentId, error: `Input validation failed: ${v.error}` };
673
- }
674
- const store = loadAgentStore();
675
- const agents = Object.values(store.agents).filter(a => a.status !== 'terminated');
676
- const threshold = input.threshold || 0.5;
677
- if (input.agentId) {
678
- const agent = store.agents[input.agentId];
679
- if (agent) {
680
- return {
681
- agentId: agent.agentId,
682
- health: agent.health,
683
- status: agent.status,
684
- healthy: agent.health >= threshold,
685
- taskCount: agent.taskCount,
686
- uptime: Date.now() - new Date(agent.createdAt).getTime(),
687
- };
688
- }
689
- return { agentId: input.agentId, error: 'Agent not found' };
690
- }
691
- const healthyAgents = agents.filter(a => a.health >= threshold);
692
- const degradedAgents = agents.filter(a => a.health >= 0.3 && a.health < threshold);
693
- const unhealthyAgents = agents.filter(a => a.health < 0.3);
694
- const avgHealth = agents.length > 0 ? agents.reduce((sum, a) => sum + a.health, 0) / agents.length : 1;
695
- return {
696
- // CLI expected fields
697
- agents: agents.map(a => {
698
- const uptime = Date.now() - new Date(a.createdAt).getTime();
699
- return {
700
- id: a.agentId,
701
- type: a.agentType,
702
- health: a.health >= threshold ? 'healthy' : (a.health >= 0.3 ? 'degraded' : 'unhealthy'),
703
- uptime,
704
- tasks: { active: a.taskCount > 0 ? 1 : 0, queued: 0, completed: a.taskCount, failed: 0 },
705
- _note: 'Per-agent OS metrics not available — use system_metrics for real CPU/memory',
706
- };
707
- }),
708
- overall: {
709
- healthy: healthyAgents.length,
710
- degraded: degradedAgents.length,
711
- unhealthy: unhealthyAgents.length,
712
- cpu: null,
713
- memory: null,
714
- _note: 'Per-agent CPU/memory not available — use system_metrics for real OS-level stats',
715
- score: Math.round(avgHealth * 100),
716
- issues: unhealthyAgents.length,
717
- },
718
- // Additional fields
719
- total: agents.length,
720
- healthyCount: healthyAgents.length,
721
- unhealthyCount: unhealthyAgents.length,
722
- threshold,
723
- avgHealth,
724
- unhealthyAgents: unhealthyAgents.map(a => ({
725
- agentId: a.agentId,
726
- health: a.health,
727
- status: a.status,
728
- })),
729
- };
730
- },
731
- },
732
- {
733
- name: 'agent_update',
734
- description: 'Mutate a tracked agent\'s config (model, instructions, status, health) without re-spawning. Use when native Task tool is wrong because the agent already has accumulated state (taskCount, swarm membership, cost-tracking attribution) and you only need to tweak one field — for example, promoting an idle agent to running on a new task, or rotating its model from haiku to sonnet mid-loop. For a brand-new subagent, agent_spawn (or native Task) is the right call.',
735
- category: 'agent',
736
- inputSchema: {
737
- type: 'object',
738
- properties: {
739
- agentId: { type: 'string', description: 'ID of agent' },
740
- status: { type: 'string', description: 'New status' },
741
- health: { type: 'number', description: 'Health value (0-1)' },
742
- taskCount: { type: 'number', description: 'Task count' },
743
- config: { type: 'object', description: 'Config updates' },
744
- },
745
- required: ['agentId'],
746
- },
747
- handler: async (input) => {
748
- const v = validateIdentifier(input.agentId, 'agentId');
749
- if (!v.valid)
750
- return { success: false, agentId: input.agentId, error: `Input validation failed: ${v.error}` };
751
- if (input.status) {
752
- const vs = validateIdentifier(input.status, 'status');
753
- if (!vs.valid)
754
- return { success: false, agentId: input.agentId, error: `Input validation failed: ${vs.error}` };
755
- }
756
- const store = loadAgentStore();
757
- const agentId = input.agentId;
758
- const agent = store.agents[agentId];
759
- if (agent) {
760
- if (input.status)
761
- agent.status = input.status;
762
- if (typeof input.health === 'number')
763
- agent.health = input.health;
764
- if (typeof input.taskCount === 'number')
765
- agent.taskCount = input.taskCount;
766
- if (input.config) {
767
- agent.config = { ...agent.config, ...input.config };
768
- }
769
- saveAgentStore(store);
770
- return {
771
- success: true,
772
- agentId,
773
- updated: true,
774
- agent: {
775
- agentId: agent.agentId,
776
- status: agent.status,
777
- health: agent.health,
778
- taskCount: agent.taskCount,
779
- },
780
- };
781
- }
782
- return {
783
- success: false,
784
- agentId,
785
- error: 'Agent not found',
786
- };
787
- },
788
- },
789
- {
790
- // #1916 — the `ruflo agent logs <id>` CLI subcommand and the guidance
791
- // surface both reference an `agent_logs` MCP tool that was never
792
- // registered, so it errored with `MCP tool not found: agent_logs`.
793
- // This is the registered handler. Note: agents don't yet keep a
794
- // structured per-agent activity log (that lands with hive worker
795
- // execution wiring — see #1916), so for now we surface the agent's
796
- // last task result as a single synthetic entry, or an explicit empty
797
- // response. The shape matches what the CLI `logs` subcommand expects:
798
- // `{ agentId, entries: [{timestamp,level,message,context?}], total }`.
799
- name: 'agent_logs',
800
- description: 'Return recorded activity-log entries for a tracked agent (idle/running history, last task result). Use when native Task tool is wrong because you need the agent\'s log across turns (what it did, last error/result, swarm context) rather than a one-shot Task transcript. For a Task you just ran, native Task output is fine. Pair with agent_list to find the agentId. (Hive-mind-spawned workers are resolved here too.) Today this returns the last task result as a synthetic entry — full per-agent activity logs land with hive worker execution wiring (ruvnet/ruflo#1916).',
801
- category: 'agent',
802
- inputSchema: {
803
- type: 'object',
804
- properties: {
805
- agentId: { type: 'string', description: 'ID of agent' },
806
- tail: { type: 'number', description: 'Max recent entries to return (default 50)' },
807
- level: { type: 'string', enum: ['debug', 'info', 'warn', 'error'], description: 'Minimum log level (currently advisory — entries are synthetic)' },
808
- since: { type: 'string', description: 'Show logs since, e.g. "1h" / "30m" (currently advisory)' },
809
- },
810
- required: ['agentId'],
811
- },
812
- handler: async (input) => {
813
- const v = validateIdentifier(input.agentId, 'agentId');
814
- if (!v.valid)
815
- return { agentId: input.agentId, entries: [], total: 0, error: `Input validation failed: ${v.error}` };
816
- const agentId = input.agentId;
817
- const agent = loadAllAgents()[agentId]; // #1916: includes hive-mind-spawned workers
818
- if (!agent) {
819
- return { agentId, entries: [], total: 0, error: 'Agent not found' };
820
- }
821
- const entries = [];
822
- entries.push({ timestamp: agent.createdAt, level: 'info', message: `agent created (type=${agent.agentType}, status=${agent.status})` });
823
- if (agent.lastResult) {
824
- entries.push({ timestamp: agent.createdAt, level: 'info', message: 'last task result', context: agent.lastResult });
825
- }
826
- const tail = typeof input.tail === 'number' && input.tail > 0 ? Math.floor(input.tail) : 50;
827
- const sliced = entries.slice(-tail);
828
- return {
829
- agentId: agent.agentId,
830
- entries: sliced,
831
- total: entries.length,
832
- note: 'per-agent activity logging is not yet wired; entries are synthetic (ruvnet/ruflo#1916)',
833
- };
834
- },
835
- },
836
- ];
837
- //# sourceMappingURL=agent-tools.js.map