@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,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-task-type baseline profiles for efficiency scoring (Story 35-2).
|
|
3
|
+
*
|
|
4
|
+
* Calibrated from ynab cross-project validation run data (Epics 5-6, v0.5.8-v0.5.10).
|
|
5
|
+
* Used by EfficiencyScorer for task-type-aware io_ratio and token density scoring.
|
|
6
|
+
*
|
|
7
|
+
* Baseline data (ynab Epics 5-6):
|
|
8
|
+
* dev-story: 400 turns, avg 544 output/turn, io mean 398 (totalIn/out)
|
|
9
|
+
* create-story: 83 turns, avg 1522 output/turn, io mean 149
|
|
10
|
+
* code-review: 59 turns, avg 3937 output/turn, io mean 79
|
|
11
|
+
* minor-fixes: 48 turns, avg 714 output/turn, io mean 169
|
|
12
|
+
* test-plan: 15 turns, avg 1608 output/turn, io mean 28
|
|
13
|
+
* test-expansion: 7 turns, avg 1953 output/turn, io mean 12
|
|
14
|
+
*
|
|
15
|
+
* Migrated to @substrate-ai/core in story 41-6b.
|
|
16
|
+
*/
|
|
17
|
+
export interface TaskBaseline {
|
|
18
|
+
/** Expected avg output tokens per turn (for token density sub-score) */
|
|
19
|
+
expectedOutputPerTurn: number;
|
|
20
|
+
/** Target output/freshInput ratio for io_ratio sub-score logarithmic curve */
|
|
21
|
+
targetIoRatio: number;
|
|
22
|
+
}
|
|
23
|
+
export declare const TASK_BASELINES: Readonly<Record<string, TaskBaseline>>;
|
|
24
|
+
export declare const DEFAULT_BASELINE: Readonly<TaskBaseline>;
|
|
25
|
+
/**
|
|
26
|
+
* Get the baseline for a task type, falling back to DEFAULT_BASELINE
|
|
27
|
+
* when taskType is undefined, empty, or unknown.
|
|
28
|
+
*/
|
|
29
|
+
export declare function getBaseline(taskType?: string): TaskBaseline;
|
|
30
|
+
//# sourceMappingURL=task-baselines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-baselines.d.ts","sourceRoot":"","sources":["../../src/telemetry/task-baselines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,qBAAqB,EAAE,MAAM,CAAA;IAC7B,8EAA8E;IAC9E,aAAa,EAAE,MAAM,CAAA;CACtB;AAMD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAOjE,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAGnD,CAAA;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,YAAY,CAG3D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-task-type baseline profiles for efficiency scoring (Story 35-2).
|
|
3
|
+
*
|
|
4
|
+
* Calibrated from ynab cross-project validation run data (Epics 5-6, v0.5.8-v0.5.10).
|
|
5
|
+
* Used by EfficiencyScorer for task-type-aware io_ratio and token density scoring.
|
|
6
|
+
*
|
|
7
|
+
* Baseline data (ynab Epics 5-6):
|
|
8
|
+
* dev-story: 400 turns, avg 544 output/turn, io mean 398 (totalIn/out)
|
|
9
|
+
* create-story: 83 turns, avg 1522 output/turn, io mean 149
|
|
10
|
+
* code-review: 59 turns, avg 3937 output/turn, io mean 79
|
|
11
|
+
* minor-fixes: 48 turns, avg 714 output/turn, io mean 169
|
|
12
|
+
* test-plan: 15 turns, avg 1608 output/turn, io mean 28
|
|
13
|
+
* test-expansion: 7 turns, avg 1953 output/turn, io mean 12
|
|
14
|
+
*
|
|
15
|
+
* Migrated to @substrate-ai/core in story 41-6b.
|
|
16
|
+
*/
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Baselines
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
export const TASK_BASELINES = {
|
|
21
|
+
'dev-story': { expectedOutputPerTurn: 550, targetIoRatio: 100 },
|
|
22
|
+
'create-story': { expectedOutputPerTurn: 1500, targetIoRatio: 100 },
|
|
23
|
+
'code-review': { expectedOutputPerTurn: 3900, targetIoRatio: 50 },
|
|
24
|
+
'minor-fixes': { expectedOutputPerTurn: 700, targetIoRatio: 100 },
|
|
25
|
+
'test-plan': { expectedOutputPerTurn: 1600, targetIoRatio: 30 },
|
|
26
|
+
'test-expansion': { expectedOutputPerTurn: 1950, targetIoRatio: 15 },
|
|
27
|
+
};
|
|
28
|
+
export const DEFAULT_BASELINE = {
|
|
29
|
+
expectedOutputPerTurn: 800,
|
|
30
|
+
targetIoRatio: 100,
|
|
31
|
+
};
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Lookup
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/**
|
|
36
|
+
* Get the baseline for a task type, falling back to DEFAULT_BASELINE
|
|
37
|
+
* when taskType is undefined, empty, or unknown.
|
|
38
|
+
*/
|
|
39
|
+
export function getBaseline(taskType) {
|
|
40
|
+
if (taskType === undefined || taskType === '')
|
|
41
|
+
return DEFAULT_BASELINE;
|
|
42
|
+
return TASK_BASELINES[taskType] ?? DEFAULT_BASELINE;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=task-baselines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-baselines.js","sourceRoot":"","sources":["../../src/telemetry/task-baselines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAA2C;IACpE,WAAW,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE;IAC/D,cAAc,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE;IACnE,aAAa,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;IACjE,aAAa,EAAE,EAAE,qBAAqB,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE;IACjE,WAAW,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;IAC/D,gBAAgB,EAAE,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;CACrE,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,qBAAqB,EAAE,GAAG;IAC1B,aAAa,EAAE,GAAG;CACnB,CAAA;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAiB;IAC3C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,gBAAgB,CAAA;IACtE,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TelemetryPipeline — orchestrates the full telemetry analysis pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Processing flow for each batch of raw OTLP payloads:
|
|
5
|
+
* 1. Normalize raw OTLP → NormalizedSpan[] / NormalizedLog[] (TelemetryNormalizer)
|
|
6
|
+
* 2. Analyze turns via dual-track:
|
|
7
|
+
* a. Span-based: ITurnAnalyzer.analyze(spans) → TurnAnalysis[]
|
|
8
|
+
* b. Log-based: ILogTurnAnalyzer.analyze(logs) → TurnAnalysis[]
|
|
9
|
+
* c. Merge & deduplicate by spanId (prefer span-derived)
|
|
10
|
+
* 3. Compute category stats → CategoryStats[] (ICategorizer)
|
|
11
|
+
* 4. Compute consumer stats → ConsumerStats[] (IConsumerAnalyzer)
|
|
12
|
+
* 5. Score efficiency → EfficiencyScore (IEfficiencyScorer) — from merged turns
|
|
13
|
+
* 6. Generate recommendations → Recommendation[] (IRecommender) — from merged turns
|
|
14
|
+
* 7. Persist all results (ITelemetryPersistence)
|
|
15
|
+
*
|
|
16
|
+
* Design invariants:
|
|
17
|
+
* - Constructor injection for all dependencies
|
|
18
|
+
* - Never throws from processBatch() — errors are caught per-item and logged
|
|
19
|
+
* - Grouping by storyKey; payloads without a storyKey are skipped at the
|
|
20
|
+
* analysis stage (normalised data is still stored)
|
|
21
|
+
* - Log-only path: when no spans are present, ILogTurnAnalyzer produces turns.
|
|
22
|
+
*
|
|
23
|
+
* Duck-typed interfaces for scoring deps (implementations migrate in 41-6b).
|
|
24
|
+
* This allows the core package to be self-contained without importing from
|
|
25
|
+
* the monolith's scoring modules.
|
|
26
|
+
*/
|
|
27
|
+
import type { ILogger } from '../dispatch/types.js';
|
|
28
|
+
import type { TelemetryNormalizer } from './normalizer.js';
|
|
29
|
+
import type { NormalizedSpan, NormalizedLog, TurnAnalysis, CategoryStats, ConsumerStats, EfficiencyScore, RawOtlpPayload, ITelemetryPersistence, IRecommender } from './types.js';
|
|
30
|
+
export interface ITurnAnalyzer {
|
|
31
|
+
analyze(spans: NormalizedSpan[]): TurnAnalysis[];
|
|
32
|
+
}
|
|
33
|
+
export interface ILogTurnAnalyzer {
|
|
34
|
+
analyze(logs: NormalizedLog[]): TurnAnalysis[];
|
|
35
|
+
}
|
|
36
|
+
export interface ICategorizer {
|
|
37
|
+
computeCategoryStats(spans: NormalizedSpan[], turns: TurnAnalysis[]): CategoryStats[];
|
|
38
|
+
computeCategoryStatsFromTurns(turns: TurnAnalysis[]): CategoryStats[];
|
|
39
|
+
}
|
|
40
|
+
export interface IConsumerAnalyzer {
|
|
41
|
+
analyze(spans: NormalizedSpan[]): ConsumerStats[];
|
|
42
|
+
analyzeFromTurns(turns: TurnAnalysis[]): ConsumerStats[];
|
|
43
|
+
}
|
|
44
|
+
export interface IEfficiencyScorer {
|
|
45
|
+
score(storyKey: string, turns: TurnAnalysis[]): EfficiencyScore;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* All injected dependencies for the TelemetryPipeline.
|
|
49
|
+
* Concrete implementations satisfy these duck-typed interfaces structurally.
|
|
50
|
+
*/
|
|
51
|
+
export interface TelemetryPipelineDeps {
|
|
52
|
+
normalizer: TelemetryNormalizer;
|
|
53
|
+
turnAnalyzer: ITurnAnalyzer;
|
|
54
|
+
logTurnAnalyzer: ILogTurnAnalyzer;
|
|
55
|
+
categorizer: ICategorizer;
|
|
56
|
+
consumerAnalyzer: IConsumerAnalyzer;
|
|
57
|
+
efficiencyScorer: IEfficiencyScorer;
|
|
58
|
+
recommender: IRecommender;
|
|
59
|
+
persistence: ITelemetryPersistence;
|
|
60
|
+
logger?: ILogger;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Wires together the full OTLP analysis and persistence pipeline.
|
|
64
|
+
*
|
|
65
|
+
* Usage:
|
|
66
|
+
* const pipeline = new TelemetryPipeline(deps)
|
|
67
|
+
* await pipeline.processBatch(items)
|
|
68
|
+
*/
|
|
69
|
+
export declare class TelemetryPipeline {
|
|
70
|
+
private readonly _normalizer;
|
|
71
|
+
private readonly _turnAnalyzer;
|
|
72
|
+
private readonly _logTurnAnalyzer;
|
|
73
|
+
private readonly _categorizer;
|
|
74
|
+
private readonly _consumerAnalyzer;
|
|
75
|
+
private readonly _efficiencyScorer;
|
|
76
|
+
private readonly _recommender;
|
|
77
|
+
private readonly _persistence;
|
|
78
|
+
private readonly _logger;
|
|
79
|
+
/** Stories that have had stale telemetry purged this pipeline lifetime. */
|
|
80
|
+
private readonly _purgedStories;
|
|
81
|
+
constructor(deps: TelemetryPipelineDeps);
|
|
82
|
+
/**
|
|
83
|
+
* Process a batch of raw OTLP payloads through the full analysis pipeline.
|
|
84
|
+
*
|
|
85
|
+
* Each payload is normalized independently. Spans and logs are grouped by
|
|
86
|
+
* storyKey for per-story analysis. Items that fail normalization are skipped
|
|
87
|
+
* with a warning.
|
|
88
|
+
*
|
|
89
|
+
* Dual-track analysis:
|
|
90
|
+
* - Span-derived turns via ITurnAnalyzer
|
|
91
|
+
* - Log-derived turns via ILogTurnAnalyzer
|
|
92
|
+
* - Merged (deduplicated by spanId) before downstream analysis
|
|
93
|
+
*/
|
|
94
|
+
processBatch(items: RawOtlpPayload[]): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Group turns by dispatchId for per-dispatch scoring.
|
|
97
|
+
* Only turns with a non-empty dispatchId are included.
|
|
98
|
+
*/
|
|
99
|
+
private _groupTurnsByDispatchId;
|
|
100
|
+
/**
|
|
101
|
+
* Merge span-derived and log-derived turns, deduplicating by spanId.
|
|
102
|
+
* When a span and a log share the same spanId, the span-derived turn is preferred
|
|
103
|
+
* (richer data). The merged result is sorted chronologically and renumbered.
|
|
104
|
+
*/
|
|
105
|
+
private _mergeTurns;
|
|
106
|
+
/**
|
|
107
|
+
* Full span-based analysis path.
|
|
108
|
+
*/
|
|
109
|
+
private _processStory;
|
|
110
|
+
/**
|
|
111
|
+
* Log-only analysis path: processes turns from ILogTurnAnalyzer through full
|
|
112
|
+
* analysis and persistence.
|
|
113
|
+
*/
|
|
114
|
+
private _processStoryFromTurns;
|
|
115
|
+
/**
|
|
116
|
+
* Shared persistence helper — called by both _processStory and _processStoryFromTurns.
|
|
117
|
+
* All 5 persistence calls are made here with individual error guards so a single
|
|
118
|
+
* failure does not abort the others.
|
|
119
|
+
*/
|
|
120
|
+
private _persistStoryData;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=telemetry-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-pipeline.d.ts","sourceRoot":"","sources":["../../src/telemetry/telemetry-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,YAAY,EAEZ,aAAa,EACb,aAAa,EAEb,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,YAAY,EACb,MAAM,YAAY,CAAA;AAMnB,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAA;IACrF,6BAA6B,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAA;CACtE;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,aAAa,EAAE,CAAA;IACjD,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAAA;CACzD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,eAAe,CAAA;CAChE;AAMD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,mBAAmB,CAAA;IAC/B,YAAY,EAAE,aAAa,CAAA;IAC3B,eAAe,EAAE,gBAAgB,CAAA;IACjC,WAAW,EAAE,YAAY,CAAA;IACzB,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,gBAAgB,EAAE,iBAAiB,CAAA;IACnC,WAAW,EAAE,YAAY,CAAA;IACzB,WAAW,EAAE,qBAAqB,CAAA;IAClC,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAsBD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAoB;gBAEvC,IAAI,EAAE,qBAAqB;IAgBvC;;;;;;;;;;;OAWG;IACG,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6G1D;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;YACW,aAAa;IAuE3B;;;OAGG;YACW,sBAAsB;IAmEpC;;;;OAIG;YACW,iBAAiB;CAiDhC"}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TelemetryPipeline — orchestrates the full telemetry analysis pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Processing flow for each batch of raw OTLP payloads:
|
|
5
|
+
* 1. Normalize raw OTLP → NormalizedSpan[] / NormalizedLog[] (TelemetryNormalizer)
|
|
6
|
+
* 2. Analyze turns via dual-track:
|
|
7
|
+
* a. Span-based: ITurnAnalyzer.analyze(spans) → TurnAnalysis[]
|
|
8
|
+
* b. Log-based: ILogTurnAnalyzer.analyze(logs) → TurnAnalysis[]
|
|
9
|
+
* c. Merge & deduplicate by spanId (prefer span-derived)
|
|
10
|
+
* 3. Compute category stats → CategoryStats[] (ICategorizer)
|
|
11
|
+
* 4. Compute consumer stats → ConsumerStats[] (IConsumerAnalyzer)
|
|
12
|
+
* 5. Score efficiency → EfficiencyScore (IEfficiencyScorer) — from merged turns
|
|
13
|
+
* 6. Generate recommendations → Recommendation[] (IRecommender) — from merged turns
|
|
14
|
+
* 7. Persist all results (ITelemetryPersistence)
|
|
15
|
+
*
|
|
16
|
+
* Design invariants:
|
|
17
|
+
* - Constructor injection for all dependencies
|
|
18
|
+
* - Never throws from processBatch() — errors are caught per-item and logged
|
|
19
|
+
* - Grouping by storyKey; payloads without a storyKey are skipped at the
|
|
20
|
+
* analysis stage (normalised data is still stored)
|
|
21
|
+
* - Log-only path: when no spans are present, ILogTurnAnalyzer produces turns.
|
|
22
|
+
*
|
|
23
|
+
* Duck-typed interfaces for scoring deps (implementations migrate in 41-6b).
|
|
24
|
+
* This allows the core package to be self-contained without importing from
|
|
25
|
+
* the monolith's scoring modules.
|
|
26
|
+
*/
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// TelemetryPipeline
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Wires together the full OTLP analysis and persistence pipeline.
|
|
32
|
+
*
|
|
33
|
+
* Usage:
|
|
34
|
+
* const pipeline = new TelemetryPipeline(deps)
|
|
35
|
+
* await pipeline.processBatch(items)
|
|
36
|
+
*/
|
|
37
|
+
export class TelemetryPipeline {
|
|
38
|
+
_normalizer;
|
|
39
|
+
_turnAnalyzer;
|
|
40
|
+
_logTurnAnalyzer;
|
|
41
|
+
_categorizer;
|
|
42
|
+
_consumerAnalyzer;
|
|
43
|
+
_efficiencyScorer;
|
|
44
|
+
_recommender;
|
|
45
|
+
_persistence;
|
|
46
|
+
_logger;
|
|
47
|
+
/** Stories that have had stale telemetry purged this pipeline lifetime. */
|
|
48
|
+
_purgedStories = new Set();
|
|
49
|
+
constructor(deps) {
|
|
50
|
+
this._normalizer = deps.normalizer;
|
|
51
|
+
this._turnAnalyzer = deps.turnAnalyzer;
|
|
52
|
+
this._logTurnAnalyzer = deps.logTurnAnalyzer;
|
|
53
|
+
this._categorizer = deps.categorizer;
|
|
54
|
+
this._consumerAnalyzer = deps.consumerAnalyzer;
|
|
55
|
+
this._efficiencyScorer = deps.efficiencyScorer;
|
|
56
|
+
this._recommender = deps.recommender;
|
|
57
|
+
this._persistence = deps.persistence;
|
|
58
|
+
this._logger = deps.logger ?? console;
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// processBatch
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
/**
|
|
64
|
+
* Process a batch of raw OTLP payloads through the full analysis pipeline.
|
|
65
|
+
*
|
|
66
|
+
* Each payload is normalized independently. Spans and logs are grouped by
|
|
67
|
+
* storyKey for per-story analysis. Items that fail normalization are skipped
|
|
68
|
+
* with a warning.
|
|
69
|
+
*
|
|
70
|
+
* Dual-track analysis:
|
|
71
|
+
* - Span-derived turns via ITurnAnalyzer
|
|
72
|
+
* - Log-derived turns via ILogTurnAnalyzer
|
|
73
|
+
* - Merged (deduplicated by spanId) before downstream analysis
|
|
74
|
+
*/
|
|
75
|
+
async processBatch(items) {
|
|
76
|
+
if (items.length === 0)
|
|
77
|
+
return;
|
|
78
|
+
this._logger.debug({ count: items.length }, 'TelemetryPipeline.processBatch start');
|
|
79
|
+
// -- Step 1: Normalize all payloads --
|
|
80
|
+
const allSpans = [];
|
|
81
|
+
const allLogs = [];
|
|
82
|
+
for (const item of items) {
|
|
83
|
+
try {
|
|
84
|
+
const spans = this._normalizer.normalizeSpan(item.body);
|
|
85
|
+
allSpans.push(...spans);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
this._logger.warn({ err }, 'TelemetryPipeline: normalizeSpan failed — skipping payload');
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const logs = this._normalizer.normalizeLog(item.body, item.dispatchContext);
|
|
92
|
+
allLogs.push(...logs);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
this._logger.warn({ err }, 'TelemetryPipeline: normalizeLog failed — skipping payload');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
this._logger.debug({ spans: allSpans.length, logs: allLogs.length }, 'TelemetryPipeline: normalized batch');
|
|
99
|
+
// AC1: No early return on zero spans — only return if BOTH are empty
|
|
100
|
+
if (allSpans.length === 0 && allLogs.length === 0) {
|
|
101
|
+
this._logger.debug('TelemetryPipeline: no spans or logs normalized from batch');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// -- Step 2: Group by storyKey --
|
|
105
|
+
const unknownStoryKey = '__unknown__';
|
|
106
|
+
const spansByStory = new Map();
|
|
107
|
+
for (const span of allSpans) {
|
|
108
|
+
const key = span.storyKey ?? unknownStoryKey;
|
|
109
|
+
const existing = spansByStory.get(key);
|
|
110
|
+
if (existing !== undefined) {
|
|
111
|
+
existing.push(span);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
spansByStory.set(key, [span]);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const logsByStory = new Map();
|
|
118
|
+
for (const log of allLogs) {
|
|
119
|
+
const key = log.storyKey ?? unknownStoryKey;
|
|
120
|
+
const existing = logsByStory.get(key);
|
|
121
|
+
if (existing !== undefined) {
|
|
122
|
+
existing.push(log);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
logsByStory.set(key, [log]);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Collect all unique story keys from both sources
|
|
129
|
+
const allStoryKeys = new Set();
|
|
130
|
+
for (const key of spansByStory.keys())
|
|
131
|
+
allStoryKeys.add(key);
|
|
132
|
+
for (const key of logsByStory.keys())
|
|
133
|
+
allStoryKeys.add(key);
|
|
134
|
+
// -- Step 3: Per-story dual-track analysis and persistence --
|
|
135
|
+
for (const storyKey of allStoryKeys) {
|
|
136
|
+
// Skip data without a story key for the analysis stages
|
|
137
|
+
if (storyKey === unknownStoryKey) {
|
|
138
|
+
const spanCount = spansByStory.get(unknownStoryKey)?.length ?? 0;
|
|
139
|
+
const logCount = logsByStory.get(unknownStoryKey)?.length ?? 0;
|
|
140
|
+
this._logger.debug({ spanCount, logCount }, 'TelemetryPipeline: data without storyKey — skipping analysis');
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const spans = spansByStory.get(storyKey) ?? [];
|
|
145
|
+
const logs = logsByStory.get(storyKey) ?? [];
|
|
146
|
+
// Dual-track turn analysis
|
|
147
|
+
const spanTurns = spans.length > 0 ? this._turnAnalyzer.analyze(spans) : [];
|
|
148
|
+
const logTurns = logs.length > 0 ? this._logTurnAnalyzer.analyze(logs) : [];
|
|
149
|
+
const mergedTurns = this._mergeTurns(spanTurns, logTurns);
|
|
150
|
+
if (spans.length > 0) {
|
|
151
|
+
// Has spans: full analysis with span-based categorizer/consumer
|
|
152
|
+
await this._processStory(storyKey, spans, mergedTurns);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Log-only path: efficiency + persistence only
|
|
156
|
+
await this._processStoryFromTurns(storyKey, mergedTurns);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
this._logger.warn({ err, storyKey }, 'TelemetryPipeline: story processing failed — skipping');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
this._logger.debug({ storyCount: allStoryKeys.size }, 'TelemetryPipeline.processBatch complete');
|
|
164
|
+
}
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
// Private helpers
|
|
167
|
+
// ---------------------------------------------------------------------------
|
|
168
|
+
/**
|
|
169
|
+
* Group turns by dispatchId for per-dispatch scoring.
|
|
170
|
+
* Only turns with a non-empty dispatchId are included.
|
|
171
|
+
*/
|
|
172
|
+
_groupTurnsByDispatchId(turns) {
|
|
173
|
+
const groups = new Map();
|
|
174
|
+
for (const turn of turns) {
|
|
175
|
+
if (turn.dispatchId === undefined || turn.dispatchId === '')
|
|
176
|
+
continue;
|
|
177
|
+
const existing = groups.get(turn.dispatchId);
|
|
178
|
+
if (existing !== undefined) {
|
|
179
|
+
existing.push(turn);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
groups.set(turn.dispatchId, [turn]);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return groups;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Merge span-derived and log-derived turns, deduplicating by spanId.
|
|
189
|
+
* When a span and a log share the same spanId, the span-derived turn is preferred
|
|
190
|
+
* (richer data). The merged result is sorted chronologically and renumbered.
|
|
191
|
+
*/
|
|
192
|
+
_mergeTurns(spanTurns, logTurns) {
|
|
193
|
+
if (logTurns.length === 0)
|
|
194
|
+
return spanTurns;
|
|
195
|
+
if (spanTurns.length === 0)
|
|
196
|
+
return logTurns;
|
|
197
|
+
const spanTurnIds = new Set(spanTurns.map((t) => t.spanId));
|
|
198
|
+
const uniqueLogTurns = logTurns.filter((t) => !spanTurnIds.has(t.spanId));
|
|
199
|
+
return [...spanTurns, ...uniqueLogTurns]
|
|
200
|
+
.sort((a, b) => a.timestamp - b.timestamp)
|
|
201
|
+
.map((t, i) => ({ ...t, turnNumber: i + 1 }));
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Full span-based analysis path.
|
|
205
|
+
*/
|
|
206
|
+
async _processStory(storyKey, spans, mergedTurns) {
|
|
207
|
+
// Step 2: Turn analysis — use pre-merged turns
|
|
208
|
+
const turns = mergedTurns;
|
|
209
|
+
// Step 3: Category stats (span-based)
|
|
210
|
+
const categories = this._categorizer.computeCategoryStats(spans, turns);
|
|
211
|
+
// Step 4: Consumer stats (span-based)
|
|
212
|
+
const consumers = this._consumerAnalyzer.analyze(spans);
|
|
213
|
+
// Step 5: Efficiency score (from merged turns)
|
|
214
|
+
const baseTimestamp = Date.now();
|
|
215
|
+
const storyScore = this._efficiencyScorer.score(storyKey, turns);
|
|
216
|
+
const efficiencyScore = { ...storyScore, timestamp: baseTimestamp };
|
|
217
|
+
// Per-dispatch scoring
|
|
218
|
+
const dispatchGroups = this._groupTurnsByDispatchId(turns);
|
|
219
|
+
const dispatchScores = Array.from(dispatchGroups.entries()).map(([dispatchId, dispatchTurns], idx) => {
|
|
220
|
+
const firstTurn = dispatchTurns[0];
|
|
221
|
+
const scored = this._efficiencyScorer.score(storyKey, dispatchTurns);
|
|
222
|
+
return {
|
|
223
|
+
...scored,
|
|
224
|
+
timestamp: baseTimestamp + 1 + idx,
|
|
225
|
+
dispatchId,
|
|
226
|
+
taskType: firstTurn?.taskType,
|
|
227
|
+
phase: firstTurn?.phase,
|
|
228
|
+
};
|
|
229
|
+
});
|
|
230
|
+
// Step 6: Recommendations
|
|
231
|
+
const generatedAt = new Date().toISOString();
|
|
232
|
+
const context = {
|
|
233
|
+
storyKey,
|
|
234
|
+
generatedAt,
|
|
235
|
+
turns,
|
|
236
|
+
categories,
|
|
237
|
+
consumers,
|
|
238
|
+
efficiencyScore,
|
|
239
|
+
allSpans: spans,
|
|
240
|
+
dispatchScores,
|
|
241
|
+
};
|
|
242
|
+
const recommendations = this._recommender.analyze(context);
|
|
243
|
+
// Step 7: Persist (shared helper — mirrors log-only path)
|
|
244
|
+
await this._persistStoryData(storyKey, {
|
|
245
|
+
turns,
|
|
246
|
+
efficiencyScore,
|
|
247
|
+
categoryStats: categories,
|
|
248
|
+
consumerStats: consumers,
|
|
249
|
+
recommendations,
|
|
250
|
+
dispatchScores,
|
|
251
|
+
});
|
|
252
|
+
this._logger.info({
|
|
253
|
+
storyKey,
|
|
254
|
+
turns: turns.length,
|
|
255
|
+
compositeScore: efficiencyScore.compositeScore,
|
|
256
|
+
recommendations: recommendations.length,
|
|
257
|
+
dispatchScores: dispatchScores.length,
|
|
258
|
+
}, 'TelemetryPipeline: story analysis complete');
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Log-only analysis path: processes turns from ILogTurnAnalyzer through full
|
|
262
|
+
* analysis and persistence.
|
|
263
|
+
*/
|
|
264
|
+
async _processStoryFromTurns(storyKey, turns) {
|
|
265
|
+
if (turns.length === 0)
|
|
266
|
+
return;
|
|
267
|
+
// Efficiency score from log-derived turns
|
|
268
|
+
const baseTimestamp = Date.now();
|
|
269
|
+
const storyScore = this._efficiencyScorer.score(storyKey, turns);
|
|
270
|
+
const efficiencyScore = { ...storyScore, timestamp: baseTimestamp };
|
|
271
|
+
// Category stats from turns (no raw spans needed)
|
|
272
|
+
const categoryStats = this._categorizer.computeCategoryStatsFromTurns(turns);
|
|
273
|
+
// Consumer stats from turns
|
|
274
|
+
const consumerStats = this._consumerAnalyzer.analyzeFromTurns(turns);
|
|
275
|
+
// Per-dispatch scoring
|
|
276
|
+
const dispatchGroups = this._groupTurnsByDispatchId(turns);
|
|
277
|
+
const dispatchScores = Array.from(dispatchGroups.entries()).map(([dispatchId, dispatchTurns], idx) => {
|
|
278
|
+
const firstTurn = dispatchTurns[0];
|
|
279
|
+
const scored = this._efficiencyScorer.score(storyKey, dispatchTurns);
|
|
280
|
+
return {
|
|
281
|
+
...scored,
|
|
282
|
+
timestamp: baseTimestamp + 1 + idx,
|
|
283
|
+
dispatchId,
|
|
284
|
+
taskType: firstTurn?.taskType,
|
|
285
|
+
phase: firstTurn?.phase,
|
|
286
|
+
};
|
|
287
|
+
});
|
|
288
|
+
// Recommendations via Recommender with allSpans: []
|
|
289
|
+
const generatedAt = new Date().toISOString();
|
|
290
|
+
const context = {
|
|
291
|
+
storyKey,
|
|
292
|
+
generatedAt,
|
|
293
|
+
turns,
|
|
294
|
+
categories: categoryStats,
|
|
295
|
+
consumers: consumerStats,
|
|
296
|
+
efficiencyScore,
|
|
297
|
+
allSpans: [],
|
|
298
|
+
dispatchScores,
|
|
299
|
+
};
|
|
300
|
+
const recommendations = this._recommender.analyze(context);
|
|
301
|
+
// Persist all 5 methods via shared helper
|
|
302
|
+
await this._persistStoryData(storyKey, {
|
|
303
|
+
turns,
|
|
304
|
+
efficiencyScore,
|
|
305
|
+
categoryStats,
|
|
306
|
+
consumerStats,
|
|
307
|
+
recommendations,
|
|
308
|
+
dispatchScores,
|
|
309
|
+
});
|
|
310
|
+
this._logger.info({
|
|
311
|
+
storyKey,
|
|
312
|
+
turns: turns.length,
|
|
313
|
+
compositeScore: efficiencyScore.compositeScore,
|
|
314
|
+
categories: categoryStats.length,
|
|
315
|
+
recommendations: recommendations.length,
|
|
316
|
+
dispatchScores: dispatchScores.length,
|
|
317
|
+
}, 'TelemetryPipeline: story analysis from turns complete');
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Shared persistence helper — called by both _processStory and _processStoryFromTurns.
|
|
321
|
+
* All 5 persistence calls are made here with individual error guards so a single
|
|
322
|
+
* failure does not abort the others.
|
|
323
|
+
*/
|
|
324
|
+
async _persistStoryData(storyKey, data) {
|
|
325
|
+
const { turns, efficiencyScore, categoryStats, consumerStats, recommendations, dispatchScores } = data;
|
|
326
|
+
// Purge stale telemetry from prior runs (once per story per pipeline lifetime)
|
|
327
|
+
if (!this._purgedStories.has(storyKey)) {
|
|
328
|
+
this._purgedStories.add(storyKey);
|
|
329
|
+
await this._persistence.purgeStoryTelemetry(storyKey).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to purge stale telemetry — continuing with persist'));
|
|
330
|
+
}
|
|
331
|
+
await Promise.all([
|
|
332
|
+
turns.length > 0
|
|
333
|
+
? this._persistence.storeTurnAnalysis(storyKey, turns).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store turn analysis'))
|
|
334
|
+
: Promise.resolve(),
|
|
335
|
+
this._persistence.storeEfficiencyScore(efficiencyScore).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store efficiency score')),
|
|
336
|
+
categoryStats.length > 0
|
|
337
|
+
? this._persistence.storeCategoryStats(storyKey, categoryStats).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store category stats'))
|
|
338
|
+
: Promise.resolve(),
|
|
339
|
+
consumerStats.length > 0
|
|
340
|
+
? this._persistence.storeConsumerStats(storyKey, consumerStats).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to store consumer stats'))
|
|
341
|
+
: Promise.resolve(),
|
|
342
|
+
recommendations.length > 0
|
|
343
|
+
? this._persistence.saveRecommendations(storyKey, recommendations).catch((err) => this._logger.warn({ err, storyKey }, 'Failed to save recommendations'))
|
|
344
|
+
: Promise.resolve(),
|
|
345
|
+
...dispatchScores.map((ds) => this._persistence.storeEfficiencyScore(ds).catch((err) => this._logger.warn({ err, storyKey, dispatchId: ds.dispatchId }, 'Failed to store dispatch efficiency score'))),
|
|
346
|
+
]);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=telemetry-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-pipeline.js","sourceRoot":"","sources":["../../src/telemetry/telemetry-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timestamp normalization for OTLP telemetry payloads.
|
|
3
|
+
*
|
|
4
|
+
* OTLP payloads use nanosecond integers for timestamps (e.g. `startTimeUnixNano`).
|
|
5
|
+
* Claude Code and other providers may emit timestamps in various formats.
|
|
6
|
+
*
|
|
7
|
+
* `normalizeTimestamp()` accepts any unknown value and returns a Unix millisecond
|
|
8
|
+
* number. Null/undefined/unparseable inputs fall back to `Date.now()`.
|
|
9
|
+
*
|
|
10
|
+
* Detection order (after ISO string check):
|
|
11
|
+
* 1. Nanoseconds (>= 1e18)
|
|
12
|
+
* 2. Microseconds (>= 1e15)
|
|
13
|
+
* 3. Milliseconds (>= 1e12)
|
|
14
|
+
* 4. Seconds (< 1e12)
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Normalize any timestamp value to Unix milliseconds.
|
|
18
|
+
*
|
|
19
|
+
* Handles:
|
|
20
|
+
* - ISO 8601 strings (e.g. "2024-03-08T12:00:00Z")
|
|
21
|
+
* - Nanosecond integers or numeric strings (>= 1e18)
|
|
22
|
+
* - Microsecond integers or numeric strings (>= 1e15)
|
|
23
|
+
* - Millisecond integers or numeric strings (>= 1e12)
|
|
24
|
+
* - Second integers or numeric strings (< 1e12)
|
|
25
|
+
* - BigInt string values from OTLP `startTimeUnixNano` (e.g. "1709900000000000000")
|
|
26
|
+
* - null / undefined / unparseable → falls back to Date.now()
|
|
27
|
+
*
|
|
28
|
+
* @param value - Raw timestamp value of unknown type
|
|
29
|
+
* @returns Unix millisecond timestamp
|
|
30
|
+
*/
|
|
31
|
+
export declare function normalizeTimestamp(value: unknown): number;
|
|
32
|
+
//# sourceMappingURL=timestamp-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timestamp-normalizer.d.ts","sourceRoot":"","sources":["../../src/telemetry/timestamp-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA4CzD"}
|