substrate-ai 0.16.3 → 0.16.4

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, EXPERIMENT_RESULT, 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, getSessionCostSummary, getSessionCostSummaryFiltered, getStoryMetricsForRun, getTokenUsageSummary, incrementRunRestarts, initSchema, initializeDolt, listRequirements, listRunMetrics, loadParentRunDecisions, supersedeDecision, tagRunAsBaseline, updatePipelineRun } from "../dist-CLvAwmT7.js";
6
6
  import "../adapter-registry-DXLMTmfD.js";
7
- import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runSolutioningPhase, validateStopAfterFromConflict } from "../run-OxbO6gfq.js";
7
+ import { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runSolutioningPhase, validateStopAfterFromConflict } from "../run-CTgERHIt.js";
8
8
  import "../errors-D1LU8CZ9.js";
9
9
  import "../routing-CcBOCuC9.js";
10
10
  import "../decisions-C0pz9Clx.js";
@@ -4359,7 +4359,7 @@ async function runSupervisorAction(options, deps = {}) {
4359
4359
  await initSchema(expAdapter);
4360
4360
  const { runRunAction: runPipeline } = await import(
4361
4361
  /* @vite-ignore */
4362
- "../run-gmxBhQFJ.js"
4362
+ "../run-fic7JEAv.js"
4363
4363
  );
4364
4364
  const runStoryFn = async (opts) => {
4365
4365
  const exitCode = await runPipeline({
@@ -7,7 +7,7 @@ import { access, readFile, readdir, stat } from "fs/promises";
7
7
  import { EventEmitter } from "node:events";
8
8
  import yaml from "js-yaml";
9
9
  import * as actualFS from "node:fs";
10
- import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
10
+ import { accessSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, unwatchFile, watchFile, writeFileSync } from "node:fs";
11
11
  import { execFile, execSync, spawn } from "node:child_process";
12
12
  import path, { dirname as dirname$1, extname as extname$1, join as join$1, posix, resolve as resolve$1, win32 } from "node:path";
13
13
  import { tmpdir } from "node:os";
@@ -29094,6 +29094,20 @@ const FactoryExtendedConfigSchema = SubstrateConfigSchema.extend({ factory: Fact
29094
29094
  * @param explicitConfigPath - Optional explicit path to the config file (e.g. from `--config` flag).
29095
29095
  * @returns Parsed and validated `FactoryExtendedConfig` with all defaults applied.
29096
29096
  */
29097
+ /**
29098
+ * Resolve the config file path without loading it.
29099
+ * Returns the first existing path, or null if no config file found.
29100
+ */
29101
+ function resolveConfigPath(projectDir, explicitConfigPath) {
29102
+ const candidates = explicitConfigPath ? [explicitConfigPath] : [path.join(projectDir, ".substrate", "config.yaml"), path.join(projectDir, "config.yaml")];
29103
+ for (const candidate of candidates) try {
29104
+ accessSync(candidate);
29105
+ return candidate;
29106
+ } catch {
29107
+ continue;
29108
+ }
29109
+ return null;
29110
+ }
29097
29111
  async function loadFactoryConfig(projectDir, explicitConfigPath) {
29098
29112
  const configPaths = explicitConfigPath ? [explicitConfigPath] : [path.join(projectDir, ".substrate", "config.yaml"), path.join(projectDir, "config.yaml")];
29099
29113
  for (const configPath of configPaths) try {
@@ -29287,7 +29301,7 @@ function registerFactoryCommand(program, options) {
29287
29301
  });
29288
29302
  await factorySchema(adapter);
29289
29303
  const executor = createGraphExecutor();
29290
- const result = await executor.run(graph, {
29304
+ const executorConfig = {
29291
29305
  runId,
29292
29306
  logsRoot,
29293
29307
  handlerRegistry: createDefaultRegistry(),
@@ -29300,7 +29314,31 @@ function registerFactoryCommand(program, options) {
29300
29314
  plateauThreshold: factoryConfig.factory?.plateau_threshold ?? .05,
29301
29315
  satisfactionThreshold: factoryConfig.factory?.satisfaction_threshold ?? .8,
29302
29316
  qualityMode: factoryConfig.factory?.quality_mode ?? "dual-signal"
29303
- });
29317
+ };
29318
+ const configPath = resolveConfigPath(projectDir, opts.config);
29319
+ let watchingConfig = false;
29320
+ if (configPath) try {
29321
+ watchFile(configPath, { interval: 2e3 }, async () => {
29322
+ try {
29323
+ const updated = await loadFactoryConfig(projectDir, opts.config);
29324
+ const newThreshold = updated.factory?.satisfaction_threshold ?? .8;
29325
+ if (newThreshold !== executorConfig.satisfactionThreshold) {
29326
+ const oldThreshold = executorConfig.satisfactionThreshold;
29327
+ executorConfig.satisfactionThreshold = newThreshold;
29328
+ process.stderr.write(`[hot-reload] satisfaction_threshold changed: ${oldThreshold} → ${newThreshold}\n`);
29329
+ }
29330
+ } catch {}
29331
+ });
29332
+ watchingConfig = true;
29333
+ } catch {}
29334
+ let result;
29335
+ try {
29336
+ result = await executor.run(graph, executorConfig);
29337
+ } finally {
29338
+ if (watchingConfig && configPath) try {
29339
+ unwatchFile(configPath);
29340
+ } catch {}
29341
+ }
29304
29342
  if (result.status === "SUCCESS") process.stdout.write("Pipeline completed successfully.\n");
29305
29343
  else process.stderr.write("Pipeline failed: " + (result.failureReason ?? result.status) + "\n");
29306
29344
  } catch (err) {
@@ -30985,4 +31023,4 @@ function registerRunCommand(program, _version = "0.0.0", projectRoot = process.c
30985
31023
 
30986
31024
  //#endregion
30987
31025
  export { AdapterTelemetryPersistence, AppError, DoltRepoMapMetaRepository, DoltSymbolRepository, ERR_REPO_MAP_STORAGE_WRITE, GitClient, GrammarLoader, RepoMapInjector, RepoMapModule, RepoMapQueryEngine, RepoMapStorage, SymbolParser, createContextCompiler, createDispatcher, createEventEmitter, createImplementationOrchestrator, createPackLoader, createPhaseOrchestrator, createStopAfterGate, createTelemetryAdvisor, formatPhaseCompletionSummary, getFactoryRunSummaries, getScenarioResultsForRun, getTwinRunsForRun, listGraphRuns, normalizeGraphSummaryToStatus, registerFactoryCommand, registerRunCommand, registerScenariosCommand, resolveStoryKeys, runAnalysisPhase, runPlanningPhase, runRunAction, runSolutioningPhase, validateStopAfterFromConflict };
30988
- //# sourceMappingURL=run-OxbO6gfq.js.map
31026
+ //# sourceMappingURL=run-CTgERHIt.js.map
@@ -2,7 +2,7 @@ import "./health-DswaC1q5.js";
2
2
  import "./logger-KeHncl-f.js";
3
3
  import "./helpers-CElYrONe.js";
4
4
  import "./dist-CLvAwmT7.js";
5
- import { normalizeGraphSummaryToStatus, registerRunCommand, runRunAction } from "./run-OxbO6gfq.js";
5
+ import { normalizeGraphSummaryToStatus, registerRunCommand, runRunAction } from "./run-CTgERHIt.js";
6
6
  import "./routing-CcBOCuC9.js";
7
7
  import "./decisions-C0pz9Clx.js";
8
8
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "substrate-ai",
3
- "version": "0.16.3",
3
+ "version": "0.16.4",
4
4
  "description": "Substrate — multi-agent orchestration daemon for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",