@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,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConsumerAnalyzer — groups telemetry spans by consumer key and ranks by token
|
|
3
|
+
* consumption, producing ConsumerStats for each unique operation+tool combination.
|
|
4
|
+
*
|
|
5
|
+
* A "consumer key" is `operationName|toolName`, stable across runs and safe to
|
|
6
|
+
* store as a VARCHAR(300) primary-key component in Dolt.
|
|
7
|
+
*
|
|
8
|
+
* Architecture constraints:
|
|
9
|
+
* - Constructor injection: accepts Categorizer and ILogger (logger defaults to console)
|
|
10
|
+
* - Delegates classification to the injected Categorizer
|
|
11
|
+
* - Zero external dependencies beyond types and Categorizer from this module
|
|
12
|
+
*
|
|
13
|
+
* Migrated to @substrate-ai/core in story 41-6b.
|
|
14
|
+
*/
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// ConsumerAnalyzer
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
export class ConsumerAnalyzer {
|
|
19
|
+
_categorizer;
|
|
20
|
+
_logger;
|
|
21
|
+
constructor(categorizer, logger) {
|
|
22
|
+
this._categorizer = categorizer;
|
|
23
|
+
this._logger = logger ?? console;
|
|
24
|
+
}
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// analyze
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
/**
|
|
29
|
+
* Group spans by consumer key, rank by totalTokens descending, and return
|
|
30
|
+
* ConsumerStats for each non-zero-token group.
|
|
31
|
+
*
|
|
32
|
+
* @param spans - All NormalizedSpans for the story
|
|
33
|
+
*/
|
|
34
|
+
analyze(spans) {
|
|
35
|
+
if (spans.length === 0)
|
|
36
|
+
return [];
|
|
37
|
+
const grandTotal = spans.reduce((sum, s) => sum + s.inputTokens + s.outputTokens, 0);
|
|
38
|
+
// Group spans by consumerKey
|
|
39
|
+
const groups = new Map();
|
|
40
|
+
for (const span of spans) {
|
|
41
|
+
const key = this._buildConsumerKey(span);
|
|
42
|
+
const existing = groups.get(key);
|
|
43
|
+
if (existing !== undefined) {
|
|
44
|
+
existing.push(span);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
groups.set(key, [span]);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const results = [];
|
|
51
|
+
for (const [consumerKey, groupSpans] of groups) {
|
|
52
|
+
const totalTokens = groupSpans.reduce((sum, s) => sum + s.inputTokens + s.outputTokens, 0);
|
|
53
|
+
// Exclude zero-token groups
|
|
54
|
+
if (totalTokens === 0)
|
|
55
|
+
continue;
|
|
56
|
+
const percentage = grandTotal > 0 ? Math.round((totalTokens / grandTotal) * 100 * 1000) / 1000 : 0;
|
|
57
|
+
const eventCount = groupSpans.length;
|
|
58
|
+
// Determine category using the first span's operation + tool name
|
|
59
|
+
const firstSpan = groupSpans[0];
|
|
60
|
+
const toolName = this._extractToolName(firstSpan);
|
|
61
|
+
const operationName = firstSpan.operationName ?? firstSpan.name ?? 'unknown';
|
|
62
|
+
const category = this._categorizer.classify(operationName, toolName);
|
|
63
|
+
// Top 20 invocations sorted by totalTokens descending
|
|
64
|
+
const sorted = groupSpans
|
|
65
|
+
.slice()
|
|
66
|
+
.sort((a, b) => b.inputTokens + b.outputTokens - (a.inputTokens + a.outputTokens));
|
|
67
|
+
const topInvocations = sorted.slice(0, 20).map((s) => ({
|
|
68
|
+
spanId: s.spanId,
|
|
69
|
+
name: s.name,
|
|
70
|
+
toolName: this._extractToolName(s),
|
|
71
|
+
totalTokens: s.inputTokens + s.outputTokens,
|
|
72
|
+
inputTokens: s.inputTokens,
|
|
73
|
+
outputTokens: s.outputTokens,
|
|
74
|
+
}));
|
|
75
|
+
results.push({
|
|
76
|
+
consumerKey,
|
|
77
|
+
category,
|
|
78
|
+
totalTokens,
|
|
79
|
+
percentage,
|
|
80
|
+
eventCount,
|
|
81
|
+
topInvocations,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
this._logger.debug({ consumers: results.length, grandTotal }, 'Computed consumer stats');
|
|
85
|
+
return results.sort((a, b) => b.totalTokens - a.totalTokens);
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// analyzeFromTurns
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Group turns by consumer key (model|toolName), rank by totalTokens descending,
|
|
92
|
+
* and return ConsumerStats for each non-zero-token group.
|
|
93
|
+
*
|
|
94
|
+
* @param turns - All TurnAnalysis records for the story
|
|
95
|
+
*/
|
|
96
|
+
analyzeFromTurns(turns) {
|
|
97
|
+
if (turns.length === 0)
|
|
98
|
+
return [];
|
|
99
|
+
const grandTotal = turns.reduce((sum, t) => sum + t.inputTokens + t.outputTokens, 0);
|
|
100
|
+
// Group turns by consumerKey (model|toolName)
|
|
101
|
+
const groups = new Map();
|
|
102
|
+
for (const turn of turns) {
|
|
103
|
+
const key = this._buildConsumerKeyFromTurn(turn);
|
|
104
|
+
const existing = groups.get(key);
|
|
105
|
+
if (existing !== undefined) {
|
|
106
|
+
existing.push(turn);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
groups.set(key, [turn]);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const results = [];
|
|
113
|
+
for (const [consumerKey, groupTurns] of groups) {
|
|
114
|
+
const totalTokens = groupTurns.reduce((sum, t) => sum + t.inputTokens + t.outputTokens, 0);
|
|
115
|
+
// Exclude zero-token groups
|
|
116
|
+
if (totalTokens === 0)
|
|
117
|
+
continue;
|
|
118
|
+
const percentage = grandTotal > 0 ? Math.round((totalTokens / grandTotal) * 100 * 1000) / 1000 : 0;
|
|
119
|
+
const eventCount = groupTurns.length;
|
|
120
|
+
// Determine category using the first turn's name + toolName
|
|
121
|
+
const firstTurn = groupTurns[0];
|
|
122
|
+
const category = this._categorizer.classify(firstTurn.name, firstTurn.toolName);
|
|
123
|
+
// Top 20 invocations sorted by totalTokens descending
|
|
124
|
+
const sorted = groupTurns
|
|
125
|
+
.slice()
|
|
126
|
+
.sort((a, b) => b.inputTokens + b.outputTokens - (a.inputTokens + a.outputTokens));
|
|
127
|
+
const topInvocations = sorted.slice(0, 20).map((t) => ({
|
|
128
|
+
spanId: t.spanId,
|
|
129
|
+
name: t.name,
|
|
130
|
+
toolName: t.toolName,
|
|
131
|
+
totalTokens: t.inputTokens + t.outputTokens,
|
|
132
|
+
inputTokens: t.inputTokens,
|
|
133
|
+
outputTokens: t.outputTokens,
|
|
134
|
+
}));
|
|
135
|
+
results.push({
|
|
136
|
+
consumerKey,
|
|
137
|
+
category,
|
|
138
|
+
totalTokens,
|
|
139
|
+
percentage,
|
|
140
|
+
eventCount,
|
|
141
|
+
topInvocations,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
this._logger.debug({ consumers: results.length, grandTotal }, 'Computed consumer stats from turns');
|
|
145
|
+
return results.sort((a, b) => b.totalTokens - a.totalTokens);
|
|
146
|
+
}
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
// Private helpers
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
/**
|
|
151
|
+
* Build a stable, collision-resistant consumer key from a span.
|
|
152
|
+
* Format: `operationName|toolName` (tool part is empty string if absent).
|
|
153
|
+
*/
|
|
154
|
+
_buildConsumerKey(span) {
|
|
155
|
+
const operationPart = (span.operationName ?? span.name ?? 'unknown').slice(0, 200);
|
|
156
|
+
const toolPart = (this._extractToolName(span) ?? '').slice(0, 100);
|
|
157
|
+
return `${operationPart}|${toolPart}`;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Build a stable consumer key from a turn.
|
|
161
|
+
* Format: `model|toolName` (tool part is empty string if absent).
|
|
162
|
+
*/
|
|
163
|
+
_buildConsumerKeyFromTurn(turn) {
|
|
164
|
+
const modelPart = (turn.model ?? 'unknown').slice(0, 200);
|
|
165
|
+
const toolPart = (turn.toolName ?? '').slice(0, 100);
|
|
166
|
+
return `${modelPart}|${toolPart}`;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Extract a tool name from span attributes, checking three known attribute keys
|
|
170
|
+
* in priority order.
|
|
171
|
+
*/
|
|
172
|
+
_extractToolName(span) {
|
|
173
|
+
if (!span.attributes)
|
|
174
|
+
return undefined;
|
|
175
|
+
const attrs = span.attributes;
|
|
176
|
+
const name = attrs['tool.name'] ||
|
|
177
|
+
attrs['llm.tool.name'] ||
|
|
178
|
+
attrs['claude.tool_name'];
|
|
179
|
+
return name || undefined;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=consumer-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer-analyzer.js","sourceRoot":"","sources":["../../src/telemetry/consumer-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost table for LLM model pricing.
|
|
3
|
+
*
|
|
4
|
+
* Provides per-million-token rates for known models and an `estimateCost()`
|
|
5
|
+
* function that computes cost from a TokenCounts object.
|
|
6
|
+
*
|
|
7
|
+
* Cache reads use the explicit `cacheReadPerMToken` from the table (already
|
|
8
|
+
* pre-discounted to 10% of input rate for Anthropic models).
|
|
9
|
+
*
|
|
10
|
+
* Returns 0 for unknown models without throwing.
|
|
11
|
+
*/
|
|
12
|
+
import type { TokenCounts, ModelPricing } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Per-million-token pricing for known LLM models.
|
|
15
|
+
* All prices are in USD.
|
|
16
|
+
*/
|
|
17
|
+
export declare const COST_TABLE: Record<string, ModelPricing>;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve a model string to a key in COST_TABLE.
|
|
20
|
+
* Returns the matched key, or undefined if not found.
|
|
21
|
+
*
|
|
22
|
+
* Performs exact match first, then case-insensitive substring match.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveModel(model: string): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Estimate the cost in USD for a set of token counts and a model identifier.
|
|
27
|
+
*
|
|
28
|
+
* - Uses `cacheReadPerMToken` from the table directly (already discounted).
|
|
29
|
+
* - Returns 0 for unknown models without throwing.
|
|
30
|
+
*
|
|
31
|
+
* @param model - Model identifier string (exact or fuzzy match against COST_TABLE)
|
|
32
|
+
* @param tokens - Token counts object
|
|
33
|
+
* @returns Estimated cost in USD
|
|
34
|
+
*/
|
|
35
|
+
export declare function estimateCost(model: string, tokens: TokenCounts): number;
|
|
36
|
+
//# sourceMappingURL=cost-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-table.d.ts","sourceRoot":"","sources":["../../src/telemetry/cost-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM3D;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAiDnD,CAAA;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsB9D;AAMD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAkBvE"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost table for LLM model pricing.
|
|
3
|
+
*
|
|
4
|
+
* Provides per-million-token rates for known models and an `estimateCost()`
|
|
5
|
+
* function that computes cost from a TokenCounts object.
|
|
6
|
+
*
|
|
7
|
+
* Cache reads use the explicit `cacheReadPerMToken` from the table (already
|
|
8
|
+
* pre-discounted to 10% of input rate for Anthropic models).
|
|
9
|
+
*
|
|
10
|
+
* Returns 0 for unknown models without throwing.
|
|
11
|
+
*/
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// COST_TABLE
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Per-million-token pricing for known LLM models.
|
|
17
|
+
* All prices are in USD.
|
|
18
|
+
*/
|
|
19
|
+
export const COST_TABLE = {
|
|
20
|
+
'claude-3-opus-20240229': {
|
|
21
|
+
inputPerMToken: 15.0,
|
|
22
|
+
outputPerMToken: 75.0,
|
|
23
|
+
cacheReadPerMToken: 1.5,
|
|
24
|
+
cacheCreationPerMToken: 18.75,
|
|
25
|
+
},
|
|
26
|
+
'claude-3-5-sonnet-20241022': {
|
|
27
|
+
inputPerMToken: 3.0,
|
|
28
|
+
outputPerMToken: 15.0,
|
|
29
|
+
cacheReadPerMToken: 0.3,
|
|
30
|
+
cacheCreationPerMToken: 3.75,
|
|
31
|
+
},
|
|
32
|
+
'claude-3-5-haiku-20241022': {
|
|
33
|
+
inputPerMToken: 0.8,
|
|
34
|
+
outputPerMToken: 4.0,
|
|
35
|
+
cacheReadPerMToken: 0.08,
|
|
36
|
+
cacheCreationPerMToken: 1.0,
|
|
37
|
+
},
|
|
38
|
+
'claude-3-haiku-20240307': {
|
|
39
|
+
inputPerMToken: 0.25,
|
|
40
|
+
outputPerMToken: 1.25,
|
|
41
|
+
cacheReadPerMToken: 0.03,
|
|
42
|
+
cacheCreationPerMToken: 0.3,
|
|
43
|
+
},
|
|
44
|
+
'claude-3-sonnet-20240229': {
|
|
45
|
+
inputPerMToken: 3.0,
|
|
46
|
+
outputPerMToken: 15.0,
|
|
47
|
+
cacheReadPerMToken: 0.3,
|
|
48
|
+
cacheCreationPerMToken: 3.75,
|
|
49
|
+
},
|
|
50
|
+
'gpt-4': {
|
|
51
|
+
inputPerMToken: 30.0,
|
|
52
|
+
outputPerMToken: 60.0,
|
|
53
|
+
cacheReadPerMToken: 3.0,
|
|
54
|
+
cacheCreationPerMToken: 30.0,
|
|
55
|
+
},
|
|
56
|
+
'gpt-4-turbo': {
|
|
57
|
+
inputPerMToken: 10.0,
|
|
58
|
+
outputPerMToken: 30.0,
|
|
59
|
+
cacheReadPerMToken: 1.0,
|
|
60
|
+
cacheCreationPerMToken: 10.0,
|
|
61
|
+
},
|
|
62
|
+
'gpt-3.5-turbo': {
|
|
63
|
+
inputPerMToken: 0.5,
|
|
64
|
+
outputPerMToken: 1.5,
|
|
65
|
+
cacheReadPerMToken: 0.05,
|
|
66
|
+
cacheCreationPerMToken: 0.5,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// resolveModel
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
/**
|
|
73
|
+
* Resolve a model string to a key in COST_TABLE.
|
|
74
|
+
* Returns the matched key, or undefined if not found.
|
|
75
|
+
*
|
|
76
|
+
* Performs exact match first, then case-insensitive substring match.
|
|
77
|
+
*/
|
|
78
|
+
export function resolveModel(model) {
|
|
79
|
+
// Exact match
|
|
80
|
+
if (model in COST_TABLE) {
|
|
81
|
+
return model;
|
|
82
|
+
}
|
|
83
|
+
// Case-insensitive exact match
|
|
84
|
+
const lower = model.toLowerCase();
|
|
85
|
+
for (const key of Object.keys(COST_TABLE)) {
|
|
86
|
+
if (key.toLowerCase() === lower) {
|
|
87
|
+
return key;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Substring match (model string contains the key or key contains the model string)
|
|
91
|
+
for (const key of Object.keys(COST_TABLE)) {
|
|
92
|
+
if (lower.includes(key.toLowerCase()) || key.toLowerCase().includes(lower)) {
|
|
93
|
+
return key;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// estimateCost
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
/**
|
|
102
|
+
* Estimate the cost in USD for a set of token counts and a model identifier.
|
|
103
|
+
*
|
|
104
|
+
* - Uses `cacheReadPerMToken` from the table directly (already discounted).
|
|
105
|
+
* - Returns 0 for unknown models without throwing.
|
|
106
|
+
*
|
|
107
|
+
* @param model - Model identifier string (exact or fuzzy match against COST_TABLE)
|
|
108
|
+
* @param tokens - Token counts object
|
|
109
|
+
* @returns Estimated cost in USD
|
|
110
|
+
*/
|
|
111
|
+
export function estimateCost(model, tokens) {
|
|
112
|
+
const resolvedKey = resolveModel(model);
|
|
113
|
+
if (resolvedKey === undefined) {
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
const pricing = COST_TABLE[resolvedKey];
|
|
117
|
+
if (pricing === undefined) {
|
|
118
|
+
return 0;
|
|
119
|
+
}
|
|
120
|
+
const perM = 1_000_000;
|
|
121
|
+
const inputCost = (tokens.input / perM) * pricing.inputPerMToken;
|
|
122
|
+
const outputCost = (tokens.output / perM) * pricing.outputPerMToken;
|
|
123
|
+
const cacheReadCost = (tokens.cacheRead / perM) * pricing.cacheReadPerMToken;
|
|
124
|
+
const cacheCreationCost = (tokens.cacheCreation / perM) * pricing.cacheCreationPerMToken;
|
|
125
|
+
return inputCost + outputCost + cacheReadCost + cacheCreationCost;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=cost-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-table.js","sourceRoot":"","sources":["../../src/telemetry/cost-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EfficiencyScorer — computes composite 0-100 efficiency scores for story runs.
|
|
3
|
+
*
|
|
4
|
+
* The composite score combines four sub-scores (Epic 35 — Telemetry Scoring v2):
|
|
5
|
+
* - cacheHitSubScore (weight 25%): how well the story leverages prompt caching
|
|
6
|
+
* - ioRatioSubScore (weight 25%): logarithmic output/freshInput productivity curve
|
|
7
|
+
* - contextManagement (weight 25%): frequency of context spikes
|
|
8
|
+
* - tokenDensitySubScore (weight 25%): output tokens per turn vs task-type baseline
|
|
9
|
+
*
|
|
10
|
+
* Cold-start turns (first turn per dispatch) are excluded from sub-score
|
|
11
|
+
* computation but included in totalTurns for observability (Story 35-3).
|
|
12
|
+
*
|
|
13
|
+
* Architecture constraints:
|
|
14
|
+
* - Constructor injection: accepts ILogger via constructor (defaults to console)
|
|
15
|
+
* - Zero LLM calls — pure statistical computation
|
|
16
|
+
* - No external dependencies beyond types from this module
|
|
17
|
+
*
|
|
18
|
+
* Migrated to @substrate-ai/core in story 41-6b.
|
|
19
|
+
*/
|
|
20
|
+
import type { ILogger } from '../dispatch/types.js';
|
|
21
|
+
import type { TurnAnalysis, EfficiencyScore } from './types.js';
|
|
22
|
+
import type { IEfficiencyScorer } from './telemetry-pipeline.js';
|
|
23
|
+
export declare class EfficiencyScorer implements IEfficiencyScorer {
|
|
24
|
+
private readonly _logger;
|
|
25
|
+
constructor(logger?: ILogger);
|
|
26
|
+
/**
|
|
27
|
+
* Compute an efficiency score for a story given its turn analyses.
|
|
28
|
+
*
|
|
29
|
+
* Returns a zeroed `EfficiencyScore` immediately when `turns` is empty.
|
|
30
|
+
*
|
|
31
|
+
* @param storyKey - The story identifier (e.g. "27-6")
|
|
32
|
+
* @param turns - Turn analysis records from `TurnAnalyzer.analyze()`
|
|
33
|
+
*/
|
|
34
|
+
score(storyKey: string, turns: TurnAnalysis[]): EfficiencyScore;
|
|
35
|
+
/**
|
|
36
|
+
* Identify cold-start turns: the first turn per dispatchId.
|
|
37
|
+
* Returns a set of spanIds that should be excluded from scoring.
|
|
38
|
+
* Only considers turns with a non-empty dispatchId.
|
|
39
|
+
*/
|
|
40
|
+
private _identifyColdStartTurns;
|
|
41
|
+
/**
|
|
42
|
+
* Infer the task type from turns. Returns the task type only when all turns
|
|
43
|
+
* with a taskType agree (unanimous). For mixed task types (story-level
|
|
44
|
+
* scoring across dispatches), returns undefined → default baseline.
|
|
45
|
+
*/
|
|
46
|
+
private _inferTaskType;
|
|
47
|
+
/**
|
|
48
|
+
* Average cache hit rate across all turns, clamped to [0, 100].
|
|
49
|
+
* Formula: clamp(avgCacheHitRate × 100, 0, 100)
|
|
50
|
+
*/
|
|
51
|
+
private _computeCacheHitSubScore;
|
|
52
|
+
/**
|
|
53
|
+
* I/O ratio sub-score: logarithmic output/freshInput productivity curve (Story 35-1).
|
|
54
|
+
*
|
|
55
|
+
* Replaces the old binary threshold (>=1 → 100) with a logarithmic curve
|
|
56
|
+
* that provides gradient across the observed range:
|
|
57
|
+
* - score = clamp(log10(ratio) / log10(targetRatio) * 100, 0, 100)
|
|
58
|
+
* - ratio = avg(outputTokens / max(freshInputTokens, 1)) across turns
|
|
59
|
+
* - targetRatio is calibrated per task type (Story 35-2)
|
|
60
|
+
*
|
|
61
|
+
* Examples (TARGET=100): ratio 1→0, 10→50, 50→85, 100→100, 200→100(clamped)
|
|
62
|
+
*/
|
|
63
|
+
private _computeIoRatioSubScore;
|
|
64
|
+
/**
|
|
65
|
+
* Context management sub-score: penalizes context spike frequency.
|
|
66
|
+
* Formula: clamp(100 - spikeRatio × 100, 0, 100)
|
|
67
|
+
* where spikeRatio = contextSpikeCount / max(totalTurns, 1)
|
|
68
|
+
*/
|
|
69
|
+
private _computeContextManagementSubScore;
|
|
70
|
+
/**
|
|
71
|
+
* Token density sub-score: output tokens per turn vs task-type baseline (Story 35-4).
|
|
72
|
+
*
|
|
73
|
+
* Measures whether the agent is producing useful output or spinning:
|
|
74
|
+
* - score = clamp(avgOutputPerTurn / expectedOutputPerTurn * 100, 0, 100)
|
|
75
|
+
* - expectedOutputPerTurn is calibrated per task type (Story 35-2)
|
|
76
|
+
*
|
|
77
|
+
* Below-baseline dispatches get proportionally lower scores.
|
|
78
|
+
* At-or-above-baseline dispatches score 100.
|
|
79
|
+
*/
|
|
80
|
+
private _computeTokenDensitySubScore;
|
|
81
|
+
private _computeAvgCacheHitRate;
|
|
82
|
+
/**
|
|
83
|
+
* Average I/O ratio: totalInput / max(outputTokens, 1) per turn.
|
|
84
|
+
* Total input = inputTokens (fresh) + cacheReadTokens (cached).
|
|
85
|
+
*/
|
|
86
|
+
private _computeAvgIoRatio;
|
|
87
|
+
/**
|
|
88
|
+
* Group turns by model, computing per-group efficiency metrics.
|
|
89
|
+
* Turns with null/undefined model are grouped under "unknown".
|
|
90
|
+
*/
|
|
91
|
+
private _buildPerModelBreakdown;
|
|
92
|
+
/**
|
|
93
|
+
* Group turns by source, computing a per-group composite score using the
|
|
94
|
+
* same formula as the overall score. Sources with zero turns are excluded.
|
|
95
|
+
*/
|
|
96
|
+
private _buildPerSourceBreakdown;
|
|
97
|
+
private _clamp;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create an EfficiencyScorer with the given logger.
|
|
101
|
+
*/
|
|
102
|
+
export declare function createEfficiencyScorer(logger?: ILogger): EfficiencyScorer;
|
|
103
|
+
//# sourceMappingURL=efficiency-scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"efficiency-scorer.d.ts","sourceRoot":"","sources":["../../src/telemetry/efficiency-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAqC,MAAM,YAAY,CAAA;AAClG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAahE,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,CAAC,EAAE,OAAO;IAQ5B;;;;;;;OAOG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,eAAe;IAoF/D;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IActB;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAKhC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;;;OAIG;IACH,OAAO,CAAC,iCAAiC;IAOzC;;;;;;;;;OASG;IACH,OAAO,CAAC,4BAA4B;IAWpC,OAAO,CAAC,uBAAuB;IAM/B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAwC/B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA4ChC,OAAO,CAAC,MAAM;CAGf;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAEzE"}
|