@claude-flow/cli 3.32.3 → 3.32.5
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/helpers/helpers.manifest.json +2 -2
- package/catalog-manifest.json +2 -2
- package/dist/src/agenticow/speculative-exploration.d.ts +148 -0
- package/dist/src/agenticow/speculative-exploration.js +218 -0
- package/dist/src/appliance/gguf-engine.d.ts +91 -0
- package/dist/src/appliance/gguf-engine.js +425 -0
- package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
- package/dist/src/appliance/ruvllm-bridge.js +292 -0
- package/dist/src/appliance/rvfa-builder.d.ts +44 -0
- package/dist/src/appliance/rvfa-builder.js +329 -0
- package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
- package/dist/src/appliance/rvfa-distribution.js +370 -0
- package/dist/src/appliance/rvfa-format.d.ts +111 -0
- package/dist/src/appliance/rvfa-format.js +393 -0
- package/dist/src/appliance/rvfa-runner.d.ts +69 -0
- package/dist/src/appliance/rvfa-runner.js +237 -0
- package/dist/src/appliance/rvfa-signing.d.ts +123 -0
- package/dist/src/appliance/rvfa-signing.js +347 -0
- package/dist/src/auth/client.d.ts +89 -0
- package/dist/src/auth/client.js +242 -0
- package/dist/src/auth/constants.d.ts +7 -0
- package/dist/src/auth/constants.js +7 -0
- package/dist/src/auth/scopes.d.ts +14 -0
- package/dist/src/auth/scopes.js +21 -0
- package/dist/src/auth/security-bridge.d.ts +36 -0
- package/dist/src/auth/security-bridge.js +42 -0
- package/dist/src/auth/session.d.ts +20 -0
- package/dist/src/auth/session.js +32 -0
- package/dist/src/auth/state.d.ts +19 -0
- package/dist/src/auth/state.js +53 -0
- package/dist/src/auth/types.d.ts +27 -0
- package/dist/src/auth/types.js +11 -0
- package/dist/src/autopilot-state.d.ts +77 -0
- package/dist/src/autopilot-state.js +271 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.d.ts +18 -0
- package/dist/src/benchmarks/gaia-agent-planning.smoke.js +253 -0
- package/dist/src/benchmarks/gaia-agent.d.ts +198 -0
- package/dist/src/benchmarks/gaia-agent.js +651 -0
- package/dist/src/benchmarks/gaia-causal-memory.d.ts +133 -0
- package/dist/src/benchmarks/gaia-causal-memory.js +281 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.d.ts +22 -0
- package/dist/src/benchmarks/gaia-causal-memory.smoke.js +300 -0
- package/dist/src/benchmarks/gaia-convergence.d.ts +138 -0
- package/dist/src/benchmarks/gaia-convergence.js +260 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.d.ts +19 -0
- package/dist/src/benchmarks/gaia-convergence.smoke.js +246 -0
- package/dist/src/benchmarks/gaia-critic.d.ts +123 -0
- package/dist/src/benchmarks/gaia-critic.js +312 -0
- package/dist/src/benchmarks/gaia-critic.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-critic.smoke.js +327 -0
- package/dist/src/benchmarks/gaia-decomposer.d.ts +125 -0
- package/dist/src/benchmarks/gaia-decomposer.js +350 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.d.ts +21 -0
- package/dist/src/benchmarks/gaia-decomposer.smoke.js +228 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.d.ts +27 -0
- package/dist/src/benchmarks/gaia-e2e-smoke.js +136 -0
- package/dist/src/benchmarks/gaia-extract.smoke.d.ts +45 -0
- package/dist/src/benchmarks/gaia-extract.smoke.js +242 -0
- package/dist/src/benchmarks/gaia-hardness/features.d.ts +46 -0
- package/dist/src/benchmarks/gaia-hardness/features.js +170 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.d.ts +105 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.js +260 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-hardness/predictor.smoke.js +235 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.d.ts +51 -0
- package/dist/src/benchmarks/gaia-hardness/train-data-loader.js +179 -0
- package/dist/src/benchmarks/gaia-judge.d.ts +88 -0
- package/dist/src/benchmarks/gaia-judge.js +437 -0
- package/dist/src/benchmarks/gaia-loader.d.ts +87 -0
- package/dist/src/benchmarks/gaia-loader.js +326 -0
- package/dist/src/benchmarks/gaia-tools/file_read.d.ts +35 -0
- package/dist/src/benchmarks/gaia-tools/file_read.js +403 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.d.ts +126 -0
- package/dist/src/benchmarks/gaia-tools/grounded_query.js +225 -0
- package/dist/src/benchmarks/gaia-tools/index.d.ts +32 -0
- package/dist/src/benchmarks/gaia-tools/index.js +36 -0
- package/dist/src/benchmarks/gaia-tools/types.d.ts +62 -0
- package/dist/src/benchmarks/gaia-tools/types.js +12 -0
- package/dist/src/benchmarks/gaia-tools/web_search.d.ts +30 -0
- package/dist/src/benchmarks/gaia-tools/web_search.js +210 -0
- package/dist/src/benchmarks/gaia-voting.d.ts +88 -0
- package/dist/src/benchmarks/gaia-voting.js +297 -0
- package/dist/src/benchmarks/gaia-voting.smoke.d.ts +20 -0
- package/dist/src/benchmarks/gaia-voting.smoke.js +332 -0
- package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
- package/dist/src/benchmarks/pretrain/index.js +404 -0
- package/dist/src/business-pods/bbs-budget-tracker.d.ts +139 -0
- package/dist/src/business-pods/bbs-budget-tracker.js +358 -0
- package/dist/src/business-pods/domain-affinity-policy.d.ts +47 -0
- package/dist/src/business-pods/domain-affinity-policy.js +65 -0
- package/dist/src/business-pods/pod-schema.d.ts +96 -0
- package/dist/src/business-pods/pod-schema.js +225 -0
- package/dist/src/commands/advisor.d.ts +15 -0
- package/dist/src/commands/advisor.js +94 -0
- package/dist/src/commands/agent-wasm.d.ts +14 -0
- package/dist/src/commands/agent-wasm.js +333 -0
- package/dist/src/commands/agent.d.ts +8 -0
- package/dist/src/commands/agent.js +927 -0
- package/dist/src/commands/analyze.d.ts +19 -0
- package/dist/src/commands/analyze.js +2047 -0
- package/dist/src/commands/announcements.d.ts +17 -0
- package/dist/src/commands/announcements.js +0 -0
- package/dist/src/commands/appliance-advanced.d.ts +9 -0
- package/dist/src/commands/appliance-advanced.js +215 -0
- package/dist/src/commands/appliance.d.ts +8 -0
- package/dist/src/commands/appliance.js +404 -0
- package/dist/src/commands/auth.d.ts +15 -0
- package/dist/src/commands/auth.js +244 -0
- package/dist/src/commands/autopilot.d.ts +15 -0
- package/dist/src/commands/autopilot.js +407 -0
- package/dist/src/commands/benchmark.d.ts +10 -0
- package/dist/src/commands/benchmark.js +460 -0
- package/dist/src/commands/claims.d.ts +10 -0
- package/dist/src/commands/claims.js +620 -0
- package/dist/src/commands/cleanup.d.ts +13 -0
- package/dist/src/commands/cleanup.js +250 -0
- package/dist/src/commands/completions.d.ts +10 -0
- package/dist/src/commands/completions.js +539 -0
- package/dist/src/commands/config.d.ts +8 -0
- package/dist/src/commands/config.js +428 -0
- package/dist/src/commands/daemon.d.ts +59 -0
- package/dist/src/commands/daemon.js +1733 -0
- package/dist/src/commands/deployment.d.ts +10 -0
- package/dist/src/commands/deployment.js +672 -0
- package/dist/src/commands/doctor.d.ts +10 -0
- package/dist/src/commands/doctor.js +1902 -0
- package/dist/src/commands/eject.d.ts +33 -0
- package/dist/src/commands/eject.js +195 -0
- package/dist/src/commands/embeddings.d.ts +18 -0
- package/dist/src/commands/embeddings.js +1623 -0
- package/dist/src/commands/funnel.d.ts +18 -0
- package/dist/src/commands/funnel.js +302 -0
- package/dist/src/commands/gaia-bench.d.ts +40 -0
- package/dist/src/commands/gaia-bench.js +597 -0
- package/dist/src/commands/guidance.d.ts +8 -0
- package/dist/src/commands/guidance.js +556 -0
- package/dist/src/commands/hive-mind.d.ts +11 -0
- package/dist/src/commands/hive-mind.js +1319 -0
- package/dist/src/commands/hooks.d.ts +8 -0
- package/dist/src/commands/hooks.js +4606 -0
- package/dist/src/commands/index.d.ts +118 -0
- package/dist/src/commands/index.js +366 -0
- package/dist/src/commands/init.d.ts +13 -0
- package/dist/src/commands/init.js +1297 -0
- package/dist/src/commands/issues.d.ts +21 -0
- package/dist/src/commands/issues.js +567 -0
- package/dist/src/commands/mcp.d.ts +11 -0
- package/dist/src/commands/mcp.js +732 -0
- package/dist/src/commands/memory-backup.d.ts +11 -0
- package/dist/src/commands/memory-backup.js +46 -0
- package/dist/src/commands/memory-distill.d.ts +27 -0
- package/dist/src/commands/memory-distill.js +374 -0
- package/dist/src/commands/memory.d.ts +8 -0
- package/dist/src/commands/memory.js +1596 -0
- package/dist/src/commands/metaharness.d.ts +39 -0
- package/dist/src/commands/metaharness.js +215 -0
- package/dist/src/commands/migrate.d.ts +8 -0
- package/dist/src/commands/migrate.js +742 -0
- package/dist/src/commands/neural.d.ts +10 -0
- package/dist/src/commands/neural.js +4331 -0
- package/dist/src/commands/performance.d.ts +10 -0
- package/dist/src/commands/performance.js +583 -0
- package/dist/src/commands/plugins.d.ts +11 -0
- package/dist/src/commands/plugins.js +826 -0
- package/dist/src/commands/process.d.ts +10 -0
- package/dist/src/commands/process.js +694 -0
- package/dist/src/commands/progress.d.ts +11 -0
- package/dist/src/commands/progress.js +259 -0
- package/dist/src/commands/providers.d.ts +10 -0
- package/dist/src/commands/providers.js +502 -0
- package/dist/src/commands/proxy-lifecycle.d.ts +20 -0
- package/dist/src/commands/proxy-lifecycle.js +277 -0
- package/dist/src/commands/proxy.d.ts +21 -0
- package/dist/src/commands/proxy.js +403 -0
- package/dist/src/commands/route.d.ts +16 -0
- package/dist/src/commands/route.js +822 -0
- package/dist/src/commands/ruvector/backup.d.ts +11 -0
- package/dist/src/commands/ruvector/backup.js +747 -0
- package/dist/src/commands/ruvector/benchmark.d.ts +11 -0
- package/dist/src/commands/ruvector/benchmark.js +490 -0
- package/dist/src/commands/ruvector/import.d.ts +18 -0
- package/dist/src/commands/ruvector/import.js +373 -0
- package/dist/src/commands/ruvector/index.d.ts +29 -0
- package/dist/src/commands/ruvector/index.js +129 -0
- package/dist/src/commands/ruvector/init.d.ts +11 -0
- package/dist/src/commands/ruvector/init.js +467 -0
- package/dist/src/commands/ruvector/migrate.d.ts +11 -0
- package/dist/src/commands/ruvector/migrate.js +498 -0
- package/dist/src/commands/ruvector/optimize.d.ts +11 -0
- package/dist/src/commands/ruvector/optimize.js +505 -0
- package/dist/src/commands/ruvector/pg-utils.d.ts +14 -0
- package/dist/src/commands/ruvector/pg-utils.js +41 -0
- package/dist/src/commands/ruvector/setup.d.ts +18 -0
- package/dist/src/commands/ruvector/setup.js +765 -0
- package/dist/src/commands/ruvector/status.d.ts +11 -0
- package/dist/src/commands/ruvector/status.js +479 -0
- package/dist/src/commands/security.d.ts +10 -0
- package/dist/src/commands/security.js +1012 -0
- package/dist/src/commands/session.d.ts +8 -0
- package/dist/src/commands/session.js +757 -0
- package/dist/src/commands/settings.d.ts +19 -0
- package/dist/src/commands/settings.js +180 -0
- package/dist/src/commands/spinner.d.ts +16 -0
- package/dist/src/commands/spinner.js +329 -0
- package/dist/src/commands/start.d.ts +8 -0
- package/dist/src/commands/start.js +418 -0
- package/dist/src/commands/status.d.ts +8 -0
- package/dist/src/commands/status.js +608 -0
- package/dist/src/commands/swarm.d.ts +8 -0
- package/dist/src/commands/swarm.js +891 -0
- package/dist/src/commands/task.d.ts +8 -0
- package/dist/src/commands/task.js +675 -0
- package/dist/src/commands/transfer-store.d.ts +13 -0
- package/dist/src/commands/transfer-store.js +428 -0
- package/dist/src/commands/update.d.ts +8 -0
- package/dist/src/commands/update.js +276 -0
- package/dist/src/commands/verify.d.ts +19 -0
- package/dist/src/commands/verify.js +261 -0
- package/dist/src/commands/version.d.ts +42 -0
- package/dist/src/commands/version.js +106 -0
- package/dist/src/commands/workflow.d.ts +8 -0
- package/dist/src/commands/workflow.js +617 -0
- package/dist/src/config/harness-feedback-applier.d.ts +50 -0
- package/dist/src/config/harness-feedback-applier.js +122 -0
- package/dist/src/config/proven-config-refresh.d.ts +39 -0
- package/dist/src/config/proven-config-refresh.js +154 -0
- package/dist/src/config/proven-config-rvfa.d.ts +23 -0
- package/dist/src/config/proven-config-rvfa.js +73 -0
- package/dist/src/config/proven-config.d.ts +86 -0
- package/dist/src/config/proven-config.js +176 -0
- package/dist/src/config-adapter.d.ts +15 -0
- package/dist/src/config-adapter.js +186 -0
- package/dist/src/encryption/vault.d.ts +94 -0
- package/dist/src/encryption/vault.js +172 -0
- package/dist/src/fs-secure.d.ts +86 -0
- package/dist/src/fs-secure.js +133 -0
- package/dist/src/funnel/advisor-tip.d.ts +58 -0
- package/dist/src/funnel/advisor-tip.js +92 -0
- package/dist/src/funnel/attribution.d.ts +37 -0
- package/dist/src/funnel/attribution.js +101 -0
- package/dist/src/funnel/consent.d.ts +22 -0
- package/dist/src/funnel/consent.js +58 -0
- package/dist/src/funnel/credit-errors.d.ts +31 -0
- package/dist/src/funnel/credit-errors.js +88 -0
- package/dist/src/funnel/credit-notifier.d.ts +44 -0
- package/dist/src/funnel/credit-notifier.js +74 -0
- package/dist/src/funnel/disclosure.d.ts +47 -0
- package/dist/src/funnel/disclosure.js +109 -0
- package/dist/src/funnel/enrollment.d.ts +36 -0
- package/dist/src/funnel/enrollment.js +64 -0
- package/dist/src/funnel/environment.d.ts +17 -0
- package/dist/src/funnel/environment.js +39 -0
- package/dist/src/funnel/event-transport.d.ts +51 -0
- package/dist/src/funnel/event-transport.js +199 -0
- package/dist/src/funnel/events.d.ts +42 -0
- package/dist/src/funnel/events.js +150 -0
- package/dist/src/funnel/index.d.ts +21 -0
- package/dist/src/funnel/index.js +21 -0
- package/dist/src/funnel/insights.d.ts +50 -0
- package/dist/src/funnel/insights.js +120 -0
- package/dist/src/funnel/local-signals.d.ts +20 -0
- package/dist/src/funnel/local-signals.js +77 -0
- package/dist/src/funnel/message-transport.d.ts +51 -0
- package/dist/src/funnel/message-transport.js +149 -0
- package/dist/src/funnel/messages.d.ts +55 -0
- package/dist/src/funnel/messages.js +160 -0
- package/dist/src/funnel/payout.d.ts +40 -0
- package/dist/src/funnel/payout.js +60 -0
- package/dist/src/funnel/power-saver-notifier.d.ts +44 -0
- package/dist/src/funnel/power-saver-notifier.js +92 -0
- package/dist/src/funnel/precedence.d.ts +16 -0
- package/dist/src/funnel/precedence.js +85 -0
- package/dist/src/funnel/promo.d.ts +41 -0
- package/dist/src/funnel/promo.js +144 -0
- package/dist/src/funnel/rate-limit-notifier.d.ts +55 -0
- package/dist/src/funnel/rate-limit-notifier.js +102 -0
- package/dist/src/funnel/rotation.d.ts +19 -0
- package/dist/src/funnel/rotation.js +70 -0
- package/dist/src/funnel/state.d.ts +13 -0
- package/dist/src/funnel/state.js +52 -0
- package/dist/src/funnel/toggle-cooldown.d.ts +17 -0
- package/dist/src/funnel/toggle-cooldown.js +32 -0
- package/dist/src/funnel/types.d.ts +98 -0
- package/dist/src/funnel/types.js +26 -0
- package/dist/src/index.d.ts +81 -0
- package/dist/src/index.js +609 -0
- package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/dist/src/infrastructure/in-memory-repositories.js +264 -0
- package/dist/src/init/claudemd-generator.d.ts +16 -0
- package/dist/src/init/claudemd-generator.js +368 -0
- package/dist/src/init/executor.d.ts +41 -0
- package/dist/src/init/executor.js +2142 -0
- package/dist/src/init/helper-refresh.d.ts +79 -0
- package/dist/src/init/helper-refresh.js +347 -0
- package/dist/src/init/helper-signing.d.ts +37 -0
- package/dist/src/init/helper-signing.js +67 -0
- package/dist/src/init/helpers-generator.d.ts +87 -0
- package/dist/src/init/helpers-generator.js +1456 -0
- package/dist/src/init/index.d.ts +13 -0
- package/dist/src/init/index.js +15 -0
- package/dist/src/init/mcp-generator.d.ts +26 -0
- package/dist/src/init/mcp-generator.js +126 -0
- package/dist/src/init/memory-package-resolver.d.ts +53 -0
- package/dist/src/init/memory-package-resolver.js +118 -0
- package/dist/src/init/settings-generator.d.ts +14 -0
- package/dist/src/init/settings-generator.js +462 -0
- package/dist/src/init/statusline-generator.d.ts +28 -0
- package/dist/src/init/statusline-generator.js +177 -0
- package/dist/src/init/types.d.ts +331 -0
- package/dist/src/init/types.js +276 -0
- package/dist/src/log-filters.d.ts +46 -0
- package/dist/src/log-filters.js +107 -0
- package/dist/src/mcp-client.d.ts +92 -0
- package/dist/src/mcp-client.js +397 -0
- package/dist/src/mcp-server.d.ts +163 -0
- package/dist/src/mcp-server.js +751 -0
- package/dist/src/mcp-tools/agent-execute-core.d.ts +115 -0
- package/dist/src/mcp-tools/agent-execute-core.js +587 -0
- package/dist/src/mcp-tools/agent-tools.d.ts +9 -0
- package/dist/src/mcp-tools/agent-tools.js +837 -0
- package/dist/src/mcp-tools/agentbbs-tools.d.ts +28 -0
- package/dist/src/mcp-tools/agentbbs-tools.js +394 -0
- package/dist/src/mcp-tools/agentdb-tools.d.ts +35 -0
- package/dist/src/mcp-tools/agentdb-tools.js +1473 -0
- package/dist/src/mcp-tools/agenticow-loader.d.ts +59 -0
- package/dist/src/mcp-tools/agenticow-loader.js +105 -0
- package/dist/src/mcp-tools/agenticow-speculate-tools.d.ts +24 -0
- package/dist/src/mcp-tools/agenticow-speculate-tools.js +209 -0
- package/dist/src/mcp-tools/agenticow-tools.d.ts +36 -0
- package/dist/src/mcp-tools/agenticow-tools.js +360 -0
- package/dist/src/mcp-tools/analyze-tools.d.ts +38 -0
- package/dist/src/mcp-tools/analyze-tools.js +346 -0
- package/dist/src/mcp-tools/auto-install.d.ts +83 -0
- package/dist/src/mcp-tools/auto-install.js +131 -0
- package/dist/src/mcp-tools/autopilot-tools.d.ts +12 -0
- package/dist/src/mcp-tools/autopilot-tools.js +231 -0
- package/dist/src/mcp-tools/browser-intent-tools.d.ts +162 -0
- package/dist/src/mcp-tools/browser-intent-tools.js +548 -0
- package/dist/src/mcp-tools/browser-session-tools.d.ts +27 -0
- package/dist/src/mcp-tools/browser-session-tools.js +398 -0
- package/dist/src/mcp-tools/browser-tools.d.ts +21 -0
- package/dist/src/mcp-tools/browser-tools.js +760 -0
- package/dist/src/mcp-tools/business-pod-tools.d.ts +20 -0
- package/dist/src/mcp-tools/business-pod-tools.js +169 -0
- package/dist/src/mcp-tools/claims-tools.d.ts +12 -0
- package/dist/src/mcp-tools/claims-tools.js +863 -0
- package/dist/src/mcp-tools/config-tools.d.ts +8 -0
- package/dist/src/mcp-tools/config-tools.js +411 -0
- package/dist/src/mcp-tools/coordination-tools.d.ts +13 -0
- package/dist/src/mcp-tools/coordination-tools.js +729 -0
- package/dist/src/mcp-tools/daa-tools.d.ts +13 -0
- package/dist/src/mcp-tools/daa-tools.js +534 -0
- package/dist/src/mcp-tools/embeddings-tools.d.ts +9 -0
- package/dist/src/mcp-tools/embeddings-tools.js +904 -0
- package/dist/src/mcp-tools/github-tools.d.ts +9 -0
- package/dist/src/mcp-tools/github-tools.js +659 -0
- package/dist/src/mcp-tools/guidance-tools.d.ts +15 -0
- package/dist/src/mcp-tools/guidance-tools.js +639 -0
- package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -0
- package/dist/src/mcp-tools/hive-mind-tools.js +953 -0
- package/dist/src/mcp-tools/hooks-tools.d.ts +65 -0
- package/dist/src/mcp-tools/hooks-tools.js +4836 -0
- package/dist/src/mcp-tools/http-fetch-tools.d.ts +55 -0
- package/dist/src/mcp-tools/http-fetch-tools.js +329 -0
- package/dist/src/mcp-tools/index.d.ts +34 -0
- package/dist/src/mcp-tools/index.js +40 -0
- package/dist/src/mcp-tools/managed-agent-tools.d.ts +22 -0
- package/dist/src/mcp-tools/managed-agent-tools.js +357 -0
- package/dist/src/mcp-tools/memory-tools.d.ts +14 -0
- package/dist/src/mcp-tools/memory-tools.js +1330 -0
- package/dist/src/mcp-tools/metaharness-tools.d.ts +51 -0
- package/dist/src/mcp-tools/metaharness-tools.js +684 -0
- package/dist/src/mcp-tools/neural-tools.d.ts +54 -0
- package/dist/src/mcp-tools/neural-tools.js +1168 -0
- package/dist/src/mcp-tools/performance-tools.d.ts +16 -0
- package/dist/src/mcp-tools/performance-tools.js +675 -0
- package/dist/src/mcp-tools/progress-tools.d.ts +14 -0
- package/dist/src/mcp-tools/progress-tools.js +348 -0
- package/dist/src/mcp-tools/request-tracker.d.ts +17 -0
- package/dist/src/mcp-tools/request-tracker.js +27 -0
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +9 -0
- package/dist/src/mcp-tools/ruvllm-tools.js +355 -0
- package/dist/src/mcp-tools/security-tools.d.ts +18 -0
- package/dist/src/mcp-tools/security-tools.js +556 -0
- package/dist/src/mcp-tools/session-tools.d.ts +8 -0
- package/dist/src/mcp-tools/session-tools.js +517 -0
- package/dist/src/mcp-tools/swarm-tools.d.ts +37 -0
- package/dist/src/mcp-tools/swarm-tools.js +390 -0
- package/dist/src/mcp-tools/system-tools.d.ts +13 -0
- package/dist/src/mcp-tools/system-tools.js +688 -0
- package/dist/src/mcp-tools/task-tools.d.ts +8 -0
- package/dist/src/mcp-tools/task-tools.js +487 -0
- package/dist/src/mcp-tools/terminal-tools.d.ts +8 -0
- package/dist/src/mcp-tools/terminal-tools.js +306 -0
- package/dist/src/mcp-tools/testgen-tools.d.ts +26 -0
- package/dist/src/mcp-tools/testgen-tools.js +168 -0
- package/dist/src/mcp-tools/tool-loop-guardrail.d.ts +31 -0
- package/dist/src/mcp-tools/tool-loop-guardrail.js +71 -0
- package/dist/src/mcp-tools/transfer-tools.d.ts +14 -0
- package/dist/src/mcp-tools/transfer-tools.js +447 -0
- package/dist/src/mcp-tools/types.d.ts +8 -0
- package/dist/src/mcp-tools/types.js +8 -0
- package/dist/src/mcp-tools/validate-input.d.ts +9 -0
- package/dist/src/mcp-tools/validate-input.js +9 -0
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts +13 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +840 -0
- package/dist/src/mcp-tools/workflow-tools.d.ts +8 -0
- package/dist/src/mcp-tools/workflow-tools.js +884 -0
- package/dist/src/memory/bge-embedder.d.ts +25 -0
- package/dist/src/memory/bge-embedder.js +121 -0
- package/dist/src/memory/cross-encoder-rerank.d.ts +33 -0
- package/dist/src/memory/cross-encoder-rerank.js +123 -0
- package/dist/src/memory/embedding-policy.d.ts +21 -0
- package/dist/src/memory/embedding-policy.js +30 -0
- package/dist/src/memory/embedding-quantization.d.ts +62 -0
- package/dist/src/memory/embedding-quantization.js +156 -0
- package/dist/src/memory/ewc-consolidation.d.ts +305 -0
- package/dist/src/memory/ewc-consolidation.js +611 -0
- package/dist/src/memory/graph-edge-writer.d.ts +95 -0
- package/dist/src/memory/graph-edge-writer.js +217 -0
- package/dist/src/memory/hybrid-retrieval.d.ts +77 -0
- package/dist/src/memory/hybrid-retrieval.js +192 -0
- package/dist/src/memory/intelligence.d.ts +405 -0
- package/dist/src/memory/intelligence.js +1316 -0
- package/dist/src/memory/lucene-bm25.d.ts +19 -0
- package/dist/src/memory/lucene-bm25.js +308 -0
- package/dist/src/memory/memory-bridge.d.ts +537 -0
- package/dist/src/memory/memory-bridge.js +2460 -0
- package/dist/src/memory/memory-initializer.d.ts +556 -0
- package/dist/src/memory/memory-initializer.js +3021 -0
- package/dist/src/memory/neural-package-bridge.d.ts +48 -0
- package/dist/src/memory/neural-package-bridge.js +87 -0
- package/dist/src/memory/rabitq-index.d.ts +60 -0
- package/dist/src/memory/rabitq-index.js +242 -0
- package/dist/src/memory/sona-optimizer.d.ts +267 -0
- package/dist/src/memory/sona-optimizer.js +779 -0
- package/dist/src/memory/structured-distill.d.ts +48 -0
- package/dist/src/memory/structured-distill.js +125 -0
- package/dist/src/output.d.ts +9 -0
- package/dist/src/output.js +9 -0
- package/dist/src/parser.d.ts +89 -0
- package/dist/src/parser.js +516 -0
- package/dist/src/plugins/manager.d.ts +133 -0
- package/dist/src/plugins/manager.js +415 -0
- package/dist/src/plugins/store/discovery.d.ts +99 -0
- package/dist/src/plugins/store/discovery.js +1224 -0
- package/dist/src/plugins/store/index.d.ts +76 -0
- package/dist/src/plugins/store/index.js +141 -0
- package/dist/src/plugins/store/search.d.ts +46 -0
- package/dist/src/plugins/store/search.js +230 -0
- package/dist/src/plugins/store/types.d.ts +279 -0
- package/dist/src/plugins/store/types.js +7 -0
- package/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +126 -0
- package/dist/src/plugins/tests/standalone-test.d.ts +12 -0
- package/dist/src/plugins/tests/standalone-test.js +188 -0
- package/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
- package/dist/src/plugins/tests/test-plugin-store.js +206 -0
- package/dist/src/production/circuit-breaker.d.ts +101 -0
- package/dist/src/production/circuit-breaker.js +241 -0
- package/dist/src/production/error-handler.d.ts +92 -0
- package/dist/src/production/error-handler.js +299 -0
- package/dist/src/production/index.d.ts +23 -0
- package/dist/src/production/index.js +18 -0
- package/dist/src/production/monitoring.d.ts +161 -0
- package/dist/src/production/monitoring.js +356 -0
- package/dist/src/production/rate-limiter.d.ts +80 -0
- package/dist/src/production/rate-limiter.js +201 -0
- package/dist/src/production/retry.d.ts +48 -0
- package/dist/src/production/retry.js +179 -0
- package/dist/src/prompt.d.ts +44 -0
- package/dist/src/prompt.js +501 -0
- package/dist/src/proxy/install.d.ts +29 -0
- package/dist/src/proxy/install.js +135 -0
- package/dist/src/proxy/lifecycle.d.ts +61 -0
- package/dist/src/proxy/lifecycle.js +249 -0
- package/dist/src/proxy/paths.d.ts +34 -0
- package/dist/src/proxy/paths.js +70 -0
- package/dist/src/proxy/release.d.ts +47 -0
- package/dist/src/proxy/release.js +138 -0
- package/dist/src/proxy/token-bridge.d.ts +5 -0
- package/dist/src/proxy/token-bridge.js +61 -0
- package/dist/src/proxy/verify.d.ts +44 -0
- package/dist/src/proxy/verify.js +68 -0
- package/dist/src/runtime/headless.d.ts +60 -0
- package/dist/src/runtime/headless.js +284 -0
- package/dist/src/runtime/parent-death-watchdog.d.ts +42 -0
- package/dist/src/runtime/parent-death-watchdog.js +70 -0
- package/dist/src/ruvector/agent-wasm.d.ts +228 -0
- package/dist/src/ruvector/agent-wasm.js +463 -0
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.js +277 -0
- package/dist/src/ruvector/codemods/engine.d.ts +45 -0
- package/dist/src/ruvector/codemods/engine.js +291 -0
- package/dist/src/ruvector/codemods/scope-analysis.d.ts +29 -0
- package/dist/src/ruvector/codemods/scope-analysis.js +162 -0
- package/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/dist/src/ruvector/coverage-router.js +531 -0
- package/dist/src/ruvector/coverage-tools.d.ts +33 -0
- package/dist/src/ruvector/coverage-tools.js +157 -0
- package/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/dist/src/ruvector/diff-classifier.js +699 -0
- package/dist/src/ruvector/diskann-backend.d.ts +78 -0
- package/dist/src/ruvector/diskann-backend.js +310 -0
- package/dist/src/ruvector/enhanced-model-router.d.ts +172 -0
- package/dist/src/ruvector/enhanced-model-router.js +577 -0
- package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/dist/src/ruvector/graph-analyzer.js +929 -0
- package/dist/src/ruvector/graph-backend.d.ts +79 -0
- package/dist/src/ruvector/graph-backend.js +220 -0
- package/dist/src/ruvector/index.d.ts +38 -0
- package/dist/src/ruvector/index.js +86 -0
- package/dist/src/ruvector/lora-adapter.d.ts +292 -0
- package/dist/src/ruvector/lora-adapter.js +710 -0
- package/dist/src/ruvector/model-prices.d.ts +50 -0
- package/dist/src/ruvector/model-prices.js +72 -0
- package/dist/src/ruvector/model-router.d.ts +408 -0
- package/dist/src/ruvector/model-router.js +1162 -0
- package/dist/src/ruvector/neural-router.d.ts +182 -0
- package/dist/src/ruvector/neural-router.js +825 -0
- package/dist/src/ruvector/output-verifier.d.ts +83 -0
- package/dist/src/ruvector/output-verifier.js +277 -0
- package/dist/src/ruvector/q-learning-router.d.ts +227 -0
- package/dist/src/ruvector/q-learning-router.js +721 -0
- package/dist/src/ruvector/router-calibrator.d.ts +65 -0
- package/dist/src/ruvector/router-calibrator.js +120 -0
- package/dist/src/ruvector/router-parallel-recorder.d.ts +127 -0
- package/dist/src/ruvector/router-parallel-recorder.js +183 -0
- package/dist/src/ruvector/router-trajectory.d.ts +194 -0
- package/dist/src/ruvector/router-trajectory.js +281 -0
- package/dist/src/ruvector/run-transcript-recorder.d.ts +154 -0
- package/dist/src/ruvector/run-transcript-recorder.js +209 -0
- package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/dist/src/ruvector/ruvllm-wasm.js +379 -0
- package/dist/src/ruvector/semantic-router.d.ts +77 -0
- package/dist/src/ruvector/semantic-router.js +178 -0
- package/dist/src/ruvector/task-embedder.d.ts +56 -0
- package/dist/src/ruvector/task-embedder.js +237 -0
- package/dist/src/ruvector/trajectory-tree.d.ts +113 -0
- package/dist/src/ruvector/trajectory-tree.js +237 -0
- package/dist/src/ruvector/vector-db.d.ts +73 -0
- package/dist/src/ruvector/vector-db.js +301 -0
- package/dist/src/ruvector/wasm-embedder.d.ts +13 -0
- package/dist/src/ruvector/wasm-embedder.js +143 -0
- package/dist/src/security/builtin-aidefence.d.ts +34 -0
- package/dist/src/security/builtin-aidefence.js +86 -0
- package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/dist/src/services/agentic-flow-bridge.js +95 -0
- package/dist/src/services/ai-job-dedup.d.ts +61 -0
- package/dist/src/services/ai-job-dedup.js +136 -0
- package/dist/src/services/checkpoint-gate.d.ts +140 -0
- package/dist/src/services/checkpoint-gate.js +223 -0
- package/dist/src/services/claim-service.d.ts +204 -0
- package/dist/src/services/claim-service.js +818 -0
- package/dist/src/services/config-file-manager.d.ts +37 -0
- package/dist/src/services/config-file-manager.js +224 -0
- package/dist/src/services/container-worker-pool.d.ts +204 -0
- package/dist/src/services/container-worker-pool.js +589 -0
- package/dist/src/services/daemon-autostart.d.ts +17 -0
- package/dist/src/services/daemon-autostart.js +102 -0
- package/dist/src/services/distill-oracle.d.ts +190 -0
- package/dist/src/services/distill-oracle.js +349 -0
- package/dist/src/services/distill-tuning.d.ts +111 -0
- package/dist/src/services/distill-tuning.js +510 -0
- package/dist/src/services/evolve-proof.d.ts +253 -0
- package/dist/src/services/evolve-proof.js +343 -0
- package/dist/src/services/fable-harness.d.ts +208 -0
- package/dist/src/services/fable-harness.js +388 -0
- package/dist/src/services/git-workspace-identity.d.ts +42 -0
- package/dist/src/services/git-workspace-identity.js +99 -0
- package/dist/src/services/global-ai-budget.d.ts +135 -0
- package/dist/src/services/global-ai-budget.js +415 -0
- package/dist/src/services/harness-benchmark.d.ts +68 -0
- package/dist/src/services/harness-benchmark.js +94 -0
- package/dist/src/services/harness-canary.d.ts +60 -0
- package/dist/src/services/harness-canary.js +69 -0
- package/dist/src/services/harness-corpus-harvester.d.ts +51 -0
- package/dist/src/services/harness-corpus-harvester.js +74 -0
- package/dist/src/services/harness-flywheel-generations.d.ts +115 -0
- package/dist/src/services/harness-flywheel-generations.js +360 -0
- package/dist/src/services/harness-flywheel-runtime.d.ts +25 -0
- package/dist/src/services/harness-flywheel-runtime.js +92 -0
- package/dist/src/services/harness-flywheel.d.ts +48 -0
- package/dist/src/services/harness-flywheel.js +207 -0
- package/dist/src/services/harness-frozen-eval.d.ts +22 -0
- package/dist/src/services/harness-frozen-eval.js +66 -0
- package/dist/src/services/harness-hosts.d.ts +40 -0
- package/dist/src/services/harness-hosts.js +88 -0
- package/dist/src/services/harness-improvement-ledger.d.ts +63 -0
- package/dist/src/services/harness-improvement-ledger.js +101 -0
- package/dist/src/services/harness-loop.d.ts +53 -0
- package/dist/src/services/harness-loop.js +85 -0
- package/dist/src/services/harness-qualification.d.ts +66 -0
- package/dist/src/services/harness-qualification.js +143 -0
- package/dist/src/services/harness-replay.d.ts +37 -0
- package/dist/src/services/harness-replay.js +92 -0
- package/dist/src/services/harness-verify.d.ts +33 -0
- package/dist/src/services/harness-verify.js +26 -0
- package/dist/src/services/harness-worker.d.ts +23 -0
- package/dist/src/services/harness-worker.js +66 -0
- package/dist/src/services/headless-worker-executor.d.ts +358 -0
- package/dist/src/services/headless-worker-executor.js +1269 -0
- package/dist/src/services/index.d.ts +13 -0
- package/dist/src/services/index.js +11 -0
- package/dist/src/services/memory-backup.d.ts +53 -0
- package/dist/src/services/memory-backup.js +198 -0
- package/dist/src/services/memory-distillation.d.ts +41 -0
- package/dist/src/services/memory-distillation.js +277 -0
- package/dist/src/services/native-training.d.ts +68 -0
- package/dist/src/services/native-training.js +141 -0
- package/dist/src/services/registry-api.d.ts +58 -0
- package/dist/src/services/registry-api.js +146 -0
- package/dist/src/services/repo-supervisor.d.ts +70 -0
- package/dist/src/services/repo-supervisor.js +228 -0
- package/dist/src/services/ruvector-training.d.ts +222 -0
- package/dist/src/services/ruvector-training.js +693 -0
- package/dist/src/services/swarm-memory-branches.d.ts +135 -0
- package/dist/src/services/swarm-memory-branches.js +213 -0
- package/dist/src/services/weight-eft.d.ts +305 -0
- package/dist/src/services/weight-eft.js +296 -0
- package/dist/src/services/worker-daemon.d.ts +439 -0
- package/dist/src/services/worker-daemon.js +1865 -0
- package/dist/src/services/worker-queue.d.ts +194 -0
- package/dist/src/services/worker-queue.js +513 -0
- package/dist/src/services/workspace-lease.d.ts +55 -0
- package/dist/src/services/workspace-lease.js +191 -0
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.js +200 -0
- package/dist/src/transfer/anonymization/index.d.ts +25 -0
- package/dist/src/transfer/anonymization/index.js +175 -0
- package/dist/src/transfer/deploy-seraphine.d.ts +13 -0
- package/dist/src/transfer/deploy-seraphine.js +205 -0
- package/dist/src/transfer/export.d.ts +25 -0
- package/dist/src/transfer/export.js +113 -0
- package/dist/src/transfer/index.d.ts +12 -0
- package/dist/src/transfer/index.js +31 -0
- package/dist/src/transfer/ipfs/client.d.ts +109 -0
- package/dist/src/transfer/ipfs/client.js +307 -0
- package/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/dist/src/transfer/ipfs/upload.js +413 -0
- package/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/dist/src/transfer/models/seraphine.js +373 -0
- package/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/dist/src/transfer/serialization/cfp.js +183 -0
- package/dist/src/transfer/storage/gcs.d.ts +82 -0
- package/dist/src/transfer/storage/gcs.js +272 -0
- package/dist/src/transfer/storage/index.d.ts +6 -0
- package/dist/src/transfer/storage/index.js +6 -0
- package/dist/src/transfer/store/discovery.d.ts +84 -0
- package/dist/src/transfer/store/discovery.js +382 -0
- package/dist/src/transfer/store/download.d.ts +70 -0
- package/dist/src/transfer/store/download.js +334 -0
- package/dist/src/transfer/store/index.d.ts +84 -0
- package/dist/src/transfer/store/index.js +153 -0
- package/dist/src/transfer/store/publish.d.ts +76 -0
- package/dist/src/transfer/store/publish.js +294 -0
- package/dist/src/transfer/store/registry.d.ts +58 -0
- package/dist/src/transfer/store/registry.js +285 -0
- package/dist/src/transfer/store/search.d.ts +54 -0
- package/dist/src/transfer/store/search.js +232 -0
- package/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
- package/dist/src/transfer/store/tests/standalone-test.js +190 -0
- package/dist/src/transfer/store/types.d.ts +193 -0
- package/dist/src/transfer/store/types.js +6 -0
- package/dist/src/transfer/test-seraphine.d.ts +6 -0
- package/dist/src/transfer/test-seraphine.js +105 -0
- package/dist/src/transfer/tests/test-store.d.ts +7 -0
- package/dist/src/transfer/tests/test-store.js +214 -0
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.js +6 -0
- package/dist/src/types.d.ts +13 -0
- package/dist/src/types.js +13 -0
- package/dist/src/update/checker.d.ts +34 -0
- package/dist/src/update/checker.js +191 -0
- package/dist/src/update/executor.d.ts +33 -0
- package/dist/src/update/executor.js +217 -0
- package/dist/src/update/index.d.ts +33 -0
- package/dist/src/update/index.js +64 -0
- package/dist/src/update/rate-limiter.d.ts +20 -0
- package/dist/src/update/rate-limiter.js +96 -0
- package/dist/src/update/validator.d.ts +17 -0
- package/dist/src/update/validator.js +123 -0
- package/package.json +1 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router-calibrator.ts — Post-hoc isotonic calibration for the KRR router
|
|
3
|
+
* (ADR-149 iter 22).
|
|
4
|
+
*
|
|
5
|
+
* The bundled KRR systematically under-predicts at the low end (gap 0.45 at
|
|
6
|
+
* 0.0–0.1) and over-predicts at the high end (gap 0.15 at 0.9–1.0). Both
|
|
7
|
+
* deviations are monotone, so a piecewise-constant non-decreasing function
|
|
8
|
+
* fit via Pool-Adjacent-Violators (PAV) can correct them without retraining
|
|
9
|
+
* the KRR.
|
|
10
|
+
*
|
|
11
|
+
* USAGE
|
|
12
|
+
*
|
|
13
|
+
* const cal = IsotonicCalibrator.fit([[0.07, 0.52], [0.55, 0.60], …]);
|
|
14
|
+
* const corrected = cal.transform(rawKrrScore);
|
|
15
|
+
*
|
|
16
|
+
* // Persist & reload:
|
|
17
|
+
* writeFileSync(path, JSON.stringify(cal.toJSON()));
|
|
18
|
+
* const loaded = IsotonicCalibrator.fromJSON(JSON.parse(readFileSync(path, 'utf8')));
|
|
19
|
+
*
|
|
20
|
+
* Pure TS — no native deps. ~25 lines of fitting logic, O(n log n) sort +
|
|
21
|
+
* O(n) PAV pass.
|
|
22
|
+
*
|
|
23
|
+
* @module router-calibrator
|
|
24
|
+
*/
|
|
25
|
+
export interface CalibratorBucket {
|
|
26
|
+
/** Inclusive lower bound of predicted-values pooled into this bucket. */
|
|
27
|
+
predMin: number;
|
|
28
|
+
/** Inclusive upper bound. */
|
|
29
|
+
predMax: number;
|
|
30
|
+
/** Calibrated output value (mean of observed values in the pool). */
|
|
31
|
+
calibrated: number;
|
|
32
|
+
/** Number of (pred,obs) pairs pooled. */
|
|
33
|
+
count: number;
|
|
34
|
+
}
|
|
35
|
+
export interface CalibratorJSON {
|
|
36
|
+
v: 1;
|
|
37
|
+
buckets: CalibratorBucket[];
|
|
38
|
+
}
|
|
39
|
+
export declare class IsotonicCalibrator {
|
|
40
|
+
private buckets;
|
|
41
|
+
private constructor();
|
|
42
|
+
/**
|
|
43
|
+
* Fit an isotonic regression to (predicted, observed) pairs via PAV.
|
|
44
|
+
*
|
|
45
|
+
* Result is a non-decreasing piecewise-constant function over the
|
|
46
|
+
* empirical predicted-value range, equivalent in spirit to sklearn's
|
|
47
|
+
* IsotonicRegression(increasing=True, out_of_bounds='clip').
|
|
48
|
+
*/
|
|
49
|
+
static fit(pairs: Array<[number, number]>): IsotonicCalibrator;
|
|
50
|
+
/**
|
|
51
|
+
* Map a raw predicted value to its calibrated value. Uses piecewise-linear
|
|
52
|
+
* interpolation between adjacent bucket midpoints, clamped at the
|
|
53
|
+
* empirical edges (extrapolation outside the training range returns the
|
|
54
|
+
* nearest edge bucket's calibrated value).
|
|
55
|
+
*/
|
|
56
|
+
transform(x: number): number;
|
|
57
|
+
/** Pure-JSON serialization — calibrator JSON is small (typically <2kB). */
|
|
58
|
+
toJSON(): CalibratorJSON;
|
|
59
|
+
static fromJSON(j: CalibratorJSON): IsotonicCalibrator;
|
|
60
|
+
/** Diagnostic — number of distinct calibration points after PAV. */
|
|
61
|
+
get bucketCount(): number;
|
|
62
|
+
/** Diagnostic — return a copy of the bucket array (read-only view). */
|
|
63
|
+
inspect(): CalibratorBucket[];
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=router-calibrator.d.ts.map
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router-calibrator.ts — Post-hoc isotonic calibration for the KRR router
|
|
3
|
+
* (ADR-149 iter 22).
|
|
4
|
+
*
|
|
5
|
+
* The bundled KRR systematically under-predicts at the low end (gap 0.45 at
|
|
6
|
+
* 0.0–0.1) and over-predicts at the high end (gap 0.15 at 0.9–1.0). Both
|
|
7
|
+
* deviations are monotone, so a piecewise-constant non-decreasing function
|
|
8
|
+
* fit via Pool-Adjacent-Violators (PAV) can correct them without retraining
|
|
9
|
+
* the KRR.
|
|
10
|
+
*
|
|
11
|
+
* USAGE
|
|
12
|
+
*
|
|
13
|
+
* const cal = IsotonicCalibrator.fit([[0.07, 0.52], [0.55, 0.60], …]);
|
|
14
|
+
* const corrected = cal.transform(rawKrrScore);
|
|
15
|
+
*
|
|
16
|
+
* // Persist & reload:
|
|
17
|
+
* writeFileSync(path, JSON.stringify(cal.toJSON()));
|
|
18
|
+
* const loaded = IsotonicCalibrator.fromJSON(JSON.parse(readFileSync(path, 'utf8')));
|
|
19
|
+
*
|
|
20
|
+
* Pure TS — no native deps. ~25 lines of fitting logic, O(n log n) sort +
|
|
21
|
+
* O(n) PAV pass.
|
|
22
|
+
*
|
|
23
|
+
* @module router-calibrator
|
|
24
|
+
*/
|
|
25
|
+
export class IsotonicCalibrator {
|
|
26
|
+
buckets;
|
|
27
|
+
constructor(buckets) {
|
|
28
|
+
this.buckets = buckets;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Fit an isotonic regression to (predicted, observed) pairs via PAV.
|
|
32
|
+
*
|
|
33
|
+
* Result is a non-decreasing piecewise-constant function over the
|
|
34
|
+
* empirical predicted-value range, equivalent in spirit to sklearn's
|
|
35
|
+
* IsotonicRegression(increasing=True, out_of_bounds='clip').
|
|
36
|
+
*/
|
|
37
|
+
static fit(pairs) {
|
|
38
|
+
if (pairs.length === 0)
|
|
39
|
+
return new IsotonicCalibrator([]);
|
|
40
|
+
// Sort by predicted value ascending; stable sort isn't required because
|
|
41
|
+
// ties only affect bucket boundaries (which PAV then pools anyway).
|
|
42
|
+
const sorted = [...pairs].sort((a, b) => a[0] - b[0]);
|
|
43
|
+
const pools = sorted.map(([p, o]) => ({ predMin: p, predMax: p, sumObs: o, count: 1 }));
|
|
44
|
+
// Pool-Adjacent-Violators: walk left-to-right, merge adjacent pools
|
|
45
|
+
// whose averages violate monotonicity. After merging, back up one step
|
|
46
|
+
// to check the new pool against its predecessor.
|
|
47
|
+
let i = 0;
|
|
48
|
+
while (i < pools.length - 1) {
|
|
49
|
+
const a = pools[i], b = pools[i + 1];
|
|
50
|
+
const avgA = a.sumObs / a.count;
|
|
51
|
+
const avgB = b.sumObs / b.count;
|
|
52
|
+
if (avgA > avgB) {
|
|
53
|
+
pools[i] = {
|
|
54
|
+
predMin: a.predMin,
|
|
55
|
+
predMax: b.predMax,
|
|
56
|
+
sumObs: a.sumObs + b.sumObs,
|
|
57
|
+
count: a.count + b.count,
|
|
58
|
+
};
|
|
59
|
+
pools.splice(i + 1, 1);
|
|
60
|
+
if (i > 0)
|
|
61
|
+
i--;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
i++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const buckets = pools.map(p => ({
|
|
68
|
+
predMin: p.predMin,
|
|
69
|
+
predMax: p.predMax,
|
|
70
|
+
calibrated: p.sumObs / p.count,
|
|
71
|
+
count: p.count,
|
|
72
|
+
}));
|
|
73
|
+
return new IsotonicCalibrator(buckets);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Map a raw predicted value to its calibrated value. Uses piecewise-linear
|
|
77
|
+
* interpolation between adjacent bucket midpoints, clamped at the
|
|
78
|
+
* empirical edges (extrapolation outside the training range returns the
|
|
79
|
+
* nearest edge bucket's calibrated value).
|
|
80
|
+
*/
|
|
81
|
+
transform(x) {
|
|
82
|
+
const n = this.buckets.length;
|
|
83
|
+
if (n === 0)
|
|
84
|
+
return x; // No calibration data → pass-through.
|
|
85
|
+
if (n === 1)
|
|
86
|
+
return this.buckets[0].calibrated;
|
|
87
|
+
const mids = this.buckets.map(b => (b.predMin + b.predMax) / 2);
|
|
88
|
+
if (x <= mids[0])
|
|
89
|
+
return this.buckets[0].calibrated;
|
|
90
|
+
if (x >= mids[n - 1])
|
|
91
|
+
return this.buckets[n - 1].calibrated;
|
|
92
|
+
// Linear interpolation between two adjacent bucket midpoints. Could be
|
|
93
|
+
// binary-searched, but n is typically <30 after PAV so linear is fine.
|
|
94
|
+
for (let i = 0; i < n - 1; i++) {
|
|
95
|
+
if (x >= mids[i] && x <= mids[i + 1]) {
|
|
96
|
+
const t = (x - mids[i]) / (mids[i + 1] - mids[i]);
|
|
97
|
+
return this.buckets[i].calibrated * (1 - t) + this.buckets[i + 1].calibrated * t;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return x; // unreachable given the bounds above
|
|
101
|
+
}
|
|
102
|
+
/** Pure-JSON serialization — calibrator JSON is small (typically <2kB). */
|
|
103
|
+
toJSON() {
|
|
104
|
+
return { v: 1, buckets: this.buckets };
|
|
105
|
+
}
|
|
106
|
+
static fromJSON(j) {
|
|
107
|
+
if (!j || j.v !== 1)
|
|
108
|
+
throw new Error(`unsupported calibrator schema v=${j?.v}`);
|
|
109
|
+
return new IsotonicCalibrator(j.buckets);
|
|
110
|
+
}
|
|
111
|
+
/** Diagnostic — number of distinct calibration points after PAV. */
|
|
112
|
+
get bucketCount() {
|
|
113
|
+
return this.buckets.length;
|
|
114
|
+
}
|
|
115
|
+
/** Diagnostic — return a copy of the bucket array (read-only view). */
|
|
116
|
+
inspect() {
|
|
117
|
+
return this.buckets.map(b => ({ ...b }));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=router-calibrator.js.map
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router-parallel-recorder.ts — Opt-in SelfEvolvingRouter parallel-logging
|
|
3
|
+
* recorder (ADR-150 Phase 2).
|
|
4
|
+
*
|
|
5
|
+
* Writes one JSON-line per PAIR of routing decisions (Thompson bandit pick
|
|
6
|
+
* + SelfEvolvingRouter pick + measured outcome) to a shared
|
|
7
|
+
* `.swarm/router-parallel.jsonl`. Designed to be matched by
|
|
8
|
+
* `plugins/ruflo-metaharness/scripts/router-parallel-analyze.mjs` which
|
|
9
|
+
* computes the 3-criteria AND-gate from ADR-150 review-round-1:
|
|
10
|
+
*
|
|
11
|
+
* (a) qualityScore improvement > 2%
|
|
12
|
+
* (b) usdPerDecision increase < 1%
|
|
13
|
+
* (c) p95 routing-decision latency increase < 5%
|
|
14
|
+
*
|
|
15
|
+
* ARCHITECTURAL CONSTRAINTS (ADR-150)
|
|
16
|
+
* -----------------------------------
|
|
17
|
+
* 1. REMOVABLE — `@metaharness/kernel` (which provides SelfEvolvingRouter)
|
|
18
|
+
* is in optionalDependencies. This module's exports are pure-shape; the
|
|
19
|
+
* `SerPick` carries pre-computed prediction fields. The caller is
|
|
20
|
+
* responsible for dynamic-importing the kernel and computing the SER
|
|
21
|
+
* pick — this module ONLY records the pair.
|
|
22
|
+
* 2. OPTIONAL — every write goes through the `CLAUDE_FLOW_ROUTER_PARALLEL_LOG=1`
|
|
23
|
+
* env gate. When unset (default), `recordPair()` is a no-op.
|
|
24
|
+
* 3. GRACEFUL DEGRADATION — every fs operation is try/caught at the
|
|
25
|
+
* appendFileSync boundary. A failed write logs to stderr (gated by
|
|
26
|
+
* DEBUG) but never throws — the routing decision continues.
|
|
27
|
+
* 4. CI GATE — the analyzer + recorder are both exercised by smoke
|
|
28
|
+
* fixtures; no production data required for the contract to hold.
|
|
29
|
+
*
|
|
30
|
+
* SCHEMA (versioned, additive)
|
|
31
|
+
* ----------------------------
|
|
32
|
+
* One JSONL row per paired decision:
|
|
33
|
+
* {
|
|
34
|
+
* v: 1,
|
|
35
|
+
* ts: ISO-8601,
|
|
36
|
+
* task_hash: <FNV-1a-32 of task text>,
|
|
37
|
+
* task?: <truncated to 500 chars when CLAUDE_FLOW_ROUTER_PARALLEL_LOG_TASK=1>,
|
|
38
|
+
* bandit: { pick, predictedQuality, predictedCostUsd, ... },
|
|
39
|
+
* ser: { pick, predictedQuality, predictedCostUsd, ... },
|
|
40
|
+
* outcome?: { actualModel, actualQuality, actualUsd, actualLatencyMs }
|
|
41
|
+
* }
|
|
42
|
+
*
|
|
43
|
+
* Outcomes can be filled in a separate `recordPairOutcome()` call (matched
|
|
44
|
+
* by task_hash) so the routing path doesn't have to wait for execution.
|
|
45
|
+
*
|
|
46
|
+
* @module router-parallel-recorder
|
|
47
|
+
*/
|
|
48
|
+
import type { ClaudeModel } from './model-router.js';
|
|
49
|
+
/** Per-arm prediction for one routing decision. */
|
|
50
|
+
export interface ArmPick {
|
|
51
|
+
pick: ClaudeModel;
|
|
52
|
+
predictedQuality: number;
|
|
53
|
+
predictedCostUsd: number;
|
|
54
|
+
/** Optional: backend identifier (bandit | metaharness-knn | metaharness-krr | self-evolving). */
|
|
55
|
+
backend?: string;
|
|
56
|
+
}
|
|
57
|
+
/** Optional outcome — filled in after execution via recordPairOutcome(). */
|
|
58
|
+
export interface PairOutcome {
|
|
59
|
+
/** Whichever model actually executed (typically the bandit's pick). */
|
|
60
|
+
actualModel: ClaudeModel;
|
|
61
|
+
/** Measured quality score from the verdict ladder (0..1). */
|
|
62
|
+
actualQuality: number;
|
|
63
|
+
/** Measured spend at actualModel's prices. */
|
|
64
|
+
actualUsd: number;
|
|
65
|
+
/** Wall-clock latency from route() to response complete (ms). */
|
|
66
|
+
actualLatencyMs: number;
|
|
67
|
+
}
|
|
68
|
+
/** Discriminator for JSONL rows. */
|
|
69
|
+
export type RowType = 'pair' | 'pair-outcome';
|
|
70
|
+
/** One paired-decision row. */
|
|
71
|
+
export interface PairRow {
|
|
72
|
+
v: 1;
|
|
73
|
+
type: RowType;
|
|
74
|
+
ts: string;
|
|
75
|
+
task_hash: string;
|
|
76
|
+
task?: string;
|
|
77
|
+
bandit: ArmPick;
|
|
78
|
+
ser: ArmPick;
|
|
79
|
+
outcome?: PairOutcome;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Record one paired routing decision. Cheap — single appendFileSync of a
|
|
83
|
+
* JSONL row. No-op when CLAUDE_FLOW_ROUTER_PARALLEL_LOG is unset (the
|
|
84
|
+
* default). Never throws.
|
|
85
|
+
*
|
|
86
|
+
* The caller dynamic-imports `@metaharness/kernel` (or any alternative
|
|
87
|
+
* predictor) and computes the SER pick BEFORE calling this. The recorder
|
|
88
|
+
* deliberately knows nothing about how either pick was computed — it just
|
|
89
|
+
* writes the pair.
|
|
90
|
+
*/
|
|
91
|
+
export declare function recordPair(args: {
|
|
92
|
+
task: string;
|
|
93
|
+
bandit: ArmPick;
|
|
94
|
+
ser: ArmPick;
|
|
95
|
+
}): {
|
|
96
|
+
recorded: boolean;
|
|
97
|
+
taskHash: string;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Record the outcome of a previously-paired decision. Matched to its
|
|
101
|
+
* pair row by task_hash. Writes a separate JSONL row of type 'outcome'
|
|
102
|
+
* which the analyzer joins client-side (same pattern as the existing
|
|
103
|
+
* router-trajectory recorder).
|
|
104
|
+
*
|
|
105
|
+
* Returns the task_hash that was matched (caller can verify against
|
|
106
|
+
* what recordPair() returned).
|
|
107
|
+
*/
|
|
108
|
+
export declare function recordPairOutcome(args: {
|
|
109
|
+
task: string;
|
|
110
|
+
outcome: PairOutcome;
|
|
111
|
+
}): {
|
|
112
|
+
recorded: boolean;
|
|
113
|
+
taskHash: string;
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Status helper for diagnostics / smoke tests.
|
|
117
|
+
*/
|
|
118
|
+
export declare function parallelRecorderStatus(): {
|
|
119
|
+
enabled: boolean;
|
|
120
|
+
path: string;
|
|
121
|
+
includeTaskText: boolean;
|
|
122
|
+
taskCharLimit: number;
|
|
123
|
+
maxBytes: number;
|
|
124
|
+
};
|
|
125
|
+
/** @internal — test helper. */
|
|
126
|
+
export declare function __resetParallelRecorderForTests(): void;
|
|
127
|
+
//# sourceMappingURL=router-parallel-recorder.d.ts.map
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router-parallel-recorder.ts — Opt-in SelfEvolvingRouter parallel-logging
|
|
3
|
+
* recorder (ADR-150 Phase 2).
|
|
4
|
+
*
|
|
5
|
+
* Writes one JSON-line per PAIR of routing decisions (Thompson bandit pick
|
|
6
|
+
* + SelfEvolvingRouter pick + measured outcome) to a shared
|
|
7
|
+
* `.swarm/router-parallel.jsonl`. Designed to be matched by
|
|
8
|
+
* `plugins/ruflo-metaharness/scripts/router-parallel-analyze.mjs` which
|
|
9
|
+
* computes the 3-criteria AND-gate from ADR-150 review-round-1:
|
|
10
|
+
*
|
|
11
|
+
* (a) qualityScore improvement > 2%
|
|
12
|
+
* (b) usdPerDecision increase < 1%
|
|
13
|
+
* (c) p95 routing-decision latency increase < 5%
|
|
14
|
+
*
|
|
15
|
+
* ARCHITECTURAL CONSTRAINTS (ADR-150)
|
|
16
|
+
* -----------------------------------
|
|
17
|
+
* 1. REMOVABLE — `@metaharness/kernel` (which provides SelfEvolvingRouter)
|
|
18
|
+
* is in optionalDependencies. This module's exports are pure-shape; the
|
|
19
|
+
* `SerPick` carries pre-computed prediction fields. The caller is
|
|
20
|
+
* responsible for dynamic-importing the kernel and computing the SER
|
|
21
|
+
* pick — this module ONLY records the pair.
|
|
22
|
+
* 2. OPTIONAL — every write goes through the `CLAUDE_FLOW_ROUTER_PARALLEL_LOG=1`
|
|
23
|
+
* env gate. When unset (default), `recordPair()` is a no-op.
|
|
24
|
+
* 3. GRACEFUL DEGRADATION — every fs operation is try/caught at the
|
|
25
|
+
* appendFileSync boundary. A failed write logs to stderr (gated by
|
|
26
|
+
* DEBUG) but never throws — the routing decision continues.
|
|
27
|
+
* 4. CI GATE — the analyzer + recorder are both exercised by smoke
|
|
28
|
+
* fixtures; no production data required for the contract to hold.
|
|
29
|
+
*
|
|
30
|
+
* SCHEMA (versioned, additive)
|
|
31
|
+
* ----------------------------
|
|
32
|
+
* One JSONL row per paired decision:
|
|
33
|
+
* {
|
|
34
|
+
* v: 1,
|
|
35
|
+
* ts: ISO-8601,
|
|
36
|
+
* task_hash: <FNV-1a-32 of task text>,
|
|
37
|
+
* task?: <truncated to 500 chars when CLAUDE_FLOW_ROUTER_PARALLEL_LOG_TASK=1>,
|
|
38
|
+
* bandit: { pick, predictedQuality, predictedCostUsd, ... },
|
|
39
|
+
* ser: { pick, predictedQuality, predictedCostUsd, ... },
|
|
40
|
+
* outcome?: { actualModel, actualQuality, actualUsd, actualLatencyMs }
|
|
41
|
+
* }
|
|
42
|
+
*
|
|
43
|
+
* Outcomes can be filled in a separate `recordPairOutcome()` call (matched
|
|
44
|
+
* by task_hash) so the routing path doesn't have to wait for execution.
|
|
45
|
+
*
|
|
46
|
+
* @module router-parallel-recorder
|
|
47
|
+
*/
|
|
48
|
+
import { appendFileSync, mkdirSync, existsSync, statSync, renameSync, unlinkSync } from 'node:fs';
|
|
49
|
+
import { dirname, resolve as resolvePath } from 'node:path';
|
|
50
|
+
import { taskHash } from './router-trajectory.js';
|
|
51
|
+
let _cfg = null;
|
|
52
|
+
function getConfig() {
|
|
53
|
+
if (_cfg !== null)
|
|
54
|
+
return _cfg;
|
|
55
|
+
_cfg = {
|
|
56
|
+
enabled: process.env.CLAUDE_FLOW_ROUTER_PARALLEL_LOG === '1',
|
|
57
|
+
path: process.env.CLAUDE_FLOW_ROUTER_PARALLEL_LOG_PATH
|
|
58
|
+
? resolvePath(process.env.CLAUDE_FLOW_ROUTER_PARALLEL_LOG_PATH)
|
|
59
|
+
: resolvePath('.swarm', 'router-parallel.jsonl'),
|
|
60
|
+
includeTaskText: process.env.CLAUDE_FLOW_ROUTER_PARALLEL_LOG_TASK === '1',
|
|
61
|
+
taskCharLimit: parseInt(process.env.CLAUDE_FLOW_ROUTER_PARALLEL_LOG_TASK_LIMIT || '500', 10),
|
|
62
|
+
maxBytes: parseInt(process.env.CLAUDE_FLOW_ROUTER_PARALLEL_LOG_MAX_BYTES || String(10 * 1024 * 1024), 10),
|
|
63
|
+
};
|
|
64
|
+
return _cfg;
|
|
65
|
+
}
|
|
66
|
+
function rotate(cfg) {
|
|
67
|
+
try {
|
|
68
|
+
const backup = `${cfg.path}.1`;
|
|
69
|
+
if (existsSync(backup))
|
|
70
|
+
unlinkSync(backup);
|
|
71
|
+
renameSync(cfg.path, backup);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
if (process.env.DEBUG) {
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
76
|
+
console.error('router-parallel: rotate failed:', e.message);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function appendRow(row) {
|
|
81
|
+
const cfg = getConfig();
|
|
82
|
+
if (!cfg.enabled)
|
|
83
|
+
return;
|
|
84
|
+
try {
|
|
85
|
+
const dir = dirname(cfg.path);
|
|
86
|
+
if (!existsSync(dir))
|
|
87
|
+
mkdirSync(dir, { recursive: true });
|
|
88
|
+
if (existsSync(cfg.path)) {
|
|
89
|
+
try {
|
|
90
|
+
const st = statSync(cfg.path);
|
|
91
|
+
if (st.size >= cfg.maxBytes)
|
|
92
|
+
rotate(cfg);
|
|
93
|
+
}
|
|
94
|
+
catch { /* stat race is fine */ }
|
|
95
|
+
}
|
|
96
|
+
appendFileSync(cfg.path, JSON.stringify(row) + '\n');
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
if (process.env.DEBUG) {
|
|
100
|
+
// eslint-disable-next-line no-console
|
|
101
|
+
console.error('router-parallel: appendRow failed:', e.message);
|
|
102
|
+
}
|
|
103
|
+
// ADR-150 rule #3 — never throw, never block the routing path.
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// Public API
|
|
108
|
+
// ============================================================================
|
|
109
|
+
/**
|
|
110
|
+
* Record one paired routing decision. Cheap — single appendFileSync of a
|
|
111
|
+
* JSONL row. No-op when CLAUDE_FLOW_ROUTER_PARALLEL_LOG is unset (the
|
|
112
|
+
* default). Never throws.
|
|
113
|
+
*
|
|
114
|
+
* The caller dynamic-imports `@metaharness/kernel` (or any alternative
|
|
115
|
+
* predictor) and computes the SER pick BEFORE calling this. The recorder
|
|
116
|
+
* deliberately knows nothing about how either pick was computed — it just
|
|
117
|
+
* writes the pair.
|
|
118
|
+
*/
|
|
119
|
+
export function recordPair(args) {
|
|
120
|
+
const cfg = getConfig();
|
|
121
|
+
const hash = taskHash(args.task);
|
|
122
|
+
if (!cfg.enabled)
|
|
123
|
+
return { recorded: false, taskHash: hash };
|
|
124
|
+
const row = {
|
|
125
|
+
v: 1,
|
|
126
|
+
type: 'pair',
|
|
127
|
+
ts: new Date().toISOString(),
|
|
128
|
+
task_hash: hash,
|
|
129
|
+
bandit: args.bandit,
|
|
130
|
+
ser: args.ser,
|
|
131
|
+
};
|
|
132
|
+
if (cfg.includeTaskText) {
|
|
133
|
+
row.task = args.task.length > cfg.taskCharLimit
|
|
134
|
+
? args.task.slice(0, cfg.taskCharLimit) + '…'
|
|
135
|
+
: args.task;
|
|
136
|
+
}
|
|
137
|
+
appendRow(row);
|
|
138
|
+
return { recorded: true, taskHash: hash };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Record the outcome of a previously-paired decision. Matched to its
|
|
142
|
+
* pair row by task_hash. Writes a separate JSONL row of type 'outcome'
|
|
143
|
+
* which the analyzer joins client-side (same pattern as the existing
|
|
144
|
+
* router-trajectory recorder).
|
|
145
|
+
*
|
|
146
|
+
* Returns the task_hash that was matched (caller can verify against
|
|
147
|
+
* what recordPair() returned).
|
|
148
|
+
*/
|
|
149
|
+
export function recordPairOutcome(args) {
|
|
150
|
+
const cfg = getConfig();
|
|
151
|
+
const hash = taskHash(args.task);
|
|
152
|
+
if (!cfg.enabled)
|
|
153
|
+
return { recorded: false, taskHash: hash };
|
|
154
|
+
const row = {
|
|
155
|
+
v: 1,
|
|
156
|
+
type: 'pair-outcome',
|
|
157
|
+
ts: new Date().toISOString(),
|
|
158
|
+
task_hash: hash,
|
|
159
|
+
bandit: { pick: args.outcome.actualModel, predictedQuality: 0, predictedCostUsd: 0 },
|
|
160
|
+
ser: { pick: args.outcome.actualModel, predictedQuality: 0, predictedCostUsd: 0 },
|
|
161
|
+
outcome: args.outcome,
|
|
162
|
+
};
|
|
163
|
+
appendRow(row);
|
|
164
|
+
return { recorded: true, taskHash: hash };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Status helper for diagnostics / smoke tests.
|
|
168
|
+
*/
|
|
169
|
+
export function parallelRecorderStatus() {
|
|
170
|
+
const cfg = getConfig();
|
|
171
|
+
return {
|
|
172
|
+
enabled: cfg.enabled,
|
|
173
|
+
path: cfg.path,
|
|
174
|
+
includeTaskText: cfg.includeTaskText,
|
|
175
|
+
taskCharLimit: cfg.taskCharLimit,
|
|
176
|
+
maxBytes: cfg.maxBytes,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/** @internal — test helper. */
|
|
180
|
+
export function __resetParallelRecorderForTests() {
|
|
181
|
+
_cfg = null;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=router-parallel-recorder.js.map
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router-trajectory.ts — Opt-in DRACO-shaped trajectory recorder for the
|
|
3
|
+
* cost-optimal model router (ADR-148, phase 5).
|
|
4
|
+
*
|
|
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).
|
|
8
|
+
*
|
|
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.
|
|
12
|
+
*
|
|
13
|
+
* Schema is versioned (`"v": 1`). New required fields bump the version;
|
|
14
|
+
* additive optional fields do not.
|
|
15
|
+
*
|
|
16
|
+
* COMPANION: run-transcript-recorder.ts (weight-eft capture path)
|
|
17
|
+
* --------------------------------------------------------------
|
|
18
|
+
* This recorder captures the routing DECISION only (task, embedding, scalar
|
|
19
|
+
* quality, tokens, cost) — enough to retrain the router. It deliberately does
|
|
20
|
+
* NOT carry the full message transcript, the produced patch, or a resolved
|
|
21
|
+
* boolean. `@metaharness/weight-eft` needs those to build SFT/DPO training
|
|
22
|
+
* rows, so a SEPARATE opt-in recorder — `run-transcript-recorder.ts` — captures
|
|
23
|
+
* the full run transcript to `.swarm/run-transcripts.jsonl`. Both share the
|
|
24
|
+
* `taskHash()` below as their join key, and both are off-by-default for the
|
|
25
|
+
* same PII/retention reason. Use `unifiedRecorderStatus()` (bottom of this
|
|
26
|
+
* file) to inspect both at once. Keeping them as two files keeps the routing
|
|
27
|
+
* hot path free of the heavier transcript payload.
|
|
28
|
+
*
|
|
29
|
+
* @module router-trajectory
|
|
30
|
+
*/
|
|
31
|
+
import type { ClaudeModel } from './model-router.js';
|
|
32
|
+
/** A single routing decision — written at `route()` time. */
|
|
33
|
+
export interface TrajectoryDecisionRow {
|
|
34
|
+
v: 1;
|
|
35
|
+
type: 'decision';
|
|
36
|
+
ts: string;
|
|
37
|
+
task_hash: string;
|
|
38
|
+
task: string;
|
|
39
|
+
embedding?: number[];
|
|
40
|
+
complexity: number;
|
|
41
|
+
model: ClaudeModel;
|
|
42
|
+
confidence: number;
|
|
43
|
+
uncertainty: number;
|
|
44
|
+
routed_by: 'hybrid' | 'bandit-fallback' | 'heuristic';
|
|
45
|
+
/** Underlying neural backend when routed_by='hybrid', else absent. */
|
|
46
|
+
neural_backend?: 'metaharness-knn' | 'metaharness-krr' | 'fastgrnn';
|
|
47
|
+
/**
|
|
48
|
+
* A/B mode (CLAUDE_FLOW_ROUTER_AB=1) attaches both the bandit-only pick
|
|
49
|
+
* and the hybrid pick so disagreement rate is measurable over time.
|
|
50
|
+
*/
|
|
51
|
+
ab_pair?: {
|
|
52
|
+
bandit_pick: ClaudeModel;
|
|
53
|
+
hybrid_pick: ClaudeModel;
|
|
54
|
+
disagree: boolean;
|
|
55
|
+
};
|
|
56
|
+
/** Execution provider hint (phase 2): 'anthropic' or 'openrouter'. */
|
|
57
|
+
provider?: 'anthropic' | 'openrouter';
|
|
58
|
+
/** Concrete OpenRouter model slug when provider=openrouter. */
|
|
59
|
+
openrouter_model?: string;
|
|
60
|
+
/**
|
|
61
|
+
* iter 46 — ensemble-disagreement diagnostic from iter 45. Absolute
|
|
62
|
+
* difference between unified KRR and bucket specialist predictions for
|
|
63
|
+
* the picked model. Set when both backends were queried (bucket
|
|
64
|
+
* specialist available + bucket supplied). Persisting per-decision lets
|
|
65
|
+
* a future tuner analyze the distribution and recommend an iter 44
|
|
66
|
+
* threshold.
|
|
67
|
+
*/
|
|
68
|
+
ensemble_disagreement?: number;
|
|
69
|
+
}
|
|
70
|
+
/** A routing outcome — written later by the caller via `recordOutcome()`. */
|
|
71
|
+
export interface TrajectoryOutcomeRow {
|
|
72
|
+
v: 1;
|
|
73
|
+
type: 'outcome';
|
|
74
|
+
ts: string;
|
|
75
|
+
task_hash: string;
|
|
76
|
+
/** 0..1 measured quality the chosen model achieved. */
|
|
77
|
+
quality: number;
|
|
78
|
+
/** Optional per-model quality if the same query was evaluated against alternates. */
|
|
79
|
+
scores?: Record<string, number>;
|
|
80
|
+
/** Free-form provenance note (e.g. "manual rating", "benchmark suite"). */
|
|
81
|
+
source?: string;
|
|
82
|
+
/**
|
|
83
|
+
* iter 31 — token usage from the underlying API response. Optional and
|
|
84
|
+
* additive: pre-iter-31 readers see undefined; iter-31+ consumers can
|
|
85
|
+
* sum these for production cost accounting. `modelId` is repeated here
|
|
86
|
+
* (also in the paired decision row) so cost computation needs only the
|
|
87
|
+
* outcome row — no JOIN required for streaming aggregation.
|
|
88
|
+
*/
|
|
89
|
+
tokens?: {
|
|
90
|
+
input: number;
|
|
91
|
+
output: number;
|
|
92
|
+
};
|
|
93
|
+
/** USD spend for this call. Computed at write time from `tokens` + the
|
|
94
|
+
* shared price table (model-prices.ts) so consumers get a canonical
|
|
95
|
+
* number even if prices change between write and read. */
|
|
96
|
+
cost_usd?: number;
|
|
97
|
+
/** Concrete model id the call dispatched against (iter 13+ wired this
|
|
98
|
+
* through agent.modelId). May differ from the bandit's tier label. */
|
|
99
|
+
model_id?: string;
|
|
100
|
+
}
|
|
101
|
+
export type TrajectoryRow = TrajectoryDecisionRow | TrajectoryOutcomeRow;
|
|
102
|
+
export declare function taskHash(task: string): string;
|
|
103
|
+
/** Record one decision. Cheap — a single appendFileSync of a JSONL row. */
|
|
104
|
+
export declare function recordDecision(args: {
|
|
105
|
+
task: string;
|
|
106
|
+
embedding?: number[];
|
|
107
|
+
complexity: number;
|
|
108
|
+
model: ClaudeModel;
|
|
109
|
+
confidence: number;
|
|
110
|
+
uncertainty: number;
|
|
111
|
+
routedBy: TrajectoryDecisionRow['routed_by'];
|
|
112
|
+
neuralBackend?: TrajectoryDecisionRow['neural_backend'];
|
|
113
|
+
abPair?: TrajectoryDecisionRow['ab_pair'];
|
|
114
|
+
provider?: TrajectoryDecisionRow['provider'];
|
|
115
|
+
openrouterModel?: TrajectoryDecisionRow['openrouter_model'];
|
|
116
|
+
/** iter 46 — optional ensemble disagreement diagnostic (iter 45). */
|
|
117
|
+
ensembleDisagreement?: number;
|
|
118
|
+
}): void;
|
|
119
|
+
/** Record one outcome. Join to a decision by `task_hash`. */
|
|
120
|
+
export declare function recordTrajectoryOutcome(args: {
|
|
121
|
+
task: string;
|
|
122
|
+
quality: number;
|
|
123
|
+
scores?: Record<string, number>;
|
|
124
|
+
source?: string;
|
|
125
|
+
/** iter 31 — optional token usage from the underlying API call. */
|
|
126
|
+
tokens?: {
|
|
127
|
+
input: number;
|
|
128
|
+
output: number;
|
|
129
|
+
};
|
|
130
|
+
/** iter 31 — concrete model id for cost computation against MODEL_PRICES. */
|
|
131
|
+
modelId?: string;
|
|
132
|
+
}): void;
|
|
133
|
+
/** Diagnostic for status/CLI. */
|
|
134
|
+
export declare function trajectoryRecorderStatus(): {
|
|
135
|
+
enabled: boolean;
|
|
136
|
+
path: string;
|
|
137
|
+
taskCharLimit: number;
|
|
138
|
+
};
|
|
139
|
+
/** A training row reconstructed from one decision+outcome pair. Shape matches
|
|
140
|
+
* the bundled seed-corpus (`seed-rows.json`) so the same train-bundled-krr.mjs
|
|
141
|
+
* pipeline can consume it. */
|
|
142
|
+
export interface PairedTrainingRow {
|
|
143
|
+
task: string;
|
|
144
|
+
embedding: number[];
|
|
145
|
+
scores: Record<string, number>;
|
|
146
|
+
tier: 'cheap' | 'mid' | 'strong';
|
|
147
|
+
/** Provenance — useful for filtering low-signal sources at training time. */
|
|
148
|
+
source: string;
|
|
149
|
+
/** ISO timestamp of the outcome row (newer rows can be weighted higher). */
|
|
150
|
+
ts: string;
|
|
151
|
+
}
|
|
152
|
+
/** Map decision-side complexity ∈ [0,1] back to the corpus tier label. The
|
|
153
|
+
* buckets are deliberately the same boundaries the bandit uses so a pair
|
|
154
|
+
* drawn from production lands in the same KRR specialist that served it. */
|
|
155
|
+
export declare function tierFromComplexity(complexity: number): 'cheap' | 'mid' | 'strong';
|
|
156
|
+
/** Pair decision+outcome rows by task_hash. Returns the rebuilt training rows
|
|
157
|
+
* + diagnostics so the caller (script or test) can report what was dropped
|
|
158
|
+
* and why. */
|
|
159
|
+
export declare function pairTrajectoryRows(rows: TrajectoryRow[]): {
|
|
160
|
+
pairs: PairedTrainingRow[];
|
|
161
|
+
stats: {
|
|
162
|
+
totalRows: number;
|
|
163
|
+
decisions: number;
|
|
164
|
+
outcomes: number;
|
|
165
|
+
paired: number;
|
|
166
|
+
droppedNoEmbedding: number;
|
|
167
|
+
droppedNoMatch: number;
|
|
168
|
+
bySource: Record<string, number>;
|
|
169
|
+
byTier: Record<string, number>;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
/** Test seam — reset cached config so unit tests can change env vars between cases. */
|
|
173
|
+
export declare function __resetTrajectoryRecorderForTests(): void;
|
|
174
|
+
/**
|
|
175
|
+
* Unified status for BOTH the routing-decision recorder (this module) and the
|
|
176
|
+
* companion run-transcript recorder (the weight-eft capture path). The
|
|
177
|
+
* run-transcript recorder is loaded dynamically so this module has no static
|
|
178
|
+
* dependency on it (the reverse edge — run-transcript-recorder → taskHash —
|
|
179
|
+
* is the only static link, keeping the import acyclic).
|
|
180
|
+
*/
|
|
181
|
+
export declare function unifiedRecorderStatus(): Promise<{
|
|
182
|
+
routerTrajectory: {
|
|
183
|
+
enabled: boolean;
|
|
184
|
+
path: string;
|
|
185
|
+
taskCharLimit: number;
|
|
186
|
+
};
|
|
187
|
+
runTranscripts: {
|
|
188
|
+
enabled: boolean;
|
|
189
|
+
path: string;
|
|
190
|
+
} | {
|
|
191
|
+
unavailable: true;
|
|
192
|
+
};
|
|
193
|
+
}>;
|
|
194
|
+
//# sourceMappingURL=router-trajectory.d.ts.map
|