substrate-ai 0.8.5 → 0.9.0

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
@@ -2,7 +2,7 @@
2
2
  import { DoltClient, DoltNotInstalled, FileStateStore, SUBSTRATE_OWNED_SETTINGS_KEYS, VALID_PHASES, WorkGraphRepository, buildPipelineStatusOutput, checkDoltInstalled, createDatabaseAdapter, createDoltClient, createStateStore, detectCycles, findPackageRoot, formatOutput, formatPipelineStatusHuman, formatPipelineSummary, formatTokenTelemetry, getAllDescendantPids, getAutoHealthData, getSubstrateDefaultSettings, initSchema, initializeDolt, isSyncAdapter, parseDbTimestampAsUtc, registerHealthCommand, resolveBmadMethodSrcPath, resolveBmadMethodVersion, resolveMainRepoRoot } from "../health-C-VRJruD.js";
3
3
  import { createLogger } from "../logger-D2fS2ccL.js";
4
4
  import { AdapterRegistry } from "../adapter-registry-D2zdMwVu.js";
5
- import { AdapterTelemetryPersistence, AppError, DEFAULT_CONFIG, DEFAULT_ROUTING_POLICY, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, GitClient, GrammarLoader, IngestionServer, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createConfigSystem, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, registerRunCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runSolutioningPhase, validateStopAfterFromConflict } from "../run-CjMXknWq.js";
5
+ import { AdapterTelemetryPersistence, AppError, DEFAULT_CONFIG, DEFAULT_ROUTING_POLICY, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, GitClient, GrammarLoader, IngestionServer, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createConfigSystem, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, registerRunCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runSolutioningPhase, validateStopAfterFromConflict } from "../run-ClxNDHbr.js";
6
6
  import { CURRENT_CONFIG_FORMAT_VERSION, CURRENT_TASK_GRAPH_VERSION, PartialSubstrateConfigSchema } from "../config-migrator-CtGelIsG.js";
7
7
  import { ConfigError, createEventBus } from "../helpers-CpMs8VZX.js";
8
8
  import { RoutingRecommender } from "../routing-BVrxrM6v.js";
@@ -3549,7 +3549,7 @@ async function runSupervisorAction(options, deps = {}) {
3549
3549
  await initSchema(expAdapter);
3550
3550
  const { runRunAction: runPipeline } = await import(
3551
3551
  /* @vite-ignore */
3552
- "../run-5gEwE_sv.js"
3552
+ "../run-MAQ3Wuju.js"
3553
3553
  );
3554
3554
  const runStoryFn = async (opts) => {
3555
3555
  const exitCode = await runPipeline({
@@ -14155,6 +14155,19 @@ function createImplementationOrchestrator(deps) {
14155
14155
  let devFilesModified = [];
14156
14156
  const batchFileGroups = [];
14157
14157
  let devStoryWasSuccess = false;
14158
+ let baselineHeadSha;
14159
+ try {
14160
+ baselineHeadSha = execSync("git rev-parse HEAD", {
14161
+ cwd: projectRoot ?? process.cwd(),
14162
+ encoding: "utf-8",
14163
+ timeout: 3e3,
14164
+ stdio: [
14165
+ "ignore",
14166
+ "pipe",
14167
+ "pipe"
14168
+ ]
14169
+ }).trim();
14170
+ } catch {}
14158
14171
  try {
14159
14172
  let storyContentForAnalysis = "";
14160
14173
  try {
@@ -14528,26 +14541,46 @@ function createImplementationOrchestrator(deps) {
14528
14541
  if (devStoryWasSuccess) {
14529
14542
  gitDiffFiles = checkGitDiffFiles(projectRoot ?? process.cwd());
14530
14543
  if (gitDiffFiles.length === 0) {
14531
- logger$25.warn({ storyKey }, "Zero-diff detected after COMPLETE dev-story — no file changes in git working tree");
14532
- eventBus.emit("orchestrator:zero-diff-escalation", {
14533
- storyKey,
14534
- reason: "zero-diff-on-complete"
14535
- });
14536
- endPhase(storyKey, "dev-story");
14537
- updateStory(storyKey, {
14538
- phase: "ESCALATED",
14539
- error: "zero-diff-on-complete",
14540
- completedAt: new Date().toISOString()
14541
- });
14542
- await writeStoryMetricsBestEffort(storyKey, "escalated", 0);
14543
- await emitEscalation({
14544
+ let hasNewCommits = false;
14545
+ if (baselineHeadSha) try {
14546
+ const currentHead = execSync("git rev-parse HEAD", {
14547
+ cwd: projectRoot ?? process.cwd(),
14548
+ encoding: "utf-8",
14549
+ timeout: 3e3,
14550
+ stdio: [
14551
+ "ignore",
14552
+ "pipe",
14553
+ "pipe"
14554
+ ]
14555
+ }).trim();
14556
+ hasNewCommits = currentHead !== baselineHeadSha;
14557
+ } catch {}
14558
+ if (hasNewCommits) logger$25.info({
14544
14559
  storyKey,
14545
- lastVerdict: "zero-diff-on-complete",
14546
- reviewCycles: 0,
14547
- issues: ["dev-story completed with COMPLETE verdict but no file changes detected in git diff"]
14548
- });
14549
- await persistState();
14550
- return;
14560
+ baselineHeadSha
14561
+ }, "Working tree clean but new commits detected since dispatch — skipping zero-diff escalation");
14562
+ else {
14563
+ logger$25.warn({ storyKey }, "Zero-diff detected after COMPLETE dev-story — no file changes and no new commits");
14564
+ eventBus.emit("orchestrator:zero-diff-escalation", {
14565
+ storyKey,
14566
+ reason: "zero-diff-on-complete"
14567
+ });
14568
+ endPhase(storyKey, "dev-story");
14569
+ updateStory(storyKey, {
14570
+ phase: "ESCALATED",
14571
+ error: "zero-diff-on-complete",
14572
+ completedAt: new Date().toISOString()
14573
+ });
14574
+ await writeStoryMetricsBestEffort(storyKey, "escalated", 0);
14575
+ await emitEscalation({
14576
+ storyKey,
14577
+ lastVerdict: "zero-diff-on-complete",
14578
+ reviewCycles: 0,
14579
+ issues: ["dev-story completed with COMPLETE verdict but no file changes detected in git diff"]
14580
+ });
14581
+ await persistState();
14582
+ return;
14583
+ }
14551
14584
  }
14552
14585
  }
14553
14586
  endPhase(storyKey, "dev-story");
@@ -21398,4 +21431,4 @@ function registerRunCommand(program, _version = "0.0.0", projectRoot = process.c
21398
21431
 
21399
21432
  //#endregion
21400
21433
  export { AdapterTelemetryPersistence, AppError, DEFAULT_CONFIG, DEFAULT_ROUTING_POLICY, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, GitClient, GrammarLoader, IngestionServer, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createConfigSystem, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, registerRunCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runRunAction, runSolutioningPhase, validateStopAfterFromConflict };
21401
- //# sourceMappingURL=run-CjMXknWq.js.map
21434
+ //# sourceMappingURL=run-ClxNDHbr.js.map
@@ -1,6 +1,6 @@
1
1
  import "./health-C-VRJruD.js";
2
2
  import "./logger-D2fS2ccL.js";
3
- import { registerRunCommand, runRunAction } from "./run-CjMXknWq.js";
3
+ import { registerRunCommand, runRunAction } from "./run-ClxNDHbr.js";
4
4
  import "./config-migrator-CtGelIsG.js";
5
5
  import "./helpers-CpMs8VZX.js";
6
6
  import "./routing-BVrxrM6v.js";
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "substrate-ai",
3
- "version": "0.8.5",
3
+ "version": "0.9.0",
4
4
  "description": "Substrate — multi-agent orchestration daemon for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
+ "workspaces": [
8
+ "packages/*"
9
+ ],
7
10
  "author": "AI Dev Toolkit Contributors",
8
11
  "repository": {
9
12
  "type": "git",
@@ -45,8 +48,9 @@
45
48
  ],
46
49
  "scripts": {
47
50
  "agent-memory:bootstrap": "node scripts/bootstrap-agent-memory.mjs",
48
- "build": "tsdown",
51
+ "build": "tsc --build packages/core packages/sdlc packages/factory && tsdown",
49
52
  "postbuild": "cp -r src/cli/templates dist/cli/templates && cp src/modules/state/schema.sql dist/schema.sql",
53
+ "check:circular": "dpdm --no-warning --exit-code circular:1 packages/core/src/index.ts packages/sdlc/src/index.ts packages/factory/src/index.ts",
50
54
  "dev": "tsx watch src/cli/index.ts",
51
55
  "test": "vitest run --coverage",
52
56
  "test:fast": "vitest run --exclude 'src/__tests__/e2e/**' --exclude '**/*integration*' --exclude '**/*e2e*'",
@@ -57,7 +61,7 @@
57
61
  "lint:fix": "eslint src test --fix",
58
62
  "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
59
63
  "format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"",
60
- "typecheck": "tsc --noEmit",
64
+ "typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
61
65
  "typecheck:gate": "tsc --noEmit -p tsconfig.typecheck.json",
62
66
  "clean": "rm -rf dist",
63
67
  "substrate:dev": "node dist/cli/index.js"
@@ -86,6 +90,7 @@
86
90
  "@typescript-eslint/parser": "^8.18.0",
87
91
  "@vitest/coverage-v8": "^2.1.8",
88
92
  "@vitest/ui": "^2.1.8",
93
+ "dpdm": "^4.0.1",
89
94
  "eslint": "^9.17.0",
90
95
  "pino-pretty": "^13.0.0",
91
96
  "prettier": "^3.4.2",