@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,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for AdapterOutputNormalizer (Story 53-10).
|
|
3
|
+
*
|
|
4
|
+
* Tests all 4 normalization strategies:
|
|
5
|
+
* 1. standard — direct extractYamlBlock
|
|
6
|
+
* 2. strip-prose — remove leading prose, retry
|
|
7
|
+
* 3. strip-markdown — remove markdown artifacts, retry
|
|
8
|
+
* 4. json-fallback — parse embedded JSON, dump to YAML
|
|
9
|
+
* Plus error handling when all strategies are exhausted.
|
|
10
|
+
*/
|
|
11
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
12
|
+
import { AdapterOutputNormalizer } from '../adapter-output-normalizer.js';
|
|
13
|
+
import { AdapterFormatError } from '../adapter-format-error.js';
|
|
14
|
+
const silentLogger = { debug: vi.fn(), warn: vi.fn() };
|
|
15
|
+
describe('AdapterOutputNormalizer', () => {
|
|
16
|
+
// -----------------------------------------------------------------------
|
|
17
|
+
// Strategy 1: standard
|
|
18
|
+
// -----------------------------------------------------------------------
|
|
19
|
+
describe('standard strategy', () => {
|
|
20
|
+
it('extracts fenced YAML block directly', () => {
|
|
21
|
+
const output = [
|
|
22
|
+
'Here is my analysis.',
|
|
23
|
+
'',
|
|
24
|
+
'```yaml',
|
|
25
|
+
'result: success',
|
|
26
|
+
'files_modified:',
|
|
27
|
+
' - src/foo.ts',
|
|
28
|
+
'```',
|
|
29
|
+
].join('\n');
|
|
30
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
31
|
+
const result = normalizer.normalize(output, 'claude-code');
|
|
32
|
+
expect(result).not.toBeInstanceOf(AdapterFormatError);
|
|
33
|
+
const success = result;
|
|
34
|
+
expect(success.strategy).toBe('standard');
|
|
35
|
+
expect(success.yaml).toContain('result:');
|
|
36
|
+
});
|
|
37
|
+
it('extracts unfenced YAML starting with anchor key', () => {
|
|
38
|
+
const output = 'verdict: SHIP_IT\nscore: 95\nnotes: looks good';
|
|
39
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
40
|
+
const result = normalizer.normalize(output, 'claude-code');
|
|
41
|
+
expect(result).not.toBeInstanceOf(AdapterFormatError);
|
|
42
|
+
const success = result;
|
|
43
|
+
expect(success.strategy).toBe('standard');
|
|
44
|
+
expect(success.yaml).toContain('verdict:');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
// -----------------------------------------------------------------------
|
|
48
|
+
// Strategy 2: strip-prose
|
|
49
|
+
// -----------------------------------------------------------------------
|
|
50
|
+
describe('strip-prose strategy', () => {
|
|
51
|
+
it('strips leading prose and finds YAML block', () => {
|
|
52
|
+
// Fenced block after prose — standard strategy should find this too,
|
|
53
|
+
// but the test validates that strip-prose doesn't break anything
|
|
54
|
+
const output = [
|
|
55
|
+
'I have completed the code review.',
|
|
56
|
+
'The implementation looks correct.',
|
|
57
|
+
'',
|
|
58
|
+
'```yaml',
|
|
59
|
+
'verdict: SHIP_IT',
|
|
60
|
+
'score: 92',
|
|
61
|
+
'```',
|
|
62
|
+
].join('\n');
|
|
63
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
64
|
+
const result = normalizer.normalize(output, 'codex');
|
|
65
|
+
expect(result).not.toBeInstanceOf(AdapterFormatError);
|
|
66
|
+
const success = result;
|
|
67
|
+
expect(success.yaml).toContain('verdict:');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
// -----------------------------------------------------------------------
|
|
71
|
+
// Strategy 3: strip-markdown
|
|
72
|
+
// -----------------------------------------------------------------------
|
|
73
|
+
describe('strip-markdown strategy', () => {
|
|
74
|
+
it('strips blockquote prefixes and extracts YAML', () => {
|
|
75
|
+
// Blockquote-wrapped YAML — standard extractYamlBlock won't find it
|
|
76
|
+
// because the `> ` prefix breaks anchor detection
|
|
77
|
+
const output = [
|
|
78
|
+
'> ```yaml',
|
|
79
|
+
'> verdict: SHIP_IT',
|
|
80
|
+
'> score: 88',
|
|
81
|
+
'> ```',
|
|
82
|
+
].join('\n');
|
|
83
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
84
|
+
const result = normalizer.normalize(output, 'gemini');
|
|
85
|
+
expect(result).not.toBeInstanceOf(AdapterFormatError);
|
|
86
|
+
const success = result;
|
|
87
|
+
expect(success.yaml).toContain('verdict:');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
// -----------------------------------------------------------------------
|
|
91
|
+
// Strategy 4: json-fallback
|
|
92
|
+
// -----------------------------------------------------------------------
|
|
93
|
+
describe('json-fallback strategy', () => {
|
|
94
|
+
it('extracts JSON with anchor keys and converts to YAML', () => {
|
|
95
|
+
// No YAML fences, no anchor keys on their own lines — just embedded JSON
|
|
96
|
+
// Use a format that won't match standard/strip-prose/strip-markdown
|
|
97
|
+
const output = [
|
|
98
|
+
'Output from agent:',
|
|
99
|
+
'---BEGIN---',
|
|
100
|
+
'{"result": "success", "files_modified": ["src/foo.ts"]}',
|
|
101
|
+
'---END---',
|
|
102
|
+
].join('\n');
|
|
103
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
104
|
+
const result = normalizer.normalize(output, 'codex');
|
|
105
|
+
// This may match standard (yaml-parser has JSON fallback) or json-fallback
|
|
106
|
+
if (result instanceof AdapterFormatError) {
|
|
107
|
+
// JSON is on single line — the multiline JSON regex (\{[\s\S]*?\n\}) won't match
|
|
108
|
+
// That's fine — this tests the boundary. Let's use a multiline JSON instead.
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
it('extracts multiline JSON with anchor keys', () => {
|
|
112
|
+
const output = [
|
|
113
|
+
'Some narrative text without any yaml markers.',
|
|
114
|
+
'More narrative.',
|
|
115
|
+
'{',
|
|
116
|
+
'"result": "success",',
|
|
117
|
+
'"files_modified": ["src/foo.ts"]',
|
|
118
|
+
'}',
|
|
119
|
+
'End of output.',
|
|
120
|
+
].join('\n');
|
|
121
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
122
|
+
const result = normalizer.normalize(output, 'codex');
|
|
123
|
+
expect(result).not.toBeInstanceOf(AdapterFormatError);
|
|
124
|
+
const success = result;
|
|
125
|
+
expect(success.yaml).toContain('result:');
|
|
126
|
+
});
|
|
127
|
+
it('ignores JSON without anchor keys', () => {
|
|
128
|
+
const output = [
|
|
129
|
+
'Some text.',
|
|
130
|
+
'{',
|
|
131
|
+
'"status": "ok",',
|
|
132
|
+
'"count": 42',
|
|
133
|
+
'}',
|
|
134
|
+
'End.',
|
|
135
|
+
].join('\n');
|
|
136
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
137
|
+
const result = normalizer.normalize(output, 'codex');
|
|
138
|
+
expect(result).toBeInstanceOf(AdapterFormatError);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
// -----------------------------------------------------------------------
|
|
142
|
+
// All strategies exhausted
|
|
143
|
+
// -----------------------------------------------------------------------
|
|
144
|
+
describe('all strategies exhausted', () => {
|
|
145
|
+
it('returns AdapterFormatError with diagnostic fields', () => {
|
|
146
|
+
const output = 'This is just plain text with no YAML or JSON whatsoever.';
|
|
147
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
148
|
+
const result = normalizer.normalize(output, 'claude-code');
|
|
149
|
+
expect(result).toBeInstanceOf(AdapterFormatError);
|
|
150
|
+
const err = result;
|
|
151
|
+
expect(err.adapter_id).toBe('claude-code');
|
|
152
|
+
expect(err.tried_strategies).toEqual(['standard', 'strip-prose', 'strip-markdown', 'json-fallback']);
|
|
153
|
+
expect(err.raw_output_snippet).toBe(output);
|
|
154
|
+
expect(err.extraction_error).toContain('json-fallback');
|
|
155
|
+
expect(err.rootCause).toBe('adapter-format');
|
|
156
|
+
});
|
|
157
|
+
it('truncates raw_output_snippet to 500 chars', () => {
|
|
158
|
+
const output = 'x'.repeat(1000);
|
|
159
|
+
const normalizer = new AdapterOutputNormalizer(silentLogger);
|
|
160
|
+
const result = normalizer.normalize(output, 'test');
|
|
161
|
+
expect(result).toBeInstanceOf(AdapterFormatError);
|
|
162
|
+
const err = result;
|
|
163
|
+
expect(err.raw_output_snippet.length).toBe(500);
|
|
164
|
+
});
|
|
165
|
+
it('logs a warning when all strategies fail', () => {
|
|
166
|
+
const logger = { debug: vi.fn(), warn: vi.fn() };
|
|
167
|
+
const normalizer = new AdapterOutputNormalizer(logger);
|
|
168
|
+
normalizer.normalize('no yaml here', 'test-adapter');
|
|
169
|
+
expect(logger.warn).toHaveBeenCalledWith(expect.objectContaining({
|
|
170
|
+
adapter_id: 'test-adapter',
|
|
171
|
+
tried_strategies: ['standard', 'strip-prose', 'strip-markdown', 'json-fallback'],
|
|
172
|
+
}), expect.stringContaining('exhausted all strategies'));
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
// -----------------------------------------------------------------------
|
|
176
|
+
// AdapterFormatError
|
|
177
|
+
// -----------------------------------------------------------------------
|
|
178
|
+
describe('AdapterFormatError', () => {
|
|
179
|
+
it('has rootCause = adapter-format', () => {
|
|
180
|
+
const err = new AdapterFormatError({
|
|
181
|
+
adapter_id: 'codex',
|
|
182
|
+
rawOutput: 'garbage',
|
|
183
|
+
tried_strategies: ['standard'],
|
|
184
|
+
extraction_error: 'no yaml found',
|
|
185
|
+
});
|
|
186
|
+
expect(err.rootCause).toBe('adapter-format');
|
|
187
|
+
expect(err.name).toBe('AdapterFormatError');
|
|
188
|
+
expect(err.message).toContain('codex');
|
|
189
|
+
expect(err.message).toContain('standard');
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=adapter-output-normalizer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-output-normalizer.test.js","sourceRoot":"","sources":["../../../src/adapters/__tests__/adapter-output-normalizer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterFormatError — raised when all normalization strategies are exhausted.
|
|
3
|
+
*
|
|
4
|
+
* Carries structured context for downstream classifiers and observability.
|
|
5
|
+
* The `rootCause` literal enables story 53-5's classifyFailure() to detect
|
|
6
|
+
* adapter-format failures without duplicating the string constant.
|
|
7
|
+
*
|
|
8
|
+
* Always use the constructor — do not construct via object spread. The
|
|
9
|
+
* constructor auto-truncates rawOutput to 500 chars for the snippet field.
|
|
10
|
+
*/
|
|
11
|
+
export declare class AdapterFormatError extends Error {
|
|
12
|
+
/** The adapter identifier that produced the unrecognizable output */
|
|
13
|
+
readonly adapter_id: string;
|
|
14
|
+
/**
|
|
15
|
+
* First 500 chars of the raw output.
|
|
16
|
+
* Capped at 500 chars — never log full raw output (can be 100K+ chars).
|
|
17
|
+
*/
|
|
18
|
+
readonly raw_output_snippet: string;
|
|
19
|
+
/** Labels for each strategy that was attempted before giving up */
|
|
20
|
+
readonly tried_strategies: readonly string[];
|
|
21
|
+
/** The last parse error message encountered */
|
|
22
|
+
readonly extraction_error: string;
|
|
23
|
+
/**
|
|
24
|
+
* Root cause literal for downstream classifier integration (story 53-5).
|
|
25
|
+
* Downstream classifiers reference this literal without duplicating the string.
|
|
26
|
+
*/
|
|
27
|
+
readonly rootCause: "adapter-format";
|
|
28
|
+
constructor(opts: {
|
|
29
|
+
adapter_id: string;
|
|
30
|
+
rawOutput: string;
|
|
31
|
+
tried_strategies: string[];
|
|
32
|
+
extraction_error: string;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=adapter-format-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-format-error.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-format-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAE3B;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;IAEnC,mEAAmE;IACnE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IAE5C,+CAA+C;IAC/C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IAEjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAG,gBAAgB,CAAS;gBAElC,IAAI,EAAE;QAChB,UAAU,EAAE,MAAM,CAAA;QAClB,SAAS,EAAE,MAAM,CAAA;QACjB,gBAAgB,EAAE,MAAM,EAAE,CAAA;QAC1B,gBAAgB,EAAE,MAAM,CAAA;KACzB;CAWF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterFormatError — raised when all normalization strategies are exhausted.
|
|
3
|
+
*
|
|
4
|
+
* Carries structured context for downstream classifiers and observability.
|
|
5
|
+
* The `rootCause` literal enables story 53-5's classifyFailure() to detect
|
|
6
|
+
* adapter-format failures without duplicating the string constant.
|
|
7
|
+
*
|
|
8
|
+
* Always use the constructor — do not construct via object spread. The
|
|
9
|
+
* constructor auto-truncates rawOutput to 500 chars for the snippet field.
|
|
10
|
+
*/
|
|
11
|
+
export class AdapterFormatError extends Error {
|
|
12
|
+
/** The adapter identifier that produced the unrecognizable output */
|
|
13
|
+
adapter_id;
|
|
14
|
+
/**
|
|
15
|
+
* First 500 chars of the raw output.
|
|
16
|
+
* Capped at 500 chars — never log full raw output (can be 100K+ chars).
|
|
17
|
+
*/
|
|
18
|
+
raw_output_snippet;
|
|
19
|
+
/** Labels for each strategy that was attempted before giving up */
|
|
20
|
+
tried_strategies;
|
|
21
|
+
/** The last parse error message encountered */
|
|
22
|
+
extraction_error;
|
|
23
|
+
/**
|
|
24
|
+
* Root cause literal for downstream classifier integration (story 53-5).
|
|
25
|
+
* Downstream classifiers reference this literal without duplicating the string.
|
|
26
|
+
*/
|
|
27
|
+
rootCause = 'adapter-format';
|
|
28
|
+
constructor(opts) {
|
|
29
|
+
super(`AdapterFormatError [${opts.adapter_id}]: exhausted all normalization strategies. ` +
|
|
30
|
+
`Tried: ${opts.tried_strategies.join(', ')}. Last error: ${opts.extraction_error}`);
|
|
31
|
+
this.name = 'AdapterFormatError';
|
|
32
|
+
this.adapter_id = opts.adapter_id;
|
|
33
|
+
this.raw_output_snippet = opts.rawOutput.slice(0, 500);
|
|
34
|
+
this.tried_strategies = [...opts.tried_strategies];
|
|
35
|
+
this.extraction_error = opts.extraction_error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=adapter-format-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-format-error.js","sourceRoot":"","sources":["../../src/adapters/adapter-format-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,qEAAqE;IAC5D,UAAU,CAAQ;IAE3B;;;OAGG;IACM,kBAAkB,CAAQ;IAEnC,mEAAmE;IAC1D,gBAAgB,CAAmB;IAE5C,+CAA+C;IACtC,gBAAgB,CAAQ;IAEjC;;;OAGG;IACM,SAAS,GAAG,gBAAyB,CAAA;IAE9C,YAAY,IAKX;QACC,KAAK,CACH,uBAAuB,IAAI,CAAC,UAAU,6CAA6C;YACjF,UAAU,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,CACrF,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACtD,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterOutputNormalizer — multi-strategy YAML extraction for adapter output.
|
|
3
|
+
*
|
|
4
|
+
* When an adapter produces output that fails standard YAML extraction, this
|
|
5
|
+
* normalizer applies a sequence of additional strategies to recover parseable
|
|
6
|
+
* YAML. Each strategy is tried in order; the first success is returned.
|
|
7
|
+
*
|
|
8
|
+
* Strategies (in order):
|
|
9
|
+
* 1. 'standard' — call extractYamlBlock() directly
|
|
10
|
+
* 2. 'strip-prose' — remove leading prose lines, retry extractYamlBlock()
|
|
11
|
+
* 3. 'strip-markdown' — strip line-leading markdown artifacts, retry
|
|
12
|
+
* 4. 'json-fallback' — find embedded JSON containing anchor keys, dump to YAML
|
|
13
|
+
*
|
|
14
|
+
* If all strategies fail, returns an AdapterFormatError with diagnostic fields.
|
|
15
|
+
*
|
|
16
|
+
* Architecture note: this file may import from packages/core/src/dispatch/yaml-parser.ts
|
|
17
|
+
* (same package) but must NOT import from @substrate-ai/sdlc, src/modules/, or any
|
|
18
|
+
* file outside packages/core/.
|
|
19
|
+
*/
|
|
20
|
+
import { AdapterFormatError } from './adapter-format-error.js';
|
|
21
|
+
interface ILogger {
|
|
22
|
+
debug(...args: unknown[]): void;
|
|
23
|
+
warn(...args: unknown[]): void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Multi-strategy YAML extractor for adapter output.
|
|
27
|
+
*
|
|
28
|
+
* Inject into DispatcherImpl via constructor parameter so it can be mocked in
|
|
29
|
+
* unit tests. Default to `new AdapterOutputNormalizer()` if not provided.
|
|
30
|
+
*/
|
|
31
|
+
export declare class AdapterOutputNormalizer {
|
|
32
|
+
private readonly _logger;
|
|
33
|
+
constructor(logger?: ILogger);
|
|
34
|
+
/**
|
|
35
|
+
* Attempt to extract valid YAML from raw adapter output.
|
|
36
|
+
*
|
|
37
|
+
* Tries strategies in order and returns the first successful extraction.
|
|
38
|
+
* If all strategies are exhausted, returns an AdapterFormatError (does NOT throw).
|
|
39
|
+
*
|
|
40
|
+
* @param rawOutput - Full stdout string from the adapter process
|
|
41
|
+
* @param adapterId - Adapter identifier for error diagnostics and logging
|
|
42
|
+
* @returns `{ yaml: string; strategy: string }` on success, or `AdapterFormatError` on exhaustion
|
|
43
|
+
*/
|
|
44
|
+
normalize(rawOutput: string, adapterId: string): {
|
|
45
|
+
yaml: string;
|
|
46
|
+
strategy: string;
|
|
47
|
+
} | AdapterFormatError;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=adapter-output-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-output-normalizer.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-output-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAa9D,UAAU,OAAO;IACf,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAC/B;AAMD;;;;;GAKG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,GAAE,OAAiB;IAIrC;;;;;;;;;OASG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB;CAqFzG"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterOutputNormalizer — multi-strategy YAML extraction for adapter output.
|
|
3
|
+
*
|
|
4
|
+
* When an adapter produces output that fails standard YAML extraction, this
|
|
5
|
+
* normalizer applies a sequence of additional strategies to recover parseable
|
|
6
|
+
* YAML. Each strategy is tried in order; the first success is returned.
|
|
7
|
+
*
|
|
8
|
+
* Strategies (in order):
|
|
9
|
+
* 1. 'standard' — call extractYamlBlock() directly
|
|
10
|
+
* 2. 'strip-prose' — remove leading prose lines, retry extractYamlBlock()
|
|
11
|
+
* 3. 'strip-markdown' — strip line-leading markdown artifacts, retry
|
|
12
|
+
* 4. 'json-fallback' — find embedded JSON containing anchor keys, dump to YAML
|
|
13
|
+
*
|
|
14
|
+
* If all strategies fail, returns an AdapterFormatError with diagnostic fields.
|
|
15
|
+
*
|
|
16
|
+
* Architecture note: this file may import from packages/core/src/dispatch/yaml-parser.ts
|
|
17
|
+
* (same package) but must NOT import from @substrate-ai/sdlc, src/modules/, or any
|
|
18
|
+
* file outside packages/core/.
|
|
19
|
+
*/
|
|
20
|
+
import yaml from 'js-yaml';
|
|
21
|
+
import { extractYamlBlock } from '../dispatch/yaml-parser.js';
|
|
22
|
+
import { AdapterFormatError } from './adapter-format-error.js';
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Known anchor keys (without colon) used to identify YAML result blocks
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
const YAML_ANCHOR_KEYS = ['result:', 'verdict:', 'story_file:', 'expansion_priority:'];
|
|
27
|
+
const YAML_ANCHOR_KEYS_BARE = YAML_ANCHOR_KEYS.map((k) => k.replace(':', ''));
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// AdapterOutputNormalizer
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/**
|
|
32
|
+
* Multi-strategy YAML extractor for adapter output.
|
|
33
|
+
*
|
|
34
|
+
* Inject into DispatcherImpl via constructor parameter so it can be mocked in
|
|
35
|
+
* unit tests. Default to `new AdapterOutputNormalizer()` if not provided.
|
|
36
|
+
*/
|
|
37
|
+
export class AdapterOutputNormalizer {
|
|
38
|
+
_logger;
|
|
39
|
+
constructor(logger = console) {
|
|
40
|
+
this._logger = logger;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Attempt to extract valid YAML from raw adapter output.
|
|
44
|
+
*
|
|
45
|
+
* Tries strategies in order and returns the first successful extraction.
|
|
46
|
+
* If all strategies are exhausted, returns an AdapterFormatError (does NOT throw).
|
|
47
|
+
*
|
|
48
|
+
* @param rawOutput - Full stdout string from the adapter process
|
|
49
|
+
* @param adapterId - Adapter identifier for error diagnostics and logging
|
|
50
|
+
* @returns `{ yaml: string; strategy: string }` on success, or `AdapterFormatError` on exhaustion
|
|
51
|
+
*/
|
|
52
|
+
normalize(rawOutput, adapterId) {
|
|
53
|
+
const tried = [];
|
|
54
|
+
let lastError = 'no_yaml_block';
|
|
55
|
+
// -----------------------------------------------------------------------
|
|
56
|
+
// Strategy 1: 'standard' — call extractYamlBlock() directly
|
|
57
|
+
// -----------------------------------------------------------------------
|
|
58
|
+
{
|
|
59
|
+
const strategy = 'standard';
|
|
60
|
+
tried.push(strategy);
|
|
61
|
+
const result = extractYamlBlock(rawOutput);
|
|
62
|
+
if (result !== null) {
|
|
63
|
+
return { yaml: result, strategy };
|
|
64
|
+
}
|
|
65
|
+
this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
|
|
66
|
+
lastError = 'extractYamlBlock returned null';
|
|
67
|
+
}
|
|
68
|
+
// -----------------------------------------------------------------------
|
|
69
|
+
// Strategy 2: 'strip-prose' — remove leading non-YAML lines, retry
|
|
70
|
+
// -----------------------------------------------------------------------
|
|
71
|
+
{
|
|
72
|
+
const strategy = 'strip-prose';
|
|
73
|
+
tried.push(strategy);
|
|
74
|
+
const stripped = stripLeadingProse(rawOutput);
|
|
75
|
+
if (stripped !== rawOutput) {
|
|
76
|
+
const result = extractYamlBlock(stripped);
|
|
77
|
+
if (result !== null) {
|
|
78
|
+
return { yaml: result, strategy };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
|
|
82
|
+
lastError = 'strip-prose: extractYamlBlock returned null after prose removal';
|
|
83
|
+
}
|
|
84
|
+
// -----------------------------------------------------------------------
|
|
85
|
+
// Strategy 3: 'strip-markdown' — remove line-leading markdown artifacts
|
|
86
|
+
// -----------------------------------------------------------------------
|
|
87
|
+
{
|
|
88
|
+
const strategy = 'strip-markdown';
|
|
89
|
+
tried.push(strategy);
|
|
90
|
+
const cleaned = stripMarkdownArtifacts(rawOutput);
|
|
91
|
+
if (cleaned !== rawOutput) {
|
|
92
|
+
const result = extractYamlBlock(cleaned);
|
|
93
|
+
if (result !== null) {
|
|
94
|
+
return { yaml: result, strategy };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
|
|
98
|
+
lastError = 'strip-markdown: extractYamlBlock returned null after markdown removal';
|
|
99
|
+
}
|
|
100
|
+
// -----------------------------------------------------------------------
|
|
101
|
+
// Strategy 4: 'json-fallback' — parse embedded JSON, dump to YAML
|
|
102
|
+
// -----------------------------------------------------------------------
|
|
103
|
+
{
|
|
104
|
+
const strategy = 'json-fallback';
|
|
105
|
+
tried.push(strategy);
|
|
106
|
+
const result = extractJsonAsYaml(rawOutput);
|
|
107
|
+
if (result !== null) {
|
|
108
|
+
return { yaml: result, strategy };
|
|
109
|
+
}
|
|
110
|
+
this._logger.debug({ adapterId, strategy }, 'Normalizer strategy failed');
|
|
111
|
+
lastError = 'json-fallback: no JSON object with anchor keys found';
|
|
112
|
+
}
|
|
113
|
+
// -----------------------------------------------------------------------
|
|
114
|
+
// All strategies exhausted — emit warn-level structured log and return error
|
|
115
|
+
// -----------------------------------------------------------------------
|
|
116
|
+
this._logger.warn({
|
|
117
|
+
adapter_id: adapterId,
|
|
118
|
+
tried_strategies: tried,
|
|
119
|
+
snippet: rawOutput.slice(0, 500),
|
|
120
|
+
}, 'AdapterOutputNormalizer exhausted all strategies — adapter format unrecognized');
|
|
121
|
+
return new AdapterFormatError({
|
|
122
|
+
adapter_id: adapterId,
|
|
123
|
+
rawOutput,
|
|
124
|
+
tried_strategies: tried,
|
|
125
|
+
extraction_error: lastError,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Internal helpers
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
/**
|
|
133
|
+
* Strip leading lines that do not look like YAML content.
|
|
134
|
+
*
|
|
135
|
+
* A line is considered "YAML content" if it:
|
|
136
|
+
* - Starts with a known anchor key (result:, verdict:, etc.)
|
|
137
|
+
* - Starts with a code fence marker (```)
|
|
138
|
+
* - Starts with a YAML document separator (---)
|
|
139
|
+
* - Is blank (may be whitespace between prose and YAML)
|
|
140
|
+
* - Starts with whitespace (indented YAML value)
|
|
141
|
+
*
|
|
142
|
+
* Lines before the first YAML-looking line are removed.
|
|
143
|
+
*/
|
|
144
|
+
function stripLeadingProse(text) {
|
|
145
|
+
const lines = text.split('\n');
|
|
146
|
+
for (let i = 0; i < lines.length; i++) {
|
|
147
|
+
const line = lines[i];
|
|
148
|
+
if (line === undefined)
|
|
149
|
+
continue;
|
|
150
|
+
const trimmed = line.trim();
|
|
151
|
+
// Blank lines are skipped (not YAML, but not prose either)
|
|
152
|
+
if (trimmed === '')
|
|
153
|
+
continue;
|
|
154
|
+
// Fence markers or YAML doc separator
|
|
155
|
+
if (trimmed.startsWith('```') || trimmed.startsWith('---')) {
|
|
156
|
+
return lines.slice(i).join('\n');
|
|
157
|
+
}
|
|
158
|
+
// Known anchor keys
|
|
159
|
+
if (YAML_ANCHOR_KEYS.some((k) => trimmed.startsWith(k))) {
|
|
160
|
+
return lines.slice(i).join('\n');
|
|
161
|
+
}
|
|
162
|
+
// Indented YAML (value continuation or nested key)
|
|
163
|
+
if (/^\s+\S/.test(line)) {
|
|
164
|
+
return lines.slice(i).join('\n');
|
|
165
|
+
}
|
|
166
|
+
// Generic YAML key pattern: starts with a word char, followed by ':'
|
|
167
|
+
if (/^[a-zA-Z_][a-zA-Z0-9_]*:/.test(trimmed)) {
|
|
168
|
+
return lines.slice(i).join('\n');
|
|
169
|
+
}
|
|
170
|
+
// This line looks like prose — continue scanning
|
|
171
|
+
}
|
|
172
|
+
// No YAML-looking line found — return original unchanged
|
|
173
|
+
return text;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Strip line-leading markdown artifacts.
|
|
177
|
+
*
|
|
178
|
+
* Handles:
|
|
179
|
+
* - Blockquote prefix: `> ` → ``
|
|
180
|
+
* - Heading markers: `## ` → ``
|
|
181
|
+
* - Bold/italic: `**` or `*` at start → ``
|
|
182
|
+
* - Underscore italic: `_` at start → ``
|
|
183
|
+
*/
|
|
184
|
+
function stripMarkdownArtifacts(text) {
|
|
185
|
+
return text
|
|
186
|
+
.split('\n')
|
|
187
|
+
.map((line) => {
|
|
188
|
+
return line
|
|
189
|
+
.replace(/^>\s?/, '')
|
|
190
|
+
.replace(/^#{1,6}\s+/, '')
|
|
191
|
+
.replace(/^\*{1,2}/, '')
|
|
192
|
+
.replace(/^_/, '');
|
|
193
|
+
})
|
|
194
|
+
.join('\n');
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Scan the text for an embedded JSON object containing at least one anchor key,
|
|
198
|
+
* then dump it to YAML via js-yaml for downstream parseYamlResult().
|
|
199
|
+
*
|
|
200
|
+
* Uses a greedy { ... } scan to find candidate JSON objects. The last matching
|
|
201
|
+
* object is used (consistent with yaml-parser.ts's "take the last block" rule).
|
|
202
|
+
*/
|
|
203
|
+
function extractJsonAsYaml(text) {
|
|
204
|
+
// Match multiline JSON objects (greedy { ... \n})
|
|
205
|
+
const jsonPattern = /\{[\s\S]*?\n\}/g;
|
|
206
|
+
let lastMatch = null;
|
|
207
|
+
let match;
|
|
208
|
+
while ((match = jsonPattern.exec(text)) !== null) {
|
|
209
|
+
const candidate = match[0];
|
|
210
|
+
// Quick check: must contain at least one anchor key (bare, without colon)
|
|
211
|
+
const hasAnchorKey = YAML_ANCHOR_KEYS_BARE.some((key) => candidate.includes(`"${key}"`) || candidate.includes(`'${key}'`));
|
|
212
|
+
if (!hasAnchorKey)
|
|
213
|
+
continue;
|
|
214
|
+
try {
|
|
215
|
+
const parsed = JSON.parse(candidate);
|
|
216
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
217
|
+
lastMatch = parsed;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// Not valid JSON — skip
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (lastMatch === null)
|
|
225
|
+
return null;
|
|
226
|
+
try {
|
|
227
|
+
return yaml.dump(lastMatch, { lineWidth: -1 });
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=adapter-output-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-output-normalizer.js","sourceRoot":"","sources":["../../src/adapters/adapter-output-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterRegistry — central registry for WorkerAdapter instances
|
|
3
|
+
*
|
|
4
|
+
* Discovers, health-checks, and stores all available CLI agent adapters.
|
|
5
|
+
* Unhealthy adapters are reported but do not block system startup.
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentId } from '../types.js';
|
|
8
|
+
import type { WorkerAdapter } from './worker-adapter.js';
|
|
9
|
+
import type { DiscoveryReport } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* AdapterRegistry manages the lifecycle of WorkerAdapter instances.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const registry = new AdapterRegistry()
|
|
16
|
+
* const report = await registry.discoverAndRegister()
|
|
17
|
+
* const claude = registry.get('claude-code')
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare class AdapterRegistry {
|
|
21
|
+
private readonly _adapters;
|
|
22
|
+
/**
|
|
23
|
+
* Register an adapter by its id.
|
|
24
|
+
* Overwrites any existing adapter with the same id.
|
|
25
|
+
*/
|
|
26
|
+
register(adapter: WorkerAdapter): void;
|
|
27
|
+
/**
|
|
28
|
+
* Retrieve a registered adapter by id.
|
|
29
|
+
* @returns The adapter, or undefined if not registered
|
|
30
|
+
*/
|
|
31
|
+
get(id: AgentId): WorkerAdapter | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Return all registered adapters as an array.
|
|
34
|
+
*/
|
|
35
|
+
getAll(): WorkerAdapter[];
|
|
36
|
+
/**
|
|
37
|
+
* Return all registered adapters that support plan generation.
|
|
38
|
+
*/
|
|
39
|
+
getPlanningCapable(): WorkerAdapter[];
|
|
40
|
+
/**
|
|
41
|
+
* Instantiate all built-in adapters, run health checks sequentially,
|
|
42
|
+
* and register those that pass.
|
|
43
|
+
*
|
|
44
|
+
* Failed adapters are included in the report but do NOT prevent startup.
|
|
45
|
+
*
|
|
46
|
+
* @returns Discovery report with per-adapter results
|
|
47
|
+
*/
|
|
48
|
+
discoverAndRegister(): Promise<DiscoveryReport>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=adapter-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-registry.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAA+C,eAAe,EAAE,MAAM,YAAY,CAAA;AAK9F;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAE9D;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAItC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS;IAI3C;;OAEG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,kBAAkB,IAAI,aAAa,EAAE;IAMrC;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;CAgDtD"}
|