@claude-flow/cli 3.32.9 → 3.32.11

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 (447) hide show
  1. package/.claude/.proven-config-version +1 -0
  2. package/.claude/agents/analysis/analyze-code-quality.md +178 -178
  3. package/.claude/agents/analysis/code-analyzer.md +209 -209
  4. package/.claude/agents/analysis/code-review/analyze-code-quality.md +178 -178
  5. package/.claude/agents/architecture/arch-system-design.md +156 -156
  6. package/.claude/agents/architecture/system-design/arch-system-design.md +154 -154
  7. package/.claude/agents/browser/browser-agent.yaml +182 -182
  8. package/.claude/agents/consensus/byzantine-coordinator.md +62 -62
  9. package/.claude/agents/consensus/crdt-synchronizer.md +996 -996
  10. package/.claude/agents/consensus/gossip-coordinator.md +62 -62
  11. package/.claude/agents/consensus/performance-benchmarker.md +850 -850
  12. package/.claude/agents/consensus/quorum-manager.md +822 -822
  13. package/.claude/agents/consensus/raft-manager.md +62 -62
  14. package/.claude/agents/consensus/security-manager.md +621 -621
  15. package/.claude/agents/core/planner.md +374 -374
  16. package/.claude/agents/custom/test-long-runner.md +44 -44
  17. package/.claude/agents/data/data-ml-model.md +444 -444
  18. package/.claude/agents/data/ml/data-ml-model.md +192 -192
  19. package/.claude/agents/development/backend/dev-backend-api.md +141 -141
  20. package/.claude/agents/development/dev-backend-api.md +344 -344
  21. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +163 -163
  22. package/.claude/agents/devops/ops-cicd-github.md +164 -164
  23. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +173 -173
  24. package/.claude/agents/documentation/docs-api-openapi.md +354 -354
  25. package/.claude/agents/flow-nexus/app-store.md +87 -87
  26. package/.claude/agents/flow-nexus/authentication.md +68 -68
  27. package/.claude/agents/flow-nexus/challenges.md +80 -80
  28. package/.claude/agents/flow-nexus/neural-network.md +87 -87
  29. package/.claude/agents/flow-nexus/payments.md +82 -82
  30. package/.claude/agents/flow-nexus/sandbox.md +75 -75
  31. package/.claude/agents/flow-nexus/swarm.md +75 -75
  32. package/.claude/agents/flow-nexus/user-tools.md +95 -95
  33. package/.claude/agents/flow-nexus/workflow.md +83 -83
  34. package/.claude/agents/github/code-review-swarm.md +377 -377
  35. package/.claude/agents/github/github-modes.md +172 -172
  36. package/.claude/agents/github/issue-tracker.md +575 -575
  37. package/.claude/agents/github/multi-repo-swarm.md +552 -552
  38. package/.claude/agents/github/pr-manager.md +437 -437
  39. package/.claude/agents/github/project-board-sync.md +508 -508
  40. package/.claude/agents/github/release-manager.md +604 -604
  41. package/.claude/agents/github/release-swarm.md +582 -582
  42. package/.claude/agents/github/repo-architect.md +397 -397
  43. package/.claude/agents/github/swarm-issue.md +572 -572
  44. package/.claude/agents/github/swarm-pr.md +427 -427
  45. package/.claude/agents/github/sync-coordinator.md +451 -451
  46. package/.claude/agents/github/workflow-automation.md +902 -902
  47. package/.claude/agents/goal/agent.md +815 -815
  48. package/.claude/agents/optimization/benchmark-suite.md +664 -664
  49. package/.claude/agents/optimization/load-balancer.md +430 -430
  50. package/.claude/agents/optimization/performance-monitor.md +671 -671
  51. package/.claude/agents/optimization/resource-allocator.md +673 -673
  52. package/.claude/agents/optimization/topology-optimizer.md +807 -807
  53. package/.claude/agents/payments/agentic-payments.md +126 -126
  54. package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
  55. package/.claude/agents/sparc/architecture.md +698 -698
  56. package/.claude/agents/sparc/pseudocode.md +519 -519
  57. package/.claude/agents/sparc/refinement.md +801 -801
  58. package/.claude/agents/sparc/specification.md +477 -477
  59. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
  60. package/.claude/agents/specialized/spec-mobile-react-native.md +226 -226
  61. package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
  62. package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
  63. package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
  64. package/.claude/agents/sublinear/performance-optimizer.md +367 -367
  65. package/.claude/agents/sublinear/trading-predictor.md +245 -245
  66. package/.claude/agents/swarm/adaptive-coordinator.md +1126 -1126
  67. package/.claude/agents/swarm/hierarchical-coordinator.md +709 -709
  68. package/.claude/agents/swarm/mesh-coordinator.md +962 -962
  69. package/.claude/agents/templates/automation-smart-agent.md +204 -204
  70. package/.claude/agents/templates/base-template-generator.md +289 -289
  71. package/.claude/agents/templates/coordinator-swarm-init.md +89 -89
  72. package/.claude/agents/templates/github-pr-manager.md +176 -176
  73. package/.claude/agents/templates/implementer-sparc-coder.md +258 -258
  74. package/.claude/agents/templates/memory-coordinator.md +186 -186
  75. package/.claude/agents/templates/orchestrator-task.md +138 -138
  76. package/.claude/agents/templates/performance-analyzer.md +198 -198
  77. package/.claude/agents/templates/sparc-coordinator.md +513 -513
  78. package/.claude/agents/testing/production-validator.md +394 -394
  79. package/.claude/agents/testing/tdd-london-swarm.md +243 -243
  80. package/.claude/agents/v3/aidefence-guardian.md +282 -282
  81. package/.claude/agents/v3/claims-authorizer.md +208 -208
  82. package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -993
  83. package/.claude/agents/v3/ddd-domain-expert.md +220 -220
  84. package/.claude/agents/v3/injection-analyst.md +236 -236
  85. package/.claude/agents/v3/performance-engineer.md +1233 -1233
  86. package/.claude/agents/v3/pii-detector.md +151 -151
  87. package/.claude/agents/v3/reasoningbank-learner.md +213 -213
  88. package/.claude/agents/v3/security-architect-aidefence.md +410 -410
  89. package/.claude/agents/v3/security-architect.md +867 -867
  90. package/.claude/agents/v3/swarm-memory-manager.md +157 -157
  91. package/.claude/agents/v3/v3-integration-architect.md +205 -205
  92. package/.claude/commands/agents/README.md +50 -50
  93. package/.claude/commands/agents/agent-capabilities.md +140 -140
  94. package/.claude/commands/agents/agent-coordination.md +28 -28
  95. package/.claude/commands/agents/agent-spawning.md +28 -28
  96. package/.claude/commands/agents/agent-types.md +216 -216
  97. package/.claude/commands/agents/health.md +139 -139
  98. package/.claude/commands/agents/list.md +100 -100
  99. package/.claude/commands/agents/logs.md +130 -130
  100. package/.claude/commands/agents/metrics.md +122 -122
  101. package/.claude/commands/agents/pool.md +127 -127
  102. package/.claude/commands/agents/spawn.md +140 -140
  103. package/.claude/commands/agents/status.md +115 -115
  104. package/.claude/commands/agents/stop.md +102 -102
  105. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
  106. package/.claude/commands/analysis/README.md +9 -9
  107. package/.claude/commands/analysis/bottleneck-detect.md +162 -162
  108. package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
  109. package/.claude/commands/analysis/performance-report.md +25 -25
  110. package/.claude/commands/analysis/token-efficiency.md +44 -44
  111. package/.claude/commands/analysis/token-usage.md +25 -25
  112. package/.claude/commands/automation/README.md +9 -9
  113. package/.claude/commands/automation/auto-agent.md +122 -122
  114. package/.claude/commands/automation/self-healing.md +105 -105
  115. package/.claude/commands/automation/session-memory.md +89 -89
  116. package/.claude/commands/automation/smart-agents.md +72 -72
  117. package/.claude/commands/automation/smart-spawn.md +25 -25
  118. package/.claude/commands/automation/workflow-select.md +25 -25
  119. package/.claude/commands/claude-flow-help.md +103 -103
  120. package/.claude/commands/claude-flow-memory.md +107 -107
  121. package/.claude/commands/claude-flow-swarm.md +205 -205
  122. package/.claude/commands/coordination/README.md +9 -9
  123. package/.claude/commands/coordination/agent-spawn.md +25 -25
  124. package/.claude/commands/coordination/init.md +44 -44
  125. package/.claude/commands/coordination/orchestrate.md +43 -43
  126. package/.claude/commands/coordination/spawn.md +45 -45
  127. package/.claude/commands/coordination/swarm-init.md +85 -85
  128. package/.claude/commands/coordination/task-orchestrate.md +25 -25
  129. package/.claude/commands/github/README.md +11 -11
  130. package/.claude/commands/github/code-review-swarm.md +513 -513
  131. package/.claude/commands/github/code-review.md +25 -25
  132. package/.claude/commands/github/github-modes.md +146 -146
  133. package/.claude/commands/github/github-swarm.md +121 -121
  134. package/.claude/commands/github/issue-tracker.md +291 -291
  135. package/.claude/commands/github/issue-triage.md +25 -25
  136. package/.claude/commands/github/multi-repo-swarm.md +518 -518
  137. package/.claude/commands/github/pr-enhance.md +26 -26
  138. package/.claude/commands/github/pr-manager.md +169 -169
  139. package/.claude/commands/github/project-board-sync.md +470 -470
  140. package/.claude/commands/github/release-manager.md +339 -339
  141. package/.claude/commands/github/release-swarm.md +543 -543
  142. package/.claude/commands/github/repo-analyze.md +25 -25
  143. package/.claude/commands/github/repo-architect.md +366 -366
  144. package/.claude/commands/github/swarm-issue.md +484 -484
  145. package/.claude/commands/github/swarm-pr.md +287 -287
  146. package/.claude/commands/github/sync-coordinator.md +302 -302
  147. package/.claude/commands/github/workflow-automation.md +441 -441
  148. package/.claude/commands/hive-mind/README.md +17 -17
  149. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
  150. package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
  151. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
  152. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
  153. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
  154. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
  155. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
  156. package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
  157. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
  158. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
  159. package/.claude/commands/hive-mind/hive-mind.md +27 -27
  160. package/.claude/commands/hooks/README.md +11 -11
  161. package/.claude/commands/hooks/overview.md +57 -57
  162. package/.claude/commands/hooks/post-edit.md +117 -117
  163. package/.claude/commands/hooks/post-task.md +112 -112
  164. package/.claude/commands/hooks/pre-edit.md +113 -113
  165. package/.claude/commands/hooks/pre-task.md +111 -111
  166. package/.claude/commands/hooks/session-end.md +118 -118
  167. package/.claude/commands/hooks/setup.md +102 -102
  168. package/.claude/commands/memory/README.md +9 -9
  169. package/.claude/commands/memory/memory-persist.md +25 -25
  170. package/.claude/commands/memory/memory-search.md +25 -25
  171. package/.claude/commands/memory/memory-usage.md +25 -25
  172. package/.claude/commands/memory/neural.md +47 -47
  173. package/.claude/commands/monitoring/README.md +9 -9
  174. package/.claude/commands/monitoring/agent-metrics.md +25 -25
  175. package/.claude/commands/monitoring/agents.md +44 -44
  176. package/.claude/commands/monitoring/real-time-view.md +25 -25
  177. package/.claude/commands/monitoring/status.md +46 -46
  178. package/.claude/commands/monitoring/swarm-monitor.md +25 -25
  179. package/.claude/commands/optimization/README.md +9 -9
  180. package/.claude/commands/optimization/auto-topology.md +61 -61
  181. package/.claude/commands/optimization/cache-manage.md +25 -25
  182. package/.claude/commands/optimization/parallel-execute.md +25 -25
  183. package/.claude/commands/optimization/parallel-execution.md +49 -49
  184. package/.claude/commands/optimization/topology-optimize.md +25 -25
  185. package/.claude/commands/pair/README.md +260 -260
  186. package/.claude/commands/pair/commands.md +545 -545
  187. package/.claude/commands/pair/config.md +509 -509
  188. package/.claude/commands/pair/examples.md +511 -511
  189. package/.claude/commands/pair/modes.md +347 -347
  190. package/.claude/commands/pair/session.md +406 -406
  191. package/.claude/commands/pair/start.md +208 -208
  192. package/.claude/commands/sparc/analyzer.md +51 -51
  193. package/.claude/commands/sparc/architect.md +53 -53
  194. package/.claude/commands/sparc/ask.md +97 -97
  195. package/.claude/commands/sparc/batch-executor.md +54 -54
  196. package/.claude/commands/sparc/code.md +89 -89
  197. package/.claude/commands/sparc/coder.md +54 -54
  198. package/.claude/commands/sparc/debug.md +83 -83
  199. package/.claude/commands/sparc/debugger.md +54 -54
  200. package/.claude/commands/sparc/designer.md +53 -53
  201. package/.claude/commands/sparc/devops.md +109 -109
  202. package/.claude/commands/sparc/docs-writer.md +80 -80
  203. package/.claude/commands/sparc/documenter.md +54 -54
  204. package/.claude/commands/sparc/innovator.md +54 -54
  205. package/.claude/commands/sparc/integration.md +83 -83
  206. package/.claude/commands/sparc/mcp.md +117 -117
  207. package/.claude/commands/sparc/memory-manager.md +54 -54
  208. package/.claude/commands/sparc/optimizer.md +54 -54
  209. package/.claude/commands/sparc/orchestrator.md +131 -131
  210. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  211. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  212. package/.claude/commands/sparc/researcher.md +54 -54
  213. package/.claude/commands/sparc/reviewer.md +54 -54
  214. package/.claude/commands/sparc/security-review.md +80 -80
  215. package/.claude/commands/sparc/sparc-modes.md +174 -174
  216. package/.claude/commands/sparc/sparc.md +111 -111
  217. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  218. package/.claude/commands/sparc/supabase-admin.md +348 -348
  219. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  220. package/.claude/commands/sparc/tdd.md +54 -54
  221. package/.claude/commands/sparc/tester.md +54 -54
  222. package/.claude/commands/sparc/tutorial.md +79 -79
  223. package/.claude/commands/sparc/workflow-manager.md +54 -54
  224. package/.claude/commands/sparc.md +166 -166
  225. package/.claude/commands/stream-chain/pipeline.md +120 -120
  226. package/.claude/commands/stream-chain/run.md +69 -69
  227. package/.claude/commands/swarm/README.md +15 -15
  228. package/.claude/commands/swarm/analysis.md +95 -95
  229. package/.claude/commands/swarm/development.md +96 -96
  230. package/.claude/commands/swarm/examples.md +168 -168
  231. package/.claude/commands/swarm/maintenance.md +102 -102
  232. package/.claude/commands/swarm/optimization.md +117 -117
  233. package/.claude/commands/swarm/research.md +136 -136
  234. package/.claude/commands/swarm/swarm-analysis.md +8 -8
  235. package/.claude/commands/swarm/swarm-background.md +8 -8
  236. package/.claude/commands/swarm/swarm-init.md +19 -19
  237. package/.claude/commands/swarm/swarm-modes.md +8 -8
  238. package/.claude/commands/swarm/swarm-monitor.md +8 -8
  239. package/.claude/commands/swarm/swarm-spawn.md +19 -19
  240. package/.claude/commands/swarm/swarm-status.md +8 -8
  241. package/.claude/commands/swarm/swarm-strategies.md +8 -8
  242. package/.claude/commands/swarm/swarm.md +87 -87
  243. package/.claude/commands/swarm/testing.md +131 -131
  244. package/.claude/commands/training/README.md +9 -9
  245. package/.claude/commands/training/model-update.md +25 -25
  246. package/.claude/commands/training/neural-patterns.md +107 -107
  247. package/.claude/commands/training/neural-train.md +75 -75
  248. package/.claude/commands/training/pattern-learn.md +25 -25
  249. package/.claude/commands/training/specialization.md +62 -62
  250. package/.claude/commands/truth/start.md +142 -142
  251. package/.claude/commands/verify/check.md +49 -49
  252. package/.claude/commands/verify/start.md +127 -127
  253. package/.claude/commands/workflows/README.md +9 -9
  254. package/.claude/commands/workflows/development.md +77 -77
  255. package/.claude/commands/workflows/research.md +62 -62
  256. package/.claude/commands/workflows/workflow-create.md +25 -25
  257. package/.claude/commands/workflows/workflow-execute.md +25 -25
  258. package/.claude/commands/workflows/workflow-export.md +25 -25
  259. package/.claude/eval/human-relevance-frozen-v1.json +17 -17
  260. package/.claude/evolve-proof/generation-0.json +211 -211
  261. package/.claude/evolve-proof/real-generation-0.json +406 -406
  262. package/.claude/evolve-proof/real-generation-1.json +406 -406
  263. package/.claude/helpers/.helpers-version +1 -1
  264. package/.claude/helpers/README.md +96 -96
  265. package/.claude/helpers/adr-compliance.sh +186 -186
  266. package/.claude/helpers/auto-commit.sh +178 -178
  267. package/.claude/helpers/auto-memory-hook.mjs +0 -0
  268. package/.claude/helpers/checkpoint-manager.sh +251 -251
  269. package/.claude/helpers/daemon-manager.sh +252 -252
  270. package/.claude/helpers/ddd-tracker.sh +144 -144
  271. package/.claude/helpers/github-safe.js +156 -156
  272. package/.claude/helpers/github-setup.sh +45 -45
  273. package/.claude/helpers/guidance-hook.sh +13 -13
  274. package/.claude/helpers/guidance-hooks.sh +102 -102
  275. package/.claude/helpers/health-monitor.sh +108 -108
  276. package/.claude/helpers/helpers.manifest.json +2 -2
  277. package/.claude/helpers/hook-handler.cjs +0 -0
  278. package/.claude/helpers/intelligence.cjs +0 -0
  279. package/.claude/helpers/learning-hooks.sh +329 -329
  280. package/.claude/helpers/learning-optimizer.sh +127 -127
  281. package/.claude/helpers/learning-service.mjs +1144 -1144
  282. package/.claude/helpers/memory.js +83 -83
  283. package/.claude/helpers/metrics-db.mjs +503 -503
  284. package/.claude/helpers/pattern-consolidator.sh +86 -86
  285. package/.claude/helpers/perf-worker.sh +160 -160
  286. package/.claude/helpers/post-commit +16 -16
  287. package/.claude/helpers/pre-commit +26 -26
  288. package/.claude/helpers/quick-start.sh +19 -19
  289. package/.claude/helpers/router.js +105 -105
  290. package/.claude/helpers/security-scanner.sh +127 -127
  291. package/.claude/helpers/session.js +157 -157
  292. package/.claude/helpers/setup-mcp.sh +18 -18
  293. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
  294. package/.claude/helpers/statusline-hook.sh +21 -21
  295. package/.claude/helpers/statusline.cjs +0 -0
  296. package/.claude/helpers/statusline.js +340 -340
  297. package/.claude/helpers/swarm-comms.sh +353 -353
  298. package/.claude/helpers/swarm-hooks.sh +761 -761
  299. package/.claude/helpers/swarm-monitor.sh +210 -210
  300. package/.claude/helpers/sync-v3-metrics.sh +245 -245
  301. package/.claude/helpers/update-v3-progress.sh +165 -165
  302. package/.claude/helpers/v3-quick-status.sh +57 -57
  303. package/.claude/helpers/v3.sh +110 -110
  304. package/.claude/helpers/validate-v3-config.sh +215 -215
  305. package/.claude/helpers/worker-manager.sh +170 -170
  306. package/.claude/proven-config.json +42 -0
  307. package/.claude/proven-config.manifest.json +37 -37
  308. package/.claude/proven-config.signed.json +41 -41
  309. package/.claude/settings.json +182 -182
  310. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  311. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  312. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  313. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  314. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  315. package/.claude/skills/browser/SKILL.md +204 -204
  316. package/.claude/skills/dual-mode/README.md +71 -71
  317. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  318. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  319. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  320. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
  321. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
  322. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
  323. package/.claude/skills/github-code-review/SKILL.md +1125 -1125
  324. package/.claude/skills/github-multi-repo/SKILL.md +862 -862
  325. package/.claude/skills/github-project-management/SKILL.md +1262 -1262
  326. package/.claude/skills/github-release-management/SKILL.md +1064 -1064
  327. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
  328. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  329. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  330. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  331. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  332. package/.claude/skills/skill-builder/SKILL.md +910 -910
  333. package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
  334. package/.claude/skills/stream-chain/SKILL.md +560 -560
  335. package/.claude/skills/swarm-advanced/SKILL.md +970 -970
  336. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  337. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  338. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  339. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  340. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  341. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  342. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  343. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  344. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  345. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  346. package/.claude/skills/verification-quality/SKILL.md +691 -691
  347. package/README.md +419 -419
  348. package/bin/cli.js +314 -314
  349. package/bin/mcp-server.js +224 -224
  350. package/bin/preinstall.cjs +2 -2
  351. package/catalog-manifest.json +2 -2
  352. package/dist/src/autopilot-state.js +24 -7
  353. package/dist/src/benchmarks/gaia-critic.js +24 -24
  354. package/dist/src/business-pods/bbs-budget-tracker.js +53 -53
  355. package/dist/src/commands/completions.js +409 -409
  356. package/dist/src/commands/daemon.js +44 -44
  357. package/dist/src/commands/embeddings.js +26 -26
  358. package/dist/src/commands/hive-mind.js +97 -97
  359. package/dist/src/commands/hooks.js +31 -10
  360. package/dist/src/commands/init.js +202 -34
  361. package/dist/src/commands/memory.js +12 -1
  362. package/dist/src/commands/ruvector/backup.js +23 -23
  363. package/dist/src/commands/ruvector/benchmark.js +31 -31
  364. package/dist/src/commands/ruvector/import.js +14 -14
  365. package/dist/src/commands/ruvector/init.js +115 -115
  366. package/dist/src/commands/ruvector/migrate.js +99 -99
  367. package/dist/src/commands/ruvector/optimize.js +51 -51
  368. package/dist/src/commands/ruvector/setup.js +624 -624
  369. package/dist/src/commands/ruvector/status.js +38 -38
  370. package/dist/src/config/proven-config.js +2 -2
  371. package/dist/src/funnel/disclosure.js +13 -2
  372. package/dist/src/funnel/messages.d.ts +12 -10
  373. package/dist/src/funnel/messages.js +83 -11
  374. package/dist/src/init/claudemd-generator.js +231 -231
  375. package/dist/src/init/executor.js +453 -453
  376. package/dist/src/init/helper-signing.js +2 -2
  377. package/dist/src/init/helpers-generator.js +751 -751
  378. package/dist/src/init/statusline-generator.js +24 -24
  379. package/dist/src/mcp-tools/agentdb-tools.js +15 -15
  380. package/dist/src/mcp-tools/browser-intent-tools.js +19 -19
  381. package/dist/src/mcp-tools/browser-tools.js +8 -0
  382. package/dist/src/mcp-tools/hooks-tools.js +21 -0
  383. package/dist/src/mcp-tools/memory-tools.js +4 -3
  384. package/dist/src/memory/graph-edge-writer.js +22 -22
  385. package/dist/src/memory/memory-bridge.js +248 -158
  386. package/dist/src/memory/memory-initializer.js +407 -407
  387. package/dist/src/memory/rabitq-index.js +5 -5
  388. package/dist/src/parser.js +25 -9
  389. package/dist/src/proxy/verify.js +2 -2
  390. package/dist/src/runtime/headless.js +28 -28
  391. package/dist/src/services/distill-tuning.js +7 -7
  392. package/dist/src/services/headless-worker-executor.js +84 -84
  393. package/dist/src/services/memory-distillation.js +4 -4
  394. package/dist/src/services/worker-daemon.js +7 -4
  395. package/dist/src/transfer/deploy-seraphine.js +23 -23
  396. package/package.json +137 -137
  397. package/plugins/ruflo-metaharness/.claude-plugin/plugin.json +32 -32
  398. package/plugins/ruflo-metaharness/README.md +72 -72
  399. package/plugins/ruflo-metaharness/agents/metaharness-architect.md +58 -58
  400. package/plugins/ruflo-metaharness/commands/ruflo-metaharness.md +48 -48
  401. package/plugins/ruflo-metaharness/scripts/_darwin.mjs +210 -210
  402. package/plugins/ruflo-metaharness/scripts/_harness.mjs +330 -330
  403. package/plugins/ruflo-metaharness/scripts/_invoke.mjs +231 -231
  404. package/plugins/ruflo-metaharness/scripts/_redblue.mjs +143 -143
  405. package/plugins/ruflo-metaharness/scripts/_similarity.mjs +161 -161
  406. package/plugins/ruflo-metaharness/scripts/_spike-similarity.mjs +223 -223
  407. package/plugins/ruflo-metaharness/scripts/audit-list.mjs +158 -158
  408. package/plugins/ruflo-metaharness/scripts/audit-trend.mjs +272 -272
  409. package/plugins/ruflo-metaharness/scripts/bench-parse-mcp-scan.mjs +146 -146
  410. package/plugins/ruflo-metaharness/scripts/bench-recordpair-overhead.mjs +186 -186
  411. package/plugins/ruflo-metaharness/scripts/bench-similarity.mjs +177 -177
  412. package/plugins/ruflo-metaharness/scripts/bench.mjs +95 -95
  413. package/plugins/ruflo-metaharness/scripts/drift-from-history.mjs +363 -363
  414. package/plugins/ruflo-metaharness/scripts/evolve.mjs +404 -404
  415. package/plugins/ruflo-metaharness/scripts/genome.mjs +80 -80
  416. package/plugins/ruflo-metaharness/scripts/gepa.mjs +153 -153
  417. package/plugins/ruflo-metaharness/scripts/learn.mjs +127 -127
  418. package/plugins/ruflo-metaharness/scripts/mcp-scan.mjs +111 -111
  419. package/plugins/ruflo-metaharness/scripts/mint.mjs +126 -126
  420. package/plugins/ruflo-metaharness/scripts/oia-audit.mjs +228 -228
  421. package/plugins/ruflo-metaharness/scripts/redblue.mjs +286 -286
  422. package/plugins/ruflo-metaharness/scripts/router-parallel-analyze.mjs +250 -250
  423. package/plugins/ruflo-metaharness/scripts/score.mjs +92 -92
  424. package/plugins/ruflo-metaharness/scripts/security-bench.mjs +174 -174
  425. package/plugins/ruflo-metaharness/scripts/similarity.mjs +158 -158
  426. package/plugins/ruflo-metaharness/scripts/smoke.sh +2356 -2356
  427. package/plugins/ruflo-metaharness/scripts/test-graceful-degradation.mjs +165 -165
  428. package/plugins/ruflo-metaharness/scripts/test-mcp-tools.mjs +472 -472
  429. package/plugins/ruflo-metaharness/scripts/test-parallel-pipeline.mjs +204 -204
  430. package/plugins/ruflo-metaharness/scripts/test-pipeline-roundtrip.mjs +586 -586
  431. package/plugins/ruflo-metaharness/scripts/test-similarity.mjs +334 -334
  432. package/plugins/ruflo-metaharness/scripts/test-with-openrouter.mjs +229 -229
  433. package/plugins/ruflo-metaharness/scripts/threat-model.mjs +59 -59
  434. package/plugins/ruflo-metaharness/skills/harness-bench/SKILL.md +64 -64
  435. package/plugins/ruflo-metaharness/skills/harness-drift-from-history/SKILL.md +65 -65
  436. package/plugins/ruflo-metaharness/skills/harness-evolve/SKILL.md +131 -131
  437. package/plugins/ruflo-metaharness/skills/harness-genome/SKILL.md +54 -54
  438. package/plugins/ruflo-metaharness/skills/harness-gepa/SKILL.md +65 -65
  439. package/plugins/ruflo-metaharness/skills/harness-learn/SKILL.md +65 -65
  440. package/plugins/ruflo-metaharness/skills/harness-mcp-scan/SKILL.md +49 -49
  441. package/plugins/ruflo-metaharness/skills/harness-mint/SKILL.md +72 -72
  442. package/plugins/ruflo-metaharness/skills/harness-oia-audit/SKILL.md +79 -79
  443. package/plugins/ruflo-metaharness/skills/harness-score/SKILL.md +66 -66
  444. package/plugins/ruflo-metaharness/skills/harness-security-bench/SKILL.md +101 -101
  445. package/plugins/ruflo-metaharness/skills/harness-similarity/SKILL.md +67 -67
  446. package/plugins/ruflo-metaharness/skills/harness-threat-model/SKILL.md +41 -41
  447. package/scripts/postinstall.cjs +153 -153
@@ -23,28 +23,6 @@ import { createRequire } from 'node:module';
23
23
  let registryPromise = null;
24
24
  let registryInstance = null;
25
25
  let bridgeAvailable = null;
26
- // #2735 — the native-bridge -> sql.js whole-image fallback used to be
27
- // completely silent: a registry init failure cached `bridgeAvailable =
28
- // false` for the rest of the process, and a per-operation bridge exception
29
- // swallowed itself with a bare `catch { return null; }` — in both cases the
30
- // caller fell back to memory-initializer.ts's unsafe whole-image sql.js
31
- // path with zero diagnostic trail. When that path corrupted a database, the
32
- // demotion that caused it was structurally unknowable after the fact. Log
33
- // once per distinct reason (not once per call — a hot per-op catch could
34
- // otherwise spam stderr on every single memory operation) so the first
35
- // occurrence is attributable. Stderr only — never stdout, which callers may
36
- // be parsing as JSON.
37
- const loggedDemotions = new Set();
38
- function logDemotionOnce(where, reason) {
39
- const dedupeKey = `${where}:${reason}`;
40
- if (loggedDemotions.has(dedupeKey))
41
- return;
42
- loggedDemotions.add(dedupeKey);
43
- try {
44
- process.stderr.write(`[memory-bridge] demoted to sql.js fallback in ${where}: ${reason}\n`);
45
- }
46
- catch { /* stderr unavailable — nothing more we can do */ }
47
- }
48
26
  /**
49
27
  * Resolve database path with path traversal protection.
50
28
  * Only allows paths within or below the project's working directory,
@@ -87,6 +65,27 @@ function getDbPath(customPath) {
87
65
  }
88
66
  return resolved;
89
67
  }
68
+ /**
69
+ * Resolve AgentDB's native better-sqlite3 database path (#2786).
70
+ *
71
+ * AgentDB is opened by ControllerRegistry via native better-sqlite3, which
72
+ * requires a plaintext SQLite file. The sibling `memory.db` file written by
73
+ * `memory-initializer.ts` (`writeFileRestricted(..., {encrypt: true})`) is
74
+ * encrypted-at-rest when `CLAUDE_FLOW_ENCRYPT_AT_REST=1` — pointing native
75
+ * better-sqlite3 at it fails with "file is not a database" and silently
76
+ * disables `learningSystem`/`reasoningBank`.
77
+ *
78
+ * Give AgentDB a distinct filename in the same directory so both writers
79
+ * coexist: sql.js keeps `memory.db` (possibly encrypted); AgentDB owns
80
+ * `agentdb-memory.db`. Preserves the traversal protection in `getDbPath()`
81
+ * because we derive from its already-validated return value.
82
+ */
83
+ function getAgentDbPath() {
84
+ const dbPath = getDbPath();
85
+ if (dbPath === ':memory:')
86
+ return ':memory:';
87
+ return path.join(path.dirname(dbPath), 'agentdb-memory.db');
88
+ }
90
89
  /**
91
90
  * Generate a secure random ID for memory entries.
92
91
  */
@@ -121,7 +120,8 @@ async function getRegistry(dbPath) {
121
120
  };
122
121
  try {
123
122
  await registry.initialize({
124
- dbPath: dbPath || getDbPath(),
123
+ // #2786: use agentdb-memory.db (plaintext) so native better-sqlite3 doesn't hit the encrypted memory.db.
124
+ dbPath: dbPath || getAgentDbPath(),
125
125
  embeddingModel: 'Xenova/all-MiniLM-L6-v2',
126
126
  dimension: 384,
127
127
  vectorBackend: 'auto',
@@ -372,10 +372,9 @@ async function getRegistry(dbPath) {
372
372
  bridgeAvailable = true;
373
373
  return registry;
374
374
  }
375
- catch (err) {
375
+ catch {
376
376
  bridgeAvailable = false;
377
377
  registryPromise = null;
378
- logDemotionOnce('getRegistry (process-wide, cached for the rest of this process)', err instanceof Error ? err.message : String(err));
379
378
  return null;
380
379
  }
381
380
  })();
@@ -528,25 +527,25 @@ function getDb(registry) {
528
527
  // WeakSet so a new db instance re-ensures without a stale global flag.
529
528
  if (!_schemaEnsuredDbs.has(db)) {
530
529
  try {
531
- db.exec(`CREATE TABLE IF NOT EXISTS memory_entries (
532
- id TEXT PRIMARY KEY,
533
- key TEXT NOT NULL,
534
- namespace TEXT DEFAULT 'default',
535
- content TEXT NOT NULL,
536
- type TEXT DEFAULT 'semantic',
537
- embedding TEXT,
538
- embedding_model TEXT DEFAULT 'local',
539
- embedding_dimensions INTEGER,
540
- tags TEXT,
541
- metadata TEXT,
542
- owner_id TEXT,
543
- created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
544
- updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
545
- expires_at INTEGER,
546
- last_accessed_at INTEGER,
547
- access_count INTEGER DEFAULT 0,
548
- status TEXT DEFAULT 'active',
549
- UNIQUE(namespace, key)
530
+ db.exec(`CREATE TABLE IF NOT EXISTS memory_entries (
531
+ id TEXT PRIMARY KEY,
532
+ key TEXT NOT NULL,
533
+ namespace TEXT DEFAULT 'default',
534
+ content TEXT NOT NULL,
535
+ type TEXT DEFAULT 'semantic',
536
+ embedding TEXT,
537
+ embedding_model TEXT DEFAULT 'local',
538
+ embedding_dimensions INTEGER,
539
+ tags TEXT,
540
+ metadata TEXT,
541
+ owner_id TEXT,
542
+ created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
543
+ updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
544
+ expires_at INTEGER,
545
+ last_accessed_at INTEGER,
546
+ access_count INTEGER DEFAULT 0,
547
+ status TEXT DEFAULT 'active',
548
+ UNIQUE(namespace, key)
550
549
  )`);
551
550
  // Ensure indexes
552
551
  db.exec(`CREATE INDEX IF NOT EXISTS idx_bridge_ns ON memory_entries(namespace)`);
@@ -693,18 +692,47 @@ export async function bridgeStoreEntry(options) {
693
692
  // Embedding failed — store without
694
693
  }
695
694
  }
696
- // better-sqlite3 uses synchronous .run() with positional params
695
+ // #2775: strict-insert path now auto-resurrects soft-deleted tombstones
696
+ // via ON CONFLICT DO UPDATE ... WHERE status='deleted'. Rationale:
697
+ // `bridgeDeleteEntry` performs a soft delete (status='deleted'), so the
698
+ // `UNIQUE(namespace, key)` slot stays occupied — before this fix, a
699
+ // natural `delete → store` sequence hit UNIQUE, the catch below returned
700
+ // `null`, `storeEntry` fell back to the sql.js whole-image path, and the
701
+ // #2735 -wal/-shm sidecar guard refused with a message about a "native
702
+ // WAL connection" that had nothing to do with the actual failure.
703
+ //
704
+ // Semantics under the new strict-insert SQL:
705
+ // • no existing row → INSERT succeeds, changes = 1
706
+ // • existing row, status='deleted' → resurrected in-place, changes = 1
707
+ // • existing row, status='active' → ON CONFLICT WHERE=false suppresses
708
+ // the update, changes = 0 (checked
709
+ // below → typed "already exists"
710
+ // error, NEVER a null demotion).
711
+ // Upsert path (INSERT OR REPLACE) is unchanged.
697
712
  const insertSql = options.upsert
698
- ? `INSERT OR REPLACE INTO memory_entries (
699
- id, key, namespace, content, type,
700
- embedding, embedding_dimensions, embedding_model,
701
- tags, metadata, created_at, updated_at, expires_at, status
713
+ ? `INSERT OR REPLACE INTO memory_entries (
714
+ id, key, namespace, content, type,
715
+ embedding, embedding_dimensions, embedding_model,
716
+ tags, metadata, created_at, updated_at, expires_at, status
702
717
  ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, ?, ?, ?, ?, ?, ?, 'active')`
703
- : `INSERT INTO memory_entries (
704
- id, key, namespace, content, type,
705
- embedding, embedding_dimensions, embedding_model,
706
- tags, metadata, created_at, updated_at, expires_at, status
707
- ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, ?, ?, ?, ?, ?, ?, 'active')`;
718
+ : `INSERT INTO memory_entries (
719
+ id, key, namespace, content, type,
720
+ embedding, embedding_dimensions, embedding_model,
721
+ tags, metadata, created_at, updated_at, expires_at, status
722
+ ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, ?, ?, ?, ?, ?, ?, 'active')
723
+ ON CONFLICT(namespace, key) DO UPDATE SET
724
+ id = excluded.id,
725
+ content = excluded.content,
726
+ embedding = excluded.embedding,
727
+ embedding_dimensions = excluded.embedding_dimensions,
728
+ embedding_model = excluded.embedding_model,
729
+ tags = excluded.tags,
730
+ metadata = excluded.metadata,
731
+ created_at = excluded.created_at,
732
+ updated_at = excluded.updated_at,
733
+ expires_at = excluded.expires_at,
734
+ status = 'active'
735
+ WHERE memory_entries.status = 'deleted'`;
708
736
  // #1941: provision a `vector_indexes` row for this namespace before the
709
737
  // entry insert. AgentDB's HNSW/router keys lookups by namespace via this
710
738
  // table — if it has no row for e.g. `claude-memories`, `memory_search`
@@ -717,15 +745,27 @@ export async function bridgeStoreEntry(options) {
717
745
  }
718
746
  catch { /* vector_indexes may not exist on legacy DBs — fall through */ }
719
747
  const stmt = ctx.db.prepare(insertSql);
720
- stmt.run(id, key, namespace, value, embeddingJson, dimensions || null, model, tags.length > 0 ? JSON.stringify(tags) : null, '{}', now, now, ttl ? now + (ttl * 1000) : null);
748
+ const runResult = stmt.run(id, key, namespace, value, embeddingJson, dimensions || null, model, tags.length > 0 ? JSON.stringify(tags) : null, '{}', now, now, ttl ? now + (ttl * 1000) : null);
749
+ // #2775: strict insert against an ACTIVE existing row → changes === 0
750
+ // (the ON CONFLICT WHERE clause above suppressed the update). Surface
751
+ // this as a typed data-level error rather than a bridge failure —
752
+ // returning non-null so the caller does NOT demote to sql.js and does
753
+ // NOT trip the #2735 whole-image guard with a misleading message.
754
+ if (!options.upsert && (runResult?.changes ?? 0) === 0) {
755
+ return {
756
+ success: false,
757
+ id,
758
+ error: `key "${key}" already exists in namespace "${namespace}" — pass upsert=true (--upsert on the CLI) to update it`,
759
+ };
760
+ }
721
761
  // #2558: keep `vector_indexes.total_vectors` accurate so status/tooling
722
762
  // stop reporting "HNSW index: 0 vectors" while embedded entries exist.
723
763
  try {
724
764
  ctx.db
725
- .prepare(`UPDATE vector_indexes SET
726
- total_vectors = (SELECT COUNT(*) FROM memory_entries
727
- WHERE namespace = ? AND embedding IS NOT NULL),
728
- updated_at = ?
765
+ .prepare(`UPDATE vector_indexes SET
766
+ total_vectors = (SELECT COUNT(*) FROM memory_entries
767
+ WHERE namespace = ? AND embedding IS NOT NULL),
768
+ updated_at = ?
729
769
  WHERE name = ?`)
730
770
  .run(namespace, now, namespace);
731
771
  }
@@ -761,7 +801,24 @@ export async function bridgeStoreEntry(options) {
761
801
  };
762
802
  }
763
803
  catch (err) {
764
- logDemotionOnce('bridgeStoreEntry', err instanceof Error ? err.message : String(err));
804
+ // #2775: distinguish a data-level UNIQUE constraint violation (key
805
+ // already exists — expected outcome of a strict insert) from a real
806
+ // bridge failure (registry gone, DB locked, disk full, etc.). The
807
+ // ON CONFLICT clause on the strict-insert SQL above should normally
808
+ // convert UNIQUE hits into a `changes === 0` result, so reaching here
809
+ // with a UNIQUE error means the schema pre-dates the (namespace, key)
810
+ // unique index or the conflict target didn't match — treat it as a
811
+ // clean "already exists" so the caller never demotes to sql.js and
812
+ // never triggers the #2735 whole-image guard with a misleading
813
+ // "active native WAL connection" error.
814
+ const msg = err instanceof Error ? err.message : String(err);
815
+ if (/UNIQUE constraint failed/i.test(msg)) {
816
+ return {
817
+ success: false,
818
+ id: '',
819
+ error: `key "${options.key}" already exists in namespace "${options.namespace ?? 'default'}" — pass upsert=true (--upsert on the CLI) to update it`,
820
+ };
821
+ }
765
822
  return null;
766
823
  }
767
824
  }
@@ -799,11 +856,11 @@ export async function bridgeSearchEntries(options) {
799
856
  : '';
800
857
  let rows;
801
858
  try {
802
- const stmt = ctx.db.prepare(`
803
- SELECT id, key, namespace, content, embedding
804
- FROM memory_entries
805
- WHERE status = 'active' ${nsFilter}
806
- LIMIT 1000
859
+ const stmt = ctx.db.prepare(`
860
+ SELECT id, key, namespace, content, embedding
861
+ FROM memory_entries
862
+ WHERE status = 'active' ${nsFilter}
863
+ LIMIT 1000
807
864
  `);
808
865
  rows = effectiveNamespace !== 'all' ? stmt.all(effectiveNamespace) : stmt.all();
809
866
  }
@@ -924,12 +981,12 @@ export async function bridgeListEntries(options) {
924
981
  // List
925
982
  const entries = [];
926
983
  try {
927
- const stmt = ctx.db.prepare(`
928
- SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at
929
- FROM memory_entries
930
- WHERE ${statusFilter} ${nsFilter}
931
- ORDER BY updated_at DESC
932
- LIMIT ? OFFSET ?
984
+ const stmt = ctx.db.prepare(`
985
+ SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at
986
+ FROM memory_entries
987
+ WHERE ${statusFilter} ${nsFilter}
988
+ ORDER BY updated_at DESC
989
+ LIMIT ? OFFSET ?
933
990
  `);
934
991
  const rows = stmt.all(...nsParams, limit, offset);
935
992
  for (const row of rows) {
@@ -998,11 +1055,11 @@ export async function bridgeGetEntry(options) {
998
1055
  }
999
1056
  let row;
1000
1057
  try {
1001
- const stmt = ctx.db.prepare(`
1002
- SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at, tags
1003
- FROM memory_entries
1004
- WHERE status = 'active' AND key = ? AND namespace = ?
1005
- LIMIT 1
1058
+ const stmt = ctx.db.prepare(`
1059
+ SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at, tags
1060
+ FROM memory_entries
1061
+ WHERE status = 'active' AND key = ? AND namespace = ?
1062
+ LIMIT 1
1006
1063
  `);
1007
1064
  row = stmt.get(key, namespace);
1008
1065
  }
@@ -1041,8 +1098,7 @@ export async function bridgeGetEntry(options) {
1041
1098
  await cacheSet(registry, cacheKey, entry);
1042
1099
  return { success: true, found: true, cacheHit: false, entry };
1043
1100
  }
1044
- catch (err) {
1045
- logDemotionOnce('bridgeGetEntry', err instanceof Error ? err.message : String(err));
1101
+ catch {
1046
1102
  return null;
1047
1103
  }
1048
1104
  }
@@ -1067,16 +1123,31 @@ export async function bridgeDeleteEntry(options) {
1067
1123
  // Soft delete using parameterized query
1068
1124
  let changes = 0;
1069
1125
  try {
1070
- const result = ctx.db.prepare(`
1071
- UPDATE memory_entries
1072
- SET status = 'deleted', updated_at = ?
1073
- WHERE key = ? AND namespace = ? AND status = 'active'
1126
+ const result = ctx.db.prepare(`
1127
+ UPDATE memory_entries
1128
+ SET status = 'deleted', updated_at = ?
1129
+ WHERE key = ? AND namespace = ? AND status = 'active'
1074
1130
  `).run(Date.now(), key, namespace);
1075
1131
  changes = result?.changes ?? 0;
1076
1132
  }
1077
1133
  catch {
1078
1134
  return null;
1079
1135
  }
1136
+ // #2775: mirror the #2558 PASSIVE checkpoint after the delete. Without
1137
+ // this, the tombstone stays WAL-only until some unrelated store
1138
+ // eventually checkpoints — meaning WAL-blind readers (sql.js fallback,
1139
+ // statusline's read-only sqlite3 counter) keep serving the deleted row.
1140
+ // If the process exits before another checkpoint, on live multi-worktree
1141
+ // installations we've observed rows `active` in the main image but
1142
+ // `deleted` in the -wal, or rows existing only in an orphaned -wal
1143
+ // invisible to every image reader. PASSIVE flushes committed pages
1144
+ // without blocking writers. Best-effort, never fatal.
1145
+ try {
1146
+ if (typeof ctx.db.pragma === 'function') {
1147
+ ctx.db.pragma('wal_checkpoint(PASSIVE)');
1148
+ }
1149
+ }
1150
+ catch { /* non-WAL, busy, or unsupported — non-fatal */ }
1080
1151
  // Phase 2: Invalidate cache
1081
1152
  const safeNs = String(namespace).replace(/:/g, '_');
1082
1153
  const safeKey = String(key).replace(/:/g, '_');
@@ -1102,8 +1173,7 @@ export async function bridgeDeleteEntry(options) {
1102
1173
  guarded: true,
1103
1174
  };
1104
1175
  }
1105
- catch (err) {
1106
- logDemotionOnce('bridgeDeleteEntry', err instanceof Error ? err.message : String(err));
1176
+ catch {
1107
1177
  return null;
1108
1178
  }
1109
1179
  }
@@ -1154,8 +1224,7 @@ export async function bridgePurgeNamespace(options) {
1154
1224
  guarded: true,
1155
1225
  };
1156
1226
  }
1157
- catch (err) {
1158
- logDemotionOnce('bridgePurgeNamespace', err instanceof Error ? err.message : String(err));
1227
+ catch {
1159
1228
  return null;
1160
1229
  }
1161
1230
  }
@@ -1285,11 +1354,11 @@ export async function bridgeSearchHNSW(queryEmbedding, options, dbPath) {
1285
1354
  : '';
1286
1355
  let rows;
1287
1356
  try {
1288
- const stmt = ctx.db.prepare(`
1289
- SELECT id, key, namespace, content, embedding
1290
- FROM memory_entries
1291
- WHERE status = 'active' AND embedding IS NOT NULL ${nsFilter}
1292
- LIMIT 10000
1357
+ const stmt = ctx.db.prepare(`
1358
+ SELECT id, key, namespace, content, embedding
1359
+ FROM memory_entries
1360
+ WHERE status = 'active' AND embedding IS NOT NULL ${nsFilter}
1361
+ LIMIT 10000
1293
1362
  `);
1294
1363
  rows = nsFilter
1295
1364
  ? stmt.all(options.namespace)
@@ -1341,12 +1410,12 @@ export async function bridgeAddToHNSW(id, embedding, entry, dbPath) {
1341
1410
  try {
1342
1411
  const now = Date.now();
1343
1412
  const embeddingJson = JSON.stringify(embedding);
1344
- ctx.db.prepare(`
1345
- INSERT OR REPLACE INTO memory_entries (
1346
- id, key, namespace, content, type,
1347
- embedding, embedding_dimensions, embedding_model,
1348
- created_at, updated_at, status
1349
- ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, 'Xenova/all-MiniLM-L6-v2', ?, ?, 'active')
1413
+ ctx.db.prepare(`
1414
+ INSERT OR REPLACE INTO memory_entries (
1415
+ id, key, namespace, content, type,
1416
+ embedding, embedding_dimensions, embedding_model,
1417
+ created_at, updated_at, status
1418
+ ) VALUES (?, ?, ?, ?, 'semantic', ?, ?, 'Xenova/all-MiniLM-L6-v2', ?, ?, 'active')
1350
1419
  `).run(id, entry.key, entry.namespace, entry.content, embeddingJson, embedding.length, now, now);
1351
1420
  return true;
1352
1421
  }
@@ -1574,47 +1643,68 @@ export async function bridgeRecordFeedback(options) {
1574
1643
  try {
1575
1644
  let controller = 'none';
1576
1645
  let updated = 0;
1577
- // Try LearningSystem first (Phase 4)
1578
- const learningSystem = registry.get('learningSystem');
1579
- if (learningSystem) {
1580
- try {
1581
- if (typeof learningSystem.recordFeedback === 'function') {
1582
- await learningSystem.recordFeedback({
1583
- taskId: options.taskId, success: options.success, quality: options.quality,
1584
- agent: options.agent, duration: options.duration, timestamp: Date.now(),
1646
+ // Real intelligence-pipeline write (#2786 fix-3, 2026-07-26 sweep follow-up).
1647
+ // The prior code called `learningSystem.recordFeedback/.record` and
1648
+ // `reasoningBank.recordOutcome/.record` — none of those methods exist on
1649
+ // the LocalSonaCoordinator / LocalReasoningBank instances the bridge
1650
+ // actually wires into the registry (see initializeIntelligence in
1651
+ // memory/intelligence.ts). The silent catch made it look successful.
1652
+ //
1653
+ // The REAL public API is `intelligence.recordTrajectory(steps, verdict)`
1654
+ // — same call `hooks_post-command` already uses (hooks-tools.ts).
1655
+ // It initializes lazily, embeds the step, and drives both the SONA
1656
+ // coordinator and pattern distillation.
1657
+ try {
1658
+ const intelligence = await import('./intelligence.js');
1659
+ const verdict = options.success ? 'success' : 'failure';
1660
+ const recorded = await intelligence.recordTrajectory([{
1661
+ type: 'action',
1662
+ content: `Task ${options.taskId} completed by ${options.agent || 'unknown'} — success=${options.success}, quality=${options.quality.toFixed(3)}`,
1663
+ metadata: {
1664
+ taskId: options.taskId,
1665
+ agent: options.agent,
1666
+ quality: options.quality,
1667
+ duration: options.duration,
1585
1668
  // ADR-147 P2: forward spawn-tree lineage if present
1586
- parentAgentId: options.parentAgentId, depth: options.depth,
1587
- });
1588
- controller = 'learningSystem';
1589
- updated++;
1590
- }
1591
- else if (typeof learningSystem.record === 'function') {
1592
- await learningSystem.record(options.taskId, options.quality, options.success ? 'success' : 'failure');
1593
- controller = 'learningSystem';
1594
- updated++;
1595
- }
1669
+ parentAgentId: options.parentAgentId,
1670
+ depth: options.depth,
1671
+ },
1672
+ timestamp: Date.now(),
1673
+ }], verdict);
1674
+ if (recorded) {
1675
+ controller = 'intelligence';
1676
+ updated++;
1596
1677
  }
1597
- catch { /* API mismatch — skip */ }
1598
1678
  }
1599
- // Also record in ReasoningBank for pattern reinforcement
1679
+ catch {
1680
+ // Intelligence init failed (missing embeddings backend etc.). Fall
1681
+ // through to the memory-store write below — that always succeeds via
1682
+ // sql.js fallback so feedback is never fully lost.
1683
+ }
1684
+ // Optional pattern store: if the caller supplied learned patterns,
1685
+ // add them to LocalReasoningBank via its real `.store()` method (the
1686
+ // one method that DOES exist on the class).
1600
1687
  const reasoningBank = registry.get('reasoningBank');
1601
- if (reasoningBank) {
1602
- try {
1603
- if (typeof reasoningBank.recordOutcome === 'function') {
1604
- await reasoningBank.recordOutcome({
1605
- taskId: options.taskId, verdict: options.success ? 'success' : 'failure',
1606
- score: options.quality, timestamp: Date.now(),
1607
- });
1608
- controller = controller === 'none' ? 'reasoningBank' : `${controller}+reasoningBank`;
1609
- updated++;
1610
- }
1611
- else if (typeof reasoningBank.record === 'function') {
1612
- await reasoningBank.record(options.taskId, options.quality);
1613
- controller = controller === 'none' ? 'reasoningBank' : `${controller}+reasoningBank`;
1614
- updated++;
1688
+ if (reasoningBank && Array.isArray(options.patterns) && options.patterns.length) {
1689
+ for (const pattern of options.patterns) {
1690
+ try {
1691
+ if (typeof reasoningBank.store === 'function') {
1692
+ reasoningBank.store({
1693
+ id: `feedback-pattern-${options.taskId}-${updated}`,
1694
+ content: pattern,
1695
+ category: options.agent || 'general',
1696
+ confidence: options.quality,
1697
+ source: 'bridge-feedback',
1698
+ });
1699
+ updated++;
1700
+ }
1615
1701
  }
1702
+ catch { /* pattern rejected — non-critical */ }
1616
1703
  }
1617
- catch { /* API mismatch skip */ }
1704
+ if (updated > 0 && controller === 'intelligence')
1705
+ controller = 'intelligence+reasoningBank';
1706
+ else if (updated > 0 && controller === 'none')
1707
+ controller = 'reasoningBank';
1618
1708
  }
1619
1709
  // Phase 4: SkillLibrary promotion for high-quality patterns
1620
1710
  if (options.success && options.quality >= 0.9 && options.patterns?.length) {
@@ -1670,9 +1760,9 @@ export async function bridgeRecordCausalEdge(options) {
1670
1760
  const ctx = getDb(registry);
1671
1761
  if (ctx) {
1672
1762
  try {
1673
- ctx.db.prepare(`
1674
- INSERT OR REPLACE INTO memory_entries (id, key, namespace, content, type, created_at, updated_at, status)
1675
- VALUES (?, ?, 'causal-edges', ?, 'procedural', ?, ?, 'active')
1763
+ ctx.db.prepare(`
1764
+ INSERT OR REPLACE INTO memory_entries (id, key, namespace, content, type, created_at, updated_at, status)
1765
+ VALUES (?, ?, 'causal-edges', ?, 'procedural', ?, ?, 'active')
1676
1766
  `).run(generateId('edge'), `${options.sourceId}→${options.targetId}`, JSON.stringify(options), Date.now(), Date.now());
1677
1767
  return { success: true, controller: 'bridge-fallback' };
1678
1768
  }
@@ -1751,10 +1841,10 @@ export async function bridgeDeleteHierarchical(options) {
1751
1841
  const ctx = getDb(registry);
1752
1842
  if (ctx) {
1753
1843
  try {
1754
- const result = ctx.db.prepare(`
1755
- UPDATE memory_entries
1756
- SET status = 'deleted', updated_at = ?
1757
- WHERE key = ? AND namespace LIKE 'hierarchical%' AND status = 'active'
1844
+ const result = ctx.db.prepare(`
1845
+ UPDATE memory_entries
1846
+ SET status = 'deleted', updated_at = ?
1847
+ WHERE key = ? AND namespace LIKE 'hierarchical%' AND status = 'active'
1758
1848
  `).run(Date.now(), key);
1759
1849
  const changes = result?.changes ?? 0;
1760
1850
  if (changes > 0) {
@@ -1830,10 +1920,10 @@ export async function bridgeDeleteCausalEdge(options) {
1830
1920
  const ctx = getDb(registry);
1831
1921
  if (ctx) {
1832
1922
  try {
1833
- const result = ctx.db.prepare(`
1834
- UPDATE memory_entries
1835
- SET status = 'deleted', updated_at = ?
1836
- WHERE key = ? AND namespace = 'causal-edges' AND status = 'active'
1923
+ const result = ctx.db.prepare(`
1924
+ UPDATE memory_entries
1925
+ SET status = 'deleted', updated_at = ?
1926
+ WHERE key = ? AND namespace = 'causal-edges' AND status = 'active'
1837
1927
  `).run(Date.now(), edgeKey);
1838
1928
  const changes = result?.changes ?? 0;
1839
1929
  if (changes > 0) {
@@ -1905,18 +1995,18 @@ export async function bridgeDeleteCausalNode(options) {
1905
1995
  let deletedEdges = 0;
1906
1996
  let deletedNode = false;
1907
1997
  try {
1908
- const edgeResult = ctx.db.prepare(`
1909
- UPDATE memory_entries
1910
- SET status = 'deleted', updated_at = ?
1911
- WHERE namespace = 'causal-edges'
1912
- AND status = 'active'
1913
- AND (key LIKE ? OR key LIKE ?)
1998
+ const edgeResult = ctx.db.prepare(`
1999
+ UPDATE memory_entries
2000
+ SET status = 'deleted', updated_at = ?
2001
+ WHERE namespace = 'causal-edges'
2002
+ AND status = 'active'
2003
+ AND (key LIKE ? OR key LIKE ?)
1914
2004
  `).run(Date.now(), `${nodeId}→%`, `%→${nodeId}`);
1915
2005
  deletedEdges = edgeResult?.changes ?? 0;
1916
- const nodeResult = ctx.db.prepare(`
1917
- UPDATE memory_entries
1918
- SET status = 'deleted', updated_at = ?
1919
- WHERE key = ? AND status = 'active'
2006
+ const nodeResult = ctx.db.prepare(`
2007
+ UPDATE memory_entries
2008
+ SET status = 'deleted', updated_at = ?
2009
+ WHERE key = ? AND status = 'active'
1920
2010
  `).run(Date.now(), nodeId);
1921
2011
  deletedNode = (nodeResult?.changes ?? 0) > 0;
1922
2012
  await logAttestation(registry, 'delete', nodeId, { namespace: 'causal-nodes', deletedEdges });
@@ -2403,11 +2493,11 @@ export async function bridgeGetAllEmbeddings(options) {
2403
2493
  try {
2404
2494
  const dims = options?.dimensions ?? 384;
2405
2495
  const maxRows = options?.limit ?? 50000;
2406
- const rows = ctx.db.prepare(`
2407
- SELECT id, key, namespace, embedding
2408
- FROM memory_entries
2409
- WHERE status = 'active' AND embedding IS NOT NULL
2410
- LIMIT ?
2496
+ const rows = ctx.db.prepare(`
2497
+ SELECT id, key, namespace, embedding
2498
+ FROM memory_entries
2499
+ WHERE status = 'active' AND embedding IS NOT NULL
2500
+ LIMIT ?
2411
2501
  `).all(maxRows);
2412
2502
  const results = [];
2413
2503
  for (const row of rows) {