@claude-flow/cli 3.10.46 → 3.12.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/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 +368 -368
- 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/hook-handler.cjs +286 -286
- package/.claude/helpers/intelligence.cjs +1031 -1031
- 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 +488 -488
- 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 +604 -604
- 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/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 +412 -412
- package/bin/cli.js +314 -314
- package/bin/mcp-server.js +224 -224
- package/bin/preinstall.cjs +2 -2
- package/dist/src/benchmarks/gaia-critic.js +24 -24
- package/dist/src/commands/completions.js +409 -409
- package/dist/src/commands/daemon.js +44 -44
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +175 -1
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/eject.d.ts +33 -0
- package/dist/src/commands/eject.d.ts.map +1 -0
- package/dist/src/commands/eject.js +195 -0
- package/dist/src/commands/eject.js.map +1 -0
- package/dist/src/commands/embeddings.js +26 -26
- package/dist/src/commands/hive-mind.js +97 -97
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +11 -10
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +4 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +3 -0
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/metaharness.d.ts +39 -0
- package/dist/src/commands/metaharness.d.ts.map +1 -0
- package/dist/src/commands/metaharness.js +194 -0
- package/dist/src/commands/metaharness.js.map +1 -0
- package/dist/src/commands/neural.d.ts.map +1 -1
- package/dist/src/commands/neural.js +2351 -1
- package/dist/src/commands/neural.js.map +1 -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/init/claudemd-generator.js +231 -231
- package/dist/src/init/executor.js +453 -453
- package/dist/src/init/helpers-generator.js +727 -727
- package/dist/src/init/statusline-generator.js +717 -717
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +4 -0
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-tools/agent-execute-core.d.ts +23 -1
- package/dist/src/mcp-tools/agent-execute-core.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-execute-core.js +136 -9
- package/dist/src/mcp-tools/agent-execute-core.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +48 -4
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +15 -15
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +196 -0
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +1 -0
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +2 -0
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/metaharness-tools.d.ts +31 -0
- package/dist/src/mcp-tools/metaharness-tools.d.ts.map +1 -0
- package/dist/src/mcp-tools/metaharness-tools.js +372 -0
- package/dist/src/mcp-tools/metaharness-tools.js.map +1 -0
- package/dist/src/memory/graph-edge-writer.js +18 -18
- package/dist/src/memory/memory-bridge.js +84 -84
- package/dist/src/memory/memory-initializer.js +393 -393
- package/dist/src/memory/rabitq-index.js +5 -5
- package/dist/src/plugins/store/discovery.d.ts.map +1 -1
- package/dist/src/plugins/store/discovery.js +3 -0
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/types.d.ts +6 -1
- package/dist/src/plugins/store/types.d.ts.map +1 -1
- package/dist/src/runtime/headless.js +28 -28
- package/dist/src/ruvector/enhanced-model-router.d.ts +5 -0
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.js +18 -1
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
- package/dist/src/ruvector/model-prices.d.ts +50 -0
- package/dist/src/ruvector/model-prices.d.ts.map +1 -0
- package/dist/src/ruvector/model-prices.js +72 -0
- package/dist/src/ruvector/model-prices.js.map +1 -0
- package/dist/src/ruvector/model-router.d.ts +147 -8
- package/dist/src/ruvector/model-router.d.ts.map +1 -1
- package/dist/src/ruvector/model-router.js +455 -18
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/neural-router.d.ts +172 -39
- package/dist/src/ruvector/neural-router.d.ts.map +1 -1
- package/dist/src/ruvector/neural-router.js +780 -91
- package/dist/src/ruvector/neural-router.js.map +1 -1
- package/dist/src/ruvector/router-calibrator.d.ts +65 -0
- package/dist/src/ruvector/router-calibrator.d.ts.map +1 -0
- package/dist/src/ruvector/router-calibrator.js +120 -0
- package/dist/src/ruvector/router-calibrator.js.map +1 -0
- package/dist/src/ruvector/router-parallel-recorder.d.ts +127 -0
- package/dist/src/ruvector/router-parallel-recorder.d.ts.map +1 -0
- package/dist/src/ruvector/router-parallel-recorder.js +183 -0
- package/dist/src/ruvector/router-parallel-recorder.js.map +1 -0
- package/dist/src/ruvector/router-trajectory.d.ts +137 -45
- package/dist/src/ruvector/router-trajectory.d.ts.map +1 -1
- package/dist/src/ruvector/router-trajectory.js +226 -63
- package/dist/src/ruvector/router-trajectory.js.map +1 -1
- package/dist/src/ruvector/task-embedder.d.ts +56 -0
- package/dist/src/ruvector/task-embedder.d.ts.map +1 -0
- package/dist/src/ruvector/task-embedder.js +237 -0
- package/dist/src/ruvector/task-embedder.js.map +1 -0
- package/dist/src/services/headless-worker-executor.js +84 -84
- package/dist/src/transfer/deploy-seraphine.js +23 -23
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +138 -134
- package/scripts/beir-bootstrap-significance.mjs +162 -162
- package/scripts/bench-rvagent.mjs +312 -312
- package/scripts/benchmark-codemods.mjs +127 -127
- package/scripts/benchmark-cross-repo.mjs +206 -206
- package/scripts/benchmark-pretrained-retrieval.mjs +305 -305
- package/scripts/benchmark-self-learning.mjs +241 -241
- package/scripts/benchmark-trajectory-mrr.mjs +191 -191
- package/scripts/deploy-ipfs-node.sh +153 -153
- package/scripts/grid-search-retrieval.mjs +216 -216
- package/scripts/postinstall.cjs +153 -153
- package/scripts/pretrain-from-github.mjs +358 -358
- package/scripts/publish-registry.ts +345 -345
- package/scripts/publish.sh +57 -57
- package/scripts/run-beir-bge.mjs +324 -324
- package/scripts/run-beir-hybrid.mjs +261 -261
- package/scripts/run-beir-lucene-bm25.mjs +154 -154
- package/scripts/run-beir-nfcorpus.mjs +231 -231
- package/scripts/run-beir-rrf-ablation.mjs +221 -221
- package/scripts/setup-ipfs-registry.md +366 -366
- package/dist/src/ruvector/flash-attention.d.ts +0 -195
- package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
- package/dist/src/ruvector/flash-attention.js +0 -643
- package/dist/src/ruvector/flash-attention.js.map +0 -1
- package/dist/src/ruvector/moe-router.d.ts +0 -206
- package/dist/src/ruvector/moe-router.d.ts.map +0 -1
- package/dist/src/ruvector/moe-router.js +0 -626
- package/dist/src/ruvector/moe-router.js.map +0 -1
- package/dist/src/services/event-stream.d.ts +0 -25
- package/dist/src/services/event-stream.js +0 -27
- package/dist/src/services/loop-worker-runner.d.ts +0 -16
- package/dist/src/services/loop-worker-runner.js +0 -34
- package/dist/src/services/runtime-capabilities.d.ts +0 -22
- package/dist/src/services/runtime-capabilities.js +0 -45
|
@@ -1,69 +1,161 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* router-trajectory.ts — Opt-in DRACO-shaped trajectory recorder for the
|
|
3
|
+
* cost-optimal model router (ADR-148, phase 5).
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* material for the Phase 2 FastGRNN tier-classifier. This sidecar captures
|
|
8
|
-
* the per-example rows that training needs:
|
|
5
|
+
* Writes one JSON-line per routing decision and one per outcome to a
|
|
6
|
+
* shared `.swarm/model-router-trajectories.jsonl`. Outcome rows are
|
|
7
|
+
* matched to their decision via `task_hash` (FNV-1a-32 of the task text).
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Gated behind `CLAUDE_FLOW_ROUTER_TRAJECTORY=1`. Default: **off** — rows
|
|
10
|
+
* carry full task text + raw embeddings, which is a PII/retention surface
|
|
11
|
+
* we do not enable without explicit consent.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* OFF by default. Enable with CLAUDE_FLOW_ROUTER_TRAJECTORY=1. Rows append to
|
|
17
|
-
* `.swarm/model-router-trajectories.jsonl` — local-only, same trust domain as
|
|
18
|
-
* the existing state file, but unlike it the rows contain full task text (up
|
|
19
|
-
* to 500 chars) and raw embeddings, which is why this is opt-in rather than
|
|
20
|
-
* always-on.
|
|
21
|
-
*
|
|
22
|
-
* Writes are best-effort: any fs error is swallowed (collection must never
|
|
23
|
-
* break routing), matching the state-file behavior in model-router.ts.
|
|
13
|
+
* Schema is versioned (`"v": 1`). New required fields bump the version;
|
|
14
|
+
* additive optional fields do not.
|
|
24
15
|
*
|
|
25
16
|
* @module router-trajectory
|
|
26
17
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
/** Join key: first 16 hex chars of sha256(task). */
|
|
30
|
-
export declare function taskHash(task: string): string;
|
|
18
|
+
import type { ClaudeModel } from './model-router.js';
|
|
19
|
+
/** A single routing decision — written at `route()` time. */
|
|
31
20
|
export interface TrajectoryDecisionRow {
|
|
32
|
-
v:
|
|
21
|
+
v: 1;
|
|
33
22
|
type: 'decision';
|
|
34
23
|
ts: string;
|
|
35
|
-
|
|
36
|
-
/** Task text, capped at 500 chars (cf. learningHistory's 100). */
|
|
24
|
+
task_hash: string;
|
|
37
25
|
task: string;
|
|
38
|
-
/** Raw embedding when one was threaded through route(); else omitted. */
|
|
39
26
|
embedding?: number[];
|
|
40
27
|
complexity: number;
|
|
41
|
-
|
|
42
|
-
lexicalComplexity: number;
|
|
43
|
-
semanticDepth: number;
|
|
44
|
-
taskScope: number;
|
|
45
|
-
uncertaintyLevel: number;
|
|
46
|
-
};
|
|
47
|
-
model: string;
|
|
28
|
+
model: ClaudeModel;
|
|
48
29
|
confidence: number;
|
|
49
30
|
uncertainty: number;
|
|
50
|
-
|
|
31
|
+
routed_by: 'hybrid' | 'bandit-fallback' | 'heuristic';
|
|
32
|
+
/** Underlying neural backend when routed_by='hybrid', else absent. */
|
|
33
|
+
neural_backend?: 'metaharness-knn' | 'metaharness-krr' | 'fastgrnn';
|
|
34
|
+
/**
|
|
35
|
+
* A/B mode (CLAUDE_FLOW_ROUTER_AB=1) attaches both the bandit-only pick
|
|
36
|
+
* and the hybrid pick so disagreement rate is measurable over time.
|
|
37
|
+
*/
|
|
38
|
+
ab_pair?: {
|
|
39
|
+
bandit_pick: ClaudeModel;
|
|
40
|
+
hybrid_pick: ClaudeModel;
|
|
41
|
+
disagree: boolean;
|
|
42
|
+
};
|
|
43
|
+
/** Execution provider hint (phase 2): 'anthropic' or 'openrouter'. */
|
|
44
|
+
provider?: 'anthropic' | 'openrouter';
|
|
45
|
+
/** Concrete OpenRouter model slug when provider=openrouter. */
|
|
46
|
+
openrouter_model?: string;
|
|
47
|
+
/**
|
|
48
|
+
* iter 46 — ensemble-disagreement diagnostic from iter 45. Absolute
|
|
49
|
+
* difference between unified KRR and bucket specialist predictions for
|
|
50
|
+
* the picked model. Set when both backends were queried (bucket
|
|
51
|
+
* specialist available + bucket supplied). Persisting per-decision lets
|
|
52
|
+
* a future tuner analyze the distribution and recommend an iter 44
|
|
53
|
+
* threshold.
|
|
54
|
+
*/
|
|
55
|
+
ensemble_disagreement?: number;
|
|
51
56
|
}
|
|
57
|
+
/** A routing outcome — written later by the caller via `recordOutcome()`. */
|
|
52
58
|
export interface TrajectoryOutcomeRow {
|
|
53
|
-
v:
|
|
59
|
+
v: 1;
|
|
54
60
|
type: 'outcome';
|
|
55
61
|
ts: string;
|
|
56
|
-
|
|
57
|
-
model
|
|
58
|
-
|
|
62
|
+
task_hash: string;
|
|
63
|
+
/** 0..1 measured quality the chosen model achieved. */
|
|
64
|
+
quality: number;
|
|
65
|
+
/** Optional per-model quality if the same query was evaluated against alternates. */
|
|
66
|
+
scores?: Record<string, number>;
|
|
67
|
+
/** Free-form provenance note (e.g. "manual rating", "benchmark suite"). */
|
|
68
|
+
source?: string;
|
|
69
|
+
/**
|
|
70
|
+
* iter 31 — token usage from the underlying API response. Optional and
|
|
71
|
+
* additive: pre-iter-31 readers see undefined; iter-31+ consumers can
|
|
72
|
+
* sum these for production cost accounting. `modelId` is repeated here
|
|
73
|
+
* (also in the paired decision row) so cost computation needs only the
|
|
74
|
+
* outcome row — no JOIN required for streaming aggregation.
|
|
75
|
+
*/
|
|
76
|
+
tokens?: {
|
|
77
|
+
input: number;
|
|
78
|
+
output: number;
|
|
79
|
+
};
|
|
80
|
+
/** USD spend for this call. Computed at write time from `tokens` + the
|
|
81
|
+
* shared price table (model-prices.ts) so consumers get a canonical
|
|
82
|
+
* number even if prices change between write and read. */
|
|
83
|
+
cost_usd?: number;
|
|
84
|
+
/** Concrete model id the call dispatched against (iter 13+ wired this
|
|
85
|
+
* through agent.modelId). May differ from the bandit's tier label. */
|
|
86
|
+
model_id?: string;
|
|
59
87
|
}
|
|
60
|
-
export
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
88
|
+
export type TrajectoryRow = TrajectoryDecisionRow | TrajectoryOutcomeRow;
|
|
89
|
+
export declare function taskHash(task: string): string;
|
|
90
|
+
/** Record one decision. Cheap — a single appendFileSync of a JSONL row. */
|
|
91
|
+
export declare function recordDecision(args: {
|
|
92
|
+
task: string;
|
|
93
|
+
embedding?: number[];
|
|
94
|
+
complexity: number;
|
|
95
|
+
model: ClaudeModel;
|
|
64
96
|
confidence: number;
|
|
65
97
|
uncertainty: number;
|
|
66
|
-
routedBy:
|
|
98
|
+
routedBy: TrajectoryDecisionRow['routed_by'];
|
|
99
|
+
neuralBackend?: TrajectoryDecisionRow['neural_backend'];
|
|
100
|
+
abPair?: TrajectoryDecisionRow['ab_pair'];
|
|
101
|
+
provider?: TrajectoryDecisionRow['provider'];
|
|
102
|
+
openrouterModel?: TrajectoryDecisionRow['openrouter_model'];
|
|
103
|
+
/** iter 46 — optional ensemble disagreement diagnostic (iter 45). */
|
|
104
|
+
ensembleDisagreement?: number;
|
|
105
|
+
}): void;
|
|
106
|
+
/** Record one outcome. Join to a decision by `task_hash`. */
|
|
107
|
+
export declare function recordTrajectoryOutcome(args: {
|
|
108
|
+
task: string;
|
|
109
|
+
quality: number;
|
|
110
|
+
scores?: Record<string, number>;
|
|
111
|
+
source?: string;
|
|
112
|
+
/** iter 31 — optional token usage from the underlying API call. */
|
|
113
|
+
tokens?: {
|
|
114
|
+
input: number;
|
|
115
|
+
output: number;
|
|
116
|
+
};
|
|
117
|
+
/** iter 31 — concrete model id for cost computation against MODEL_PRICES. */
|
|
118
|
+
modelId?: string;
|
|
67
119
|
}): void;
|
|
68
|
-
|
|
120
|
+
/** Diagnostic for status/CLI. */
|
|
121
|
+
export declare function trajectoryRecorderStatus(): {
|
|
122
|
+
enabled: boolean;
|
|
123
|
+
path: string;
|
|
124
|
+
taskCharLimit: number;
|
|
125
|
+
};
|
|
126
|
+
/** A training row reconstructed from one decision+outcome pair. Shape matches
|
|
127
|
+
* the bundled seed-corpus (`seed-rows.json`) so the same train-bundled-krr.mjs
|
|
128
|
+
* pipeline can consume it. */
|
|
129
|
+
export interface PairedTrainingRow {
|
|
130
|
+
task: string;
|
|
131
|
+
embedding: number[];
|
|
132
|
+
scores: Record<string, number>;
|
|
133
|
+
tier: 'cheap' | 'mid' | 'strong';
|
|
134
|
+
/** Provenance — useful for filtering low-signal sources at training time. */
|
|
135
|
+
source: string;
|
|
136
|
+
/** ISO timestamp of the outcome row (newer rows can be weighted higher). */
|
|
137
|
+
ts: string;
|
|
138
|
+
}
|
|
139
|
+
/** Map decision-side complexity ∈ [0,1] back to the corpus tier label. The
|
|
140
|
+
* buckets are deliberately the same boundaries the bandit uses so a pair
|
|
141
|
+
* drawn from production lands in the same KRR specialist that served it. */
|
|
142
|
+
export declare function tierFromComplexity(complexity: number): 'cheap' | 'mid' | 'strong';
|
|
143
|
+
/** Pair decision+outcome rows by task_hash. Returns the rebuilt training rows
|
|
144
|
+
* + diagnostics so the caller (script or test) can report what was dropped
|
|
145
|
+
* and why. */
|
|
146
|
+
export declare function pairTrajectoryRows(rows: TrajectoryRow[]): {
|
|
147
|
+
pairs: PairedTrainingRow[];
|
|
148
|
+
stats: {
|
|
149
|
+
totalRows: number;
|
|
150
|
+
decisions: number;
|
|
151
|
+
outcomes: number;
|
|
152
|
+
paired: number;
|
|
153
|
+
droppedNoEmbedding: number;
|
|
154
|
+
droppedNoMatch: number;
|
|
155
|
+
bySource: Record<string, number>;
|
|
156
|
+
byTier: Record<string, number>;
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
/** Test seam — reset cached config so unit tests can change env vars between cases. */
|
|
160
|
+
export declare function __resetTrajectoryRecorderForTests(): void;
|
|
69
161
|
//# sourceMappingURL=router-trajectory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-trajectory.d.ts","sourceRoot":"","sources":["../../../src/ruvector/router-trajectory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"router-trajectory.d.ts","sourceRoot":"","sources":["../../../src/ruvector/router-trajectory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,87 +1,250 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* router-trajectory.ts — Opt-in DRACO-shaped trajectory recorder for the
|
|
3
|
+
* cost-optimal model router (ADR-148, phase 5).
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* material for the Phase 2 FastGRNN tier-classifier. This sidecar captures
|
|
8
|
-
* the per-example rows that training needs:
|
|
5
|
+
* Writes one JSON-line per routing decision and one per outcome to a
|
|
6
|
+
* shared `.swarm/model-router-trajectories.jsonl`. Outcome rows are
|
|
7
|
+
* matched to their decision via `task_hash` (FNV-1a-32 of the task text).
|
|
9
8
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Gated behind `CLAUDE_FLOW_ROUTER_TRAJECTORY=1`. Default: **off** — rows
|
|
10
|
+
* carry full task text + raw embeddings, which is a PII/retention surface
|
|
11
|
+
* we do not enable without explicit consent.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* OFF by default. Enable with CLAUDE_FLOW_ROUTER_TRAJECTORY=1. Rows append to
|
|
17
|
-
* `.swarm/model-router-trajectories.jsonl` — local-only, same trust domain as
|
|
18
|
-
* the existing state file, but unlike it the rows contain full task text (up
|
|
19
|
-
* to 500 chars) and raw embeddings, which is why this is opt-in rather than
|
|
20
|
-
* always-on.
|
|
21
|
-
*
|
|
22
|
-
* Writes are best-effort: any fs error is swallowed (collection must never
|
|
23
|
-
* break routing), matching the state-file behavior in model-router.ts.
|
|
13
|
+
* Schema is versioned (`"v": 1`). New required fields bump the version;
|
|
14
|
+
* additive optional fields do not.
|
|
24
15
|
*
|
|
25
16
|
* @module router-trajectory
|
|
26
17
|
*/
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
export function trajectoryCollectionEnabled() {
|
|
34
|
-
return process.env.CLAUDE_FLOW_ROUTER_TRAJECTORY === '1';
|
|
35
|
-
}
|
|
36
|
-
/** Join key: first 16 hex chars of sha256(task). */
|
|
18
|
+
import { appendFileSync, mkdirSync, existsSync, statSync, renameSync, unlinkSync } from 'node:fs';
|
|
19
|
+
import { dirname, join, resolve as resolvePath } from 'node:path';
|
|
20
|
+
import { costUsd } from './model-prices.js';
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// FNV-1a-32 (matches scripts/gen-seed-corpus.mjs)
|
|
23
|
+
// ============================================================================
|
|
37
24
|
export function taskHash(task) {
|
|
38
|
-
|
|
25
|
+
let h = 0x811c9dc5 >>> 0;
|
|
26
|
+
for (let i = 0; i < task.length; i++) {
|
|
27
|
+
h ^= task.charCodeAt(i);
|
|
28
|
+
h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;
|
|
29
|
+
}
|
|
30
|
+
return h.toString(16).padStart(8, '0');
|
|
31
|
+
}
|
|
32
|
+
let _cfg = null;
|
|
33
|
+
/** Cached size of the current file; updated incrementally on each append to
|
|
34
|
+
* avoid a `statSync` per write. -1 means "unknown, probe on next append". */
|
|
35
|
+
let _cachedSize = -1;
|
|
36
|
+
function getConfig() {
|
|
37
|
+
if (_cfg !== null)
|
|
38
|
+
return _cfg;
|
|
39
|
+
const enabled = process.env.CLAUDE_FLOW_ROUTER_TRAJECTORY === '1';
|
|
40
|
+
const swarmDir = process.env.CLAUDE_FLOW_SWARM_DIR
|
|
41
|
+
?? resolvePath(process.cwd(), '.swarm');
|
|
42
|
+
_cfg = {
|
|
43
|
+
enabled,
|
|
44
|
+
path: process.env.CLAUDE_FLOW_ROUTER_TRAJECTORY_PATH
|
|
45
|
+
?? join(swarmDir, 'model-router-trajectories.jsonl'),
|
|
46
|
+
taskCharLimit: parseInt(process.env.CLAUDE_FLOW_ROUTER_TRAJECTORY_TASKLEN ?? '500', 10) || 500,
|
|
47
|
+
maxSizeBytes: parseInt(process.env.CLAUDE_FLOW_ROUTER_TRAJECTORY_MAXSIZE ?? `${10 * 1024 * 1024}`, 10) | 0,
|
|
48
|
+
maxRotations: Math.max(0, parseInt(process.env.CLAUDE_FLOW_ROUTER_TRAJECTORY_MAXROTATIONS ?? '3', 10) || 3),
|
|
49
|
+
};
|
|
50
|
+
return _cfg;
|
|
51
|
+
}
|
|
52
|
+
/** Rotate `path` → `path.1`, `path.1` → `path.2`, ..., dropping the oldest. */
|
|
53
|
+
function rotate(cfg) {
|
|
54
|
+
if (!existsSync(cfg.path))
|
|
55
|
+
return;
|
|
56
|
+
try {
|
|
57
|
+
// Walk from oldest to newest so each rename has a free target.
|
|
58
|
+
if (cfg.maxRotations === 0) {
|
|
59
|
+
// No history kept — just truncate by deleting.
|
|
60
|
+
unlinkSync(cfg.path);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const oldest = `${cfg.path}.${cfg.maxRotations}`;
|
|
64
|
+
if (existsSync(oldest))
|
|
65
|
+
unlinkSync(oldest);
|
|
66
|
+
for (let i = cfg.maxRotations - 1; i >= 1; i--) {
|
|
67
|
+
const src = `${cfg.path}.${i}`;
|
|
68
|
+
if (existsSync(src))
|
|
69
|
+
renameSync(src, `${cfg.path}.${i + 1}`);
|
|
70
|
+
}
|
|
71
|
+
renameSync(cfg.path, `${cfg.path}.1`);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// If rotation fails (permissions, race), drop back to overwriting the
|
|
75
|
+
// active file by truncating its handle. Worst case we lose history.
|
|
76
|
+
try {
|
|
77
|
+
unlinkSync(cfg.path);
|
|
78
|
+
}
|
|
79
|
+
catch { /* */ }
|
|
80
|
+
}
|
|
81
|
+
_cachedSize = 0;
|
|
39
82
|
}
|
|
40
83
|
function appendRow(row) {
|
|
84
|
+
const cfg = getConfig();
|
|
85
|
+
if (!cfg.enabled)
|
|
86
|
+
return;
|
|
41
87
|
try {
|
|
42
|
-
const
|
|
43
|
-
const dir = dirname(fullPath);
|
|
88
|
+
const dir = dirname(cfg.path);
|
|
44
89
|
if (!existsSync(dir))
|
|
45
90
|
mkdirSync(dir, { recursive: true });
|
|
46
|
-
|
|
91
|
+
// Probe size lazily on first call this process, then track incrementally.
|
|
92
|
+
if (_cachedSize < 0) {
|
|
93
|
+
_cachedSize = existsSync(cfg.path) ? statSync(cfg.path).size : 0;
|
|
94
|
+
}
|
|
95
|
+
// One JSON object per line, newline-terminated. No leading whitespace —
|
|
96
|
+
// we want the file to be `jq -c`-friendly.
|
|
97
|
+
const line = JSON.stringify(row) + '\n';
|
|
98
|
+
const bytes = Buffer.byteLength(line, 'utf8');
|
|
99
|
+
// Rotate BEFORE writing if this row would push us past the cap.
|
|
100
|
+
if (cfg.maxSizeBytes > 0 && _cachedSize + bytes > cfg.maxSizeBytes) {
|
|
101
|
+
rotate(cfg);
|
|
102
|
+
}
|
|
103
|
+
appendFileSync(cfg.path, line);
|
|
104
|
+
_cachedSize += bytes;
|
|
47
105
|
}
|
|
48
106
|
catch {
|
|
49
|
-
//
|
|
107
|
+
// Silent: trajectory collection must never break routing.
|
|
50
108
|
}
|
|
51
109
|
}
|
|
52
|
-
|
|
53
|
-
|
|
110
|
+
// ============================================================================
|
|
111
|
+
// Public API
|
|
112
|
+
// ============================================================================
|
|
113
|
+
/** Record one decision. Cheap — a single appendFileSync of a JSONL row. */
|
|
114
|
+
export function recordDecision(args) {
|
|
115
|
+
const cfg = getConfig();
|
|
116
|
+
if (!cfg.enabled)
|
|
54
117
|
return;
|
|
55
|
-
|
|
56
|
-
v:
|
|
57
|
-
type: 'decision',
|
|
118
|
+
const row = {
|
|
119
|
+
v: 1, type: 'decision',
|
|
58
120
|
ts: new Date().toISOString(),
|
|
59
|
-
|
|
60
|
-
task: task.slice(0,
|
|
61
|
-
|
|
62
|
-
complexity: complexity
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
121
|
+
task_hash: taskHash(args.task),
|
|
122
|
+
task: args.task.length > cfg.taskCharLimit ? args.task.slice(0, cfg.taskCharLimit) : args.task,
|
|
123
|
+
embedding: args.embedding,
|
|
124
|
+
complexity: args.complexity,
|
|
125
|
+
model: args.model,
|
|
126
|
+
confidence: args.confidence,
|
|
127
|
+
uncertainty: args.uncertainty,
|
|
128
|
+
routed_by: args.routedBy,
|
|
129
|
+
...(args.neuralBackend ? { neural_backend: args.neuralBackend } : {}),
|
|
130
|
+
...(args.abPair ? { ab_pair: args.abPair } : {}),
|
|
131
|
+
...(args.provider ? { provider: args.provider } : {}),
|
|
132
|
+
...(args.openrouterModel ? { openrouter_model: args.openrouterModel } : {}),
|
|
133
|
+
...(args.ensembleDisagreement !== undefined ? { ensemble_disagreement: args.ensembleDisagreement } : {}),
|
|
134
|
+
};
|
|
135
|
+
appendRow(row);
|
|
74
136
|
}
|
|
75
|
-
|
|
76
|
-
|
|
137
|
+
/** Record one outcome. Join to a decision by `task_hash`. */
|
|
138
|
+
export function recordTrajectoryOutcome(args) {
|
|
139
|
+
const cfg = getConfig();
|
|
140
|
+
if (!cfg.enabled)
|
|
77
141
|
return;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
142
|
+
// iter 31 — compute USD spend at write time using the canonical price
|
|
143
|
+
// table. Cost is a first-class field so consumers don't need to JOIN
|
|
144
|
+
// against the decision row (which may live in a rotated file).
|
|
145
|
+
const cost_usd = args.tokens && (args.tokens.input > 0 || args.tokens.output > 0)
|
|
146
|
+
? costUsd(args.modelId, args.tokens.input, args.tokens.output)
|
|
147
|
+
: undefined;
|
|
148
|
+
const row = {
|
|
149
|
+
v: 1, type: 'outcome',
|
|
81
150
|
ts: new Date().toISOString(),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
151
|
+
task_hash: taskHash(args.task),
|
|
152
|
+
quality: args.quality,
|
|
153
|
+
scores: args.scores,
|
|
154
|
+
source: args.source,
|
|
155
|
+
...(args.tokens ? { tokens: args.tokens } : {}),
|
|
156
|
+
...(cost_usd != null ? { cost_usd } : {}),
|
|
157
|
+
...(args.modelId ? { model_id: args.modelId } : {}),
|
|
158
|
+
};
|
|
159
|
+
appendRow(row);
|
|
160
|
+
}
|
|
161
|
+
/** Diagnostic for status/CLI. */
|
|
162
|
+
export function trajectoryRecorderStatus() {
|
|
163
|
+
return { ...getConfig() };
|
|
164
|
+
}
|
|
165
|
+
/** Map decision-side complexity ∈ [0,1] back to the corpus tier label. The
|
|
166
|
+
* buckets are deliberately the same boundaries the bandit uses so a pair
|
|
167
|
+
* drawn from production lands in the same KRR specialist that served it. */
|
|
168
|
+
export function tierFromComplexity(complexity) {
|
|
169
|
+
if (complexity < 0.34)
|
|
170
|
+
return 'cheap';
|
|
171
|
+
if (complexity < 0.67)
|
|
172
|
+
return 'mid';
|
|
173
|
+
return 'strong';
|
|
174
|
+
}
|
|
175
|
+
/** Pair decision+outcome rows by task_hash. Returns the rebuilt training rows
|
|
176
|
+
* + diagnostics so the caller (script or test) can report what was dropped
|
|
177
|
+
* and why. */
|
|
178
|
+
export function pairTrajectoryRows(rows) {
|
|
179
|
+
const decisions = new Map();
|
|
180
|
+
const outcomes = new Map();
|
|
181
|
+
// Latest-wins per hash. Production may re-run the same task — using the most
|
|
182
|
+
// recent outcome avoids polluting the corpus with stale judgments.
|
|
183
|
+
let dCount = 0, oCount = 0;
|
|
184
|
+
for (const row of rows) {
|
|
185
|
+
if (row.type === 'decision') {
|
|
186
|
+
dCount++;
|
|
187
|
+
const prev = decisions.get(row.task_hash);
|
|
188
|
+
if (!prev || row.ts > prev.ts)
|
|
189
|
+
decisions.set(row.task_hash, row);
|
|
190
|
+
}
|
|
191
|
+
else if (row.type === 'outcome') {
|
|
192
|
+
oCount++;
|
|
193
|
+
const prev = outcomes.get(row.task_hash);
|
|
194
|
+
if (!prev || row.ts > prev.ts)
|
|
195
|
+
outcomes.set(row.task_hash, row);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const pairs = [];
|
|
199
|
+
const bySource = {};
|
|
200
|
+
const byTier = {};
|
|
201
|
+
let droppedNoEmbedding = 0;
|
|
202
|
+
let droppedNoMatch = 0;
|
|
203
|
+
for (const [hash, dec] of decisions) {
|
|
204
|
+
const out = outcomes.get(hash);
|
|
205
|
+
if (!out) {
|
|
206
|
+
droppedNoMatch++;
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (!dec.embedding || dec.embedding.length === 0) {
|
|
210
|
+
droppedNoEmbedding++;
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
// scores map: prefer the outcome's full per-model map (set by callers who
|
|
214
|
+
// ran multi-model comparisons); fall back to a single-model entry derived
|
|
215
|
+
// from the model the decision actually dispatched.
|
|
216
|
+
const scores = out.scores
|
|
217
|
+
?? { [dec.openrouter_model ?? dec.model]: out.quality };
|
|
218
|
+
const tier = tierFromComplexity(dec.complexity);
|
|
219
|
+
const source = out.source ?? 'unknown';
|
|
220
|
+
pairs.push({
|
|
221
|
+
task: dec.task,
|
|
222
|
+
embedding: dec.embedding,
|
|
223
|
+
scores,
|
|
224
|
+
tier,
|
|
225
|
+
source,
|
|
226
|
+
ts: out.ts,
|
|
227
|
+
});
|
|
228
|
+
bySource[source] = (bySource[source] ?? 0) + 1;
|
|
229
|
+
byTier[tier] = (byTier[tier] ?? 0) + 1;
|
|
230
|
+
}
|
|
231
|
+
return {
|
|
232
|
+
pairs,
|
|
233
|
+
stats: {
|
|
234
|
+
totalRows: rows.length,
|
|
235
|
+
decisions: dCount,
|
|
236
|
+
outcomes: oCount,
|
|
237
|
+
paired: pairs.length,
|
|
238
|
+
droppedNoEmbedding,
|
|
239
|
+
droppedNoMatch,
|
|
240
|
+
bySource,
|
|
241
|
+
byTier,
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/** Test seam — reset cached config so unit tests can change env vars between cases. */
|
|
246
|
+
export function __resetTrajectoryRecorderForTests() {
|
|
247
|
+
_cfg = null;
|
|
248
|
+
_cachedSize = -1;
|
|
86
249
|
}
|
|
87
250
|
//# sourceMappingURL=router-trajectory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-trajectory.js","sourceRoot":"","sources":["../../../src/ruvector/router-trajectory.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"router-trajectory.js","sourceRoot":"","sources":["../../../src/ruvector/router-trajectory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* task-embedder.ts — Shared lazy task embedder + LRU cache (ADR-149 iter 9).
|
|
3
|
+
*
|
|
4
|
+
* The cost-optimal neural router (ADR-149) fires only when `route(task, embedding)`
|
|
5
|
+
* is called with a real embedding. Two call sites in the dispatcher chain need
|
|
6
|
+
* embeddings: `agent-tools.ts` (initial routing) and `agent-execute-core.ts`
|
|
7
|
+
* (the fallback chain on 429/5xx). Before this module they each loaded their
|
|
8
|
+
* own @xenova/transformers MiniLM pipeline and recomputed embeddings on every
|
|
9
|
+
* call — including for repeated prompts.
|
|
10
|
+
*
|
|
11
|
+
* This module:
|
|
12
|
+
* 1. Loads the pipeline once per process (`loadTaskEmbedder`).
|
|
13
|
+
* 2. Caches embeddings per task text via an LRU of configurable size
|
|
14
|
+
* (default 500 entries ≈ 1.5 MB at 384-dim).
|
|
15
|
+
* 3. Hashes by FNV-1a-32 + length to keep the key compact and collision-safe
|
|
16
|
+
* for typical prompt sizes.
|
|
17
|
+
* 4. Returns `undefined` on any failure so callers gracefully fall back to
|
|
18
|
+
* the heuristic+bandit path.
|
|
19
|
+
*
|
|
20
|
+
* @module task-embedder
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Compute (or fetch from cache) the 384-dim MiniLM embedding for `task`.
|
|
24
|
+
* Returns `undefined` on any failure (missing @xenova/transformers, ONNX
|
|
25
|
+
* runtime error, etc.) so callers can gracefully fall back to the
|
|
26
|
+
* heuristic+bandit path. Best-effort and never throws.
|
|
27
|
+
*
|
|
28
|
+
* Cache hit-rate accumulates across the process lifetime and is observable
|
|
29
|
+
* via `embedderStats()` for diagnostics.
|
|
30
|
+
*/
|
|
31
|
+
export declare function embedTaskWithCache(task: string): Promise<number[] | undefined>;
|
|
32
|
+
/**
|
|
33
|
+
* Batch counterpart to `embedTaskWithCache`. For each task, returns the
|
|
34
|
+
* cached embedding when present, else schedules a fresh inference. The
|
|
35
|
+
* fresh-inference set is computed in a SINGLE ONNX pass via
|
|
36
|
+
* @xenova/transformers' array-input mode, amortizing tensor setup +
|
|
37
|
+
* model-load overhead across the batch. Order of the output array
|
|
38
|
+
* matches the input order.
|
|
39
|
+
*
|
|
40
|
+
* Returns `undefined` for any task that failed to embed (missing dep,
|
|
41
|
+
* runtime error). Cache state updates as if each task had been called
|
|
42
|
+
* separately through embedTaskWithCache (hits/misses counters update
|
|
43
|
+
* accordingly).
|
|
44
|
+
*/
|
|
45
|
+
export declare function embedTaskWithCacheBatch(tasks: string[]): Promise<Array<number[] | undefined>>;
|
|
46
|
+
/** Diagnostic surface — hit/miss counters + cache state. */
|
|
47
|
+
export declare function embedderStats(): {
|
|
48
|
+
size: number;
|
|
49
|
+
maxSize: number;
|
|
50
|
+
hits: number;
|
|
51
|
+
misses: number;
|
|
52
|
+
hitRate: number;
|
|
53
|
+
};
|
|
54
|
+
/** Test seam — clear LRU + counters so tests get a fresh baseline. */
|
|
55
|
+
export declare function __resetTaskEmbedderForTests(): void;
|
|
56
|
+
//# sourceMappingURL=task-embedder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-embedder.d.ts","sourceRoot":"","sources":["../../../src/ruvector/task-embedder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAuHH;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAkBpF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CA2CnG;AAED,4DAA4D;AAC5D,wBAAgB,aAAa,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAShH;AAED,sEAAsE;AACtE,wBAAgB,2BAA2B,IAAI,IAAI,CAKlD"}
|