substrate-ai 0.20.28 → 0.20.29

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/dist/cli/index.js CHANGED
@@ -4,7 +4,7 @@ import { createLogger } from "../logger-KeHncl-f.js";
4
4
  import { createEventBus } from "../helpers-CElYrONe.js";
5
5
  import { AdapterRegistry, BudgetConfigSchema, CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, ConfigError, CostTrackerConfigSchema, DEFAULT_CONFIG, DoltClient, DoltNotInstalled, GlobalSettingsSchema, 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, tagRunAsBaseline, updatePipelineRun } from "../dist-CqtWS9wF.js";
6
6
  import "../adapter-registry-DXLMTmfD.js";
7
- import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runSolutioningPhase, validateStopAfterFromConflict } from "../run-BmRu588B.js";
7
+ import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runSolutioningPhase, validateStopAfterFromConflict } from "../run-D4WYiyK8.js";
8
8
  import "../errors-1uLGqnvr.js";
9
9
  import "../routing-CcBOCuC9.js";
10
10
  import "../decisions-C0pz9Clx.js";
@@ -5198,7 +5198,7 @@ async function runSupervisorAction(options, deps = {}) {
5198
5198
  await initSchema(expAdapter);
5199
5199
  const { runRunAction: runPipeline } = await import(
5200
5200
  /* @vite-ignore */
5201
- "../run-CV3EAUZK.js"
5201
+ "../run-BQQ0QILZ.js"
5202
5202
  );
5203
5203
  const runStoryFn = async (opts) => {
5204
5204
  const exitCode = await runPipeline({
@@ -2,7 +2,7 @@ import "./health-Dx9hm9x1.js";
2
2
  import "./logger-KeHncl-f.js";
3
3
  import "./helpers-CElYrONe.js";
4
4
  import "./dist-CqtWS9wF.js";
5
- import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, runRunAction, wireNdjsonEmitter } from "./run-BmRu588B.js";
5
+ import { normalizeGraphSummaryToStatus, registerRunCommand, resolveMaxReviewCycles, runRunAction, wireNdjsonEmitter } from "./run-D4WYiyK8.js";
6
6
  import "./routing-CcBOCuC9.js";
7
7
  import "./decisions-C0pz9Clx.js";
8
8
 
@@ -6248,28 +6248,53 @@ async function getArchConstraints$3(deps) {
6248
6248
  }
6249
6249
  }
6250
6250
  /**
6251
- * File-based fallback: read epic shard from _bmad-output/epics.md.
6252
- * Extracts the section for the target epic (## Epic N or ## N.) using regex.
6253
- * Returns the matched section content, or empty string if not found.
6251
+ * File-based fallback: read epic shard from _bmad-output planning files.
6252
+ *
6253
+ * Lookup order:
6254
+ * 1. Consolidated `_bmad-output/planning-artifacts/epics.md` — the
6255
+ * multi-epic-per-file convention used by external projects (strata,
6256
+ * ynab, NextGen Ticketing). Section extracted via heading regex.
6257
+ * 2. Consolidated `_bmad-output/epics.md` — alternate location.
6258
+ * 3. Per-epic file `_bmad-output/planning-artifacts/epic-<epicNum>-*.md`
6259
+ * — the per-epic convention substrate's own planning artifacts use
6260
+ * (Story 61-1). Returns the entire file content as the shard;
6261
+ * downstream `extractStorySection` callers narrow to the per-story
6262
+ * section by `### Story X:` heading match.
6263
+ *
6264
+ * Returns the matched section content, or empty string if no path matches.
6254
6265
  */
6255
6266
  function readEpicShardFromFile(projectRoot, epicId) {
6256
6267
  try {
6257
6268
  const candidates = [join$1(projectRoot, "_bmad-output", "planning-artifacts", "epics.md"), join$1(projectRoot, "_bmad-output", "epics.md")];
6258
6269
  const epicsPath = candidates.find((p) => existsSync(p));
6259
- if (!epicsPath) return "";
6260
- const content = readFileSync(epicsPath, "utf-8");
6261
6270
  const epicNum = epicId.replace(/^epic-/i, "");
6262
- const headingPattern = new RegExp(`^(#{2,4})\\s+(?:Epic\\s+)?${epicNum}[.:\\s]`, "m");
6263
- const headingMatch = headingPattern.exec(content);
6264
- if (!headingMatch) return "";
6265
- const startIdx = headingMatch.index;
6266
- const headingLevel = headingMatch[1].length;
6267
- const hashes = "#".repeat(headingLevel);
6268
- const endPattern = new RegExp(`\\n${hashes}\\s`, "g");
6269
- endPattern.lastIndex = startIdx + headingMatch[0].length;
6270
- const endMatch = endPattern.exec(content);
6271
- const endIdx = endMatch ? endMatch.index : content.length;
6272
- return content.slice(startIdx, endIdx).trim();
6271
+ if (epicsPath) {
6272
+ const content = readFileSync(epicsPath, "utf-8");
6273
+ const headingPattern = new RegExp(`^(#{2,4})\\s+(?:Epic\\s+)?${epicNum}[.:\\s]`, "m");
6274
+ const headingMatch = headingPattern.exec(content);
6275
+ if (headingMatch) {
6276
+ const startIdx = headingMatch.index;
6277
+ const headingLevel = headingMatch[1].length;
6278
+ const hashes = "#".repeat(headingLevel);
6279
+ const endPattern = new RegExp(`\\n${hashes}\\s`, "g");
6280
+ endPattern.lastIndex = startIdx + headingMatch[0].length;
6281
+ const endMatch = endPattern.exec(content);
6282
+ const endIdx = endMatch ? endMatch.index : content.length;
6283
+ return content.slice(startIdx, endIdx).trim();
6284
+ }
6285
+ }
6286
+ const planningDir = join$1(projectRoot, "_bmad-output", "planning-artifacts");
6287
+ if (existsSync(planningDir)) try {
6288
+ const entries = readdirSync(planningDir, { encoding: "utf-8" });
6289
+ const perEpicPattern = new RegExp(`^epic-${epicNum}-.*\\.md$`);
6290
+ const matches = entries.filter((e) => perEpicPattern.test(e)).sort();
6291
+ if (matches.length > 0) {
6292
+ const perEpicPath = join$1(planningDir, matches[0]);
6293
+ const content = readFileSync(perEpicPath, "utf-8");
6294
+ return content.trim();
6295
+ }
6296
+ } catch {}
6297
+ return "";
6273
6298
  } catch (err) {
6274
6299
  logger$18.warn({
6275
6300
  epicId,
@@ -44488,4 +44513,4 @@ function registerRunCommand(program, _version = "0.0.0", projectRoot = process.c
44488
44513
 
44489
44514
  //#endregion
44490
44515
  export { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, EpicIngester, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, normalizeGraphSummaryToStatus, registerExportCommand, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveMaxReviewCycles, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runRunAction, runSolutioningPhase, validateStopAfterFromConflict, wireNdjsonEmitter };
44491
- //# sourceMappingURL=run-BmRu588B.js.map
44516
+ //# sourceMappingURL=run-D4WYiyK8.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "substrate-ai",
3
- "version": "0.20.28",
3
+ "version": "0.20.29",
4
4
  "description": "Substrate — multi-agent orchestration daemon for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",