@claude-flow/cli 3.27.4 → 3.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/analysis/analyze-code-quality.md +178 -178
- package/.claude/agents/analysis/code-analyzer.md +209 -209
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +178 -178
- package/.claude/agents/architecture/arch-system-design.md +156 -156
- package/.claude/agents/architecture/system-design/arch-system-design.md +154 -154
- package/.claude/agents/browser/browser-agent.yaml +182 -182
- package/.claude/agents/consensus/byzantine-coordinator.md +62 -62
- package/.claude/agents/consensus/crdt-synchronizer.md +996 -996
- package/.claude/agents/consensus/gossip-coordinator.md +62 -62
- package/.claude/agents/consensus/performance-benchmarker.md +850 -850
- package/.claude/agents/consensus/quorum-manager.md +822 -822
- package/.claude/agents/consensus/raft-manager.md +62 -62
- package/.claude/agents/consensus/security-manager.md +621 -621
- package/.claude/agents/core/planner.md +374 -374
- package/.claude/agents/custom/test-long-runner.md +44 -44
- package/.claude/agents/data/data-ml-model.md +444 -444
- package/.claude/agents/data/ml/data-ml-model.md +192 -192
- package/.claude/agents/development/backend/dev-backend-api.md +141 -141
- package/.claude/agents/development/dev-backend-api.md +344 -344
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +163 -163
- package/.claude/agents/devops/ops-cicd-github.md +164 -164
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +173 -173
- package/.claude/agents/documentation/docs-api-openapi.md +354 -354
- 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 +377 -377
- package/.claude/agents/github/github-modes.md +172 -172
- package/.claude/agents/github/issue-tracker.md +575 -575
- package/.claude/agents/github/multi-repo-swarm.md +552 -552
- package/.claude/agents/github/pr-manager.md +437 -437
- package/.claude/agents/github/project-board-sync.md +508 -508
- package/.claude/agents/github/release-manager.md +604 -604
- package/.claude/agents/github/release-swarm.md +582 -582
- package/.claude/agents/github/repo-architect.md +397 -397
- package/.claude/agents/github/swarm-issue.md +572 -572
- package/.claude/agents/github/swarm-pr.md +427 -427
- package/.claude/agents/github/sync-coordinator.md +451 -451
- package/.claude/agents/github/workflow-automation.md +902 -902
- package/.claude/agents/goal/agent.md +815 -815
- package/.claude/agents/optimization/benchmark-suite.md +664 -664
- package/.claude/agents/optimization/load-balancer.md +430 -430
- package/.claude/agents/optimization/performance-monitor.md +671 -671
- package/.claude/agents/optimization/resource-allocator.md +673 -673
- package/.claude/agents/optimization/topology-optimizer.md +807 -807
- package/.claude/agents/payments/agentic-payments.md +126 -126
- package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
- package/.claude/agents/sparc/architecture.md +698 -698
- package/.claude/agents/sparc/pseudocode.md +519 -519
- package/.claude/agents/sparc/refinement.md +801 -801
- package/.claude/agents/sparc/specification.md +477 -477
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
- package/.claude/agents/specialized/spec-mobile-react-native.md +226 -226
- 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 +1126 -1126
- package/.claude/agents/swarm/hierarchical-coordinator.md +709 -709
- package/.claude/agents/swarm/mesh-coordinator.md +962 -962
- package/.claude/agents/templates/automation-smart-agent.md +204 -204
- package/.claude/agents/templates/base-template-generator.md +289 -289
- package/.claude/agents/templates/coordinator-swarm-init.md +89 -89
- package/.claude/agents/templates/github-pr-manager.md +176 -176
- package/.claude/agents/templates/implementer-sparc-coder.md +258 -258
- package/.claude/agents/templates/memory-coordinator.md +186 -186
- package/.claude/agents/templates/orchestrator-task.md +138 -138
- package/.claude/agents/templates/performance-analyzer.md +198 -198
- package/.claude/agents/templates/sparc-coordinator.md +513 -513
- package/.claude/agents/testing/production-validator.md +394 -394
- package/.claude/agents/testing/tdd-london-swarm.md +243 -243
- package/.claude/agents/v3/aidefence-guardian.md +282 -282
- package/.claude/agents/v3/claims-authorizer.md +208 -208
- package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -993
- package/.claude/agents/v3/ddd-domain-expert.md +220 -220
- package/.claude/agents/v3/injection-analyst.md +236 -236
- package/.claude/agents/v3/performance-engineer.md +1233 -1233
- package/.claude/agents/v3/pii-detector.md +151 -151
- package/.claude/agents/v3/reasoningbank-learner.md +213 -213
- package/.claude/agents/v3/security-architect-aidefence.md +410 -410
- package/.claude/agents/v3/security-architect.md +867 -867
- package/.claude/agents/v3/swarm-memory-manager.md +157 -157
- package/.claude/agents/v3/v3-integration-architect.md +205 -205
- package/.claude/commands/agents/README.md +50 -50
- package/.claude/commands/agents/agent-capabilities.md +140 -140
- 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 +216 -216
- package/.claude/commands/agents/health.md +139 -139
- package/.claude/commands/agents/list.md +100 -100
- package/.claude/commands/agents/logs.md +130 -130
- package/.claude/commands/agents/metrics.md +122 -122
- package/.claude/commands/agents/pool.md +127 -127
- package/.claude/commands/agents/spawn.md +140 -140
- package/.claude/commands/agents/status.md +115 -115
- package/.claude/commands/agents/stop.md +102 -102
- 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/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 +339 -339
- 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 +484 -484
- package/.claude/commands/github/swarm-pr.md +287 -287
- package/.claude/commands/github/sync-coordinator.md +302 -302
- 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 +87 -87
- 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 +107 -107
- package/.claude/commands/training/neural-train.md +75 -75
- 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/eval/human-relevance-frozen-v1.json +17 -17
- package/.claude/evolve-proof/generation-0.json +211 -211
- package/.claude/evolve-proof/real-generation-0.json +406 -406
- package/.claude/evolve-proof/real-generation-1.json +406 -406
- package/.claude/helpers/README.md +96 -96
- package/.claude/helpers/adr-compliance.sh +186 -186
- 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/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 +6 -6
- package/.claude/helpers/hook-handler.cjs +460 -460
- 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.js +83 -83
- package/.claude/helpers/metrics-db.mjs +503 -503
- package/.claude/helpers/pattern-consolidator.sh +86 -86
- package/.claude/helpers/perf-worker.sh +160 -160
- package/.claude/helpers/post-commit +16 -16
- package/.claude/helpers/pre-commit +26 -26
- package/.claude/helpers/quick-start.sh +19 -19
- package/.claude/helpers/router.js +105 -105
- package/.claude/helpers/security-scanner.sh +127 -127
- package/.claude/helpers/session.js +157 -157
- package/.claude/helpers/setup-mcp.sh +18 -18
- package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
- package/.claude/helpers/statusline-hook.sh +21 -21
- package/.claude/helpers/statusline.cjs +925 -925
- package/.claude/helpers/statusline.js +352 -352
- 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/proven-config.json +1 -1
- package/.claude/proven-config.manifest.json +37 -37
- package/.claude/proven-config.signed.json +41 -41
- package/.claude/settings.json +182 -182
- 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/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/hooks-automation/SKILL.md +1201 -1201
- package/.claude/skills/pair-programming/SKILL.md +1202 -1202
- 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/README.md +419 -419
- package/bin/cli.js +314 -314
- package/bin/mcp-server.js +224 -224
- package/bin/preinstall.cjs +2 -2
- package/catalog-manifest.json +2 -2
- package/dist/src/benchmarks/gaia-critic.js +24 -24
- package/dist/src/business-pods/bbs-budget-tracker.js +53 -53
- package/dist/src/commands/completions.js +409 -409
- package/dist/src/commands/daemon.d.ts +23 -0
- package/dist/src/commands/daemon.js +216 -44
- package/dist/src/commands/embeddings.js +26 -26
- package/dist/src/commands/funnel.d.ts +2 -0
- package/dist/src/commands/funnel.js +110 -2
- package/dist/src/commands/hive-mind.js +97 -97
- package/dist/src/commands/hooks.js +9 -9
- package/dist/src/commands/init.js +94 -38
- package/dist/src/commands/memory.js +85 -1
- package/dist/src/commands/ruvector/backup.js +23 -23
- package/dist/src/commands/ruvector/benchmark.js +31 -31
- package/dist/src/commands/ruvector/import.js +14 -14
- package/dist/src/commands/ruvector/init.js +115 -115
- package/dist/src/commands/ruvector/migrate.js +99 -99
- package/dist/src/commands/ruvector/optimize.js +51 -51
- package/dist/src/commands/ruvector/setup.js +624 -624
- package/dist/src/commands/ruvector/status.js +38 -38
- package/dist/src/config/proven-config.js +2 -2
- package/dist/src/funnel/disclosure.d.ts +1 -0
- package/dist/src/funnel/disclosure.js +12 -0
- package/dist/src/funnel/index.d.ts +1 -1
- package/dist/src/funnel/index.js +1 -1
- package/dist/src/init/claudemd-generator.js +231 -231
- package/dist/src/init/executor.js +453 -453
- package/dist/src/init/helper-signing.d.ts +8 -1
- package/dist/src/init/helper-signing.js +9 -2
- package/dist/src/init/helpers-generator.js +751 -751
- package/dist/src/init/statusline-generator.js +994 -951
- package/dist/src/mcp-tools/agentdb-tools.js +15 -15
- package/dist/src/mcp-tools/browser-intent-tools.js +19 -19
- package/dist/src/memory/graph-edge-writer.js +22 -22
- package/dist/src/memory/memory-bridge.d.ts +10 -0
- package/dist/src/memory/memory-bridge.js +139 -88
- package/dist/src/memory/memory-initializer.d.ts +18 -0
- package/dist/src/memory/memory-initializer.js +539 -407
- package/dist/src/memory/rabitq-index.js +5 -5
- package/dist/src/runtime/headless.js +28 -28
- package/dist/src/ruvector/flash-attention.d.ts +195 -0
- package/dist/src/ruvector/flash-attention.js +643 -0
- package/dist/src/ruvector/moe-router.d.ts +206 -0
- package/dist/src/ruvector/moe-router.js +626 -0
- package/dist/src/services/distill-tuning.js +7 -7
- package/dist/src/services/event-stream.d.ts +25 -0
- package/dist/src/services/event-stream.js +27 -0
- package/dist/src/services/global-ai-budget.d.ts +25 -0
- package/dist/src/services/global-ai-budget.js +56 -0
- package/dist/src/services/headless-worker-executor.d.ts +21 -0
- package/dist/src/services/headless-worker-executor.js +152 -86
- package/dist/src/services/loop-worker-runner.d.ts +16 -0
- package/dist/src/services/loop-worker-runner.js +34 -0
- package/dist/src/services/memory-distillation.js +4 -4
- package/dist/src/services/repo-supervisor.d.ts +70 -0
- package/dist/src/services/repo-supervisor.js +228 -0
- package/dist/src/services/runtime-capabilities.d.ts +22 -0
- package/dist/src/services/runtime-capabilities.js +45 -0
- package/dist/src/services/worker-daemon.d.ts +26 -0
- package/dist/src/services/worker-daemon.js +95 -5
- package/dist/src/services/workspace-lease.d.ts +55 -0
- package/dist/src/services/workspace-lease.js +191 -0
- package/dist/src/transfer/deploy-seraphine.js +23 -23
- package/package.json +134 -133
- package/plugins/ruflo-metaharness/.claude-plugin/plugin.json +32 -32
- package/plugins/ruflo-metaharness/README.md +72 -72
- package/plugins/ruflo-metaharness/agents/metaharness-architect.md +58 -58
- package/plugins/ruflo-metaharness/commands/ruflo-metaharness.md +48 -48
- package/plugins/ruflo-metaharness/scripts/_darwin.mjs +210 -210
- package/plugins/ruflo-metaharness/scripts/_harness.mjs +330 -330
- package/plugins/ruflo-metaharness/scripts/_invoke.mjs +231 -231
- package/plugins/ruflo-metaharness/scripts/_redblue.mjs +143 -143
- package/plugins/ruflo-metaharness/scripts/_similarity.mjs +161 -161
- package/plugins/ruflo-metaharness/scripts/_spike-similarity.mjs +223 -223
- package/plugins/ruflo-metaharness/scripts/audit-list.mjs +158 -158
- package/plugins/ruflo-metaharness/scripts/audit-trend.mjs +272 -272
- package/plugins/ruflo-metaharness/scripts/bench-parse-mcp-scan.mjs +146 -146
- package/plugins/ruflo-metaharness/scripts/bench-recordpair-overhead.mjs +186 -186
- package/plugins/ruflo-metaharness/scripts/bench-similarity.mjs +177 -177
- package/plugins/ruflo-metaharness/scripts/bench.mjs +95 -95
- package/plugins/ruflo-metaharness/scripts/drift-from-history.mjs +363 -363
- package/plugins/ruflo-metaharness/scripts/evolve.mjs +404 -404
- package/plugins/ruflo-metaharness/scripts/genome.mjs +80 -80
- package/plugins/ruflo-metaharness/scripts/gepa.mjs +153 -153
- package/plugins/ruflo-metaharness/scripts/learn.mjs +127 -127
- package/plugins/ruflo-metaharness/scripts/mcp-scan.mjs +111 -111
- package/plugins/ruflo-metaharness/scripts/mint.mjs +126 -126
- package/plugins/ruflo-metaharness/scripts/oia-audit.mjs +228 -228
- package/plugins/ruflo-metaharness/scripts/redblue.mjs +286 -286
- package/plugins/ruflo-metaharness/scripts/router-parallel-analyze.mjs +250 -250
- package/plugins/ruflo-metaharness/scripts/score.mjs +92 -92
- package/plugins/ruflo-metaharness/scripts/security-bench.mjs +174 -174
- package/plugins/ruflo-metaharness/scripts/similarity.mjs +158 -158
- package/plugins/ruflo-metaharness/scripts/smoke.sh +2353 -2353
- package/plugins/ruflo-metaharness/scripts/test-graceful-degradation.mjs +165 -165
- package/plugins/ruflo-metaharness/scripts/test-mcp-tools.mjs +472 -472
- package/plugins/ruflo-metaharness/scripts/test-parallel-pipeline.mjs +204 -204
- package/plugins/ruflo-metaharness/scripts/test-pipeline-roundtrip.mjs +586 -586
- package/plugins/ruflo-metaharness/scripts/test-similarity.mjs +334 -334
- package/plugins/ruflo-metaharness/scripts/test-with-openrouter.mjs +229 -229
- package/plugins/ruflo-metaharness/scripts/threat-model.mjs +59 -59
- package/plugins/ruflo-metaharness/skills/harness-bench/SKILL.md +64 -64
- package/plugins/ruflo-metaharness/skills/harness-drift-from-history/SKILL.md +65 -65
- package/plugins/ruflo-metaharness/skills/harness-evolve/SKILL.md +131 -131
- package/plugins/ruflo-metaharness/skills/harness-genome/SKILL.md +54 -54
- package/plugins/ruflo-metaharness/skills/harness-gepa/SKILL.md +65 -65
- package/plugins/ruflo-metaharness/skills/harness-learn/SKILL.md +65 -65
- package/plugins/ruflo-metaharness/skills/harness-mcp-scan/SKILL.md +49 -49
- package/plugins/ruflo-metaharness/skills/harness-mint/SKILL.md +72 -72
- package/plugins/ruflo-metaharness/skills/harness-oia-audit/SKILL.md +79 -79
- package/plugins/ruflo-metaharness/skills/harness-score/SKILL.md +66 -66
- package/plugins/ruflo-metaharness/skills/harness-security-bench/SKILL.md +101 -101
- package/plugins/ruflo-metaharness/skills/harness-similarity/SKILL.md +67 -67
- package/plugins/ruflo-metaharness/skills/harness-threat-model/SKILL.md +41 -41
- package/scripts/postinstall.cjs +153 -153
|
@@ -1182,21 +1182,21 @@ function buildKHopCTE(nodeId, depth, relation, maxNodes) {
|
|
|
1182
1182
|
// since validateIdentifier has already vetted the value; but we sanitize quotes anyway).
|
|
1183
1183
|
const safeNodeId = nodeId.replace(/'/g, "''");
|
|
1184
1184
|
const relFilter = relation ? `AND e.relation = '${relation.replace(/'/g, "''")}'` : '';
|
|
1185
|
-
return `
|
|
1186
|
-
WITH RECURSIVE khop(node_id, hop_depth) AS (
|
|
1187
|
-
SELECT '${safeNodeId}', 0
|
|
1188
|
-
UNION
|
|
1189
|
-
SELECT e.target_id, k.hop_depth + 1
|
|
1190
|
-
FROM graph_edges e
|
|
1191
|
-
JOIN khop k ON e.source_id = k.node_id
|
|
1192
|
-
WHERE k.hop_depth < ${depth} ${relFilter}
|
|
1193
|
-
)
|
|
1194
|
-
SELECT DISTINCT node_id, MIN(hop_depth) as depth
|
|
1195
|
-
FROM khop
|
|
1196
|
-
WHERE node_id != '${safeNodeId}'
|
|
1197
|
-
GROUP BY node_id
|
|
1198
|
-
ORDER BY depth, node_id
|
|
1199
|
-
LIMIT ${maxNodes}
|
|
1185
|
+
return `
|
|
1186
|
+
WITH RECURSIVE khop(node_id, hop_depth) AS (
|
|
1187
|
+
SELECT '${safeNodeId}', 0
|
|
1188
|
+
UNION
|
|
1189
|
+
SELECT e.target_id, k.hop_depth + 1
|
|
1190
|
+
FROM graph_edges e
|
|
1191
|
+
JOIN khop k ON e.source_id = k.node_id
|
|
1192
|
+
WHERE k.hop_depth < ${depth} ${relFilter}
|
|
1193
|
+
)
|
|
1194
|
+
SELECT DISTINCT node_id, MIN(hop_depth) as depth
|
|
1195
|
+
FROM khop
|
|
1196
|
+
WHERE node_id != '${safeNodeId}'
|
|
1197
|
+
GROUP BY node_id
|
|
1198
|
+
ORDER BY depth, node_id
|
|
1199
|
+
LIMIT ${maxNodes}
|
|
1200
1200
|
`;
|
|
1201
1201
|
}
|
|
1202
1202
|
function cosineSim(a, b) {
|
|
@@ -290,25 +290,25 @@ export function buildPageAgentInjection(iifeSource, pageConfig, task) {
|
|
|
290
290
|
throw new DemoLeakError(leak);
|
|
291
291
|
const cfgJson = JSON.stringify(pageConfig);
|
|
292
292
|
const taskJson = JSON.stringify(task);
|
|
293
|
-
return `${safeIife}
|
|
294
|
-
;(function(){
|
|
295
|
-
window.${BROWSER_ACT_RESULT_GLOBAL} = null;
|
|
296
|
-
try {
|
|
297
|
-
if (!window.PageAgent) {
|
|
298
|
-
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: false, error: 'PageAgent not defined after injection' };
|
|
299
|
-
return;
|
|
300
|
-
}
|
|
301
|
-
var agent = new window.PageAgent(${cfgJson});
|
|
302
|
-
window.__ruflo_pageAgent__ = agent;
|
|
303
|
-
agent.execute(${taskJson}).then(function(r){
|
|
304
|
-
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: true, result: r };
|
|
305
|
-
}).catch(function(e){
|
|
306
|
-
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: false, error: String((e && e.message) || e) };
|
|
307
|
-
});
|
|
308
|
-
} catch (e) {
|
|
309
|
-
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: false, error: String((e && e.message) || e) };
|
|
310
|
-
}
|
|
311
|
-
})();
|
|
293
|
+
return `${safeIife}
|
|
294
|
+
;(function(){
|
|
295
|
+
window.${BROWSER_ACT_RESULT_GLOBAL} = null;
|
|
296
|
+
try {
|
|
297
|
+
if (!window.PageAgent) {
|
|
298
|
+
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: false, error: 'PageAgent not defined after injection' };
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
var agent = new window.PageAgent(${cfgJson});
|
|
302
|
+
window.__ruflo_pageAgent__ = agent;
|
|
303
|
+
agent.execute(${taskJson}).then(function(r){
|
|
304
|
+
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: true, result: r };
|
|
305
|
+
}).catch(function(e){
|
|
306
|
+
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: false, error: String((e && e.message) || e) };
|
|
307
|
+
});
|
|
308
|
+
} catch (e) {
|
|
309
|
+
window.${BROWSER_ACT_RESULT_GLOBAL} = { success: false, error: String((e && e.message) || e) };
|
|
310
|
+
}
|
|
311
|
+
})();
|
|
312
312
|
'ruflo-browser-act-injected'`;
|
|
313
313
|
}
|
|
314
314
|
// ============================================================================
|
|
@@ -100,25 +100,25 @@ export async function getBridgeDb(customDbPath, opts) {
|
|
|
100
100
|
db.pragma('busy_timeout = 5000'); // wait up to 5s on lock contention
|
|
101
101
|
// Ensure graph_edges table exists (in case this is an older DB that
|
|
102
102
|
// predates ADR-130 Phase 1 schema migration).
|
|
103
|
-
db.exec(`
|
|
104
|
-
CREATE TABLE IF NOT EXISTS graph_edges (
|
|
105
|
-
id TEXT PRIMARY KEY,
|
|
106
|
-
source_id TEXT NOT NULL,
|
|
107
|
-
target_id TEXT NOT NULL,
|
|
108
|
-
relation TEXT NOT NULL,
|
|
109
|
-
weight REAL DEFAULT 1.0,
|
|
110
|
-
confidence REAL DEFAULT 1.0,
|
|
111
|
-
decay_rate REAL DEFAULT 0.0,
|
|
112
|
-
last_reinforced TEXT,
|
|
113
|
-
witness_id TEXT,
|
|
114
|
-
embedding_ref TEXT,
|
|
115
|
-
metadata TEXT,
|
|
116
|
-
created_at TEXT NOT NULL
|
|
117
|
-
);
|
|
118
|
-
CREATE INDEX IF NOT EXISTS idx_graph_edges_source ON graph_edges (source_id);
|
|
119
|
-
CREATE INDEX IF NOT EXISTS idx_graph_edges_target ON graph_edges (target_id);
|
|
120
|
-
CREATE INDEX IF NOT EXISTS idx_graph_edges_relation ON graph_edges (relation);
|
|
121
|
-
CREATE INDEX IF NOT EXISTS idx_graph_edges_reinforced ON graph_edges (last_reinforced);
|
|
103
|
+
db.exec(`
|
|
104
|
+
CREATE TABLE IF NOT EXISTS graph_edges (
|
|
105
|
+
id TEXT PRIMARY KEY,
|
|
106
|
+
source_id TEXT NOT NULL,
|
|
107
|
+
target_id TEXT NOT NULL,
|
|
108
|
+
relation TEXT NOT NULL,
|
|
109
|
+
weight REAL DEFAULT 1.0,
|
|
110
|
+
confidence REAL DEFAULT 1.0,
|
|
111
|
+
decay_rate REAL DEFAULT 0.0,
|
|
112
|
+
last_reinforced TEXT,
|
|
113
|
+
witness_id TEXT,
|
|
114
|
+
embedding_ref TEXT,
|
|
115
|
+
metadata TEXT,
|
|
116
|
+
created_at TEXT NOT NULL
|
|
117
|
+
);
|
|
118
|
+
CREATE INDEX IF NOT EXISTS idx_graph_edges_source ON graph_edges (source_id);
|
|
119
|
+
CREATE INDEX IF NOT EXISTS idx_graph_edges_target ON graph_edges (target_id);
|
|
120
|
+
CREATE INDEX IF NOT EXISTS idx_graph_edges_relation ON graph_edges (relation);
|
|
121
|
+
CREATE INDEX IF NOT EXISTS idx_graph_edges_reinforced ON graph_edges (last_reinforced);
|
|
122
122
|
`);
|
|
123
123
|
_db = db;
|
|
124
124
|
_dbPath = dbPath;
|
|
@@ -153,9 +153,9 @@ export async function insertGraphEdge(input) {
|
|
|
153
153
|
embeddingRef = encodeEmbedding(input.embedding);
|
|
154
154
|
}
|
|
155
155
|
const metaStr = input.metadata ? JSON.stringify(input.metadata) : null;
|
|
156
|
-
db.prepare(`INSERT OR IGNORE INTO graph_edges
|
|
157
|
-
(id, source_id, target_id, relation, weight, confidence, decay_rate,
|
|
158
|
-
last_reinforced, witness_id, embedding_ref, metadata, created_at)
|
|
156
|
+
db.prepare(`INSERT OR IGNORE INTO graph_edges
|
|
157
|
+
(id, source_id, target_id, relation, weight, confidence, decay_rate,
|
|
158
|
+
last_reinforced, witness_id, embedding_ref, metadata, created_at)
|
|
159
159
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(id, input.sourceId, input.targetId, input.relation, input.weight ?? 1.0, input.confidence ?? 1.0, input.decayRate ?? 0.0, input.lastReinforced ?? null, input.witnessId ?? null, embeddingRef, metaStr, createdAt);
|
|
160
160
|
return true;
|
|
161
161
|
}
|
|
@@ -137,6 +137,16 @@ export declare function bridgeDeleteEntry(options: {
|
|
|
137
137
|
guarded?: boolean;
|
|
138
138
|
error?: string;
|
|
139
139
|
} | null>;
|
|
140
|
+
export declare function bridgePurgeNamespace(options: {
|
|
141
|
+
namespace: string;
|
|
142
|
+
dbPath?: string;
|
|
143
|
+
}): Promise<{
|
|
144
|
+
success: boolean;
|
|
145
|
+
deletedCount: number;
|
|
146
|
+
remainingEntries: number;
|
|
147
|
+
guarded?: boolean;
|
|
148
|
+
error?: string;
|
|
149
|
+
} | null>;
|
|
140
150
|
/**
|
|
141
151
|
* Generate embedding via AgentDB v3's embedder.
|
|
142
152
|
* Returns null if bridge unavailable — caller falls back to own ONNX/hash.
|
|
@@ -505,25 +505,25 @@ function getDb(registry) {
|
|
|
505
505
|
// WeakSet so a new db instance re-ensures without a stale global flag.
|
|
506
506
|
if (!_schemaEnsuredDbs.has(db)) {
|
|
507
507
|
try {
|
|
508
|
-
db.exec(`CREATE TABLE IF NOT EXISTS memory_entries (
|
|
509
|
-
id TEXT PRIMARY KEY,
|
|
510
|
-
key TEXT NOT NULL,
|
|
511
|
-
namespace TEXT DEFAULT 'default',
|
|
512
|
-
content TEXT NOT NULL,
|
|
513
|
-
type TEXT DEFAULT 'semantic',
|
|
514
|
-
embedding TEXT,
|
|
515
|
-
embedding_model TEXT DEFAULT 'local',
|
|
516
|
-
embedding_dimensions INTEGER,
|
|
517
|
-
tags TEXT,
|
|
518
|
-
metadata TEXT,
|
|
519
|
-
owner_id TEXT,
|
|
520
|
-
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
521
|
-
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
522
|
-
expires_at INTEGER,
|
|
523
|
-
last_accessed_at INTEGER,
|
|
524
|
-
access_count INTEGER DEFAULT 0,
|
|
525
|
-
status TEXT DEFAULT 'active',
|
|
526
|
-
UNIQUE(namespace, key)
|
|
508
|
+
db.exec(`CREATE TABLE IF NOT EXISTS memory_entries (
|
|
509
|
+
id TEXT PRIMARY KEY,
|
|
510
|
+
key TEXT NOT NULL,
|
|
511
|
+
namespace TEXT DEFAULT 'default',
|
|
512
|
+
content TEXT NOT NULL,
|
|
513
|
+
type TEXT DEFAULT 'semantic',
|
|
514
|
+
embedding TEXT,
|
|
515
|
+
embedding_model TEXT DEFAULT 'local',
|
|
516
|
+
embedding_dimensions INTEGER,
|
|
517
|
+
tags TEXT,
|
|
518
|
+
metadata TEXT,
|
|
519
|
+
owner_id TEXT,
|
|
520
|
+
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
521
|
+
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
522
|
+
expires_at INTEGER,
|
|
523
|
+
last_accessed_at INTEGER,
|
|
524
|
+
access_count INTEGER DEFAULT 0,
|
|
525
|
+
status TEXT DEFAULT 'active',
|
|
526
|
+
UNIQUE(namespace, key)
|
|
527
527
|
)`);
|
|
528
528
|
// Ensure indexes
|
|
529
529
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_bridge_ns ON memory_entries(namespace)`);
|
|
@@ -672,15 +672,15 @@ export async function bridgeStoreEntry(options) {
|
|
|
672
672
|
}
|
|
673
673
|
// better-sqlite3 uses synchronous .run() with positional params
|
|
674
674
|
const insertSql = options.upsert
|
|
675
|
-
? `INSERT OR REPLACE INTO memory_entries (
|
|
676
|
-
id, key, namespace, content, type,
|
|
677
|
-
embedding, embedding_dimensions, embedding_model,
|
|
678
|
-
tags, metadata, created_at, updated_at, expires_at, status
|
|
675
|
+
? `INSERT OR REPLACE INTO memory_entries (
|
|
676
|
+
id, key, namespace, content, type,
|
|
677
|
+
embedding, embedding_dimensions, embedding_model,
|
|
678
|
+
tags, metadata, created_at, updated_at, expires_at, status
|
|
679
679
|
) VALUES (?, ?, ?, ?, 'semantic', ?, ?, ?, ?, ?, ?, ?, ?, 'active')`
|
|
680
|
-
: `INSERT INTO memory_entries (
|
|
681
|
-
id, key, namespace, content, type,
|
|
682
|
-
embedding, embedding_dimensions, embedding_model,
|
|
683
|
-
tags, metadata, created_at, updated_at, expires_at, status
|
|
680
|
+
: `INSERT INTO memory_entries (
|
|
681
|
+
id, key, namespace, content, type,
|
|
682
|
+
embedding, embedding_dimensions, embedding_model,
|
|
683
|
+
tags, metadata, created_at, updated_at, expires_at, status
|
|
684
684
|
) VALUES (?, ?, ?, ?, 'semantic', ?, ?, ?, ?, ?, ?, ?, ?, 'active')`;
|
|
685
685
|
// #1941: provision a `vector_indexes` row for this namespace before the
|
|
686
686
|
// entry insert. AgentDB's HNSW/router keys lookups by namespace via this
|
|
@@ -699,10 +699,10 @@ export async function bridgeStoreEntry(options) {
|
|
|
699
699
|
// stop reporting "HNSW index: 0 vectors" while embedded entries exist.
|
|
700
700
|
try {
|
|
701
701
|
ctx.db
|
|
702
|
-
.prepare(`UPDATE vector_indexes SET
|
|
703
|
-
total_vectors = (SELECT COUNT(*) FROM memory_entries
|
|
704
|
-
WHERE namespace = ? AND embedding IS NOT NULL),
|
|
705
|
-
updated_at = ?
|
|
702
|
+
.prepare(`UPDATE vector_indexes SET
|
|
703
|
+
total_vectors = (SELECT COUNT(*) FROM memory_entries
|
|
704
|
+
WHERE namespace = ? AND embedding IS NOT NULL),
|
|
705
|
+
updated_at = ?
|
|
706
706
|
WHERE name = ?`)
|
|
707
707
|
.run(namespace, now, namespace);
|
|
708
708
|
}
|
|
@@ -775,11 +775,11 @@ export async function bridgeSearchEntries(options) {
|
|
|
775
775
|
: '';
|
|
776
776
|
let rows;
|
|
777
777
|
try {
|
|
778
|
-
const stmt = ctx.db.prepare(`
|
|
779
|
-
SELECT id, key, namespace, content, embedding
|
|
780
|
-
FROM memory_entries
|
|
781
|
-
WHERE status = 'active' ${nsFilter}
|
|
782
|
-
LIMIT 1000
|
|
778
|
+
const stmt = ctx.db.prepare(`
|
|
779
|
+
SELECT id, key, namespace, content, embedding
|
|
780
|
+
FROM memory_entries
|
|
781
|
+
WHERE status = 'active' ${nsFilter}
|
|
782
|
+
LIMIT 1000
|
|
783
783
|
`);
|
|
784
784
|
rows = effectiveNamespace !== 'all' ? stmt.all(effectiveNamespace) : stmt.all();
|
|
785
785
|
}
|
|
@@ -900,12 +900,12 @@ export async function bridgeListEntries(options) {
|
|
|
900
900
|
// List
|
|
901
901
|
const entries = [];
|
|
902
902
|
try {
|
|
903
|
-
const stmt = ctx.db.prepare(`
|
|
904
|
-
SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at
|
|
905
|
-
FROM memory_entries
|
|
906
|
-
WHERE ${statusFilter} ${nsFilter}
|
|
907
|
-
ORDER BY updated_at DESC
|
|
908
|
-
LIMIT ? OFFSET ?
|
|
903
|
+
const stmt = ctx.db.prepare(`
|
|
904
|
+
SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at
|
|
905
|
+
FROM memory_entries
|
|
906
|
+
WHERE ${statusFilter} ${nsFilter}
|
|
907
|
+
ORDER BY updated_at DESC
|
|
908
|
+
LIMIT ? OFFSET ?
|
|
909
909
|
`);
|
|
910
910
|
const rows = stmt.all(...nsParams, limit, offset);
|
|
911
911
|
for (const row of rows) {
|
|
@@ -974,11 +974,11 @@ export async function bridgeGetEntry(options) {
|
|
|
974
974
|
}
|
|
975
975
|
let row;
|
|
976
976
|
try {
|
|
977
|
-
const stmt = ctx.db.prepare(`
|
|
978
|
-
SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at, tags
|
|
979
|
-
FROM memory_entries
|
|
980
|
-
WHERE status = 'active' AND key = ? AND namespace = ?
|
|
981
|
-
LIMIT 1
|
|
977
|
+
const stmt = ctx.db.prepare(`
|
|
978
|
+
SELECT id, key, namespace, content, embedding, access_count, created_at, updated_at, tags
|
|
979
|
+
FROM memory_entries
|
|
980
|
+
WHERE status = 'active' AND key = ? AND namespace = ?
|
|
981
|
+
LIMIT 1
|
|
982
982
|
`);
|
|
983
983
|
row = stmt.get(key, namespace);
|
|
984
984
|
}
|
|
@@ -1042,10 +1042,10 @@ export async function bridgeDeleteEntry(options) {
|
|
|
1042
1042
|
// Soft delete using parameterized query
|
|
1043
1043
|
let changes = 0;
|
|
1044
1044
|
try {
|
|
1045
|
-
const result = ctx.db.prepare(`
|
|
1046
|
-
UPDATE memory_entries
|
|
1047
|
-
SET status = 'deleted', updated_at = ?
|
|
1048
|
-
WHERE key = ? AND namespace = ? AND status = 'active'
|
|
1045
|
+
const result = ctx.db.prepare(`
|
|
1046
|
+
UPDATE memory_entries
|
|
1047
|
+
SET status = 'deleted', updated_at = ?
|
|
1048
|
+
WHERE key = ? AND namespace = ? AND status = 'active'
|
|
1049
1049
|
`).run(Date.now(), key, namespace);
|
|
1050
1050
|
changes = result?.changes ?? 0;
|
|
1051
1051
|
}
|
|
@@ -1081,6 +1081,57 @@ export async function bridgeDeleteEntry(options) {
|
|
|
1081
1081
|
return null;
|
|
1082
1082
|
}
|
|
1083
1083
|
}
|
|
1084
|
+
// #2666 — Hard, namespace-scoped purge. bridgeDeleteEntry above only ever
|
|
1085
|
+
// soft-deletes a single (namespace, key); this is a real
|
|
1086
|
+
// `DELETE FROM memory_entries WHERE namespace = ?` against the live
|
|
1087
|
+
// better-sqlite3-style handle, for callers (e.g. a plugin's index-reconcile
|
|
1088
|
+
// step) that need a namespace to be genuinely empty rather than tombstoned.
|
|
1089
|
+
// Irreversible — callers must gate this behind an explicit confirmation.
|
|
1090
|
+
export async function bridgePurgeNamespace(options) {
|
|
1091
|
+
const registry = await getRegistry(options.dbPath);
|
|
1092
|
+
if (!registry)
|
|
1093
|
+
return null;
|
|
1094
|
+
const ctx = getDb(registry);
|
|
1095
|
+
if (!ctx)
|
|
1096
|
+
return null;
|
|
1097
|
+
try {
|
|
1098
|
+
const { namespace } = options;
|
|
1099
|
+
const guardResult = await guardValidate(registry, 'purge', { namespace });
|
|
1100
|
+
if (!guardResult.allowed) {
|
|
1101
|
+
return { success: false, deletedCount: 0, remainingEntries: 0, error: `MutationGuard rejected: ${guardResult.reason}` };
|
|
1102
|
+
}
|
|
1103
|
+
let deletedCount = 0;
|
|
1104
|
+
try {
|
|
1105
|
+
const result = ctx.db.prepare(`DELETE FROM memory_entries WHERE namespace = ?`).run(namespace);
|
|
1106
|
+
deletedCount = result?.changes ?? 0;
|
|
1107
|
+
}
|
|
1108
|
+
catch (e) {
|
|
1109
|
+
return { success: false, deletedCount: 0, remainingEntries: 0, error: e instanceof Error ? e.message : String(e) };
|
|
1110
|
+
}
|
|
1111
|
+
const safeNs = String(namespace).replace(/:/g, '_');
|
|
1112
|
+
await cacheInvalidate(registry, `namespace:${safeNs}`);
|
|
1113
|
+
if (deletedCount > 0) {
|
|
1114
|
+
await logAttestation(registry, 'purge', namespace, { namespace, deletedCount });
|
|
1115
|
+
}
|
|
1116
|
+
let remaining = 0;
|
|
1117
|
+
try {
|
|
1118
|
+
const row = ctx.db.prepare(`SELECT COUNT(*) as cnt FROM memory_entries WHERE status = 'active'`).get();
|
|
1119
|
+
remaining = row?.cnt ?? 0;
|
|
1120
|
+
}
|
|
1121
|
+
catch {
|
|
1122
|
+
// Non-fatal
|
|
1123
|
+
}
|
|
1124
|
+
return {
|
|
1125
|
+
success: true,
|
|
1126
|
+
deletedCount,
|
|
1127
|
+
remainingEntries: remaining,
|
|
1128
|
+
guarded: true,
|
|
1129
|
+
};
|
|
1130
|
+
}
|
|
1131
|
+
catch {
|
|
1132
|
+
return null;
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1084
1135
|
// ===== Phase 2: Embedding bridge =====
|
|
1085
1136
|
/**
|
|
1086
1137
|
* Generate embedding via AgentDB v3's embedder.
|
|
@@ -1207,11 +1258,11 @@ export async function bridgeSearchHNSW(queryEmbedding, options, dbPath) {
|
|
|
1207
1258
|
: '';
|
|
1208
1259
|
let rows;
|
|
1209
1260
|
try {
|
|
1210
|
-
const stmt = ctx.db.prepare(`
|
|
1211
|
-
SELECT id, key, namespace, content, embedding
|
|
1212
|
-
FROM memory_entries
|
|
1213
|
-
WHERE status = 'active' AND embedding IS NOT NULL ${nsFilter}
|
|
1214
|
-
LIMIT 10000
|
|
1261
|
+
const stmt = ctx.db.prepare(`
|
|
1262
|
+
SELECT id, key, namespace, content, embedding
|
|
1263
|
+
FROM memory_entries
|
|
1264
|
+
WHERE status = 'active' AND embedding IS NOT NULL ${nsFilter}
|
|
1265
|
+
LIMIT 10000
|
|
1215
1266
|
`);
|
|
1216
1267
|
rows = nsFilter
|
|
1217
1268
|
? stmt.all(options.namespace)
|
|
@@ -1263,12 +1314,12 @@ export async function bridgeAddToHNSW(id, embedding, entry, dbPath) {
|
|
|
1263
1314
|
try {
|
|
1264
1315
|
const now = Date.now();
|
|
1265
1316
|
const embeddingJson = JSON.stringify(embedding);
|
|
1266
|
-
ctx.db.prepare(`
|
|
1267
|
-
INSERT OR REPLACE INTO memory_entries (
|
|
1268
|
-
id, key, namespace, content, type,
|
|
1269
|
-
embedding, embedding_dimensions, embedding_model,
|
|
1270
|
-
created_at, updated_at, status
|
|
1271
|
-
) VALUES (?, ?, ?, ?, 'semantic', ?, ?, 'Xenova/all-MiniLM-L6-v2', ?, ?, 'active')
|
|
1317
|
+
ctx.db.prepare(`
|
|
1318
|
+
INSERT OR REPLACE INTO memory_entries (
|
|
1319
|
+
id, key, namespace, content, type,
|
|
1320
|
+
embedding, embedding_dimensions, embedding_model,
|
|
1321
|
+
created_at, updated_at, status
|
|
1322
|
+
) VALUES (?, ?, ?, ?, 'semantic', ?, ?, 'Xenova/all-MiniLM-L6-v2', ?, ?, 'active')
|
|
1272
1323
|
`).run(id, entry.key, entry.namespace, entry.content, embeddingJson, embedding.length, now, now);
|
|
1273
1324
|
return true;
|
|
1274
1325
|
}
|
|
@@ -1592,9 +1643,9 @@ export async function bridgeRecordCausalEdge(options) {
|
|
|
1592
1643
|
const ctx = getDb(registry);
|
|
1593
1644
|
if (ctx) {
|
|
1594
1645
|
try {
|
|
1595
|
-
ctx.db.prepare(`
|
|
1596
|
-
INSERT OR REPLACE INTO memory_entries (id, key, namespace, content, type, created_at, updated_at, status)
|
|
1597
|
-
VALUES (?, ?, 'causal-edges', ?, 'procedural', ?, ?, 'active')
|
|
1646
|
+
ctx.db.prepare(`
|
|
1647
|
+
INSERT OR REPLACE INTO memory_entries (id, key, namespace, content, type, created_at, updated_at, status)
|
|
1648
|
+
VALUES (?, ?, 'causal-edges', ?, 'procedural', ?, ?, 'active')
|
|
1598
1649
|
`).run(generateId('edge'), `${options.sourceId}→${options.targetId}`, JSON.stringify(options), Date.now(), Date.now());
|
|
1599
1650
|
return { success: true, controller: 'bridge-fallback' };
|
|
1600
1651
|
}
|
|
@@ -1673,10 +1724,10 @@ export async function bridgeDeleteHierarchical(options) {
|
|
|
1673
1724
|
const ctx = getDb(registry);
|
|
1674
1725
|
if (ctx) {
|
|
1675
1726
|
try {
|
|
1676
|
-
const result = ctx.db.prepare(`
|
|
1677
|
-
UPDATE memory_entries
|
|
1678
|
-
SET status = 'deleted', updated_at = ?
|
|
1679
|
-
WHERE key = ? AND namespace LIKE 'hierarchical%' AND status = 'active'
|
|
1727
|
+
const result = ctx.db.prepare(`
|
|
1728
|
+
UPDATE memory_entries
|
|
1729
|
+
SET status = 'deleted', updated_at = ?
|
|
1730
|
+
WHERE key = ? AND namespace LIKE 'hierarchical%' AND status = 'active'
|
|
1680
1731
|
`).run(Date.now(), key);
|
|
1681
1732
|
const changes = result?.changes ?? 0;
|
|
1682
1733
|
if (changes > 0) {
|
|
@@ -1752,10 +1803,10 @@ export async function bridgeDeleteCausalEdge(options) {
|
|
|
1752
1803
|
const ctx = getDb(registry);
|
|
1753
1804
|
if (ctx) {
|
|
1754
1805
|
try {
|
|
1755
|
-
const result = ctx.db.prepare(`
|
|
1756
|
-
UPDATE memory_entries
|
|
1757
|
-
SET status = 'deleted', updated_at = ?
|
|
1758
|
-
WHERE key = ? AND namespace = 'causal-edges' AND status = 'active'
|
|
1806
|
+
const result = ctx.db.prepare(`
|
|
1807
|
+
UPDATE memory_entries
|
|
1808
|
+
SET status = 'deleted', updated_at = ?
|
|
1809
|
+
WHERE key = ? AND namespace = 'causal-edges' AND status = 'active'
|
|
1759
1810
|
`).run(Date.now(), edgeKey);
|
|
1760
1811
|
const changes = result?.changes ?? 0;
|
|
1761
1812
|
if (changes > 0) {
|
|
@@ -1827,18 +1878,18 @@ export async function bridgeDeleteCausalNode(options) {
|
|
|
1827
1878
|
let deletedEdges = 0;
|
|
1828
1879
|
let deletedNode = false;
|
|
1829
1880
|
try {
|
|
1830
|
-
const edgeResult = ctx.db.prepare(`
|
|
1831
|
-
UPDATE memory_entries
|
|
1832
|
-
SET status = 'deleted', updated_at = ?
|
|
1833
|
-
WHERE namespace = 'causal-edges'
|
|
1834
|
-
AND status = 'active'
|
|
1835
|
-
AND (key LIKE ? OR key LIKE ?)
|
|
1881
|
+
const edgeResult = ctx.db.prepare(`
|
|
1882
|
+
UPDATE memory_entries
|
|
1883
|
+
SET status = 'deleted', updated_at = ?
|
|
1884
|
+
WHERE namespace = 'causal-edges'
|
|
1885
|
+
AND status = 'active'
|
|
1886
|
+
AND (key LIKE ? OR key LIKE ?)
|
|
1836
1887
|
`).run(Date.now(), `${nodeId}→%`, `%→${nodeId}`);
|
|
1837
1888
|
deletedEdges = edgeResult?.changes ?? 0;
|
|
1838
|
-
const nodeResult = ctx.db.prepare(`
|
|
1839
|
-
UPDATE memory_entries
|
|
1840
|
-
SET status = 'deleted', updated_at = ?
|
|
1841
|
-
WHERE key = ? AND status = 'active'
|
|
1889
|
+
const nodeResult = ctx.db.prepare(`
|
|
1890
|
+
UPDATE memory_entries
|
|
1891
|
+
SET status = 'deleted', updated_at = ?
|
|
1892
|
+
WHERE key = ? AND status = 'active'
|
|
1842
1893
|
`).run(Date.now(), nodeId);
|
|
1843
1894
|
deletedNode = (nodeResult?.changes ?? 0) > 0;
|
|
1844
1895
|
await logAttestation(registry, 'delete', nodeId, { namespace: 'causal-nodes', deletedEdges });
|
|
@@ -2325,11 +2376,11 @@ export async function bridgeGetAllEmbeddings(options) {
|
|
|
2325
2376
|
try {
|
|
2326
2377
|
const dims = options?.dimensions ?? 384;
|
|
2327
2378
|
const maxRows = options?.limit ?? 50000;
|
|
2328
|
-
const rows = ctx.db.prepare(`
|
|
2329
|
-
SELECT id, key, namespace, embedding
|
|
2330
|
-
FROM memory_entries
|
|
2331
|
-
WHERE status = 'active' AND embedding IS NOT NULL
|
|
2332
|
-
LIMIT ?
|
|
2379
|
+
const rows = ctx.db.prepare(`
|
|
2380
|
+
SELECT id, key, namespace, embedding
|
|
2381
|
+
FROM memory_entries
|
|
2382
|
+
WHERE status = 'active' AND embedding IS NOT NULL
|
|
2383
|
+
LIMIT ?
|
|
2333
2384
|
`).all(maxRows);
|
|
2334
2385
|
const results = [];
|
|
2335
2386
|
for (const row of rows) {
|
|
@@ -516,6 +516,22 @@ export declare function deleteEntry(options: {
|
|
|
516
516
|
remainingEntries: number;
|
|
517
517
|
error?: string;
|
|
518
518
|
}>;
|
|
519
|
+
/**
|
|
520
|
+
* Advisory O_EXCL lock scoped to a single memory.db file (`<dbPath>.lock`),
|
|
521
|
+
* same stale-takeover pattern as services/global-ai-budget.ts. Only
|
|
522
|
+
* meaningful between callers that opt into it (purgeNamespace does); it
|
|
523
|
+
* cannot coordinate against writers that don't call this helper.
|
|
524
|
+
*/
|
|
525
|
+
export declare function withMemoryDbLock<T>(dbPath: string, fn: () => Promise<T> | T): Promise<T>;
|
|
526
|
+
export declare function purgeNamespace(options: {
|
|
527
|
+
namespace: string;
|
|
528
|
+
dbPath?: string;
|
|
529
|
+
}): Promise<{
|
|
530
|
+
success: boolean;
|
|
531
|
+
deletedCount: number;
|
|
532
|
+
remainingEntries: number;
|
|
533
|
+
error?: string;
|
|
534
|
+
}>;
|
|
519
535
|
declare const _default: {
|
|
520
536
|
initializeMemoryDatabase: typeof initializeMemoryDatabase;
|
|
521
537
|
checkMemoryInitialization: typeof checkMemoryInitialization;
|
|
@@ -530,6 +546,8 @@ declare const _default: {
|
|
|
530
546
|
listEntries: typeof listEntries;
|
|
531
547
|
getEntry: typeof getEntry;
|
|
532
548
|
deleteEntry: typeof deleteEntry;
|
|
549
|
+
purgeNamespace: typeof purgeNamespace;
|
|
550
|
+
withMemoryDbLock: typeof withMemoryDbLock;
|
|
533
551
|
rebuildSearchIndex: typeof rebuildSearchIndex;
|
|
534
552
|
MEMORY_SCHEMA_V3: string;
|
|
535
553
|
getInitialMetadata: typeof getInitialMetadata;
|