@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,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TelemetryNormalizer — transforms raw OTLP payloads into normalized models.
|
|
3
|
+
*
|
|
4
|
+
* Accepts raw OTLP JSON objects (traces or logs) and returns arrays of
|
|
5
|
+
* `NormalizedSpan` or `NormalizedLog` objects suitable for downstream analysis.
|
|
6
|
+
*
|
|
7
|
+
* Design invariants:
|
|
8
|
+
* - Never throws from public methods — returns empty array on any error
|
|
9
|
+
* - Constructor injection of ILogger for testability
|
|
10
|
+
* - No external dependencies beyond built-in Node.js and internal modules
|
|
11
|
+
*/
|
|
12
|
+
import { estimateCost } from './cost-table.js';
|
|
13
|
+
import { normalizeTimestamp } from './timestamp-normalizer.js';
|
|
14
|
+
import { extractTokensFromAttributes, extractTokensFromBody, mergeTokenCounts, } from './token-extractor.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Helpers
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* Extract a string value from an OTLP attribute array by key.
|
|
20
|
+
*/
|
|
21
|
+
function getAttrString(attrs, key) {
|
|
22
|
+
if (!Array.isArray(attrs))
|
|
23
|
+
return undefined;
|
|
24
|
+
const entry = attrs.find((a) => a?.key === key);
|
|
25
|
+
if (!entry?.value)
|
|
26
|
+
return undefined;
|
|
27
|
+
return (entry.value.stringValue ??
|
|
28
|
+
(entry.value.intValue !== undefined ? String(entry.value.intValue) : undefined) ??
|
|
29
|
+
(entry.value.doubleValue !== undefined ? String(entry.value.doubleValue) : undefined));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Determine source from resource attributes service.name.
|
|
33
|
+
*/
|
|
34
|
+
function resolveSource(resourceAttrs) {
|
|
35
|
+
const serviceName = getAttrString(resourceAttrs, 'service.name');
|
|
36
|
+
if (!serviceName)
|
|
37
|
+
return 'unknown';
|
|
38
|
+
const lower = serviceName.toLowerCase();
|
|
39
|
+
if (lower.includes('claude'))
|
|
40
|
+
return 'claude-code';
|
|
41
|
+
if (lower.includes('codex') || lower.includes('openai'))
|
|
42
|
+
return 'codex';
|
|
43
|
+
if (lower.includes('local'))
|
|
44
|
+
return 'local-llm';
|
|
45
|
+
return serviceName;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolve model from span attributes (tries multiple known keys).
|
|
49
|
+
*/
|
|
50
|
+
function resolveModel(attrs) {
|
|
51
|
+
const modelKeys = [
|
|
52
|
+
'gen_ai.request.model',
|
|
53
|
+
'gen_ai.response.model',
|
|
54
|
+
'llm.request.model',
|
|
55
|
+
'anthropic.model',
|
|
56
|
+
'openai.model',
|
|
57
|
+
'model',
|
|
58
|
+
];
|
|
59
|
+
for (const key of modelKeys) {
|
|
60
|
+
const val = getAttrString(attrs, key);
|
|
61
|
+
if (val)
|
|
62
|
+
return val;
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve provider from span attributes.
|
|
68
|
+
*/
|
|
69
|
+
function resolveProvider(attrs, source) {
|
|
70
|
+
const providerVal = getAttrString(attrs, 'gen_ai.system');
|
|
71
|
+
if (providerVal)
|
|
72
|
+
return providerVal;
|
|
73
|
+
if (source === 'claude-code')
|
|
74
|
+
return 'anthropic';
|
|
75
|
+
if (source === 'codex')
|
|
76
|
+
return 'openai';
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extract the body string from a log record body field.
|
|
81
|
+
*/
|
|
82
|
+
function extractBodyString(body) {
|
|
83
|
+
if (!body)
|
|
84
|
+
return undefined;
|
|
85
|
+
if (typeof body === 'string')
|
|
86
|
+
return body;
|
|
87
|
+
if (typeof body === 'object' && body.stringValue)
|
|
88
|
+
return body.stringValue;
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Generate a unique log record ID.
|
|
93
|
+
*/
|
|
94
|
+
let _logIdCounter = 0;
|
|
95
|
+
function generateLogId() {
|
|
96
|
+
return `log-${Date.now()}-${++_logIdCounter}`;
|
|
97
|
+
}
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// TelemetryNormalizer
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
/**
|
|
102
|
+
* Transforms raw OTLP payloads into normalized telemetry models.
|
|
103
|
+
*
|
|
104
|
+
* Inject an `ILogger` for structured logging.
|
|
105
|
+
* All public methods return empty arrays on any error — never throw.
|
|
106
|
+
*/
|
|
107
|
+
export class TelemetryNormalizer {
|
|
108
|
+
_logger;
|
|
109
|
+
constructor(logger) {
|
|
110
|
+
this._logger = logger;
|
|
111
|
+
}
|
|
112
|
+
// -------------------------------------------------------------------------
|
|
113
|
+
// normalizeSpan
|
|
114
|
+
// -------------------------------------------------------------------------
|
|
115
|
+
/**
|
|
116
|
+
* Normalize a raw OTLP trace payload into an array of `NormalizedSpan`.
|
|
117
|
+
*
|
|
118
|
+
* @param raw - Raw OTLP trace payload (resourceSpans structure)
|
|
119
|
+
* @returns Array of normalized spans; empty on error or empty input
|
|
120
|
+
*/
|
|
121
|
+
normalizeSpan(raw) {
|
|
122
|
+
try {
|
|
123
|
+
return this._normalizeSpanInternal(raw);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
this._logger.warn({ err }, 'TelemetryNormalizer.normalizeSpan: unexpected error');
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
_normalizeSpanInternal(raw) {
|
|
131
|
+
if (!raw || typeof raw !== 'object')
|
|
132
|
+
return [];
|
|
133
|
+
const payload = raw;
|
|
134
|
+
if (!Array.isArray(payload.resourceSpans))
|
|
135
|
+
return [];
|
|
136
|
+
const results = [];
|
|
137
|
+
for (const resourceSpan of payload.resourceSpans) {
|
|
138
|
+
if (!resourceSpan)
|
|
139
|
+
continue;
|
|
140
|
+
const resourceAttrs = resourceSpan.resource?.attributes;
|
|
141
|
+
const source = resolveSource(resourceAttrs);
|
|
142
|
+
if (!Array.isArray(resourceSpan.scopeSpans))
|
|
143
|
+
continue;
|
|
144
|
+
for (const scopeSpan of resourceSpan.scopeSpans) {
|
|
145
|
+
if (!Array.isArray(scopeSpan?.spans))
|
|
146
|
+
continue;
|
|
147
|
+
for (const span of scopeSpan.spans) {
|
|
148
|
+
if (!span)
|
|
149
|
+
continue;
|
|
150
|
+
try {
|
|
151
|
+
const normalized = this._normalizeOneSpan(span, resourceAttrs, source);
|
|
152
|
+
results.push(normalized);
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
this._logger.warn({ err, spanId: span.spanId }, 'Failed to normalize span — skipping');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return results;
|
|
161
|
+
}
|
|
162
|
+
_normalizeOneSpan(span, resourceAttrs, source) {
|
|
163
|
+
const spanId = span.spanId ?? '';
|
|
164
|
+
const traceId = span.traceId ?? '';
|
|
165
|
+
const name = span.name ?? '';
|
|
166
|
+
const model = resolveModel(span.attributes) ?? resolveModel(resourceAttrs);
|
|
167
|
+
const provider = resolveProvider(span.attributes, source);
|
|
168
|
+
const operationName = getAttrString(span.attributes, 'gen_ai.operation.name') ?? name;
|
|
169
|
+
// Timestamps
|
|
170
|
+
const startTime = normalizeTimestamp(span.startTimeUnixNano);
|
|
171
|
+
const endTime = span.endTimeUnixNano ? normalizeTimestamp(span.endTimeUnixNano) : undefined;
|
|
172
|
+
const durationMs = endTime !== undefined ? endTime - startTime : 0;
|
|
173
|
+
// Token extraction
|
|
174
|
+
const fromAttrs = extractTokensFromAttributes(span.attributes);
|
|
175
|
+
const bodyStr = getAttrString(span.attributes, 'llm.response.body') ??
|
|
176
|
+
getAttrString(span.attributes, 'gen_ai.response.body');
|
|
177
|
+
const fromBody = extractTokensFromBody(bodyStr);
|
|
178
|
+
const tokens = mergeTokenCounts(fromAttrs, fromBody);
|
|
179
|
+
// Story key
|
|
180
|
+
const storyKey = getAttrString(span.attributes, 'substrate.story_key') ??
|
|
181
|
+
getAttrString(resourceAttrs, 'substrate.story_key');
|
|
182
|
+
// Cost
|
|
183
|
+
const costUsd = model ? estimateCost(model, tokens) : 0;
|
|
184
|
+
// Flatten attributes to record
|
|
185
|
+
const attributesRecord = {};
|
|
186
|
+
if (Array.isArray(span.attributes)) {
|
|
187
|
+
for (const attr of span.attributes) {
|
|
188
|
+
if (attr?.key) {
|
|
189
|
+
attributesRecord[attr.key] =
|
|
190
|
+
attr.value?.stringValue ??
|
|
191
|
+
attr.value?.intValue ??
|
|
192
|
+
attr.value?.doubleValue ??
|
|
193
|
+
attr.value?.boolValue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return {
|
|
198
|
+
spanId,
|
|
199
|
+
traceId,
|
|
200
|
+
...(span.parentSpanId !== undefined && { parentSpanId: span.parentSpanId }),
|
|
201
|
+
name,
|
|
202
|
+
source,
|
|
203
|
+
...(model !== undefined && { model }),
|
|
204
|
+
...(provider !== undefined && { provider }),
|
|
205
|
+
operationName,
|
|
206
|
+
...(storyKey !== undefined && { storyKey }),
|
|
207
|
+
inputTokens: tokens.input,
|
|
208
|
+
outputTokens: tokens.output,
|
|
209
|
+
cacheReadTokens: tokens.cacheRead,
|
|
210
|
+
cacheCreationTokens: tokens.cacheCreation,
|
|
211
|
+
costUsd,
|
|
212
|
+
durationMs,
|
|
213
|
+
startTime,
|
|
214
|
+
...(endTime !== undefined && { endTime }),
|
|
215
|
+
attributes: attributesRecord,
|
|
216
|
+
...(span.events !== undefined && { events: span.events }),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
// -------------------------------------------------------------------------
|
|
220
|
+
// normalizeLog
|
|
221
|
+
// -------------------------------------------------------------------------
|
|
222
|
+
/**
|
|
223
|
+
* Normalize a raw OTLP log payload into an array of `NormalizedLog`.
|
|
224
|
+
*
|
|
225
|
+
* @param raw - Raw OTLP log payload (resourceLogs structure)
|
|
226
|
+
* @param dispatchContext - Optional dispatch context to stamp on each log (Story 30-1)
|
|
227
|
+
* @returns Array of normalized logs; empty on error or empty input
|
|
228
|
+
*/
|
|
229
|
+
normalizeLog(raw, dispatchContext) {
|
|
230
|
+
try {
|
|
231
|
+
return this._normalizeLogInternal(raw, dispatchContext);
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
this._logger.warn({ err }, 'TelemetryNormalizer.normalizeLog: unexpected error');
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
_normalizeLogInternal(raw, dispatchContext) {
|
|
239
|
+
if (!raw || typeof raw !== 'object')
|
|
240
|
+
return [];
|
|
241
|
+
const payload = raw;
|
|
242
|
+
if (!Array.isArray(payload.resourceLogs))
|
|
243
|
+
return [];
|
|
244
|
+
const results = [];
|
|
245
|
+
for (const resourceLog of payload.resourceLogs) {
|
|
246
|
+
if (!resourceLog)
|
|
247
|
+
continue;
|
|
248
|
+
const resourceAttrs = resourceLog.resource?.attributes;
|
|
249
|
+
if (!Array.isArray(resourceLog.scopeLogs))
|
|
250
|
+
continue;
|
|
251
|
+
for (const scopeLog of resourceLog.scopeLogs) {
|
|
252
|
+
if (!Array.isArray(scopeLog?.logRecords))
|
|
253
|
+
continue;
|
|
254
|
+
for (const record of scopeLog.logRecords) {
|
|
255
|
+
if (!record)
|
|
256
|
+
continue;
|
|
257
|
+
try {
|
|
258
|
+
const normalized = this._normalizeOneLog(record, resourceAttrs, dispatchContext);
|
|
259
|
+
results.push(normalized);
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
this._logger.warn({ err }, 'Failed to normalize log record — skipping');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return results;
|
|
268
|
+
}
|
|
269
|
+
_normalizeOneLog(record, resourceAttrs, dispatchContext) {
|
|
270
|
+
const logId = record.logRecordId ?? generateLogId();
|
|
271
|
+
const timestamp = normalizeTimestamp(record.timeUnixNano);
|
|
272
|
+
const bodyStr = extractBodyString(record.body);
|
|
273
|
+
// Extract from attributes
|
|
274
|
+
const fromAttrs = extractTokensFromAttributes(record.attributes);
|
|
275
|
+
const fromBody = extractTokensFromBody(bodyStr);
|
|
276
|
+
const tokens = mergeTokenCounts(fromAttrs, fromBody);
|
|
277
|
+
// Event name
|
|
278
|
+
const eventName = getAttrString(record.attributes, 'event.name') ??
|
|
279
|
+
getAttrString(record.attributes, 'gen_ai.event.name') ??
|
|
280
|
+
getAttrString(record.attributes, 'event_name');
|
|
281
|
+
// Session id
|
|
282
|
+
const sessionId = getAttrString(record.attributes, 'session.id') ??
|
|
283
|
+
getAttrString(record.attributes, 'gen_ai.session.id') ??
|
|
284
|
+
getAttrString(resourceAttrs, 'session.id');
|
|
285
|
+
// Tool name
|
|
286
|
+
const toolName = getAttrString(record.attributes, 'tool.name') ??
|
|
287
|
+
getAttrString(record.attributes, 'gen_ai.tool.name') ??
|
|
288
|
+
getAttrString(record.attributes, 'tool_name');
|
|
289
|
+
// Model
|
|
290
|
+
const model = resolveModel(record.attributes) ?? resolveModel(resourceAttrs);
|
|
291
|
+
// Story key
|
|
292
|
+
const storyKey = getAttrString(record.attributes, 'substrate.story_key') ??
|
|
293
|
+
getAttrString(resourceAttrs, 'substrate.story_key');
|
|
294
|
+
// Cost
|
|
295
|
+
const costUsd = model ? estimateCost(model, tokens) : 0;
|
|
296
|
+
return {
|
|
297
|
+
logId,
|
|
298
|
+
...(record.traceId !== undefined && { traceId: record.traceId }),
|
|
299
|
+
...(record.spanId !== undefined && { spanId: record.spanId }),
|
|
300
|
+
timestamp,
|
|
301
|
+
...(record.severityText !== undefined && { severity: record.severityText }),
|
|
302
|
+
...(bodyStr !== undefined && { body: bodyStr }),
|
|
303
|
+
...(eventName !== undefined && { eventName }),
|
|
304
|
+
...(sessionId !== undefined && { sessionId }),
|
|
305
|
+
...(toolName !== undefined && { toolName }),
|
|
306
|
+
inputTokens: tokens.input,
|
|
307
|
+
outputTokens: tokens.output,
|
|
308
|
+
cacheReadTokens: tokens.cacheRead,
|
|
309
|
+
costUsd,
|
|
310
|
+
...(model !== undefined && { model }),
|
|
311
|
+
...(storyKey !== undefined && { storyKey }),
|
|
312
|
+
...(dispatchContext !== undefined && {
|
|
313
|
+
taskType: dispatchContext.taskType,
|
|
314
|
+
phase: dispatchContext.phase,
|
|
315
|
+
dispatchId: dispatchContext.dispatchId,
|
|
316
|
+
}),
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../src/telemetry/normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recommender — analyzes telemetry context and generates actionable recommendations.
|
|
3
|
+
*
|
|
4
|
+
* Implements 9 rules across three categories:
|
|
5
|
+
* - Consumer rules: biggest_consumers, large_file_reads, expensive_bash, repeated_tool_calls
|
|
6
|
+
* - Context/trend rules: context_growth_spike, growing_categories
|
|
7
|
+
* - Efficiency rules: cache_efficiency, per_model_comparison, cache_delta_regression
|
|
8
|
+
*
|
|
9
|
+
* Architecture constraints:
|
|
10
|
+
* - Pure analysis service — no DB access; caller assembles RecommenderContext
|
|
11
|
+
* - Constructor injection: accepts ILogger (defaults to console)
|
|
12
|
+
* - No Math.random() or Date.now() — all timestamps injected via context.generatedAt
|
|
13
|
+
* - ID generation: sha256(ruleId:storyKey:actionTarget:index) via node:crypto
|
|
14
|
+
*
|
|
15
|
+
* Migrated to @substrate-ai/core in story 41-6b.
|
|
16
|
+
*/
|
|
17
|
+
import type { ILogger } from '../dispatch/types.js';
|
|
18
|
+
import type { Recommendation, RecommenderContext, IRecommender } from './types.js';
|
|
19
|
+
export declare class Recommender implements IRecommender {
|
|
20
|
+
private readonly _logger;
|
|
21
|
+
constructor(logger?: ILogger);
|
|
22
|
+
/**
|
|
23
|
+
* Run all rules against the given context and return sorted recommendations.
|
|
24
|
+
* Output is sorted: critical → warning → info, then by potentialSavingsTokens descending.
|
|
25
|
+
* No Date.now() or Math.random() is called — generatedAt comes from context.
|
|
26
|
+
*/
|
|
27
|
+
analyze(context: RecommenderContext): Recommendation[];
|
|
28
|
+
/**
|
|
29
|
+
* Generate a 16-char hex ID from the sha256 of `ruleId:storyKey:actionTarget:index`.
|
|
30
|
+
*/
|
|
31
|
+
private _makeId;
|
|
32
|
+
/**
|
|
33
|
+
* Map a token percentage to a severity level.
|
|
34
|
+
* >25% → critical, >10% → warning, ≤10% → info.
|
|
35
|
+
*/
|
|
36
|
+
private _assignSeverity;
|
|
37
|
+
/**
|
|
38
|
+
* Compute total tokens across all spans. Guards against empty arrays.
|
|
39
|
+
*/
|
|
40
|
+
private _totalSpanTokens;
|
|
41
|
+
/**
|
|
42
|
+
* Minimum absolute token count for a consumer to be flagged.
|
|
43
|
+
* Below this, the consumer is too small to be actionable regardless of percentage.
|
|
44
|
+
*/
|
|
45
|
+
private static readonly MIN_SIGNIFICANT_TOKENS;
|
|
46
|
+
/**
|
|
47
|
+
* Identify top 3 token consumers (by inputTokens + outputTokens) where pct >5%
|
|
48
|
+
* AND absolute tokens exceed MIN_SIGNIFICANT_TOKENS.
|
|
49
|
+
*
|
|
50
|
+
* Filters out model-only consumers (empty toolName, format "model|") since those
|
|
51
|
+
* just indicate which model ran — not an actionable optimization target.
|
|
52
|
+
*
|
|
53
|
+
* Severity factors both percentage share and absolute magnitude:
|
|
54
|
+
* - percentage-based tier via _assignSeverity()
|
|
55
|
+
* - capped at 'warning' when absolute tokens < 50,000
|
|
56
|
+
* - capped at 'info' when absolute tokens < 20,000
|
|
57
|
+
*/
|
|
58
|
+
private _runBiggestConsumers;
|
|
59
|
+
/**
|
|
60
|
+
* Flag file-read spans with inputTokens > 3000.
|
|
61
|
+
* Suggest using line ranges to reduce token count.
|
|
62
|
+
*/
|
|
63
|
+
private _runLargeFileReads;
|
|
64
|
+
/**
|
|
65
|
+
* Flag bash/execute_command spans with outputTokens > 3000.
|
|
66
|
+
* Suggest filtering or truncating command output.
|
|
67
|
+
*/
|
|
68
|
+
private _runExpensiveBash;
|
|
69
|
+
/**
|
|
70
|
+
* Detect tool calls with the same actionTarget appearing more than once.
|
|
71
|
+
* Suggests caching the result to avoid redundant token consumption.
|
|
72
|
+
*/
|
|
73
|
+
private _runRepeatedToolCalls;
|
|
74
|
+
/**
|
|
75
|
+
* Flag turns where isContextSpike is true.
|
|
76
|
+
* Severity is always at least 'warning'.
|
|
77
|
+
*/
|
|
78
|
+
private _runContextGrowthSpikes;
|
|
79
|
+
/**
|
|
80
|
+
* Categories whose growth is inherent to normal agentic work and not actionable.
|
|
81
|
+
* tool_outputs grows as the agent reads files, runs commands, etc. — expected behavior.
|
|
82
|
+
* conversation_history grows naturally as conversations progress.
|
|
83
|
+
*/
|
|
84
|
+
private static readonly EXPECTED_GROWTH_CATEGORIES;
|
|
85
|
+
/**
|
|
86
|
+
* Flag semantic categories with trend === 'growing'.
|
|
87
|
+
* Severity is 'info' by default; 'warning' if percentage > 25%.
|
|
88
|
+
* Skips categories whose growth is inherent to normal agentic work.
|
|
89
|
+
*/
|
|
90
|
+
private _runGrowingCategories;
|
|
91
|
+
/**
|
|
92
|
+
* If cache hit rate < 30%, flag the worst-performing operations and compute
|
|
93
|
+
* potential savings as totalCacheMissTokens * 0.5.
|
|
94
|
+
*/
|
|
95
|
+
private _runCacheEfficiency;
|
|
96
|
+
/**
|
|
97
|
+
* Models known to be intentionally routed for lightweight tasks.
|
|
98
|
+
* These should not be flagged as "underperforming" — the orchestrator chose them
|
|
99
|
+
* deliberately for cost/speed reasons, not as a performance optimization target.
|
|
100
|
+
*/
|
|
101
|
+
private static readonly INTENTIONAL_LIGHTWEIGHT_MODELS;
|
|
102
|
+
/**
|
|
103
|
+
* If more than one model is present, flag the underperforming model.
|
|
104
|
+
* Severity is 'info' by default; 'warning' if cache efficiency gap > 20pp.
|
|
105
|
+
* Skips flagging models that are intentionally routed for lightweight tasks.
|
|
106
|
+
*/
|
|
107
|
+
private _runModelComparison;
|
|
108
|
+
/**
|
|
109
|
+
* Detect significant cache hit rate drops between consecutive dispatches.
|
|
110
|
+
* >30pp drop → warning; >50pp drop → critical.
|
|
111
|
+
* Requires dispatchScores with at least 2 entries; otherwise returns [].
|
|
112
|
+
*/
|
|
113
|
+
private _runCacheDeltaRegression;
|
|
114
|
+
private _isToolNameMatch;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=recommender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recommender.d.ts","sourceRoot":"","sources":["../../src/telemetry/recommender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,YAAY,EAKb,MAAM,YAAY,CAAA;AAMnB,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,CAAC,EAAE,OAAO;IAQ5B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,cAAc,EAAE;IAkCtD;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;;OAGG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAEvD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,oBAAoB;IAiD5B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA2CzB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAgE7B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA0C/B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAGhD;IAEF;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA6D3B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAGpD;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;;;OAIG;IACH,OAAO,CAAC,wBAAwB;IAuChC,OAAO,CAAC,gBAAgB;CAWzB"}
|