substrate-ai 0.20.95 → 0.20.97

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.
@@ -0,0 +1,4 @@
1
+ import { AdapterRegistry } from "./dist-DnVfCiro.js";
2
+ import "./adapter-registry-DIcrxjH8.js";
3
+
4
+ export { AdapterRegistry };
package/dist/cli/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import { FileStateStore, SUBSTRATE_OWNED_SETTINGS_KEYS, VALID_PHASES, buildPipelineStatusOutput, createDatabaseAdapter, createDoltOperatorReader, createStateStore, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, inspectProcessTree, parseDbTimestampAsUtc, registerHealthCommand, resolveBmadMethodSrcPath, resolveBmadMethodVersion } from "../health-CzZ2Ki-b.js";
2
+ import { FileStateStore, SUBSTRATE_OWNED_SETTINGS_KEYS, VALID_PHASES, buildPipelineStatusOutput, createDatabaseAdapter, createDoltOperatorReader, createStateStore, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, inspectProcessTree, parseDbTimestampAsUtc, registerHealthCommand, resolveBmadMethodSrcPath, resolveBmadMethodVersion } from "../health-DmvwKjP5.js";
3
3
  import { createLogger } from "../logger-KeHncl-f.js";
4
4
  import { createEventBus } from "../helpers-CElYrONe.js";
5
- import { AdapterRegistry, BudgetConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, ConfigError, CostTrackerConfigSchema, DEFAULT_CONFIG, DoltClient, DoltNotInstalled, GlobalSettingsSchema, InMemoryDatabaseAdapter, IngestionServer, MonitorDatabaseImpl, OPERATIONAL_FINDING, PartialGlobalSettingsSchema, PartialProviderConfigSchema, ProvidersSchema, RoutingRecommender, STORY_METRICS, TelemetryConfigSchema, addTokenUsage, aggregateTokenUsageForRun, checkDoltInstalled, compareRunMetrics, createAmendmentRun, createConfigSystem, createDecision, createDoltClient, createPipelineRun, getActiveDecisions, getAllCostEntriesFiltered, getBaselineRunMetrics, getDecisionsByCategory, getDecisionsByPhaseForRun, getLatestCompletedRun, getLatestRun, getPipelineRunById, getPlanningCostTotal, getRetryableEscalations, getRunMetrics, getRunningPipelineRuns, getSessionCostSummary, getSessionCostSummaryFiltered, getStoryMetricsForRun, getTokenUsageSummary, incrementRunRestarts, initSchema, initializeDolt, listRunMetrics, loadParentRunDecisions, supersedeDecision, swallowDebug, tagRunAsBaseline, updatePipelineRun } from "../dist-C_NE40jY.js";
6
- import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GLOBSTAR, GitClient, GrammarLoader, Minimatch, Minipass, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createGitWorktreeManager, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, escape, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runProbeAuthor, runSolutioningPhase, unescape, validateStopAfterFromConflict } from "../run-COnbF6By.js";
5
+ import { AdapterRegistry, BudgetConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, ConfigError, CostTrackerConfigSchema, DEFAULT_CONFIG, DoltClient, DoltNotInstalled, GlobalSettingsSchema, InMemoryDatabaseAdapter, IngestionServer, MonitorDatabaseImpl, OPERATIONAL_FINDING, PartialGlobalSettingsSchema, PartialProviderConfigSchema, ProvidersSchema, RoutingRecommender, STORY_METRICS, TelemetryConfigSchema, addTokenUsage, aggregateTokenUsageForRun, checkDoltInstalled, compareRunMetrics, createAmendmentRun, createConfigSystem, createDecision, createDoltClient, createPipelineRun, getActiveDecisions, getAllCostEntriesFiltered, getBaselineRunMetrics, getDecisionsByCategory, getDecisionsByPhaseForRun, getLatestCompletedRun, getLatestRun, getPipelineRunById, getPlanningCostTotal, getRetryableEscalations, getRunMetrics, getRunningPipelineRuns, getSessionCostSummary, getSessionCostSummaryFiltered, getStoryMetricsForRun, getTokenUsageSummary, incrementRunRestarts, initSchema, initializeDolt, listRunMetrics, loadParentRunDecisions, supersedeDecision, swallowDebug, tagRunAsBaseline, updatePipelineRun } from "../dist-DnVfCiro.js";
6
+ import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GLOBSTAR, GitClient, GrammarLoader, Minimatch, Minipass, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createGitWorktreeManager, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, escape, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runProbeAuthor, runSolutioningPhase, unescape, validateStopAfterFromConflict } from "../run-BONrtCkE.js";
7
7
  import "../adapter-registry-DIcrxjH8.js";
8
- import { RunManifest, SupervisorLock, ZERO_FINDINGS_BY_AUTHOR, ZERO_FINDING_COUNTS, ZERO_PROBE_AUTHOR_METRICS, aggregateProbeAuthorMetrics, parseRuntimeProbes, readCurrentRunId, resolveMainRepoRoot, resolveRunManifest, rollupFindingCounts, rollupFindingsByAuthor, rollupProbeAuthorByClass, rollupProbeAuthorMetrics, runAcTraceabilityCheck } from "../manifest-read-BSsjVG96.js";
9
- import "../errors-D531Z8FW.js";
8
+ import { RunManifest, SupervisorLock, ZERO_FINDINGS_BY_AUTHOR, ZERO_FINDING_COUNTS, ZERO_PROBE_AUTHOR_METRICS, aggregateProbeAuthorMetrics, parseRuntimeProbes, readCurrentRunId, resolveMainRepoRoot, resolveRunManifest, rollupFindingCounts, rollupFindingsByAuthor, rollupProbeAuthorByClass, rollupProbeAuthorMetrics, runAcTraceabilityCheck } from "../manifest-read-96wMXd5A.js";
9
+ import "../errors-7UL0-Lga.js";
10
10
  import "../routing-DFxoKHDt.js";
11
11
  import { WorkGraphRepository } from "../work-graph-repository-DZyJv5pV.js";
12
12
  import "../decisions-CzSIEeGP.js";
13
13
  import "../decision-router-DblHY8se.js";
14
- import "../interactive-prompt-DF-PL5ia.js";
14
+ import "../interactive-prompt-El7WVSY2.js";
15
15
  import "../recovery-engine-BKGBeBnW.js";
16
16
  import "../version-manager-impl-qFBiO4Eh.js";
17
- import { registerUpgradeCommand } from "../upgrade-C1KzAZQE.js";
17
+ import { registerUpgradeCommand } from "../upgrade-DalCYA_U.js";
18
18
  import { Command } from "commander";
19
19
  import { fileURLToPath } from "url";
20
20
  import { dirname, join, resolve } from "path";
@@ -6887,7 +6887,7 @@ async function runStatusAction(options) {
6887
6887
  logger$15.debug({ err }, "Work graph query failed, continuing without work graph data");
6888
6888
  }
6889
6889
  if (run === void 0) {
6890
- const { inspectProcessTree: inspectProcessTree$1 } = await import("../health-C0bSSccV.js");
6890
+ const { inspectProcessTree: inspectProcessTree$1 } = await import("../health-CQuQJ7OQ.js");
6891
6891
  const substrateDirPath = join(projectRoot, ".substrate");
6892
6892
  const processInfo = inspectProcessTree$1({
6893
6893
  projectRoot,
@@ -7835,7 +7835,7 @@ function defaultSupervisorDeps() {
7835
7835
  if (cached === null) {
7836
7836
  const { AdapterRegistry: AR } = await import(
7837
7837
  /* @vite-ignore */
7838
- "../adapter-registry-Bvox1eRm.js"
7838
+ "../adapter-registry-elGgGcQB.js"
7839
7839
  );
7840
7840
  cached = new AR();
7841
7841
  await cached.discoverAndRegister();
@@ -8402,11 +8402,11 @@ async function runSupervisorAction(options, deps = {}) {
8402
8402
  try {
8403
8403
  const { createExperimenter } = await import(
8404
8404
  /* @vite-ignore */
8405
- "../experimenter-Cg2fBeVq.js"
8405
+ "../experimenter--Oe0guH8.js"
8406
8406
  );
8407
8407
  const { getLatestRun: getLatest } = await import(
8408
8408
  /* @vite-ignore */
8409
- "../decisions-CNe9RlcE.js"
8409
+ "../decisions-DsoOrBZE.js"
8410
8410
  );
8411
8411
  const expAdapter = createDatabaseAdapter({
8412
8412
  backend: "auto",
@@ -8416,7 +8416,7 @@ async function runSupervisorAction(options, deps = {}) {
8416
8416
  await initSchema(expAdapter);
8417
8417
  const { runRunAction: runPipeline } = await import(
8418
8418
  /* @vite-ignore */
8419
- "../run-Bmrjp1QI.js"
8419
+ "../run-DfBzTNKC.js"
8420
8420
  );
8421
8421
  const runStoryFn = async (opts) => {
8422
8422
  const exitCode = await runPipeline({
@@ -8944,7 +8944,7 @@ async function runMetricsAction(options) {
8944
8944
  const routingConfigPath = join(dbDir, "routing.yml");
8945
8945
  let routingConfig = null;
8946
8946
  if (existsSync$1(routingConfigPath)) try {
8947
- const { loadModelRoutingConfig } = await import("../routing-Cptl6Ali.js");
8947
+ const { loadModelRoutingConfig } = await import("../routing-jFYm30zp.js");
8948
8948
  routingConfig = loadModelRoutingConfig(routingConfigPath);
8949
8949
  } catch {}
8950
8950
  if (routingConfig === null) routingConfig = {
@@ -11959,10 +11959,18 @@ function registerRoutingCommand(program) {
11959
11959
  //#endregion
11960
11960
  //#region src/modules/work-graph/schema.ts
11961
11961
  /**
11962
- * Work-graph schema DDL constants.
11962
+ * Work-graph schema — legacy DDL constant exports.
11963
11963
  *
11964
- * Aligned with the authoritative schema in src/modules/state/schema.sql.
11965
- * Table names use `wg_stories` and `story_dependencies`.
11964
+ * The canonical DDL lives in packages/core/src/persistence/work-graph-schema.ts
11965
+ * as `initWorkGraphSchema(adapter)`. This file is preserved as a thin shim
11966
+ * so the existing callers in `ingest-epic.ts` and `epic-status.ts` keep
11967
+ * working — they `await adapter.exec(CREATE_STORIES_TABLE)` directly rather
11968
+ * than invoking the function form.
11969
+ *
11970
+ * Post-Ship-5 (2026-05): the legacy constants here MUST stay in sync with
11971
+ * the function form in @substrate-ai/core. Future ports should consider
11972
+ * migrating callers to `initWorkGraphSchema(adapter)` and deleting this file
11973
+ * entirely.
11966
11974
  */
11967
11975
  const CREATE_STORIES_TABLE = `
11968
11976
  CREATE TABLE IF NOT EXISTS wg_stories (
@@ -13318,8 +13326,8 @@ async function createProgram() {
13318
13326
  /** Fire-and-forget startup version check (story 8.3, AC3/AC5) */
13319
13327
  function checkForUpdatesInBackground(currentVersion) {
13320
13328
  if (process.env.SUBSTRATE_NO_UPDATE_CHECK === "1") return;
13321
- import("../upgrade--vRnNB3V.js").then(async () => {
13322
- const { createVersionManager } = await import("../version-manager-impl-9J_JCJPu.js");
13329
+ import("../upgrade-BAG_bSYf.js").then(async () => {
13330
+ const { createVersionManager } = await import("../version-manager-impl-bWaGssmZ.js");
13323
13331
  const vm = createVersionManager();
13324
13332
  const result = await vm.checkForUpdates();
13325
13333
  if (result.updateAvailable) {
@@ -1,4 +1,4 @@
1
- import { addTokenUsage, createDecision, createPipelineRun, createRequirement, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunningPipelineRuns, getTokenUsageSummary, listRequirements, registerArtifact, updateDecision, updatePipelineRun, updatePipelineRunConfig, upsertDecision } from "./dist-C_NE40jY.js";
1
+ import { addTokenUsage, createDecision, createPipelineRun, createRequirement, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunningPipelineRuns, getTokenUsageSummary, listRequirements, registerArtifact, updateDecision, updatePipelineRun, updatePipelineRunConfig, upsertDecision } from "./dist-DnVfCiro.js";
2
2
  import "./decisions-CzSIEeGP.js";
3
3
 
4
4
  export { getLatestRun };
@@ -2569,31 +2569,8 @@ function createDatabaseAdapter(config = { backend: "auto" }, doltClientFactory)
2569
2569
  }
2570
2570
 
2571
2571
  //#endregion
2572
- //#region packages/core/dist/persistence/schema.js
2573
- /**
2574
- * Consolidated schema DDL for all persistence tables.
2575
- *
2576
- * Replaces the 11 separate SQLite migration files with a single
2577
- * async function that creates all tables via DatabaseAdapter.
2578
- *
2579
- * All tables use CREATE TABLE IF NOT EXISTS for idempotency.
2580
- * Indexes and views use IF NOT EXISTS.
2581
- *
2582
- * Schema covers:
2583
- * - Core: sessions, tasks, task_dependencies, execution_log
2584
- * - Cost: cost_entries
2585
- * - Pipeline: pipeline_runs, decisions, requirements, constraints, artifacts, token_usage
2586
- * - Plans: plans, plan_versions
2587
- * - Signals: session_signals
2588
- * - Metrics: run_metrics, story_metrics
2589
- * - Monitor: task_metrics, performance_aggregates, routing_recommendations
2590
- * - Telemetry: turn_analysis, efficiency_scores, recommendations, category_stats, consumer_stats
2591
- */
2592
- /**
2593
- * Initialize all persistence tables on the given adapter.
2594
- * Idempotent — safe to call multiple times.
2595
- */
2596
- async function initSchema(adapter) {
2572
+ //#region packages/core/dist/persistence/core-schema.js
2573
+ async function initCoreSchema(adapter) {
2597
2574
  await adapter.exec(`
2598
2575
  CREATE TABLE IF NOT EXISTS sessions (
2599
2576
  id VARCHAR(255) PRIMARY KEY,
@@ -2743,6 +2720,56 @@ async function initSchema(adapter) {
2743
2720
  `);
2744
2721
  await adapter.exec("CREATE INDEX IF NOT EXISTS idx_plan_versions_plan_id ON plan_versions(plan_id)");
2745
2722
  await adapter.exec(`
2723
+ CREATE TABLE IF NOT EXISTS schema_migrations (
2724
+ version INTEGER PRIMARY KEY,
2725
+ name TEXT NOT NULL,
2726
+ applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
2727
+ )
2728
+ `);
2729
+ }
2730
+ /**
2731
+ * Initialize the views that depend on core tables (`tasks`, `task_dependencies`,
2732
+ * `sessions`). Must be called AFTER `initCoreSchema` (defines the tables).
2733
+ *
2734
+ * NOTE: Views use JOINs/aggregation. Dolt supports them; InMemoryDatabaseAdapter
2735
+ * silently no-ops `CREATE VIEW`, so the same DDL works on both backends without
2736
+ * a try/catch wrapper.
2737
+ */
2738
+ async function initCoreViews(adapter) {
2739
+ await adapter.exec(`
2740
+ CREATE VIEW IF NOT EXISTS ready_tasks AS
2741
+ SELECT t.* FROM tasks t
2742
+ WHERE t.status = 'pending'
2743
+ AND NOT EXISTS (
2744
+ SELECT 1 FROM task_dependencies td
2745
+ JOIN tasks dep ON dep.id = td.depends_on
2746
+ WHERE td.task_id = t.id
2747
+ AND dep.status NOT IN ('completed', 'cancelled')
2748
+ )
2749
+ `);
2750
+ await adapter.exec(`
2751
+ CREATE VIEW IF NOT EXISTS session_cost_summary AS
2752
+ SELECT
2753
+ s.id AS session_id,
2754
+ s.name AS session_name,
2755
+ COUNT(DISTINCT t.id) AS total_tasks,
2756
+ SUM(CASE WHEN t.status = 'completed' THEN 1 ELSE 0 END) AS completed_tasks,
2757
+ SUM(CASE WHEN t.status = 'failed' THEN 1 ELSE 0 END) AS failed_tasks,
2758
+ SUM(CASE WHEN t.status = 'running' THEN 1 ELSE 0 END) AS running_tasks,
2759
+ COALESCE(SUM(t.cost_usd), 0) AS total_cost_usd,
2760
+ SUM(CASE WHEN t.billing_mode = 'subscription' THEN t.cost_usd ELSE 0 END) AS subscription_cost_usd,
2761
+ SUM(CASE WHEN t.billing_mode = 'api' THEN t.cost_usd ELSE 0 END) AS api_cost_usd,
2762
+ s.planning_cost_usd
2763
+ FROM sessions s
2764
+ LEFT JOIN tasks t ON t.session_id = s.id
2765
+ GROUP BY s.id
2766
+ `);
2767
+ }
2768
+
2769
+ //#endregion
2770
+ //#region packages/core/dist/persistence/pipeline-schema.js
2771
+ async function initPipelineSchema(adapter) {
2772
+ await adapter.exec(`
2746
2773
  CREATE TABLE IF NOT EXISTS pipeline_runs (
2747
2774
  id VARCHAR(255) PRIMARY KEY,
2748
2775
  methodology VARCHAR(128) NOT NULL,
@@ -2876,6 +2903,11 @@ async function initSchema(adapter) {
2876
2903
  ]) try {
2877
2904
  await adapter.exec(`ALTER TABLE story_metrics ADD COLUMN ${col}`);
2878
2905
  } catch {}
2906
+ }
2907
+
2908
+ //#endregion
2909
+ //#region packages/core/dist/persistence/monitor-schema.js
2910
+ async function initMonitorSchema(adapter) {
2879
2911
  await adapter.exec(`
2880
2912
  CREATE TABLE IF NOT EXISTS task_metrics (
2881
2913
  task_id VARCHAR(255) NOT NULL,
@@ -2926,8 +2958,142 @@ async function initSchema(adapter) {
2926
2958
  generated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
2927
2959
  expires_at TEXT
2928
2960
  )
2961
+ `);
2962
+ }
2963
+
2964
+ //#endregion
2965
+ //#region packages/core/dist/persistence/state-schema.js
2966
+ async function initStateSchema(adapter) {
2967
+ await adapter.exec(`
2968
+ CREATE TABLE IF NOT EXISTS stories (
2969
+ story_key VARCHAR(100) NOT NULL,
2970
+ sprint VARCHAR(50),
2971
+ status VARCHAR(30) NOT NULL DEFAULT 'PENDING',
2972
+ phase VARCHAR(30) NOT NULL DEFAULT 'PENDING',
2973
+ ac_results JSON,
2974
+ error_message TEXT,
2975
+ created_at DATETIME,
2976
+ updated_at DATETIME,
2977
+ completed_at DATETIME,
2978
+ PRIMARY KEY (story_key)
2979
+ )
2980
+ `);
2981
+ await adapter.exec(`
2982
+ CREATE TABLE IF NOT EXISTS contracts (
2983
+ story_key VARCHAR(100) NOT NULL,
2984
+ name VARCHAR(200) NOT NULL,
2985
+ direction VARCHAR(20) NOT NULL,
2986
+ schema_path VARCHAR(500),
2987
+ transport VARCHAR(200),
2988
+ recorded_at DATETIME,
2989
+ PRIMARY KEY (story_key, name, direction)
2990
+ )
2929
2991
  `);
2930
2992
  await adapter.exec(`
2993
+ CREATE TABLE IF NOT EXISTS metrics (
2994
+ story_key VARCHAR(100) NOT NULL,
2995
+ task_type VARCHAR(100) NOT NULL,
2996
+ recorded_at DATETIME NOT NULL,
2997
+ model VARCHAR(100),
2998
+ tokens_in BIGINT NOT NULL DEFAULT 0,
2999
+ tokens_out BIGINT NOT NULL DEFAULT 0,
3000
+ cache_read_tokens BIGINT NOT NULL DEFAULT 0,
3001
+ cost_usd DECIMAL(10,6) NOT NULL DEFAULT 0,
3002
+ wall_clock_ms BIGINT NOT NULL DEFAULT 0,
3003
+ review_cycles INT NOT NULL DEFAULT 0,
3004
+ stall_count INT NOT NULL DEFAULT 0,
3005
+ result VARCHAR(30),
3006
+ PRIMARY KEY (story_key, task_type, recorded_at)
3007
+ )
3008
+ `);
3009
+ await adapter.exec(`
3010
+ CREATE TABLE IF NOT EXISTS dispatch_log (
3011
+ story_key VARCHAR(100) NOT NULL,
3012
+ dispatched_at DATETIME NOT NULL,
3013
+ branch VARCHAR(200),
3014
+ worker_id VARCHAR(100),
3015
+ result VARCHAR(30),
3016
+ PRIMARY KEY (story_key, dispatched_at)
3017
+ )
3018
+ `);
3019
+ await adapter.exec(`
3020
+ CREATE TABLE IF NOT EXISTS build_results (
3021
+ story_key VARCHAR(100) NOT NULL,
3022
+ timestamp DATETIME NOT NULL,
3023
+ command VARCHAR(500),
3024
+ exit_code INT,
3025
+ stdout_hash VARCHAR(64),
3026
+ PRIMARY KEY (story_key, timestamp)
3027
+ )
3028
+ `);
3029
+ await adapter.exec(`
3030
+ CREATE TABLE IF NOT EXISTS review_verdicts (
3031
+ story_key VARCHAR(100) NOT NULL,
3032
+ timestamp DATETIME NOT NULL,
3033
+ verdict VARCHAR(30),
3034
+ issues_count INT NOT NULL DEFAULT 0,
3035
+ notes TEXT,
3036
+ PRIMARY KEY (story_key, timestamp)
3037
+ )
3038
+ `);
3039
+ await adapter.exec(`
3040
+ CREATE TABLE IF NOT EXISTS _schema_version (
3041
+ version INT NOT NULL,
3042
+ applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
3043
+ description VARCHAR(500),
3044
+ PRIMARY KEY (version)
3045
+ )
3046
+ `);
3047
+ const seeds = [
3048
+ [1, "Initial substrate state schema"],
3049
+ [2, "Add turn_analysis table (Epic 27-4)"],
3050
+ [3, "Add category_stats and consumer_stats tables (Epic 27-5)"],
3051
+ [4, "Add recommendations table (Epic 27-7)"],
3052
+ [5, "Add repo_map_symbols and repo_map_meta tables (Epic 28-2)"],
3053
+ [6, "Add dependencies JSON column to repo_map_symbols (Epic 28-3)"],
3054
+ [7, "Add wg_stories, story_dependencies tables and ready_stories view (Epic 31-1)"],
3055
+ [8, "Add task_type, phase, dispatch_id columns to turn_analysis (Story 30-1)"],
3056
+ [9, "Add dispatch_id, task_type, phase columns to efficiency_scores (Story 30-3)"]
3057
+ ];
3058
+ for (const [version, description] of seeds) try {
3059
+ await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (${version}, '${description.replace(/'/g, "''")}')`);
3060
+ } catch {}
3061
+ }
3062
+
3063
+ //#endregion
3064
+ //#region packages/core/dist/persistence/repo-map-schema.js
3065
+ async function initRepoMapSchema(adapter) {
3066
+ await adapter.exec(`
3067
+ CREATE TABLE IF NOT EXISTS repo_map_symbols (
3068
+ id BIGINT AUTO_INCREMENT NOT NULL,
3069
+ file_path VARCHAR(1000) NOT NULL,
3070
+ symbol_name VARCHAR(500) NOT NULL,
3071
+ symbol_kind VARCHAR(20) NOT NULL,
3072
+ signature TEXT,
3073
+ line_number INT NOT NULL DEFAULT 0,
3074
+ exported TINYINT(1) NOT NULL DEFAULT 0,
3075
+ file_hash VARCHAR(64) NOT NULL,
3076
+ dependencies JSON,
3077
+ PRIMARY KEY (id)
3078
+ )
3079
+ `);
3080
+ await adapter.exec("CREATE INDEX IF NOT EXISTS idx_repo_map_symbols_file ON repo_map_symbols (file_path)");
3081
+ await adapter.exec("CREATE INDEX IF NOT EXISTS idx_repo_map_symbols_kind ON repo_map_symbols (symbol_kind)");
3082
+ await adapter.exec(`
3083
+ CREATE TABLE IF NOT EXISTS repo_map_meta (
3084
+ id INT NOT NULL DEFAULT 1,
3085
+ commit_sha VARCHAR(64),
3086
+ updated_at DATETIME,
3087
+ file_count INT NOT NULL DEFAULT 0,
3088
+ PRIMARY KEY (id)
3089
+ )
3090
+ `);
3091
+ }
3092
+
3093
+ //#endregion
3094
+ //#region packages/core/dist/persistence/telemetry-schema.js
3095
+ async function initTelemetrySchema(adapter) {
3096
+ await adapter.exec(`
2931
3097
  CREATE TABLE IF NOT EXISTS turn_analysis (
2932
3098
  story_key VARCHAR(64) NOT NULL,
2933
3099
  span_id VARCHAR(128) NOT NULL,
@@ -2982,6 +3148,7 @@ async function initSchema(adapter) {
2982
3148
  PRIMARY KEY (story_key, timestamp)
2983
3149
  )
2984
3150
  `);
3151
+ await adapter.exec("CREATE INDEX IF NOT EXISTS idx_efficiency_story ON efficiency_scores (story_key, timestamp DESC)");
2985
3152
  for (const col of [
2986
3153
  "dispatch_id",
2987
3154
  "task_type",
@@ -3005,6 +3172,7 @@ async function initSchema(adapter) {
3005
3172
  PRIMARY KEY (id)
3006
3173
  )
3007
3174
  `);
3175
+ await adapter.exec("CREATE INDEX IF NOT EXISTS idx_recommendations_story ON recommendations (story_key, severity)");
3008
3176
  await adapter.exec(`
3009
3177
  CREATE TABLE IF NOT EXISTS category_stats (
3010
3178
  story_key VARCHAR(100) NOT NULL,
@@ -3017,6 +3185,7 @@ async function initSchema(adapter) {
3017
3185
  PRIMARY KEY (story_key, category)
3018
3186
  )
3019
3187
  `);
3188
+ await adapter.exec("CREATE INDEX IF NOT EXISTS idx_category_stats_story ON category_stats (story_key, total_tokens)");
3020
3189
  await adapter.exec(`
3021
3190
  CREATE TABLE IF NOT EXISTS consumer_stats (
3022
3191
  story_key VARCHAR(100) NOT NULL,
@@ -3029,6 +3198,12 @@ async function initSchema(adapter) {
3029
3198
  PRIMARY KEY (story_key, consumer_key)
3030
3199
  )
3031
3200
  `);
3201
+ await adapter.exec("CREATE INDEX IF NOT EXISTS idx_consumer_stats_story ON consumer_stats (story_key, total_tokens)");
3202
+ }
3203
+
3204
+ //#endregion
3205
+ //#region packages/core/dist/persistence/work-graph-schema.js
3206
+ async function initWorkGraphSchema(adapter) {
3032
3207
  await adapter.exec(`
3033
3208
  CREATE TABLE IF NOT EXISTS wg_stories (
3034
3209
  story_key VARCHAR(20) NOT NULL,
@@ -3068,177 +3243,23 @@ async function initSchema(adapter) {
3068
3243
  AND dep.status <> 'complete'
3069
3244
  )
3070
3245
  `);
3071
- await adapter.exec(`
3072
- CREATE VIEW IF NOT EXISTS ready_tasks AS
3073
- SELECT t.* FROM tasks t
3074
- WHERE t.status = 'pending'
3075
- AND NOT EXISTS (
3076
- SELECT 1 FROM task_dependencies td
3077
- JOIN tasks dep ON dep.id = td.depends_on
3078
- WHERE td.task_id = t.id
3079
- AND dep.status NOT IN ('completed', 'cancelled')
3080
- )
3081
- `);
3082
- await adapter.exec(`
3083
- CREATE VIEW IF NOT EXISTS session_cost_summary AS
3084
- SELECT
3085
- s.id AS session_id,
3086
- s.name AS session_name,
3087
- COUNT(DISTINCT t.id) AS total_tasks,
3088
- SUM(CASE WHEN t.status = 'completed' THEN 1 ELSE 0 END) AS completed_tasks,
3089
- SUM(CASE WHEN t.status = 'failed' THEN 1 ELSE 0 END) AS failed_tasks,
3090
- SUM(CASE WHEN t.status = 'running' THEN 1 ELSE 0 END) AS running_tasks,
3091
- COALESCE(SUM(t.cost_usd), 0) AS total_cost_usd,
3092
- SUM(CASE WHEN t.billing_mode = 'subscription' THEN t.cost_usd ELSE 0 END) AS subscription_cost_usd,
3093
- SUM(CASE WHEN t.billing_mode = 'api' THEN t.cost_usd ELSE 0 END) AS api_cost_usd,
3094
- s.planning_cost_usd
3095
- FROM sessions s
3096
- LEFT JOIN tasks t ON t.session_id = s.id
3097
- GROUP BY s.id
3098
- `);
3099
- await adapter.exec(`
3100
- CREATE TABLE IF NOT EXISTS schema_migrations (
3101
- version INTEGER PRIMARY KEY,
3102
- name TEXT NOT NULL,
3103
- applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
3104
- )
3105
- `);
3106
- await adapter.exec(`
3107
- CREATE TABLE IF NOT EXISTS stories (
3108
- story_key VARCHAR(100) NOT NULL,
3109
- sprint VARCHAR(50),
3110
- status VARCHAR(30) NOT NULL DEFAULT 'PENDING',
3111
- phase VARCHAR(30) NOT NULL DEFAULT 'PENDING',
3112
- ac_results JSON,
3113
- error_message TEXT,
3114
- created_at DATETIME,
3115
- updated_at DATETIME,
3116
- completed_at DATETIME,
3117
- PRIMARY KEY (story_key)
3118
- )
3119
- `);
3120
- await adapter.exec(`
3121
- CREATE TABLE IF NOT EXISTS contracts (
3122
- story_key VARCHAR(100) NOT NULL,
3123
- name VARCHAR(200) NOT NULL,
3124
- direction VARCHAR(20) NOT NULL,
3125
- schema_path VARCHAR(500),
3126
- transport VARCHAR(200),
3127
- recorded_at DATETIME,
3128
- PRIMARY KEY (story_key, name, direction)
3129
- )
3130
- `);
3131
- await adapter.exec(`
3132
- CREATE TABLE IF NOT EXISTS metrics (
3133
- story_key VARCHAR(100) NOT NULL,
3134
- task_type VARCHAR(100) NOT NULL,
3135
- recorded_at DATETIME NOT NULL,
3136
- model VARCHAR(100),
3137
- tokens_in BIGINT NOT NULL DEFAULT 0,
3138
- tokens_out BIGINT NOT NULL DEFAULT 0,
3139
- cache_read_tokens BIGINT NOT NULL DEFAULT 0,
3140
- cost_usd DECIMAL(10,6) NOT NULL DEFAULT 0,
3141
- wall_clock_ms BIGINT NOT NULL DEFAULT 0,
3142
- review_cycles INT NOT NULL DEFAULT 0,
3143
- stall_count INT NOT NULL DEFAULT 0,
3144
- result VARCHAR(30),
3145
- PRIMARY KEY (story_key, task_type, recorded_at)
3146
- )
3147
- `);
3148
- await adapter.exec(`
3149
- CREATE TABLE IF NOT EXISTS dispatch_log (
3150
- story_key VARCHAR(100) NOT NULL,
3151
- dispatched_at DATETIME NOT NULL,
3152
- branch VARCHAR(200),
3153
- worker_id VARCHAR(100),
3154
- result VARCHAR(30),
3155
- PRIMARY KEY (story_key, dispatched_at)
3156
- )
3157
- `);
3158
- await adapter.exec(`
3159
- CREATE TABLE IF NOT EXISTS build_results (
3160
- story_key VARCHAR(100) NOT NULL,
3161
- timestamp DATETIME NOT NULL,
3162
- command VARCHAR(500),
3163
- exit_code INT,
3164
- stdout_hash VARCHAR(64),
3165
- PRIMARY KEY (story_key, timestamp)
3166
- )
3167
- `);
3168
- await adapter.exec(`
3169
- CREATE TABLE IF NOT EXISTS review_verdicts (
3170
- story_key VARCHAR(100) NOT NULL,
3171
- timestamp DATETIME NOT NULL,
3172
- verdict VARCHAR(30),
3173
- issues_count INT NOT NULL DEFAULT 0,
3174
- notes TEXT,
3175
- PRIMARY KEY (story_key, timestamp)
3176
- )
3177
- `);
3178
- await adapter.exec(`
3179
- CREATE TABLE IF NOT EXISTS _schema_version (
3180
- version INT NOT NULL,
3181
- applied_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
3182
- description VARCHAR(500),
3183
- PRIMARY KEY (version)
3184
- )
3185
- `);
3186
- try {
3187
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (1, 'Initial substrate state schema')`);
3188
- } catch {}
3189
- try {
3190
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (2, 'Add turn_analysis table (Epic 27-4)')`);
3191
- } catch {}
3192
- try {
3193
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (3, 'Add category_stats and consumer_stats tables (Epic 27-5)')`);
3194
- } catch {}
3195
- try {
3196
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (4, 'Add recommendations table (Epic 27-7)')`);
3197
- } catch {}
3198
- try {
3199
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (5, 'Add repo_map_symbols and repo_map_meta tables (Epic 28-2)')`);
3200
- } catch {}
3201
- try {
3202
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (6, 'Add dependencies JSON column to repo_map_symbols (Epic 28-3)')`);
3203
- } catch {}
3204
- try {
3205
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (7, 'Add wg_stories, story_dependencies tables and ready_stories view (Epic 31-1)')`);
3206
- } catch {}
3207
- try {
3208
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (8, 'Add task_type, phase, dispatch_id columns to turn_analysis (Story 30-1)')`);
3209
- } catch {}
3210
- try {
3211
- await adapter.exec(`INSERT IGNORE INTO _schema_version (version, description) VALUES (9, 'Add dispatch_id, task_type, phase columns to efficiency_scores (Story 30-3)')`);
3212
- } catch {}
3213
- await adapter.exec(`
3214
- CREATE TABLE IF NOT EXISTS repo_map_symbols (
3215
- id BIGINT AUTO_INCREMENT NOT NULL,
3216
- file_path VARCHAR(1000) NOT NULL,
3217
- symbol_name VARCHAR(500) NOT NULL,
3218
- symbol_kind VARCHAR(20) NOT NULL,
3219
- signature TEXT,
3220
- line_number INT NOT NULL DEFAULT 0,
3221
- exported TINYINT(1) NOT NULL DEFAULT 0,
3222
- file_hash VARCHAR(64) NOT NULL,
3223
- dependencies JSON,
3224
- PRIMARY KEY (id)
3225
- )
3226
- `);
3227
- await adapter.exec("CREATE INDEX IF NOT EXISTS idx_repo_map_symbols_file ON repo_map_symbols (file_path)");
3228
- await adapter.exec("CREATE INDEX IF NOT EXISTS idx_repo_map_symbols_kind ON repo_map_symbols (symbol_kind)");
3229
- await adapter.exec(`
3230
- CREATE TABLE IF NOT EXISTS repo_map_meta (
3231
- id INT NOT NULL DEFAULT 1,
3232
- commit_sha VARCHAR(64),
3233
- updated_at DATETIME,
3234
- file_count INT NOT NULL DEFAULT 0,
3235
- PRIMARY KEY (id)
3236
- )
3237
- `);
3238
- await adapter.exec("CREATE INDEX IF NOT EXISTS idx_efficiency_story ON efficiency_scores (story_key, timestamp DESC)");
3239
- await adapter.exec("CREATE INDEX IF NOT EXISTS idx_recommendations_story ON recommendations (story_key, severity)");
3240
- await adapter.exec("CREATE INDEX IF NOT EXISTS idx_category_stats_story ON category_stats (story_key, total_tokens)");
3241
- await adapter.exec("CREATE INDEX IF NOT EXISTS idx_consumer_stats_story ON consumer_stats (story_key, total_tokens)");
3246
+ }
3247
+
3248
+ //#endregion
3249
+ //#region packages/core/dist/persistence/schema.js
3250
+ /**
3251
+ * Initialize all persistence tables on the given adapter.
3252
+ * Idempotent safe to call multiple times.
3253
+ */
3254
+ async function initSchema(adapter) {
3255
+ await initCoreSchema(adapter);
3256
+ await initPipelineSchema(adapter);
3257
+ await initMonitorSchema(adapter);
3258
+ await initStateSchema(adapter);
3259
+ await initRepoMapSchema(adapter);
3260
+ await initTelemetrySchema(adapter);
3261
+ await initWorkGraphSchema(adapter);
3262
+ await initCoreViews(adapter);
3242
3263
  }
3243
3264
 
3244
3265
  //#endregion
@@ -11291,4 +11312,4 @@ async function callLLM(params) {
11291
11312
 
11292
11313
  //#endregion
11293
11314
  export { ADVISORY_NOTES, AdapterRegistry, AdtError, BudgetConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, Categorizer, ClaudeCodeAdapter, CodexCLIAdapter, ConfigError, ConfigIncompatibleFormatError, ConsumerAnalyzer, CostTrackerConfigSchema, DEFAULT_CONFIG, DEFAULT_GLOBAL_SETTINGS, DispatcherImpl, DoltClient, DoltNotInstalled, DoltQueryError, ESCALATION_DIAGNOSIS, EXPERIMENT_RESULT, EfficiencyScorer, GeminiCLIAdapter, GlobalSettingsSchema, InMemoryDatabaseAdapter, IngestionServer, LEARNING_FINDING, LogTurnAnalyzer, ModelRoutingConfigSchema, MonitorDatabaseImpl, OPERATIONAL_FINDING, PartialGlobalSettingsSchema, PartialProviderConfigSchema, ProviderPolicySchema, ProvidersSchema, Recommender, RoutingConfigError, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, STORY_METRICS, STORY_OUTCOME, SubstrateConfigSchema, TASK_TYPE_PHASE_MAP, TEST_EXPANSION_FINDING, TEST_PLAN, TelemetryConfigSchema, TelemetryNormalizer, TelemetryPipeline, TurnAnalyzer, VersionManagerImpl, addTokenUsage, aggregateTokenUsageForRun, aggregateTokenUsageForStory, buildAuditLogEntry, buildBranchName, buildModificationDirective, buildPRBody, buildWorktreePath, callLLM, checkDoltInstalled, classifyVersionGap, compareRunMetrics, createAmendmentRun, createConfigSystem, createDatabaseAdapter as createDatabaseAdapter$1, createDecision, createDoltClient, createExperimenter, createPipelineRun, createRequirement, createVersionManager, detectInterfaceChanges, determineVerdict, getActiveDecisions, getAllCostEntriesFiltered, getArtifactByTypeForRun, getArtifactsByRun, getBaselineRunMetrics, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestCompletedRun, getLatestRun, getModelTier, getPipelineRunById, getPlanningCostTotal, getRetryableEscalations, getRunMetrics, getRunningPipelineRuns, getSessionCostSummary, getSessionCostSummaryFiltered, getStoryMetricsForRun, getTokenUsageSummary, incrementRunRestarts, initSchema, initializeDolt, listRequirements, listRunMetrics, loadModelRoutingConfig, loadParentRunDecisions, registerArtifact, resolvePromptFile, supersedeDecision, swallowDebug, tagRunAsBaseline, updateDecision, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics };
11294
- //# sourceMappingURL=dist-C_NE40jY.js.map
11315
+ //# sourceMappingURL=dist-DnVfCiro.js.map
@@ -1,4 +1,4 @@
1
- import { AdtError } from "./dist-C_NE40jY.js";
1
+ import { AdtError } from "./dist-DnVfCiro.js";
2
2
 
3
3
  //#region src/core/errors.ts
4
4
  /** Error thrown when task configuration is invalid */
@@ -71,4 +71,4 @@ var TaskGraphIncompatibleFormatError = class extends AdtError {
71
71
 
72
72
  //#endregion
73
73
  export { BudgetExceededError, GitError, RecoveryError, TaskConfigError, TaskGraphCycleError, TaskGraphError, TaskGraphIncompatibleFormatError, WorkerError, WorkerNotFoundError };
74
- //# sourceMappingURL=errors-D531Z8FW.js.map
74
+ //# sourceMappingURL=errors-7UL0-Lga.js.map
@@ -1,3 +1,3 @@
1
- import { buildAuditLogEntry, buildBranchName, buildModificationDirective, buildPRBody, buildWorktreePath, createExperimenter, determineVerdict, resolvePromptFile } from "./dist-C_NE40jY.js";
1
+ import { buildAuditLogEntry, buildBranchName, buildModificationDirective, buildPRBody, buildWorktreePath, createExperimenter, determineVerdict, resolvePromptFile } from "./dist-DnVfCiro.js";
2
2
 
3
3
  export { createExperimenter };
@@ -1,7 +1,7 @@
1
- import { DEFAULT_STALL_THRESHOLD_SECONDS, getAllDescendantPids, getAutoHealthData, inspectProcessTree, isOrchestratorProcessLine, registerHealthCommand, runHealthAction } from "./health-CzZ2Ki-b.js";
1
+ import { DEFAULT_STALL_THRESHOLD_SECONDS, getAllDescendantPids, getAutoHealthData, inspectProcessTree, isOrchestratorProcessLine, registerHealthCommand, runHealthAction } from "./health-DmvwKjP5.js";
2
2
  import "./logger-KeHncl-f.js";
3
- import "./dist-C_NE40jY.js";
4
- import "./manifest-read-BSsjVG96.js";
3
+ import "./dist-DnVfCiro.js";
4
+ import "./manifest-read-96wMXd5A.js";
5
5
  import "./work-graph-repository-DZyJv5pV.js";
6
6
  import "./decisions-CzSIEeGP.js";
7
7
 
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from "./logger-KeHncl-f.js";
2
- import { DoltClient, DoltQueryError, createDatabaseAdapter$1 as createDatabaseAdapter, getLatestRun, getPipelineRunById, initSchema } from "./dist-C_NE40jY.js";
3
- import { resolveMainRepoRoot, resolveRunManifest } from "./manifest-read-BSsjVG96.js";
2
+ import { DoltClient, DoltQueryError, createDatabaseAdapter$1 as createDatabaseAdapter, getLatestRun, getPipelineRunById, initSchema } from "./dist-DnVfCiro.js";
3
+ import { resolveMainRepoRoot, resolveRunManifest } from "./manifest-read-96wMXd5A.js";
4
4
  import { createRequire } from "module";
5
5
  import { dirname, join } from "path";
6
6
  import { existsSync, readFileSync } from "node:fs";
@@ -1231,4 +1231,4 @@ function registerHealthCommand(program, _version = "0.0.0", projectRoot = proces
1231
1231
 
1232
1232
  //#endregion
1233
1233
  export { BMAD_BASELINE_TOKENS_FULL, DEFAULT_STALL_THRESHOLD_SECONDS, DoltMergeConflict, FileStateStore, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN$1 as STORY_KEY_PATTERN, SUBSTRATE_OWNED_SETTINGS_KEYS, VALID_PHASES, __commonJS, __require, __toESM, buildPipelineStatusOutput, createDatabaseAdapter$1 as createDatabaseAdapter, createDoltOperatorReader, createStateStore, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, inspectProcessTree, isOrchestratorProcessLine, parseDbTimestampAsUtc, registerHealthCommand, resolveBmadMethodSrcPath, resolveBmadMethodVersion, runHealthAction, validateStoryKey };
1234
- //# sourceMappingURL=health-CzZ2Ki-b.js.map
1234
+ //# sourceMappingURL=health-DmvwKjP5.js.map
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { childLogger, createLogger, logger } from "./logger-KeHncl-f.js";
2
2
  import { assertDefined, createEventBus, createTuiApp, deepClone, formatDuration, generateId, isPlainObject, isTuiCapable, printNonTtyWarning, sleep, withRetry } from "./helpers-CElYrONe.js";
3
- import { AdapterRegistry, AdtError, ClaudeCodeAdapter, CodexCLIAdapter, ConfigError, ConfigIncompatibleFormatError, GeminiCLIAdapter } from "./dist-C_NE40jY.js";
3
+ import { AdapterRegistry, AdtError, ClaudeCodeAdapter, CodexCLIAdapter, ConfigError, ConfigIncompatibleFormatError, GeminiCLIAdapter } from "./dist-DnVfCiro.js";
4
4
  import "./adapter-registry-DIcrxjH8.js";
5
- import { BudgetExceededError, GitError, RecoveryError, TaskConfigError, TaskGraphCycleError, TaskGraphError, TaskGraphIncompatibleFormatError, WorkerError, WorkerNotFoundError } from "./errors-D531Z8FW.js";
5
+ import { BudgetExceededError, GitError, RecoveryError, TaskConfigError, TaskGraphCycleError, TaskGraphError, TaskGraphIncompatibleFormatError, WorkerError, WorkerNotFoundError } from "./errors-7UL0-Lga.js";
6
6
 
7
7
  //#region src/core/di.ts
8
8
  /**
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from "./logger-KeHncl-f.js";
2
- import { readCurrentRunId, resolveMainRepoRoot } from "./manifest-read-BSsjVG96.js";
2
+ import { readCurrentRunId, resolveMainRepoRoot } from "./manifest-read-96wMXd5A.js";
3
3
  import { join } from "node:path";
4
4
  import { mkdir, readFile, writeFile } from "node:fs/promises";
5
5
  import * as readline from "node:readline";
@@ -180,4 +180,4 @@ async function runInteractivePrompt(decisionContext) {
180
180
 
181
181
  //#endregion
182
182
  export { runInteractivePrompt };
183
- //# sourceMappingURL=interactive-prompt-DF-PL5ia.js.map
183
+ //# sourceMappingURL=interactive-prompt-El7WVSY2.js.map
@@ -1,5 +1,5 @@
1
1
  import { createLogger } from "./logger-KeHncl-f.js";
2
- import { LEARNING_FINDING, createDecision, getDecisionsByCategory } from "./dist-C_NE40jY.js";
2
+ import { LEARNING_FINDING, createDecision, getDecisionsByCategory } from "./dist-DnVfCiro.js";
3
3
  import * as path$1 from "path";
4
4
  import { join } from "path";
5
5
  import { readFile } from "fs/promises";
@@ -5845,4 +5845,4 @@ async function resolveRunManifest(dbRoot, runId) {
5845
5845
 
5846
5846
  //#endregion
5847
5847
  export { FindingsInjector, RunManifest, RuntimeProbeListSchema, SupervisorLock, ZERO_FINDINGS_BY_AUTHOR, ZERO_FINDING_COUNTS, ZERO_PROBE_AUTHOR_METRICS, aggregateProbeAuthorMetrics, applyConfigToGraph, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectsEventDrivenAC, detectsStateIntegratingAC, extractTargetFilesFromStoryContent, parseRuntimeProbes, readCurrentRunId, renderFindings, resolveGraphPath, resolveMainRepoRoot, resolveRunManifest, rollupFindingCounts, rollupFindingsByAuthor, rollupProbeAuthorByClass, rollupProbeAuthorMetrics, runAcTraceabilityCheck, runStaleVerificationRecovery };
5848
- //# sourceMappingURL=manifest-read-BSsjVG96.js.map
5848
+ //# sourceMappingURL=manifest-read-96wMXd5A.js.map
@@ -1,6 +1,6 @@
1
1
  import "../../logger-KeHncl-f.js";
2
- import "../../dist-C_NE40jY.js";
3
- import "../../manifest-read-BSsjVG96.js";
4
- import { runInteractivePrompt } from "../../interactive-prompt-DF-PL5ia.js";
2
+ import "../../dist-DnVfCiro.js";
3
+ import "../../manifest-read-96wMXd5A.js";
4
+ import { runInteractivePrompt } from "../../interactive-prompt-El7WVSY2.js";
5
5
 
6
6
  export { runInteractivePrompt };
@@ -1,4 +1,4 @@
1
- import { ModelRoutingConfigSchema, ProviderPolicySchema, RoutingConfigError, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, TASK_TYPE_PHASE_MAP, getModelTier, loadModelRoutingConfig } from "./dist-C_NE40jY.js";
1
+ import { ModelRoutingConfigSchema, ProviderPolicySchema, RoutingConfigError, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, TASK_TYPE_PHASE_MAP, getModelTier, loadModelRoutingConfig } from "./dist-DnVfCiro.js";
2
2
  import "./routing-DFxoKHDt.js";
3
3
 
4
4
  export { loadModelRoutingConfig };
@@ -1,11 +1,11 @@
1
- import { BMAD_BASELINE_TOKENS_FULL, DoltMergeConflict, FileStateStore, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN, VALID_PHASES, __commonJS, __require, __toESM, buildPipelineStatusOutput, createDatabaseAdapter, formatOutput, formatPipelineSummary, formatTokenTelemetry, inspectProcessTree, parseDbTimestampAsUtc, validateStoryKey } from "./health-CzZ2Ki-b.js";
1
+ import { BMAD_BASELINE_TOKENS_FULL, DoltMergeConflict, FileStateStore, STOP_AFTER_VALID_PHASES, STORY_KEY_PATTERN, VALID_PHASES, __commonJS, __require, __toESM, buildPipelineStatusOutput, createDatabaseAdapter, formatOutput, formatPipelineSummary, formatTokenTelemetry, inspectProcessTree, parseDbTimestampAsUtc, validateStoryKey } from "./health-DmvwKjP5.js";
2
2
  import { createLogger } from "./logger-KeHncl-f.js";
3
3
  import { TypedEventBusImpl, createEventBus, createTuiApp, isTuiCapable, printNonTtyWarning, sleep } from "./helpers-CElYrONe.js";
4
- import { ADVISORY_NOTES, Categorizer, ConsumerAnalyzer, DEFAULT_GLOBAL_SETTINGS, DispatcherImpl, DoltClient, ESCALATION_DIAGNOSIS, EXPERIMENT_RESULT, EfficiencyScorer, IngestionServer, LogTurnAnalyzer, OPERATIONAL_FINDING, Recommender, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, STORY_METRICS, STORY_OUTCOME, SubstrateConfigSchema, TEST_EXPANSION_FINDING, TEST_PLAN, TelemetryNormalizer, TelemetryPipeline, TurnAnalyzer, addTokenUsage, aggregateTokenUsageForRun, aggregateTokenUsageForStory, callLLM, classifyVersionGap, createConfigSystem, createDatabaseAdapter$1, createDecision, createPipelineRun, createRequirement, detectInterfaceChanges, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunMetrics, getRunningPipelineRuns, getStoryMetricsForRun, getTokenUsageSummary, initSchema, listRequirements, loadModelRoutingConfig, registerArtifact, swallowDebug, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics } from "./dist-C_NE40jY.js";
5
- import { FindingsInjector, RunManifest, RuntimeProbeListSchema, applyConfigToGraph, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectsEventDrivenAC, detectsStateIntegratingAC, extractTargetFilesFromStoryContent, renderFindings, resolveGraphPath, resolveMainRepoRoot, runAcTraceabilityCheck, runStaleVerificationRecovery } from "./manifest-read-BSsjVG96.js";
4
+ import { ADVISORY_NOTES, Categorizer, ConsumerAnalyzer, DEFAULT_GLOBAL_SETTINGS, DispatcherImpl, DoltClient, ESCALATION_DIAGNOSIS, EXPERIMENT_RESULT, EfficiencyScorer, IngestionServer, LogTurnAnalyzer, OPERATIONAL_FINDING, Recommender, RoutingRecommender, RoutingResolver, RoutingTelemetry, RoutingTokenAccumulator, RoutingTuner, STORY_METRICS, STORY_OUTCOME, SubstrateConfigSchema, TEST_EXPANSION_FINDING, TEST_PLAN, TelemetryNormalizer, TelemetryPipeline, TurnAnalyzer, addTokenUsage, aggregateTokenUsageForRun, aggregateTokenUsageForStory, callLLM, classifyVersionGap, createConfigSystem, createDatabaseAdapter$1, createDecision, createPipelineRun, createRequirement, detectInterfaceChanges, getArtifactByTypeForRun, getArtifactsByRun, getDecisionsByCategory, getDecisionsByPhase, getDecisionsByPhaseForRun, getLatestRun, getPipelineRunById, getRunMetrics, getRunningPipelineRuns, getStoryMetricsForRun, getTokenUsageSummary, initSchema, listRequirements, loadModelRoutingConfig, registerArtifact, swallowDebug, updatePipelineRun, updatePipelineRunConfig, upsertDecision, writeRunMetrics, writeStoryMetrics } from "./dist-DnVfCiro.js";
5
+ import { FindingsInjector, RunManifest, RuntimeProbeListSchema, applyConfigToGraph, createDefaultVerificationPipeline, createGraphOrchestrator, createSdlcCodeReviewHandler, createSdlcCreateStoryHandler, createSdlcDevStoryHandler, createSdlcPhaseHandler, detectsEventDrivenAC, detectsStateIntegratingAC, extractTargetFilesFromStoryContent, renderFindings, resolveGraphPath, resolveMainRepoRoot, runAcTraceabilityCheck, runStaleVerificationRecovery } from "./manifest-read-96wMXd5A.js";
6
6
  import { WorkGraphRepository, detectCycles } from "./work-graph-repository-DZyJv5pV.js";
7
7
  import { deriveExitCode, routeDecision } from "./decision-router-DblHY8se.js";
8
- import { runInteractivePrompt } from "./interactive-prompt-DF-PL5ia.js";
8
+ import { runInteractivePrompt } from "./interactive-prompt-El7WVSY2.js";
9
9
  import { runRecoveryEngine } from "./recovery-engine-BKGBeBnW.js";
10
10
  import { basename, dirname, extname, join } from "path";
11
11
  import { access, readFile, readdir, stat } from "fs/promises";
@@ -47137,7 +47137,7 @@ async function runFullPipeline(options) {
47137
47137
  */
47138
47138
  async function emitPreDispatchVersionAdvisory(currentVersion) {
47139
47139
  if (process.env["SUBSTRATE_NO_UPDATE_CHECK"] === "1") return;
47140
- const { createVersionManager } = await import("./version-manager-impl-9J_JCJPu.js");
47140
+ const { createVersionManager } = await import("./version-manager-impl-bWaGssmZ.js");
47141
47141
  const vm = createVersionManager();
47142
47142
  const result = await vm.checkForUpdates(true);
47143
47143
  const gap = classifyVersionGap(currentVersion, result.latestVersion);
@@ -47234,4 +47234,4 @@ function registerRunCommand(program, version = "0.0.0", projectRoot = process.cw
47234
47234
 
47235
47235
  //#endregion
47236
47236
  export { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GLOBSTAR$1 as GLOBSTAR, GitClient, GrammarLoader, Minimatch$1 as Minimatch, Minipass, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createGitWorktreeManager, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, escape$1 as escape, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, normalizeGraphSummaryToStatus, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveMaxReviewCycles, resolveProbeAuthorStateIntegrating, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runProbeAuthor, runRunAction, runSolutioningPhase, unescape$1 as unescape, validateStopAfterFromConflict, wireNdjsonEmitter };
47237
- //# sourceMappingURL=run-COnbF6By.js.map
47237
+ //# sourceMappingURL=run-BONrtCkE.js.map
@@ -1,14 +1,14 @@
1
- import "./health-CzZ2Ki-b.js";
1
+ import "./health-DmvwKjP5.js";
2
2
  import "./logger-KeHncl-f.js";
3
3
  import "./helpers-CElYrONe.js";
4
- import "./dist-C_NE40jY.js";
5
- import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, resolveProbeAuthorStateIntegrating, runRunAction, wireNdjsonEmitter } from "./run-COnbF6By.js";
6
- import "./manifest-read-BSsjVG96.js";
4
+ import "./dist-DnVfCiro.js";
5
+ import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, resolveProbeAuthorStateIntegrating, runRunAction, wireNdjsonEmitter } from "./run-BONrtCkE.js";
6
+ import "./manifest-read-96wMXd5A.js";
7
7
  import "./routing-DFxoKHDt.js";
8
8
  import "./work-graph-repository-DZyJv5pV.js";
9
9
  import "./decisions-CzSIEeGP.js";
10
10
  import "./decision-router-DblHY8se.js";
11
- import "./interactive-prompt-DF-PL5ia.js";
11
+ import "./interactive-prompt-El7WVSY2.js";
12
12
  import "./recovery-engine-BKGBeBnW.js";
13
13
 
14
14
  export { runRunAction };
@@ -1,5 +1,5 @@
1
- import "./dist-C_NE40jY.js";
1
+ import "./dist-DnVfCiro.js";
2
2
  import "./version-manager-impl-qFBiO4Eh.js";
3
- import { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand } from "./upgrade-C1KzAZQE.js";
3
+ import { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand } from "./upgrade-DalCYA_U.js";
4
4
 
5
5
  export { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand };
@@ -1,4 +1,4 @@
1
- import { createVersionManager } from "./dist-C_NE40jY.js";
1
+ import { createVersionManager } from "./dist-DnVfCiro.js";
2
2
  import { execSync, spawn } from "child_process";
3
3
  import * as readline from "readline";
4
4
 
@@ -123,4 +123,4 @@ function registerUpgradeCommand(program) {
123
123
 
124
124
  //#endregion
125
125
  export { isGlobalInstall, registerUpgradeCommand, runUpgradeCommand };
126
- //# sourceMappingURL=upgrade-C1KzAZQE.js.map
126
+ //# sourceMappingURL=upgrade-DalCYA_U.js.map
@@ -1,4 +1,4 @@
1
- import { VersionManagerImpl, createVersionManager } from "./dist-C_NE40jY.js";
1
+ import { VersionManagerImpl, createVersionManager } from "./dist-DnVfCiro.js";
2
2
  import "./version-manager-impl-qFBiO4Eh.js";
3
3
 
4
4
  export { createVersionManager };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "substrate-ai",
3
- "version": "0.20.95",
3
+ "version": "0.20.97",
4
4
  "description": "Substrate — multi-agent orchestration daemon for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,4 +0,0 @@
1
- import { AdapterRegistry } from "./dist-C_NE40jY.js";
2
- import "./adapter-registry-DIcrxjH8.js";
3
-
4
- export { AdapterRegistry };