@claude-flow/cli 3.21.1 → 3.22.0

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 (568) hide show
  1. package/.claude/helpers/helpers.manifest.json +12 -0
  2. package/.claude/helpers/hook-handler.cjs +26 -5
  3. package/.claude/helpers/intelligence.cjs +4 -1
  4. package/dist/src/commands/daemon.js +23 -2
  5. package/dist/src/commands/memory-distill.d.ts +27 -0
  6. package/dist/src/commands/memory-distill.js +374 -0
  7. package/dist/src/commands/memory.js +4 -2
  8. package/dist/src/index.d.ts +1 -1
  9. package/dist/src/index.js +22 -1
  10. package/dist/src/init/executor.js +20 -0
  11. package/dist/src/init/helper-refresh.d.ts +19 -0
  12. package/dist/src/init/helper-refresh.js +175 -0
  13. package/dist/src/init/helper-signing.d.ts +30 -0
  14. package/dist/src/init/helper-signing.js +60 -0
  15. package/dist/src/init/helpers-generator.d.ts +16 -0
  16. package/dist/src/init/helpers-generator.js +63 -6
  17. package/dist/src/init/statusline-generator.js +18 -7
  18. package/dist/src/mcp-client.js +13 -0
  19. package/dist/src/mcp-tools/agenticow-speculate-tools.js +9 -2
  20. package/dist/src/mcp-tools/browser-intent-tools.d.ts +162 -0
  21. package/dist/src/mcp-tools/browser-intent-tools.js +548 -0
  22. package/dist/src/mcp-tools/browser-tools.d.ts +9 -1
  23. package/dist/src/mcp-tools/browser-tools.js +4 -1
  24. package/dist/src/memory/memory-bridge.js +67 -47
  25. package/dist/src/memory/memory-initializer.d.ts +71 -0
  26. package/dist/src/memory/memory-initializer.js +330 -2
  27. package/dist/src/services/distill-tuning.d.ts +111 -0
  28. package/dist/src/services/distill-tuning.js +510 -0
  29. package/dist/src/services/memory-distillation.d.ts +41 -0
  30. package/dist/src/services/memory-distillation.js +277 -0
  31. package/dist/src/services/worker-daemon.d.ts +22 -1
  32. package/dist/src/services/worker-daemon.js +117 -6
  33. package/package.json +5 -2
  34. package/dist/src/agenticow/speculative-exploration.d.ts.map +0 -1
  35. package/dist/src/agenticow/speculative-exploration.js.map +0 -1
  36. package/dist/src/appliance/gguf-engine.d.ts.map +0 -1
  37. package/dist/src/appliance/gguf-engine.js.map +0 -1
  38. package/dist/src/appliance/ruvllm-bridge.d.ts.map +0 -1
  39. package/dist/src/appliance/ruvllm-bridge.js.map +0 -1
  40. package/dist/src/appliance/rvfa-builder.d.ts.map +0 -1
  41. package/dist/src/appliance/rvfa-builder.js.map +0 -1
  42. package/dist/src/appliance/rvfa-distribution.d.ts.map +0 -1
  43. package/dist/src/appliance/rvfa-distribution.js.map +0 -1
  44. package/dist/src/appliance/rvfa-format.d.ts.map +0 -1
  45. package/dist/src/appliance/rvfa-format.js.map +0 -1
  46. package/dist/src/appliance/rvfa-runner.d.ts.map +0 -1
  47. package/dist/src/appliance/rvfa-runner.js.map +0 -1
  48. package/dist/src/appliance/rvfa-signing.d.ts.map +0 -1
  49. package/dist/src/appliance/rvfa-signing.js.map +0 -1
  50. package/dist/src/autopilot-state.d.ts.map +0 -1
  51. package/dist/src/autopilot-state.js.map +0 -1
  52. package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts.map +0 -1
  53. package/dist/src/benchmarks/gaia-agent-planning.smoke.js.map +0 -1
  54. package/dist/src/benchmarks/gaia-agent.d.ts.map +0 -1
  55. package/dist/src/benchmarks/gaia-agent.js.map +0 -1
  56. package/dist/src/benchmarks/gaia-causal-memory.d.ts.map +0 -1
  57. package/dist/src/benchmarks/gaia-causal-memory.js.map +0 -1
  58. package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts.map +0 -1
  59. package/dist/src/benchmarks/gaia-causal-memory.smoke.js.map +0 -1
  60. package/dist/src/benchmarks/gaia-convergence.d.ts.map +0 -1
  61. package/dist/src/benchmarks/gaia-convergence.js.map +0 -1
  62. package/dist/src/benchmarks/gaia-convergence.smoke.d.ts.map +0 -1
  63. package/dist/src/benchmarks/gaia-convergence.smoke.js.map +0 -1
  64. package/dist/src/benchmarks/gaia-critic.d.ts.map +0 -1
  65. package/dist/src/benchmarks/gaia-critic.js.map +0 -1
  66. package/dist/src/benchmarks/gaia-critic.smoke.d.ts.map +0 -1
  67. package/dist/src/benchmarks/gaia-critic.smoke.js.map +0 -1
  68. package/dist/src/benchmarks/gaia-decomposer.d.ts.map +0 -1
  69. package/dist/src/benchmarks/gaia-decomposer.js.map +0 -1
  70. package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts.map +0 -1
  71. package/dist/src/benchmarks/gaia-decomposer.smoke.js.map +0 -1
  72. package/dist/src/benchmarks/gaia-e2e-smoke.d.ts.map +0 -1
  73. package/dist/src/benchmarks/gaia-e2e-smoke.js.map +0 -1
  74. package/dist/src/benchmarks/gaia-extract.smoke.d.ts.map +0 -1
  75. package/dist/src/benchmarks/gaia-extract.smoke.js.map +0 -1
  76. package/dist/src/benchmarks/gaia-hardness/features.d.ts.map +0 -1
  77. package/dist/src/benchmarks/gaia-hardness/features.js.map +0 -1
  78. package/dist/src/benchmarks/gaia-hardness/predictor.d.ts.map +0 -1
  79. package/dist/src/benchmarks/gaia-hardness/predictor.js.map +0 -1
  80. package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts.map +0 -1
  81. package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js.map +0 -1
  82. package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts.map +0 -1
  83. package/dist/src/benchmarks/gaia-hardness/train-data-loader.js.map +0 -1
  84. package/dist/src/benchmarks/gaia-judge.d.ts.map +0 -1
  85. package/dist/src/benchmarks/gaia-judge.js.map +0 -1
  86. package/dist/src/benchmarks/gaia-loader.d.ts.map +0 -1
  87. package/dist/src/benchmarks/gaia-loader.js.map +0 -1
  88. package/dist/src/benchmarks/gaia-tools/file_read.d.ts.map +0 -1
  89. package/dist/src/benchmarks/gaia-tools/file_read.js.map +0 -1
  90. package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts.map +0 -1
  91. package/dist/src/benchmarks/gaia-tools/grounded_query.js.map +0 -1
  92. package/dist/src/benchmarks/gaia-tools/index.d.ts.map +0 -1
  93. package/dist/src/benchmarks/gaia-tools/index.js.map +0 -1
  94. package/dist/src/benchmarks/gaia-tools/types.d.ts.map +0 -1
  95. package/dist/src/benchmarks/gaia-tools/types.js.map +0 -1
  96. package/dist/src/benchmarks/gaia-tools/web_search.d.ts.map +0 -1
  97. package/dist/src/benchmarks/gaia-tools/web_search.js.map +0 -1
  98. package/dist/src/benchmarks/gaia-voting.d.ts.map +0 -1
  99. package/dist/src/benchmarks/gaia-voting.js.map +0 -1
  100. package/dist/src/benchmarks/gaia-voting.smoke.d.ts.map +0 -1
  101. package/dist/src/benchmarks/gaia-voting.smoke.js.map +0 -1
  102. package/dist/src/benchmarks/pretrain/index.d.ts.map +0 -1
  103. package/dist/src/benchmarks/pretrain/index.js.map +0 -1
  104. package/dist/src/business-pods/bbs-budget-tracker.d.ts.map +0 -1
  105. package/dist/src/business-pods/bbs-budget-tracker.js.map +0 -1
  106. package/dist/src/business-pods/domain-affinity-policy.d.ts.map +0 -1
  107. package/dist/src/business-pods/domain-affinity-policy.js.map +0 -1
  108. package/dist/src/business-pods/pod-schema.d.ts.map +0 -1
  109. package/dist/src/business-pods/pod-schema.js.map +0 -1
  110. package/dist/src/commands/agent-wasm.d.ts.map +0 -1
  111. package/dist/src/commands/agent-wasm.js.map +0 -1
  112. package/dist/src/commands/agent.d.ts.map +0 -1
  113. package/dist/src/commands/agent.js.map +0 -1
  114. package/dist/src/commands/analyze.d.ts.map +0 -1
  115. package/dist/src/commands/analyze.js.map +0 -1
  116. package/dist/src/commands/appliance-advanced.d.ts.map +0 -1
  117. package/dist/src/commands/appliance-advanced.js.map +0 -1
  118. package/dist/src/commands/appliance.d.ts.map +0 -1
  119. package/dist/src/commands/appliance.js.map +0 -1
  120. package/dist/src/commands/autopilot.d.ts.map +0 -1
  121. package/dist/src/commands/autopilot.js.map +0 -1
  122. package/dist/src/commands/benchmark.d.ts.map +0 -1
  123. package/dist/src/commands/benchmark.js.map +0 -1
  124. package/dist/src/commands/claims.d.ts.map +0 -1
  125. package/dist/src/commands/claims.js.map +0 -1
  126. package/dist/src/commands/cleanup.d.ts.map +0 -1
  127. package/dist/src/commands/cleanup.js.map +0 -1
  128. package/dist/src/commands/completions.d.ts.map +0 -1
  129. package/dist/src/commands/completions.js.map +0 -1
  130. package/dist/src/commands/config.d.ts.map +0 -1
  131. package/dist/src/commands/config.js.map +0 -1
  132. package/dist/src/commands/daemon.d.ts.map +0 -1
  133. package/dist/src/commands/daemon.js.map +0 -1
  134. package/dist/src/commands/deployment.d.ts.map +0 -1
  135. package/dist/src/commands/deployment.js.map +0 -1
  136. package/dist/src/commands/doctor.d.ts.map +0 -1
  137. package/dist/src/commands/doctor.js.map +0 -1
  138. package/dist/src/commands/eject.d.ts.map +0 -1
  139. package/dist/src/commands/eject.js.map +0 -1
  140. package/dist/src/commands/embeddings.d.ts.map +0 -1
  141. package/dist/src/commands/embeddings.js.map +0 -1
  142. package/dist/src/commands/gaia-bench.d.ts.map +0 -1
  143. package/dist/src/commands/gaia-bench.js.map +0 -1
  144. package/dist/src/commands/guidance.d.ts.map +0 -1
  145. package/dist/src/commands/guidance.js.map +0 -1
  146. package/dist/src/commands/hive-mind.d.ts.map +0 -1
  147. package/dist/src/commands/hive-mind.js.map +0 -1
  148. package/dist/src/commands/hooks.d.ts.map +0 -1
  149. package/dist/src/commands/hooks.js.map +0 -1
  150. package/dist/src/commands/index.d.ts.map +0 -1
  151. package/dist/src/commands/index.js.map +0 -1
  152. package/dist/src/commands/init.d.ts.map +0 -1
  153. package/dist/src/commands/init.js.map +0 -1
  154. package/dist/src/commands/issues.d.ts.map +0 -1
  155. package/dist/src/commands/issues.js.map +0 -1
  156. package/dist/src/commands/mcp.d.ts.map +0 -1
  157. package/dist/src/commands/mcp.js.map +0 -1
  158. package/dist/src/commands/memory.d.ts.map +0 -1
  159. package/dist/src/commands/memory.js.map +0 -1
  160. package/dist/src/commands/metaharness.d.ts.map +0 -1
  161. package/dist/src/commands/metaharness.js.map +0 -1
  162. package/dist/src/commands/migrate.d.ts.map +0 -1
  163. package/dist/src/commands/migrate.js.map +0 -1
  164. package/dist/src/commands/neural.d.ts.map +0 -1
  165. package/dist/src/commands/neural.js.map +0 -1
  166. package/dist/src/commands/performance.d.ts.map +0 -1
  167. package/dist/src/commands/performance.js.map +0 -1
  168. package/dist/src/commands/plugins.d.ts.map +0 -1
  169. package/dist/src/commands/plugins.js.map +0 -1
  170. package/dist/src/commands/process.d.ts.map +0 -1
  171. package/dist/src/commands/process.js.map +0 -1
  172. package/dist/src/commands/progress.d.ts.map +0 -1
  173. package/dist/src/commands/progress.js.map +0 -1
  174. package/dist/src/commands/providers.d.ts.map +0 -1
  175. package/dist/src/commands/providers.js.map +0 -1
  176. package/dist/src/commands/route.d.ts.map +0 -1
  177. package/dist/src/commands/route.js.map +0 -1
  178. package/dist/src/commands/ruvector/backup.d.ts.map +0 -1
  179. package/dist/src/commands/ruvector/backup.js.map +0 -1
  180. package/dist/src/commands/ruvector/benchmark.d.ts.map +0 -1
  181. package/dist/src/commands/ruvector/benchmark.js.map +0 -1
  182. package/dist/src/commands/ruvector/import.d.ts.map +0 -1
  183. package/dist/src/commands/ruvector/import.js.map +0 -1
  184. package/dist/src/commands/ruvector/index.d.ts.map +0 -1
  185. package/dist/src/commands/ruvector/index.js.map +0 -1
  186. package/dist/src/commands/ruvector/init.d.ts.map +0 -1
  187. package/dist/src/commands/ruvector/init.js.map +0 -1
  188. package/dist/src/commands/ruvector/migrate.d.ts.map +0 -1
  189. package/dist/src/commands/ruvector/migrate.js.map +0 -1
  190. package/dist/src/commands/ruvector/optimize.d.ts.map +0 -1
  191. package/dist/src/commands/ruvector/optimize.js.map +0 -1
  192. package/dist/src/commands/ruvector/pg-utils.d.ts.map +0 -1
  193. package/dist/src/commands/ruvector/pg-utils.js.map +0 -1
  194. package/dist/src/commands/ruvector/setup.d.ts.map +0 -1
  195. package/dist/src/commands/ruvector/setup.js.map +0 -1
  196. package/dist/src/commands/ruvector/status.d.ts.map +0 -1
  197. package/dist/src/commands/ruvector/status.js.map +0 -1
  198. package/dist/src/commands/security.d.ts.map +0 -1
  199. package/dist/src/commands/security.js.map +0 -1
  200. package/dist/src/commands/session.d.ts.map +0 -1
  201. package/dist/src/commands/session.js.map +0 -1
  202. package/dist/src/commands/start.d.ts.map +0 -1
  203. package/dist/src/commands/start.js.map +0 -1
  204. package/dist/src/commands/status.d.ts.map +0 -1
  205. package/dist/src/commands/status.js.map +0 -1
  206. package/dist/src/commands/swarm.d.ts.map +0 -1
  207. package/dist/src/commands/swarm.js.map +0 -1
  208. package/dist/src/commands/task.d.ts.map +0 -1
  209. package/dist/src/commands/task.js.map +0 -1
  210. package/dist/src/commands/transfer-store.d.ts.map +0 -1
  211. package/dist/src/commands/transfer-store.js.map +0 -1
  212. package/dist/src/commands/update.d.ts.map +0 -1
  213. package/dist/src/commands/update.js.map +0 -1
  214. package/dist/src/commands/verify.d.ts.map +0 -1
  215. package/dist/src/commands/verify.js.map +0 -1
  216. package/dist/src/commands/workflow.d.ts.map +0 -1
  217. package/dist/src/commands/workflow.js.map +0 -1
  218. package/dist/src/config-adapter.d.ts.map +0 -1
  219. package/dist/src/config-adapter.js.map +0 -1
  220. package/dist/src/encryption/vault.d.ts.map +0 -1
  221. package/dist/src/encryption/vault.js.map +0 -1
  222. package/dist/src/fs-secure.d.ts.map +0 -1
  223. package/dist/src/fs-secure.js.map +0 -1
  224. package/dist/src/index.d.ts.map +0 -1
  225. package/dist/src/index.js.map +0 -1
  226. package/dist/src/infrastructure/in-memory-repositories.d.ts.map +0 -1
  227. package/dist/src/infrastructure/in-memory-repositories.js.map +0 -1
  228. package/dist/src/init/claudemd-generator.d.ts.map +0 -1
  229. package/dist/src/init/claudemd-generator.js.map +0 -1
  230. package/dist/src/init/executor.d.ts.map +0 -1
  231. package/dist/src/init/executor.js.map +0 -1
  232. package/dist/src/init/helpers-generator.d.ts.map +0 -1
  233. package/dist/src/init/helpers-generator.js.map +0 -1
  234. package/dist/src/init/index.d.ts.map +0 -1
  235. package/dist/src/init/index.js.map +0 -1
  236. package/dist/src/init/mcp-generator.d.ts.map +0 -1
  237. package/dist/src/init/mcp-generator.js.map +0 -1
  238. package/dist/src/init/memory-package-resolver.d.ts.map +0 -1
  239. package/dist/src/init/memory-package-resolver.js.map +0 -1
  240. package/dist/src/init/settings-generator.d.ts.map +0 -1
  241. package/dist/src/init/settings-generator.js.map +0 -1
  242. package/dist/src/init/statusline-generator.d.ts.map +0 -1
  243. package/dist/src/init/statusline-generator.js.map +0 -1
  244. package/dist/src/init/types.d.ts.map +0 -1
  245. package/dist/src/init/types.js.map +0 -1
  246. package/dist/src/log-filters.d.ts.map +0 -1
  247. package/dist/src/log-filters.js.map +0 -1
  248. package/dist/src/mcp-client.d.ts.map +0 -1
  249. package/dist/src/mcp-client.js.map +0 -1
  250. package/dist/src/mcp-server.d.ts.map +0 -1
  251. package/dist/src/mcp-server.js.map +0 -1
  252. package/dist/src/mcp-tools/agent-execute-core.d.ts.map +0 -1
  253. package/dist/src/mcp-tools/agent-execute-core.js.map +0 -1
  254. package/dist/src/mcp-tools/agent-tools.d.ts.map +0 -1
  255. package/dist/src/mcp-tools/agent-tools.js.map +0 -1
  256. package/dist/src/mcp-tools/agentbbs-tools.d.ts.map +0 -1
  257. package/dist/src/mcp-tools/agentbbs-tools.js.map +0 -1
  258. package/dist/src/mcp-tools/agentdb-tools.d.ts.map +0 -1
  259. package/dist/src/mcp-tools/agentdb-tools.js.map +0 -1
  260. package/dist/src/mcp-tools/agenticow-loader.d.ts.map +0 -1
  261. package/dist/src/mcp-tools/agenticow-loader.js.map +0 -1
  262. package/dist/src/mcp-tools/agenticow-speculate-tools.d.ts.map +0 -1
  263. package/dist/src/mcp-tools/agenticow-speculate-tools.js.map +0 -1
  264. package/dist/src/mcp-tools/agenticow-tools.d.ts.map +0 -1
  265. package/dist/src/mcp-tools/agenticow-tools.js.map +0 -1
  266. package/dist/src/mcp-tools/analyze-tools.d.ts.map +0 -1
  267. package/dist/src/mcp-tools/analyze-tools.js.map +0 -1
  268. package/dist/src/mcp-tools/auto-install.d.ts.map +0 -1
  269. package/dist/src/mcp-tools/auto-install.js.map +0 -1
  270. package/dist/src/mcp-tools/autopilot-tools.d.ts.map +0 -1
  271. package/dist/src/mcp-tools/autopilot-tools.js.map +0 -1
  272. package/dist/src/mcp-tools/browser-session-tools.d.ts.map +0 -1
  273. package/dist/src/mcp-tools/browser-session-tools.js.map +0 -1
  274. package/dist/src/mcp-tools/browser-tools.d.ts.map +0 -1
  275. package/dist/src/mcp-tools/browser-tools.js.map +0 -1
  276. package/dist/src/mcp-tools/business-pod-tools.d.ts.map +0 -1
  277. package/dist/src/mcp-tools/business-pod-tools.js.map +0 -1
  278. package/dist/src/mcp-tools/claims-tools.d.ts.map +0 -1
  279. package/dist/src/mcp-tools/claims-tools.js.map +0 -1
  280. package/dist/src/mcp-tools/config-tools.d.ts.map +0 -1
  281. package/dist/src/mcp-tools/config-tools.js.map +0 -1
  282. package/dist/src/mcp-tools/coordination-tools.d.ts.map +0 -1
  283. package/dist/src/mcp-tools/coordination-tools.js.map +0 -1
  284. package/dist/src/mcp-tools/daa-tools.d.ts.map +0 -1
  285. package/dist/src/mcp-tools/daa-tools.js.map +0 -1
  286. package/dist/src/mcp-tools/embeddings-tools.d.ts.map +0 -1
  287. package/dist/src/mcp-tools/embeddings-tools.js.map +0 -1
  288. package/dist/src/mcp-tools/github-tools.d.ts.map +0 -1
  289. package/dist/src/mcp-tools/github-tools.js.map +0 -1
  290. package/dist/src/mcp-tools/guidance-tools.d.ts.map +0 -1
  291. package/dist/src/mcp-tools/guidance-tools.js.map +0 -1
  292. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +0 -1
  293. package/dist/src/mcp-tools/hive-mind-tools.js.map +0 -1
  294. package/dist/src/mcp-tools/hooks-tools.d.ts.map +0 -1
  295. package/dist/src/mcp-tools/hooks-tools.js.map +0 -1
  296. package/dist/src/mcp-tools/http-fetch-tools.d.ts.map +0 -1
  297. package/dist/src/mcp-tools/http-fetch-tools.js.map +0 -1
  298. package/dist/src/mcp-tools/index.d.ts.map +0 -1
  299. package/dist/src/mcp-tools/index.js.map +0 -1
  300. package/dist/src/mcp-tools/managed-agent-tools.d.ts.map +0 -1
  301. package/dist/src/mcp-tools/managed-agent-tools.js.map +0 -1
  302. package/dist/src/mcp-tools/memory-tools.d.ts.map +0 -1
  303. package/dist/src/mcp-tools/memory-tools.js.map +0 -1
  304. package/dist/src/mcp-tools/metaharness-tools.d.ts.map +0 -1
  305. package/dist/src/mcp-tools/metaharness-tools.js.map +0 -1
  306. package/dist/src/mcp-tools/neural-tools.d.ts.map +0 -1
  307. package/dist/src/mcp-tools/neural-tools.js.map +0 -1
  308. package/dist/src/mcp-tools/performance-tools.d.ts.map +0 -1
  309. package/dist/src/mcp-tools/performance-tools.js.map +0 -1
  310. package/dist/src/mcp-tools/progress-tools.d.ts.map +0 -1
  311. package/dist/src/mcp-tools/progress-tools.js.map +0 -1
  312. package/dist/src/mcp-tools/request-tracker.d.ts.map +0 -1
  313. package/dist/src/mcp-tools/request-tracker.js.map +0 -1
  314. package/dist/src/mcp-tools/ruvllm-tools.d.ts.map +0 -1
  315. package/dist/src/mcp-tools/ruvllm-tools.js.map +0 -1
  316. package/dist/src/mcp-tools/security-tools.d.ts.map +0 -1
  317. package/dist/src/mcp-tools/security-tools.js.map +0 -1
  318. package/dist/src/mcp-tools/session-tools.d.ts.map +0 -1
  319. package/dist/src/mcp-tools/session-tools.js.map +0 -1
  320. package/dist/src/mcp-tools/swarm-tools.d.ts.map +0 -1
  321. package/dist/src/mcp-tools/swarm-tools.js.map +0 -1
  322. package/dist/src/mcp-tools/system-tools.d.ts.map +0 -1
  323. package/dist/src/mcp-tools/system-tools.js.map +0 -1
  324. package/dist/src/mcp-tools/task-tools.d.ts.map +0 -1
  325. package/dist/src/mcp-tools/task-tools.js.map +0 -1
  326. package/dist/src/mcp-tools/terminal-tools.d.ts.map +0 -1
  327. package/dist/src/mcp-tools/terminal-tools.js.map +0 -1
  328. package/dist/src/mcp-tools/testgen-tools.d.ts.map +0 -1
  329. package/dist/src/mcp-tools/testgen-tools.js.map +0 -1
  330. package/dist/src/mcp-tools/tool-loop-guardrail.d.ts.map +0 -1
  331. package/dist/src/mcp-tools/tool-loop-guardrail.js.map +0 -1
  332. package/dist/src/mcp-tools/transfer-tools.d.ts.map +0 -1
  333. package/dist/src/mcp-tools/transfer-tools.js.map +0 -1
  334. package/dist/src/mcp-tools/types.d.ts.map +0 -1
  335. package/dist/src/mcp-tools/types.js.map +0 -1
  336. package/dist/src/mcp-tools/validate-input.d.ts.map +0 -1
  337. package/dist/src/mcp-tools/validate-input.js.map +0 -1
  338. package/dist/src/mcp-tools/wasm-agent-tools.d.ts.map +0 -1
  339. package/dist/src/mcp-tools/wasm-agent-tools.js.map +0 -1
  340. package/dist/src/mcp-tools/workflow-tools.d.ts.map +0 -1
  341. package/dist/src/mcp-tools/workflow-tools.js.map +0 -1
  342. package/dist/src/memory/bge-embedder.d.ts.map +0 -1
  343. package/dist/src/memory/bge-embedder.js.map +0 -1
  344. package/dist/src/memory/cross-encoder-rerank.d.ts.map +0 -1
  345. package/dist/src/memory/cross-encoder-rerank.js.map +0 -1
  346. package/dist/src/memory/embedding-quantization.d.ts.map +0 -1
  347. package/dist/src/memory/embedding-quantization.js.map +0 -1
  348. package/dist/src/memory/ewc-consolidation.d.ts.map +0 -1
  349. package/dist/src/memory/ewc-consolidation.js.map +0 -1
  350. package/dist/src/memory/graph-edge-writer.d.ts.map +0 -1
  351. package/dist/src/memory/graph-edge-writer.js.map +0 -1
  352. package/dist/src/memory/hybrid-retrieval.d.ts.map +0 -1
  353. package/dist/src/memory/hybrid-retrieval.js.map +0 -1
  354. package/dist/src/memory/intelligence.d.ts.map +0 -1
  355. package/dist/src/memory/intelligence.js.map +0 -1
  356. package/dist/src/memory/lucene-bm25.d.ts.map +0 -1
  357. package/dist/src/memory/lucene-bm25.js.map +0 -1
  358. package/dist/src/memory/memory-bridge.d.ts.map +0 -1
  359. package/dist/src/memory/memory-bridge.js.map +0 -1
  360. package/dist/src/memory/memory-initializer.d.ts.map +0 -1
  361. package/dist/src/memory/memory-initializer.js.map +0 -1
  362. package/dist/src/memory/neural-package-bridge.d.ts.map +0 -1
  363. package/dist/src/memory/neural-package-bridge.js.map +0 -1
  364. package/dist/src/memory/rabitq-index.d.ts.map +0 -1
  365. package/dist/src/memory/rabitq-index.js.map +0 -1
  366. package/dist/src/memory/sona-optimizer.d.ts.map +0 -1
  367. package/dist/src/memory/sona-optimizer.js.map +0 -1
  368. package/dist/src/memory/structured-distill.d.ts.map +0 -1
  369. package/dist/src/memory/structured-distill.js.map +0 -1
  370. package/dist/src/output.d.ts.map +0 -1
  371. package/dist/src/output.js.map +0 -1
  372. package/dist/src/parser.d.ts.map +0 -1
  373. package/dist/src/parser.js.map +0 -1
  374. package/dist/src/plugins/manager.d.ts.map +0 -1
  375. package/dist/src/plugins/manager.js.map +0 -1
  376. package/dist/src/plugins/store/discovery.d.ts.map +0 -1
  377. package/dist/src/plugins/store/discovery.js.map +0 -1
  378. package/dist/src/plugins/store/index.d.ts.map +0 -1
  379. package/dist/src/plugins/store/index.js.map +0 -1
  380. package/dist/src/plugins/store/search.d.ts.map +0 -1
  381. package/dist/src/plugins/store/search.js.map +0 -1
  382. package/dist/src/plugins/store/types.d.ts.map +0 -1
  383. package/dist/src/plugins/store/types.js.map +0 -1
  384. package/dist/src/plugins/tests/demo-plugin-store.d.ts.map +0 -1
  385. package/dist/src/plugins/tests/demo-plugin-store.js.map +0 -1
  386. package/dist/src/plugins/tests/standalone-test.d.ts.map +0 -1
  387. package/dist/src/plugins/tests/standalone-test.js.map +0 -1
  388. package/dist/src/plugins/tests/test-plugin-store.d.ts.map +0 -1
  389. package/dist/src/plugins/tests/test-plugin-store.js.map +0 -1
  390. package/dist/src/production/circuit-breaker.d.ts.map +0 -1
  391. package/dist/src/production/circuit-breaker.js.map +0 -1
  392. package/dist/src/production/error-handler.d.ts.map +0 -1
  393. package/dist/src/production/error-handler.js.map +0 -1
  394. package/dist/src/production/index.d.ts.map +0 -1
  395. package/dist/src/production/index.js.map +0 -1
  396. package/dist/src/production/monitoring.d.ts.map +0 -1
  397. package/dist/src/production/monitoring.js.map +0 -1
  398. package/dist/src/production/rate-limiter.d.ts.map +0 -1
  399. package/dist/src/production/rate-limiter.js.map +0 -1
  400. package/dist/src/production/retry.d.ts.map +0 -1
  401. package/dist/src/production/retry.js.map +0 -1
  402. package/dist/src/prompt.d.ts.map +0 -1
  403. package/dist/src/prompt.js.map +0 -1
  404. package/dist/src/runtime/headless.d.ts.map +0 -1
  405. package/dist/src/runtime/headless.js.map +0 -1
  406. package/dist/src/runtime/parent-death-watchdog.d.ts.map +0 -1
  407. package/dist/src/runtime/parent-death-watchdog.js.map +0 -1
  408. package/dist/src/ruvector/agent-wasm.d.ts.map +0 -1
  409. package/dist/src/ruvector/agent-wasm.js.map +0 -1
  410. package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
  411. package/dist/src/ruvector/ast-analyzer.js.map +0 -1
  412. package/dist/src/ruvector/codemods/engine.d.ts.map +0 -1
  413. package/dist/src/ruvector/codemods/engine.js.map +0 -1
  414. package/dist/src/ruvector/codemods/scope-analysis.d.ts.map +0 -1
  415. package/dist/src/ruvector/codemods/scope-analysis.js.map +0 -1
  416. package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
  417. package/dist/src/ruvector/coverage-router.js.map +0 -1
  418. package/dist/src/ruvector/coverage-tools.d.ts.map +0 -1
  419. package/dist/src/ruvector/coverage-tools.js.map +0 -1
  420. package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
  421. package/dist/src/ruvector/diff-classifier.js.map +0 -1
  422. package/dist/src/ruvector/diskann-backend.d.ts.map +0 -1
  423. package/dist/src/ruvector/diskann-backend.js.map +0 -1
  424. package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
  425. package/dist/src/ruvector/enhanced-model-router.js.map +0 -1
  426. package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
  427. package/dist/src/ruvector/graph-analyzer.js.map +0 -1
  428. package/dist/src/ruvector/graph-backend.d.ts.map +0 -1
  429. package/dist/src/ruvector/graph-backend.js.map +0 -1
  430. package/dist/src/ruvector/index.d.ts.map +0 -1
  431. package/dist/src/ruvector/index.js.map +0 -1
  432. package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
  433. package/dist/src/ruvector/lora-adapter.js.map +0 -1
  434. package/dist/src/ruvector/model-prices.d.ts.map +0 -1
  435. package/dist/src/ruvector/model-prices.js.map +0 -1
  436. package/dist/src/ruvector/model-router.d.ts.map +0 -1
  437. package/dist/src/ruvector/model-router.js.map +0 -1
  438. package/dist/src/ruvector/neural-router.d.ts.map +0 -1
  439. package/dist/src/ruvector/neural-router.js.map +0 -1
  440. package/dist/src/ruvector/output-verifier.d.ts.map +0 -1
  441. package/dist/src/ruvector/output-verifier.js.map +0 -1
  442. package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
  443. package/dist/src/ruvector/q-learning-router.js.map +0 -1
  444. package/dist/src/ruvector/router-calibrator.d.ts.map +0 -1
  445. package/dist/src/ruvector/router-calibrator.js.map +0 -1
  446. package/dist/src/ruvector/router-parallel-recorder.d.ts.map +0 -1
  447. package/dist/src/ruvector/router-parallel-recorder.js.map +0 -1
  448. package/dist/src/ruvector/router-trajectory.d.ts.map +0 -1
  449. package/dist/src/ruvector/router-trajectory.js.map +0 -1
  450. package/dist/src/ruvector/run-transcript-recorder.d.ts.map +0 -1
  451. package/dist/src/ruvector/run-transcript-recorder.js.map +0 -1
  452. package/dist/src/ruvector/ruvllm-wasm.d.ts.map +0 -1
  453. package/dist/src/ruvector/ruvllm-wasm.js.map +0 -1
  454. package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
  455. package/dist/src/ruvector/semantic-router.js.map +0 -1
  456. package/dist/src/ruvector/task-embedder.d.ts.map +0 -1
  457. package/dist/src/ruvector/task-embedder.js.map +0 -1
  458. package/dist/src/ruvector/trajectory-tree.d.ts.map +0 -1
  459. package/dist/src/ruvector/trajectory-tree.js.map +0 -1
  460. package/dist/src/ruvector/vector-db.d.ts.map +0 -1
  461. package/dist/src/ruvector/vector-db.js.map +0 -1
  462. package/dist/src/services/agentic-flow-bridge.d.ts.map +0 -1
  463. package/dist/src/services/agentic-flow-bridge.js.map +0 -1
  464. package/dist/src/services/checkpoint-gate.d.ts.map +0 -1
  465. package/dist/src/services/checkpoint-gate.js.map +0 -1
  466. package/dist/src/services/claim-service.d.ts.map +0 -1
  467. package/dist/src/services/claim-service.js.map +0 -1
  468. package/dist/src/services/config-file-manager.d.ts.map +0 -1
  469. package/dist/src/services/config-file-manager.js.map +0 -1
  470. package/dist/src/services/container-worker-pool.d.ts.map +0 -1
  471. package/dist/src/services/container-worker-pool.js.map +0 -1
  472. package/dist/src/services/distill-oracle.d.ts.map +0 -1
  473. package/dist/src/services/distill-oracle.js.map +0 -1
  474. package/dist/src/services/fable-harness.d.ts.map +0 -1
  475. package/dist/src/services/fable-harness.js.map +0 -1
  476. package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
  477. package/dist/src/services/headless-worker-executor.js.map +0 -1
  478. package/dist/src/services/index.d.ts.map +0 -1
  479. package/dist/src/services/index.js.map +0 -1
  480. package/dist/src/services/native-training.d.ts.map +0 -1
  481. package/dist/src/services/native-training.js.map +0 -1
  482. package/dist/src/services/registry-api.d.ts.map +0 -1
  483. package/dist/src/services/registry-api.js.map +0 -1
  484. package/dist/src/services/ruvector-training.d.ts.map +0 -1
  485. package/dist/src/services/ruvector-training.js.map +0 -1
  486. package/dist/src/services/swarm-memory-branches.d.ts.map +0 -1
  487. package/dist/src/services/swarm-memory-branches.js.map +0 -1
  488. package/dist/src/services/weight-eft.d.ts.map +0 -1
  489. package/dist/src/services/weight-eft.js.map +0 -1
  490. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  491. package/dist/src/services/worker-daemon.js.map +0 -1
  492. package/dist/src/services/worker-queue.d.ts.map +0 -1
  493. package/dist/src/services/worker-queue.js.map +0 -1
  494. package/dist/src/suggest.d.ts.map +0 -1
  495. package/dist/src/suggest.js.map +0 -1
  496. package/dist/src/transfer/anonymization/index.d.ts.map +0 -1
  497. package/dist/src/transfer/anonymization/index.js.map +0 -1
  498. package/dist/src/transfer/deploy-seraphine.d.ts.map +0 -1
  499. package/dist/src/transfer/deploy-seraphine.js.map +0 -1
  500. package/dist/src/transfer/export.d.ts.map +0 -1
  501. package/dist/src/transfer/export.js.map +0 -1
  502. package/dist/src/transfer/index.d.ts.map +0 -1
  503. package/dist/src/transfer/index.js.map +0 -1
  504. package/dist/src/transfer/ipfs/client.d.ts.map +0 -1
  505. package/dist/src/transfer/ipfs/client.js.map +0 -1
  506. package/dist/src/transfer/ipfs/upload.d.ts.map +0 -1
  507. package/dist/src/transfer/ipfs/upload.js.map +0 -1
  508. package/dist/src/transfer/models/seraphine.d.ts.map +0 -1
  509. package/dist/src/transfer/models/seraphine.js.map +0 -1
  510. package/dist/src/transfer/serialization/cfp.d.ts.map +0 -1
  511. package/dist/src/transfer/serialization/cfp.js.map +0 -1
  512. package/dist/src/transfer/storage/gcs.d.ts.map +0 -1
  513. package/dist/src/transfer/storage/gcs.js.map +0 -1
  514. package/dist/src/transfer/storage/index.d.ts.map +0 -1
  515. package/dist/src/transfer/storage/index.js.map +0 -1
  516. package/dist/src/transfer/store/discovery.d.ts.map +0 -1
  517. package/dist/src/transfer/store/discovery.js.map +0 -1
  518. package/dist/src/transfer/store/download.d.ts.map +0 -1
  519. package/dist/src/transfer/store/download.js.map +0 -1
  520. package/dist/src/transfer/store/index.d.ts.map +0 -1
  521. package/dist/src/transfer/store/index.js.map +0 -1
  522. package/dist/src/transfer/store/publish.d.ts.map +0 -1
  523. package/dist/src/transfer/store/publish.js.map +0 -1
  524. package/dist/src/transfer/store/registry.d.ts.map +0 -1
  525. package/dist/src/transfer/store/registry.js.map +0 -1
  526. package/dist/src/transfer/store/search.d.ts.map +0 -1
  527. package/dist/src/transfer/store/search.js.map +0 -1
  528. package/dist/src/transfer/store/tests/standalone-test.d.ts.map +0 -1
  529. package/dist/src/transfer/store/tests/standalone-test.js.map +0 -1
  530. package/dist/src/transfer/store/types.d.ts.map +0 -1
  531. package/dist/src/transfer/store/types.js.map +0 -1
  532. package/dist/src/transfer/test-seraphine.d.ts.map +0 -1
  533. package/dist/src/transfer/test-seraphine.js.map +0 -1
  534. package/dist/src/transfer/tests/test-store.d.ts.map +0 -1
  535. package/dist/src/transfer/tests/test-store.js.map +0 -1
  536. package/dist/src/transfer/types.d.ts.map +0 -1
  537. package/dist/src/transfer/types.js.map +0 -1
  538. package/dist/src/types.d.ts.map +0 -1
  539. package/dist/src/types.js.map +0 -1
  540. package/dist/src/update/checker.d.ts.map +0 -1
  541. package/dist/src/update/checker.js.map +0 -1
  542. package/dist/src/update/executor.d.ts.map +0 -1
  543. package/dist/src/update/executor.js.map +0 -1
  544. package/dist/src/update/index.d.ts.map +0 -1
  545. package/dist/src/update/index.js.map +0 -1
  546. package/dist/src/update/rate-limiter.d.ts.map +0 -1
  547. package/dist/src/update/rate-limiter.js.map +0 -1
  548. package/dist/src/update/validator.d.ts.map +0 -1
  549. package/dist/src/update/validator.js.map +0 -1
  550. package/dist/tsconfig.tsbuildinfo +0 -1
  551. package/scripts/beir-bootstrap-significance.mjs +0 -162
  552. package/scripts/bench-rvagent.mjs +0 -312
  553. package/scripts/benchmark-codemods.mjs +0 -127
  554. package/scripts/benchmark-cross-repo.mjs +0 -206
  555. package/scripts/benchmark-pretrained-retrieval.mjs +0 -305
  556. package/scripts/benchmark-self-learning.mjs +0 -241
  557. package/scripts/benchmark-trajectory-mrr.mjs +0 -191
  558. package/scripts/deploy-ipfs-node.sh +0 -153
  559. package/scripts/grid-search-retrieval.mjs +0 -216
  560. package/scripts/pretrain-from-github.mjs +0 -358
  561. package/scripts/publish-registry.ts +0 -345
  562. package/scripts/publish.sh +0 -57
  563. package/scripts/run-beir-bge.mjs +0 -324
  564. package/scripts/run-beir-hybrid.mjs +0 -284
  565. package/scripts/run-beir-lucene-bm25.mjs +0 -154
  566. package/scripts/run-beir-nfcorpus.mjs +0 -231
  567. package/scripts/run-beir-rrf-ablation.mjs +0 -221
  568. package/scripts/setup-ipfs-registry.md +0 -366
@@ -1,241 +0,0 @@
1
- #!/usr/bin/env node
2
- // benchmark-self-learning.mjs — proof harness for #2245.
3
- //
4
- // Replaces the "self-learning reports success but persists nothing" theater
5
- // with measured deltas: actually runs each entry point N times and prints what
6
- // each one moved (or didn't). Writes a run JSON to docs/benchmarks/runs/ so
7
- // future regressions are visible against a committed baseline.
8
- //
9
- // Usage:
10
- // node scripts/benchmark-self-learning.mjs # default N=20 per surface
11
- // N=50 BENCH_JSON=1 node scripts/benchmark-self-learning.mjs
12
- // BENCH_NO_WRITE=1 node scripts/benchmark-self-learning.mjs
13
- //
14
- // Repro:
15
- // 1. Clone ruvnet/ruflo, npm install, build the CLI:
16
- // npm install && (cd v3/@claude-flow/cli && npx tsc -b)
17
- // 2. Run this script. It prints a "before/after" table per surface.
18
- // 3. Inspect docs/benchmarks/runs/self-learning-<ts>.json for the persisted
19
- // proof — diff against previous runs to catch any future regression.
20
-
21
- import { mkdirSync, writeFileSync, mkdtempSync, rmSync } from 'node:fs';
22
- import { fileURLToPath } from 'node:url';
23
- import { dirname, join, resolve } from 'node:path';
24
- import { tmpdir } from 'node:os';
25
- import { performance } from 'node:perf_hooks';
26
-
27
- const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url));
28
- const CLI_ROOT = resolve(SCRIPT_DIR, '..');
29
- const REPO_ROOT = resolve(SCRIPT_DIR, '../../../..');
30
- const RUNS_DIR = join(REPO_ROOT, 'docs', 'benchmarks', 'runs');
31
-
32
- const N = Number(process.env.N) || 20;
33
-
34
- // Run in an isolated temp dir so we don't pollute the repo's neural store.
35
- const SCRATCH = mkdtempSync(join(tmpdir(), 'learn-bench-'));
36
- process.chdir(SCRATCH);
37
-
38
- async function main() {
39
- const intel = await import(join(CLI_ROOT, 'dist/src/memory/intelligence.js'));
40
- const hooks = await import(join(CLI_ROOT, 'dist/src/mcp-tools/hooks-tools.js'));
41
- const neural = await import(join(CLI_ROOT, 'dist/src/mcp-tools/neural-tools.js'));
42
-
43
- intel.clearIntelligence();
44
-
45
- // -------------------------------------------------------------------------
46
- // §A — recordSignalProcessed
47
- // -------------------------------------------------------------------------
48
- const A_before = intel.getIntelligenceStats();
49
- const tA = performance.now();
50
- for (let i = 0; i < N; i++) intel.recordSignalProcessed();
51
- intel.flushIntelligenceStats();
52
- const dtA = performance.now() - tA;
53
- const A_after = intel.getIntelligenceStats();
54
- const A_delta = A_after.signalsProcessed - A_before.signalsProcessed;
55
-
56
- // -------------------------------------------------------------------------
57
- // §B — hooks_task-completed (trainPatterns:true) → trajectory pipeline
58
- // -------------------------------------------------------------------------
59
- const taskCompleted = hooks.hooksTools.find((t) => t.name === 'hooks_task-completed');
60
- const B_before = intel.getIntelligenceStats();
61
- const tB = performance.now();
62
- let B_trained = 0;
63
- for (let i = 0; i < N; i++) {
64
- const r = await taskCompleted.handler({
65
- taskId: `bench-${i}`,
66
- success: i % 5 !== 4, // 80% success, 20% failure — mixed verdict
67
- quality: 0.5 + (i % 5) * 0.1,
68
- trainPatterns: true,
69
- content: `Benchmark task ${i}: refactor or test or fix`,
70
- });
71
- if (r.learningPath === 'trajectory-pipeline') B_trained++;
72
- }
73
- const dtB = performance.now() - tB;
74
- const B_after = intel.getIntelligenceStats();
75
-
76
- // -------------------------------------------------------------------------
77
- // §C — hooks_task-completed recorded-only (negative control)
78
- // -------------------------------------------------------------------------
79
- const C_before = intel.getIntelligenceStats();
80
- const tC = performance.now();
81
- for (let i = 0; i < N; i++) {
82
- await taskCompleted.handler({ taskId: `bench-no-train-${i}`, success: true, quality: 0.8 });
83
- }
84
- const dtC = performance.now() - tC;
85
- const C_after = intel.getIntelligenceStats();
86
-
87
- // -------------------------------------------------------------------------
88
- // §D — storeNeuralPatterns + neural_patterns list reflects them
89
- // -------------------------------------------------------------------------
90
- const items = Array.from({ length: N }, (_, i) => ({
91
- name: `pattern-${i}`,
92
- type: 'bench-pattern',
93
- content: `import { thing${i} } from 'module${i}'`,
94
- }));
95
- const tD = performance.now();
96
- const D_store = await neural.storeNeuralPatterns(items);
97
- const dtD = performance.now() - tD;
98
- const listTool = neural.neuralTools.find((t) => t.name === 'neural_patterns');
99
- const D_list = await listTool.handler({ action: 'list' });
100
-
101
- // -------------------------------------------------------------------------
102
- // §E — multi-step trajectory pipeline (end-to-end)
103
- // -------------------------------------------------------------------------
104
- const trajStart = hooks.hooksTools.find((t) => t.name === 'hooks_intelligence_trajectory-start');
105
- const trajStep = hooks.hooksTools.find((t) => t.name === 'hooks_intelligence_trajectory-step');
106
- const trajEnd = hooks.hooksTools.find((t) => t.name === 'hooks_intelligence_trajectory-end');
107
- // NOTE: the MCP trajectory tools feed sonaCoordinator (queryable via
108
- // hooks_intelligence_stats), NOT globalStats. That's part of the broader
109
- // store-fragmentation problem #2245 identifies; we check observable
110
- // outcomes (persisted + sonaUpdate) instead of a globalStats delta.
111
- const tE = performance.now();
112
- let persistedCount = 0;
113
- let sonaUpdateCount = 0;
114
- if (trajStart && trajStep && trajEnd) {
115
- for (let i = 0; i < Math.min(5, N); i++) {
116
- const s = await trajStart.handler({ task: `multi-step bench ${i}`, agent: 'bench' });
117
- const id = s.trajectoryId;
118
- await trajStep.handler({ trajectoryId: id, type: 'observation', content: `obs ${i}` });
119
- await trajStep.handler({ trajectoryId: id, type: 'action', content: `act ${i}` });
120
- await trajStep.handler({ trajectoryId: id, type: 'result', content: `done ${i}` });
121
- const endRes = await trajEnd.handler({ trajectoryId: id, success: true });
122
- if (endRes.persisted) persistedCount++;
123
- if (endRes.learning?.sonaUpdate) sonaUpdateCount++;
124
- }
125
- }
126
- const dtE = performance.now() - tE;
127
-
128
- // -------------------------------------------------------------------------
129
- // §F — getUnifiedLearningStats (ADR-075)
130
- // -------------------------------------------------------------------------
131
- const tF = performance.now();
132
- const unified = await intel.getUnifiedLearningStats();
133
- const dtF = performance.now() - tF;
134
- const unifiedOk = unified.global && unified.sona && unified.memoryBridge && unified.neuralPatterns && unified.consistency;
135
-
136
- // -------------------------------------------------------------------------
137
- // Summary
138
- // -------------------------------------------------------------------------
139
- const summary = {
140
- runAt: new Date().toISOString(),
141
- benchmark: 'self-learning-2245',
142
- n: N,
143
- sections: {
144
- A_recordSignalProcessed: {
145
- calls: N,
146
- signalsProcessedDelta: A_delta,
147
- passed: A_delta === N,
148
- elapsedMs: Number(dtA.toFixed(2)),
149
- },
150
- B_taskCompleted_trainPatterns: {
151
- calls: N,
152
- trainedViaPipeline: B_trained,
153
- trajectoriesDelta: B_after.trajectoriesRecorded - B_before.trajectoriesRecorded,
154
- patternsLearnedDelta: B_after.patternsLearned - B_before.patternsLearned,
155
- passed: B_trained === N,
156
- elapsedMs: Number(dtB.toFixed(2)),
157
- avgLatencyMsPerCall: Number((dtB / N).toFixed(2)),
158
- },
159
- C_taskCompleted_recordedOnly: {
160
- calls: N,
161
- trajectoriesDelta: C_after.trajectoriesRecorded - C_before.trajectoriesRecorded,
162
- passed: (C_after.trajectoriesRecorded - C_before.trajectoriesRecorded) === 0,
163
- note: 'negative control — should NOT touch trajectories',
164
- elapsedMs: Number(dtC.toFixed(2)),
165
- },
166
- D_pretrain_neuralPatterns: {
167
- attempted: items.length,
168
- stored: D_store.stored,
169
- listTotal: D_list.total,
170
- passed: D_store.stored === items.length && D_list.total >= items.length,
171
- elapsedMs: Number(dtD.toFixed(2)),
172
- },
173
- E_multiStepTrajectory: {
174
- cycles: Math.min(5, N),
175
- persistedCount,
176
- sonaUpdateCount,
177
- passed: persistedCount === Math.min(5, N), // persistence is the must-pass; SONA depends on env
178
- note: 'MCP trajectory tools feed sonaCoordinator (see hooks_intelligence_stats), not globalStats — observable outcomes checked here',
179
- elapsedMs: Number(dtE.toFixed(2)),
180
- },
181
- F_unifiedStats: {
182
- shape: ['global', 'sona', 'memoryBridge', 'neuralPatterns', 'consistency'],
183
- observed: {
184
- 'global.patternsLearned': unified.global.patternsLearned,
185
- 'global.trajectoriesRecorded': unified.global.trajectoriesRecorded,
186
- 'global.signalsProcessed': unified.global.signalsProcessed,
187
- 'memoryBridge.totalEntries': unified.memoryBridge.totalEntries,
188
- 'memoryBridge.reachable': unified.memoryBridge.reachable,
189
- 'neuralPatterns.patternCount': unified.neuralPatterns.patternCount,
190
- 'sona.available': unified.sona.available,
191
- 'consistency.notes': unified.consistency.notes.length,
192
- },
193
- passed: !!unifiedOk,
194
- note: 'ADR-075 — one aggregator across the 4 stores. Each sub-view names its source.',
195
- elapsedMs: Number(dtF.toFixed(2)),
196
- },
197
- },
198
- finalState: {
199
- signalsProcessed: A_after.signalsProcessed,
200
- trajectoriesRecorded: intel.getIntelligenceStats().trajectoriesRecorded,
201
- patternsLearned: intel.getIntelligenceStats().patternsLearned,
202
- },
203
- scratch: SCRATCH,
204
- };
205
-
206
- const allPassed = Object.values(summary.sections).every((s) => s.passed);
207
- summary.passed = allPassed;
208
-
209
- if (process.env.BENCH_JSON) {
210
- console.log(JSON.stringify(summary, null, 2));
211
- } else {
212
- console.log(`# Self-learning benchmark (#2245) — N=${N}`);
213
- console.log('');
214
- console.log('| Section | Calls | Delta | Passed | Latency (ms) |');
215
- console.log('|---|---:|---:|:---:|---:|');
216
- console.log(`| A recordSignalProcessed | ${N} | +${summary.sections.A_recordSignalProcessed.signalsProcessedDelta} | ${summary.sections.A_recordSignalProcessed.passed ? '✅' : '❌'} | ${summary.sections.A_recordSignalProcessed.elapsedMs} |`);
217
- console.log(`| B task-completed (train) | ${N} | trained=${summary.sections.B_taskCompleted_trainPatterns.trainedViaPipeline}, trajectories+${summary.sections.B_taskCompleted_trainPatterns.trajectoriesDelta} | ${summary.sections.B_taskCompleted_trainPatterns.passed ? '✅' : '❌'} | ${summary.sections.B_taskCompleted_trainPatterns.elapsedMs} (${summary.sections.B_taskCompleted_trainPatterns.avgLatencyMsPerCall}/call) |`);
218
- console.log(`| C task-completed (record-only) | ${N} | trajectories+${summary.sections.C_taskCompleted_recordedOnly.trajectoriesDelta} (expected 0) | ${summary.sections.C_taskCompleted_recordedOnly.passed ? '✅' : '❌'} | ${summary.sections.C_taskCompleted_recordedOnly.elapsedMs} |`);
219
- console.log(`| D pretrain → neural_patterns | ${items.length} | stored=${summary.sections.D_pretrain_neuralPatterns.stored}, listed=${summary.sections.D_pretrain_neuralPatterns.listTotal} | ${summary.sections.D_pretrain_neuralPatterns.passed ? '✅' : '❌'} | ${summary.sections.D_pretrain_neuralPatterns.elapsedMs} |`);
220
- console.log(`| E multi-step trajectory | ${summary.sections.E_multiStepTrajectory.cycles} | persisted=${summary.sections.E_multiStepTrajectory.persistedCount}, sonaUpdate=${summary.sections.E_multiStepTrajectory.sonaUpdateCount} | ${summary.sections.E_multiStepTrajectory.passed ? '✅' : '❌'} | ${summary.sections.E_multiStepTrajectory.elapsedMs} |`);
221
- const f = summary.sections.F_unifiedStats;
222
- console.log(`| F unified-stats | 4 stores | bridge.reachable=${f.observed['memoryBridge.reachable']}, sona.available=${f.observed['sona.available']}, neural.count=${f.observed['neuralPatterns.patternCount']}, notes=${f.observed['consistency.notes']} | ${f.passed ? '✅' : '❌'} | ${f.elapsedMs} |`);
223
- console.log('');
224
- console.log(`Final state: signalsProcessed=${summary.finalState.signalsProcessed}, trajectoriesRecorded=${summary.finalState.trajectoriesRecorded}, patternsLearned=${summary.finalState.patternsLearned}`);
225
- console.log(`Overall: ${allPassed ? '✅ ALL PASSED' : '❌ FAILED'}`);
226
- }
227
-
228
- if (!process.env.BENCH_NO_WRITE) {
229
- mkdirSync(RUNS_DIR, { recursive: true });
230
- const stamp = summary.runAt.replace(/[:.]/g, '-');
231
- writeFileSync(join(RUNS_DIR, `self-learning-${stamp}.json`), JSON.stringify(summary, null, 2));
232
- writeFileSync(join(RUNS_DIR, 'self-learning-latest.json'), JSON.stringify(summary, null, 2));
233
- if (!process.env.BENCH_JSON) console.log(`\nWrote ${join(RUNS_DIR, `self-learning-${stamp}.json`)}`);
234
- }
235
-
236
- try { rmSync(SCRATCH, { recursive: true, force: true }); } catch {}
237
-
238
- if (!allPassed) process.exit(1);
239
- }
240
-
241
- main().catch((err) => { console.error(err); process.exit(1); });
@@ -1,191 +0,0 @@
1
- #!/usr/bin/env node
2
- // benchmark-trajectory-mrr.mjs — proof harness for Structured Distillation
3
- // (#2241 §SOTA, arXiv:2603.13017).
4
- //
5
- // Measures retrieval MRR for raw vs structured-distilled trajectory content
6
- // against a paired corpus. The arXiv paper reports raw → distilled MRR
7
- // going from 0.745 to 0.759 on a 214 K-pair consensus-graded set; our corpus
8
- // is much smaller and hand-curated, so the absolute numbers won't match,
9
- // but the *direction* of the delta is what we're proving.
10
- //
11
- // Two embedders are supported:
12
- // - Real ONNX (Xenova/all-MiniLM-L6-v2 384-dim) via @claude-flow/embeddings
13
- // when available. Best signal.
14
- // - Hash-based deterministic fallback when ONNX isn't installed. Lower
15
- // signal; results still relative-comparable.
16
- //
17
- // Usage:
18
- // node scripts/benchmark-trajectory-mrr.mjs # default
19
- // BENCH_JSON=1 node scripts/benchmark-trajectory-mrr.mjs
20
- // BENCH_NO_WRITE=1 node scripts/benchmark-trajectory-mrr.mjs
21
-
22
- import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
23
- import { fileURLToPath } from 'node:url';
24
- import { dirname, join, resolve } from 'node:path';
25
- import { performance } from 'node:perf_hooks';
26
-
27
- const SCRIPT_DIR = dirname(fileURLToPath(import.meta.url));
28
- const CLI_ROOT = resolve(SCRIPT_DIR, '..');
29
- const REPO_ROOT = resolve(SCRIPT_DIR, '../../../..');
30
- const RUNS_DIR = join(REPO_ROOT, 'docs', 'benchmarks', 'runs');
31
-
32
- const { distillAndSerialise, compressionRatio } = await import(
33
- join(CLI_ROOT, 'dist/src/memory/structured-distill.js')
34
- );
35
-
36
- // ---------------------------------------------------------------------------
37
- // Embedder — prefers real ONNX, falls back to hash-based deterministic.
38
- // ---------------------------------------------------------------------------
39
- async function loadEmbedder() {
40
- // Tier 1: AgentDB's bridge-loaded ONNX embedder (the path the live MCP
41
- // server + vitest tests use, so we measure what users actually get).
42
- try {
43
- const mb = await import(join(CLI_ROOT, 'dist/src/memory/memory-bridge.js'));
44
- const probe = await mb.bridgeGenerateEmbedding('warm-up').catch(() => null);
45
- if (probe && probe.embedding && probe.embedding.length > 0 && probe.backend === 'onnx') {
46
- return {
47
- name: `bridge ONNX (${probe.model}, ${probe.dimensions}-dim)`,
48
- embed: async (text) => {
49
- const r = await mb.bridgeGenerateEmbedding(text);
50
- if (!r) throw new Error('bridge embed returned null');
51
- return r.embedding;
52
- },
53
- };
54
- }
55
- } catch { /* fall through */ }
56
- // Tier 2: hash-based deterministic. Clearly degraded; produces only
57
- // direction-of-effect signal, not absolute MRR numbers comparable to paper.
58
- console.error('⚠️ Real ONNX embedder unavailable — using hash-based deterministic fallback. Absolute MRR numbers are NOT comparable to the arXiv paper in this mode; relative comparison is also weak.');
59
- return {
60
- name: 'hash-fallback (no semantic signal — degraded mode)',
61
- embed: async (text) => hashEmbed(text, 384),
62
- };
63
- }
64
-
65
- function hashEmbed(text, dims) {
66
- const v = new Float32Array(dims);
67
- let seed = 0;
68
- for (let i = 0; i < text.length; i++) seed = (seed * 31 + text.charCodeAt(i)) | 0;
69
- let s = Math.abs(seed) | 1;
70
- for (let i = 0; i < dims; i++) {
71
- s = (s * 1103515245 + 12345) & 0x7fffffff;
72
- v[i] = (s / 0x7fffffff) * 2 - 1;
73
- }
74
- // L2 normalise
75
- let n = 0;
76
- for (let i = 0; i < dims; i++) n += v[i] * v[i];
77
- n = Math.sqrt(n) || 1;
78
- for (let i = 0; i < dims; i++) v[i] /= n;
79
- return Array.from(v);
80
- }
81
-
82
- function cosine(a, b) {
83
- let s = 0;
84
- for (let i = 0; i < a.length; i++) s += a[i] * b[i];
85
- return s;
86
- }
87
-
88
- // ---------------------------------------------------------------------------
89
- // Main
90
- // ---------------------------------------------------------------------------
91
- async function main() {
92
- const corpusPath = join(CLI_ROOT, 'bench', 'trajectory-mrr-corpus.json');
93
- const corpus = JSON.parse(readFileSync(corpusPath, 'utf-8'));
94
- const trajectories = corpus.trajectories;
95
- const embedder = await loadEmbedder();
96
-
97
- // Per-trajectory: embed both raw and distilled forms.
98
- const tEmbed0 = performance.now();
99
- const rawEmbs = [];
100
- const distEmbs = [];
101
- let totalRawBytes = 0;
102
- let totalDistBytes = 0;
103
- for (const t of trajectories) {
104
- const distilled = distillAndSerialise(t.raw);
105
- totalRawBytes += t.raw.length;
106
- totalDistBytes += distilled.length;
107
- rawEmbs.push(await embedder.embed(t.raw));
108
- distEmbs.push(await embedder.embed(distilled));
109
- }
110
- const embedMs = performance.now() - tEmbed0;
111
-
112
- // For each (query, gold) pair: rank all trajectories by cosine to the query
113
- // embedding. MRR = mean of 1 / rank-of-gold across all queries.
114
- const tQuery0 = performance.now();
115
- let rrRaw = 0, rrDist = 0;
116
- const perQuery = [];
117
- for (let i = 0; i < trajectories.length; i++) {
118
- const q = await embedder.embed(trajectories[i].query);
119
- const rankRaw = rankOf(q, rawEmbs, i);
120
- const rankDist = rankOf(q, distEmbs, i);
121
- rrRaw += 1 / rankRaw;
122
- rrDist += 1 / rankDist;
123
- perQuery.push({ id: trajectories[i].id, rankRaw, rankDist });
124
- }
125
- const queryMs = performance.now() - tQuery0;
126
-
127
- const N = trajectories.length;
128
- const mrrRaw = rrRaw / N;
129
- const mrrDist = rrDist / N;
130
- const delta = mrrDist - mrrRaw;
131
- const compression = totalRawBytes / Math.max(1, totalDistBytes);
132
-
133
- const summary = {
134
- runAt: new Date().toISOString(),
135
- benchmark: 'trajectory-mrr',
136
- embedder: embedder.name,
137
- corpusVersion: corpus.version,
138
- corpusSize: N,
139
- mrr: {
140
- raw: Number(mrrRaw.toFixed(4)),
141
- distilled: Number(mrrDist.toFixed(4)),
142
- delta: Number(delta.toFixed(4)),
143
- paperReference: { raw: 0.745, distilled: 0.759, delta: 0.014, source: 'arXiv:2603.13017' },
144
- },
145
- compression: {
146
- totalRawBytes,
147
- totalDistBytes,
148
- ratio: Number(compression.toFixed(2)),
149
- paperReference: { tokensRaw: 371, tokensDistilled: 38, ratio: 9.76, source: 'arXiv:2603.13017' },
150
- },
151
- latencyMs: {
152
- embedAll: Number(embedMs.toFixed(2)),
153
- queryAll: Number(queryMs.toFixed(2)),
154
- perDistill: Number((embedMs / (2 * N)).toFixed(4)),
155
- },
156
- distilledIsBetter: delta > 0,
157
- perQueryRanks: perQuery,
158
- };
159
-
160
- if (process.env.BENCH_JSON) {
161
- console.log(JSON.stringify(summary, null, 2));
162
- } else {
163
- console.log(`# Trajectory MRR benchmark (#2241 §Structured Distillation)`);
164
- console.log(`Embedder: ${embedder.name}`);
165
- console.log(`Corpus: N=${N} (v${corpus.version})`);
166
- console.log('');
167
- console.log('| Metric | Raw | Distilled | Δ |');
168
- console.log('|---|---:|---:|---:|');
169
- console.log(`| MRR | ${summary.mrr.raw} | ${summary.mrr.distilled} | ${summary.mrr.delta >= 0 ? '+' : ''}${summary.mrr.delta} |`);
170
- console.log(`| Total bytes | ${totalRawBytes} | ${totalDistBytes} | ${compression.toFixed(2)}× compression |`);
171
- console.log('');
172
- console.log(`Distilled is ${summary.distilledIsBetter ? 'BETTER ✅' : 'WORSE ❌'} than raw on this corpus.`);
173
- console.log(`Paper (arXiv:2603.13017): MRR raw 0.745 → distilled 0.759 (Δ +0.014); compression ~9.76× (371→38 tokens).`);
174
- }
175
-
176
- if (!process.env.BENCH_NO_WRITE) {
177
- mkdirSync(RUNS_DIR, { recursive: true });
178
- const stamp = summary.runAt.replace(/[:.]/g, '-');
179
- writeFileSync(join(RUNS_DIR, `trajectory-mrr-${stamp}.json`), JSON.stringify(summary, null, 2));
180
- writeFileSync(join(RUNS_DIR, 'trajectory-mrr-latest.json'), JSON.stringify(summary, null, 2));
181
- if (!process.env.BENCH_JSON) console.log(`\nWrote ${join(RUNS_DIR, `trajectory-mrr-${stamp}.json`)}`);
182
- }
183
- }
184
-
185
- function rankOf(query, embeddings, goldIndex) {
186
- const scored = embeddings.map((e, i) => ({ i, score: cosine(query, e) }));
187
- scored.sort((a, b) => b.score - a.score);
188
- return scored.findIndex((s) => s.i === goldIndex) + 1;
189
- }
190
-
191
- main().catch((err) => { console.error(err); process.exit(1); });
@@ -1,153 +0,0 @@
1
- #!/bin/bash
2
- #
3
- # Deploy IPFS Node to Google Cloud
4
- # Provides free IPFS pinning for your users
5
- #
6
- # Usage:
7
- # ./deploy-ipfs-node.sh [PROJECT_ID] [ZONE]
8
- #
9
- # Example:
10
- # ./deploy-ipfs-node.sh my-project us-central1-a
11
- #
12
-
13
- set -e
14
-
15
- PROJECT_ID="${1:-$(gcloud config get-value project)}"
16
- ZONE="${2:-us-central1-a}"
17
- INSTANCE_NAME="ipfs-node"
18
- MACHINE_TYPE="e2-medium" # $25/month, use e2-small for $8/month
19
- DISK_SIZE="100GB"
20
-
21
- echo "╔══════════════════════════════════════════════════════════════╗"
22
- echo "║ IPFS Node Deployment for Claude Flow ║"
23
- echo "╚══════════════════════════════════════════════════════════════╝"
24
- echo ""
25
- echo "Project: $PROJECT_ID"
26
- echo "Zone: $ZONE"
27
- echo "Machine: $MACHINE_TYPE"
28
- echo "Disk: $DISK_SIZE"
29
- echo ""
30
-
31
- # Create firewall rules
32
- echo "▶ Creating firewall rules..."
33
- gcloud compute firewall-rules create ipfs-swarm \
34
- --project="$PROJECT_ID" \
35
- --allow=tcp:4001,udp:4001 \
36
- --target-tags=ipfs-node \
37
- --description="IPFS swarm connections" \
38
- 2>/dev/null || echo " (firewall rule already exists)"
39
-
40
- gcloud compute firewall-rules create ipfs-api \
41
- --project="$PROJECT_ID" \
42
- --allow=tcp:5001 \
43
- --target-tags=ipfs-node \
44
- --source-ranges="0.0.0.0/0" \
45
- --description="IPFS API (consider restricting)" \
46
- 2>/dev/null || echo " (firewall rule already exists)"
47
-
48
- gcloud compute firewall-rules create ipfs-gateway \
49
- --project="$PROJECT_ID" \
50
- --allow=tcp:8080 \
51
- --target-tags=ipfs-node \
52
- --description="IPFS Gateway" \
53
- 2>/dev/null || echo " (firewall rule already exists)"
54
-
55
- # Create startup script
56
- STARTUP_SCRIPT='#!/bin/bash
57
- set -e
58
-
59
- # Install IPFS
60
- echo "Installing IPFS..."
61
- wget -q https://dist.ipfs.tech/kubo/v0.24.0/kubo_v0.24.0_linux-amd64.tar.gz
62
- tar xzf kubo_v0.24.0_linux-amd64.tar.gz
63
- cd kubo && sudo bash install.sh
64
- cd .. && rm -rf kubo kubo_v0.24.0_linux-amd64.tar.gz
65
-
66
- # Create ipfs user
67
- sudo useradd -m -s /bin/bash ipfs || true
68
-
69
- # Initialize IPFS
70
- sudo -u ipfs IPFS_PATH=/home/ipfs/.ipfs ipfs init --profile=server
71
-
72
- # Configure IPFS for server use
73
- sudo -u ipfs IPFS_PATH=/home/ipfs/.ipfs ipfs config Addresses.API /ip4/0.0.0.0/tcp/5001
74
- sudo -u ipfs IPFS_PATH=/home/ipfs/.ipfs ipfs config Addresses.Gateway /ip4/0.0.0.0/tcp/8080
75
- sudo -u ipfs IPFS_PATH=/home/ipfs/.ipfs ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\"*\"]"
76
- sudo -u ipfs IPFS_PATH=/home/ipfs/.ipfs ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\"PUT\", \"POST\", \"GET\"]"
77
-
78
- # Set storage limits (adjust as needed)
79
- sudo -u ipfs IPFS_PATH=/home/ipfs/.ipfs ipfs config Datastore.StorageMax 80GB
80
-
81
- # Create systemd service
82
- cat > /etc/systemd/system/ipfs.service << EOF
83
- [Unit]
84
- Description=IPFS Daemon
85
- After=network.target
86
-
87
- [Service]
88
- Type=simple
89
- User=ipfs
90
- Environment=IPFS_PATH=/home/ipfs/.ipfs
91
- ExecStart=/usr/local/bin/ipfs daemon --migrate=true
92
- Restart=on-failure
93
- RestartSec=10
94
-
95
- [Install]
96
- WantedBy=multi-user.target
97
- EOF
98
-
99
- # Start IPFS
100
- systemctl daemon-reload
101
- systemctl enable ipfs
102
- systemctl start ipfs
103
-
104
- echo "IPFS node started successfully!"
105
- '
106
-
107
- # Create instance
108
- echo "▶ Creating VM instance..."
109
- gcloud compute instances create "$INSTANCE_NAME" \
110
- --project="$PROJECT_ID" \
111
- --zone="$ZONE" \
112
- --machine-type="$MACHINE_TYPE" \
113
- --image-family=ubuntu-2204-lts \
114
- --image-project=ubuntu-os-cloud \
115
- --boot-disk-size="$DISK_SIZE" \
116
- --boot-disk-type=pd-ssd \
117
- --tags=ipfs-node \
118
- --metadata=startup-script="$STARTUP_SCRIPT"
119
-
120
- # Get external IP
121
- echo ""
122
- echo "▶ Waiting for instance to start..."
123
- sleep 30
124
-
125
- EXTERNAL_IP=$(gcloud compute instances describe "$INSTANCE_NAME" \
126
- --project="$PROJECT_ID" \
127
- --zone="$ZONE" \
128
- --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
129
-
130
- echo ""
131
- echo "═══════════════════════════════════════════════════════════════"
132
- echo " DEPLOYMENT COMPLETE"
133
- echo "═══════════════════════════════════════════════════════════════"
134
- echo ""
135
- echo " IPFS Node IP: $EXTERNAL_IP"
136
- echo ""
137
- echo " Endpoints:"
138
- echo " API: http://$EXTERNAL_IP:5001"
139
- echo " Gateway: http://$EXTERNAL_IP:8080"
140
- echo " Swarm: /ip4/$EXTERNAL_IP/tcp/4001"
141
- echo ""
142
- echo " Test commands:"
143
- echo " curl http://$EXTERNAL_IP:5001/api/v0/id"
144
- echo " curl http://$EXTERNAL_IP:8080/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme"
145
- echo ""
146
- echo " Configure Claude Flow CLI:"
147
- echo " export IPFS_API_URL=http://$EXTERNAL_IP:5001"
148
- echo ""
149
- echo " SSH into node:"
150
- echo " gcloud compute ssh $INSTANCE_NAME --zone=$ZONE"
151
- echo ""
152
- echo " Monthly cost estimate: ~\$25-54 depending on usage"
153
- echo ""