claude-flow 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.
- package/.claude/.proven-config-version +1 -0
- package/.claude/agents/MIGRATION_SUMMARY.md +221 -221
- package/.claude/agents/analysis/analyze-code-quality.md +57 -57
- package/.claude/agents/analysis/code-analyzer.md +188 -188
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +57 -57
- package/.claude/agents/architecture/system-design/arch-system-design.md +35 -35
- package/.claude/agents/base-template-generator.md +41 -41
- package/.claude/agents/consensus/byzantine-coordinator.md +42 -42
- package/.claude/agents/consensus/crdt-synchronizer.md +976 -976
- package/.claude/agents/consensus/gossip-coordinator.md +42 -42
- package/.claude/agents/consensus/performance-benchmarker.md +830 -830
- package/.claude/agents/consensus/quorum-manager.md +802 -802
- package/.claude/agents/consensus/raft-manager.md +42 -42
- package/.claude/agents/consensus/security-manager.md +601 -601
- package/.claude/agents/core/coder.md +254 -254
- package/.claude/agents/core/planner.md +151 -151
- package/.claude/agents/core/researcher.md +173 -173
- package/.claude/agents/core/reviewer.md +308 -308
- package/.claude/agents/core/tester.md +299 -299
- package/.claude/agents/custom/test-long-runner.md +43 -43
- package/.claude/agents/data/ml/data-ml-model.md +75 -75
- package/.claude/agents/database-specialist.md +9 -9
- package/.claude/agents/development/backend/dev-backend-api.md +28 -28
- package/.claude/agents/development/dev-backend-api.md +177 -177
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +51 -51
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +62 -62
- package/.claude/agents/dual-mode/codex-coordinator.md +206 -206
- package/.claude/agents/dual-mode/codex-worker.md +190 -190
- package/.claude/agents/dual-mode/dual-orchestrator.md +253 -253
- package/.claude/agents/flow-nexus/app-store.md +87 -87
- package/.claude/agents/flow-nexus/authentication.md +68 -68
- package/.claude/agents/flow-nexus/challenges.md +80 -80
- package/.claude/agents/flow-nexus/neural-network.md +87 -87
- package/.claude/agents/flow-nexus/payments.md +82 -82
- package/.claude/agents/flow-nexus/sandbox.md +75 -75
- package/.claude/agents/flow-nexus/swarm.md +75 -75
- package/.claude/agents/flow-nexus/user-tools.md +95 -95
- package/.claude/agents/flow-nexus/workflow.md +83 -83
- package/.claude/agents/github/code-review-swarm.md +520 -520
- package/.claude/agents/github/github-modes.md +153 -153
- package/.claude/agents/github/issue-tracker.md +298 -298
- package/.claude/agents/github/multi-repo-swarm.md +524 -524
- package/.claude/agents/github/pr-manager.md +162 -162
- package/.claude/agents/github/project-board-sync.md +477 -477
- package/.claude/agents/github/release-manager.md +337 -337
- package/.claude/agents/github/release-swarm.md +550 -550
- package/.claude/agents/github/repo-architect.md +364 -364
- package/.claude/agents/github/swarm-issue.md +550 -550
- package/.claude/agents/github/swarm-pr.md +401 -401
- package/.claude/agents/github/sync-coordinator.md +424 -424
- package/.claude/agents/github/workflow-automation.md +604 -604
- package/.claude/agents/goal/agent.md +816 -816
- package/.claude/agents/goal/code-goal-planner.md +444 -444
- package/.claude/agents/goal/goal-planner.md +167 -167
- package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +128 -128
- package/.claude/agents/hive-mind/queen-coordinator.md +201 -201
- package/.claude/agents/hive-mind/scout-explorer.md +240 -240
- package/.claude/agents/hive-mind/swarm-memory-manager.md +191 -191
- package/.claude/agents/hive-mind/worker-specialist.md +215 -215
- package/.claude/agents/neural/safla-neural.md +73 -73
- package/.claude/agents/optimization/benchmark-suite.md +662 -662
- package/.claude/agents/optimization/load-balancer.md +428 -428
- package/.claude/agents/optimization/performance-monitor.md +669 -669
- package/.claude/agents/optimization/resource-allocator.md +671 -671
- package/.claude/agents/optimization/topology-optimizer.md +805 -805
- package/.claude/agents/payments/agentic-payments.md +126 -126
- package/.claude/agents/project-coordinator.md +8 -8
- package/.claude/agents/python-specialist.md +9 -9
- package/.claude/agents/reasoning/agent.md +816 -816
- package/.claude/agents/reasoning/goal-planner.md +72 -72
- package/.claude/agents/security-auditor.md +9 -9
- package/.claude/agents/sona/sona-learning-optimizer.md +65 -65
- package/.claude/agents/sparc/architecture.md +452 -452
- package/.claude/agents/sparc/pseudocode.md +298 -298
- package/.claude/agents/sparc/refinement.md +503 -503
- package/.claude/agents/sparc/specification.md +257 -257
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +87 -87
- package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
- package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
- package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
- package/.claude/agents/sublinear/performance-optimizer.md +367 -367
- package/.claude/agents/sublinear/trading-predictor.md +245 -245
- package/.claude/agents/swarm/adaptive-coordinator.md +363 -363
- package/.claude/agents/swarm/hierarchical-coordinator.md +299 -299
- package/.claude/agents/swarm/mesh-coordinator.md +362 -362
- package/.claude/agents/templates/automation-smart-agent.md +184 -184
- package/.claude/agents/templates/coordinator-swarm-init.md +82 -82
- package/.claude/agents/templates/github-pr-manager.md +154 -154
- package/.claude/agents/templates/implementer-sparc-coder.md +242 -242
- package/.claude/agents/templates/memory-coordinator.md +162 -162
- package/.claude/agents/templates/migration-plan.md +723 -723
- package/.claude/agents/templates/orchestrator-task.md +119 -119
- package/.claude/agents/templates/performance-analyzer.md +178 -178
- package/.claude/agents/templates/sparc-coordinator.md +162 -162
- package/.claude/agents/testing/production-validator.md +372 -372
- package/.claude/agents/testing/tdd-london-swarm.md +221 -221
- package/.claude/agents/testing/unit/tdd-london-swarm.md +221 -221
- package/.claude/agents/testing/validation/production-validator.md +372 -372
- package/.claude/agents/typescript-specialist.md +9 -9
- package/.claude/agents/v3/database-specialist.md +9 -9
- package/.claude/agents/v3/project-coordinator.md +8 -8
- package/.claude/agents/v3/python-specialist.md +9 -9
- package/.claude/agents/v3/test-architect.md +9 -9
- package/.claude/agents/v3/typescript-specialist.md +9 -9
- package/.claude/agents/v3/v3-integration-architect.md +311 -311
- package/.claude/agents/v3/v3-memory-specialist.md +280 -280
- package/.claude/agents/v3/v3-performance-engineer.md +362 -362
- package/.claude/agents/v3/v3-queen-coordinator.md +62 -62
- package/.claude/agents/v3/v3-security-architect.md +139 -139
- package/.claude/checkpoints/1767754460.json +8 -8
- package/.claude/commands/agents/README.md +10 -10
- package/.claude/commands/agents/agent-capabilities.md +21 -21
- package/.claude/commands/agents/agent-coordination.md +28 -28
- package/.claude/commands/agents/agent-spawning.md +28 -28
- package/.claude/commands/agents/agent-types.md +26 -26
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
- package/.claude/commands/analysis/README.md +9 -9
- package/.claude/commands/analysis/bottleneck-detect.md +162 -162
- package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
- package/.claude/commands/analysis/performance-report.md +25 -25
- package/.claude/commands/analysis/token-efficiency.md +44 -44
- package/.claude/commands/analysis/token-usage.md +25 -25
- package/.claude/commands/automation/README.md +9 -9
- package/.claude/commands/automation/auto-agent.md +122 -122
- package/.claude/commands/automation/self-healing.md +105 -105
- package/.claude/commands/automation/session-memory.md +89 -89
- package/.claude/commands/automation/smart-agents.md +72 -72
- package/.claude/commands/automation/smart-spawn.md +25 -25
- package/.claude/commands/automation/workflow-select.md +25 -25
- package/.claude/commands/claude-flow-help.md +103 -103
- package/.claude/commands/claude-flow-memory.md +107 -107
- package/.claude/commands/claude-flow-swarm.md +205 -205
- package/.claude/commands/coordination/README.md +9 -9
- package/.claude/commands/coordination/agent-spawn.md +25 -25
- package/.claude/commands/coordination/init.md +44 -44
- package/.claude/commands/coordination/orchestrate.md +43 -43
- package/.claude/commands/coordination/spawn.md +45 -45
- package/.claude/commands/coordination/swarm-init.md +85 -85
- package/.claude/commands/coordination/task-orchestrate.md +25 -25
- package/.claude/commands/flow-nexus/app-store.md +123 -123
- package/.claude/commands/flow-nexus/challenges.md +119 -119
- package/.claude/commands/flow-nexus/login-registration.md +64 -64
- package/.claude/commands/flow-nexus/neural-network.md +133 -133
- package/.claude/commands/flow-nexus/payments.md +115 -115
- package/.claude/commands/flow-nexus/sandbox.md +82 -82
- package/.claude/commands/flow-nexus/swarm.md +86 -86
- package/.claude/commands/flow-nexus/user-tools.md +151 -151
- package/.claude/commands/flow-nexus/workflow.md +114 -114
- package/.claude/commands/github/README.md +11 -11
- package/.claude/commands/github/code-review-swarm.md +513 -513
- package/.claude/commands/github/code-review.md +25 -25
- package/.claude/commands/github/github-modes.md +146 -146
- package/.claude/commands/github/github-swarm.md +121 -121
- package/.claude/commands/github/issue-tracker.md +291 -291
- package/.claude/commands/github/issue-triage.md +25 -25
- package/.claude/commands/github/multi-repo-swarm.md +518 -518
- package/.claude/commands/github/pr-enhance.md +26 -26
- package/.claude/commands/github/pr-manager.md +169 -169
- package/.claude/commands/github/project-board-sync.md +470 -470
- package/.claude/commands/github/release-manager.md +337 -337
- package/.claude/commands/github/release-swarm.md +543 -543
- package/.claude/commands/github/repo-analyze.md +25 -25
- package/.claude/commands/github/repo-architect.md +366 -366
- package/.claude/commands/github/swarm-issue.md +481 -481
- package/.claude/commands/github/swarm-pr.md +284 -284
- package/.claude/commands/github/sync-coordinator.md +300 -300
- package/.claude/commands/github/workflow-automation.md +441 -441
- package/.claude/commands/hive-mind/README.md +17 -17
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
- package/.claude/commands/hive-mind/hive-mind.md +27 -27
- package/.claude/commands/hooks/README.md +11 -11
- package/.claude/commands/hooks/overview.md +57 -57
- package/.claude/commands/hooks/post-edit.md +117 -117
- package/.claude/commands/hooks/post-task.md +112 -112
- package/.claude/commands/hooks/pre-edit.md +113 -113
- package/.claude/commands/hooks/pre-task.md +111 -111
- package/.claude/commands/hooks/session-end.md +118 -118
- package/.claude/commands/hooks/setup.md +102 -102
- package/.claude/commands/memory/README.md +9 -9
- package/.claude/commands/memory/memory-persist.md +25 -25
- package/.claude/commands/memory/memory-search.md +25 -25
- package/.claude/commands/memory/memory-usage.md +25 -25
- package/.claude/commands/memory/neural.md +47 -47
- package/.claude/commands/monitoring/README.md +9 -9
- package/.claude/commands/monitoring/agent-metrics.md +25 -25
- package/.claude/commands/monitoring/agents.md +44 -44
- package/.claude/commands/monitoring/real-time-view.md +25 -25
- package/.claude/commands/monitoring/status.md +46 -46
- package/.claude/commands/monitoring/swarm-monitor.md +25 -25
- package/.claude/commands/optimization/README.md +9 -9
- package/.claude/commands/optimization/auto-topology.md +61 -61
- package/.claude/commands/optimization/cache-manage.md +25 -25
- package/.claude/commands/optimization/parallel-execute.md +25 -25
- package/.claude/commands/optimization/parallel-execution.md +49 -49
- package/.claude/commands/optimization/topology-optimize.md +25 -25
- package/.claude/commands/pair/README.md +260 -260
- package/.claude/commands/pair/commands.md +545 -545
- package/.claude/commands/pair/config.md +509 -509
- package/.claude/commands/pair/examples.md +511 -511
- package/.claude/commands/pair/modes.md +347 -347
- package/.claude/commands/pair/session.md +406 -406
- package/.claude/commands/pair/start.md +208 -208
- package/.claude/commands/sparc/analyzer.md +51 -51
- package/.claude/commands/sparc/architect.md +53 -53
- package/.claude/commands/sparc/ask.md +97 -97
- package/.claude/commands/sparc/batch-executor.md +54 -54
- package/.claude/commands/sparc/code.md +89 -89
- package/.claude/commands/sparc/coder.md +54 -54
- package/.claude/commands/sparc/debug.md +83 -83
- package/.claude/commands/sparc/debugger.md +54 -54
- package/.claude/commands/sparc/designer.md +53 -53
- package/.claude/commands/sparc/devops.md +109 -109
- package/.claude/commands/sparc/docs-writer.md +80 -80
- package/.claude/commands/sparc/documenter.md +54 -54
- package/.claude/commands/sparc/innovator.md +54 -54
- package/.claude/commands/sparc/integration.md +83 -83
- package/.claude/commands/sparc/mcp.md +117 -117
- package/.claude/commands/sparc/memory-manager.md +54 -54
- package/.claude/commands/sparc/optimizer.md +54 -54
- package/.claude/commands/sparc/orchestrator.md +131 -131
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
- package/.claude/commands/sparc/researcher.md +54 -54
- package/.claude/commands/sparc/reviewer.md +54 -54
- package/.claude/commands/sparc/security-review.md +80 -80
- package/.claude/commands/sparc/sparc-modes.md +174 -174
- package/.claude/commands/sparc/sparc.md +111 -111
- package/.claude/commands/sparc/spec-pseudocode.md +80 -80
- package/.claude/commands/sparc/supabase-admin.md +348 -348
- package/.claude/commands/sparc/swarm-coordinator.md +54 -54
- package/.claude/commands/sparc/tdd.md +54 -54
- package/.claude/commands/sparc/tester.md +54 -54
- package/.claude/commands/sparc/tutorial.md +79 -79
- package/.claude/commands/sparc/workflow-manager.md +54 -54
- package/.claude/commands/sparc.md +166 -166
- package/.claude/commands/stream-chain/pipeline.md +120 -120
- package/.claude/commands/stream-chain/run.md +69 -69
- package/.claude/commands/swarm/README.md +15 -15
- package/.claude/commands/swarm/analysis.md +95 -95
- package/.claude/commands/swarm/development.md +96 -96
- package/.claude/commands/swarm/examples.md +168 -168
- package/.claude/commands/swarm/maintenance.md +102 -102
- package/.claude/commands/swarm/optimization.md +117 -117
- package/.claude/commands/swarm/research.md +136 -136
- package/.claude/commands/swarm/swarm-analysis.md +8 -8
- package/.claude/commands/swarm/swarm-background.md +8 -8
- package/.claude/commands/swarm/swarm-init.md +19 -19
- package/.claude/commands/swarm/swarm-modes.md +8 -8
- package/.claude/commands/swarm/swarm-monitor.md +8 -8
- package/.claude/commands/swarm/swarm-spawn.md +19 -19
- package/.claude/commands/swarm/swarm-status.md +8 -8
- package/.claude/commands/swarm/swarm-strategies.md +8 -8
- package/.claude/commands/swarm/swarm.md +27 -27
- package/.claude/commands/swarm/testing.md +131 -131
- package/.claude/commands/training/README.md +9 -9
- package/.claude/commands/training/model-update.md +25 -25
- package/.claude/commands/training/neural-patterns.md +73 -73
- package/.claude/commands/training/neural-train.md +25 -25
- package/.claude/commands/training/pattern-learn.md +25 -25
- package/.claude/commands/training/specialization.md +62 -62
- package/.claude/commands/truth/start.md +142 -142
- package/.claude/commands/verify/check.md +49 -49
- package/.claude/commands/verify/start.md +127 -127
- package/.claude/commands/workflows/README.md +9 -9
- package/.claude/commands/workflows/development.md +77 -77
- package/.claude/commands/workflows/research.md +62 -62
- package/.claude/commands/workflows/workflow-create.md +25 -25
- package/.claude/commands/workflows/workflow-execute.md +25 -25
- package/.claude/commands/workflows/workflow-export.md +25 -25
- package/.claude/config/v3-dependency-optimization.json +265 -265
- package/.claude/config/v3-performance-targets.json +250 -250
- package/.claude/helpers/.LOCKED +2 -2
- package/.claude/helpers/.helpers-version +1 -0
- package/.claude/helpers/README.md +96 -96
- package/.claude/helpers/adr-compliance.sh +186 -186
- package/.claude/helpers/aggressive-microcompact.mjs +36 -36
- package/.claude/helpers/auto-commit.sh +178 -178
- package/.claude/helpers/auto-memory-hook.mjs +430 -430
- package/.claude/helpers/checkpoint-manager.sh +251 -251
- package/.claude/helpers/context-persistence-hook.mjs +2001 -2001
- package/.claude/helpers/daemon-manager.sh +252 -252
- package/.claude/helpers/ddd-tracker.sh +144 -144
- package/.claude/helpers/github-safe.js +156 -156
- package/.claude/helpers/github-setup.sh +45 -45
- package/.claude/helpers/guidance-hook.sh +13 -13
- package/.claude/helpers/guidance-hooks.sh +102 -102
- package/.claude/helpers/health-monitor.sh +108 -108
- package/.claude/helpers/helpers.manifest.json +13 -0
- package/.claude/helpers/hook-handler.cjs +464 -464
- package/.claude/helpers/intelligence.cjs +1058 -1058
- package/.claude/helpers/learning-hooks.sh +329 -329
- package/.claude/helpers/learning-optimizer.sh +127 -127
- package/.claude/helpers/learning-service.mjs +1144 -1144
- package/.claude/helpers/memory.cjs +84 -84
- package/.claude/helpers/metrics-db.mjs +503 -503
- package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
- package/.claude/helpers/pattern-consolidator.sh +86 -86
- package/.claude/helpers/perf-worker.sh +160 -160
- package/.claude/helpers/quick-start.sh +19 -19
- package/.claude/helpers/router.cjs +62 -62
- package/.claude/helpers/security-scanner.sh +127 -127
- package/.claude/helpers/session.cjs +125 -125
- package/.claude/helpers/setup-mcp.sh +18 -18
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
- package/.claude/helpers/statusline.cjs +156 -1
- package/.claude/helpers/swarm-comms.sh +353 -353
- package/.claude/helpers/swarm-hooks.sh +761 -761
- package/.claude/helpers/swarm-monitor.sh +210 -210
- package/.claude/helpers/sync-v3-metrics.sh +245 -245
- package/.claude/helpers/update-v3-progress.sh +165 -165
- package/.claude/helpers/v3-quick-status.sh +57 -57
- package/.claude/helpers/v3.sh +110 -110
- package/.claude/helpers/validate-v3-config.sh +215 -215
- package/.claude/helpers/worker-manager.sh +170 -170
- package/.claude/mcp.json +12 -12
- package/.claude/proven-config.json +42 -0
- package/.claude/settings.json +284 -284
- package/.claude/settings.json.bak +526 -526
- package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
- package/.claude/skills/agentdb-learning/SKILL.md +545 -545
- package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
- package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
- package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
- package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
- package/.claude/skills/browser/SKILL.md +204 -204
- package/.claude/skills/dual-mode/README.md +71 -71
- package/.claude/skills/dual-mode/dual-collect.md +103 -103
- package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
- package/.claude/skills/dual-mode/dual-spawn.md +81 -81
- package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
- package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
- package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
- package/.claude/skills/github-code-review/SKILL.md +1125 -1125
- package/.claude/skills/github-multi-repo/SKILL.md +862 -862
- package/.claude/skills/github-project-management/SKILL.md +1262 -1262
- package/.claude/skills/github-release-management/SKILL.md +1064 -1064
- package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
- package/.claude/skills/hive-mind-advanced/SKILL.md +709 -709
- package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/pair-programming/SKILL.md +1202 -1202
- package/.claude/skills/performance-analysis/SKILL.md +560 -560
- package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
- package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
- package/.claude/skills/skill-builder/SKILL.md +910 -910
- package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
- package/.claude/skills/stream-chain/SKILL.md +560 -560
- package/.claude/skills/swarm-advanced/SKILL.md +970 -970
- package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
- package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
- package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
- package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
- package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
- package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
- package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
- package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
- package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
- package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
- package/.claude/skills/verification-quality/SKILL.md +691 -691
- package/.claude/skills/worker-benchmarks/SKILL.md +129 -129
- package/.claude/skills/worker-integration/SKILL.md +147 -147
- package/.claude/statusline-command.sh +176 -176
- package/.claude/statusline.mjs +109 -109
- package/.claude/statusline.sh +431 -431
- package/.claude/workflows/full-system-test.js +65 -65
- package/.claude/workflows/intelligence-system-hardening.js +120 -120
- package/.claude/workflows/plugin-contract-audit.js +91 -91
- package/.claude-plugin/README.md +720 -720
- package/.claude-plugin/docs/INSTALLATION.md +261 -261
- package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -361
- package/.claude-plugin/docs/QUICKSTART.md +361 -361
- package/.claude-plugin/docs/STRUCTURE.md +128 -128
- package/.claude-plugin/hooks/hooks.json +79 -79
- package/.claude-plugin/marketplace.json +185 -185
- package/.claude-plugin/plugin.json +71 -71
- package/.claude-plugin/scripts/install.sh +234 -234
- package/.claude-plugin/scripts/ruflo-hook.cjs +166 -166
- package/.claude-plugin/scripts/ruflo-hook.sh +52 -52
- package/.claude-plugin/scripts/uninstall.sh +36 -36
- package/.claude-plugin/scripts/verify.sh +108 -108
- package/LICENSE +21 -21
- package/README.md +419 -419
- package/bin/cli.js +11 -11
- package/bin/npx-repair.js +7 -7
- package/bin/npx-safe-launch.js +9 -9
- package/package.json +192 -192
- package/v3/@claude-flow/cli/README.md +419 -419
- package/v3/@claude-flow/cli/bin/cli.js +314 -314
- package/v3/@claude-flow/cli/bin/mcp-server.js +224 -224
- package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -2
- package/v3/@claude-flow/cli/catalog-manifest.json +2 -2
- package/v3/@claude-flow/cli/dist/src/autopilot-state.js +24 -7
- package/v3/@claude-flow/cli/dist/src/benchmarks/gaia-critic.js +24 -24
- package/v3/@claude-flow/cli/dist/src/business-pods/bbs-budget-tracker.js +53 -53
- package/v3/@claude-flow/cli/dist/src/commands/completions.js +409 -409
- package/v3/@claude-flow/cli/dist/src/commands/daemon.js +44 -44
- package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +26 -26
- package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +97 -97
- package/v3/@claude-flow/cli/dist/src/commands/hooks.js +31 -10
- package/v3/@claude-flow/cli/dist/src/commands/init.js +202 -34
- package/v3/@claude-flow/cli/dist/src/commands/memory.js +12 -1
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +31 -31
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +115 -115
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +99 -99
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
- package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +38 -38
- package/v3/@claude-flow/cli/dist/src/config/proven-config.js +2 -2
- package/v3/@claude-flow/cli/dist/src/funnel/disclosure.js +13 -2
- package/v3/@claude-flow/cli/dist/src/funnel/messages.d.ts +12 -10
- package/v3/@claude-flow/cli/dist/src/funnel/messages.js +83 -11
- package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +231 -231
- package/v3/@claude-flow/cli/dist/src/init/executor.js +453 -453
- package/v3/@claude-flow/cli/dist/src/init/helper-signing.js +2 -2
- package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +751 -751
- package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +24 -24
- package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +15 -15
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.js +19 -19
- package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.js +8 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +21 -0
- package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +4 -3
- package/v3/@claude-flow/cli/dist/src/memory/graph-edge-writer.js +22 -22
- package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +248 -158
- package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +407 -407
- package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +5 -5
- package/v3/@claude-flow/cli/dist/src/parser.js +25 -9
- package/v3/@claude-flow/cli/dist/src/proxy/verify.js +2 -2
- package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
- package/v3/@claude-flow/cli/dist/src/services/distill-tuning.js +7 -7
- package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
- package/v3/@claude-flow/cli/dist/src/services/memory-distillation.js +4 -4
- package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +7 -4
- package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
- package/v3/@claude-flow/cli/package.json +137 -137
- package/v3/@claude-flow/guidance/README.md +1195 -1195
- package/v3/@claude-flow/guidance/package.json +198 -198
- package/v3/@claude-flow/shared/README.md +323 -323
- package/v3/@claude-flow/shared/dist/events/event-store.js +31 -31
- package/v3/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
- package/v3/@claude-flow/shared/package.json +43 -43
- package/v3/README.md +493 -493
|
@@ -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
|
-
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
//
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
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,
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
}
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
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
|
-
|
|
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) {
|