@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,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cost query functions for the persistence layer.
|
|
3
|
+
*
|
|
4
|
+
* Provides read and write access to the cost_entries table.
|
|
5
|
+
* All queries use indexed columns to meet NFR2 (<100ms response time).
|
|
6
|
+
*
|
|
7
|
+
* Indexes available (from migrations 001 + 002):
|
|
8
|
+
* - idx_cost_session : (session_id)
|
|
9
|
+
* - idx_cost_task : (task_id)
|
|
10
|
+
* - idx_cost_category : (category)
|
|
11
|
+
* - idx_cost_entries_session_task : (session_id, task_id)
|
|
12
|
+
* - idx_cost_entries_provider : (provider)
|
|
13
|
+
* - idx_cost_session_agent : (session_id, agent) — getAgentCostBreakdown
|
|
14
|
+
* - idx_cost_agent : (agent)
|
|
15
|
+
*
|
|
16
|
+
* All functions are async and accept a DatabaseAdapter, making them
|
|
17
|
+
* compatible with both the SqliteDatabaseAdapter and DoltDatabaseAdapter.
|
|
18
|
+
* Prepared statement caching has been removed — adapter handles statement
|
|
19
|
+
* lifecycle internally.
|
|
20
|
+
*/
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Write functions
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Insert a new cost entry record.
|
|
26
|
+
*
|
|
27
|
+
* Maps from the CostEntry interface to the cost_entries table schema.
|
|
28
|
+
* Returns the DB-assigned autoincrement id.
|
|
29
|
+
*
|
|
30
|
+
* Uses SELECT MAX(id) instead of last_insert_rowid() / LAST_INSERT_ID()
|
|
31
|
+
* for portability across both SQLite and MySQL/Dolt backends.
|
|
32
|
+
*/
|
|
33
|
+
export async function recordCostEntry(adapter, entry) {
|
|
34
|
+
await adapter.query(`INSERT INTO cost_entries (
|
|
35
|
+
session_id, task_id, agent, billing_mode, category,
|
|
36
|
+
input_tokens, output_tokens, estimated_cost, actual_cost, model,
|
|
37
|
+
provider, savings_usd
|
|
38
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
39
|
+
entry.session_id,
|
|
40
|
+
entry.task_id,
|
|
41
|
+
entry.agent,
|
|
42
|
+
entry.billing_mode,
|
|
43
|
+
'execution',
|
|
44
|
+
entry.tokens_input,
|
|
45
|
+
entry.tokens_output,
|
|
46
|
+
entry.cost_usd,
|
|
47
|
+
null,
|
|
48
|
+
entry.model,
|
|
49
|
+
entry.provider,
|
|
50
|
+
entry.savings_usd,
|
|
51
|
+
]);
|
|
52
|
+
const idRows = await adapter.query('SELECT MAX(id) AS id FROM cost_entries');
|
|
53
|
+
return idRows[0]?.id ?? 0;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Retrieve a single cost entry by its DB-assigned id.
|
|
57
|
+
*
|
|
58
|
+
* Returns null if no row is found for the given id.
|
|
59
|
+
*/
|
|
60
|
+
export async function getCostEntryById(adapter, id) {
|
|
61
|
+
const rows = await adapter.query('SELECT * FROM cost_entries WHERE id = ?', [id]);
|
|
62
|
+
const row = rows[0];
|
|
63
|
+
if (row == null) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
id: row.id,
|
|
68
|
+
session_id: row.session_id,
|
|
69
|
+
task_id: row.task_id,
|
|
70
|
+
agent: row.agent,
|
|
71
|
+
provider: row.provider ?? 'unknown',
|
|
72
|
+
model: row.model ?? 'unknown',
|
|
73
|
+
billing_mode: row.billing_mode ?? 'api',
|
|
74
|
+
tokens_input: row.input_tokens,
|
|
75
|
+
tokens_output: row.output_tokens,
|
|
76
|
+
cost_usd: row.actual_cost ?? row.estimated_cost,
|
|
77
|
+
savings_usd: row.savings_usd ?? 0,
|
|
78
|
+
created_at: row.timestamp,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Atomically increment a task's cumulative cost_usd field.
|
|
83
|
+
*
|
|
84
|
+
* Uses a single UPDATE with arithmetic to avoid race conditions.
|
|
85
|
+
*/
|
|
86
|
+
export async function incrementTaskCost(adapter, taskId, costDelta) {
|
|
87
|
+
await adapter.query('UPDATE tasks SET cost_usd = cost_usd + ?, updated_at = ? WHERE id = ?', [costDelta, new Date().toISOString(), taskId]);
|
|
88
|
+
}
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
// Read functions (AC6 — all use indexed columns)
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
/**
|
|
93
|
+
* Return aggregated cost totals for a session (AC2).
|
|
94
|
+
*
|
|
95
|
+
* Returns a SessionCostSummary with subscription/API breakdown and savings.
|
|
96
|
+
* Uses idx_cost_entries_session_task index.
|
|
97
|
+
*/
|
|
98
|
+
export async function getSessionCostSummary(adapter, sessionId) {
|
|
99
|
+
// Aggregate totals including the earliest recorded_at timestamp
|
|
100
|
+
const totalsRows = await adapter.query(`SELECT
|
|
101
|
+
COALESCE(SUM(estimated_cost), 0) AS total_cost_usd,
|
|
102
|
+
COALESCE(SUM(CASE WHEN billing_mode = 'subscription' THEN COALESCE(estimated_cost, 0) ELSE 0 END), 0) AS subscription_cost_usd,
|
|
103
|
+
COALESCE(SUM(CASE WHEN billing_mode = 'api' THEN COALESCE(estimated_cost, 0) ELSE 0 END), 0) AS api_cost_usd,
|
|
104
|
+
COALESCE(SUM(savings_usd), 0) AS savings_usd,
|
|
105
|
+
COUNT(*) AS task_count,
|
|
106
|
+
SUM(CASE WHEN billing_mode = 'subscription' THEN 1 ELSE 0 END) AS subscription_task_count,
|
|
107
|
+
SUM(CASE WHEN billing_mode = 'api' THEN 1 ELSE 0 END) AS api_task_count,
|
|
108
|
+
MIN(timestamp) AS earliest_recorded_at
|
|
109
|
+
FROM cost_entries
|
|
110
|
+
WHERE session_id = ?`, [sessionId]);
|
|
111
|
+
const totalsRow = totalsRows[0];
|
|
112
|
+
if (totalsRow === undefined)
|
|
113
|
+
throw new Error('getSessionCostSummary: aggregate query returned no rows');
|
|
114
|
+
// Per-agent breakdown
|
|
115
|
+
const agentRows = await adapter.query(`SELECT
|
|
116
|
+
agent,
|
|
117
|
+
COUNT(*) AS task_count,
|
|
118
|
+
COALESCE(SUM(estimated_cost), 0) AS cost_usd,
|
|
119
|
+
COALESCE(SUM(savings_usd), 0) AS savings_usd,
|
|
120
|
+
SUM(CASE WHEN billing_mode = 'subscription' THEN 1 ELSE 0 END) AS subscription_tasks,
|
|
121
|
+
SUM(CASE WHEN billing_mode = 'api' THEN 1 ELSE 0 END) AS api_tasks
|
|
122
|
+
FROM cost_entries
|
|
123
|
+
WHERE session_id = ?
|
|
124
|
+
GROUP BY agent
|
|
125
|
+
ORDER BY cost_usd DESC`, [sessionId]);
|
|
126
|
+
const perAgentBreakdown = agentRows.map((row) => ({
|
|
127
|
+
agent: row.agent,
|
|
128
|
+
task_count: row.task_count,
|
|
129
|
+
cost_usd: row.cost_usd,
|
|
130
|
+
savings_usd: row.savings_usd,
|
|
131
|
+
subscription_tasks: row.subscription_tasks,
|
|
132
|
+
api_tasks: row.api_tasks,
|
|
133
|
+
}));
|
|
134
|
+
const savingsUsd = totalsRow.savings_usd;
|
|
135
|
+
const subscriptionTaskCount = totalsRow.subscription_task_count;
|
|
136
|
+
const savingsSummary = savingsUsd > 0
|
|
137
|
+
? `Saved ~$${savingsUsd.toFixed(2)} by routing ${subscriptionTaskCount} task${subscriptionTaskCount === 1 ? '' : 's'} through subscriptions vs. equivalent API pricing`
|
|
138
|
+
: 'No subscription savings recorded this session';
|
|
139
|
+
return {
|
|
140
|
+
session_id: sessionId,
|
|
141
|
+
total_cost_usd: totalsRow.total_cost_usd,
|
|
142
|
+
subscription_cost_usd: totalsRow.subscription_cost_usd,
|
|
143
|
+
api_cost_usd: totalsRow.api_cost_usd,
|
|
144
|
+
savings_usd: savingsUsd,
|
|
145
|
+
savingsSummary,
|
|
146
|
+
per_agent_breakdown: perAgentBreakdown,
|
|
147
|
+
task_count: totalsRow.task_count,
|
|
148
|
+
subscription_task_count: subscriptionTaskCount,
|
|
149
|
+
api_task_count: totalsRow.api_task_count,
|
|
150
|
+
created_at: totalsRow.earliest_recorded_at ?? new Date().toISOString(),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Return aggregated cost totals for a session, optionally excluding planning entries.
|
|
155
|
+
*
|
|
156
|
+
* When includePlanning=false (the default for `substrate cost`), entries with
|
|
157
|
+
* category='planning' are excluded from the summary.
|
|
158
|
+
*
|
|
159
|
+
* This is the variant used by the Cost Report CLI command (story 4.4) to support
|
|
160
|
+
* the --include-planning flag.
|
|
161
|
+
*
|
|
162
|
+
* Uses idx_cost_entries_session_task index.
|
|
163
|
+
*/
|
|
164
|
+
export async function getSessionCostSummaryFiltered(adapter, sessionId, includePlanning) {
|
|
165
|
+
const categoryFilter = includePlanning ? '' : "AND category != 'planning'";
|
|
166
|
+
const totalsRows = await adapter.query(`SELECT
|
|
167
|
+
COALESCE(SUM(estimated_cost), 0) AS total_cost_usd,
|
|
168
|
+
COALESCE(SUM(CASE WHEN billing_mode = 'subscription' THEN COALESCE(estimated_cost, 0) ELSE 0 END), 0) AS subscription_cost_usd,
|
|
169
|
+
COALESCE(SUM(CASE WHEN billing_mode = 'api' THEN COALESCE(estimated_cost, 0) ELSE 0 END), 0) AS api_cost_usd,
|
|
170
|
+
COALESCE(SUM(savings_usd), 0) AS savings_usd,
|
|
171
|
+
COUNT(*) AS task_count,
|
|
172
|
+
SUM(CASE WHEN billing_mode = 'subscription' THEN 1 ELSE 0 END) AS subscription_task_count,
|
|
173
|
+
SUM(CASE WHEN billing_mode = 'api' THEN 1 ELSE 0 END) AS api_task_count,
|
|
174
|
+
MIN(timestamp) AS earliest_recorded_at
|
|
175
|
+
FROM cost_entries
|
|
176
|
+
WHERE session_id = ? ${categoryFilter}`, [sessionId]);
|
|
177
|
+
const totalsRow = totalsRows[0];
|
|
178
|
+
if (totalsRow === undefined)
|
|
179
|
+
throw new Error('getSessionCostSummaryFiltered: aggregate query returned no rows');
|
|
180
|
+
const agentRows = await adapter.query(`SELECT
|
|
181
|
+
agent,
|
|
182
|
+
COUNT(*) AS task_count,
|
|
183
|
+
COALESCE(SUM(estimated_cost), 0) AS cost_usd,
|
|
184
|
+
COALESCE(SUM(savings_usd), 0) AS savings_usd,
|
|
185
|
+
SUM(CASE WHEN billing_mode = 'subscription' THEN 1 ELSE 0 END) AS subscription_tasks,
|
|
186
|
+
SUM(CASE WHEN billing_mode = 'api' THEN 1 ELSE 0 END) AS api_tasks
|
|
187
|
+
FROM cost_entries
|
|
188
|
+
WHERE session_id = ? ${categoryFilter}
|
|
189
|
+
GROUP BY agent
|
|
190
|
+
ORDER BY cost_usd DESC`, [sessionId]);
|
|
191
|
+
const perAgentBreakdown = agentRows.map((row) => ({
|
|
192
|
+
agent: row.agent,
|
|
193
|
+
task_count: row.task_count,
|
|
194
|
+
cost_usd: row.cost_usd,
|
|
195
|
+
savings_usd: row.savings_usd,
|
|
196
|
+
subscription_tasks: row.subscription_tasks,
|
|
197
|
+
api_tasks: row.api_tasks,
|
|
198
|
+
}));
|
|
199
|
+
const savingsUsd = totalsRow.savings_usd;
|
|
200
|
+
const subscriptionTaskCount = totalsRow.subscription_task_count;
|
|
201
|
+
const savingsSummary = savingsUsd > 0
|
|
202
|
+
? `Saved ~$${savingsUsd.toFixed(2)} by routing ${subscriptionTaskCount} task${subscriptionTaskCount === 1 ? '' : 's'} through subscriptions vs. equivalent API pricing`
|
|
203
|
+
: 'No subscription savings recorded this session';
|
|
204
|
+
return {
|
|
205
|
+
session_id: sessionId,
|
|
206
|
+
total_cost_usd: totalsRow.total_cost_usd,
|
|
207
|
+
subscription_cost_usd: totalsRow.subscription_cost_usd,
|
|
208
|
+
api_cost_usd: totalsRow.api_cost_usd,
|
|
209
|
+
savings_usd: savingsUsd,
|
|
210
|
+
savingsSummary,
|
|
211
|
+
per_agent_breakdown: perAgentBreakdown,
|
|
212
|
+
task_count: totalsRow.task_count,
|
|
213
|
+
subscription_task_count: subscriptionTaskCount,
|
|
214
|
+
api_task_count: totalsRow.api_task_count,
|
|
215
|
+
created_at: totalsRow.earliest_recorded_at ?? new Date().toISOString(),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Return aggregated cost data for a single task (AC1).
|
|
220
|
+
*
|
|
221
|
+
* Uses idx_cost_task index.
|
|
222
|
+
*/
|
|
223
|
+
export async function getTaskCostSummary(adapter, taskId) {
|
|
224
|
+
const rows = await adapter.query(`SELECT
|
|
225
|
+
COALESCE(SUM(estimated_cost), 0) AS cost_usd,
|
|
226
|
+
COALESCE(SUM(input_tokens), 0) AS tokens_input,
|
|
227
|
+
COALESCE(SUM(output_tokens), 0) AS tokens_output,
|
|
228
|
+
COALESCE(SUM(savings_usd), 0) AS savings_usd,
|
|
229
|
+
COUNT(DISTINCT billing_mode) AS billing_mode_count,
|
|
230
|
+
MAX(billing_mode) AS last_billing_mode
|
|
231
|
+
FROM cost_entries
|
|
232
|
+
WHERE task_id = ?`, [taskId]);
|
|
233
|
+
const row = rows[0];
|
|
234
|
+
if (row === undefined)
|
|
235
|
+
throw new Error('getTaskCostSummary: aggregate query returned no rows');
|
|
236
|
+
let billingMode = null;
|
|
237
|
+
if (row.billing_mode_count > 1) {
|
|
238
|
+
billingMode = 'mixed';
|
|
239
|
+
}
|
|
240
|
+
else if (row.last_billing_mode === 'subscription') {
|
|
241
|
+
billingMode = 'subscription';
|
|
242
|
+
}
|
|
243
|
+
else if (row.last_billing_mode === 'api') {
|
|
244
|
+
billingMode = 'api';
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
task_id: taskId,
|
|
248
|
+
cost_usd: row.cost_usd,
|
|
249
|
+
tokens: {
|
|
250
|
+
input: row.tokens_input,
|
|
251
|
+
output: row.tokens_output,
|
|
252
|
+
total: row.tokens_input + row.tokens_output,
|
|
253
|
+
},
|
|
254
|
+
billing_mode: billingMode ?? 'api',
|
|
255
|
+
savings_usd: row.savings_usd,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Return cost breakdown for a specific agent within a session.
|
|
260
|
+
*
|
|
261
|
+
* Uses idx_cost_session index (session_id filter) + agent filter.
|
|
262
|
+
*/
|
|
263
|
+
export async function getAgentCostBreakdown(adapter, sessionId, agent) {
|
|
264
|
+
const rows = await adapter.query(`SELECT
|
|
265
|
+
COUNT(*) AS task_count,
|
|
266
|
+
COALESCE(SUM(estimated_cost), 0) AS cost_usd,
|
|
267
|
+
COALESCE(SUM(savings_usd), 0) AS savings_usd,
|
|
268
|
+
SUM(CASE WHEN billing_mode = 'subscription' THEN 1 ELSE 0 END) AS subscription_tasks,
|
|
269
|
+
SUM(CASE WHEN billing_mode = 'api' THEN 1 ELSE 0 END) AS api_tasks
|
|
270
|
+
FROM cost_entries
|
|
271
|
+
WHERE session_id = ? AND agent = ?`, [sessionId, agent]);
|
|
272
|
+
const row = rows[0];
|
|
273
|
+
if (row === undefined)
|
|
274
|
+
throw new Error('getAgentCostBreakdown: aggregate query returned no rows');
|
|
275
|
+
return {
|
|
276
|
+
agent,
|
|
277
|
+
task_count: row.task_count,
|
|
278
|
+
cost_usd: row.cost_usd,
|
|
279
|
+
savings_usd: row.savings_usd,
|
|
280
|
+
subscription_tasks: row.subscription_tasks,
|
|
281
|
+
api_tasks: row.api_tasks,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Return all cost entries for a session, ordered by timestamp descending.
|
|
286
|
+
*
|
|
287
|
+
* Supports optional pagination via limit.
|
|
288
|
+
* Uses idx_cost_entries_session_task index.
|
|
289
|
+
*/
|
|
290
|
+
export async function getAllCostEntries(adapter, sessionId, limit) {
|
|
291
|
+
let rows;
|
|
292
|
+
if (limit !== undefined) {
|
|
293
|
+
rows = await adapter.query('SELECT * FROM cost_entries WHERE session_id = ? ORDER BY timestamp DESC LIMIT ?', [sessionId, limit]);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
rows = await adapter.query('SELECT * FROM cost_entries WHERE session_id = ? ORDER BY timestamp DESC', [sessionId]);
|
|
297
|
+
}
|
|
298
|
+
return rows.map((row) => ({
|
|
299
|
+
id: row.id,
|
|
300
|
+
session_id: row.session_id,
|
|
301
|
+
task_id: row.task_id,
|
|
302
|
+
agent: row.agent,
|
|
303
|
+
provider: row.provider ?? 'unknown',
|
|
304
|
+
model: row.model ?? 'unknown',
|
|
305
|
+
billing_mode: row.billing_mode ?? 'api',
|
|
306
|
+
tokens_input: row.input_tokens,
|
|
307
|
+
tokens_output: row.output_tokens,
|
|
308
|
+
cost_usd: row.actual_cost ?? row.estimated_cost,
|
|
309
|
+
savings_usd: row.savings_usd ?? 0,
|
|
310
|
+
created_at: row.timestamp,
|
|
311
|
+
}));
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Return all cost entries for a session, optionally excluding planning entries.
|
|
315
|
+
*
|
|
316
|
+
* When `includePlanning` is false, entries with `category = 'planning'` are
|
|
317
|
+
* excluded from the result set. This supports the `--include-planning` flag
|
|
318
|
+
* in the Cost Report CLI command (story 4.4).
|
|
319
|
+
*
|
|
320
|
+
* Uses idx_cost_entries_session_task index.
|
|
321
|
+
*/
|
|
322
|
+
export async function getAllCostEntriesFiltered(adapter, sessionId, includePlanning) {
|
|
323
|
+
const categoryFilter = includePlanning ? '' : "AND category != 'planning'";
|
|
324
|
+
const rows = await adapter.query(`SELECT * FROM cost_entries
|
|
325
|
+
WHERE session_id = ? ${categoryFilter}
|
|
326
|
+
ORDER BY timestamp DESC`, [sessionId]);
|
|
327
|
+
return rows.map((row) => ({
|
|
328
|
+
id: row.id,
|
|
329
|
+
session_id: row.session_id,
|
|
330
|
+
task_id: row.task_id,
|
|
331
|
+
agent: row.agent,
|
|
332
|
+
provider: row.provider ?? 'unknown',
|
|
333
|
+
model: row.model ?? 'unknown',
|
|
334
|
+
billing_mode: row.billing_mode ?? 'api',
|
|
335
|
+
tokens_input: row.input_tokens,
|
|
336
|
+
tokens_output: row.output_tokens,
|
|
337
|
+
cost_usd: row.actual_cost ?? row.estimated_cost,
|
|
338
|
+
savings_usd: row.savings_usd ?? 0,
|
|
339
|
+
created_at: row.timestamp,
|
|
340
|
+
}));
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Return the total cost of planning entries for a session.
|
|
344
|
+
*
|
|
345
|
+
* Used by the Cost Report CLI command to show excluded planning costs
|
|
346
|
+
* without requiring a second full summary query.
|
|
347
|
+
*
|
|
348
|
+
* Uses idx_cost_category index.
|
|
349
|
+
*/
|
|
350
|
+
export async function getPlanningCostTotal(adapter, sessionId) {
|
|
351
|
+
const rows = await adapter.query(`SELECT COALESCE(SUM(estimated_cost), 0) AS planning_cost
|
|
352
|
+
FROM cost_entries
|
|
353
|
+
WHERE session_id = ? AND category = 'planning'`, [sessionId]);
|
|
354
|
+
return rows[0]?.planning_cost ?? 0;
|
|
355
|
+
}
|
|
356
|
+
/** @deprecated Use getSessionCostSummary instead */
|
|
357
|
+
export async function getSessionCost(adapter, sessionId) {
|
|
358
|
+
const rows = await adapter.query(`SELECT
|
|
359
|
+
COALESCE(SUM(COALESCE(actual_cost, estimated_cost)), 0) AS total_cost,
|
|
360
|
+
COALESCE(SUM(input_tokens), 0) AS total_input_tokens,
|
|
361
|
+
COALESCE(SUM(output_tokens), 0) AS total_output_tokens,
|
|
362
|
+
COUNT(*) AS entry_count
|
|
363
|
+
FROM cost_entries
|
|
364
|
+
WHERE session_id = ?`, [sessionId]);
|
|
365
|
+
const sessionRow = rows[0];
|
|
366
|
+
if (sessionRow === undefined)
|
|
367
|
+
throw new Error('getSessionCost: aggregate query returned no rows');
|
|
368
|
+
return sessionRow;
|
|
369
|
+
}
|
|
370
|
+
/** @deprecated Use getTaskCostSummary instead */
|
|
371
|
+
export async function getTaskCost(adapter, taskId) {
|
|
372
|
+
const rows = await adapter.query(`SELECT
|
|
373
|
+
COALESCE(SUM(COALESCE(actual_cost, estimated_cost)), 0) AS total_cost,
|
|
374
|
+
COALESCE(SUM(input_tokens), 0) AS total_input_tokens,
|
|
375
|
+
COALESCE(SUM(output_tokens), 0) AS total_output_tokens,
|
|
376
|
+
COUNT(*) AS entry_count
|
|
377
|
+
FROM cost_entries
|
|
378
|
+
WHERE task_id = ?`, [taskId]);
|
|
379
|
+
const taskRow = rows[0];
|
|
380
|
+
if (taskRow === undefined)
|
|
381
|
+
throw new Error('getTaskCost: aggregate query returned no rows');
|
|
382
|
+
return taskRow;
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=cost.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost.js","sourceRoot":"","sources":["../../../src/persistence/queries/cost.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision store query functions for the persistence layer.
|
|
3
|
+
*
|
|
4
|
+
* Provides CRUD operations for the decision store tables:
|
|
5
|
+
* decisions, requirements, constraints, artifacts, pipeline_runs, token_usage.
|
|
6
|
+
*
|
|
7
|
+
* All functions are async and accept a DatabaseAdapter, making them
|
|
8
|
+
* compatible with both the SqliteDatabaseAdapter and DoltDatabaseAdapter.
|
|
9
|
+
*/
|
|
10
|
+
import type { DatabaseAdapter } from '../types.js';
|
|
11
|
+
import type { Decision, Requirement, Constraint, Artifact, PipelineRun, CreateDecisionInput, CreateRequirementInput, CreateConstraintInput, RegisterArtifactInput, CreatePipelineRunInput, AddTokenUsageInput } from '../schemas/decisions.js';
|
|
12
|
+
/**
|
|
13
|
+
* Insert a new decision record with a generated UUID.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createDecision(adapter: DatabaseAdapter, input: CreateDecisionInput): Promise<Decision>;
|
|
16
|
+
/**
|
|
17
|
+
* Insert or update a decision record.
|
|
18
|
+
* If a decision with the same pipeline_run_id, category, and key already exists,
|
|
19
|
+
* update its value and rationale. Otherwise, insert a new record.
|
|
20
|
+
*/
|
|
21
|
+
export declare function upsertDecision(adapter: DatabaseAdapter, input: CreateDecisionInput): Promise<Decision>;
|
|
22
|
+
/**
|
|
23
|
+
* Get all decisions for a given phase, ordered by created_at ascending.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getDecisionsByPhase(adapter: DatabaseAdapter, phase: string): Promise<Decision[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Get all decisions for a given phase scoped to a specific pipeline run,
|
|
28
|
+
* ordered by created_at ascending.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getDecisionsByPhaseForRun(adapter: DatabaseAdapter, runId: string, phase: string): Promise<Decision[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Get all decisions for a given category, ordered by created_at ascending.
|
|
33
|
+
*/
|
|
34
|
+
export declare function getDecisionsByCategory(adapter: DatabaseAdapter, category: string): Promise<Decision[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Get a single decision by phase and key. Returns undefined if not found.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getDecisionByKey(adapter: DatabaseAdapter, phase: string, key: string): Promise<Decision | undefined>;
|
|
39
|
+
/**
|
|
40
|
+
* Update a decision's value and/or rationale and set updated_at.
|
|
41
|
+
*/
|
|
42
|
+
export declare function updateDecision(adapter: DatabaseAdapter, id: string, updates: Partial<Pick<Decision, 'value' | 'rationale'>>): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Insert a new requirement with status = 'active'.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createRequirement(adapter: DatabaseAdapter, input: CreateRequirementInput): Promise<Requirement>;
|
|
47
|
+
/**
|
|
48
|
+
* List requirements with optional filtering by type, priority, and status.
|
|
49
|
+
*/
|
|
50
|
+
export declare function listRequirements(adapter: DatabaseAdapter, filters?: {
|
|
51
|
+
type?: string;
|
|
52
|
+
priority?: string;
|
|
53
|
+
status?: string;
|
|
54
|
+
}): Promise<Requirement[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Transition a requirement's status.
|
|
57
|
+
*/
|
|
58
|
+
export declare function updateRequirementStatus(adapter: DatabaseAdapter, id: string, status: string): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Insert a new constraint record.
|
|
61
|
+
*/
|
|
62
|
+
export declare function createConstraint(adapter: DatabaseAdapter, input: CreateConstraintInput): Promise<Constraint>;
|
|
63
|
+
/**
|
|
64
|
+
* List constraints with optional category filtering.
|
|
65
|
+
*/
|
|
66
|
+
export declare function listConstraints(adapter: DatabaseAdapter, filters?: {
|
|
67
|
+
category?: string;
|
|
68
|
+
}): Promise<Constraint[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Register a new artifact record.
|
|
71
|
+
*/
|
|
72
|
+
export declare function registerArtifact(adapter: DatabaseAdapter, input: RegisterArtifactInput): Promise<Artifact>;
|
|
73
|
+
/**
|
|
74
|
+
* Get all artifacts for a given phase, ordered by created_at ascending.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getArtifactsByPhase(adapter: DatabaseAdapter, phase: string): Promise<Artifact[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Get the latest artifact of a given type for a given phase.
|
|
79
|
+
* Returns undefined if none found.
|
|
80
|
+
*/
|
|
81
|
+
export declare function getArtifactByType(adapter: DatabaseAdapter, phase: string, type: string): Promise<Artifact | undefined>;
|
|
82
|
+
/**
|
|
83
|
+
* Get the latest artifact of a given type for a specific pipeline run.
|
|
84
|
+
* Filters by pipeline_run_id, phase, and type.
|
|
85
|
+
* Returns undefined if none found.
|
|
86
|
+
*/
|
|
87
|
+
export declare function getArtifactByTypeForRun(adapter: DatabaseAdapter, runId: string, phase: string, type: string): Promise<Artifact | undefined>;
|
|
88
|
+
/**
|
|
89
|
+
* Get all artifacts registered for a specific pipeline run, ordered by created_at ascending.
|
|
90
|
+
*/
|
|
91
|
+
export declare function getArtifactsByRun(adapter: DatabaseAdapter, runId: string): Promise<Artifact[]>;
|
|
92
|
+
/**
|
|
93
|
+
* Get a pipeline run by its ID. Returns undefined if not found.
|
|
94
|
+
*/
|
|
95
|
+
export declare function getPipelineRunById(adapter: DatabaseAdapter, id: string): Promise<PipelineRun | undefined>;
|
|
96
|
+
/**
|
|
97
|
+
* Update a pipeline run's config_json field.
|
|
98
|
+
*/
|
|
99
|
+
export declare function updatePipelineRunConfig(adapter: DatabaseAdapter, id: string, configJson: string): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Create a new pipeline run with status = 'running'.
|
|
102
|
+
*/
|
|
103
|
+
export declare function createPipelineRun(adapter: DatabaseAdapter, input: CreatePipelineRunInput): Promise<PipelineRun>;
|
|
104
|
+
/**
|
|
105
|
+
* Update a pipeline run's current_phase, status, and/or token_usage_json.
|
|
106
|
+
*/
|
|
107
|
+
export declare function updatePipelineRun(adapter: DatabaseAdapter, id: string, updates: Partial<Pick<PipelineRun, 'current_phase' | 'status' | 'token_usage_json'>>): Promise<void>;
|
|
108
|
+
/**
|
|
109
|
+
* Get all pipeline runs with status = 'running'.
|
|
110
|
+
*/
|
|
111
|
+
export declare function getRunningPipelineRuns(adapter: DatabaseAdapter): Promise<PipelineRun[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Get the most recently created pipeline run. Returns undefined if none found.
|
|
114
|
+
*/
|
|
115
|
+
export declare function getLatestRun(adapter: DatabaseAdapter): Promise<PipelineRun | undefined>;
|
|
116
|
+
/**
|
|
117
|
+
* Append a token usage record for a pipeline run.
|
|
118
|
+
*/
|
|
119
|
+
export declare function addTokenUsage(adapter: DatabaseAdapter, runId: string, usage: AddTokenUsageInput): Promise<void>;
|
|
120
|
+
export interface TokenUsageSummary {
|
|
121
|
+
phase: string;
|
|
122
|
+
agent: string;
|
|
123
|
+
total_input_tokens: number;
|
|
124
|
+
total_output_tokens: number;
|
|
125
|
+
total_cost_usd: number;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Aggregate token usage by phase and agent for a given pipeline run.
|
|
129
|
+
*/
|
|
130
|
+
export declare function getTokenUsageSummary(adapter: DatabaseAdapter, runId: string): Promise<TokenUsageSummary[]>;
|
|
131
|
+
//# sourceMappingURL=decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../../../src/persistence/queries/decisions.ts"],"names":[],"mappings":"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"}
|