@claude-flow/cli 3.32.1 → 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 (657) hide show
  1. package/.claude/helpers/.helpers-version +1 -1
  2. package/.claude/helpers/helpers.manifest.json +3 -3
  3. package/.claude/helpers/statusline.cjs +24 -17
  4. package/.claude/helpers/statusline.js +19 -31
  5. package/catalog-manifest.json +2 -2
  6. package/package.json +1 -1
  7. package/plugins/ruflo-metaharness/.claude-plugin/plugin.json +1 -1
  8. package/plugins/ruflo-metaharness/scripts/smoke.sh +8 -5
  9. package/plugins/ruflo-metaharness/skills/harness-similarity/SKILL.md +1 -1
  10. package/dist/src/agenticow/speculative-exploration.d.ts +0 -148
  11. package/dist/src/agenticow/speculative-exploration.js +0 -218
  12. package/dist/src/appliance/gguf-engine.d.ts +0 -91
  13. package/dist/src/appliance/gguf-engine.js +0 -425
  14. package/dist/src/appliance/ruvllm-bridge.d.ts +0 -102
  15. package/dist/src/appliance/ruvllm-bridge.js +0 -292
  16. package/dist/src/appliance/rvfa-builder.d.ts +0 -44
  17. package/dist/src/appliance/rvfa-builder.js +0 -329
  18. package/dist/src/appliance/rvfa-distribution.d.ts +0 -97
  19. package/dist/src/appliance/rvfa-distribution.js +0 -370
  20. package/dist/src/appliance/rvfa-format.d.ts +0 -111
  21. package/dist/src/appliance/rvfa-format.js +0 -393
  22. package/dist/src/appliance/rvfa-runner.d.ts +0 -69
  23. package/dist/src/appliance/rvfa-runner.js +0 -237
  24. package/dist/src/appliance/rvfa-signing.d.ts +0 -123
  25. package/dist/src/appliance/rvfa-signing.js +0 -347
  26. package/dist/src/autopilot-state.d.ts +0 -77
  27. package/dist/src/autopilot-state.js +0 -271
  28. package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts +0 -18
  29. package/dist/src/benchmarks/gaia-agent-planning.smoke.js +0 -253
  30. package/dist/src/benchmarks/gaia-agent.d.ts +0 -198
  31. package/dist/src/benchmarks/gaia-agent.js +0 -651
  32. package/dist/src/benchmarks/gaia-causal-memory.d.ts +0 -133
  33. package/dist/src/benchmarks/gaia-causal-memory.js +0 -281
  34. package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts +0 -22
  35. package/dist/src/benchmarks/gaia-causal-memory.smoke.js +0 -300
  36. package/dist/src/benchmarks/gaia-convergence.d.ts +0 -138
  37. package/dist/src/benchmarks/gaia-convergence.js +0 -260
  38. package/dist/src/benchmarks/gaia-convergence.smoke.d.ts +0 -19
  39. package/dist/src/benchmarks/gaia-convergence.smoke.js +0 -246
  40. package/dist/src/benchmarks/gaia-critic.d.ts +0 -123
  41. package/dist/src/benchmarks/gaia-critic.js +0 -312
  42. package/dist/src/benchmarks/gaia-critic.smoke.d.ts +0 -21
  43. package/dist/src/benchmarks/gaia-critic.smoke.js +0 -327
  44. package/dist/src/benchmarks/gaia-decomposer.d.ts +0 -125
  45. package/dist/src/benchmarks/gaia-decomposer.js +0 -350
  46. package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts +0 -21
  47. package/dist/src/benchmarks/gaia-decomposer.smoke.js +0 -228
  48. package/dist/src/benchmarks/gaia-e2e-smoke.d.ts +0 -27
  49. package/dist/src/benchmarks/gaia-e2e-smoke.js +0 -136
  50. package/dist/src/benchmarks/gaia-extract.smoke.d.ts +0 -45
  51. package/dist/src/benchmarks/gaia-extract.smoke.js +0 -242
  52. package/dist/src/benchmarks/gaia-hardness/features.d.ts +0 -46
  53. package/dist/src/benchmarks/gaia-hardness/features.js +0 -170
  54. package/dist/src/benchmarks/gaia-hardness/predictor.d.ts +0 -105
  55. package/dist/src/benchmarks/gaia-hardness/predictor.js +0 -260
  56. package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts +0 -20
  57. package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js +0 -235
  58. package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts +0 -51
  59. package/dist/src/benchmarks/gaia-hardness/train-data-loader.js +0 -179
  60. package/dist/src/benchmarks/gaia-judge.d.ts +0 -88
  61. package/dist/src/benchmarks/gaia-judge.js +0 -437
  62. package/dist/src/benchmarks/gaia-loader.d.ts +0 -87
  63. package/dist/src/benchmarks/gaia-loader.js +0 -326
  64. package/dist/src/benchmarks/gaia-tools/file_read.d.ts +0 -35
  65. package/dist/src/benchmarks/gaia-tools/file_read.js +0 -403
  66. package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts +0 -126
  67. package/dist/src/benchmarks/gaia-tools/grounded_query.js +0 -225
  68. package/dist/src/benchmarks/gaia-tools/index.d.ts +0 -32
  69. package/dist/src/benchmarks/gaia-tools/index.js +0 -36
  70. package/dist/src/benchmarks/gaia-tools/types.d.ts +0 -62
  71. package/dist/src/benchmarks/gaia-tools/types.js +0 -12
  72. package/dist/src/benchmarks/gaia-tools/web_search.d.ts +0 -30
  73. package/dist/src/benchmarks/gaia-tools/web_search.js +0 -210
  74. package/dist/src/benchmarks/gaia-voting.d.ts +0 -88
  75. package/dist/src/benchmarks/gaia-voting.js +0 -297
  76. package/dist/src/benchmarks/gaia-voting.smoke.d.ts +0 -20
  77. package/dist/src/benchmarks/gaia-voting.smoke.js +0 -332
  78. package/dist/src/benchmarks/pretrain/index.d.ts +0 -58
  79. package/dist/src/benchmarks/pretrain/index.js +0 -404
  80. package/dist/src/business-pods/bbs-budget-tracker.d.ts +0 -139
  81. package/dist/src/business-pods/bbs-budget-tracker.js +0 -358
  82. package/dist/src/business-pods/domain-affinity-policy.d.ts +0 -47
  83. package/dist/src/business-pods/domain-affinity-policy.js +0 -65
  84. package/dist/src/business-pods/pod-schema.d.ts +0 -96
  85. package/dist/src/business-pods/pod-schema.js +0 -225
  86. package/dist/src/commands/advisor.d.ts +0 -15
  87. package/dist/src/commands/advisor.js +0 -94
  88. package/dist/src/commands/agent-wasm.d.ts +0 -14
  89. package/dist/src/commands/agent-wasm.js +0 -333
  90. package/dist/src/commands/agent.d.ts +0 -8
  91. package/dist/src/commands/agent.js +0 -927
  92. package/dist/src/commands/analyze.d.ts +0 -19
  93. package/dist/src/commands/analyze.js +0 -2047
  94. package/dist/src/commands/announcements.d.ts +0 -17
  95. package/dist/src/commands/announcements.js +0 -0
  96. package/dist/src/commands/appliance-advanced.d.ts +0 -9
  97. package/dist/src/commands/appliance-advanced.js +0 -215
  98. package/dist/src/commands/appliance.d.ts +0 -8
  99. package/dist/src/commands/appliance.js +0 -404
  100. package/dist/src/commands/autopilot.d.ts +0 -15
  101. package/dist/src/commands/autopilot.js +0 -407
  102. package/dist/src/commands/benchmark.d.ts +0 -10
  103. package/dist/src/commands/benchmark.js +0 -460
  104. package/dist/src/commands/claims.d.ts +0 -10
  105. package/dist/src/commands/claims.js +0 -620
  106. package/dist/src/commands/cleanup.d.ts +0 -13
  107. package/dist/src/commands/cleanup.js +0 -250
  108. package/dist/src/commands/completions.d.ts +0 -10
  109. package/dist/src/commands/completions.js +0 -539
  110. package/dist/src/commands/config.d.ts +0 -8
  111. package/dist/src/commands/config.js +0 -428
  112. package/dist/src/commands/daemon.d.ts +0 -59
  113. package/dist/src/commands/daemon.js +0 -1733
  114. package/dist/src/commands/deployment.d.ts +0 -10
  115. package/dist/src/commands/deployment.js +0 -672
  116. package/dist/src/commands/doctor.d.ts +0 -10
  117. package/dist/src/commands/doctor.js +0 -1695
  118. package/dist/src/commands/eject.d.ts +0 -33
  119. package/dist/src/commands/eject.js +0 -195
  120. package/dist/src/commands/embeddings.d.ts +0 -18
  121. package/dist/src/commands/embeddings.js +0 -1623
  122. package/dist/src/commands/funnel.d.ts +0 -18
  123. package/dist/src/commands/funnel.js +0 -302
  124. package/dist/src/commands/gaia-bench.d.ts +0 -40
  125. package/dist/src/commands/gaia-bench.js +0 -597
  126. package/dist/src/commands/guidance.d.ts +0 -8
  127. package/dist/src/commands/guidance.js +0 -556
  128. package/dist/src/commands/hive-mind.d.ts +0 -11
  129. package/dist/src/commands/hive-mind.js +0 -1319
  130. package/dist/src/commands/hooks.d.ts +0 -8
  131. package/dist/src/commands/hooks.js +0 -4595
  132. package/dist/src/commands/index.d.ts +0 -118
  133. package/dist/src/commands/index.js +0 -364
  134. package/dist/src/commands/init.d.ts +0 -13
  135. package/dist/src/commands/init.js +0 -1297
  136. package/dist/src/commands/issues.d.ts +0 -21
  137. package/dist/src/commands/issues.js +0 -567
  138. package/dist/src/commands/mcp.d.ts +0 -11
  139. package/dist/src/commands/mcp.js +0 -732
  140. package/dist/src/commands/memory-backup.d.ts +0 -11
  141. package/dist/src/commands/memory-backup.js +0 -46
  142. package/dist/src/commands/memory-distill.d.ts +0 -27
  143. package/dist/src/commands/memory-distill.js +0 -374
  144. package/dist/src/commands/memory.d.ts +0 -8
  145. package/dist/src/commands/memory.js +0 -1596
  146. package/dist/src/commands/metaharness.d.ts +0 -39
  147. package/dist/src/commands/metaharness.js +0 -215
  148. package/dist/src/commands/migrate.d.ts +0 -8
  149. package/dist/src/commands/migrate.js +0 -742
  150. package/dist/src/commands/neural.d.ts +0 -10
  151. package/dist/src/commands/neural.js +0 -4331
  152. package/dist/src/commands/performance.d.ts +0 -10
  153. package/dist/src/commands/performance.js +0 -583
  154. package/dist/src/commands/plugins.d.ts +0 -11
  155. package/dist/src/commands/plugins.js +0 -826
  156. package/dist/src/commands/process.d.ts +0 -10
  157. package/dist/src/commands/process.js +0 -694
  158. package/dist/src/commands/progress.d.ts +0 -11
  159. package/dist/src/commands/progress.js +0 -259
  160. package/dist/src/commands/providers.d.ts +0 -10
  161. package/dist/src/commands/providers.js +0 -502
  162. package/dist/src/commands/proxy.d.ts +0 -21
  163. package/dist/src/commands/proxy.js +0 -310
  164. package/dist/src/commands/route.d.ts +0 -16
  165. package/dist/src/commands/route.js +0 -822
  166. package/dist/src/commands/ruvector/backup.d.ts +0 -11
  167. package/dist/src/commands/ruvector/backup.js +0 -747
  168. package/dist/src/commands/ruvector/benchmark.d.ts +0 -11
  169. package/dist/src/commands/ruvector/benchmark.js +0 -490
  170. package/dist/src/commands/ruvector/import.d.ts +0 -18
  171. package/dist/src/commands/ruvector/import.js +0 -373
  172. package/dist/src/commands/ruvector/index.d.ts +0 -29
  173. package/dist/src/commands/ruvector/index.js +0 -129
  174. package/dist/src/commands/ruvector/init.d.ts +0 -11
  175. package/dist/src/commands/ruvector/init.js +0 -467
  176. package/dist/src/commands/ruvector/migrate.d.ts +0 -11
  177. package/dist/src/commands/ruvector/migrate.js +0 -498
  178. package/dist/src/commands/ruvector/optimize.d.ts +0 -11
  179. package/dist/src/commands/ruvector/optimize.js +0 -505
  180. package/dist/src/commands/ruvector/pg-utils.d.ts +0 -14
  181. package/dist/src/commands/ruvector/pg-utils.js +0 -41
  182. package/dist/src/commands/ruvector/setup.d.ts +0 -18
  183. package/dist/src/commands/ruvector/setup.js +0 -765
  184. package/dist/src/commands/ruvector/status.d.ts +0 -11
  185. package/dist/src/commands/ruvector/status.js +0 -479
  186. package/dist/src/commands/security.d.ts +0 -10
  187. package/dist/src/commands/security.js +0 -1007
  188. package/dist/src/commands/session.d.ts +0 -8
  189. package/dist/src/commands/session.js +0 -757
  190. package/dist/src/commands/settings.d.ts +0 -19
  191. package/dist/src/commands/settings.js +0 -180
  192. package/dist/src/commands/spinner.d.ts +0 -16
  193. package/dist/src/commands/spinner.js +0 -329
  194. package/dist/src/commands/start.d.ts +0 -8
  195. package/dist/src/commands/start.js +0 -418
  196. package/dist/src/commands/status.d.ts +0 -8
  197. package/dist/src/commands/status.js +0 -608
  198. package/dist/src/commands/swarm.d.ts +0 -8
  199. package/dist/src/commands/swarm.js +0 -891
  200. package/dist/src/commands/task.d.ts +0 -8
  201. package/dist/src/commands/task.js +0 -675
  202. package/dist/src/commands/transfer-store.d.ts +0 -13
  203. package/dist/src/commands/transfer-store.js +0 -428
  204. package/dist/src/commands/update.d.ts +0 -8
  205. package/dist/src/commands/update.js +0 -276
  206. package/dist/src/commands/verify.d.ts +0 -19
  207. package/dist/src/commands/verify.js +0 -261
  208. package/dist/src/commands/version.d.ts +0 -42
  209. package/dist/src/commands/version.js +0 -106
  210. package/dist/src/commands/workflow.d.ts +0 -8
  211. package/dist/src/commands/workflow.js +0 -617
  212. package/dist/src/config/harness-feedback-applier.d.ts +0 -50
  213. package/dist/src/config/harness-feedback-applier.js +0 -122
  214. package/dist/src/config/proven-config-refresh.d.ts +0 -39
  215. package/dist/src/config/proven-config-refresh.js +0 -154
  216. package/dist/src/config/proven-config-rvfa.d.ts +0 -23
  217. package/dist/src/config/proven-config-rvfa.js +0 -73
  218. package/dist/src/config/proven-config.d.ts +0 -86
  219. package/dist/src/config/proven-config.js +0 -176
  220. package/dist/src/config-adapter.d.ts +0 -15
  221. package/dist/src/config-adapter.js +0 -186
  222. package/dist/src/encryption/vault.d.ts +0 -94
  223. package/dist/src/encryption/vault.js +0 -172
  224. package/dist/src/fs-secure.d.ts +0 -86
  225. package/dist/src/fs-secure.js +0 -133
  226. package/dist/src/funnel/advisor-tip.d.ts +0 -58
  227. package/dist/src/funnel/advisor-tip.js +0 -92
  228. package/dist/src/funnel/attribution.d.ts +0 -37
  229. package/dist/src/funnel/attribution.js +0 -101
  230. package/dist/src/funnel/consent.d.ts +0 -22
  231. package/dist/src/funnel/consent.js +0 -58
  232. package/dist/src/funnel/credit-errors.d.ts +0 -31
  233. package/dist/src/funnel/credit-errors.js +0 -88
  234. package/dist/src/funnel/credit-notifier.d.ts +0 -44
  235. package/dist/src/funnel/credit-notifier.js +0 -74
  236. package/dist/src/funnel/disclosure.d.ts +0 -47
  237. package/dist/src/funnel/disclosure.js +0 -109
  238. package/dist/src/funnel/enrollment.d.ts +0 -36
  239. package/dist/src/funnel/enrollment.js +0 -64
  240. package/dist/src/funnel/environment.d.ts +0 -17
  241. package/dist/src/funnel/environment.js +0 -39
  242. package/dist/src/funnel/event-transport.d.ts +0 -51
  243. package/dist/src/funnel/event-transport.js +0 -199
  244. package/dist/src/funnel/events.d.ts +0 -42
  245. package/dist/src/funnel/events.js +0 -150
  246. package/dist/src/funnel/index.d.ts +0 -21
  247. package/dist/src/funnel/index.js +0 -21
  248. package/dist/src/funnel/insights.d.ts +0 -49
  249. package/dist/src/funnel/insights.js +0 -120
  250. package/dist/src/funnel/local-signals.d.ts +0 -15
  251. package/dist/src/funnel/local-signals.js +0 -68
  252. package/dist/src/funnel/message-transport.d.ts +0 -51
  253. package/dist/src/funnel/message-transport.js +0 -149
  254. package/dist/src/funnel/messages.d.ts +0 -55
  255. package/dist/src/funnel/messages.js +0 -160
  256. package/dist/src/funnel/payout.d.ts +0 -40
  257. package/dist/src/funnel/payout.js +0 -60
  258. package/dist/src/funnel/power-saver-notifier.d.ts +0 -44
  259. package/dist/src/funnel/power-saver-notifier.js +0 -92
  260. package/dist/src/funnel/precedence.d.ts +0 -16
  261. package/dist/src/funnel/precedence.js +0 -85
  262. package/dist/src/funnel/promo.d.ts +0 -41
  263. package/dist/src/funnel/promo.js +0 -144
  264. package/dist/src/funnel/rate-limit-notifier.d.ts +0 -55
  265. package/dist/src/funnel/rate-limit-notifier.js +0 -102
  266. package/dist/src/funnel/rotation.d.ts +0 -19
  267. package/dist/src/funnel/rotation.js +0 -70
  268. package/dist/src/funnel/state.d.ts +0 -13
  269. package/dist/src/funnel/state.js +0 -52
  270. package/dist/src/funnel/toggle-cooldown.d.ts +0 -17
  271. package/dist/src/funnel/toggle-cooldown.js +0 -32
  272. package/dist/src/funnel/types.d.ts +0 -98
  273. package/dist/src/funnel/types.js +0 -26
  274. package/dist/src/index.d.ts +0 -81
  275. package/dist/src/index.js +0 -609
  276. package/dist/src/infrastructure/in-memory-repositories.d.ts +0 -68
  277. package/dist/src/infrastructure/in-memory-repositories.js +0 -264
  278. package/dist/src/init/claudemd-generator.d.ts +0 -16
  279. package/dist/src/init/claudemd-generator.js +0 -368
  280. package/dist/src/init/executor.d.ts +0 -41
  281. package/dist/src/init/executor.js +0 -2142
  282. package/dist/src/init/helper-refresh.d.ts +0 -79
  283. package/dist/src/init/helper-refresh.js +0 -347
  284. package/dist/src/init/helper-signing.d.ts +0 -37
  285. package/dist/src/init/helper-signing.js +0 -67
  286. package/dist/src/init/helpers-generator.d.ts +0 -87
  287. package/dist/src/init/helpers-generator.js +0 -1456
  288. package/dist/src/init/index.d.ts +0 -13
  289. package/dist/src/init/index.js +0 -15
  290. package/dist/src/init/mcp-generator.d.ts +0 -26
  291. package/dist/src/init/mcp-generator.js +0 -126
  292. package/dist/src/init/memory-package-resolver.d.ts +0 -53
  293. package/dist/src/init/memory-package-resolver.js +0 -118
  294. package/dist/src/init/settings-generator.d.ts +0 -14
  295. package/dist/src/init/settings-generator.js +0 -462
  296. package/dist/src/init/statusline-generator.d.ts +0 -28
  297. package/dist/src/init/statusline-generator.js +0 -177
  298. package/dist/src/init/types.d.ts +0 -331
  299. package/dist/src/init/types.js +0 -276
  300. package/dist/src/log-filters.d.ts +0 -46
  301. package/dist/src/log-filters.js +0 -107
  302. package/dist/src/mcp-client.d.ts +0 -92
  303. package/dist/src/mcp-client.js +0 -397
  304. package/dist/src/mcp-server.d.ts +0 -163
  305. package/dist/src/mcp-server.js +0 -751
  306. package/dist/src/mcp-tools/agent-execute-core.d.ts +0 -115
  307. package/dist/src/mcp-tools/agent-execute-core.js +0 -587
  308. package/dist/src/mcp-tools/agent-tools.d.ts +0 -9
  309. package/dist/src/mcp-tools/agent-tools.js +0 -837
  310. package/dist/src/mcp-tools/agentbbs-tools.d.ts +0 -28
  311. package/dist/src/mcp-tools/agentbbs-tools.js +0 -394
  312. package/dist/src/mcp-tools/agentdb-tools.d.ts +0 -35
  313. package/dist/src/mcp-tools/agentdb-tools.js +0 -1473
  314. package/dist/src/mcp-tools/agenticow-loader.d.ts +0 -59
  315. package/dist/src/mcp-tools/agenticow-loader.js +0 -105
  316. package/dist/src/mcp-tools/agenticow-speculate-tools.d.ts +0 -24
  317. package/dist/src/mcp-tools/agenticow-speculate-tools.js +0 -209
  318. package/dist/src/mcp-tools/agenticow-tools.d.ts +0 -36
  319. package/dist/src/mcp-tools/agenticow-tools.js +0 -360
  320. package/dist/src/mcp-tools/analyze-tools.d.ts +0 -38
  321. package/dist/src/mcp-tools/analyze-tools.js +0 -346
  322. package/dist/src/mcp-tools/auto-install.d.ts +0 -83
  323. package/dist/src/mcp-tools/auto-install.js +0 -131
  324. package/dist/src/mcp-tools/autopilot-tools.d.ts +0 -12
  325. package/dist/src/mcp-tools/autopilot-tools.js +0 -231
  326. package/dist/src/mcp-tools/browser-intent-tools.d.ts +0 -162
  327. package/dist/src/mcp-tools/browser-intent-tools.js +0 -548
  328. package/dist/src/mcp-tools/browser-session-tools.d.ts +0 -27
  329. package/dist/src/mcp-tools/browser-session-tools.js +0 -398
  330. package/dist/src/mcp-tools/browser-tools.d.ts +0 -21
  331. package/dist/src/mcp-tools/browser-tools.js +0 -760
  332. package/dist/src/mcp-tools/business-pod-tools.d.ts +0 -20
  333. package/dist/src/mcp-tools/business-pod-tools.js +0 -169
  334. package/dist/src/mcp-tools/claims-tools.d.ts +0 -12
  335. package/dist/src/mcp-tools/claims-tools.js +0 -863
  336. package/dist/src/mcp-tools/config-tools.d.ts +0 -8
  337. package/dist/src/mcp-tools/config-tools.js +0 -411
  338. package/dist/src/mcp-tools/coordination-tools.d.ts +0 -13
  339. package/dist/src/mcp-tools/coordination-tools.js +0 -729
  340. package/dist/src/mcp-tools/daa-tools.d.ts +0 -13
  341. package/dist/src/mcp-tools/daa-tools.js +0 -534
  342. package/dist/src/mcp-tools/embeddings-tools.d.ts +0 -9
  343. package/dist/src/mcp-tools/embeddings-tools.js +0 -904
  344. package/dist/src/mcp-tools/github-tools.d.ts +0 -9
  345. package/dist/src/mcp-tools/github-tools.js +0 -659
  346. package/dist/src/mcp-tools/guidance-tools.d.ts +0 -15
  347. package/dist/src/mcp-tools/guidance-tools.js +0 -639
  348. package/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -8
  349. package/dist/src/mcp-tools/hive-mind-tools.js +0 -953
  350. package/dist/src/mcp-tools/hooks-tools.d.ts +0 -65
  351. package/dist/src/mcp-tools/hooks-tools.js +0 -4824
  352. package/dist/src/mcp-tools/http-fetch-tools.d.ts +0 -55
  353. package/dist/src/mcp-tools/http-fetch-tools.js +0 -329
  354. package/dist/src/mcp-tools/index.d.ts +0 -34
  355. package/dist/src/mcp-tools/index.js +0 -40
  356. package/dist/src/mcp-tools/managed-agent-tools.d.ts +0 -22
  357. package/dist/src/mcp-tools/managed-agent-tools.js +0 -357
  358. package/dist/src/mcp-tools/memory-tools.d.ts +0 -14
  359. package/dist/src/mcp-tools/memory-tools.js +0 -1330
  360. package/dist/src/mcp-tools/metaharness-tools.d.ts +0 -51
  361. package/dist/src/mcp-tools/metaharness-tools.js +0 -684
  362. package/dist/src/mcp-tools/neural-tools.d.ts +0 -54
  363. package/dist/src/mcp-tools/neural-tools.js +0 -1168
  364. package/dist/src/mcp-tools/performance-tools.d.ts +0 -16
  365. package/dist/src/mcp-tools/performance-tools.js +0 -675
  366. package/dist/src/mcp-tools/progress-tools.d.ts +0 -14
  367. package/dist/src/mcp-tools/progress-tools.js +0 -348
  368. package/dist/src/mcp-tools/request-tracker.d.ts +0 -17
  369. package/dist/src/mcp-tools/request-tracker.js +0 -27
  370. package/dist/src/mcp-tools/ruvllm-tools.d.ts +0 -9
  371. package/dist/src/mcp-tools/ruvllm-tools.js +0 -355
  372. package/dist/src/mcp-tools/security-tools.d.ts +0 -18
  373. package/dist/src/mcp-tools/security-tools.js +0 -556
  374. package/dist/src/mcp-tools/session-tools.d.ts +0 -8
  375. package/dist/src/mcp-tools/session-tools.js +0 -517
  376. package/dist/src/mcp-tools/swarm-tools.d.ts +0 -37
  377. package/dist/src/mcp-tools/swarm-tools.js +0 -390
  378. package/dist/src/mcp-tools/system-tools.d.ts +0 -13
  379. package/dist/src/mcp-tools/system-tools.js +0 -688
  380. package/dist/src/mcp-tools/task-tools.d.ts +0 -8
  381. package/dist/src/mcp-tools/task-tools.js +0 -487
  382. package/dist/src/mcp-tools/terminal-tools.d.ts +0 -8
  383. package/dist/src/mcp-tools/terminal-tools.js +0 -306
  384. package/dist/src/mcp-tools/testgen-tools.d.ts +0 -26
  385. package/dist/src/mcp-tools/testgen-tools.js +0 -168
  386. package/dist/src/mcp-tools/tool-loop-guardrail.d.ts +0 -31
  387. package/dist/src/mcp-tools/tool-loop-guardrail.js +0 -71
  388. package/dist/src/mcp-tools/transfer-tools.d.ts +0 -14
  389. package/dist/src/mcp-tools/transfer-tools.js +0 -447
  390. package/dist/src/mcp-tools/types.d.ts +0 -8
  391. package/dist/src/mcp-tools/types.js +0 -8
  392. package/dist/src/mcp-tools/validate-input.d.ts +0 -9
  393. package/dist/src/mcp-tools/validate-input.js +0 -9
  394. package/dist/src/mcp-tools/wasm-agent-tools.d.ts +0 -13
  395. package/dist/src/mcp-tools/wasm-agent-tools.js +0 -840
  396. package/dist/src/mcp-tools/workflow-tools.d.ts +0 -8
  397. package/dist/src/mcp-tools/workflow-tools.js +0 -884
  398. package/dist/src/memory/bge-embedder.d.ts +0 -25
  399. package/dist/src/memory/bge-embedder.js +0 -121
  400. package/dist/src/memory/cross-encoder-rerank.d.ts +0 -33
  401. package/dist/src/memory/cross-encoder-rerank.js +0 -123
  402. package/dist/src/memory/embedding-policy.d.ts +0 -21
  403. package/dist/src/memory/embedding-policy.js +0 -30
  404. package/dist/src/memory/embedding-quantization.d.ts +0 -62
  405. package/dist/src/memory/embedding-quantization.js +0 -156
  406. package/dist/src/memory/ewc-consolidation.d.ts +0 -305
  407. package/dist/src/memory/ewc-consolidation.js +0 -611
  408. package/dist/src/memory/graph-edge-writer.d.ts +0 -95
  409. package/dist/src/memory/graph-edge-writer.js +0 -217
  410. package/dist/src/memory/hybrid-retrieval.d.ts +0 -77
  411. package/dist/src/memory/hybrid-retrieval.js +0 -192
  412. package/dist/src/memory/intelligence.d.ts +0 -405
  413. package/dist/src/memory/intelligence.js +0 -1316
  414. package/dist/src/memory/lucene-bm25.d.ts +0 -19
  415. package/dist/src/memory/lucene-bm25.js +0 -308
  416. package/dist/src/memory/memory-bridge.d.ts +0 -537
  417. package/dist/src/memory/memory-bridge.js +0 -2460
  418. package/dist/src/memory/memory-initializer.d.ts +0 -556
  419. package/dist/src/memory/memory-initializer.js +0 -3021
  420. package/dist/src/memory/neural-package-bridge.d.ts +0 -48
  421. package/dist/src/memory/neural-package-bridge.js +0 -87
  422. package/dist/src/memory/rabitq-index.d.ts +0 -60
  423. package/dist/src/memory/rabitq-index.js +0 -242
  424. package/dist/src/memory/sona-optimizer.d.ts +0 -267
  425. package/dist/src/memory/sona-optimizer.js +0 -779
  426. package/dist/src/memory/structured-distill.d.ts +0 -48
  427. package/dist/src/memory/structured-distill.js +0 -125
  428. package/dist/src/output.d.ts +0 -9
  429. package/dist/src/output.js +0 -9
  430. package/dist/src/parser.d.ts +0 -89
  431. package/dist/src/parser.js +0 -516
  432. package/dist/src/plugins/manager.d.ts +0 -133
  433. package/dist/src/plugins/manager.js +0 -415
  434. package/dist/src/plugins/store/discovery.d.ts +0 -99
  435. package/dist/src/plugins/store/discovery.js +0 -1224
  436. package/dist/src/plugins/store/index.d.ts +0 -76
  437. package/dist/src/plugins/store/index.js +0 -141
  438. package/dist/src/plugins/store/search.d.ts +0 -46
  439. package/dist/src/plugins/store/search.js +0 -230
  440. package/dist/src/plugins/store/types.d.ts +0 -279
  441. package/dist/src/plugins/store/types.js +0 -7
  442. package/dist/src/plugins/tests/demo-plugin-store.d.ts +0 -7
  443. package/dist/src/plugins/tests/demo-plugin-store.js +0 -126
  444. package/dist/src/plugins/tests/standalone-test.d.ts +0 -12
  445. package/dist/src/plugins/tests/standalone-test.js +0 -188
  446. package/dist/src/plugins/tests/test-plugin-store.d.ts +0 -7
  447. package/dist/src/plugins/tests/test-plugin-store.js +0 -206
  448. package/dist/src/production/circuit-breaker.d.ts +0 -101
  449. package/dist/src/production/circuit-breaker.js +0 -241
  450. package/dist/src/production/error-handler.d.ts +0 -92
  451. package/dist/src/production/error-handler.js +0 -299
  452. package/dist/src/production/index.d.ts +0 -23
  453. package/dist/src/production/index.js +0 -18
  454. package/dist/src/production/monitoring.d.ts +0 -161
  455. package/dist/src/production/monitoring.js +0 -356
  456. package/dist/src/production/rate-limiter.d.ts +0 -80
  457. package/dist/src/production/rate-limiter.js +0 -201
  458. package/dist/src/production/retry.d.ts +0 -48
  459. package/dist/src/production/retry.js +0 -179
  460. package/dist/src/prompt.d.ts +0 -44
  461. package/dist/src/prompt.js +0 -501
  462. package/dist/src/runtime/headless.d.ts +0 -60
  463. package/dist/src/runtime/headless.js +0 -284
  464. package/dist/src/runtime/parent-death-watchdog.d.ts +0 -42
  465. package/dist/src/runtime/parent-death-watchdog.js +0 -70
  466. package/dist/src/ruvector/agent-wasm.d.ts +0 -228
  467. package/dist/src/ruvector/agent-wasm.js +0 -463
  468. package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
  469. package/dist/src/ruvector/ast-analyzer.js +0 -277
  470. package/dist/src/ruvector/codemods/engine.d.ts +0 -45
  471. package/dist/src/ruvector/codemods/engine.js +0 -291
  472. package/dist/src/ruvector/codemods/scope-analysis.d.ts +0 -29
  473. package/dist/src/ruvector/codemods/scope-analysis.js +0 -162
  474. package/dist/src/ruvector/coverage-router.d.ts +0 -160
  475. package/dist/src/ruvector/coverage-router.js +0 -531
  476. package/dist/src/ruvector/coverage-tools.d.ts +0 -33
  477. package/dist/src/ruvector/coverage-tools.js +0 -157
  478. package/dist/src/ruvector/diff-classifier.d.ts +0 -175
  479. package/dist/src/ruvector/diff-classifier.js +0 -699
  480. package/dist/src/ruvector/diskann-backend.d.ts +0 -78
  481. package/dist/src/ruvector/diskann-backend.js +0 -310
  482. package/dist/src/ruvector/enhanced-model-router.d.ts +0 -172
  483. package/dist/src/ruvector/enhanced-model-router.js +0 -577
  484. package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
  485. package/dist/src/ruvector/graph-analyzer.js +0 -929
  486. package/dist/src/ruvector/graph-backend.d.ts +0 -79
  487. package/dist/src/ruvector/graph-backend.js +0 -220
  488. package/dist/src/ruvector/index.d.ts +0 -38
  489. package/dist/src/ruvector/index.js +0 -86
  490. package/dist/src/ruvector/lora-adapter.d.ts +0 -292
  491. package/dist/src/ruvector/lora-adapter.js +0 -710
  492. package/dist/src/ruvector/model-prices.d.ts +0 -50
  493. package/dist/src/ruvector/model-prices.js +0 -72
  494. package/dist/src/ruvector/model-router.d.ts +0 -408
  495. package/dist/src/ruvector/model-router.js +0 -1162
  496. package/dist/src/ruvector/neural-router.d.ts +0 -182
  497. package/dist/src/ruvector/neural-router.js +0 -825
  498. package/dist/src/ruvector/output-verifier.d.ts +0 -83
  499. package/dist/src/ruvector/output-verifier.js +0 -277
  500. package/dist/src/ruvector/q-learning-router.d.ts +0 -227
  501. package/dist/src/ruvector/q-learning-router.js +0 -721
  502. package/dist/src/ruvector/router-calibrator.d.ts +0 -65
  503. package/dist/src/ruvector/router-calibrator.js +0 -120
  504. package/dist/src/ruvector/router-parallel-recorder.d.ts +0 -127
  505. package/dist/src/ruvector/router-parallel-recorder.js +0 -183
  506. package/dist/src/ruvector/router-trajectory.d.ts +0 -194
  507. package/dist/src/ruvector/router-trajectory.js +0 -281
  508. package/dist/src/ruvector/run-transcript-recorder.d.ts +0 -154
  509. package/dist/src/ruvector/run-transcript-recorder.js +0 -209
  510. package/dist/src/ruvector/ruvllm-wasm.d.ts +0 -179
  511. package/dist/src/ruvector/ruvllm-wasm.js +0 -379
  512. package/dist/src/ruvector/semantic-router.d.ts +0 -77
  513. package/dist/src/ruvector/semantic-router.js +0 -178
  514. package/dist/src/ruvector/task-embedder.d.ts +0 -56
  515. package/dist/src/ruvector/task-embedder.js +0 -237
  516. package/dist/src/ruvector/trajectory-tree.d.ts +0 -113
  517. package/dist/src/ruvector/trajectory-tree.js +0 -237
  518. package/dist/src/ruvector/vector-db.d.ts +0 -73
  519. package/dist/src/ruvector/vector-db.js +0 -301
  520. package/dist/src/ruvector/wasm-embedder.d.ts +0 -13
  521. package/dist/src/ruvector/wasm-embedder.js +0 -143
  522. package/dist/src/services/agentic-flow-bridge.d.ts +0 -50
  523. package/dist/src/services/agentic-flow-bridge.js +0 -95
  524. package/dist/src/services/ai-job-dedup.d.ts +0 -61
  525. package/dist/src/services/ai-job-dedup.js +0 -136
  526. package/dist/src/services/checkpoint-gate.d.ts +0 -140
  527. package/dist/src/services/checkpoint-gate.js +0 -223
  528. package/dist/src/services/claim-service.d.ts +0 -204
  529. package/dist/src/services/claim-service.js +0 -818
  530. package/dist/src/services/config-file-manager.d.ts +0 -37
  531. package/dist/src/services/config-file-manager.js +0 -224
  532. package/dist/src/services/container-worker-pool.d.ts +0 -204
  533. package/dist/src/services/container-worker-pool.js +0 -589
  534. package/dist/src/services/daemon-autostart.d.ts +0 -17
  535. package/dist/src/services/daemon-autostart.js +0 -102
  536. package/dist/src/services/distill-oracle.d.ts +0 -190
  537. package/dist/src/services/distill-oracle.js +0 -349
  538. package/dist/src/services/distill-tuning.d.ts +0 -111
  539. package/dist/src/services/distill-tuning.js +0 -510
  540. package/dist/src/services/evolve-proof.d.ts +0 -253
  541. package/dist/src/services/evolve-proof.js +0 -343
  542. package/dist/src/services/fable-harness.d.ts +0 -207
  543. package/dist/src/services/fable-harness.js +0 -388
  544. package/dist/src/services/git-workspace-identity.d.ts +0 -42
  545. package/dist/src/services/git-workspace-identity.js +0 -99
  546. package/dist/src/services/global-ai-budget.d.ts +0 -135
  547. package/dist/src/services/global-ai-budget.js +0 -415
  548. package/dist/src/services/harness-benchmark.d.ts +0 -68
  549. package/dist/src/services/harness-benchmark.js +0 -94
  550. package/dist/src/services/harness-canary.d.ts +0 -60
  551. package/dist/src/services/harness-canary.js +0 -69
  552. package/dist/src/services/harness-corpus-harvester.d.ts +0 -51
  553. package/dist/src/services/harness-corpus-harvester.js +0 -74
  554. package/dist/src/services/harness-flywheel-generations.d.ts +0 -115
  555. package/dist/src/services/harness-flywheel-generations.js +0 -360
  556. package/dist/src/services/harness-flywheel-runtime.d.ts +0 -25
  557. package/dist/src/services/harness-flywheel-runtime.js +0 -92
  558. package/dist/src/services/harness-flywheel.d.ts +0 -48
  559. package/dist/src/services/harness-flywheel.js +0 -207
  560. package/dist/src/services/harness-frozen-eval.d.ts +0 -22
  561. package/dist/src/services/harness-frozen-eval.js +0 -66
  562. package/dist/src/services/harness-hosts.d.ts +0 -40
  563. package/dist/src/services/harness-hosts.js +0 -88
  564. package/dist/src/services/harness-improvement-ledger.d.ts +0 -63
  565. package/dist/src/services/harness-improvement-ledger.js +0 -101
  566. package/dist/src/services/harness-loop.d.ts +0 -53
  567. package/dist/src/services/harness-loop.js +0 -85
  568. package/dist/src/services/harness-qualification.d.ts +0 -66
  569. package/dist/src/services/harness-qualification.js +0 -143
  570. package/dist/src/services/harness-replay.d.ts +0 -37
  571. package/dist/src/services/harness-replay.js +0 -92
  572. package/dist/src/services/harness-verify.d.ts +0 -33
  573. package/dist/src/services/harness-verify.js +0 -26
  574. package/dist/src/services/harness-worker.d.ts +0 -23
  575. package/dist/src/services/harness-worker.js +0 -66
  576. package/dist/src/services/headless-worker-executor.d.ts +0 -358
  577. package/dist/src/services/headless-worker-executor.js +0 -1269
  578. package/dist/src/services/index.d.ts +0 -13
  579. package/dist/src/services/index.js +0 -11
  580. package/dist/src/services/memory-backup.d.ts +0 -53
  581. package/dist/src/services/memory-backup.js +0 -198
  582. package/dist/src/services/memory-distillation.d.ts +0 -41
  583. package/dist/src/services/memory-distillation.js +0 -277
  584. package/dist/src/services/native-training.d.ts +0 -68
  585. package/dist/src/services/native-training.js +0 -141
  586. package/dist/src/services/registry-api.d.ts +0 -58
  587. package/dist/src/services/registry-api.js +0 -146
  588. package/dist/src/services/repo-supervisor.d.ts +0 -70
  589. package/dist/src/services/repo-supervisor.js +0 -228
  590. package/dist/src/services/ruvector-training.d.ts +0 -222
  591. package/dist/src/services/ruvector-training.js +0 -693
  592. package/dist/src/services/swarm-memory-branches.d.ts +0 -135
  593. package/dist/src/services/swarm-memory-branches.js +0 -213
  594. package/dist/src/services/weight-eft.d.ts +0 -305
  595. package/dist/src/services/weight-eft.js +0 -296
  596. package/dist/src/services/worker-daemon.d.ts +0 -439
  597. package/dist/src/services/worker-daemon.js +0 -1865
  598. package/dist/src/services/worker-queue.d.ts +0 -194
  599. package/dist/src/services/worker-queue.js +0 -513
  600. package/dist/src/services/workspace-lease.d.ts +0 -55
  601. package/dist/src/services/workspace-lease.js +0 -191
  602. package/dist/src/suggest.d.ts +0 -53
  603. package/dist/src/suggest.js +0 -200
  604. package/dist/src/transfer/anonymization/index.d.ts +0 -25
  605. package/dist/src/transfer/anonymization/index.js +0 -175
  606. package/dist/src/transfer/deploy-seraphine.d.ts +0 -13
  607. package/dist/src/transfer/deploy-seraphine.js +0 -205
  608. package/dist/src/transfer/export.d.ts +0 -25
  609. package/dist/src/transfer/export.js +0 -113
  610. package/dist/src/transfer/index.d.ts +0 -12
  611. package/dist/src/transfer/index.js +0 -31
  612. package/dist/src/transfer/ipfs/client.d.ts +0 -109
  613. package/dist/src/transfer/ipfs/client.js +0 -307
  614. package/dist/src/transfer/ipfs/upload.d.ts +0 -95
  615. package/dist/src/transfer/ipfs/upload.js +0 -413
  616. package/dist/src/transfer/models/seraphine.d.ts +0 -72
  617. package/dist/src/transfer/models/seraphine.js +0 -373
  618. package/dist/src/transfer/serialization/cfp.d.ts +0 -49
  619. package/dist/src/transfer/serialization/cfp.js +0 -183
  620. package/dist/src/transfer/storage/gcs.d.ts +0 -82
  621. package/dist/src/transfer/storage/gcs.js +0 -272
  622. package/dist/src/transfer/storage/index.d.ts +0 -6
  623. package/dist/src/transfer/storage/index.js +0 -6
  624. package/dist/src/transfer/store/discovery.d.ts +0 -84
  625. package/dist/src/transfer/store/discovery.js +0 -382
  626. package/dist/src/transfer/store/download.d.ts +0 -70
  627. package/dist/src/transfer/store/download.js +0 -334
  628. package/dist/src/transfer/store/index.d.ts +0 -84
  629. package/dist/src/transfer/store/index.js +0 -153
  630. package/dist/src/transfer/store/publish.d.ts +0 -76
  631. package/dist/src/transfer/store/publish.js +0 -294
  632. package/dist/src/transfer/store/registry.d.ts +0 -58
  633. package/dist/src/transfer/store/registry.js +0 -285
  634. package/dist/src/transfer/store/search.d.ts +0 -54
  635. package/dist/src/transfer/store/search.js +0 -232
  636. package/dist/src/transfer/store/tests/standalone-test.d.ts +0 -12
  637. package/dist/src/transfer/store/tests/standalone-test.js +0 -190
  638. package/dist/src/transfer/store/types.d.ts +0 -193
  639. package/dist/src/transfer/store/types.js +0 -6
  640. package/dist/src/transfer/test-seraphine.d.ts +0 -6
  641. package/dist/src/transfer/test-seraphine.js +0 -105
  642. package/dist/src/transfer/tests/test-store.d.ts +0 -7
  643. package/dist/src/transfer/tests/test-store.js +0 -214
  644. package/dist/src/transfer/types.d.ts +0 -245
  645. package/dist/src/transfer/types.js +0 -6
  646. package/dist/src/types.d.ts +0 -13
  647. package/dist/src/types.js +0 -13
  648. package/dist/src/update/checker.d.ts +0 -34
  649. package/dist/src/update/checker.js +0 -191
  650. package/dist/src/update/executor.d.ts +0 -33
  651. package/dist/src/update/executor.js +0 -217
  652. package/dist/src/update/index.d.ts +0 -33
  653. package/dist/src/update/index.js +0 -64
  654. package/dist/src/update/rate-limiter.d.ts +0 -20
  655. package/dist/src/update/rate-limiter.js +0 -96
  656. package/dist/src/update/validator.d.ts +0 -17
  657. package/dist/src/update/validator.js +0 -123
@@ -1,1168 +0,0 @@
1
- /**
2
- * Neural MCP Tools for CLI
3
- *
4
- * V2 Compatibility - Neural network and ML tools
5
- *
6
- * ✅ HYBRID Implementation:
7
- * - Uses @claude-flow/embeddings for REAL ML embeddings when available
8
- * - Falls back to deterministic hash-based embeddings when ML model not installed
9
- * - Pattern storage and search with cosine similarity (real math in all tiers)
10
- * - Training stores patterns as searchable embeddings (not simulated)
11
- *
12
- * Note: For production neural features, use @claude-flow/neural module
13
- */
14
- import { getProjectCwd } from './types.js';
15
- import { validateIdentifier, validateText } from './validate-input.js';
16
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
17
- import { join } from 'node:path';
18
- let _corpusStatsCache = null;
19
- // (query, store) → embedding + cosine cache. Small LRU (not size-1): the flywheel
20
- // scores many configs across several queries in interleaved order, so a size-1
21
- // cache would thrash. Cap keeps memory bounded; eviction is oldest-first.
22
- const _cosineCache = new Map();
23
- const _COSINE_CACHE_MAX = 128;
24
- function _cosineCacheGet(key) {
25
- const v = _cosineCache.get(key);
26
- if (v) {
27
- _cosineCache.delete(key);
28
- _cosineCache.set(key, v);
29
- } // LRU touch
30
- return v;
31
- }
32
- function _cosineCacheSet(key, v) {
33
- _cosineCache.set(key, v);
34
- if (_cosineCache.size > _COSINE_CACHE_MAX)
35
- _cosineCache.delete(_cosineCache.keys().next().value);
36
- }
37
- function corpusFingerprint(patterns) {
38
- let h = 2166136261 >>> 0;
39
- for (const p of patterns) {
40
- const s = `${p.id}|${p.name?.length ?? 0}|${p.content?.length ?? 0}`;
41
- for (let i = 0; i < s.length; i++) {
42
- h ^= s.charCodeAt(i);
43
- h = Math.imul(h, 16777619) >>> 0;
44
- }
45
- }
46
- return `${patterns.length}:${h.toString(16)}`;
47
- }
48
- let _champCache = null;
49
- function activeChampionParams() {
50
- try {
51
- if (_champCache && Date.now() - _champCache.at < 30_000)
52
- return _champCache.params;
53
- const p = join(getProjectCwd(), '.claude-flow', 'harness-active-policy.json');
54
- let params = {};
55
- if (existsSync(p)) {
56
- const active = JSON.parse(readFileSync(p, 'utf-8'));
57
- if (active && !active.rolledBack && active.params && typeof active.params === 'object')
58
- params = active.params;
59
- }
60
- _champCache = { at: Date.now(), params };
61
- return params;
62
- }
63
- catch {
64
- return {};
65
- }
66
- }
67
- // Real embeddings — resolved LAZILY on first use.
68
- // Perf (measured 2026-07): the previous top-level-await version of this block
69
- // ran `await import('ruvector')` + `initOnnxEmbedder()` + a probe embed at
70
- // module-import time, adding ~450ms (warm) to ~2800ms (cold) to EVERY CLI
71
- // command, because mcp-client statically imports this module. ensureEmbeddings()
72
- // keeps the exact same tier chain and degraded/fallback semantics, but only
73
- // pays the cost when a handler actually needs an embedding.
74
- // Tier 0 (ADR-089): ruvector@0.2.27 bundled ONNX (no sharp dep, fixes ADR-086's
75
- // silent-fallback bug at source; closes the chain described in ruvnet/ruvector#523).
76
- // Tier 1: agentic-flow v3 ReasoningBank (was Tier 1 — broken on darwin-arm64 without sharp)
77
- // Tier 2-3: @claude-flow/embeddings
78
- let realEmbeddings = null;
79
- let embeddingServiceName = 'none';
80
- let embeddingsPromise = null;
81
- /**
82
- * Memoized lazy initialiser for the embedding provider chain. Safe to call
83
- * concurrently (single shared promise). If every tier fails to import or
84
- * probe, `realEmbeddings` stays null and callers use the explicit
85
- * hash-fallback path — identical degraded semantics to the old eager block.
86
- */
87
- function ensureEmbeddings() {
88
- if (embeddingsPromise)
89
- return embeddingsPromise;
90
- embeddingsPromise = (async () => {
91
- try {
92
- // Tier -1 (PRIMARY): optional WASM embedder — a pluggable real embedder
93
- // ahead of everything. OPT-IN (RUFLO_EMBED_WASM_PKG) + FAIL-CLOSED: unset
94
- // or absent/init-fail ⇒ fall straight through to the existing
95
- // ruvector-ONNX → hash tiers with zero regression.
96
- try {
97
- const we = await import('../ruvector/wasm-embedder.js').catch(() => null);
98
- if (we && await we.wasmEmbedderAvailable()) {
99
- const model = we.DEFAULT_EMBED_MODEL;
100
- realEmbeddings = {
101
- embed: async (text) => {
102
- const v = await we.wasmEmbed(text, model);
103
- if (!v || !v.length)
104
- throw new Error('wasm embed failed'); // → generateEmbedding falls to next tier
105
- return v;
106
- },
107
- };
108
- embeddingServiceName = `wasm-embedder/${model} (${we.wasmEmbedderModels().length} model${we.wasmEmbedderModels().length === 1 ? '' : 's'})`;
109
- }
110
- }
111
- catch { /* not configured — fall through */ }
112
- // Tier 0: ruvector@0.2.27 — bundled all-MiniLM-L6-v2 + parallel worker pool.
113
- // Probe with isOnnxAvailable() and verify an actual embed succeeds (avoids
114
- // the type-load-success-but-runtime-fails trap from ADR-086). The probe now
115
- // runs on first embed request instead of at import time.
116
- // NOTE: ruvector's embed() returns `{embedding, dimension, timeMs}` — we
117
- // unwrap to plain number[] for the shared interface.
118
- const rv = !realEmbeddings ? await import('ruvector').catch(() => null) : null;
119
- if (!realEmbeddings && rv?.embed && typeof rv.embed === 'function' && rv.isOnnxAvailable?.()) {
120
- try {
121
- if (typeof rv.initOnnxEmbedder === 'function')
122
- await rv.initOnnxEmbedder();
123
- const probe = await rv.embed('probe');
124
- // Handle both shapes: ruvector wraps as {embedding, dimension, timeMs};
125
- // some versions returned raw Float32Array.
126
- const probeVec = probe?.embedding ?? probe;
127
- if (probeVec && (Array.isArray(probeVec) || probeVec.length > 0)) {
128
- realEmbeddings = {
129
- embed: async (text) => {
130
- const r = await rv.embed(text);
131
- const v = r?.embedding ?? r;
132
- return Array.isArray(v) ? v : Array.from(v);
133
- },
134
- };
135
- embeddingServiceName = 'ruvector@0.2.27 (bundled all-MiniLM-L6-v2)';
136
- }
137
- }
138
- catch {
139
- // ruvector embed failed at runtime; fall through to next tier
140
- }
141
- }
142
- // Tier 1: agentic-flow v3 ReasoningBank (kept for backward-compat; may
143
- // silently fall back on darwin-arm64 without sharp — that's the bug
144
- // Tier 0 was added to bypass).
145
- if (!realEmbeddings) {
146
- const rb = await import('agentic-flow/reasoningbank').catch(() => null);
147
- if (rb?.computeEmbedding) {
148
- realEmbeddings = { embed: (text) => rb.computeEmbedding(text) };
149
- embeddingServiceName = 'agentic-flow/reasoningbank';
150
- }
151
- }
152
- // Tier 2: @claude-flow/embeddings with agentic-flow provider
153
- if (!realEmbeddings) {
154
- const embeddingsModule = await import('@claude-flow/embeddings').catch(() => null);
155
- if (embeddingsModule?.createEmbeddingService) {
156
- try {
157
- const service = embeddingsModule.createEmbeddingService({ provider: 'agentic-flow' });
158
- realEmbeddings = {
159
- embed: async (text) => {
160
- const result = await service.embed(text);
161
- return Array.from(result.embedding);
162
- },
163
- };
164
- embeddingServiceName = 'agentic-flow';
165
- }
166
- catch {
167
- // agentic-flow provider not available, try ONNX
168
- }
169
- }
170
- }
171
- // Tier 3: @claude-flow/embeddings with ONNX provider
172
- if (!realEmbeddings) {
173
- const embeddingsModule = await import('@claude-flow/embeddings').catch(() => null);
174
- if (embeddingsModule?.createEmbeddingService) {
175
- try {
176
- const service = embeddingsModule.createEmbeddingService({ provider: 'onnx' });
177
- realEmbeddings = {
178
- embed: async (text) => {
179
- const result = await service.embed(text);
180
- return Array.from(result.embedding);
181
- },
182
- };
183
- embeddingServiceName = 'onnx';
184
- }
185
- catch {
186
- // ONNX provider not available, fall through to mock
187
- }
188
- }
189
- }
190
- // No Tier 4 mock fallback. If all real-embedder tiers fail to import or
191
- // probe, leave realEmbeddings null and let downstream code use the
192
- // explicit hash-fallback path with a clear _embeddingNote in stats.
193
- // Silently substituting mock embeddings would hide a missing production
194
- // dependency from callers — that's the bug ADR-086 was about.
195
- }
196
- catch {
197
- // No embedding provider available, will use fallback
198
- }
199
- })();
200
- return embeddingsPromise;
201
- }
202
- // Storage paths
203
- const STORAGE_DIR = '.claude-flow';
204
- const NEURAL_DIR = 'neural';
205
- const MODELS_FILE = 'models.json';
206
- const PATTERNS_FILE = 'patterns.json';
207
- function getNeuralDir() {
208
- return join(getProjectCwd(), STORAGE_DIR, NEURAL_DIR);
209
- }
210
- function getNeuralPath() {
211
- return join(getNeuralDir(), MODELS_FILE);
212
- }
213
- function ensureNeuralDir() {
214
- const dir = getNeuralDir();
215
- if (!existsSync(dir)) {
216
- mkdirSync(dir, { recursive: true });
217
- }
218
- }
219
- function loadNeuralStore() {
220
- try {
221
- const path = getNeuralPath();
222
- if (existsSync(path)) {
223
- return JSON.parse(readFileSync(path, 'utf-8'));
224
- }
225
- }
226
- catch {
227
- // Return empty store
228
- }
229
- return { models: {}, patterns: {}, version: '3.0.0' };
230
- }
231
- /**
232
- * ADR-176 flywheel: expose the stored patterns (id/name/content) so the
233
- * self-optimizing loop can harvest a benchmark corpus from real usage. Additive,
234
- * read-only, never throws.
235
- */
236
- export function getStorePatterns() {
237
- try {
238
- return Object.values(loadNeuralStore().patterns ?? {}).map((p) => ({ id: p.id, name: p.name, content: p.content }));
239
- }
240
- catch {
241
- return [];
242
- }
243
- }
244
- function saveNeuralStore(store) {
245
- ensureNeuralDir();
246
- writeFileSync(getNeuralPath(), JSON.stringify(store, null, 2), 'utf-8');
247
- }
248
- /**
249
- * Public helper: read-only stats about the neural store, for the unified
250
- * learning-stats aggregator. Returns total pattern count + per-type breakdown
251
- * without exposing the embeddings.
252
- */
253
- export function getNeuralStoreStats() {
254
- const store = loadNeuralStore();
255
- const patterns = Object.values(store.patterns ?? {});
256
- const byType = {};
257
- for (const p of patterns) {
258
- const t = p.type || 'unknown';
259
- byType[t] = (byType[t] ?? 0) + 1;
260
- }
261
- return {
262
- patternCount: patterns.length,
263
- byType,
264
- modelCount: Object.values(store.models ?? {}).length,
265
- source: '.claude-flow/neural/patterns.json (loadNeuralStore)',
266
- };
267
- }
268
- /**
269
- * Public helper: store an array of patterns into the neural store so they
270
- * surface via `neural_patterns list`. Used by hooks_pretrain so its extracted
271
- * patterns are actually queryable, not just bundled in the `pretrain` namespace.
272
- * #2245.
273
- *
274
- * Returns the number of patterns written.
275
- */
276
- export async function storeNeuralPatterns(items) {
277
- if (!items || items.length === 0)
278
- return { stored: 0, total: 0 };
279
- // realEmbeddings is initialised lazily by ensureEmbeddings() (invoked from
280
- // generateEmbedding()); it falls back to a hash-based embedding if no
281
- // provider is available.
282
- const store = loadNeuralStore();
283
- let stored = 0;
284
- for (const item of items) {
285
- if (!item.name || !item.type)
286
- continue;
287
- const sourceText = item.content ?? item.name;
288
- const embedding = await generateEmbedding(sourceText);
289
- const id = `pattern-${Date.now()}-${stored.toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
290
- store.patterns[id] = {
291
- id,
292
- name: String(item.name).slice(0, 200),
293
- type: String(item.type).slice(0, 64),
294
- embedding,
295
- content: typeof sourceText === 'string' ? sourceText.slice(0, 4096) : undefined,
296
- metadata: item.metadata ?? {},
297
- createdAt: new Date().toISOString(),
298
- usageCount: 0,
299
- };
300
- stored++;
301
- }
302
- saveNeuralStore(store);
303
- return { stored, total: items.length };
304
- }
305
- // Generate embedding - uses real ML embeddings if available, falls back to deterministic hash
306
- async function generateEmbedding(text, dims = 384) {
307
- // Lazily resolve the embedding provider on first real use (perf: keeps
308
- // ONNX init off the CLI startup path — see ensureEmbeddings()).
309
- if (text)
310
- await ensureEmbeddings();
311
- // If real embeddings available and text provided, use them
312
- if (realEmbeddings && text) {
313
- try {
314
- return await realEmbeddings.embed(text);
315
- }
316
- catch {
317
- // Fall back to hash-based
318
- }
319
- }
320
- // Hash-based deterministic embedding (better than pure random for consistency)
321
- // NOTE: No semantic meaning — only useful for consistent deduplication, not similarity search
322
- if (text) {
323
- (await import('../memory/embedding-policy.js')).enforceNoStub('neural-tools.generateEmbedding'); // "no stubs" strict mode
324
- if (embeddingServiceName === 'none') {
325
- embeddingServiceName = 'hash-fallback';
326
- }
327
- const hash = text.split('').reduce((acc, char, i) => {
328
- return acc + char.charCodeAt(0) * (i + 1);
329
- }, 0);
330
- // Use hash to seed a deterministic embedding
331
- const embedding = [];
332
- let seed = hash;
333
- for (let i = 0; i < dims; i++) {
334
- // Simple LCG random with seed
335
- seed = (seed * 1103515245 + 12345) & 0x7fffffff;
336
- embedding.push((seed / 0x7fffffff) * 2 - 1);
337
- }
338
- return embedding;
339
- }
340
- // No text provided — return zero vector (callers should always provide text)
341
- return new Array(dims).fill(0);
342
- }
343
- // Cosine similarity for pattern search
344
- function cosineSimilarity(a, b) {
345
- if (a.length !== b.length)
346
- return 0;
347
- let dotProduct = 0;
348
- let normA = 0;
349
- let normB = 0;
350
- for (let i = 0; i < a.length; i++) {
351
- dotProduct += a[i] * b[i];
352
- normA += a[i] * a[i];
353
- normB += b[i] * b[i];
354
- }
355
- return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB) || 1);
356
- }
357
- export const neuralTools = [
358
- {
359
- name: 'neural_train',
360
- description: 'Train a neural model Use when nothing native trains on your workflow — Claude Code has no learning loop. Use to train SONA/MoE/EWC patterns from successful task outcomes; query via neural_predict before spawning agents. Off-path for one-shot work.',
361
- category: 'neural',
362
- inputSchema: {
363
- type: 'object',
364
- properties: {
365
- modelId: { type: 'string', description: 'Model ID to train' },
366
- modelType: { type: 'string', enum: ['moe', 'transformer', 'classifier', 'embedding'], description: 'Model type' },
367
- epochs: { type: 'number', description: 'Number of training epochs' },
368
- learningRate: { type: 'number', description: 'Learning rate' },
369
- data: { type: 'object', description: 'Training data' },
370
- },
371
- required: ['modelType'],
372
- },
373
- handler: async (input) => {
374
- if (input.modelId) {
375
- const v = validateIdentifier(input.modelId, 'modelId');
376
- if (!v.valid)
377
- return { success: false, error: v.error };
378
- }
379
- const store = loadNeuralStore();
380
- const modelId = input.modelId || `model-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
381
- const modelType = input.modelType;
382
- const epochs = input.epochs || 10;
383
- const model = {
384
- id: modelId,
385
- name: `${modelType}-model`,
386
- type: modelType,
387
- status: 'training',
388
- accuracy: 0,
389
- epochs,
390
- config: {
391
- learningRate: input.learningRate || 0.001,
392
- batchSize: 32,
393
- },
394
- };
395
- store.models[modelId] = model;
396
- saveNeuralStore(store);
397
- // Real training: embed training data and store as searchable patterns
398
- const trainingData = input.data;
399
- let patternsStored = 0;
400
- if (trainingData) {
401
- const entries = Array.isArray(trainingData) ? trainingData : [trainingData];
402
- for (let i = 0; i < entries.length; i++) {
403
- const entry = entries[i];
404
- const text = typeof entry === 'string' ? entry
405
- : entry?.text
406
- || entry?.content
407
- || entry?.label
408
- || JSON.stringify(entry);
409
- if (!text)
410
- continue;
411
- const embedding = await generateEmbedding(text, 384);
412
- const patternId = `${modelId}-train-${i}`;
413
- // ADR-093 F11: extract a meaningful label instead of dumping raw
414
- // training JSON as the pattern name. Audit reported neural_predict
415
- // returned `label: <raw training data JSON>` because the previous
416
- // fallback was `text.slice(0, 100)` where text was `JSON.stringify(entry)`.
417
- let label;
418
- if (typeof entry === 'string') {
419
- label = entry.slice(0, 80);
420
- }
421
- else if (entry && typeof entry === 'object') {
422
- const e = entry;
423
- // Prefer common semantic fields over a JSON dump
424
- const labelField = e.label ?? e.category ?? e.class ?? e.tag ?? e.intent ?? e.name ?? e.title;
425
- if (typeof labelField === 'string' && labelField.length > 0) {
426
- label = labelField.slice(0, 80);
427
- }
428
- else {
429
- const summaryField = e.text ?? e.input ?? e.task ?? e.description ?? e.content;
430
- if (typeof summaryField === 'string' && summaryField.length > 0) {
431
- label = `${summaryField.slice(0, 60)}${summaryField.length > 60 ? '…' : ''}`;
432
- }
433
- else {
434
- // Last resort: reduce to a stable short hash-like id
435
- label = `${modelType}:entry-${i}`;
436
- }
437
- }
438
- }
439
- else {
440
- label = `${modelType}:entry-${i}`;
441
- }
442
- store.patterns[patternId] = {
443
- id: patternId,
444
- name: label,
445
- type: modelType,
446
- embedding,
447
- metadata: { modelId, epoch: epochs, index: i, raw: entry },
448
- createdAt: new Date().toISOString(),
449
- usageCount: 0,
450
- };
451
- patternsStored++;
452
- }
453
- }
454
- model.status = 'ready';
455
- model.accuracy = patternsStored > 0 ? 1.0 : 0; // accuracy = data stored, not simulated
456
- model.trainedAt = new Date().toISOString();
457
- saveNeuralStore(store);
458
- return {
459
- success: true,
460
- _realEmbedding: !!realEmbeddings,
461
- _embeddingSource: embeddingServiceName,
462
- embeddingProvider: embeddingServiceName,
463
- modelId,
464
- type: modelType,
465
- status: model.status,
466
- patternsStored,
467
- totalPatterns: Object.keys(store.patterns).length,
468
- epochs,
469
- trainedAt: model.trainedAt,
470
- ...(embeddingServiceName === 'hash-fallback' || embeddingServiceName === 'none' ? {
471
- platformNote: 'ONNX embeddings not available — using hash-based fallback. Install @claude-flow/embeddings and run "embeddings init --download" for semantic search.',
472
- } : {}),
473
- };
474
- },
475
- },
476
- {
477
- name: 'neural_predict',
478
- description: 'Make predictions using a neural model Use when nothing native trains on your workflow — Claude Code has no learning loop. Use to train SONA/MoE/EWC patterns from successful task outcomes; query via neural_predict before spawning agents. Off-path for one-shot work.',
479
- category: 'neural',
480
- inputSchema: {
481
- type: 'object',
482
- properties: {
483
- modelId: { type: 'string', description: 'Model ID to use' },
484
- input: { type: 'string', description: 'Input text or data' },
485
- topK: { type: 'number', description: 'Number of top predictions' },
486
- },
487
- required: ['input'],
488
- },
489
- handler: async (input) => {
490
- {
491
- const v = validateText(input.input, 'input');
492
- if (!v.valid)
493
- return { success: false, error: v.error };
494
- }
495
- if (input.modelId) {
496
- const v = validateIdentifier(input.modelId, 'modelId');
497
- if (!v.valid)
498
- return { success: false, error: v.error };
499
- }
500
- const store = loadNeuralStore();
501
- const modelId = input.modelId;
502
- const inputText = input.input;
503
- const topK = input.topK || 3;
504
- // Find model or use default
505
- const model = modelId ? store.models[modelId] : Object.values(store.models).find(m => m.status === 'ready');
506
- if (model && model.status !== 'ready') {
507
- return { success: false, error: 'Model not ready' };
508
- }
509
- // Generate real embedding for the input
510
- const startTime = performance.now();
511
- const embedding = await generateEmbedding(inputText, 384);
512
- const latency = Math.round(performance.now() - startTime);
513
- // ADR-093 F11: real classifier head over stored patterns. Previously
514
- // confidence was the raw cosine similarity (often clamped to 0 when
515
- // stored embeddings were stale or zero-vectored). Now we run k-NN
516
- // with cosine distance and apply a temperature-controlled softmax
517
- // over the top-K so confidence is a proper distribution that sums
518
- // to 1, and we surface enough metadata to trust the result.
519
- const storedPatterns = Object.values(store.patterns);
520
- let predictions;
521
- if (storedPatterns.length > 0) {
522
- // Step 1: k-NN with cosine
523
- const scored = storedPatterns
524
- .map(p => {
525
- const sim = cosineSimilarity(embedding, p.embedding);
526
- return {
527
- patternId: p.id,
528
- label: p.name || p.type || p.id,
529
- cosineSimilarity: sim,
530
- };
531
- })
532
- .sort((a, b) => b.cosineSimilarity - a.cosineSimilarity)
533
- .slice(0, topK);
534
- // Step 2: temperature-softmax over the top-K so confidence sums to 1.
535
- // Temperature 0.1 sharpens differences between similar candidates.
536
- const tau = 0.1;
537
- const exps = scored.map(s => Math.exp(s.cosineSimilarity / tau));
538
- const z = exps.reduce((a, b) => a + b, 0) || 1;
539
- predictions = scored.map((s, i) => ({
540
- label: s.label,
541
- patternId: s.patternId,
542
- cosineSimilarity: Number(s.cosineSimilarity.toFixed(4)),
543
- confidence: Number((exps[i] / z).toFixed(4)),
544
- }));
545
- }
546
- else {
547
- // No patterns stored — no predictions possible. Be honest about it
548
- // instead of returning empty silently.
549
- predictions = [];
550
- }
551
- const topConfidence = predictions[0]?.confidence ?? 0;
552
- const topSimilarity = predictions[0]?.cosineSimilarity ?? 0;
553
- return {
554
- success: true,
555
- _realEmbedding: !!realEmbeddings,
556
- _embeddingSource: embeddingServiceName,
557
- embeddingProvider: embeddingServiceName,
558
- _hasStoredPatterns: storedPatterns.length > 0,
559
- _classifierHead: storedPatterns.length > 0 ? 'knn-cosine+softmax(tau=0.1)' : 'none',
560
- modelId: model?.id || 'default',
561
- input: inputText,
562
- predictions,
563
- // Surface cosineSimilarity separately so callers know whether the
564
- // softmax confidence reflects true match strength.
565
- topPrediction: predictions[0]?.label ?? null,
566
- topConfidence,
567
- topSimilarity,
568
- embedding: embedding.slice(0, 8), // Preview of embedding
569
- embeddingDims: embedding.length,
570
- latency,
571
- ...(storedPatterns.length === 0 ? {
572
- _note: 'No patterns stored. Train with neural_train(modelType, trainingData) before predicting.',
573
- } : {}),
574
- };
575
- },
576
- },
577
- {
578
- name: 'neural_patterns',
579
- description: 'Get or manage neural patterns Use when nothing native trains on your workflow — Claude Code has no learning loop. Use to train SONA/MoE/EWC patterns from successful task outcomes; query via neural_predict before spawning agents. Off-path for one-shot work.',
580
- category: 'neural',
581
- inputSchema: {
582
- type: 'object',
583
- properties: {
584
- action: { type: 'string', enum: ['list', 'get', 'store', 'search', 'delete'], description: 'Action to perform' },
585
- patternId: { type: 'string', description: 'Pattern ID' },
586
- name: { type: 'string', description: 'Pattern name' },
587
- type: { type: 'string', description: 'Pattern type' },
588
- content: { type: 'string', description: 'Pattern source text (used for BM25 in hybrid search; falls back to name)' },
589
- query: { type: 'string', description: 'Search query' },
590
- limit: { type: 'number', description: 'Top-K results to return (default 10, max 100)' },
591
- mode: { type: 'string', enum: ['hybrid', 'cosine'], description: 'Search mode — hybrid (cosine+BM25+MMR, default) or cosine (pre-3.10.18 behaviour, for A/B)' },
592
- alpha: { type: 'number', description: 'Hybrid: cosine weight in [0,1]; (1-α) is BM25 weight (default 0.5, tuned ADR-082)' },
593
- mmrLambda: { type: 'number', description: 'Hybrid: MMR balance — 1.0 = pure relevance, 0.0 = pure diversity (default 0.7, tuned ADR-082)' },
594
- subjectWeight: { type: 'number', description: 'Hybrid: multi-field BM25 weight for subject/name (default 2.0 non-rerank, 3.0 with rerank — tuned ADR-082/083)' },
595
- bodyWeight: { type: 'number', description: 'Hybrid: multi-field BM25 weight for body/content (default 1.0)' },
596
- typePenaltyFactor: { type: 'number', description: 'Hybrid: meta-commit score multiplier — release/merge/bump commits × this factor (default 1.0 = disabled; set 0.5 for aggressive suppression)' },
597
- rerank: { type: 'boolean', description: 'Hybrid: opt-in cross-encoder rerank pass over the top-K (ADR-080). Adds ~20-40 ms per (query, doc) pair; first call downloads ~30MB model. Gracefully degrades to hybrid+MMR order when unavailable.' },
598
- hybridWeight: { type: 'number', description: 'Rerank: hybrid score weight in final combination (default 0.7, tuned ADR-083)' },
599
- ceWeight: { type: 'number', description: 'Rerank: cross-encoder score weight in final combination (default 0.3, tuned ADR-083)' },
600
- data: { type: 'object', description: 'Pattern data' },
601
- },
602
- },
603
- handler: async (input) => {
604
- if (input.patternId) {
605
- const v = validateIdentifier(input.patternId, 'patternId');
606
- if (!v.valid)
607
- return { success: false, error: v.error };
608
- }
609
- if (input.name) {
610
- const v = validateText(input.name, 'name');
611
- if (!v.valid)
612
- return { success: false, error: v.error };
613
- }
614
- if (input.type) {
615
- const v = validateIdentifier(input.type, 'type');
616
- if (!v.valid)
617
- return { success: false, error: v.error };
618
- }
619
- if (input.query) {
620
- const v = validateText(input.query, 'query');
621
- if (!v.valid)
622
- return { success: false, error: v.error };
623
- }
624
- const store = loadNeuralStore();
625
- const action = input.action || 'list';
626
- if (action === 'list') {
627
- const patterns = Object.values(store.patterns);
628
- const typeFilter = input.type;
629
- const filtered = typeFilter ? patterns.filter(p => p.type === typeFilter) : patterns;
630
- return {
631
- patterns: filtered.map(p => ({
632
- id: p.id,
633
- name: p.name,
634
- type: p.type,
635
- usageCount: p.usageCount,
636
- createdAt: p.createdAt,
637
- })),
638
- total: filtered.length,
639
- };
640
- }
641
- if (action === 'get') {
642
- const pattern = store.patterns[input.patternId];
643
- if (!pattern) {
644
- return { success: false, error: 'Pattern not found' };
645
- }
646
- return { success: true, pattern };
647
- }
648
- if (action === 'store') {
649
- const patternId = `pattern-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
650
- const patternName = input.name || 'Unnamed pattern';
651
- const patternContent = input.content ?? patternName;
652
- // Generate embedding from pattern content (falls back to name).
653
- const embedding = await generateEmbedding(patternContent, 384);
654
- const pattern = {
655
- id: patternId,
656
- name: patternName,
657
- type: input.type || 'general',
658
- embedding,
659
- content: typeof patternContent === 'string' ? patternContent.slice(0, 4096) : undefined,
660
- metadata: input.data || {},
661
- createdAt: new Date().toISOString(),
662
- usageCount: 0,
663
- };
664
- store.patterns[patternId] = pattern;
665
- saveNeuralStore(store);
666
- return {
667
- success: true,
668
- _realEmbedding: !!realEmbeddings,
669
- _embeddingSource: embeddingServiceName,
670
- embeddingProvider: embeddingServiceName,
671
- patternId,
672
- name: pattern.name,
673
- type: pattern.type,
674
- embeddingDims: embedding.length,
675
- createdAt: pattern.createdAt,
676
- };
677
- }
678
- if (action === 'search') {
679
- const query = input.query;
680
- const k = Math.min(Math.max(Number(input.limit ?? input.topK ?? 10), 1), 100);
681
- // ADR-078 hybrid retrieval controls. Cosine-only mode preserves the
682
- // pre-3.10.18 behaviour for A/B tests via {mode:'cosine'}; default is
683
- // hybrid (cosine + BM25 + MMR).
684
- const mode = String(input.mode ?? 'hybrid');
685
- const useRerank = input.rerank === true || String(input.rerank) === 'true';
686
- // ADR-083 joint grid: rerank path benefits from DIFFERENT hybrid
687
- // sub-params than non-rerank (the cross-encoder adds semantic depth,
688
- // so the hybrid stage can be more keyword-focused). nDCG@3 0.900 →
689
- // 0.963 on rerank just by switching sw 2.0 → 3.0 in the hybrid stage.
690
- // Champion-provided defaults (ADR-176/177): explicit input wins, then the
691
- // adopted proven-config champion, then the hardcoded ADR-082 defaults.
692
- const champ = activeChampionParams();
693
- const alpha = Number(input.alpha ?? champ.alpha ?? 0.5);
694
- const mmrLambda = Number(input.mmrLambda ?? champ.mmrLambda ?? 0.7);
695
- const { tokenize, buildCorpusStats, hybridScores, mmrRerank, multiFieldBM25, typePenalty } = await import('../memory/hybrid-retrieval.js');
696
- const patterns = Object.values(store.patterns);
697
- // Query embedding + cosine array depend only on (query, store) — NOT the
698
- // retrieval config. Cache them so scoring many configs for one query
699
- // (the flywheel's access pattern) embeds + cosines once, not per config.
700
- const _cosKey = `${corpusFingerprint(patterns)}::${query}`;
701
- let queryEmbedding, cosineArr;
702
- const _hit = _cosineCacheGet(_cosKey);
703
- if (_hit) {
704
- queryEmbedding = _hit.queryEmbedding;
705
- cosineArr = _hit.cosineArr;
706
- }
707
- else {
708
- queryEmbedding = await generateEmbedding(query, 384);
709
- cosineArr = patterns.map((p) => cosineSimilarity(queryEmbedding, p.embedding));
710
- _cosineCacheSet(_cosKey, { queryEmbedding, cosineArr });
711
- }
712
- if (mode === 'cosine') {
713
- const ranked = patterns
714
- .map((p, i) => ({ ...p, similarity: cosineArr[i] }))
715
- .sort((a, b) => b.similarity - a.similarity)
716
- .slice(0, k);
717
- return {
718
- _realSimilarity: true,
719
- _realEmbedding: !!realEmbeddings,
720
- _embeddingSource: embeddingServiceName,
721
- embeddingProvider: embeddingServiceName,
722
- mode: 'cosine',
723
- query,
724
- results: ranked.map((r) => ({ id: r.id, name: r.name, type: r.type, similarity: r.similarity })),
725
- total: ranked.length,
726
- };
727
- }
728
- // Hybrid path — multi-field BM25 (subject 3×, body 1×) + type penalty
729
- // for meta-commits (release bumps / merges) per ADR-079. Falls back
730
- // to single-field BM25 when no content is stored.
731
- // Cache the (config-independent) tokenized docs + BM25 stats by store fingerprint.
732
- const _fp = corpusFingerprint(patterns);
733
- let subjectDocs, bodyDocs, subjectStats, bodyStats;
734
- if (_corpusStatsCache && _corpusStatsCache.fp === _fp) {
735
- subjectDocs = _corpusStatsCache.subjectDocs;
736
- bodyDocs = _corpusStatsCache.bodyDocs;
737
- subjectStats = _corpusStatsCache.subjectStats;
738
- bodyStats = _corpusStatsCache.bodyStats;
739
- }
740
- else {
741
- subjectDocs = patterns.map((p) => tokenize(p.name ?? ''));
742
- bodyDocs = patterns.map((p) => {
743
- // Body is content minus the subject — if content starts with name,
744
- // strip it; otherwise use full content (with name removed if duplicated).
745
- const c = p.content ?? '';
746
- const n = p.name ?? '';
747
- return tokenize(c.startsWith(n) ? c.slice(n.length) : c);
748
- });
749
- subjectStats = buildCorpusStats(subjectDocs);
750
- bodyStats = buildCorpusStats(bodyDocs);
751
- _corpusStatsCache = { fp: _fp, subjectDocs, bodyDocs, subjectStats, bodyStats };
752
- }
753
- const queryTokens = tokenize(query);
754
- // ADR-082: subjectWeight 3.0 → 2.0 from grid (sw=2 dominates at hybrid-only).
755
- // ADR-083 joint grid: when rerank is on, the cross-encoder handles
756
- // semantic understanding, so the hybrid stage can be MORE
757
- // subject-focused (sw=3) — recovers nDCG@3 0.963.
758
- const subjectWeight = Number(input.subjectWeight ?? champ.subjectWeight ?? (useRerank ? 3.0 : 2.0));
759
- const bodyWeight = Number(input.bodyWeight ?? champ.bodyWeight ?? 1.0);
760
- const bm25Arr = patterns.map((_, i) => multiFieldBM25(queryTokens, subjectDocs[i], bodyDocs[i], subjectStats, bodyStats, subjectWeight, bodyWeight));
761
- const baseHybrid = hybridScores(cosineArr, bm25Arr, alpha);
762
- // Type penalty — opt-in (default 1.0 = disabled). Ablation in ADR-079
763
- // showed multi-field BM25 alone gives best top-1 (8/10 vs 7/10 with
764
- // penalty enabled) because some relevant work commits also match the
765
- // Merge/release regex. Callers wanting aggressive meta-commit
766
- // suppression can set {typePenaltyFactor: 0.5}.
767
- const typeFactor = Number(input.typePenaltyFactor ?? champ.typePenaltyFactor ?? 1.0);
768
- const hybridArr = typeFactor === 1.0
769
- ? baseHybrid
770
- : baseHybrid.map((s, i) => s * typePenalty(patterns[i].name, typeFactor));
771
- // Candidate pool sizing: k*3 for MMR, k*6 for cross-encoder (it needs
772
- // more options to find the truly-best). ADR-080 ablation: rerank over
773
- // a narrow post-MMR slice degrades top-1; reranking a wider hybrid
774
- // top-K*6 pool restores and exceeds the no-rerank baseline.
775
- // useRerank declared at top of search block for conditional defaults.
776
- const poolSize = useRerank ? k * 6 : k * 3;
777
- const prelim = patterns
778
- .map((p, i) => ({ p, hybrid: hybridArr[i], cosine: cosineArr[i], bm25: bm25Arr[i] }))
779
- .sort((a, b) => b.hybrid - a.hybrid)
780
- .slice(0, Math.min(poolSize, patterns.length));
781
- const candidates = prelim.map(({ p, hybrid, cosine, bm25 }) => ({
782
- id: p.id, name: p.name, type: p.type,
783
- embedding: p.embedding,
784
- content: p.content,
785
- relevance: hybrid,
786
- _cosine: cosine,
787
- _bm25: bm25,
788
- }));
789
- let picked;
790
- if (useRerank) {
791
- // ADR-080: cross-encoder reranks the wider candidate pool, then
792
- // final score = hybridWeight * hybrid + ceWeight * crossEncoder
793
- // on normalised scales. Ablation showed cross-encoder alone hits
794
- // 100% top-3 but loses top-1 (calibration on short commit subjects
795
- // is noisy); linear combination preserves hybrid's top-1 strength
796
- // while gaining the cross-encoder's recall.
797
- try {
798
- const { crossEncoderRerank } = await import('../memory/cross-encoder-rerank.js');
799
- const { normalise } = await import('../memory/hybrid-retrieval.js');
800
- const docs = candidates.map((c) => c.content || c.name);
801
- const reranked = await crossEncoderRerank(query, docs);
802
- const ceScores = new Array(candidates.length).fill(0);
803
- for (const { index, score } of reranked)
804
- ceScores[index] = score;
805
- const hybridNorm = normalise(candidates.map((c) => c.relevance));
806
- const ceNorm = normalise(ceScores);
807
- // ADR-083 joint grid: hw=0.7 cw=0.3 (with α=0.5 sw=3 from above) is
808
- // the joint optimum at nDCG@3=0.963 (vs 0.900 at 0.5/0.5). The
809
- // hybrid signal carries most of the relevance; the cross-encoder
810
- // contributes a 30% smoothing/disambiguation kick.
811
- const hybridWeight = Number(input.hybridWeight ?? 0.7);
812
- const ceWeight = Number(input.ceWeight ?? 0.3);
813
- const combined = candidates.map((c, i) => ({
814
- ...c,
815
- _crossEncoderScore: ceScores[i],
816
- _combinedScore: hybridWeight * hybridNorm[i] + ceWeight * ceNorm[i],
817
- }));
818
- picked = combined
819
- .sort((a, b) => b._combinedScore - a._combinedScore)
820
- .slice(0, k);
821
- }
822
- catch {
823
- picked = candidates.slice(0, k);
824
- }
825
- }
826
- else {
827
- // Default path: MMR diversity over top-K*3 hybrid candidates.
828
- picked = mmrRerank(candidates, k, mmrLambda);
829
- }
830
- return {
831
- _realSimilarity: true,
832
- _realEmbedding: !!realEmbeddings,
833
- _embeddingSource: embeddingServiceName,
834
- embeddingProvider: embeddingServiceName,
835
- mode: 'hybrid',
836
- alpha,
837
- mmrLambda,
838
- rerank: useRerank,
839
- query,
840
- results: picked.map((r) => ({
841
- id: r.id,
842
- name: r.name,
843
- type: r.type,
844
- similarity: r.relevance, // exposed as `similarity` for back-compat
845
- hybridScore: r.relevance,
846
- cosineScore: r._cosine,
847
- bm25Score: r._bm25,
848
- mmrScore: r.mmrScore,
849
- ...(r._crossEncoderScore !== undefined
850
- ? { crossEncoderScore: r._crossEncoderScore }
851
- : {}),
852
- })),
853
- total: picked.length,
854
- };
855
- }
856
- if (action === 'delete') {
857
- const patternId = input.patternId;
858
- if (!store.patterns[patternId]) {
859
- return { success: false, error: 'Pattern not found' };
860
- }
861
- delete store.patterns[patternId];
862
- saveNeuralStore(store);
863
- return { success: true, deleted: patternId };
864
- }
865
- return { success: false, error: 'Unknown action' };
866
- },
867
- },
868
- {
869
- name: 'neural_compress',
870
- description: 'Compress neural model or embeddings Use when nothing native trains on your workflow — Claude Code has no learning loop. Use to train SONA/MoE/EWC patterns from successful task outcomes; query via neural_predict before spawning agents. Off-path for one-shot work.',
871
- category: 'neural',
872
- inputSchema: {
873
- type: 'object',
874
- properties: {
875
- modelId: { type: 'string', description: 'Model ID to compress' },
876
- method: { type: 'string', enum: ['quantize', 'prune', 'distill'], description: 'Compression method' },
877
- targetSize: { type: 'number', description: 'Target size reduction (0-1)' },
878
- },
879
- },
880
- handler: async (input) => {
881
- if (input.modelId) {
882
- const v = validateIdentifier(input.modelId, 'modelId');
883
- if (!v.valid)
884
- return { success: false, error: v.error };
885
- }
886
- // Resolve provider so embeddingProvider in the result matches the old
887
- // eager-init reporting.
888
- await ensureEmbeddings();
889
- const store = loadNeuralStore();
890
- const method = input.method || 'quantize';
891
- const targetReduction = input.targetSize || 0.5;
892
- const patterns = Object.values(store.patterns);
893
- if (patterns.length === 0) {
894
- return { success: false, error: 'No patterns to compress. Train patterns first with neural_train.' };
895
- }
896
- const beforeCount = patterns.length;
897
- const beforeSize = patterns.reduce((s, p) => s + (p.embedding?.length || 0) * 4, 0); // Float32 = 4 bytes
898
- if (method === 'quantize') {
899
- try {
900
- const { quantizeInt8, getQuantizationStats } = await import('../memory/memory-initializer.js');
901
- let totalCompressed = 0;
902
- for (const pattern of patterns) {
903
- if (pattern.embedding && pattern.embedding.length > 0) {
904
- const stats = getQuantizationStats(pattern.embedding);
905
- const quantized = quantizeInt8(pattern.embedding);
906
- // Store quantized metadata (keep original embedding for search)
907
- pattern._quantized = {
908
- scale: quantized.scale,
909
- zeroPoint: quantized.zeroPoint,
910
- compressionRatio: stats.compressionRatio,
911
- };
912
- totalCompressed++;
913
- }
914
- }
915
- saveNeuralStore(store);
916
- return {
917
- success: true, _real: true, method,
918
- embeddingProvider: embeddingServiceName,
919
- patternsCompressed: totalCompressed,
920
- compressionRatio: '3.92x (Int8)',
921
- beforeBytes: beforeSize,
922
- afterBytes: Math.round(beforeSize / 3.92),
923
- };
924
- }
925
- catch {
926
- return { success: false, error: 'Quantization requires memory-initializer. Run `memory init` first.' };
927
- }
928
- }
929
- if (method === 'prune') {
930
- // Prune patterns with low usage count below threshold (targetReduction as min usage)
931
- const threshold = targetReduction;
932
- const toRemove = [];
933
- for (const [id, pattern] of Object.entries(store.patterns)) {
934
- if ((pattern.usageCount || 0) < threshold)
935
- toRemove.push(id);
936
- }
937
- for (const id of toRemove)
938
- delete store.patterns[id];
939
- saveNeuralStore(store);
940
- return {
941
- success: true, _real: true, method,
942
- embeddingProvider: embeddingServiceName,
943
- threshold,
944
- patternsRemoved: toRemove.length,
945
- patternsBefore: beforeCount,
946
- patternsAfter: Object.keys(store.patterns).length,
947
- };
948
- }
949
- if (method === 'distill') {
950
- // Merge similar patterns by cosine similarity > 0.95
951
- const patternList = Object.entries(store.patterns);
952
- const merged = [];
953
- for (let i = 0; i < patternList.length; i++) {
954
- const [idA, a] = patternList[i];
955
- if (merged.includes(idA))
956
- continue;
957
- for (let j = i + 1; j < patternList.length; j++) {
958
- const [idB, b] = patternList[j];
959
- if (!a.embedding || !b.embedding || merged.includes(idB))
960
- continue;
961
- const sim = cosineSimilarity(a.embedding, b.embedding);
962
- if (sim > 0.95) {
963
- // Merge: average embeddings, keep higher usage count
964
- for (let k = 0; k < a.embedding.length; k++) {
965
- a.embedding[k] = (a.embedding[k] + (b.embedding[k] || 0)) / 2;
966
- }
967
- a.usageCount = Math.max(a.usageCount || 0, b.usageCount || 0);
968
- delete store.patterns[idB];
969
- merged.push(idB);
970
- }
971
- }
972
- }
973
- saveNeuralStore(store);
974
- return {
975
- success: true, _real: true, method,
976
- embeddingProvider: embeddingServiceName,
977
- patternsMerged: merged.length,
978
- patternsBefore: beforeCount,
979
- patternsAfter: Object.keys(store.patterns).length,
980
- };
981
- }
982
- return { success: false, error: `Unknown method: ${method}. Use quantize, prune, or distill.` };
983
- },
984
- },
985
- {
986
- name: 'neural_status',
987
- description: 'Get neural system status Use when nothing native trains on your workflow — Claude Code has no learning loop. Use to train SONA/MoE/EWC patterns from successful task outcomes; query via neural_predict before spawning agents. Off-path for one-shot work.',
988
- category: 'neural',
989
- inputSchema: {
990
- type: 'object',
991
- properties: {
992
- modelId: { type: 'string', description: 'Specific model ID' },
993
- detailed: { type: 'boolean', description: 'Include detailed info' },
994
- },
995
- },
996
- handler: async (input) => {
997
- if (input.modelId) {
998
- const v = validateIdentifier(input.modelId, 'modelId');
999
- if (!v.valid)
1000
- return { success: false, error: v.error };
1001
- }
1002
- // Resolve provider so _realEmbeddings/embeddingProvider report the same
1003
- // values the old eager-init version produced.
1004
- await ensureEmbeddings();
1005
- const store = loadNeuralStore();
1006
- if (input.modelId) {
1007
- const model = store.models[input.modelId];
1008
- if (!model) {
1009
- return { success: false, error: 'Model not found' };
1010
- }
1011
- return { success: true, model };
1012
- }
1013
- const models = Object.values(store.models);
1014
- const patterns = Object.values(store.patterns);
1015
- return {
1016
- _realEmbeddings: !!realEmbeddings,
1017
- embeddingProvider: realEmbeddings ? `@claude-flow/embeddings (${embeddingServiceName})` : 'hash-based (deterministic)',
1018
- models: {
1019
- total: models.length,
1020
- ready: models.filter(m => m.status === 'ready').length,
1021
- training: models.filter(m => m.status === 'training').length,
1022
- avgAccuracy: models.length > 0
1023
- ? models.reduce((sum, m) => sum + m.accuracy, 0) / models.length
1024
- : 0,
1025
- },
1026
- patterns: {
1027
- total: patterns.length,
1028
- byType: patterns.reduce((acc, p) => {
1029
- acc[p.type] = (acc[p.type] || 0) + 1;
1030
- return acc;
1031
- }, {}),
1032
- totalEmbeddingDims: patterns.length > 0 ? patterns[0].embedding.length : 384,
1033
- },
1034
- features: {
1035
- hnsw: true,
1036
- quantization: true,
1037
- // #1770: probe the real loader instead of returning a literal false.
1038
- // Was hardcoded false, which contradicted hooks_intelligence_stats's
1039
- // simultaneous claim of `implementation: real-flash-attention`.
1040
- // The two surfaces now agree on a single source of truth.
1041
- flashAttention: await (async () => {
1042
- try {
1043
- // #1773 item 4 — flash-attention now lives in @claude-flow/neural
1044
- const { getFlashAttention } = await import('@claude-flow/neural');
1045
- return getFlashAttention() !== null;
1046
- }
1047
- catch {
1048
- return false;
1049
- }
1050
- })(),
1051
- reasoningBank: true,
1052
- },
1053
- };
1054
- },
1055
- },
1056
- {
1057
- name: 'neural_optimize',
1058
- description: 'Optimize neural model performance Use when nothing native trains on your workflow — Claude Code has no learning loop. Use to train SONA/MoE/EWC patterns from successful task outcomes; query via neural_predict before spawning agents. Off-path for one-shot work.',
1059
- category: 'neural',
1060
- inputSchema: {
1061
- type: 'object',
1062
- properties: {
1063
- modelId: { type: 'string', description: 'Model ID to optimize' },
1064
- target: { type: 'string', enum: ['speed', 'memory', 'accuracy', 'balanced'], description: 'Optimization target' },
1065
- },
1066
- },
1067
- handler: async (input) => {
1068
- if (input.modelId) {
1069
- const v = validateIdentifier(input.modelId, 'modelId');
1070
- if (!v.valid)
1071
- return { success: false, error: v.error };
1072
- }
1073
- // Resolve provider so embeddingProvider in the result matches the old
1074
- // eager-init reporting.
1075
- await ensureEmbeddings();
1076
- const store = loadNeuralStore();
1077
- const target = input.target || 'balanced';
1078
- const patterns = Object.values(store.patterns);
1079
- if (patterns.length === 0) {
1080
- return { success: false, error: 'No patterns to optimize. Train patterns first with neural_train.' };
1081
- }
1082
- const startTime = performance.now();
1083
- const actions = [];
1084
- const beforeCount = patterns.length;
1085
- const dims = patterns[0]?.embedding?.length || 0;
1086
- let patternsRemoved = 0;
1087
- let patternsQuantized = 0;
1088
- let duplicatesRemoved = 0;
1089
- // speed / balanced: deduplicate identical or near-identical patterns
1090
- if (target === 'speed' || target === 'balanced') {
1091
- const seen = new Map(); // hash -> id
1092
- for (const [id, p] of Object.entries(store.patterns)) {
1093
- if (!p.embedding || p.embedding.length === 0)
1094
- continue;
1095
- // Quick hash: first 8 dims rounded
1096
- const hash = p.embedding.slice(0, 8).map(v => v.toFixed(4)).join(',');
1097
- if (seen.has(hash)) {
1098
- // Verify with full cosine similarity
1099
- const existingId = seen.get(hash);
1100
- const existing = store.patterns[existingId];
1101
- if (existing && cosineSimilarity(p.embedding, existing.embedding) > 0.99) {
1102
- existing.usageCount = Math.max(existing.usageCount || 0, p.usageCount || 0);
1103
- delete store.patterns[id];
1104
- duplicatesRemoved++;
1105
- }
1106
- }
1107
- else {
1108
- seen.set(hash, id);
1109
- }
1110
- }
1111
- if (duplicatesRemoved > 0)
1112
- actions.push(`Removed ${duplicatesRemoved} near-duplicate patterns`);
1113
- }
1114
- // memory / balanced: quantize large embeddings
1115
- if (target === 'memory' || target === 'balanced') {
1116
- try {
1117
- const { quantizeInt8, getQuantizationStats } = await import('../memory/memory-initializer.js');
1118
- for (const p of Object.values(store.patterns)) {
1119
- if (p.embedding && p.embedding.length > 0 && !p._quantized) {
1120
- const stats = getQuantizationStats(p.embedding);
1121
- const q = quantizeInt8(p.embedding);
1122
- p._quantized = { scale: q.scale, zeroPoint: q.zeroPoint, compressionRatio: stats.compressionRatio };
1123
- patternsQuantized++;
1124
- }
1125
- }
1126
- if (patternsQuantized > 0)
1127
- actions.push(`Quantized ${patternsQuantized} pattern embeddings (Int8, ~3.92x)`);
1128
- }
1129
- catch {
1130
- actions.push('Quantization skipped (memory-initializer not available)');
1131
- }
1132
- }
1133
- // accuracy / balanced: prune low-usage, zero-embedding patterns
1134
- if (target === 'accuracy' || target === 'balanced') {
1135
- for (const [id, p] of Object.entries(store.patterns)) {
1136
- if (!p.embedding || p.embedding.length === 0) {
1137
- delete store.patterns[id];
1138
- patternsRemoved++;
1139
- continue;
1140
- }
1141
- // Remove patterns with all-zero embeddings (no useful signal)
1142
- const norm = p.embedding.reduce((s, v) => s + v * v, 0);
1143
- if (norm < 1e-10) {
1144
- delete store.patterns[id];
1145
- patternsRemoved++;
1146
- }
1147
- }
1148
- if (patternsRemoved > 0)
1149
- actions.push(`Pruned ${patternsRemoved} empty/zero-signal patterns`);
1150
- }
1151
- saveNeuralStore(store);
1152
- const elapsed = Math.round(performance.now() - startTime);
1153
- return {
1154
- success: true, _real: true, target,
1155
- embeddingProvider: embeddingServiceName,
1156
- actions,
1157
- patternsBefore: beforeCount,
1158
- patternsAfter: Object.keys(store.patterns).length,
1159
- duplicatesRemoved,
1160
- patternsQuantized,
1161
- patternsRemoved,
1162
- embeddingDims: dims,
1163
- elapsedMs: elapsed,
1164
- };
1165
- },
1166
- },
1167
- ];
1168
- //# sourceMappingURL=neural-tools.js.map