@claude-flow/cli 3.10.45 → 3.11.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/capability-tasks.d.ts +126 -0
- package/dist/src/benchmarks/capability-tasks.d.ts.map +1 -0
- package/dist/src/benchmarks/capability-tasks.js +147 -0
- package/dist/src/benchmarks/capability-tasks.js.map +1 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts +53 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.js +177 -0
- package/dist/src/benchmarks/gaia-agent-contrastive.js.map +1 -0
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts +51 -0
- package/dist/src/benchmarks/gaia-agent-gemini.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-agent-gemini.js +352 -0
- package/dist/src/benchmarks/gaia-agent-gemini.js.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.d.ts +105 -0
- package/dist/src/benchmarks/gaia-claude-p.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.js +269 -0
- package/dist/src/benchmarks/gaia-claude-p.js.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.js +168 -0
- package/dist/src/benchmarks/gaia-claude-p.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent-runner.py +556 -0
- package/dist/src/benchmarks/gaia-codeagent.d.ts +129 -0
- package/dist/src/benchmarks/gaia-codeagent.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent.js +590 -0
- package/dist/src/benchmarks/gaia-codeagent.js.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts +33 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.js +241 -0
- package/dist/src/benchmarks/gaia-codeagent.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-critic.js +24 -24
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts +22 -0
- package/dist/src/benchmarks/gaia-dag-pilot.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-dag-pilot.js +158 -0
- package/dist/src/benchmarks/gaia-dag-pilot.js.map +1 -0
- package/dist/src/benchmarks/gaia-dag.d.ts +110 -0
- package/dist/src/benchmarks/gaia-dag.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-dag.js +658 -0
- package/dist/src/benchmarks/gaia-dag.js.map +1 -0
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-dag.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-dag.smoke.js +290 -0
- package/dist/src/benchmarks/gaia-dag.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts +17 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.js +106 -0
- package/dist/src/benchmarks/gaia-ensemble-pilot.js.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble.d.ts +103 -0
- package/dist/src/benchmarks/gaia-ensemble.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-ensemble.js +462 -0
- package/dist/src/benchmarks/gaia-ensemble.js.map +1 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts +17 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.js +168 -0
- package/dist/src/benchmarks/gaia-gemini-pilot.js.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.d.ts +67 -0
- package/dist/src/benchmarks/gaia-mode-router.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.js +126 -0
- package/dist/src/benchmarks/gaia-mode-router.js.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts +15 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.js +131 -0
- package/dist/src/benchmarks/gaia-mode-router.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts +24 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js +276 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts +45 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.js +222 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts +24 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js +169 -0
- package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts +27 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.js +226 -0
- package/dist/src/benchmarks/gaia-tools/pdf_read.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts +31 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.js +94 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts +13 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js +98 -0
- package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts +52 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js +304 -0
- package/dist/src/benchmarks/gaia-tools/visit_webpage.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts +61 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.js +217 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts +26 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js +152 -0
- package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts +24 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js +311 -0
- package/dist/src/benchmarks/gaia-tools/web_search.smoke.js.map +1 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts +25 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts.map +1 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js +304 -0
- package/dist/src/benchmarks/gaia-visit-webpage.smoke.js.map +1 -0
- package/dist/src/commands/completions.js +409 -409
- package/dist/src/commands/daemon.js +44 -44
- package/dist/src/commands/embeddings.js +26 -26
- package/dist/src/commands/hive-mind.js +97 -97
- package/dist/src/commands/hooks.js +9 -9
- 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/performance-capability.d.ts +30 -0
- package/dist/src/commands/performance-capability.d.ts.map +1 -0
- package/dist/src/commands/performance-capability.js +349 -0
- package/dist/src/commands/performance-capability.js.map +1 -0
- 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/commands/swarm.d.ts.map +1 -1
- package/dist/src/commands/swarm.js +5 -1
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/init/claudemd-generator.js +231 -231
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +487 -455
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.js +727 -727
- package/dist/src/init/statusline-generator.js +717 -717
- 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/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/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 +418 -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-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/container-worker-pool.d.ts +8 -1
- package/dist/src/services/container-worker-pool.d.ts.map +1 -1
- package/dist/src/services/container-worker-pool.js +9 -3
- package/dist/src/services/container-worker-pool.js.map +1 -1
- 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 +136 -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,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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
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
|
+
// FNV-1a-32 hash (matches scripts/gen-seed-corpus.mjs + router-trajectory.ts)
|
|
24
|
+
// ============================================================================
|
|
25
|
+
function fnv1a32(s) {
|
|
26
|
+
let h = 0x811c9dc5 >>> 0;
|
|
27
|
+
for (let i = 0; i < s.length; i++) {
|
|
28
|
+
h ^= s.charCodeAt(i);
|
|
29
|
+
h = (h + ((h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24))) >>> 0;
|
|
30
|
+
}
|
|
31
|
+
return h.toString(16).padStart(8, '0');
|
|
32
|
+
}
|
|
33
|
+
/** Compact cache key — hash + length so distinct prompts of similar shape collide rarely. */
|
|
34
|
+
function cacheKey(task) {
|
|
35
|
+
return `${fnv1a32(task)}:${task.length}`;
|
|
36
|
+
}
|
|
37
|
+
// Single shared extractor. Both single-text and array-input modes call this
|
|
38
|
+
// same function (xenova's pipeline returns a callable that accepts either),
|
|
39
|
+
// so we don't pay the ONNX model-load cost twice.
|
|
40
|
+
let _extractorPromise = null;
|
|
41
|
+
function loadExtractor() {
|
|
42
|
+
if (_extractorPromise !== null)
|
|
43
|
+
return _extractorPromise;
|
|
44
|
+
_extractorPromise = (async () => {
|
|
45
|
+
try {
|
|
46
|
+
const specifier = '@xenova/transformers';
|
|
47
|
+
const mod = await import(/* @vite-ignore */ specifier).catch(() => null);
|
|
48
|
+
if (!mod || typeof mod.pipeline !== 'function')
|
|
49
|
+
return null;
|
|
50
|
+
return await mod.pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2', { quantized: true });
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
})();
|
|
56
|
+
return _extractorPromise;
|
|
57
|
+
}
|
|
58
|
+
async function loadEmbedder() {
|
|
59
|
+
const ex = await loadExtractor();
|
|
60
|
+
if (!ex)
|
|
61
|
+
return null;
|
|
62
|
+
return async (text) => {
|
|
63
|
+
const out = await ex(text, { pooling: 'mean', normalize: true });
|
|
64
|
+
return Array.from(out.data);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Array-input batch embedder — xenova's pipeline accepts `string[]` and
|
|
69
|
+
* returns a stacked tensor of shape `[N, dim]`. Shares the same loaded
|
|
70
|
+
* pipeline with `loadEmbedder` so cold-load cost is paid once across
|
|
71
|
+
* single + batch usage. Measured speedup: ~1.83× on 30-task batches
|
|
72
|
+
* against the same-pipeline single-call loop.
|
|
73
|
+
*/
|
|
74
|
+
async function loadEmbedderBatch() {
|
|
75
|
+
const ex = await loadExtractor();
|
|
76
|
+
if (!ex)
|
|
77
|
+
return null;
|
|
78
|
+
return async (texts) => {
|
|
79
|
+
const out = await ex(texts, { pooling: 'mean', normalize: true });
|
|
80
|
+
const dims = out.dims ?? [texts.length, 384];
|
|
81
|
+
const N = dims[0] ?? texts.length;
|
|
82
|
+
const dim = dims[1] ?? Math.floor(out.data.length / N);
|
|
83
|
+
const data = out.data;
|
|
84
|
+
const result = new Array(N);
|
|
85
|
+
for (let i = 0; i < N; i++) {
|
|
86
|
+
result[i] = Array.from(data.subarray(i * dim, (i + 1) * dim));
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// LRU cache — Map preserves insertion order, so delete+set on hit = O(1) LRU
|
|
93
|
+
// ============================================================================
|
|
94
|
+
const MAX_SIZE = (() => {
|
|
95
|
+
const v = parseInt(process.env.CLAUDE_FLOW_ROUTER_EMBED_CACHE_SIZE ?? '500', 10);
|
|
96
|
+
return Number.isFinite(v) && v >= 0 ? v : 500;
|
|
97
|
+
})();
|
|
98
|
+
const _cache = new Map();
|
|
99
|
+
let _hits = 0;
|
|
100
|
+
let _misses = 0;
|
|
101
|
+
function lruGet(key) {
|
|
102
|
+
const hit = _cache.get(key);
|
|
103
|
+
if (hit === undefined)
|
|
104
|
+
return undefined;
|
|
105
|
+
// Refresh recency: re-insert at the end.
|
|
106
|
+
_cache.delete(key);
|
|
107
|
+
_cache.set(key, hit);
|
|
108
|
+
return hit;
|
|
109
|
+
}
|
|
110
|
+
function lruSet(key, value) {
|
|
111
|
+
if (MAX_SIZE === 0)
|
|
112
|
+
return;
|
|
113
|
+
if (_cache.has(key))
|
|
114
|
+
_cache.delete(key);
|
|
115
|
+
_cache.set(key, value);
|
|
116
|
+
while (_cache.size > MAX_SIZE) {
|
|
117
|
+
const oldest = _cache.keys().next().value;
|
|
118
|
+
if (oldest === undefined)
|
|
119
|
+
break;
|
|
120
|
+
_cache.delete(oldest);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ============================================================================
|
|
124
|
+
// Public API
|
|
125
|
+
// ============================================================================
|
|
126
|
+
/**
|
|
127
|
+
* Compute (or fetch from cache) the 384-dim MiniLM embedding for `task`.
|
|
128
|
+
* Returns `undefined` on any failure (missing @xenova/transformers, ONNX
|
|
129
|
+
* runtime error, etc.) so callers can gracefully fall back to the
|
|
130
|
+
* heuristic+bandit path. Best-effort and never throws.
|
|
131
|
+
*
|
|
132
|
+
* Cache hit-rate accumulates across the process lifetime and is observable
|
|
133
|
+
* via `embedderStats()` for diagnostics.
|
|
134
|
+
*/
|
|
135
|
+
export async function embedTaskWithCache(task) {
|
|
136
|
+
if (typeof task !== 'string' || task.length === 0)
|
|
137
|
+
return undefined;
|
|
138
|
+
const key = cacheKey(task);
|
|
139
|
+
const cached = lruGet(key);
|
|
140
|
+
if (cached !== undefined) {
|
|
141
|
+
_hits++;
|
|
142
|
+
return cached;
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const embed = await loadEmbedder();
|
|
146
|
+
if (!embed)
|
|
147
|
+
return undefined;
|
|
148
|
+
const v = await embed(task);
|
|
149
|
+
lruSet(key, v);
|
|
150
|
+
_misses++;
|
|
151
|
+
return v;
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Batch counterpart to `embedTaskWithCache`. For each task, returns the
|
|
159
|
+
* cached embedding when present, else schedules a fresh inference. The
|
|
160
|
+
* fresh-inference set is computed in a SINGLE ONNX pass via
|
|
161
|
+
* @xenova/transformers' array-input mode, amortizing tensor setup +
|
|
162
|
+
* model-load overhead across the batch. Order of the output array
|
|
163
|
+
* matches the input order.
|
|
164
|
+
*
|
|
165
|
+
* Returns `undefined` for any task that failed to embed (missing dep,
|
|
166
|
+
* runtime error). Cache state updates as if each task had been called
|
|
167
|
+
* separately through embedTaskWithCache (hits/misses counters update
|
|
168
|
+
* accordingly).
|
|
169
|
+
*/
|
|
170
|
+
export async function embedTaskWithCacheBatch(tasks) {
|
|
171
|
+
const out = new Array(tasks.length).fill(undefined);
|
|
172
|
+
// Validate + split into (cached-hits) and (missing-needs-inference).
|
|
173
|
+
const missingIdx = [];
|
|
174
|
+
const missingTasks = [];
|
|
175
|
+
const missingKeys = [];
|
|
176
|
+
for (let i = 0; i < tasks.length; i++) {
|
|
177
|
+
const t = tasks[i];
|
|
178
|
+
if (typeof t !== 'string' || t.length === 0)
|
|
179
|
+
continue;
|
|
180
|
+
const key = cacheKey(t);
|
|
181
|
+
const hit = lruGet(key);
|
|
182
|
+
if (hit !== undefined) {
|
|
183
|
+
_hits++;
|
|
184
|
+
out[i] = hit;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
missingIdx.push(i);
|
|
188
|
+
missingTasks.push(t);
|
|
189
|
+
missingKeys.push(key);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (missingTasks.length === 0)
|
|
193
|
+
return out;
|
|
194
|
+
try {
|
|
195
|
+
const embedBatch = await loadEmbedderBatch();
|
|
196
|
+
if (!embedBatch) {
|
|
197
|
+
for (let j = 0; j < missingIdx.length; j++)
|
|
198
|
+
_misses++;
|
|
199
|
+
return out;
|
|
200
|
+
}
|
|
201
|
+
// Real array-input batch: xenova returns one stacked tensor we slice
|
|
202
|
+
// back into N embeddings. Amortizes tensor setup + ONNX overhead
|
|
203
|
+
// across the batch (measured 1.83× speedup at N=30).
|
|
204
|
+
const fresh = await embedBatch(missingTasks);
|
|
205
|
+
for (let j = 0; j < missingIdx.length; j++) {
|
|
206
|
+
const v = fresh[j];
|
|
207
|
+
if (v) {
|
|
208
|
+
lruSet(missingKeys[j], v);
|
|
209
|
+
out[missingIdx[j]] = v;
|
|
210
|
+
}
|
|
211
|
+
_misses++;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// best-effort — leave undefined entries as is
|
|
216
|
+
}
|
|
217
|
+
return out;
|
|
218
|
+
}
|
|
219
|
+
/** Diagnostic surface — hit/miss counters + cache state. */
|
|
220
|
+
export function embedderStats() {
|
|
221
|
+
const total = _hits + _misses;
|
|
222
|
+
return {
|
|
223
|
+
size: _cache.size,
|
|
224
|
+
maxSize: MAX_SIZE,
|
|
225
|
+
hits: _hits,
|
|
226
|
+
misses: _misses,
|
|
227
|
+
hitRate: total > 0 ? _hits / total : 0,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
/** Test seam — clear LRU + counters so tests get a fresh baseline. */
|
|
231
|
+
export function __resetTaskEmbedderForTests() {
|
|
232
|
+
_cache.clear();
|
|
233
|
+
_hits = 0;
|
|
234
|
+
_misses = 0;
|
|
235
|
+
_extractorPromise = null;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=task-embedder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-embedder.js","sourceRoot":"","sources":["../../../src/ruvector/task-embedder.ts"],"names":[],"mappings":"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"}
|