@substrate-ai/core 0.19.54
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/README.md +55 -0
- package/dist/__tests__/adapter.test.d.ts +12 -0
- package/dist/__tests__/adapter.test.d.ts.map +1 -0
- package/dist/__tests__/adapter.test.js +259 -0
- package/dist/__tests__/adapter.test.js.map +1 -0
- package/dist/__tests__/event-bus.test.d.ts +14 -0
- package/dist/__tests__/event-bus.test.d.ts.map +1 -0
- package/dist/__tests__/event-bus.test.js +199 -0
- package/dist/__tests__/event-bus.test.js.map +1 -0
- package/dist/__tests__/output-quality.test.d.ts +8 -0
- package/dist/__tests__/output-quality.test.d.ts.map +1 -0
- package/dist/__tests__/output-quality.test.js +166 -0
- package/dist/__tests__/output-quality.test.js.map +1 -0
- package/dist/__tests__/schema-suffix.test.d.ts +9 -0
- package/dist/__tests__/schema-suffix.test.d.ts.map +1 -0
- package/dist/__tests__/schema-suffix.test.js +126 -0
- package/dist/__tests__/schema-suffix.test.js.map +1 -0
- package/dist/__tests__/yaml-parser.test.d.ts +18 -0
- package/dist/__tests__/yaml-parser.test.d.ts.map +1 -0
- package/dist/__tests__/yaml-parser.test.js +475 -0
- package/dist/__tests__/yaml-parser.test.js.map +1 -0
- package/dist/__type-checks__.d.ts +11 -0
- package/dist/__type-checks__.d.ts.map +1 -0
- package/dist/__type-checks__.js +19 -0
- package/dist/__type-checks__.js.map +1 -0
- package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts +12 -0
- package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts.map +1 -0
- package/dist/adapters/__tests__/adapter-output-normalizer.test.js +193 -0
- package/dist/adapters/__tests__/adapter-output-normalizer.test.js.map +1 -0
- package/dist/adapters/adapter-format-error.d.ts +35 -0
- package/dist/adapters/adapter-format-error.d.ts.map +1 -0
- package/dist/adapters/adapter-format-error.js +38 -0
- package/dist/adapters/adapter-format-error.js.map +1 -0
- package/dist/adapters/adapter-output-normalizer.d.ts +50 -0
- package/dist/adapters/adapter-output-normalizer.d.ts.map +1 -0
- package/dist/adapters/adapter-output-normalizer.js +233 -0
- package/dist/adapters/adapter-output-normalizer.js.map +1 -0
- package/dist/adapters/adapter-registry.d.ts +50 -0
- package/dist/adapters/adapter-registry.d.ts.map +1 -0
- package/dist/adapters/adapter-registry.js +101 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/claude-adapter.d.ts +59 -0
- package/dist/adapters/claude-adapter.d.ts.map +1 -0
- package/dist/adapters/claude-adapter.js +367 -0
- package/dist/adapters/claude-adapter.js.map +1 -0
- package/dist/adapters/codex-adapter.d.ts +64 -0
- package/dist/adapters/codex-adapter.d.ts.map +1 -0
- package/dist/adapters/codex-adapter.js +263 -0
- package/dist/adapters/codex-adapter.js.map +1 -0
- package/dist/adapters/gemini-adapter.d.ts +57 -0
- package/dist/adapters/gemini-adapter.d.ts.map +1 -0
- package/dist/adapters/gemini-adapter.js +311 -0
- package/dist/adapters/gemini-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +10 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +14 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/schemas.d.ts +137 -0
- package/dist/adapters/schemas.d.ts.map +1 -0
- package/dist/adapters/schemas.js +140 -0
- package/dist/adapters/schemas.js.map +1 -0
- package/dist/adapters/types.d.ts +245 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +6 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/worker-adapter.d.ts +188 -0
- package/dist/adapters/worker-adapter.d.ts.map +1 -0
- package/dist/adapters/worker-adapter.js +19 -0
- package/dist/adapters/worker-adapter.js.map +1 -0
- package/dist/budget/budget-tracker.d.ts +22 -0
- package/dist/budget/budget-tracker.d.ts.map +1 -0
- package/dist/budget/budget-tracker.js +39 -0
- package/dist/budget/budget-tracker.js.map +1 -0
- package/dist/budget/index.d.ts +6 -0
- package/dist/budget/index.d.ts.map +1 -0
- package/dist/budget/index.js +5 -0
- package/dist/budget/index.js.map +1 -0
- package/dist/config/config-migrator.d.ts +58 -0
- package/dist/config/config-migrator.d.ts.map +1 -0
- package/dist/config/config-migrator.js +158 -0
- package/dist/config/config-migrator.js.map +1 -0
- package/dist/config/config-system-impl.d.ts +63 -0
- package/dist/config/config-system-impl.d.ts.map +1 -0
- package/dist/config/config-system-impl.js +364 -0
- package/dist/config/config-system-impl.js.map +1 -0
- package/dist/config/config-watcher.d.ts +59 -0
- package/dist/config/config-watcher.d.ts.map +1 -0
- package/dist/config/config-watcher.js +137 -0
- package/dist/config/config-watcher.js.map +1 -0
- package/dist/config/defaults.d.ts +13 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +62 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/errors.d.ts +25 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/errors.js +49 -0
- package/dist/config/errors.js.map +1 -0
- package/dist/config/index.d.ts +19 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +39 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +456 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +174 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/version-utils.d.ts +39 -0
- package/dist/config/version-utils.d.ts.map +1 -0
- package/dist/config/version-utils.js +66 -0
- package/dist/config/version-utils.js.map +1 -0
- package/dist/context/index.d.ts +2 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/types.d.ts +113 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +59 -0
- package/dist/context/types.js.map +1 -0
- package/dist/cost-tracker/cost-tracker-impl.d.ts +51 -0
- package/dist/cost-tracker/cost-tracker-impl.d.ts.map +1 -0
- package/dist/cost-tracker/cost-tracker-impl.js +85 -0
- package/dist/cost-tracker/cost-tracker-impl.js.map +1 -0
- package/dist/cost-tracker/cost-tracker-subscriber.d.ts +31 -0
- package/dist/cost-tracker/cost-tracker-subscriber.d.ts.map +1 -0
- package/dist/cost-tracker/cost-tracker-subscriber.js +116 -0
- package/dist/cost-tracker/cost-tracker-subscriber.js.map +1 -0
- package/dist/cost-tracker/index.d.ts +11 -0
- package/dist/cost-tracker/index.d.ts.map +1 -0
- package/dist/cost-tracker/index.js +7 -0
- package/dist/cost-tracker/index.js.map +1 -0
- package/dist/cost-tracker/token-rates.d.ts +25 -0
- package/dist/cost-tracker/token-rates.d.ts.map +1 -0
- package/dist/cost-tracker/token-rates.js +99 -0
- package/dist/cost-tracker/token-rates.js.map +1 -0
- package/dist/cost-tracker/types.d.ts +6 -0
- package/dist/cost-tracker/types.d.ts.map +1 -0
- package/dist/cost-tracker/types.js +2 -0
- package/dist/cost-tracker/types.js.map +1 -0
- package/dist/dispatch/dispatcher-impl.d.ts +92 -0
- package/dist/dispatch/dispatcher-impl.d.ts.map +1 -0
- package/dist/dispatch/dispatcher-impl.js +847 -0
- package/dist/dispatch/dispatcher-impl.js.map +1 -0
- package/dist/dispatch/index.d.ts +15 -0
- package/dist/dispatch/index.d.ts.map +1 -0
- package/dist/dispatch/index.js +14 -0
- package/dist/dispatch/index.js.map +1 -0
- package/dist/dispatch/interface-change-detector.d.ts +46 -0
- package/dist/dispatch/interface-change-detector.d.ts.map +1 -0
- package/dist/dispatch/interface-change-detector.js +135 -0
- package/dist/dispatch/interface-change-detector.js.map +1 -0
- package/dist/dispatch/output-quality.d.ts +43 -0
- package/dist/dispatch/output-quality.d.ts.map +1 -0
- package/dist/dispatch/output-quality.js +148 -0
- package/dist/dispatch/output-quality.js.map +1 -0
- package/dist/dispatch/types.d.ts +271 -0
- package/dist/dispatch/types.d.ts.map +1 -0
- package/dist/dispatch/types.js +76 -0
- package/dist/dispatch/types.js.map +1 -0
- package/dist/dispatch/yaml-parser.d.ts +40 -0
- package/dist/dispatch/yaml-parser.d.ts.map +1 -0
- package/dist/dispatch/yaml-parser.js +323 -0
- package/dist/dispatch/yaml-parser.js.map +1 -0
- package/dist/events/core-events.d.ts +288 -0
- package/dist/events/core-events.d.ts.map +1 -0
- package/dist/events/core-events.js +10 -0
- package/dist/events/core-events.js.map +1 -0
- package/dist/events/event-bus.d.ts +55 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/event-bus.js +52 -0
- package/dist/events/event-bus.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +6 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +21 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +8 -0
- package/dist/events/types.js.map +1 -0
- package/dist/git/git-manager.d.ts +31 -0
- package/dist/git/git-manager.d.ts.map +1 -0
- package/dist/git/git-manager.js +46 -0
- package/dist/git/git-manager.js.map +1 -0
- package/dist/git/git-utils.d.ts +166 -0
- package/dist/git/git-utils.d.ts.map +1 -0
- package/dist/git/git-utils.js +347 -0
- package/dist/git/git-utils.js.map +1 -0
- package/dist/git/git-worktree-manager-impl.d.ts +58 -0
- package/dist/git/git-worktree-manager-impl.d.ts.map +1 -0
- package/dist/git/git-worktree-manager-impl.js +336 -0
- package/dist/git/git-worktree-manager-impl.js.map +1 -0
- package/dist/git/git-worktree-manager.d.ts +122 -0
- package/dist/git/git-worktree-manager.d.ts.map +1 -0
- package/dist/git/git-worktree-manager.js +14 -0
- package/dist/git/git-worktree-manager.js.map +1 -0
- package/dist/git/index.d.ts +11 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +8 -0
- package/dist/git/index.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/client.d.ts +42 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +27 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/monitor/index.d.ts +15 -0
- package/dist/monitor/index.d.ts.map +1 -0
- package/dist/monitor/index.js +9 -0
- package/dist/monitor/index.js.map +1 -0
- package/dist/monitor/monitor-agent-impl.d.ts +56 -0
- package/dist/monitor/monitor-agent-impl.d.ts.map +1 -0
- package/dist/monitor/monitor-agent-impl.js +178 -0
- package/dist/monitor/monitor-agent-impl.js.map +1 -0
- package/dist/monitor/monitor-agent.d.ts +36 -0
- package/dist/monitor/monitor-agent.d.ts.map +1 -0
- package/dist/monitor/monitor-agent.js +6 -0
- package/dist/monitor/monitor-agent.js.map +1 -0
- package/dist/monitor/performance-aggregates.d.ts +41 -0
- package/dist/monitor/performance-aggregates.d.ts.map +1 -0
- package/dist/monitor/performance-aggregates.js +6 -0
- package/dist/monitor/performance-aggregates.js.map +1 -0
- package/dist/monitor/recommendation-engine.d.ts +27 -0
- package/dist/monitor/recommendation-engine.d.ts.map +1 -0
- package/dist/monitor/recommendation-engine.js +140 -0
- package/dist/monitor/recommendation-engine.js.map +1 -0
- package/dist/monitor/recommendation-types.d.ts +30 -0
- package/dist/monitor/recommendation-types.d.ts.map +1 -0
- package/dist/monitor/recommendation-types.js +43 -0
- package/dist/monitor/recommendation-types.js.map +1 -0
- package/dist/monitor/report-generator.d.ts +48 -0
- package/dist/monitor/report-generator.d.ts.map +1 -0
- package/dist/monitor/report-generator.js +123 -0
- package/dist/monitor/report-generator.js.map +1 -0
- package/dist/monitor/task-type-classifier.d.ts +19 -0
- package/dist/monitor/task-type-classifier.d.ts.map +1 -0
- package/dist/monitor/task-type-classifier.js +68 -0
- package/dist/monitor/task-type-classifier.js.map +1 -0
- package/dist/persistence/adapter.d.ts +4 -0
- package/dist/persistence/adapter.d.ts.map +1 -0
- package/dist/persistence/adapter.js +56 -0
- package/dist/persistence/adapter.js.map +1 -0
- package/dist/persistence/cost-types.d.ts +87 -0
- package/dist/persistence/cost-types.d.ts.map +1 -0
- package/dist/persistence/cost-types.js +14 -0
- package/dist/persistence/cost-types.js.map +1 -0
- package/dist/persistence/dolt-adapter-transaction.test.d.ts +10 -0
- package/dist/persistence/dolt-adapter-transaction.test.d.ts.map +1 -0
- package/dist/persistence/dolt-adapter-transaction.test.js +359 -0
- package/dist/persistence/dolt-adapter-transaction.test.js.map +1 -0
- package/dist/persistence/dolt-adapter.d.ts +77 -0
- package/dist/persistence/dolt-adapter.d.ts.map +1 -0
- package/dist/persistence/dolt-adapter.js +98 -0
- package/dist/persistence/dolt-adapter.js.map +1 -0
- package/dist/persistence/dolt-client.d.ts +69 -0
- package/dist/persistence/dolt-client.d.ts.map +1 -0
- package/dist/persistence/dolt-client.js +278 -0
- package/dist/persistence/dolt-client.js.map +1 -0
- package/dist/persistence/dolt-errors.d.ts +10 -0
- package/dist/persistence/dolt-errors.d.ts.map +1 -0
- package/dist/persistence/dolt-errors.js +15 -0
- package/dist/persistence/dolt-errors.js.map +1 -0
- package/dist/persistence/dolt-init.d.ts +64 -0
- package/dist/persistence/dolt-init.d.ts.map +1 -0
- package/dist/persistence/dolt-init.js +233 -0
- package/dist/persistence/dolt-init.js.map +1 -0
- package/dist/persistence/index.d.ts +23 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +23 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/memory-adapter.d.ts +156 -0
- package/dist/persistence/memory-adapter.d.ts.map +1 -0
- package/dist/persistence/memory-adapter.js +1167 -0
- package/dist/persistence/memory-adapter.js.map +1 -0
- package/dist/persistence/monitor-database.d.ts +113 -0
- package/dist/persistence/monitor-database.d.ts.map +1 -0
- package/dist/persistence/monitor-database.js +345 -0
- package/dist/persistence/monitor-database.js.map +1 -0
- package/dist/persistence/queries/amendments.d.ts +91 -0
- package/dist/persistence/queries/amendments.d.ts.map +1 -0
- package/dist/persistence/queries/amendments.js +185 -0
- package/dist/persistence/queries/amendments.js.map +1 -0
- package/dist/persistence/queries/cost.d.ts +130 -0
- package/dist/persistence/queries/cost.d.ts.map +1 -0
- package/dist/persistence/queries/cost.js +384 -0
- package/dist/persistence/queries/cost.js.map +1 -0
- package/dist/persistence/queries/decisions.d.ts +131 -0
- package/dist/persistence/queries/decisions.d.ts.map +1 -0
- package/dist/persistence/queries/decisions.js +339 -0
- package/dist/persistence/queries/decisions.js.map +1 -0
- package/dist/persistence/queries/metrics.d.ts +155 -0
- package/dist/persistence/queries/metrics.d.ts.map +1 -0
- package/dist/persistence/queries/metrics.js +237 -0
- package/dist/persistence/queries/metrics.js.map +1 -0
- package/dist/persistence/queries/retry-escalated.d.ts +35 -0
- package/dist/persistence/queries/retry-escalated.d.ts.map +1 -0
- package/dist/persistence/queries/retry-escalated.js +83 -0
- package/dist/persistence/queries/retry-escalated.js.map +1 -0
- package/dist/persistence/schema-version.d.ts +89 -0
- package/dist/persistence/schema-version.d.ts.map +1 -0
- package/dist/persistence/schema-version.js +67 -0
- package/dist/persistence/schema-version.js.map +1 -0
- package/dist/persistence/schema.d.ts +26 -0
- package/dist/persistence/schema.d.ts.map +1 -0
- package/dist/persistence/schema.js +509 -0
- package/dist/persistence/schema.js.map +1 -0
- package/dist/persistence/schemas/decisions.d.ts +176 -0
- package/dist/persistence/schemas/decisions.d.ts.map +1 -0
- package/dist/persistence/schemas/decisions.js +139 -0
- package/dist/persistence/schemas/decisions.js.map +1 -0
- package/dist/persistence/schemas/operational.d.ts +194 -0
- package/dist/persistence/schemas/operational.d.ts.map +1 -0
- package/dist/persistence/schemas/operational.js +197 -0
- package/dist/persistence/schemas/operational.js.map +1 -0
- package/dist/persistence/types.d.ts +98 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +22 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/quality-gates/index.d.ts +2 -0
- package/dist/quality-gates/index.d.ts.map +1 -0
- package/dist/quality-gates/index.js +2 -0
- package/dist/quality-gates/index.js.map +1 -0
- package/dist/quality-gates/types.d.ts +106 -0
- package/dist/quality-gates/types.d.ts.map +1 -0
- package/dist/quality-gates/types.js +5 -0
- package/dist/quality-gates/types.js.map +1 -0
- package/dist/routing/index.d.ts +19 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +32 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/model-routing-config.d.ts +75 -0
- package/dist/routing/model-routing-config.d.ts.map +1 -0
- package/dist/routing/model-routing-config.js +110 -0
- package/dist/routing/model-routing-config.js.map +1 -0
- package/dist/routing/model-routing-resolver.d.ts +48 -0
- package/dist/routing/model-routing-resolver.d.ts.map +1 -0
- package/dist/routing/model-routing-resolver.js +105 -0
- package/dist/routing/model-routing-resolver.js.map +1 -0
- package/dist/routing/model-tier.d.ts +21 -0
- package/dist/routing/model-tier.d.ts.map +1 -0
- package/dist/routing/model-tier.js +34 -0
- package/dist/routing/model-tier.js.map +1 -0
- package/dist/routing/provider-status.d.ts +99 -0
- package/dist/routing/provider-status.d.ts.map +1 -0
- package/dist/routing/provider-status.js +163 -0
- package/dist/routing/provider-status.js.map +1 -0
- package/dist/routing/routing-decision.d.ts +127 -0
- package/dist/routing/routing-decision.d.ts.map +1 -0
- package/dist/routing/routing-decision.js +111 -0
- package/dist/routing/routing-decision.js.map +1 -0
- package/dist/routing/routing-engine-impl.d.ts +132 -0
- package/dist/routing/routing-engine-impl.d.ts.map +1 -0
- package/dist/routing/routing-engine-impl.js +450 -0
- package/dist/routing/routing-engine-impl.js.map +1 -0
- package/dist/routing/routing-engine.d.ts +83 -0
- package/dist/routing/routing-engine.d.ts.map +1 -0
- package/dist/routing/routing-engine.js +24 -0
- package/dist/routing/routing-engine.js.map +1 -0
- package/dist/routing/routing-policy.d.ts +138 -0
- package/dist/routing/routing-policy.d.ts.map +1 -0
- package/dist/routing/routing-policy.js +159 -0
- package/dist/routing/routing-policy.js.map +1 -0
- package/dist/routing/routing-recommender.d.ts +60 -0
- package/dist/routing/routing-recommender.d.ts.map +1 -0
- package/dist/routing/routing-recommender.js +209 -0
- package/dist/routing/routing-recommender.js.map +1 -0
- package/dist/routing/routing-telemetry.d.ts +36 -0
- package/dist/routing/routing-telemetry.d.ts.map +1 -0
- package/dist/routing/routing-telemetry.js +39 -0
- package/dist/routing/routing-telemetry.js.map +1 -0
- package/dist/routing/routing-token-accumulator.d.ts +68 -0
- package/dist/routing/routing-token-accumulator.d.ts.map +1 -0
- package/dist/routing/routing-token-accumulator.js +111 -0
- package/dist/routing/routing-token-accumulator.js.map +1 -0
- package/dist/routing/routing-tuner.d.ts +69 -0
- package/dist/routing/routing-tuner.d.ts.map +1 -0
- package/dist/routing/routing-tuner.js +217 -0
- package/dist/routing/routing-tuner.js.map +1 -0
- package/dist/routing/types.d.ts +152 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/routing/types.js +13 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/supervisor/analysis.d.ts +178 -0
- package/dist/supervisor/analysis.d.ts.map +1 -0
- package/dist/supervisor/analysis.js +420 -0
- package/dist/supervisor/analysis.js.map +1 -0
- package/dist/supervisor/experimenter.d.ts +118 -0
- package/dist/supervisor/experimenter.d.ts.map +1 -0
- package/dist/supervisor/experimenter.js +493 -0
- package/dist/supervisor/experimenter.js.map +1 -0
- package/dist/supervisor/index.d.ts +13 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +11 -0
- package/dist/supervisor/index.js.map +1 -0
- package/dist/telemetry/batch-buffer.d.ts +53 -0
- package/dist/telemetry/batch-buffer.d.ts.map +1 -0
- package/dist/telemetry/batch-buffer.js +83 -0
- package/dist/telemetry/batch-buffer.js.map +1 -0
- package/dist/telemetry/categorizer.d.ts +65 -0
- package/dist/telemetry/categorizer.d.ts.map +1 -0
- package/dist/telemetry/categorizer.js +338 -0
- package/dist/telemetry/categorizer.js.map +1 -0
- package/dist/telemetry/consumer-analyzer.d.ts +53 -0
- package/dist/telemetry/consumer-analyzer.d.ts.map +1 -0
- package/dist/telemetry/consumer-analyzer.js +182 -0
- package/dist/telemetry/consumer-analyzer.js.map +1 -0
- package/dist/telemetry/cost-table.d.ts +36 -0
- package/dist/telemetry/cost-table.d.ts.map +1 -0
- package/dist/telemetry/cost-table.js +127 -0
- package/dist/telemetry/cost-table.js.map +1 -0
- package/dist/telemetry/efficiency-scorer.d.ts +103 -0
- package/dist/telemetry/efficiency-scorer.d.ts.map +1 -0
- package/dist/telemetry/efficiency-scorer.js +311 -0
- package/dist/telemetry/efficiency-scorer.js.map +1 -0
- package/dist/telemetry/index.d.ts +28 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +37 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/ingestion-server.d.ts +99 -0
- package/dist/telemetry/ingestion-server.d.ts.map +1 -0
- package/dist/telemetry/ingestion-server.js +315 -0
- package/dist/telemetry/ingestion-server.js.map +1 -0
- package/dist/telemetry/log-turn-analyzer.d.ts +35 -0
- package/dist/telemetry/log-turn-analyzer.d.ts.map +1 -0
- package/dist/telemetry/log-turn-analyzer.js +132 -0
- package/dist/telemetry/log-turn-analyzer.js.map +1 -0
- package/dist/telemetry/normalizer.d.ts +43 -0
- package/dist/telemetry/normalizer.d.ts.map +1 -0
- package/dist/telemetry/normalizer.js +320 -0
- package/dist/telemetry/normalizer.js.map +1 -0
- package/dist/telemetry/recommender.d.ts +116 -0
- package/dist/telemetry/recommender.d.ts.map +1 -0
- package/dist/telemetry/recommender.js +532 -0
- package/dist/telemetry/recommender.js.map +1 -0
- package/dist/telemetry/source-detector.d.ts +19 -0
- package/dist/telemetry/source-detector.d.ts.map +1 -0
- package/dist/telemetry/source-detector.js +73 -0
- package/dist/telemetry/source-detector.js.map +1 -0
- package/dist/telemetry/task-baselines.d.ts +30 -0
- package/dist/telemetry/task-baselines.d.ts.map +1 -0
- package/dist/telemetry/task-baselines.js +44 -0
- package/dist/telemetry/task-baselines.js.map +1 -0
- package/dist/telemetry/telemetry-pipeline.d.ts +122 -0
- package/dist/telemetry/telemetry-pipeline.d.ts.map +1 -0
- package/dist/telemetry/telemetry-pipeline.js +349 -0
- package/dist/telemetry/telemetry-pipeline.js.map +1 -0
- package/dist/telemetry/timestamp-normalizer.d.ts +32 -0
- package/dist/telemetry/timestamp-normalizer.d.ts.map +1 -0
- package/dist/telemetry/timestamp-normalizer.js +133 -0
- package/dist/telemetry/timestamp-normalizer.js.map +1 -0
- package/dist/telemetry/token-extractor.d.ts +57 -0
- package/dist/telemetry/token-extractor.d.ts.map +1 -0
- package/dist/telemetry/token-extractor.js +200 -0
- package/dist/telemetry/token-extractor.js.map +1 -0
- package/dist/telemetry/turn-analyzer.d.ts +34 -0
- package/dist/telemetry/turn-analyzer.d.ts.map +1 -0
- package/dist/telemetry/turn-analyzer.js +101 -0
- package/dist/telemetry/turn-analyzer.js.map +1 -0
- package/dist/telemetry/types.d.ts +456 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +186 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/types.d.ts +80 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/version-manager/index.d.ts +11 -0
- package/dist/version-manager/index.d.ts.map +1 -0
- package/dist/version-manager/index.js +8 -0
- package/dist/version-manager/index.js.map +1 -0
- package/dist/version-manager/update-checker.d.ts +44 -0
- package/dist/version-manager/update-checker.d.ts.map +1 -0
- package/dist/version-manager/update-checker.js +171 -0
- package/dist/version-manager/update-checker.js.map +1 -0
- package/dist/version-manager/version-cache.d.ts +42 -0
- package/dist/version-manager/version-cache.d.ts.map +1 -0
- package/dist/version-manager/version-cache.js +69 -0
- package/dist/version-manager/version-cache.js.map +1 -0
- package/dist/version-manager/version-manager-impl.d.ts +81 -0
- package/dist/version-manager/version-manager-impl.d.ts.map +1 -0
- package/dist/version-manager/version-manager-impl.js +223 -0
- package/dist/version-manager/version-manager-impl.js.map +1 -0
- package/dist/version-manager/version-manager.d.ts +70 -0
- package/dist/version-manager/version-manager.d.ts.map +1 -0
- package/dist/version-manager/version-manager.js +8 -0
- package/dist/version-manager/version-manager.js.map +1 -0
- package/package.json +27 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoutingEngineImpl — full implementation of the RoutingEngine.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* 1. Load and validate routing policy on initialization
|
|
6
|
+
* 2. Subscribe to task:ready events and make routing decisions
|
|
7
|
+
* 3. Emit task:routed events with full RoutingDecision
|
|
8
|
+
* 4. Subscribe to task:complete events to update rate limit tracking
|
|
9
|
+
* 5. Emit provider:unavailable when rate limits are exhausted
|
|
10
|
+
* 6. Support hot-reload via reloadPolicy()
|
|
11
|
+
*
|
|
12
|
+
* Architecture constraints:
|
|
13
|
+
* - ADR-004: Stateless except for rate limit tracking in-memory
|
|
14
|
+
* - ADR-008: Subscription-first policy is mandatory
|
|
15
|
+
* - FR22, FR23, FR25: Subscription routing toggles per provider
|
|
16
|
+
* - FR29: Rate limit management
|
|
17
|
+
* - FR38: Hot-reload without daemon restart
|
|
18
|
+
* - NFR7: Routing decision rationale in all decisions
|
|
19
|
+
*/
|
|
20
|
+
import { loadRoutingPolicy } from './routing-policy.js';
|
|
21
|
+
import { ProviderStatusTracker } from './provider-status.js';
|
|
22
|
+
import { makeRoutingDecision } from './routing-decision.js';
|
|
23
|
+
/** Default path to the routing policy YAML */
|
|
24
|
+
const DEFAULT_ROUTING_POLICY_PATH = '.substrate/routing-policy.yaml';
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// RoutingEngineImpl
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
export class RoutingEngineImpl {
|
|
29
|
+
_eventBus;
|
|
30
|
+
_configSystem;
|
|
31
|
+
_adapterRegistry;
|
|
32
|
+
_logger;
|
|
33
|
+
_policy = null;
|
|
34
|
+
_policyPath = DEFAULT_ROUTING_POLICY_PATH;
|
|
35
|
+
_statusTracker = new ProviderStatusTracker();
|
|
36
|
+
/** Optional monitor agent for advisory recommendations (AC5) */
|
|
37
|
+
_monitorAgent = null;
|
|
38
|
+
/** Whether to consult monitor for recommendations (AC6) */
|
|
39
|
+
_useMonitorRecommendations = false;
|
|
40
|
+
/** Bound references for event listener management */
|
|
41
|
+
_onTaskReady;
|
|
42
|
+
_onTaskComplete;
|
|
43
|
+
_onConfigReloaded;
|
|
44
|
+
constructor(eventBus, configSystem, adapterRegistry, logger) {
|
|
45
|
+
this._eventBus = eventBus;
|
|
46
|
+
this._configSystem = configSystem ?? null;
|
|
47
|
+
this._adapterRegistry = adapterRegistry ?? null;
|
|
48
|
+
this._logger = logger ?? console;
|
|
49
|
+
this._onTaskReady = ({ taskId, taskType }) => {
|
|
50
|
+
this._handleTaskReady(taskId, taskType);
|
|
51
|
+
};
|
|
52
|
+
this._onTaskComplete = ({ taskId, result }) => {
|
|
53
|
+
this._handleTaskComplete(taskId, result);
|
|
54
|
+
};
|
|
55
|
+
this._onConfigReloaded = (payload) => {
|
|
56
|
+
this._handleConfigReloaded(payload.changedKeys, payload.newConfig);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// BaseService lifecycle
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
async initialize() {
|
|
63
|
+
this._logger.info('RoutingEngine.initialize()');
|
|
64
|
+
// Resolve routing policy path from config
|
|
65
|
+
if (this._configSystem !== null) {
|
|
66
|
+
const configuredPath = this._configSystem.get('routing_policy_path');
|
|
67
|
+
if (typeof configuredPath === 'string' && configuredPath.length > 0) {
|
|
68
|
+
this._policyPath = configuredPath;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Load routing policy (gracefully handle missing file — policy is optional)
|
|
72
|
+
try {
|
|
73
|
+
this._policy = loadRoutingPolicy(this._policyPath);
|
|
74
|
+
this._initializeProviderTracking();
|
|
75
|
+
this._logger.info({ policyPath: this._policyPath }, 'Routing policy loaded successfully');
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
79
|
+
this._logger.debug({ policyPath: this._policyPath, err: message }, 'Routing policy not loaded — routing will use fallback behavior');
|
|
80
|
+
this._policy = null;
|
|
81
|
+
}
|
|
82
|
+
// Subscribe to events
|
|
83
|
+
this._eventBus.on('task:ready', this._onTaskReady);
|
|
84
|
+
this._eventBus.on('task:complete', this._onTaskComplete);
|
|
85
|
+
this._eventBus.on('config:reloaded', this._onConfigReloaded);
|
|
86
|
+
}
|
|
87
|
+
async shutdown() {
|
|
88
|
+
this._logger.info('RoutingEngine.shutdown()');
|
|
89
|
+
this._eventBus.off('task:ready', this._onTaskReady);
|
|
90
|
+
this._eventBus.off('task:complete', this._onTaskComplete);
|
|
91
|
+
this._eventBus.off('config:reloaded', this._onConfigReloaded);
|
|
92
|
+
}
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// RoutingEngine interface
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
/**
|
|
97
|
+
* Set the monitor agent for advisory recommendations (AC5).
|
|
98
|
+
* Called externally when use_monitor_recommendations=true.
|
|
99
|
+
*/
|
|
100
|
+
setMonitorAgent(monitorAgent, useRecommendations = true) {
|
|
101
|
+
this._monitorAgent = monitorAgent;
|
|
102
|
+
this._useMonitorRecommendations = useRecommendations;
|
|
103
|
+
this._logger.debug({ useRecommendations }, 'Monitor agent registered with routing engine');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Make a routing decision for a task.
|
|
107
|
+
*
|
|
108
|
+
* Implements the subscription-first algorithm from Architecture Section 8:
|
|
109
|
+
* 1. Check if task has explicit agent assignment
|
|
110
|
+
* 2. Determine preferred agents from routing policy (task type → preferred_agents)
|
|
111
|
+
* 3. For each preferred agent, evaluate subscription-first logic:
|
|
112
|
+
* a. If subscription_routing=true AND capacity available AND rate limit OK → subscription
|
|
113
|
+
* b. Else if API billing enabled AND API key configured → API
|
|
114
|
+
* c. Else try next fallback agent
|
|
115
|
+
* 4. If no agent available → return unavailable decision
|
|
116
|
+
* 5. (Advisory) If monitor agent available, attach recommendation (AC5)
|
|
117
|
+
*/
|
|
118
|
+
routeTask(task) {
|
|
119
|
+
const taskId = task.id;
|
|
120
|
+
// Support both task.type (new RoutingTask style) and task.metadata?.taskType (TaskNode style)
|
|
121
|
+
const taskType = task.type ?? task.metadata?.['taskType'] ?? '';
|
|
122
|
+
this._logger.debug({ taskId, taskType }, 'routeTask called');
|
|
123
|
+
// No policy loaded — emit basic decision with first available adapter
|
|
124
|
+
if (this._policy === null) {
|
|
125
|
+
return this._routeWithoutPolicy(task);
|
|
126
|
+
}
|
|
127
|
+
// Get preferred agents based on task type (falls back to default)
|
|
128
|
+
const taskTypePolicy = taskType.length > 0 ? this._policy.task_types?.[taskType] : undefined;
|
|
129
|
+
const preferredAgents = taskTypePolicy?.preferred_agents ?? this._policy.default.preferred_agents;
|
|
130
|
+
const modelPreferences = taskTypePolicy?.model_preferences ?? {};
|
|
131
|
+
// Collect the fallback chain for auditing
|
|
132
|
+
const fallbackChain = [...preferredAgents];
|
|
133
|
+
// Check explicit agent assignment
|
|
134
|
+
if (task.agentId !== undefined && task.agentId.length > 0) {
|
|
135
|
+
const explicitAgent = task.agentId;
|
|
136
|
+
const provider = this._policy.providers[explicitAgent];
|
|
137
|
+
if (provider !== undefined && provider.enabled) {
|
|
138
|
+
const decision = this._evaluateAgent(taskId, explicitAgent, provider, modelPreferences);
|
|
139
|
+
if (decision !== null) {
|
|
140
|
+
const builder = makeRoutingDecision(taskId)
|
|
141
|
+
.withAgent(decision.agent, decision.billingMode)
|
|
142
|
+
.withModel(decision.model ?? '')
|
|
143
|
+
.withRationale(`Explicit agent assignment: ${explicitAgent} via ${decision.billingMode}`)
|
|
144
|
+
.withFallbackChain([explicitAgent]);
|
|
145
|
+
this._attachMonitorRecommendation(builder, taskType, decision.agent);
|
|
146
|
+
return builder.build();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Explicit agent unavailable — fall through to policy routing
|
|
150
|
+
this._logger.debug({ taskId, explicitAgent }, 'Explicit agent unavailable, falling back to policy');
|
|
151
|
+
}
|
|
152
|
+
// Evaluate each preferred agent in order
|
|
153
|
+
for (const agentName of preferredAgents) {
|
|
154
|
+
const provider = this._policy.providers[agentName];
|
|
155
|
+
if (provider === undefined || !provider.enabled) {
|
|
156
|
+
this._logger.debug({ taskId, agentName }, 'Agent not in providers or disabled, skipping');
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const decision = this._evaluateAgent(taskId, agentName, provider, modelPreferences);
|
|
160
|
+
if (decision !== null) {
|
|
161
|
+
// Determine rationale
|
|
162
|
+
const rationale = this._buildRationale(taskId, agentName, decision.billingMode, taskType);
|
|
163
|
+
const builder = makeRoutingDecision(taskId)
|
|
164
|
+
.withAgent(decision.agent, decision.billingMode)
|
|
165
|
+
.withModel(decision.model ?? '')
|
|
166
|
+
.withRationale(rationale)
|
|
167
|
+
.withFallbackChain(fallbackChain);
|
|
168
|
+
this._attachMonitorRecommendation(builder, taskType, decision.agent);
|
|
169
|
+
return builder.build();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// All preferred agents unavailable
|
|
173
|
+
const rationale = `All preferred agents unavailable for task type "${taskType || 'default'}": [${preferredAgents.join(', ')}]`;
|
|
174
|
+
this._logger.warn({ taskId, preferredAgents }, rationale);
|
|
175
|
+
// Emit provider:unavailable for the primary agent
|
|
176
|
+
if (preferredAgents.length > 0) {
|
|
177
|
+
this._eventBus.emit('provider:unavailable', {
|
|
178
|
+
provider: preferredAgents[0],
|
|
179
|
+
reason: 'rate_limit',
|
|
180
|
+
resetAtMs: this._statusTracker.getRateLimitResetTime(preferredAgents[0]).getTime(),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
return makeRoutingDecision(taskId)
|
|
184
|
+
.unavailable(rationale)
|
|
185
|
+
.withFallbackChain(fallbackChain)
|
|
186
|
+
.build();
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get the current status of a provider.
|
|
190
|
+
*/
|
|
191
|
+
getProviderStatus(providerName) {
|
|
192
|
+
return this._statusTracker.getStatus(providerName);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Record token usage for rate limit tracking after task completion.
|
|
196
|
+
*/
|
|
197
|
+
updateRateLimit(provider, tokensUsed) {
|
|
198
|
+
this._statusTracker.recordTokenUsage(provider, tokensUsed);
|
|
199
|
+
this._logger.debug({ provider, tokensUsed }, 'Rate limit updated');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Hot-reload the routing policy from disk without daemon restart (FR38).
|
|
203
|
+
*/
|
|
204
|
+
async reloadPolicy() {
|
|
205
|
+
this._logger.info({ policyPath: this._policyPath }, 'Reloading routing policy');
|
|
206
|
+
const newPolicy = loadRoutingPolicy(this._policyPath);
|
|
207
|
+
this._policy = newPolicy;
|
|
208
|
+
this._initializeProviderTracking();
|
|
209
|
+
this._logger.info('Routing policy reloaded successfully');
|
|
210
|
+
}
|
|
211
|
+
// ---------------------------------------------------------------------------
|
|
212
|
+
// Event handlers
|
|
213
|
+
// ---------------------------------------------------------------------------
|
|
214
|
+
_handleTaskReady(taskId, taskType) {
|
|
215
|
+
this._logger.debug({ taskId, taskType }, 'task:ready — making routing decision');
|
|
216
|
+
if (this._policy === null) {
|
|
217
|
+
this._logger.debug({ taskId }, 'No routing policy — emitting minimal routing decision');
|
|
218
|
+
const decision = makeRoutingDecision(taskId)
|
|
219
|
+
.withAgent('', 'unavailable')
|
|
220
|
+
.withRationale('No routing policy configured')
|
|
221
|
+
.build();
|
|
222
|
+
this._eventBus.emit('task:routed', { taskId, decision });
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
// Build task node with task type from the event payload
|
|
226
|
+
const minimalTask = {
|
|
227
|
+
id: taskId,
|
|
228
|
+
...(taskType !== undefined ? { type: taskType } : {}),
|
|
229
|
+
metadata: taskType ? { taskType } : {},
|
|
230
|
+
};
|
|
231
|
+
const decision = this.routeTask(minimalTask);
|
|
232
|
+
this._eventBus.emit('task:routed', { taskId, decision });
|
|
233
|
+
}
|
|
234
|
+
_handleTaskComplete(taskId, result) {
|
|
235
|
+
// We need to know which provider was used — this requires tracking from task:routed
|
|
236
|
+
// For now, we can't easily reverse-map taskId→provider without additional state.
|
|
237
|
+
// The full integration with billing/cost tracking happens in Story 4.2.
|
|
238
|
+
this._logger.debug({ taskId, tokensUsed: result.tokensUsed }, 'task:complete received — rate limit tracking deferred to cost tracker');
|
|
239
|
+
}
|
|
240
|
+
_handleConfigReloaded(changedKeys, newConfig) {
|
|
241
|
+
// Use provider configuration from newConfig directly when available (AC4)
|
|
242
|
+
// Already-dispatched tasks are NOT re-routed; routing is determined at dispatch time.
|
|
243
|
+
const hasRoutingChanges = changedKeys.some((k) => k.startsWith('providers.') || k.startsWith('routing') || k === 'routing_policy_path');
|
|
244
|
+
if (!hasRoutingChanges) {
|
|
245
|
+
this._logger.debug({ changedKeys }, 'Config reloaded but no routing-relevant changes — skipping policy reload');
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// Update policy path from newConfig if provided
|
|
249
|
+
const configRoutingPolicyPath = newConfig['routing_policy_path'];
|
|
250
|
+
if (typeof configRoutingPolicyPath === 'string' && configRoutingPolicyPath.length > 0) {
|
|
251
|
+
this._policyPath = configRoutingPolicyPath;
|
|
252
|
+
}
|
|
253
|
+
// Reload routing policy from its dedicated file (routing policy is separate from main config)
|
|
254
|
+
this.reloadPolicy().then(() => {
|
|
255
|
+
this._logger.info({ changedKeys }, 'Routing policy updated from config reload');
|
|
256
|
+
}).catch((err) => {
|
|
257
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
258
|
+
this._logger.warn({ err: message }, 'Failed to reload routing policy after config reload');
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
// ---------------------------------------------------------------------------
|
|
262
|
+
// Routing algorithm helpers
|
|
263
|
+
// ---------------------------------------------------------------------------
|
|
264
|
+
/**
|
|
265
|
+
* Evaluate a single agent using the subscription-first algorithm.
|
|
266
|
+
* Returns { agent, billingMode, model } if available, null if not.
|
|
267
|
+
*/
|
|
268
|
+
_evaluateAgent(taskId, agentName, provider, modelPreferences) {
|
|
269
|
+
const model = modelPreferences[agentName];
|
|
270
|
+
const status = this._statusTracker.getStatus(agentName);
|
|
271
|
+
// Check subscription path first (ADR-008: subscription-first is mandatory)
|
|
272
|
+
if (provider.subscription_routing) {
|
|
273
|
+
const rateLimitOk = status !== null
|
|
274
|
+
? this._statusTracker.checkRateLimit(agentName, 1) // pass 1 to detect fully-exhausted window
|
|
275
|
+
: true; // No tracking = assume available
|
|
276
|
+
if (rateLimitOk) {
|
|
277
|
+
this._logger.debug({ taskId, agentName }, 'Subscription routing selected');
|
|
278
|
+
return { agent: agentName, billingMode: 'subscription', ...(model !== undefined ? { model } : {}) };
|
|
279
|
+
}
|
|
280
|
+
// Rate limit exceeded — log and try API fallback
|
|
281
|
+
this._logger.debug({ taskId, agentName }, 'Subscription rate limit exceeded, trying API billing');
|
|
282
|
+
// Emit provider:unavailable for rate limit
|
|
283
|
+
const resetTime = this._statusTracker.getRateLimitResetTime(agentName);
|
|
284
|
+
this._eventBus.emit('provider:unavailable', {
|
|
285
|
+
provider: agentName,
|
|
286
|
+
reason: 'rate_limit',
|
|
287
|
+
resetAtMs: resetTime.getTime(),
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
// Check API billing path
|
|
291
|
+
const apiBillingConfig = provider.api_billing;
|
|
292
|
+
if (apiBillingConfig?.enabled === true) {
|
|
293
|
+
// Check if API key is configured in environment
|
|
294
|
+
const apiKeyEnv = apiBillingConfig.api_key_env;
|
|
295
|
+
if (apiKeyEnv !== undefined && process.env[apiKeyEnv] !== undefined) {
|
|
296
|
+
this._logger.debug({ taskId, agentName }, 'API billing selected');
|
|
297
|
+
return { agent: agentName, billingMode: 'api', ...(model !== undefined ? { model } : {}) };
|
|
298
|
+
}
|
|
299
|
+
else if (apiKeyEnv === undefined) {
|
|
300
|
+
// API key env not required — assume configured
|
|
301
|
+
this._logger.debug({ taskId, agentName }, 'API billing selected (no key env required)');
|
|
302
|
+
return { agent: agentName, billingMode: 'api', ...(model !== undefined ? { model } : {}) };
|
|
303
|
+
}
|
|
304
|
+
this._logger.debug({ taskId, agentName, apiKeyEnv }, 'API key not configured, skipping agent');
|
|
305
|
+
}
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Build a human-readable rationale for the routing decision (NFR7).
|
|
310
|
+
*/
|
|
311
|
+
_buildRationale(_taskId, agent, billingMode, taskType) {
|
|
312
|
+
const status = this._statusTracker.getStatus(agent);
|
|
313
|
+
const tokensInfo = status !== null && status.rateLimit.tokensPerWindow > 0
|
|
314
|
+
? `, tokens ${status.tokensUsedInWindow}/${status.rateLimit.tokensPerWindow}`
|
|
315
|
+
: '';
|
|
316
|
+
if (billingMode === 'subscription') {
|
|
317
|
+
if (taskType.length > 0) {
|
|
318
|
+
return `Task type "${taskType}" → preferred agent ${agent} via subscription${tokensInfo}`;
|
|
319
|
+
}
|
|
320
|
+
return `Subscription-first: ${agent} subscription available${tokensInfo}`;
|
|
321
|
+
}
|
|
322
|
+
// API billing
|
|
323
|
+
if (taskType.length > 0) {
|
|
324
|
+
return `Task type "${taskType}" → ${agent} via API billing (subscription exhausted or disabled)`;
|
|
325
|
+
}
|
|
326
|
+
return `Subscription exhausted or disabled for ${agent}, falling back to API billing`;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Route a task without a loaded routing policy.
|
|
330
|
+
* Uses the first available adapter in the registry.
|
|
331
|
+
* Monitor recommendations are still consulted when use_monitor_recommendations=true (AC1, AC4).
|
|
332
|
+
*/
|
|
333
|
+
_routeWithoutPolicy(task) {
|
|
334
|
+
const taskId = task.id;
|
|
335
|
+
const taskType = task.type ?? task.metadata?.['taskType'] ?? '';
|
|
336
|
+
// If there's an explicit agent, try to use it
|
|
337
|
+
if (task.agentId !== undefined && task.agentId.length > 0) {
|
|
338
|
+
if (this._adapterRegistry !== null) {
|
|
339
|
+
const adapter = this._adapterRegistry.get(task.agentId);
|
|
340
|
+
if (adapter !== undefined) {
|
|
341
|
+
const builder = makeRoutingDecision(taskId)
|
|
342
|
+
.withAgent(task.agentId, 'subscription')
|
|
343
|
+
.withRationale(`No routing policy: using explicit agent ${task.agentId}`);
|
|
344
|
+
this._attachMonitorRecommendation(builder, taskType, task.agentId);
|
|
345
|
+
return builder.build();
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// Try first available adapter
|
|
350
|
+
if (this._adapterRegistry !== null) {
|
|
351
|
+
const adapters = this._adapterRegistry.getAll ? this._adapterRegistry.getAll() : [];
|
|
352
|
+
if (adapters.length > 0) {
|
|
353
|
+
const adapter = adapters[0];
|
|
354
|
+
const builder = makeRoutingDecision(taskId)
|
|
355
|
+
.withAgent(adapter.id, 'subscription')
|
|
356
|
+
.withRationale(`No routing policy: using first available adapter ${adapter.id}`);
|
|
357
|
+
this._attachMonitorRecommendation(builder, taskType, adapter.id);
|
|
358
|
+
return builder.build();
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return makeRoutingDecision(taskId)
|
|
362
|
+
.unavailable('No routing policy configured and no adapters available')
|
|
363
|
+
.build();
|
|
364
|
+
}
|
|
365
|
+
// ---------------------------------------------------------------------------
|
|
366
|
+
// Monitor recommendation helper
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
/**
|
|
369
|
+
* Attach advisory monitor recommendation to a routing decision builder (AC5, AC7).
|
|
370
|
+
* Only attaches when use_monitor_recommendations=true and a recommendation
|
|
371
|
+
* is available for the task type with confidence >= "medium".
|
|
372
|
+
* Explicit routing policy always takes precedence (AC5).
|
|
373
|
+
*
|
|
374
|
+
* When the monitor recommends a different agent than the policy-selected agent,
|
|
375
|
+
* a debug log is emitted to record the override (AC7).
|
|
376
|
+
*/
|
|
377
|
+
_attachMonitorRecommendation(builder, taskType, selectedAgent = '') {
|
|
378
|
+
if (!this._useMonitorRecommendations || this._monitorAgent === null)
|
|
379
|
+
return;
|
|
380
|
+
// Mark that monitor was consulted regardless of recommendation availability
|
|
381
|
+
builder.withMonitorInfluenced(true);
|
|
382
|
+
if (taskType.length === 0)
|
|
383
|
+
return;
|
|
384
|
+
try {
|
|
385
|
+
const recommendation = this._monitorAgent.getRecommendation(taskType);
|
|
386
|
+
if (recommendation !== null && recommendation.confidence !== 'low') {
|
|
387
|
+
builder.withMonitorRecommendation(recommendation);
|
|
388
|
+
this._logger.debug({ taskType, confidence: recommendation.confidence, improvement: recommendation.improvement_percentage }, 'Monitor recommendation attached to routing decision');
|
|
389
|
+
// AC7: Log when routing policy overrides the monitor recommendation
|
|
390
|
+
if (selectedAgent.length > 0 && recommendation.recommended_agent !== selectedAgent) {
|
|
391
|
+
this._logger.debug({
|
|
392
|
+
taskType,
|
|
393
|
+
selectedAgent,
|
|
394
|
+
recommendedAgent: recommendation.recommended_agent,
|
|
395
|
+
confidence: recommendation.confidence,
|
|
396
|
+
improvement: recommendation.improvement_percentage,
|
|
397
|
+
}, 'Routing policy overrides monitor recommendation');
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
catch (err) {
|
|
402
|
+
// Never let advisory monitor errors affect routing
|
|
403
|
+
this._logger.warn({ err, taskType }, 'Failed to get monitor recommendation — continuing without it');
|
|
404
|
+
// AC5: monitor consultation failed, so the monitor did not influence this decision.
|
|
405
|
+
// Set monitorInfluenced to false since no useful recommendation was obtained.
|
|
406
|
+
builder.withMonitorInfluenced(false);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
// ---------------------------------------------------------------------------
|
|
410
|
+
// Initialization helpers
|
|
411
|
+
// ---------------------------------------------------------------------------
|
|
412
|
+
/**
|
|
413
|
+
* Initialize provider tracking from the loaded routing policy.
|
|
414
|
+
*/
|
|
415
|
+
_initializeProviderTracking() {
|
|
416
|
+
if (this._policy === null)
|
|
417
|
+
return;
|
|
418
|
+
for (const [name, provider] of Object.entries(this._policy.providers)) {
|
|
419
|
+
const apiBillingEnabled = provider.api_billing?.enabled === true;
|
|
420
|
+
const rateLimit = provider.rate_limit !== undefined
|
|
421
|
+
? { tokensPerWindow: provider.rate_limit.tokens_per_window, windowSeconds: provider.rate_limit.window_seconds }
|
|
422
|
+
: undefined;
|
|
423
|
+
this._statusTracker.initProvider(name, provider.subscription_routing, apiBillingEnabled, rateLimit);
|
|
424
|
+
this._logger.debug({ provider: name, subscriptionRouting: provider.subscription_routing, apiBillingEnabled }, 'Provider tracking initialized');
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
export function createRoutingEngineImpl(options) {
|
|
429
|
+
const engine = new RoutingEngineImpl(options.eventBus, options.configSystem ?? null, options.adapterRegistry ?? null, options.logger);
|
|
430
|
+
if (options.monitorAgent != null && options.useMonitorRecommendations === true) {
|
|
431
|
+
engine.setMonitorAgent(options.monitorAgent, true);
|
|
432
|
+
}
|
|
433
|
+
return engine;
|
|
434
|
+
}
|
|
435
|
+
// ---------------------------------------------------------------------------
|
|
436
|
+
// createRoutingEngine factory (thin wrapper)
|
|
437
|
+
// ---------------------------------------------------------------------------
|
|
438
|
+
/**
|
|
439
|
+
* Create a new RoutingEngine instance using the decoupled core types.
|
|
440
|
+
* This is the primary factory for external consumers of @substrate-ai/core.
|
|
441
|
+
*
|
|
442
|
+
* @example
|
|
443
|
+
* const engine = createRoutingEngine({ eventBus, adapterRegistry })
|
|
444
|
+
* await engine.initialize()
|
|
445
|
+
* const decision = engine.routeTask({ id: 'task-1', type: 'dev-story' })
|
|
446
|
+
*/
|
|
447
|
+
export function createRoutingEngine(options) {
|
|
448
|
+
return createRoutingEngineImpl(options);
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=routing-engine-impl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-engine-impl.js","sourceRoot":"","sources":["../../src/routing/routing-engine-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoutingEngine — interface definitions for task-to-agent routing.
|
|
3
|
+
*
|
|
4
|
+
* Defines the public contract for routing engines, resolvers, and related types.
|
|
5
|
+
* Concrete implementations live in Epic 41.
|
|
6
|
+
*
|
|
7
|
+
* References:
|
|
8
|
+
* - Architecture Section 8: Subscription-first routing algorithm
|
|
9
|
+
* - Epic 40, Story 40-6: Routing Interface Extraction
|
|
10
|
+
*/
|
|
11
|
+
import type { RoutingDecision } from './routing-decision.js';
|
|
12
|
+
import type { ProviderStatus } from './provider-status.js';
|
|
13
|
+
/**
|
|
14
|
+
* Minimal task shape required for routing decisions.
|
|
15
|
+
* Structural subtype designed to accommodate both the core's simple RoutingTask usage
|
|
16
|
+
* and the monolith's TaskNode (which has agentId and metadata).
|
|
17
|
+
* All fields beyond `id` are optional to allow assignment from both sources.
|
|
18
|
+
*/
|
|
19
|
+
export interface RoutingTask {
|
|
20
|
+
id: string;
|
|
21
|
+
/** Task type string. May also be provided via `metadata.taskType` for backward compat. */
|
|
22
|
+
type?: string;
|
|
23
|
+
/** Optional explicit agent assignment (from TaskNode.agentId) */
|
|
24
|
+
agentId?: string;
|
|
25
|
+
/** Arbitrary task metadata — RoutingEngineImpl reads `metadata.taskType` for routing */
|
|
26
|
+
metadata?: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The resolved model and routing metadata for a given task type.
|
|
30
|
+
*/
|
|
31
|
+
export interface ModelResolution {
|
|
32
|
+
/** Resolved model identifier */
|
|
33
|
+
model: string;
|
|
34
|
+
/** Optional max_tokens from the phase or override config */
|
|
35
|
+
maxTokens?: number;
|
|
36
|
+
/** The pipeline phase that was resolved */
|
|
37
|
+
phase: string;
|
|
38
|
+
/** Whether the resolution came from a phase config or a task-type override */
|
|
39
|
+
source: 'phase' | 'override';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Interface for resolving the appropriate model for each pipeline task type.
|
|
43
|
+
*/
|
|
44
|
+
export interface IRoutingResolver {
|
|
45
|
+
resolveModel(taskType: string): ModelResolution | null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Full interface for the routing engine.
|
|
49
|
+
*/
|
|
50
|
+
export interface RoutingEngine {
|
|
51
|
+
/**
|
|
52
|
+
* Make a routing decision for a task.
|
|
53
|
+
* Implements subscription-first algorithm per Architecture Section 8.
|
|
54
|
+
*
|
|
55
|
+
* @param task - RoutingTask to route
|
|
56
|
+
* @returns RoutingDecision with agent, billingMode, and rationale
|
|
57
|
+
*/
|
|
58
|
+
routeTask(task: RoutingTask): RoutingDecision;
|
|
59
|
+
/**
|
|
60
|
+
* Get current status of a provider including rate limit state.
|
|
61
|
+
*
|
|
62
|
+
* @param provider - Provider name
|
|
63
|
+
* @returns ProviderStatus snapshot or null if provider is not tracked
|
|
64
|
+
*/
|
|
65
|
+
getProviderStatus(provider: string): ProviderStatus | null;
|
|
66
|
+
/**
|
|
67
|
+
* Update rate limit tracking after task completion.
|
|
68
|
+
*
|
|
69
|
+
* @param provider - Provider name that executed the task
|
|
70
|
+
* @param tokensUsed - Actual tokens consumed
|
|
71
|
+
*/
|
|
72
|
+
updateRateLimit(provider: string, tokensUsed: number): void;
|
|
73
|
+
/**
|
|
74
|
+
* Hot-reload the routing policy from disk without daemon restart (FR38).
|
|
75
|
+
*/
|
|
76
|
+
reloadPolicy(): Promise<void>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Maps known task types to their corresponding pipeline phase.
|
|
80
|
+
* Unknown task types fall through to the 'generate' default.
|
|
81
|
+
*/
|
|
82
|
+
export declare const TASK_TYPE_PHASE_MAP: Record<string, 'explore' | 'generate' | 'review'>;
|
|
83
|
+
//# sourceMappingURL=routing-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-engine.d.ts","sourceRoot":"","sources":["../../src/routing/routing-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAM1D;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,0FAA0F;IAC1F,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,MAAM,EAAE,OAAO,GAAG,UAAU,CAAA;CAC7B;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAA;CACvD;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,CAAA;IAE7C;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAA;IAE1D;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAE3D;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9B;AAMD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAKjF,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RoutingEngine — interface definitions for task-to-agent routing.
|
|
3
|
+
*
|
|
4
|
+
* Defines the public contract for routing engines, resolvers, and related types.
|
|
5
|
+
* Concrete implementations live in Epic 41.
|
|
6
|
+
*
|
|
7
|
+
* References:
|
|
8
|
+
* - Architecture Section 8: Subscription-first routing algorithm
|
|
9
|
+
* - Epic 40, Story 40-6: Routing Interface Extraction
|
|
10
|
+
*/
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Constants
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Maps known task types to their corresponding pipeline phase.
|
|
16
|
+
* Unknown task types fall through to the 'generate' default.
|
|
17
|
+
*/
|
|
18
|
+
export const TASK_TYPE_PHASE_MAP = {
|
|
19
|
+
'create-story': 'generate',
|
|
20
|
+
'dev-story': 'generate',
|
|
21
|
+
'code-review': 'review',
|
|
22
|
+
'explore': 'explore',
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=routing-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-engine.js","sourceRoot":"","sources":["../../src/routing/routing-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6FH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsD;IACpF,cAAc,EAAE,UAAU;IAC1B,WAAW,EAAE,UAAU;IACvB,aAAa,EAAE,QAAQ;IACvB,SAAS,EAAE,SAAS;CACrB,CAAA"}
|