@gobing-ai/spur 0.3.32 → 0.3.34

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/spur.js CHANGED
@@ -47,7 +47,7 @@ var __export = (target, all) => {
47
47
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
48
48
  var __require = import.meta.require;
49
49
 
50
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.18/node_modules/@gobing-ai/ts-utils/dist/errors.js
50
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.19/node_modules/@gobing-ai/ts-utils/dist/errors.js
51
51
  var ErrorCode;
52
52
  var init_errors = __esm(() => {
53
53
  ErrorCode = {
@@ -58,7 +58,7 @@ var init_errors = __esm(() => {
58
58
  };
59
59
  });
60
60
 
61
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.18/node_modules/@gobing-ai/ts-utils/dist/api-response.js
61
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.19/node_modules/@gobing-ai/ts-utils/dist/api-response.js
62
62
  var API_ERROR_CODES, ERROR_CODE_TO_HTTP, CLIENT_SAFE_CODES;
63
63
  var init_api_response = __esm(() => {
64
64
  init_errors();
@@ -81,10 +81,10 @@ var init_api_response = __esm(() => {
81
81
  CLIENT_SAFE_CODES = new Set([ErrorCode.NotFound, ErrorCode.Validation, ErrorCode.Conflict]);
82
82
  });
83
83
 
84
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.18/node_modules/@gobing-ai/ts-utils/dist/cursor.js
84
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.19/node_modules/@gobing-ai/ts-utils/dist/cursor.js
85
85
  var init_cursor = () => {};
86
86
 
87
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.18/node_modules/@gobing-ai/ts-utils/dist/object.js
87
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.19/node_modules/@gobing-ai/ts-utils/dist/object.js
88
88
  function isPlainObject(value) {
89
89
  return typeof value === "object" && value !== null && !Array.isArray(value);
90
90
  }
@@ -102,7 +102,7 @@ function deepMerge(target, source) {
102
102
  return result;
103
103
  }
104
104
 
105
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.18/node_modules/@gobing-ai/ts-utils/dist/output.js
105
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.19/node_modules/@gobing-ai/ts-utils/dist/output.js
106
106
  function processStream(name) {
107
107
  const proc = globalThis.process;
108
108
  const stream = proc?.[name];
@@ -123,7 +123,7 @@ function echoError(message, target = defaultStderrTarget ?? processStream("stder
123
123
  }
124
124
  var defaultStdoutTarget, defaultStderrTarget;
125
125
 
126
- // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.18/node_modules/@gobing-ai/ts-utils/dist/index.js
126
+ // ../../node_modules/.bun/@gobing-ai+ts-utils@0.4.19/node_modules/@gobing-ai/ts-utils/dist/index.js
127
127
  var init_dist = __esm(() => {
128
128
  init_api_response();
129
129
  init_cursor();
@@ -21745,7 +21745,7 @@ var init_zod = __esm(() => {
21745
21745
  init_external();
21746
21746
  });
21747
21747
 
21748
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/config.js
21748
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/config.js
21749
21749
  function getProcessEnv() {
21750
21750
  return process.env;
21751
21751
  }
@@ -21823,7 +21823,7 @@ var init_config = __esm(() => {
21823
21823
  };
21824
21824
  });
21825
21825
 
21826
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21826
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
21827
21827
  import { appendFileSync, cpSync, createReadStream, createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "fs";
21828
21828
  import { dirname, resolve as resolvePath } from "path";
21829
21829
  function createNodeFileSystem(root, paths) {
@@ -21910,7 +21910,7 @@ function findProjectRoot(startDir) {
21910
21910
  }
21911
21911
  var init_file_system_node = () => {};
21912
21912
 
21913
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/db-errors.js
21913
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/db-errors.js
21914
21914
  var DbModuleNotInstalledError;
21915
21915
  var init_db_errors = __esm(() => {
21916
21916
  DbModuleNotInstalledError = class DbModuleNotInstalledError extends Error {
@@ -29101,7 +29101,7 @@ var init_execa = __esm(() => {
29101
29101
  } = getIpcExport());
29102
29102
  });
29103
29103
 
29104
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/process-executor.js
29104
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/process-executor.js
29105
29105
  import { isatty } from "tty";
29106
29106
 
29107
29107
  class NodeProcessExecutor {
@@ -29371,12 +29371,13 @@ class BunPipeProcess {
29371
29371
  }
29372
29372
  }
29373
29373
  function buildExecaOptions(opts) {
29374
- const canStream = !opts.forceBuffered && opts.outputPolicy?.mode === "stream" && (opts.outputPolicy.isTTY ?? process.stdout.isTTY ?? isatty(1));
29374
+ const mode = opts.forceBuffered ? "buffered" : opts.outputPolicy?.mode ?? "buffered";
29375
+ const streamToTerminal = mode === "stream" && (opts.outputPolicy?.mode === "stream" ? opts.outputPolicy.isTTY ?? process.stdout.isTTY ?? isatty(1) : false);
29375
29376
  return {
29376
29377
  reject: opts.rejectOnError,
29377
29378
  stdin: "ignore",
29378
29379
  stripFinalNewline: true,
29379
- ...canStream ? { stdout: ["inherit", "pipe"], stderr: ["inherit", "pipe"] } : { all: true },
29380
+ ...mode === "pipe" ? { stdout: "pipe", stderr: "pipe" } : streamToTerminal ? { stdout: ["inherit", "pipe"], stderr: ["inherit", "pipe"] } : { all: true },
29380
29381
  ...opts.cwd !== undefined ? { cwd: opts.cwd } : {},
29381
29382
  ...opts.env !== undefined ? { env: opts.env } : {},
29382
29383
  ...opts.timeout !== undefined ? { timeout: opts.timeout } : {},
@@ -29439,7 +29440,7 @@ var init_process_executor = __esm(() => {
29439
29440
  init_execa();
29440
29441
  });
29441
29442
 
29442
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/runtime-node-bun.js
29443
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/runtime-node-bun.js
29443
29444
  function getNodeFileSystem() {
29444
29445
  if (!_nodeFileSystem)
29445
29446
  _nodeFileSystem = createNodeFileSystem();
@@ -29499,7 +29500,7 @@ var init_runtime_node_bun = __esm(() => {
29499
29500
  };
29500
29501
  });
29501
29502
 
29502
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/context.js
29503
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/context.js
29503
29504
  class RuntimeContext {
29504
29505
  scope;
29505
29506
  runtimeName;
@@ -29569,7 +29570,7 @@ var init_context = __esm(() => {
29569
29570
  init_runtime_node_bun();
29570
29571
  });
29571
29572
 
29572
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/path.js
29573
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/path.js
29573
29574
  function normalizeSeparators(path6) {
29574
29575
  return path6.replaceAll("\\", "/");
29575
29576
  }
@@ -29630,17 +29631,17 @@ var init_path = __esm(() => {
29630
29631
  SEP = globalThis.process?.platform === "win32" ? "\\" : "/";
29631
29632
  });
29632
29633
 
29633
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/schema-validation.js
29634
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/schema-validation.js
29634
29635
  var REMOTE_SCHEMA_MAX_BYTES;
29635
29636
  var init_schema_validation = __esm(() => {
29636
29637
  init_dist2();
29637
29638
  REMOTE_SCHEMA_MAX_BYTES = 5 * 1024 * 1024;
29638
29639
  });
29639
29640
 
29640
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/types.js
29641
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/types.js
29641
29642
  var init_types = () => {};
29642
29643
 
29643
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/index.js
29644
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/index.js
29644
29645
  var init_dist3 = __esm(() => {
29645
29646
  init_config();
29646
29647
  init_context();
@@ -29649,7 +29650,7 @@ var init_dist3 = __esm(() => {
29649
29650
  init_types();
29650
29651
  });
29651
29652
 
29652
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+3ba223a3e166c92f/node_modules/@gobing-ai/ts-runtime/dist/bun-sqlite.js
29653
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+1d5c5fe73da9d0ae/node_modules/@gobing-ai/ts-runtime/dist/bun-sqlite.js
29653
29654
  import { Database } from "bun:sqlite";
29654
29655
  var init_bun_sqlite = () => {};
29655
29656
 
@@ -33841,7 +33842,7 @@ var init_bun_sqlite2 = __esm(() => {
33841
33842
  init_session2();
33842
33843
  });
33843
33844
 
33844
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/inbox-messages.js
33845
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/inbox-messages.js
33845
33846
  var inboxMessages;
33846
33847
  var init_inbox_messages = __esm(() => {
33847
33848
  init_sqlite_core();
@@ -33860,7 +33861,7 @@ var init_inbox_messages = __esm(() => {
33860
33861
  }, (table2) => [index("idx_inbox_messages_to_status").on(table2.toId, table2.status)]);
33861
33862
  });
33862
33863
 
33863
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/common.js
33864
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/common.js
33864
33865
  function nowTimestamp() {
33865
33866
  return Date.now();
33866
33867
  }
@@ -33889,7 +33890,7 @@ var init_common3 = __esm(() => {
33889
33890
  appendOnlyColumns = buildAppendOnlyColumns();
33890
33891
  });
33891
33892
 
33892
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/queue-jobs.js
33893
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/queue-jobs.js
33893
33894
  var queueJobs;
33894
33895
  var init_queue_jobs = __esm(() => {
33895
33896
  init_sqlite_core();
@@ -33909,7 +33910,7 @@ var init_queue_jobs = __esm(() => {
33909
33910
  }, (table2) => [index("queue_jobs_ready_idx").on(table2.status, table2.nextRetryAt, table2.createdAt)]);
33910
33911
  });
33911
33912
 
33912
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/runtime.js
33913
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/runtime.js
33913
33914
  var exports_runtime = {};
33914
33915
  __export(exports_runtime, {
33915
33916
  queueJobs: () => queueJobs,
@@ -33920,7 +33921,7 @@ var init_runtime = __esm(() => {
33920
33921
  init_queue_jobs();
33921
33922
  });
33922
33923
 
33923
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/adapters/bun-sqlite.js
33924
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/adapters/bun-sqlite.js
33924
33925
  var exports_bun_sqlite = {};
33925
33926
  __export(exports_bun_sqlite, {
33926
33927
  BunSqliteAdapter: () => BunSqliteAdapter
@@ -34211,7 +34212,7 @@ var init_d1 = __esm(() => {
34211
34212
  init_session3();
34212
34213
  });
34213
34214
 
34214
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/adapters/d1.js
34215
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/adapters/d1.js
34215
34216
  var exports_d1 = {};
34216
34217
  __export(exports_d1, {
34217
34218
  D1Adapter: () => D1Adapter
@@ -34275,7 +34276,7 @@ var init_d12 = __esm(() => {
34275
34276
  init_runtime();
34276
34277
  });
34277
34278
 
34278
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/adapter.js
34279
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/adapter.js
34279
34280
  async function createDbAdapter(config3) {
34280
34281
  switch (config3.driver) {
34281
34282
  case "bun-sqlite": {
@@ -34315,7 +34316,7 @@ var init_drizzle_orm = __esm(() => {
34315
34316
  init_view_common();
34316
34317
  });
34317
34318
 
34318
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/query-spec.js
34319
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/query-spec.js
34319
34320
  function compilePredicate(predicate) {
34320
34321
  if ("and" in predicate) {
34321
34322
  const parts = predicate.and.map(compilePredicate).filter((p) => p !== undefined);
@@ -34353,7 +34354,7 @@ var init_query_spec = __esm(() => {
34353
34354
  };
34354
34355
  });
34355
34356
 
34356
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/base-dao.js
34357
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/base-dao.js
34357
34358
  function asSelectQuery(query) {
34358
34359
  return query;
34359
34360
  }
@@ -34395,7 +34396,7 @@ var init_base_dao = __esm(() => {
34395
34396
  init_query_spec();
34396
34397
  });
34397
34398
 
34398
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/embedded-migrations.js
34399
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/embedded-migrations.js
34399
34400
  var embeddedMigrations;
34400
34401
  var init_embedded_migrations = __esm(() => {
34401
34402
  embeddedMigrations = [
@@ -34427,7 +34428,7 @@ var init_embedded_migrations = __esm(() => {
34427
34428
  ];
34428
34429
  });
34429
34430
 
34430
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/entity-dao.js
34431
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/entity-dao.js
34431
34432
  var EntityDao;
34432
34433
  var init_entity_dao = __esm(() => {
34433
34434
  init_drizzle_orm();
@@ -34589,7 +34590,7 @@ var init_entity_dao = __esm(() => {
34589
34590
  };
34590
34591
  });
34591
34592
 
34592
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/inbox-message-dao.js
34593
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/inbox-message-dao.js
34593
34594
  function isPromiseLike(value) {
34594
34595
  return value !== null && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
34595
34596
  }
@@ -34762,7 +34763,7 @@ var init_migrator2 = __esm(() => {
34762
34763
  init_migrator();
34763
34764
  });
34764
34765
 
34765
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/migrate.js
34766
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/migrate.js
34766
34767
  async function ensureJournalTable(adapter, table3) {
34767
34768
  await adapter.exec(`CREATE TABLE IF NOT EXISTS "${table3}" (` + "id INTEGER PRIMARY KEY AUTOINCREMENT, " + "hash text NOT NULL, " + "created_at numeric" + ")");
34768
34769
  }
@@ -34837,7 +34838,7 @@ var init_migrate = __esm(() => {
34837
34838
  init_embedded_migrations();
34838
34839
  });
34839
34840
 
34840
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/queue-job-dao.js
34841
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/queue-job-dao.js
34841
34842
  var QueueJobDao;
34842
34843
  var init_queue_job_dao = __esm(() => {
34843
34844
  init_drizzle_orm();
@@ -34978,7 +34979,7 @@ var init_queue_job_dao = __esm(() => {
34978
34979
  };
34979
34980
  });
34980
34981
 
34981
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/index.js
34982
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/index.js
34982
34983
  var exports_dist = {};
34983
34984
  __export(exports_dist, {
34984
34985
  embeddedMigrations: () => embeddedMigrations,
@@ -37360,9 +37361,9 @@ var init_src = __esm(() => {
37360
37361
  AgentConfigSchema = exports_external.object({
37361
37362
  default: exports_external.string().optional(),
37362
37363
  executors: exports_external.array(AgentExecutorConfigSchema).optional(),
37363
- "default-by-phase": exports_external.record(exports_external.string(), exports_external.string()).optional(),
37364
37364
  team: exports_external.record(exports_external.string(), TeamConfigSchema).optional(),
37365
- output: AgentOutputConfigSchema.optional()
37365
+ output: AgentOutputConfigSchema.optional(),
37366
+ sessionAffinity: exports_external.boolean().optional()
37366
37367
  }).superRefine((value, ctx) => {
37367
37368
  const executors = value.executors;
37368
37369
  if (executors !== undefined) {
@@ -37464,7 +37465,7 @@ var init_src = __esm(() => {
37464
37465
  });
37465
37466
  });
37466
37467
 
37467
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/config.js
37468
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/config.js
37468
37469
  function parseYamlObject(text3) {
37469
37470
  let parsed;
37470
37471
  try {
@@ -37591,7 +37592,7 @@ var init_config2 = __esm(() => {
37591
37592
  };
37592
37593
  });
37593
37594
 
37594
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
37595
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/file-system-node.js
37595
37596
  import { appendFileSync as appendFileSync3, cpSync as cpSync2, createReadStream as createReadStream3, createWriteStream as createWriteStream3, existsSync as existsSync2, mkdirSync as mkdirSync2, readdirSync as readdirSync2, readFileSync as readFileSync4, realpathSync as realpathSync2, renameSync as renameSync2, rmSync as rmSync2, statSync as statSync3, writeFileSync as writeFileSync3 } from "fs";
37596
37597
  import { dirname as dirname2, resolve as resolvePath3 } from "path";
37597
37598
  function createNodeFileSystem3(root, paths) {
@@ -37678,7 +37679,7 @@ function findProjectRoot3(startDir) {
37678
37679
  }
37679
37680
  var init_file_system_node2 = () => {};
37680
37681
 
37681
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/db-errors.js
37682
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/db-errors.js
37682
37683
  var D1NotConfiguredError2, DbModuleNotInstalledError3;
37683
37684
  var init_db_errors2 = __esm(() => {
37684
37685
  D1NotConfiguredError2 = class D1NotConfiguredError2 extends Error {
@@ -37695,7 +37696,7 @@ var init_db_errors2 = __esm(() => {
37695
37696
  };
37696
37697
  });
37697
37698
 
37698
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/file-system-cf.js
37699
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/file-system-cf.js
37699
37700
  function createCfFileSystem2() {
37700
37701
  return {
37701
37702
  getProjectRoot: () => "/bundle",
@@ -37734,7 +37735,7 @@ function createCfFileSystem2() {
37734
37735
  }
37735
37736
  var UNSUPPORTED = "FileSystem is not available on Cloudflare Workers. Use D1, KV, or R2 for persistent storage.";
37736
37737
 
37737
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/runtime-cf.js
37738
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/runtime-cf.js
37738
37739
  var exports_runtime_cf = {};
37739
37740
  __export(exports_runtime_cf, {
37740
37741
  cloudflareWorkersFactory: () => cloudflareWorkersFactory2
@@ -37772,7 +37773,7 @@ var init_runtime_cf = __esm(() => {
37772
37773
  };
37773
37774
  });
37774
37775
 
37775
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/process-executor.js
37776
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/process-executor.js
37776
37777
  import { isatty as isatty2 } from "tty";
37777
37778
 
37778
37779
  class NodeProcessExecutor3 {
@@ -38082,12 +38083,13 @@ class BunPipeProcessSpawner2 {
38082
38083
  }
38083
38084
  }
38084
38085
  function buildExecaOptions2(opts) {
38085
- const canStream = !opts.forceBuffered && opts.outputPolicy?.mode === "stream" && (opts.outputPolicy.isTTY ?? process.stdout.isTTY ?? isatty2(1));
38086
+ const mode = opts.forceBuffered ? "buffered" : opts.outputPolicy?.mode ?? "buffered";
38087
+ const streamToTerminal = mode === "stream" && (opts.outputPolicy?.mode === "stream" ? opts.outputPolicy.isTTY ?? process.stdout.isTTY ?? isatty2(1) : false);
38086
38088
  return {
38087
38089
  reject: opts.rejectOnError,
38088
38090
  stdin: "ignore",
38089
38091
  stripFinalNewline: true,
38090
- ...canStream ? { stdout: ["inherit", "pipe"], stderr: ["inherit", "pipe"] } : { all: true },
38092
+ ...mode === "pipe" ? { stdout: "pipe", stderr: "pipe" } : streamToTerminal ? { stdout: ["inherit", "pipe"], stderr: ["inherit", "pipe"] } : { all: true },
38091
38093
  ...opts.cwd !== undefined ? { cwd: opts.cwd } : {},
38092
38094
  ...opts.env !== undefined ? { env: opts.env } : {},
38093
38095
  ...opts.timeout !== undefined ? { timeout: opts.timeout } : {},
@@ -38157,7 +38159,7 @@ var init_process_executor2 = __esm(() => {
38157
38159
  ProcessExecutor2 = NodeProcessExecutor3;
38158
38160
  });
38159
38161
 
38160
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/runtime-node-bun.js
38162
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/runtime-node-bun.js
38161
38163
  var exports_runtime_node_bun = {};
38162
38164
  __export(exports_runtime_node_bun, {
38163
38165
  nodeBunFactory: () => nodeBunFactory3,
@@ -38225,7 +38227,7 @@ var init_runtime_node_bun2 = __esm(() => {
38225
38227
  };
38226
38228
  });
38227
38229
 
38228
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/platform.js
38230
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/platform.js
38229
38231
  function isCloudflareWorkerRuntime2() {
38230
38232
  return globalThis.navigator?.userAgent?.startsWith("Cloudflare-Workers") ?? false;
38231
38233
  }
@@ -38255,7 +38257,7 @@ function _resetRuntimeFactory2() {
38255
38257
  }
38256
38258
  var _factory, _runtimeName;
38257
38259
 
38258
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/context.js
38260
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/context.js
38259
38261
  class RuntimeContext2 {
38260
38262
  scope;
38261
38263
  runtimeName;
@@ -38345,7 +38347,7 @@ var init_context2 = __esm(() => {
38345
38347
  init_runtime_node_bun2();
38346
38348
  });
38347
38349
 
38348
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/path.js
38350
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/path.js
38349
38351
  function normalizeSeparators2(path7) {
38350
38352
  return path7.replaceAll("\\", "/");
38351
38353
  }
@@ -38468,7 +38470,7 @@ var init_path2 = __esm(() => {
38468
38470
  SEP2 = globalThis.process?.platform === "win32" ? "\\" : "/";
38469
38471
  });
38470
38472
 
38471
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/fs.js
38473
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/fs.js
38472
38474
  async function ensureDirForFile2(path7, fs2 = createNodeFileSystem3()) {
38473
38475
  await fs2.ensureDir(dirnamePath(path7));
38474
38476
  }
@@ -38519,7 +38521,7 @@ var init_fs = __esm(() => {
38519
38521
  init_path2();
38520
38522
  });
38521
38523
 
38522
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/process-registry.js
38524
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/process-registry.js
38523
38525
  function allocateId() {
38524
38526
  nextIdSeq += 1;
38525
38527
  return `pe_${Date.now().toString(36)}_${nextIdSeq.toString(36)}`;
@@ -38643,7 +38645,7 @@ function createInMemoryProcessRegistry2(options) {
38643
38645
  }
38644
38646
  var nextIdSeq = 0;
38645
38647
 
38646
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/runtime-paths.js
38648
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/runtime-paths.js
38647
38649
  function ambientRuntimePaths2() {
38648
38650
  const cwd = getProcessCwd2();
38649
38651
  return { cwd, home: getHomeDir() ?? cwd };
@@ -38653,7 +38655,7 @@ var init_runtime_paths = __esm(() => {
38653
38655
  init_path2();
38654
38656
  });
38655
38657
 
38656
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/schema-validation.js
38658
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/schema-validation.js
38657
38659
  async function loadStructuredConfig(path7, options = {}) {
38658
38660
  const content = await (options.fileSystem ?? createNodeFileSystem3()).readFile(path7);
38659
38661
  return await parseStructuredConfig(content, path7, options);
@@ -38930,10 +38932,10 @@ var init_schema_validation2 = __esm(() => {
38930
38932
  defaultResolve = typeof Bun !== "undefined" ? (specifier, from) => Bun.resolveSync(specifier, from) : undefined;
38931
38933
  });
38932
38934
 
38933
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/types.js
38935
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/types.js
38934
38936
  var init_types2 = () => {};
38935
38937
 
38936
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/index.js
38938
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/index.js
38937
38939
  var exports_dist2 = {};
38938
38940
  __export(exports_dist2, {
38939
38941
  writeJsonFile: () => writeJsonFile2,
@@ -41084,7 +41086,7 @@ var init_mod = __esm(() => {
41084
41086
  init_config3();
41085
41087
  });
41086
41088
 
41087
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/logger.js
41089
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/logger.js
41088
41090
  function toLogTapeLevel(level) {
41089
41091
  return level === "warn" ? "warning" : level;
41090
41092
  }
@@ -42637,7 +42639,7 @@ var require_src = __commonJS((exports) => {
42637
42639
  };
42638
42640
  });
42639
42641
 
42640
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/telemetry/sdk.js
42642
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/telemetry/sdk.js
42641
42643
  function getTelemetryConfig(configPartial = {}) {
42642
42644
  return {
42643
42645
  enabled: configPartial.enabled ?? CONFIG_DEFAULTS.enabled,
@@ -42673,7 +42675,7 @@ var init_sdk = __esm(() => {
42673
42675
  resolvedConfig = getTelemetryConfig();
42674
42676
  });
42675
42677
 
42676
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/telemetry/tracing.js
42678
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/telemetry/tracing.js
42677
42679
  function isSuppressed(tracer2) {
42678
42680
  return tracer2 === undefined && !getResolvedConfig().enabled;
42679
42681
  }
@@ -42713,7 +42715,7 @@ var init_tracing2 = __esm(() => {
42713
42715
  import_api2 = __toESM(require_src(), 1);
42714
42716
  });
42715
42717
 
42716
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/telemetry/metrics.js
42718
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/telemetry/metrics.js
42717
42719
  function getMeter() {
42718
42720
  return import_api3.metrics.getMeter(METER_NAME, METER_VERSION);
42719
42721
  }
@@ -42810,7 +42812,7 @@ var init_metrics = __esm(() => {
42810
42812
  instruments = {};
42811
42813
  });
42812
42814
 
42813
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/event-bus/event-bus.js
42815
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/event-bus/event-bus.js
42814
42816
  function busLogger() {
42815
42817
  if (!_busLogger)
42816
42818
  _busLogger = getLogger2("event-bus");
@@ -43055,7 +43057,7 @@ var init_event_bus = __esm(() => {
43055
43057
  init_metrics();
43056
43058
  });
43057
43059
 
43058
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/event-bus/default-observers.js
43060
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/event-bus/default-observers.js
43059
43061
  function obsLogger() {
43060
43062
  if (!_obsLogger)
43061
43063
  _obsLogger = getLogger2("event-bus.observers");
@@ -43119,7 +43121,7 @@ var init_default_observers = __esm(() => {
43119
43121
  init_event_bus();
43120
43122
  });
43121
43123
 
43122
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/event-bus/file-observer.js
43124
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/event-bus/file-observer.js
43123
43125
  function parentDir(filePath) {
43124
43126
  const idx = filePath.lastIndexOf("/");
43125
43127
  return idx <= 0 ? "." : filePath.slice(0, idx);
@@ -43217,7 +43219,7 @@ var init_file_observer = __esm(() => {
43217
43219
  init_logger3();
43218
43220
  });
43219
43221
 
43220
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/internals/drain.js
43222
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/internals/drain.js
43221
43223
  function settleWithin(promise2, deadline) {
43222
43224
  const remaining = deadline - Date.now();
43223
43225
  if (remaining <= 0)
@@ -43232,7 +43234,7 @@ function settleWithin(promise2, deadline) {
43232
43234
  return settled;
43233
43235
  }
43234
43236
 
43235
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/scheduler/node.js
43237
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/scheduler/node.js
43236
43238
  function parseInterval(cron) {
43237
43239
  const trimmed = cron.trim();
43238
43240
  const num = Number(trimmed);
@@ -43325,7 +43327,7 @@ var init_node3 = __esm(() => {
43325
43327
  init_metrics();
43326
43328
  });
43327
43329
 
43328
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/scheduler-node.js
43330
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/scheduler-node.js
43329
43331
  var exports_scheduler_node = {};
43330
43332
  __export(exports_scheduler_node, {
43331
43333
  NodeSchedulerAdapter: () => NodeSchedulerAdapter
@@ -51465,7 +51467,7 @@ var init_drizzle_zod = __esm(() => {
51465
51467
  };
51466
51468
  });
51467
51469
 
51468
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/drizzle-internals.js
51470
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/drizzle-internals.js
51469
51471
  function sqlExpressionToText(value) {
51470
51472
  if (typeof value !== "object" || value === null || !("queryChunks" in value)) {
51471
51473
  return;
@@ -51488,7 +51490,7 @@ function getDrizzleTableName(table3) {
51488
51490
  return String(table3[nameSym]);
51489
51491
  }
51490
51492
 
51491
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/ddl.js
51493
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/ddl.js
51492
51494
  function quoteIdent(name) {
51493
51495
  return `"${name.replace(/"/g, '""')}"`;
51494
51496
  }
@@ -51582,7 +51584,7 @@ var init_ddl = __esm(() => {
51582
51584
  init_sqlite_core();
51583
51585
  });
51584
51586
 
51585
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/define-table.js
51587
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/define-table.js
51586
51588
  function defineTable(name, columns2) {
51587
51589
  const table3 = sqliteTable(name, columns2);
51588
51590
  let insert2;
@@ -51616,7 +51618,7 @@ var init_define_table = __esm(() => {
51616
51618
  init_ddl();
51617
51619
  });
51618
51620
 
51619
- // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.18+c31add66cbc22fb3/node_modules/@gobing-ai/ts-db/dist/schema/index.js
51621
+ // ../../node_modules/.bun/@gobing-ai+ts-db@0.4.19+035ffc9bc0428b94/node_modules/@gobing-ai/ts-db/dist/schema/index.js
51620
51622
  var init_schema = __esm(() => {
51621
51623
  init_sqlite_core();
51622
51624
  init_define_table();
@@ -52241,7 +52243,7 @@ var init_dao = __esm(() => {
52241
52243
  init_workspace_dao();
52242
52244
  });
52243
52245
 
52244
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/errors.js
52246
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/errors.js
52245
52247
  var WorkflowValidationError, FSMError, RunCollisionError, WorkflowResumeError;
52246
52248
  var init_errors6 = __esm(() => {
52247
52249
  WorkflowValidationError = class WorkflowValidationError extends Error {
@@ -52276,12 +52278,12 @@ var init_errors6 = __esm(() => {
52276
52278
  };
52277
52279
  });
52278
52280
 
52279
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/event-bus/index.js
52281
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/event-bus/index.js
52280
52282
  var init_event_bus2 = __esm(() => {
52281
52283
  init_event_bus();
52282
52284
  });
52283
52285
 
52284
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/api-client.js
52286
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/api-client.js
52285
52287
  function sanitizeUrlForObservability(url2) {
52286
52288
  try {
52287
52289
  const parsed = new URL(url2);
@@ -52511,12 +52513,12 @@ var init_api_client = __esm(() => {
52511
52513
  };
52512
52514
  });
52513
52515
 
52514
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/telemetry/index.js
52516
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/telemetry/index.js
52515
52517
  var init_telemetry = __esm(() => {
52516
52518
  init_tracing2();
52517
52519
  });
52518
52520
 
52519
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/index.js
52521
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/index.js
52520
52522
  var init_dist6 = __esm(() => {
52521
52523
  init_api_client();
52522
52524
  init_event_bus2();
@@ -52524,7 +52526,7 @@ var init_dist6 = __esm(() => {
52524
52526
  init_telemetry();
52525
52527
  });
52526
52528
 
52527
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/run-lifecycle.js
52529
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/run-lifecycle.js
52528
52530
  function runtimeBuiltins(workflowName, stateOrNodeId, runId, transitionsTaken, mode) {
52529
52531
  return {
52530
52532
  workflow: workflowName,
@@ -52783,7 +52785,7 @@ var init_run_lifecycle = __esm(() => {
52783
52785
  ];
52784
52786
  });
52785
52787
 
52786
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/schema.js
52788
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/schema.js
52787
52789
  var RESERVED_VAR_NAMES, IDENTIFIER, VarsSchema, EnvSchema, ActionDefSchema, GuardDefSchema, StateMachineWorkflowDefSchema, TransitionFlowWorkflowDefSchema, WorkflowDefSchema;
52788
52790
  var init_schema2 = __esm(() => {
52789
52791
  init_zod();
@@ -52868,7 +52870,7 @@ var init_schema2 = __esm(() => {
52868
52870
  WorkflowDefSchema = exports_external.union([StateMachineWorkflowDefSchema, TransitionFlowWorkflowDefSchema]);
52869
52871
  });
52870
52872
 
52871
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/config.js
52873
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/config.js
52872
52874
  async function loadWorkflowDef(path9, options = {}) {
52873
52875
  return parseWorkflowDef(await loadStructuredConfig(path9, options), path9);
52874
52876
  }
@@ -53035,7 +53037,7 @@ var init_config4 = __esm(() => {
53035
53037
  RUNTIME_TEMPLATE_NAMESPACES = new Set(RUNTIME_BUILTIN_KEYS);
53036
53038
  });
53037
53039
 
53038
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/extension/capability-registry.js
53040
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/extension/capability-registry.js
53039
53041
  class CapabilityRegistry {
53040
53042
  kind;
53041
53043
  capabilities = new Map;
@@ -53066,7 +53068,7 @@ class CapabilityRegistry {
53066
53068
  }
53067
53069
  }
53068
53070
 
53069
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/extension/extension-path.js
53071
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/extension/extension-path.js
53070
53072
  function assertRelativeExtensionPath(path9, options = {}) {
53071
53073
  const where = options.sourceName !== undefined ? ` declared by "${options.sourceName}"` : "";
53072
53074
  if (/^([/\\]|[A-Za-z]:[/\\])/.test(path9)) {
@@ -53077,20 +53079,20 @@ function assertRelativeExtensionPath(path9, options = {}) {
53077
53079
  }
53078
53080
  }
53079
53081
 
53080
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/extension/extension-loader.js
53082
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/extension/extension-loader.js
53081
53083
  var init_extension_loader = () => {};
53082
53084
 
53083
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/extension/index.js
53085
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/extension/index.js
53084
53086
  var init_extension = __esm(() => {
53085
53087
  init_extension_loader();
53086
53088
  });
53087
53089
 
53088
- // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.18+0c3519262b4dbb18/node_modules/@gobing-ai/ts-runtime/dist/extension.js
53090
+ // ../../node_modules/.bun/@gobing-ai+ts-runtime@0.4.19+e40533aaad760d62/node_modules/@gobing-ai/ts-runtime/dist/extension.js
53089
53091
  var init_extension2 = __esm(() => {
53090
53092
  init_extension();
53091
53093
  });
53092
53094
 
53093
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/host.js
53095
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/host.js
53094
53096
  class WorkflowEngineHost {
53095
53097
  lifecycleBus;
53096
53098
  actions = new CapabilityRegistry("workflow action");
@@ -53259,7 +53261,7 @@ var init_host = __esm(() => {
53259
53261
  init_errors6();
53260
53262
  });
53261
53263
 
53262
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/schema-sql.js
53264
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/schema-sql.js
53263
53265
  var WORKFLOW_ENGINE_SCHEMA_SQL;
53264
53266
  var init_schema_sql = __esm(() => {
53265
53267
  WORKFLOW_ENGINE_SCHEMA_SQL = `
@@ -53332,7 +53334,7 @@ CREATE TABLE IF NOT EXISTS action_runs (
53332
53334
  `.trim();
53333
53335
  });
53334
53336
 
53335
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/persistence.js
53337
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/persistence.js
53336
53338
  async function applyWorkflowEngineSchema(db2) {
53337
53339
  for (const statement of WORKFLOW_ENGINE_SCHEMA_SQL.split(";")) {
53338
53340
  const sql4 = statement.trim();
@@ -53621,7 +53623,7 @@ var init_persistence = __esm(() => {
53621
53623
  init_schema_sql();
53622
53624
  });
53623
53625
 
53624
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/variables.js
53626
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/variables.js
53625
53627
  function mergeVars(workflowVars = {}, overrideVars = {}) {
53626
53628
  return { ...workflowVars, ...overrideVars };
53627
53629
  }
@@ -53681,7 +53683,7 @@ var init_variables = __esm(() => {
53681
53683
  TEMPLATE_REF = /\$\{([^}]+)\}/g;
53682
53684
  });
53683
53685
 
53684
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/action-step.js
53686
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/action-step.js
53685
53687
  async function runActionStep(action, vars, deps) {
53686
53688
  const { host, persistence, lifecycle, stateOrNodeId, runId } = deps;
53687
53689
  const resolved = resolveTemplates(action.options ?? {}, {
@@ -53739,7 +53741,7 @@ var init_action_step = __esm(() => {
53739
53741
  init_variables();
53740
53742
  });
53741
53743
 
53742
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/state-machine.js
53744
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/state-machine.js
53743
53745
  class StateMachineDriver {
53744
53746
  options;
53745
53747
  constructor(options) {
@@ -53875,7 +53877,7 @@ var init_state_machine = __esm(() => {
53875
53877
  EMPTY_OUTCOME = { outcome: "completed", result: undefined };
53876
53878
  });
53877
53879
 
53878
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/transition-flow.js
53880
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/transition-flow.js
53879
53881
  class TransitionFlowDriver {
53880
53882
  options;
53881
53883
  constructor(options) {
@@ -53994,7 +53996,7 @@ var init_transition_flow = __esm(() => {
53994
53996
  init_variables();
53995
53997
  });
53996
53998
 
53997
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/service.js
53999
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/service.js
53998
54000
  class WorkflowService {
53999
54001
  host;
54000
54002
  persistence;
@@ -54211,7 +54213,7 @@ var init_service = __esm(() => {
54211
54213
  init_variables();
54212
54214
  });
54213
54215
 
54214
- // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/index.js
54216
+ // ../../node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/index.js
54215
54217
  var init_dist7 = __esm(() => {
54216
54218
  init_config4();
54217
54219
  init_host();
@@ -54220,7 +54222,7 @@ var init_dist7 = __esm(() => {
54220
54222
  init_service();
54221
54223
  });
54222
54224
 
54223
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/hash.js
54225
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/hash.js
54224
54226
  import { createHash } from "crypto";
54225
54227
  function stableJson(value) {
54226
54228
  if (Array.isArray(value)) {
@@ -54237,7 +54239,7 @@ function sha256(value) {
54237
54239
  }
54238
54240
  var init_hash = () => {};
54239
54241
 
54240
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/errors.js
54242
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/errors.js
54241
54243
  var HistoryImportError;
54242
54244
  var init_errors7 = __esm(() => {
54243
54245
  HistoryImportError = class HistoryImportError extends Error {
@@ -54250,7 +54252,7 @@ var init_errors7 = __esm(() => {
54250
54252
  };
54251
54253
  });
54252
54254
 
54253
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/schema-sql.js
54255
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/schema-sql.js
54254
54256
  var HISTORY_IMPORT_SCHEMA_SQL;
54255
54257
  var init_schema_sql2 = __esm(() => {
54256
54258
  HISTORY_IMPORT_SCHEMA_SQL = `
@@ -54337,7 +54339,7 @@ CREATE TABLE IF NOT EXISTS history_etl_openclaw (
54337
54339
  `.trim();
54338
54340
  });
54339
54341
 
54340
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/sources.js
54342
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/sources.js
54341
54343
  function firstString(...values) {
54342
54344
  for (const value of values) {
54343
54345
  if (typeof value === "string" && value.length > 0)
@@ -54474,7 +54476,7 @@ var init_sources = __esm(() => {
54474
54476
  };
54475
54477
  });
54476
54478
 
54477
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/jsonl-importer-dao.js
54479
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/jsonl-importer-dao.js
54478
54480
  function targetTableFor(table3) {
54479
54481
  if (!VALID_TABLE_NAME.test(table3)) {
54480
54482
  throw new HistoryImportError(`Invalid history ETL target table: ${table3}`, { table: table3 });
@@ -54547,7 +54549,7 @@ var init_jsonl_importer_dao = __esm(() => {
54547
54549
  init_sources();
54548
54550
  });
54549
54551
 
54550
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/redaction.js
54552
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/redaction.js
54551
54553
  function redactValue(value, rules = DEFAULT_REDACTION_RULES) {
54552
54554
  if (typeof value === "string") {
54553
54555
  return rules.reduce((current, rule) => current.replace(rule.pattern, rule.replacement), value);
@@ -54584,7 +54586,7 @@ var init_redaction = __esm(() => {
54584
54586
  ];
54585
54587
  });
54586
54588
 
54587
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/importer.js
54589
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/importer.js
54588
54590
  async function runJsonlImport(source, options) {
54589
54591
  const definition = resolveSourceDefinition(source);
54590
54592
  const resolvedSource = definition.source;
@@ -54774,13 +54776,13 @@ var init_importer = __esm(() => {
54774
54776
  init_sources();
54775
54777
  });
54776
54778
 
54777
- // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.18+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/index.js
54779
+ // ../../node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.4.19+d5c29f764bf0e6e0/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/index.js
54778
54780
  var init_dist8 = __esm(() => {
54779
54781
  init_importer();
54780
54782
  init_schema_sql2();
54781
54783
  });
54782
54784
 
54783
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/config/extensions.js
54785
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/config/extensions.js
54784
54786
  function collectExtensions(sourceName, sourceDir, extensions) {
54785
54787
  if (extensions === undefined)
54786
54788
  return [];
@@ -54796,7 +54798,7 @@ var init_extensions = __esm(() => {
54796
54798
  init_dist5();
54797
54799
  });
54798
54800
 
54799
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/types.js
54801
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/types.js
54800
54802
  function createFinding(rule, message, filePath, extras = {}) {
54801
54803
  return {
54802
54804
  ruleId: rule.id,
@@ -54867,7 +54869,7 @@ var init_types3 = __esm(() => {
54867
54869
  });
54868
54870
  });
54869
54871
 
54870
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/config/loader.js
54872
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/config/loader.js
54871
54873
  async function loadPreset(name, options) {
54872
54874
  const merged = await buildMergedRoots(options.roots.map((root) => resolvePath4(root)), options.fileSystem);
54873
54875
  const presetPath = findMergedPreset(merged, name);
@@ -55082,7 +55084,7 @@ var init_loader2 = __esm(() => {
55082
55084
  FIX_MODE_AUTHORITY = { none: 0, suggest: 1, auto: 2 };
55083
55085
  });
55084
55086
 
55085
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/fixers/test-stub-fixer.js
55087
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/fixers/test-stub-fixer.js
55086
55088
  function normalizeFindingPath(filePath) {
55087
55089
  if (!filePath || isAbsolutePath2(filePath))
55088
55090
  return null;
@@ -55147,7 +55149,7 @@ var init_test_stub_fixer = __esm(() => {
55147
55149
  realFileSystem = createNodeFileSystem3();
55148
55150
  });
55149
55151
 
55150
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/fixers/fixers.js
55152
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/fixers/fixers.js
55151
55153
  function registerBuiltinFixers(host, exec) {
55152
55154
  const regexFixer = new RegexFixerProvider;
55153
55155
  const pathFixer = new PathFixerProvider;
@@ -55350,7 +55352,10 @@ var init_fixers = __esm(() => {
55350
55352
  };
55351
55353
  });
55352
55354
 
55353
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/agents/shims.js
55355
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/agents/shims.js
55356
+ function getAgentSessionCapability(agent) {
55357
+ return AGENT_SESSION_CAPABILITY[agent];
55358
+ }
55354
55359
  function resolveAgentName(input) {
55355
55360
  if (isCanonicalName(input))
55356
55361
  return input;
@@ -55387,7 +55392,7 @@ function warnDeprecatedOrAlias(input, canonical) {
55387
55392
  logger2.warn(`agent '${input}' is an alias; resolving to canonical '${canonical}'`, { input, canonical });
55388
55393
  }
55389
55394
  }
55390
- var claudeShim, codexShim, geminiShim, piShim, opencodeShim, antigravityCliShim, openclawShim, hermesShim, ompShim, grokShim, AGENT_SHIMS, TIER1_PRIORITY, DISPLAY_ORDER, TIER2_AGENTS, logger2, ALIAS_TO_CANONICAL;
55395
+ var claudeShim, codexShim, geminiShim, piShim, opencodeShim, antigravityCliShim, openclawShim, hermesShim, ompShim, grokShim, AGENT_SHIMS, AGENT_SESSION_CAPABILITY, TIER1_PRIORITY, DISPLAY_ORDER, TIER2_AGENTS, logger2, ALIAS_TO_CANONICAL;
55391
55396
  var init_shims = __esm(() => {
55392
55397
  init_dist6();
55393
55398
  claudeShim = {
@@ -55398,8 +55403,13 @@ var init_shims = __esm(() => {
55398
55403
  getVersionCommand: () => ({ command: "claude", args: ["--version"] }),
55399
55404
  getPromptCommand: (options) => {
55400
55405
  const args = ["-p", options.input ?? ""];
55401
- if (options.continue === true)
55406
+ const hasSession = options.sessionId !== undefined || options.sessionDir !== undefined;
55407
+ if (hasSession) {
55408
+ if (options.sessionId !== undefined)
55409
+ args.push("--resume", options.sessionId);
55410
+ } else if (options.continue === true) {
55402
55411
  args.push("--continue");
55412
+ }
55403
55413
  if (options.model !== undefined)
55404
55414
  args.push("--model", options.model);
55405
55415
  args.push("--output-format", options.mode ?? "text");
@@ -55414,10 +55424,11 @@ var init_shims = __esm(() => {
55414
55424
  getHelpCommand: () => ({ command: "codex", args: ["--help"] }),
55415
55425
  getVersionCommand: () => ({ command: "codex", args: ["--version"] }),
55416
55426
  getPromptCommand: (options) => {
55417
- if (options.continue === true && options.input !== undefined) {
55427
+ const hasSession = options.sessionId !== undefined || options.sessionDir !== undefined;
55428
+ if (options.continue === true && !hasSession && options.input !== undefined) {
55418
55429
  throw new Error("Codex resume mode does not accept a new prompt");
55419
55430
  }
55420
- const args = options.continue === true ? ["exec", "resume", "--last"] : ["exec", options.input ?? ""];
55431
+ const args = options.continue === true && !hasSession ? ["exec", "resume", "--last"] : ["exec", options.input ?? ""];
55421
55432
  if (options.model !== undefined)
55422
55433
  args.push("-m", options.model);
55423
55434
  if ((options.mode ?? "text") === "json")
@@ -55452,11 +55463,16 @@ var init_shims = __esm(() => {
55452
55463
  getVersionCommand: () => ({ command: "pi", args: ["--version"] }),
55453
55464
  getPromptCommand: (options) => {
55454
55465
  const args = [];
55455
- if (options.continue !== true)
55466
+ const hasSession = options.sessionId !== undefined || options.sessionDir !== undefined;
55467
+ if (!hasSession && options.continue !== true)
55456
55468
  args.push("--no-session");
55457
55469
  args.push("-p", options.input ?? "");
55458
- if (options.continue === true)
55470
+ if (!hasSession && options.continue === true)
55459
55471
  args.push("-c");
55472
+ if (options.sessionDir !== undefined)
55473
+ args.push("--session-dir", options.sessionDir);
55474
+ if (options.sessionId !== undefined)
55475
+ args.push("-r", options.sessionId);
55460
55476
  if (options.model !== undefined)
55461
55477
  args.push("--model", options.model);
55462
55478
  args.push("--mode", options.mode ?? "text");
@@ -55491,8 +55507,13 @@ var init_shims = __esm(() => {
55491
55507
  getVersionCommand: () => ({ command: "agy", args: ["--version"] }),
55492
55508
  getPromptCommand: (options) => {
55493
55509
  const args = ["-p", options.input ?? ""];
55494
- if (options.continue === true)
55510
+ const hasSession = options.sessionId !== undefined || options.sessionDir !== undefined;
55511
+ if (hasSession) {
55512
+ if (options.sessionId !== undefined)
55513
+ args.push("--conversation", options.sessionId);
55514
+ } else if (options.continue === true) {
55495
55515
  args.push("--continue");
55516
+ }
55496
55517
  if (options.model !== undefined)
55497
55518
  args.push("--model", options.model);
55498
55519
  return { command: "agy", args };
@@ -55532,11 +55553,16 @@ var init_shims = __esm(() => {
55532
55553
  getVersionCommand: () => ({ command: "omp", args: ["--version"] }),
55533
55554
  getPromptCommand: (options) => {
55534
55555
  const args = [];
55535
- if (options.continue !== true)
55556
+ const hasSession = options.sessionId !== undefined || options.sessionDir !== undefined;
55557
+ if (!hasSession && options.continue !== true)
55536
55558
  args.push("--no-session");
55537
55559
  args.push("-p", options.input ?? "");
55538
- if (options.continue === true)
55560
+ if (!hasSession && options.continue === true)
55539
55561
  args.push("-c");
55562
+ if (options.sessionDir !== undefined)
55563
+ args.push("--session-dir", options.sessionDir);
55564
+ if (options.sessionId !== undefined)
55565
+ args.push("-r", options.sessionId);
55540
55566
  if (options.model !== undefined)
55541
55567
  args.push("--model", options.model);
55542
55568
  args.push("--mode", options.mode ?? "text");
@@ -55552,8 +55578,13 @@ var init_shims = __esm(() => {
55552
55578
  getVersionCommand: () => ({ command: "grok", args: ["--version"] }),
55553
55579
  getPromptCommand: (options) => {
55554
55580
  const args = ["-p", options.input ?? ""];
55555
- if (options.continue === true)
55581
+ const hasSession = options.sessionId !== undefined || options.sessionDir !== undefined;
55582
+ if (hasSession) {
55583
+ if (options.sessionId !== undefined)
55584
+ args.push("--resume", options.sessionId);
55585
+ } else if (options.continue === true) {
55556
55586
  args.push("-c");
55587
+ }
55557
55588
  if (options.model !== undefined)
55558
55589
  args.push("-m", options.model);
55559
55590
  const format2 = (options.mode ?? "text") === "json" ? "json" : "plain";
@@ -55574,6 +55605,18 @@ var init_shims = __esm(() => {
55574
55605
  omp: ompShim,
55575
55606
  grok: grokShim
55576
55607
  };
55608
+ AGENT_SESSION_CAPABILITY = {
55609
+ omp: { supportsResumeById: true, supportsSessionDir: true },
55610
+ pi: { supportsResumeById: true, supportsSessionDir: true },
55611
+ claude: { supportsResumeById: true, supportsSessionDir: false },
55612
+ codex: { supportsResumeById: false, supportsSessionDir: false },
55613
+ "antigravity-cli": { supportsResumeById: true, supportsSessionDir: false },
55614
+ grok: { supportsResumeById: true, supportsSessionDir: false },
55615
+ gemini: { supportsResumeById: false, supportsSessionDir: false },
55616
+ opencode: { supportsResumeById: false, supportsSessionDir: false },
55617
+ openclaw: { supportsResumeById: false, supportsSessionDir: false },
55618
+ hermes: { supportsResumeById: false, supportsSessionDir: false }
55619
+ };
55577
55620
  TIER1_PRIORITY = [
55578
55621
  "pi",
55579
55622
  "omp",
@@ -55601,7 +55644,7 @@ var init_shims = __esm(() => {
55601
55644
  ALIAS_TO_CANONICAL = Object.fromEntries(Object.values(AGENT_SHIMS).flatMap((shim) => (shim.aliases ?? []).map((alias3) => [alias3, shim.name])));
55602
55645
  });
55603
55646
 
55604
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/identity.js
55647
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/identity.js
55605
55648
  function buildIdentityPreamble(ctx) {
55606
55649
  const sections = [
55607
55650
  `You are agent \`${ctx.agentId}\` (${ctx.agentType}) in workspace \`${ctx.workspace}\`.`
@@ -55661,7 +55704,7 @@ var init_identity = __esm(() => {
55661
55704
  init_dist5();
55662
55705
  });
55663
55706
 
55664
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/slash-command.js
55707
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/slash-command.js
55665
55708
  function isClaudeStyleSlashCommand(input) {
55666
55709
  return SLASH_COMMAND_RE.test(input);
55667
55710
  }
@@ -55689,7 +55732,7 @@ var init_slash_command = __esm(() => {
55689
55732
  SLASH_COMMAND_RE = /^\/([a-zA-Z0-9._-]+):([a-zA-Z0-9._-]+)(\s.*)?$/;
55690
55733
  });
55691
55734
 
55692
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/ai-runner.js
55735
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/ai-runner.js
55693
55736
  function buildCorrelationEnv(correlation) {
55694
55737
  return {
55695
55738
  [AGENT_RUN_ID_ENV]: correlation.runId,
@@ -55825,7 +55868,7 @@ var init_ai_runner = __esm(() => {
55825
55868
  init_slash_command();
55826
55869
  });
55827
55870
 
55828
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/agent-detector.js
55871
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/agent-detector.js
55829
55872
  class AgentDetector {
55830
55873
  runner;
55831
55874
  timeout;
@@ -55901,7 +55944,7 @@ var init_agent_detector = __esm(() => {
55901
55944
  VERSION_PATTERN = /(?<version>\d+\.\d+(?:\.\d+)?)/;
55902
55945
  });
55903
55946
 
55904
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/agent-spec.js
55947
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/agent-spec.js
55905
55948
  function validateAgentId(id) {
55906
55949
  if (!/^[a-z][a-z0-9_-]{1,63}$/.test(id)) {
55907
55950
  throw new ValueError(`Invalid agent id "${id}": expected 2-64 chars, lowercase alphanumeric, "_" or "-"`);
@@ -55998,7 +56041,7 @@ var init_agent_spec = __esm(() => {
55998
56041
  };
55999
56042
  });
56000
56043
 
56001
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/agents/auth-shims.js
56044
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/agents/auth-shims.js
56002
56045
  function isNonEmpty(value) {
56003
56046
  return value !== undefined && value.trim().length > 0;
56004
56047
  }
@@ -56103,7 +56146,7 @@ var init_auth_shims = __esm(() => {
56103
56146
  };
56104
56147
  });
56105
56148
 
56106
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/model-health-probe.js
56149
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/model-health-probe.js
56107
56150
  class ModelHealthProbeRegistry {
56108
56151
  probes = new Map;
56109
56152
  register(providerPrefix, probe) {
@@ -56211,7 +56254,7 @@ var init_model_health_probe = __esm(() => {
56211
56254
  };
56212
56255
  });
56213
56256
 
56214
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/doctor-runner.js
56257
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/doctor-runner.js
56215
56258
  class DoctorRunner {
56216
56259
  detector;
56217
56260
  runner;
@@ -56348,15 +56391,15 @@ var init_doctor_runner = __esm(() => {
56348
56391
  init_model_health_probe();
56349
56392
  });
56350
56393
 
56351
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/events.js
56394
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/events.js
56352
56395
  var init_events = () => {};
56353
56396
 
56354
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/messages.js
56397
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/messages.js
56355
56398
  function formatMessage(msg) {
56356
56399
  return `[task from=${msg.fromId ?? "operator"} id=${msg.id}] ${msg.body}`;
56357
56400
  }
56358
56401
 
56359
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/team-agent-process.js
56402
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/team-agent-process.js
56360
56403
  import { Buffer as Buffer5 } from "buffer";
56361
56404
 
56362
56405
  class TeamAgentProcess {
@@ -56490,7 +56533,7 @@ var init_team_agent_process = __esm(() => {
56490
56533
  init_dist5();
56491
56534
  });
56492
56535
 
56493
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/team-orchestrator.js
56536
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/team-orchestrator.js
56494
56537
  class TeamOrchestrator {
56495
56538
  configDir;
56496
56539
  inbox;
@@ -56619,7 +56662,7 @@ var init_team_orchestrator = __esm(() => {
56619
56662
  init_team_agent_process();
56620
56663
  });
56621
56664
 
56622
- // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.18+aa81d3e2be8bffb2/node_modules/@gobing-ai/ts-ai-runner/dist/index.js
56665
+ // ../../node_modules/.bun/@gobing-ai+ts-ai-runner@0.4.19+15c6896e8ddc6ea7/node_modules/@gobing-ai/ts-ai-runner/dist/index.js
56623
56666
  var exports_dist3 = {};
56624
56667
  __export(exports_dist3, {
56625
56668
  validateAgentId: () => validateAgentId,
@@ -56632,6 +56675,7 @@ __export(exports_dist3, {
56632
56675
  isAgentName: () => isAgentName,
56633
56676
  getGitContext: () => getGitContext,
56634
56677
  getAgentShim: () => getAgentShim,
56678
+ getAgentSessionCapability: () => getAgentSessionCapability,
56635
56679
  formatMessage: () => formatMessage,
56636
56680
  extractProvider: () => extractProvider,
56637
56681
  extractModelName: () => extractModelName,
@@ -56670,7 +56714,7 @@ var init_dist9 = __esm(() => {
56670
56714
  init_team_orchestrator();
56671
56715
  });
56672
56716
 
56673
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/config-access.js
56717
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/config-access.js
56674
56718
  function stringArray(value) {
56675
56719
  return Array.isArray(value) && value.every((item) => typeof item === "string") ? value : undefined;
56676
56720
  }
@@ -56708,7 +56752,7 @@ function parseInlineFlags(source) {
56708
56752
  return { flags, rest: source.slice(match[0].length) };
56709
56753
  }
56710
56754
 
56711
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/glob-match.js
56755
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/glob-match.js
56712
56756
  function matchesAny(path9, patterns) {
56713
56757
  if (patterns === undefined || patterns.length === 0)
56714
56758
  return true;
@@ -56756,7 +56800,7 @@ function escapeRegExp(value) {
56756
56800
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
56757
56801
  }
56758
56802
 
56759
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/file-discovery.js
56803
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/file-discovery.js
56760
56804
  async function discoverFiles2(options) {
56761
56805
  const fs3 = options.fs ?? createNodeFileSystem3();
56762
56806
  const allFiles = await walkDir2(options.workdir, fs3, DEFAULT_EXCLUDES);
@@ -56784,12 +56828,12 @@ var init_file_discovery = __esm(() => {
56784
56828
  DEFAULT_EXCLUDES = new Set([".git", "node_modules", "dist", ".coverage", ".astro", ".wrangler"]);
56785
56829
  });
56786
56830
 
56787
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/file-utils.js
56831
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/file-utils.js
56788
56832
  var init_file_utils = __esm(() => {
56789
56833
  init_file_discovery();
56790
56834
  });
56791
56835
 
56792
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/agent-detection-evaluator.js
56836
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/agent-detection-evaluator.js
56793
56837
  class AgentDetectionEvaluator {
56794
56838
  detector;
56795
56839
  constructor(detector = new AgentDetector) {
@@ -56817,7 +56861,7 @@ var init_agent_detection_evaluator = __esm(() => {
56817
56861
  init_file_utils();
56818
56862
  });
56819
56863
 
56820
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/coverage-gate-evaluator.js
56864
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/coverage-gate-evaluator.js
56821
56865
  class CoverageGateEvaluator {
56822
56866
  constructor() {}
56823
56867
  async evaluate(rule, context4) {
@@ -56901,7 +56945,7 @@ var init_coverage_gate_evaluator = __esm(() => {
56901
56945
  init_file_utils();
56902
56946
  });
56903
56947
 
56904
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/exit-code-evaluator.js
56948
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/exit-code-evaluator.js
56905
56949
  class ExitCodeEvaluator {
56906
56950
  executor;
56907
56951
  constructor(executor = nodeBunFactory3.createProcessExecutor()) {
@@ -56937,7 +56981,7 @@ var init_exit_code_evaluator = __esm(() => {
56937
56981
  init_file_utils();
56938
56982
  });
56939
56983
 
56940
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/forbidden-import-evaluator.js
56984
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/forbidden-import-evaluator.js
56941
56985
  class ForbiddenImportEvaluator {
56942
56986
  constructor() {}
56943
56987
  async evaluate(rule, context4) {
@@ -57018,7 +57062,7 @@ var init_forbidden_import_evaluator = __esm(() => {
57018
57062
  init_file_utils();
57019
57063
  });
57020
57064
 
57021
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/import-boundary-evaluator.js
57065
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/import-boundary-evaluator.js
57022
57066
  class ImportBoundaryEvaluator {
57023
57067
  async evaluate(rule, context4) {
57024
57068
  const config4 = rule.evaluator.config ?? {};
@@ -57111,7 +57155,7 @@ var init_import_boundary_evaluator = __esm(() => {
57111
57155
  init_file_utils();
57112
57156
  });
57113
57157
 
57114
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/path-evaluator.js
57158
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/path-evaluator.js
57115
57159
  class PathEvaluator {
57116
57160
  constructor() {}
57117
57161
  async evaluate(rule, context4) {
@@ -57172,7 +57216,7 @@ var init_path_evaluator = __esm(() => {
57172
57216
  init_file_utils();
57173
57217
  });
57174
57218
 
57175
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/regex-evaluator.js
57219
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/regex-evaluator.js
57176
57220
  class RegexEvaluator {
57177
57221
  constructor() {}
57178
57222
  async evaluate(rule, context4) {
@@ -57250,7 +57294,7 @@ var init_regex_evaluator = __esm(() => {
57250
57294
  init_file_utils();
57251
57295
  });
57252
57296
 
57253
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/ripgrep-evaluator.js
57297
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/ripgrep-evaluator.js
57254
57298
  class RipgrepEvaluator {
57255
57299
  executor;
57256
57300
  constructor(executor = nodeBunFactory3.createProcessExecutor()) {
@@ -57343,7 +57387,7 @@ var init_ripgrep_evaluator = __esm(() => {
57343
57387
  init_file_utils();
57344
57388
  });
57345
57389
 
57346
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/schema-artifact-evaluator.js
57390
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/schema-artifact-evaluator.js
57347
57391
  class SchemaArtifactEvaluator {
57348
57392
  constructor() {}
57349
57393
  async evaluate(rule, context4) {
@@ -57421,7 +57465,7 @@ var init_schema_artifact_evaluator = __esm(() => {
57421
57465
  init_file_utils();
57422
57466
  });
57423
57467
 
57424
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/secrets-scanner-evaluator.js
57468
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/secrets-scanner-evaluator.js
57425
57469
  class SecretsScannerEvaluator {
57426
57470
  constructor() {}
57427
57471
  async evaluate(rule, context4) {
@@ -57489,7 +57533,7 @@ var init_secrets_scanner_evaluator = __esm(() => {
57489
57533
  ALL_CATEGORIES = Object.keys(BUILTIN_PATTERNS);
57490
57534
  });
57491
57535
 
57492
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/sg-evaluator.js
57536
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/sg-evaluator.js
57493
57537
  class SgEvaluator {
57494
57538
  executor;
57495
57539
  constructor(executor = nodeBunFactory3.createProcessExecutor()) {
@@ -57586,7 +57630,7 @@ var init_sg_evaluator = __esm(() => {
57586
57630
  init_file_utils();
57587
57631
  });
57588
57632
 
57589
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/resolvers/test-path-resolver.js
57633
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/resolvers/test-path-resolver.js
57590
57634
  class TypeScriptTestPathResolver {
57591
57635
  name = "typescript";
57592
57636
  constructor() {}
@@ -57669,7 +57713,7 @@ function testify(rel) {
57669
57713
  return `${dir}test_${base2}`;
57670
57714
  }
57671
57715
 
57672
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/test-location-evaluator.js
57716
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/test-location-evaluator.js
57673
57717
  class TestLocationEvaluator {
57674
57718
  resolvers;
57675
57719
  constructor(resolvers) {
@@ -57744,7 +57788,7 @@ var init_test_location_evaluator = __esm(() => {
57744
57788
  TYPESCRIPT_FALLBACK = new TypeScriptTestPathResolver;
57745
57789
  });
57746
57790
 
57747
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/tsdoc-export-evaluator.js
57791
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/evaluators/tsdoc-export-evaluator.js
57748
57792
  class TsdocExportEvaluator {
57749
57793
  constructor() {}
57750
57794
  async evaluate(rule, context4) {
@@ -57829,7 +57873,7 @@ var init_tsdoc_export_evaluator = __esm(() => {
57829
57873
  };
57830
57874
  });
57831
57875
 
57832
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/formatters/json.js
57876
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/formatters/json.js
57833
57877
  class JsonFormatter {
57834
57878
  constructor() {}
57835
57879
  format(result) {
@@ -57837,7 +57881,7 @@ class JsonFormatter {
57837
57881
  }
57838
57882
  }
57839
57883
 
57840
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/formatters/text.js
57884
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/formatters/text.js
57841
57885
  class TextFormatter {
57842
57886
  constructor() {}
57843
57887
  format(result) {
@@ -57851,7 +57895,7 @@ class TextFormatter {
57851
57895
  }
57852
57896
  }
57853
57897
 
57854
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/host/builtins.js
57898
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/host/builtins.js
57855
57899
  function registerBuiltins(host, executor) {
57856
57900
  const path9 = new PathEvaluator;
57857
57901
  host.evaluators.register("regex", new RegexEvaluator, "builtin");
@@ -57891,7 +57935,7 @@ var init_builtins = __esm(() => {
57891
57935
  init_tsdoc_export_evaluator();
57892
57936
  });
57893
57937
 
57894
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/host/rule-engine-host.js
57938
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/host/rule-engine-host.js
57895
57939
  class RuleEngineHost {
57896
57940
  evaluators;
57897
57941
  formatters;
@@ -57908,7 +57952,7 @@ var init_rule_engine_host = __esm(() => {
57908
57952
  init_extension2();
57909
57953
  });
57910
57954
 
57911
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/engine.js
57955
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/engine.js
57912
57956
  class RuleEngine {
57913
57957
  host;
57914
57958
  events;
@@ -58079,7 +58123,7 @@ var init_engine = __esm(() => {
58079
58123
  init_types3();
58080
58124
  });
58081
58125
 
58082
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/host/bundled-rules.js
58126
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/host/bundled-rules.js
58083
58127
  async function bundledRulesRoot() {
58084
58128
  if (cachedRoot2 !== undefined)
58085
58129
  return cachedRoot2;
@@ -58130,7 +58174,7 @@ var init_bundled_rules = __esm(() => {
58130
58174
  init_dist5();
58131
58175
  });
58132
58176
 
58133
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/db-adapter.js
58177
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/db-adapter.js
58134
58178
  class DbRulePersistenceAdapter {
58135
58179
  db;
58136
58180
  constructor(db2) {
@@ -58164,7 +58208,7 @@ class DbRulePersistenceAdapter {
58164
58208
  }
58165
58209
  }
58166
58210
 
58167
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/schema.js
58211
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/schema.js
58168
58212
  var RULE_ENGINE_SCHEMA_SQL = `
58169
58213
  CREATE TABLE IF NOT EXISTS rule_runs (
58170
58214
  id TEXT PRIMARY KEY,
@@ -58210,10 +58254,10 @@ CREATE TABLE IF NOT EXISTS rule_eval_runs (
58210
58254
  CREATE INDEX IF NOT EXISTS idx_rule_eval_runs_run_id ON rule_eval_runs (run_id);
58211
58255
  `;
58212
58256
 
58213
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/index.js
58257
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/index.js
58214
58258
  var init_persistence2 = () => {};
58215
58259
 
58216
- // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.18+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/index.js
58260
+ // ../../node_modules/.bun/@gobing-ai+ts-rule-engine@0.4.19+eb8900f44f4776f9/node_modules/@gobing-ai/ts-rule-engine/dist/index.js
58217
58261
  var init_dist10 = __esm(() => {
58218
58262
  init_extensions();
58219
58263
  init_loader2();
@@ -58433,7 +58477,7 @@ ${SYSTEM_EVENTS_SCHEMA_SQL}
58433
58477
  ];
58434
58478
  });
58435
58479
 
58436
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/job-queue/db-job-queue.js
58480
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/job-queue/db-job-queue.js
58437
58481
  function queueLogger() {
58438
58482
  if (!_queueLogger)
58439
58483
  _queueLogger = getLogger2("job-queue");
@@ -58710,7 +58754,7 @@ var init_db_job_queue = __esm(() => {
58710
58754
  init_tracing2();
58711
58755
  });
58712
58756
 
58713
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/job-queue-db.js
58757
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/job-queue-db.js
58714
58758
  var exports_job_queue_db = {};
58715
58759
  __export(exports_job_queue_db, {
58716
58760
  DBQueueConsumer: () => DBQueueConsumer,
@@ -61083,8 +61127,7 @@ class AgentService {
61083
61127
  return { ok: false, exitCode: 2, message: "Prompt is required" };
61084
61128
  }
61085
61129
  const jsonOutput = silent || booleanFlag(flags, "json");
61086
- const forceBuffered = silent || nonInteractive;
61087
- const outputPolicy = forceBuffered ? { mode: "buffered" } : jsonOutput ? { mode: "buffered" } : { mode: "stream", isTTY: isatty3(1) };
61130
+ const outputPolicy = nonInteractive ? { mode: "pipe" } : silent || jsonOutput ? { mode: "buffered" } : { mode: "stream", isTTY: isatty3(1) };
61088
61131
  const outputMode = outputPolicy.mode;
61089
61132
  let publishPid;
61090
61133
  const runner = deps?.runner ?? new AiRunner({
@@ -61135,6 +61178,8 @@ class AgentService {
61135
61178
  const model = explicitModel ?? currentModel;
61136
61179
  const translated = prompt !== undefined && isClaudeStyleSlashCommand(prompt) ? translateSlashCommand(agent, prompt) : undefined;
61137
61180
  const input = translated ?? prompt;
61181
+ const sessionDir = stringFlag(flags, "session-dir", "") || stringFlag(flags, "sessionDir", "") || undefined;
61182
+ const sessionId = stringFlag(flags, "session-id", "") || stringFlag(flags, "sessionId", "") || undefined;
61138
61183
  const promptOptions = {
61139
61184
  input,
61140
61185
  continue: continueFlag || undefined,
@@ -61143,7 +61188,9 @@ class AgentService {
61143
61188
  ...purpose !== undefined ? { purpose } : {},
61144
61189
  ...tags !== undefined ? { tags } : {},
61145
61190
  ...systemPrompt !== undefined ? { systemPrompt } : {},
61146
- ...taskId !== undefined ? { taskId } : {}
61191
+ ...taskId !== undefined ? { taskId } : {},
61192
+ ...sessionDir !== undefined ? { sessionDir } : {},
61193
+ ...sessionId !== undefined ? { sessionId } : {}
61147
61194
  };
61148
61195
  let shimCommand;
61149
61196
  try {
@@ -61179,6 +61226,7 @@ class AgentService {
61179
61226
  continue: continueFlag,
61180
61227
  stdinInteractive: false,
61181
61228
  ...model !== undefined ? { model } : {},
61229
+ ...sessionId !== undefined ? { sessionId } : {},
61182
61230
  ...translated !== undefined && prompt !== undefined ? { translatedFrom: traceSafePrompt(prompt) } : {}
61183
61231
  };
61184
61232
  if (attempt === 0) {
@@ -61273,35 +61321,17 @@ class AgentService {
61273
61321
  ...observer !== undefined ? { observer } : {}
61274
61322
  };
61275
61323
  }
61276
- hasWarnedDeprecation = false;
61277
- warnDeprecationOnce(message) {
61278
- if (!this.hasWarnedDeprecation) {
61279
- this.ctx.output.error(`Warning: ${message}`);
61280
- this.hasWarnedDeprecation = true;
61281
- }
61282
- }
61283
61324
  async resolveAgent(prompt, flags, doctorRunner) {
61284
61325
  const raw = stringFlag(flags, "agent", "auto");
61285
61326
  if (raw === "auto")
61286
61327
  return this.resolveAgentAuto(prompt, flags, doctorRunner);
61287
- if (raw === "inline") {
61288
- return {
61289
- ok: false,
61290
- exitCode: 2,
61291
- message: "'inline' selects in-session execution and cannot be passed to 'spur agent run', which always starts a subprocess. Run the backing skill directly in the current session, or redirect pipeline stages via agent.default / '--agent auto' / '--agent <name>' (ADR-046)."
61292
- };
61293
- }
61328
+ if (raw === "inline")
61329
+ return this.resolveAgentAuto(prompt, flags, doctorRunner);
61294
61330
  return this.resolveExecutorSelector(raw, doctorRunner, "explicit");
61295
61331
  }
61296
61332
  async resolveAgentAuto(prompt, flags, doctorRunner) {
61297
61333
  const config4 = this.ctx.agentConfig;
61298
61334
  const phase = extractPhase(prompt);
61299
- const phaseMap = config4?.["default-by-phase"];
61300
- const phaseSelector = phase !== undefined ? phaseMap?.[phase] : undefined;
61301
- if (phaseSelector !== undefined && phase !== undefined) {
61302
- this.warnDeprecationOnce(`default-by-phase is deprecated; use stage model_policy instead. Phase '${phase}' mapped to '${phaseSelector}'.`);
61303
- return this.resolveExecutorSelector(phaseSelector, doctorRunner, "phase", phase);
61304
- }
61305
61335
  const stageFlag = stringFlag(flags, "stage", "");
61306
61336
  const targetStageId = stageFlag !== "" ? stageFlag : phase !== undefined ? phase : undefined;
61307
61337
  if (targetStageId !== undefined) {
@@ -62694,8 +62724,10 @@ var init_feature_check = __esm(() => {
62694
62724
  await this.checkChildrenLimit(featureId2, options.featuresDir, findings);
62695
62725
  }
62696
62726
  const dogfoodDir = options?.dogfoodDir ?? (options?.featuresDir ? join9(dirname8(options.featuresDir), "dogfood") : undefined);
62697
- const runDir = options?.runDir ?? (options?.tasksDir ? defaultVerdictRunDir(options.tasksDir) : undefined);
62698
- await this.runL4(doc2, featureId2, status, options?.tasksDir, dogfoodDir, runDir, findings);
62727
+ const primaryTasksDir = options?.tasksDir ?? options?.tasksDirs?.[0];
62728
+ const runDir = options?.runDir ?? (primaryTasksDir ? defaultVerdictRunDir(primaryTasksDir) : undefined);
62729
+ const taskScanDirs = options?.tasksDirs && options.tasksDirs.length > 0 ? options.tasksDirs : options?.tasksDir ? [options.tasksDir] : [];
62730
+ await this.runL4(doc2, featureId2, status, taskScanDirs, dogfoodDir, runDir, findings);
62699
62731
  return { id: featureId2, ...this.summarizeWithStatus(status, findings, strict, options?.severityOverrides) };
62700
62732
  }
62701
62733
  runL3(doc2, findings) {
@@ -62807,49 +62839,49 @@ var init_feature_check = __esm(() => {
62807
62839
  });
62808
62840
  }
62809
62841
  }
62810
- async runL4(doc2, featureId2, status, tasksDir, dogfoodDir, runDir, findings) {
62811
- if (tasksDir === undefined)
62842
+ async runL4(doc2, featureId2, status, tasksDirs, dogfoodDir, runDir, findings) {
62843
+ if (tasksDirs.length === 0)
62812
62844
  return;
62813
62845
  let linkedTasks = 0;
62814
62846
  const incompleteTasks = [];
62815
62847
  const linkedTaskAc = [];
62816
62848
  const linkedTaskSolutions = [];
62817
62849
  const linkedTaskRecords = [];
62818
- try {
62819
- const entries = await this.fs.readDir(tasksDir);
62820
- for (const entry of entries) {
62821
- if (!/^\d{4}_.+\.md$/.test(entry))
62822
- continue;
62823
- try {
62824
- const raw = await this.fs.readFile(`${tasksDir}/${entry}`);
62825
- const taskDoc = MarkdownDocument.parse(raw, "task");
62826
- const tfm = taskDoc.frontmatterData ?? {};
62827
- const tfid = tfm.feature_id ?? tfm["feature-id"];
62828
- if (tfid !== featureId2)
62850
+ for (const tasksDir of tasksDirs) {
62851
+ try {
62852
+ const entries = await this.fs.readDir(tasksDir);
62853
+ for (const entry of entries) {
62854
+ if (!/^\d{4}_.+\.md$/.test(entry))
62829
62855
  continue;
62830
- linkedTasks += 1;
62831
- const tStatus = tfm.status ?? "backlog";
62832
- const wbs = entry.match(/^(\d{4})_/)?.[1] ?? entry;
62833
- if (tStatus !== "done" && tStatus !== "cancelled") {
62834
- incompleteTasks.push(wbs);
62856
+ try {
62857
+ const raw = await this.fs.readFile(`${tasksDir}/${entry}`);
62858
+ const taskDoc = MarkdownDocument.parse(raw, "task");
62859
+ const tfm = taskDoc.frontmatterData ?? {};
62860
+ const tfid = tfm.feature_id ?? tfm["feature-id"];
62861
+ if (tfid !== featureId2)
62862
+ continue;
62863
+ linkedTasks += 1;
62864
+ const tStatus = tfm.status ?? "backlog";
62865
+ const wbs = entry.match(/^(\d{4})_/)?.[1] ?? entry;
62866
+ if (tStatus !== "done" && tStatus !== "cancelled") {
62867
+ incompleteTasks.push(wbs);
62868
+ }
62869
+ const tac = stripAcFence(taskDoc.getSection("Acceptance Criteria") ?? "");
62870
+ if (tac.trim().length > 0)
62871
+ linkedTaskAc.push(tac);
62872
+ linkedTaskSolutions.push(taskDoc.getSection("Solution") ?? "");
62873
+ linkedTaskRecords.push({ wbs, status: tStatus, ac: tac });
62874
+ } catch {
62875
+ findings.push({
62876
+ layer: "L4",
62877
+ code: FINDING_CODES.L4_LINKED_TASK_PARSE_FAILED,
62878
+ severity: "warning",
62879
+ section: "",
62880
+ message: `Linked task file "${entry}" failed to parse \u2014 dangling feature_id edge`
62881
+ });
62835
62882
  }
62836
- const tac = stripAcFence(taskDoc.getSection("Acceptance Criteria") ?? "");
62837
- if (tac.trim().length > 0)
62838
- linkedTaskAc.push(tac);
62839
- linkedTaskSolutions.push(taskDoc.getSection("Solution") ?? "");
62840
- linkedTaskRecords.push({ wbs, status: tStatus, ac: tac });
62841
- } catch {
62842
- findings.push({
62843
- layer: "L4",
62844
- code: FINDING_CODES.L4_LINKED_TASK_PARSE_FAILED,
62845
- severity: "warning",
62846
- section: "",
62847
- message: `Linked task file "${entry}" failed to parse \u2014 dangling feature_id edge`
62848
- });
62849
62883
  }
62850
- }
62851
- } catch {
62852
- return;
62884
+ } catch {}
62853
62885
  }
62854
62886
  const acBody = stripAcFence(doc2.getSection("Acceptance Criteria") ?? "");
62855
62887
  const hasScenarios = /^\s*Scenario:/m.test(acBody);
@@ -62954,7 +62986,9 @@ var init_feature_check = __esm(() => {
62954
62986
  artifacts2.set(wbs, artifact);
62955
62987
  const diagnosticParts = [];
62956
62988
  if (artifact.diagnostics.artifactError !== undefined) {
62957
- diagnosticParts.push(artifact.diagnostics.artifactError);
62989
+ if (artifact.diagnostics.artifactError !== "artifact is missing") {
62990
+ diagnosticParts.push(artifact.diagnostics.artifactError);
62991
+ }
62958
62992
  }
62959
62993
  if (artifact.diagnostics.rejectedRowCount > 0) {
62960
62994
  diagnosticParts.push(`${artifact.diagnostics.rejectedRowCount} rejected coverage row(s)`);
@@ -63317,9 +63351,13 @@ class FeatureService {
63317
63351
  }
63318
63352
  const checkL4Gate = async () => {
63319
63353
  const checkSvc = new FeatureCheckService(this.ctx.fs);
63354
+ const tasksDirs = this.ctx.foldersConfig ? Object.keys(this.ctx.foldersConfig.folders).map((p) => this.ctx.fs.resolve(p)) : [this.ctx.tasksDir];
63355
+ if (!tasksDirs.includes(this.ctx.tasksDir))
63356
+ tasksDirs.unshift(this.ctx.tasksDir);
63320
63357
  const res = await checkSvc.check(feature.filePath, featureId2, {
63321
63358
  featuresDir: this.ctx.featuresDir,
63322
63359
  tasksDir: this.ctx.tasksDir,
63360
+ tasksDirs,
63323
63361
  runDir: defaultVerdictRunDir(this.ctx.tasksDir)
63324
63362
  });
63325
63363
  const l4Errors = res.findings.filter((f) => f.layer === "L4" && f.severity === "error");
@@ -66285,12 +66323,13 @@ var init_task_check = __esm(() => {
66285
66323
  const featureTerminal = featureStatus === "done" || featureStatus === "cancelled";
66286
66324
  const taskTerminal = status === "done" || status === "cancelled";
66287
66325
  if (featureTerminal && !taskTerminal) {
66326
+ const reopenGuide = featureStatus === "done" ? `Reopen: \`spur feature update ${featureId2} active\` (or \`spur feature sync ${featureId2} --force\` when non-terminal tasks are already linked). Alternatively re-parent: \`spur task update <wbs> --feature <otherId>\`.` : `Feature is cancelled \u2014 re-parent or unlink this live task (\`spur task update <wbs> --feature <otherId>\`).`;
66288
66327
  findings.push({
66289
66328
  layer: "L4",
66290
66329
  code: FINDING_CODES.L4_FEATURE_TERMINAL,
66291
66330
  severity: "error",
66292
66331
  section: "",
66293
- message: `Feature "${featureId2}" is ${featureStatus} \u2014 remove or re-parent this task`
66332
+ message: `Feature "${featureId2}" is ${featureStatus} \u2014 live tasks cannot stay linked without action. ${reopenGuide}`
66294
66333
  });
66295
66334
  }
66296
66335
  await this.checkAcCoverage(doc2, featurePath, featureId2, findings);
@@ -67873,31 +67912,45 @@ function extractRequirements(text4) {
67873
67912
  const lines = text4.split(`
67874
67913
  `);
67875
67914
  let inTable = false;
67915
+ let colMap = null;
67876
67916
  for (const line of lines) {
67877
67917
  const trimmed = line.trim();
67878
67918
  if (!trimmed.startsWith("|"))
67879
67919
  continue;
67880
67920
  const cells = trimmed.split("|").map((c3) => c3.trim()).filter(Boolean);
67881
67921
  if (!inTable && cells.length >= 2) {
67882
- const h0 = (cells[0] ?? "").toLowerCase();
67883
- const h1 = (cells[1] ?? "").toLowerCase();
67884
- if ((h0.includes("req") || h0 === "requirement") && (h1.includes("status") || h1 === "verdict")) {
67885
- inTable = true;
67886
- continue;
67922
+ const h0 = (cells[0] ?? "").toLowerCase().trim();
67923
+ const h0IsId = h0.includes("req") || h0 === "requirement" || h0 === "r#" || h0 === "r" || /^r\d+$/.test(h0);
67924
+ if (h0IsId) {
67925
+ const statusIdx = cells.findIndex((c3) => {
67926
+ const x = c3.toLowerCase().trim();
67927
+ return x.includes("status") || x === "verdict";
67928
+ });
67929
+ if (statusIdx >= 0) {
67930
+ const evidenceIdx = cells.findIndex((c3) => c3.toLowerCase().includes("evidence"));
67931
+ colMap = {
67932
+ id: 0,
67933
+ status: statusIdx,
67934
+ evidence: evidenceIdx >= 0 ? evidenceIdx : undefined
67935
+ };
67936
+ inTable = true;
67937
+ continue;
67938
+ }
67887
67939
  }
67888
67940
  }
67889
67941
  if (/^[-:]+$/.test(cells[0] ?? ""))
67890
67942
  continue;
67891
- if (inTable && cells.length >= 2) {
67943
+ if (inTable && colMap && cells.length >= 2) {
67892
67944
  const first = (cells[0] ?? "").toLowerCase();
67893
67945
  const second = (cells[1] ?? "").toLowerCase();
67894
67946
  if ((first === "ac" || first.includes("acceptance") || first === "check" || first === "name") && (second.includes("status") || second === "verdict")) {
67895
67947
  inTable = false;
67948
+ colMap = null;
67896
67949
  continue;
67897
67950
  }
67898
- const id = cells[0] ?? "";
67899
- const statusRaw = (cells[1] ?? "").toUpperCase();
67900
- const evidence = cells.length >= 3 ? cells[2] ?? "" : "";
67951
+ const id = cells[colMap.id] ?? "";
67952
+ const statusRaw = (cells[colMap.status] ?? "").toUpperCase();
67953
+ const evidence = colMap.evidence !== undefined ? cells[colMap.evidence] ?? "" : "";
67901
67954
  const status = normalizeStatus(statusRaw);
67902
67955
  if (status !== null && id.length > 0) {
67903
67956
  reqs.push({ id, status, evidence });
@@ -69062,24 +69115,46 @@ import { dirname as dirname12, isAbsolute as isAbsolute2, join as join15 } from
69062
69115
  class AgentRunActionRunner {
69063
69116
  observabilityBus;
69064
69117
  steeringController;
69118
+ agentConfig;
69065
69119
  kind = KIND;
69066
69120
  agentService;
69067
- constructor(agentService, observabilityBus, steeringController) {
69121
+ constructor(agentService, observabilityBus, steeringController, agentConfig = {}) {
69068
69122
  this.observabilityBus = observabilityBus;
69069
69123
  this.steeringController = steeringController;
69124
+ this.agentConfig = agentConfig;
69070
69125
  this.agentService = agentService;
69071
69126
  }
69072
69127
  async execute(options, context4) {
69073
69128
  const input = asOptionalString(options.input);
69074
69129
  const agent = asOptionalString(options.agent);
69130
+ const dispatchAgent = agent === "inline" ? this.agentConfig.default ?? undefined : agent;
69075
69131
  const model = asOptionalString(options.model);
69076
69132
  const mode = asOptionalString(options.mode) ?? "text";
69077
69133
  const cwd = asOptionalString(options.cwd) ?? context4.workdir ?? ".";
69134
+ const sessionAffinityVar = context4.vars.sessionAffinity;
69135
+ const affinityDisabled = sessionAffinityVar === "false" || typeof sessionAffinityVar === "boolean" && !sessionAffinityVar || options.sessionAffinity === false || this.agentConfig.sessionAffinity === false;
69136
+ const affinityOn = !affinityDisabled;
69137
+ const agentLabel = dispatchAgent ?? "<default>";
69138
+ const targetAgentDir = dispatchAgent ?? this.agentConfig.default ?? "omp";
69139
+ const prevAgent = asOptionalString(context4.vars.__agentSessionAgent);
69140
+ let sessionDir = asOptionalString(context4.vars.__agentSessionDir);
69141
+ if (affinityOn) {
69142
+ if (!sessionDir || prevAgent && prevAgent !== targetAgentDir) {
69143
+ sessionDir = join15(cwd, ".spur", "run", context4.runId, "agent-sessions", targetAgentDir);
69144
+ }
69145
+ } else {
69146
+ if (!sessionDir) {
69147
+ sessionDir = join15(cwd, ".spur", "run", context4.runId, "agent-sessions", targetAgentDir);
69148
+ }
69149
+ }
69150
+ const storedSessionId = asOptionalString(context4.vars.__agentSessionId);
69078
69151
  let continueFlag = asOptionalBoolean(options.continue);
69079
69152
  const latch = context4.vars.__agentSession;
69080
69153
  const latchAutoContinued = continueFlag === undefined && latch === "open";
69081
69154
  if (latchAutoContinued) {
69082
- continueFlag = true;
69155
+ if (!affinityOn) {
69156
+ continueFlag = true;
69157
+ }
69083
69158
  }
69084
69159
  if (input === undefined && !continueFlag) {
69085
69160
  return {
@@ -69088,13 +69163,19 @@ class AgentRunActionRunner {
69088
69163
  };
69089
69164
  }
69090
69165
  const flags = {};
69091
- if (agent !== undefined)
69092
- flags.agent = agent;
69166
+ if (dispatchAgent !== undefined)
69167
+ flags.agent = dispatchAgent;
69093
69168
  if (model !== undefined)
69094
69169
  flags.model = model;
69095
69170
  flags.mode = mode;
69096
69171
  if (cwd !== "")
69097
69172
  flags.cwd = cwd;
69173
+ if (sessionDir) {
69174
+ flags.sessionDir = sessionDir;
69175
+ if (affinityOn && storedSessionId) {
69176
+ flags.sessionId = storedSessionId;
69177
+ }
69178
+ }
69098
69179
  const timeoutMs = asOptionalNumber(options.timeoutMs);
69099
69180
  if (timeoutMs !== undefined && timeoutMs <= 0) {
69100
69181
  return {
@@ -69110,7 +69191,6 @@ class AgentRunActionRunner {
69110
69191
  const expectFile = asOptionalString(options.expectFile);
69111
69192
  const requireDiff = asOptionalBoolean(options.requireDiff);
69112
69193
  const capture = asOptionalBoolean(options.capture) || answerFile !== undefined;
69113
- const agentLabel = agent ?? "<default>";
69114
69194
  const observer = this.observabilityBus === undefined ? undefined : (event2) => {
69115
69195
  this.observabilityBus?.emit("workflow.agent", event2);
69116
69196
  };
@@ -69181,11 +69261,11 @@ class AgentRunActionRunner {
69181
69261
  }
69182
69262
  }
69183
69263
  const stepLabel = context4.stateOrNodeId;
69184
- if (ok && requireDiff === true && !await gitHasNonCorpusChanges(cwd)) {
69264
+ if (ok && requireDiff === true && !await gitHasNonCorpusChanges(cwd, this.agentConfig.excludeGlobs)) {
69185
69265
  return {
69186
69266
  ok: false,
69187
69267
  data: buildResultData(exitCode, agentLabel, capture, answer, invocation),
69188
- error: `agent.run '${stepLabel}' (${agentLabel}) exited 0 but produced zero non-corpus file changes \u2014 empty implement (no-op). The implement agent must change at least one file outside docs/tasks3|docs/features; fix the implement input and re-run the pipeline.`
69268
+ error: `agent.run '${stepLabel}' (${agentLabel}) exited 0 but produced zero non-corpus file changes \u2014 empty implement (no-op). The implement agent must change at least one file outside the configured task/feature folders; fix the implement input and re-run the pipeline.`
69189
69269
  };
69190
69270
  }
69191
69271
  if (!ok) {
@@ -69193,18 +69273,71 @@ class AgentRunActionRunner {
69193
69273
  }
69194
69274
  const partialWorkHint = `partial work (if any) preserved at .spur/run/${context4.runId}-${stepLabel}-partial.md; resume from that tree per the timed-out-implement runbook (plugins/sp/skills/spur-dev/references/execution-workflow.md)`;
69195
69275
  const error51 = ok ? undefined : traced.signal !== undefined ? timeoutMs !== undefined ? `agent.run '${stepLabel}' (${agentLabel}) terminated by signal ${traced.signal} (configured timeout: ${timeoutMs}ms; timeout or cancellation); ${partialWorkHint}` : `agent.run '${stepLabel}' (${agentLabel}) was cancelled by signal ${traced.signal}; ${partialWorkHint}` : traced.message !== undefined ? `agent.run '${stepLabel}' (${agentLabel}) dispatch failed: ${traced.message}` : `agent.run '${stepLabel}' (${agentLabel}) exited with code ${exitCode}; ${partialWorkHint}`;
69276
+ const resolvedAgent = invocation?.agent ?? targetAgentDir;
69277
+ let resolvedSessionDir = sessionDir;
69278
+ if (ok && affinityOn && resolvedAgent !== targetAgentDir && !context4.vars.__agentSessionDir) {
69279
+ resolvedSessionDir = join15(cwd, ".spur", "run", context4.runId, "agent-sessions", resolvedAgent);
69280
+ }
69281
+ let discoveredSessionId = storedSessionId;
69282
+ if (ok && affinityOn && resolvedSessionDir && !discoveredSessionId) {
69283
+ discoveredSessionId = await discoverSessionId(resolvedSessionDir);
69284
+ }
69285
+ if (ok && affinityOn && resolvedSessionDir) {
69286
+ try {
69287
+ const sidecarPath = join15(cwd, ".spur", "run", `${context4.runId}-agent-session.json`);
69288
+ const fs3 = createNodeFileSystem3(cwd);
69289
+ await fs3.ensureDir(dirname12(sidecarPath));
69290
+ await fs3.writeFile(sidecarPath, JSON.stringify({
69291
+ agent: resolvedAgent,
69292
+ sessionId: discoveredSessionId ?? null,
69293
+ sessionDir: resolvedSessionDir,
69294
+ openedAt: new Date().toISOString()
69295
+ }, null, 2));
69296
+ } catch {}
69297
+ }
69196
69298
  return {
69197
69299
  ok,
69198
69300
  data: buildResultData(exitCode, agentLabel, capture, answer, invocation),
69199
69301
  error: error51,
69200
69302
  setVars: ok ? {
69201
69303
  __agentSession: resumeRetried ? "no-resume" : "open",
69304
+ ...affinityOn && resolvedSessionDir ? { __agentSessionDir: resolvedSessionDir } : {},
69305
+ ...affinityOn && (discoveredSessionId || storedSessionId) ? { __agentSessionId: discoveredSessionId || storedSessionId } : {},
69306
+ ...affinityOn ? { __agentSessionAgent: resolvedAgent } : {},
69202
69307
  ...steeringNote !== undefined ? { __steeringNote: steeringNote } : {}
69203
69308
  } : undefined
69204
69309
  };
69205
69310
  } finally {}
69206
69311
  }
69207
69312
  }
69313
+ async function discoverSessionId(sessionDir) {
69314
+ try {
69315
+ const fs3 = createNodeFileSystem3();
69316
+ if (!await fs3.exists(sessionDir))
69317
+ return;
69318
+ const entries = await fs3.readDir(sessionDir);
69319
+ if (entries.length === 0)
69320
+ return;
69321
+ const jsonEntries = entries.filter((e) => e.toLowerCase().endsWith(".json"));
69322
+ if (jsonEntries.length === 0)
69323
+ return;
69324
+ let newestFile;
69325
+ let newestMtime = 0;
69326
+ for (const entry of jsonEntries) {
69327
+ const fullPath = join15(sessionDir, entry);
69328
+ const st = await fs3.stat(fullPath);
69329
+ if (st?.isFile() && st.mtimeMs > newestMtime) {
69330
+ newestMtime = st.mtimeMs;
69331
+ newestFile = entry;
69332
+ }
69333
+ }
69334
+ if (!newestFile)
69335
+ return;
69336
+ return newestFile.replace(/\.json$/i, "");
69337
+ } catch {
69338
+ return;
69339
+ }
69340
+ }
69208
69341
  function buildResultData(exitCode, agentLabel, capture, answer, invocation) {
69209
69342
  const data = { exitCode, agent: agentLabel };
69210
69343
  if (capture)
@@ -69309,11 +69442,12 @@ async function gitDiffStat(cwd) {
69309
69442
  return "";
69310
69443
  }
69311
69444
  }
69312
- async function gitHasNonCorpusChanges(cwd) {
69445
+ async function gitHasNonCorpusChanges(cwd, excludeGlobs = ["docs/tasks3/*", "docs/features/*"]) {
69313
69446
  try {
69447
+ const excludes = excludeGlobs.map((g) => `:(exclude)${g}`);
69314
69448
  const result = await new NodeProcessExecutor3().run({
69315
69449
  command: "git",
69316
- args: ["status", "--porcelain", "--", ".", ":(exclude)docs/tasks3/*", ":(exclude)docs/features/*"],
69450
+ args: ["status", "--porcelain", "--", ".", ...excludes],
69317
69451
  cwd,
69318
69452
  maxOutput: 1024 * 1024,
69319
69453
  forceBuffered: true,
@@ -70028,7 +70162,7 @@ var KIND12 = "shell";
70028
70162
  // ../../packages/app/src/workflow/builtins.ts
70029
70163
  function registerSpurBuiltins(host, options) {
70030
70164
  const fileSystem = options.fileSystem ?? createNodeFileSystem3();
70031
- host.registerAction(new AgentRunActionRunner(options.agentService, options.observabilityBus, options.steeringController), "builtin");
70165
+ host.registerAction(new AgentRunActionRunner(options.agentService, options.observabilityBus, options.steeringController, options.agentConfig), "builtin");
70032
70166
  host.registerAction(new StreamingShellActionRunner(options.processExecutor ?? new NodeProcessExecutor3, options.observabilityBus), "builtin");
70033
70167
  host.registerGuard(new EnvShellGuardRunner(options.processExecutor ?? new NodeProcessExecutor3), "builtin");
70034
70168
  host.registerAction(new RuleCheckActionRunner(options.ruleService), "builtin");
@@ -70138,6 +70272,30 @@ class WorkflowAppService {
70138
70272
  validateSchema: opts.validateSchema !== false,
70139
70273
  ...embedded !== undefined ? embedded : {}
70140
70274
  });
70275
+ const shellErrors = [];
70276
+ const commands = collectShellCommands(workflow);
70277
+ const executor = new NodeProcessExecutor3;
70278
+ for (const { stateId, kind, index: index2, command } of commands) {
70279
+ if (!command || command.trim().length === 0)
70280
+ continue;
70281
+ try {
70282
+ const result = await executor.run({
70283
+ command: "sh",
70284
+ args: ["-n", "-c", command],
70285
+ rejectOnError: false
70286
+ });
70287
+ if (result.exitCode !== 0) {
70288
+ const stderr = (result.stderr ?? "").trim();
70289
+ const location = stateId ? `${stateId}/${kind}[${index2}]` : `${kind}[${index2}]`;
70290
+ shellErrors.push(`Shell syntax error at ${location}: ${stderr || "non-zero exit"}`);
70291
+ }
70292
+ } catch {
70293
+ shellErrors.push(`Shell syntax check failed at ${stateId}/${kind}[${index2}]: process error`);
70294
+ }
70295
+ }
70296
+ if (shellErrors.length > 0) {
70297
+ return { ok: false, valid: false, file: file2, errors: shellErrors };
70298
+ }
70141
70299
  return { ok: true, valid: true, workflow };
70142
70300
  } catch (error51) {
70143
70301
  return {
@@ -70440,6 +70598,23 @@ class WorkflowAppService {
70440
70598
  const processExec = this.ctx.processExecutor?.();
70441
70599
  const host = createDefaultWorkflowEngineHost(processExec !== undefined ? { processExecutor: processExec } : {});
70442
70600
  const bus = this.ctx.observabilityBus?.();
70601
+ let agentSlice = {};
70602
+ try {
70603
+ const agent = (await loadSpurConfig(this.ctx.cwd)).agent;
70604
+ agentSlice = {
70605
+ ...agent?.default !== undefined ? { default: agent.default } : {},
70606
+ ...agent?.sessionAffinity !== undefined ? { sessionAffinity: agent.sessionAffinity } : {}
70607
+ };
70608
+ } catch {}
70609
+ try {
70610
+ const fs3 = createNodeFileSystem3(this.ctx.cwd);
70611
+ const { foldersConfig, featuresDir } = await resolvePlanningFolders(fs3);
70612
+ const folderGlobs = Object.keys(foldersConfig.folders).map((k) => `${k}/*`);
70613
+ agentSlice = {
70614
+ ...agentSlice,
70615
+ excludeGlobs: [...folderGlobs, `${featuresDir}/*`]
70616
+ };
70617
+ } catch {}
70443
70618
  registerSpurBuiltins(host, {
70444
70619
  agentService: this.ctx.agentService(),
70445
70620
  ruleService: this.ctx.ruleService(),
@@ -70448,7 +70623,8 @@ class WorkflowAppService {
70448
70623
  hostAllowlist: this.ctx.hostAllowlist?.(),
70449
70624
  ...bus !== undefined ? { observabilityBus: bus } : {},
70450
70625
  ...processExec !== undefined ? { processExecutor: processExec } : {},
70451
- ...opts.steeringController !== undefined ? { steeringController: opts.steeringController } : {}
70626
+ ...opts.steeringController !== undefined ? { steeringController: opts.steeringController } : {},
70627
+ agentConfig: agentSlice
70452
70628
  });
70453
70629
  const db2 = await this.ctx.getDb();
70454
70630
  let persistence2 = new DbWorkflowPersistenceAdapter(db2);
@@ -70459,6 +70635,55 @@ class WorkflowAppService {
70459
70635
  return new WorkflowService(host, adapter);
70460
70636
  }
70461
70637
  }
70638
+ function collectShellCommands(def) {
70639
+ const entries = [];
70640
+ const visitAction = (stateId, action, idx) => {
70641
+ if (action.kind === "shell") {
70642
+ const cmd = action.options?.command;
70643
+ if (typeof cmd === "string" && cmd.length > 0) {
70644
+ entries.push({ stateId, kind: "action", index: idx, command: cmd });
70645
+ }
70646
+ }
70647
+ };
70648
+ const visitGuard = (stateId, guard) => {
70649
+ if (guard.kind === "shell") {
70650
+ const cmd = guard.options?.command;
70651
+ if (typeof cmd === "string" && cmd.length > 0) {
70652
+ entries.push({ stateId, kind: "guard", index: 0, command: cmd });
70653
+ }
70654
+ }
70655
+ };
70656
+ if (def.kind === "transition-flow" || def.kind === undefined) {
70657
+ const flowDef = def;
70658
+ for (const node of flowDef.nodes ?? []) {
70659
+ if (node.action)
70660
+ visitAction(node.id, node.action, 0);
70661
+ }
70662
+ for (const edge of flowDef.edges ?? []) {
70663
+ if (edge.condition)
70664
+ visitGuard(edge.from, edge.condition);
70665
+ }
70666
+ } else {
70667
+ const smDef = def;
70668
+ for (const state of smDef.states ?? []) {
70669
+ if (state.onEnter) {
70670
+ state.onEnter.forEach((action, i2) => {
70671
+ visitAction(state.id, action, i2);
70672
+ });
70673
+ }
70674
+ if (state.onExit) {
70675
+ state.onExit.forEach((action, i2) => {
70676
+ visitAction(state.id, action, i2);
70677
+ });
70678
+ }
70679
+ }
70680
+ for (const trans of smDef.transitions ?? []) {
70681
+ if (trans.guard)
70682
+ visitGuard(`${trans.from}\u2192${trans.to}`, trans.guard);
70683
+ }
70684
+ }
70685
+ return entries;
70686
+ }
70462
70687
  async function fileExists(path9) {
70463
70688
  const fs3 = createNodeFileSystem3();
70464
70689
  return await fs3.exists(path9);
@@ -71030,19 +71255,19 @@ var {
71030
71255
  init_src();
71031
71256
  init_loader();
71032
71257
 
71033
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/application-node.js
71258
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/application-node.js
71034
71259
  init_dist4();
71035
71260
  init_dist5();
71036
71261
  import { appendFileSync as appendFileSync4, mkdirSync as mkdirSync3, readFileSync as readFileSync5 } from "fs";
71037
71262
  import { dirname as dirname5 } from "path";
71038
71263
 
71039
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/application/index.js
71264
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/application/index.js
71040
71265
  init_default_observers();
71041
71266
  init_event_bus();
71042
71267
  init_file_observer();
71043
71268
  init_logger3();
71044
71269
 
71045
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/scheduler/noop.js
71270
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/scheduler/noop.js
71046
71271
  class NoopSchedulerAdapter {
71047
71272
  constructor() {}
71048
71273
  register(_cron, _action) {}
@@ -71050,7 +71275,7 @@ class NoopSchedulerAdapter {
71050
71275
  async stop() {}
71051
71276
  }
71052
71277
 
71053
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/scheduler/factory.js
71278
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/scheduler/factory.js
71054
71279
  function initScheduler(adapter, cronEntries) {
71055
71280
  const resolved = adapter ?? new NoopSchedulerAdapter;
71056
71281
  if (cronEntries) {
@@ -71061,7 +71286,7 @@ function initScheduler(adapter, cronEntries) {
71061
71286
  return resolved;
71062
71287
  }
71063
71288
 
71064
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/application/plugins/builtins.js
71289
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/application/plugins/builtins.js
71065
71290
  init_logger3();
71066
71291
  init_metrics();
71067
71292
  init_sdk();
@@ -71154,7 +71379,7 @@ function dbPlugin(db2) {
71154
71379
  };
71155
71380
  }
71156
71381
 
71157
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/application/plugins/host.js
71382
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/application/plugins/host.js
71158
71383
  init_logger3();
71159
71384
 
71160
71385
  class PluginHost {
@@ -71242,7 +71467,7 @@ class PluginHost {
71242
71467
  }
71243
71468
  }
71244
71469
 
71245
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/application/index.js
71470
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/application/index.js
71246
71471
  async function performShutdown(state, reason) {
71247
71472
  if (state.stopped)
71248
71473
  return;
@@ -71353,10 +71578,10 @@ async function runApplication(options) {
71353
71578
  }
71354
71579
  }
71355
71580
 
71356
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/application-node.js
71581
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/application-node.js
71357
71582
  init_scheduler_node();
71358
71583
 
71359
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/telemetry/otel-node.js
71584
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/telemetry/otel-node.js
71360
71585
  var import_api14 = __toESM(require_src(), 1);
71361
71586
 
71362
71587
  // ../../node_modules/.bun/@opentelemetry+exporter-metrics-otlp-http@0.218.0+e40b0dfdd726a224/node_modules/@opentelemetry/exporter-metrics-otlp-http/build/esm/OTLPMetricExporterBase.js
@@ -74372,7 +74597,7 @@ class OTLPTraceExporter extends import_otlp_exporter_base2.OTLPExporterBase {
74372
74597
  }), JsonTraceSerializer));
74373
74598
  }
74374
74599
  }
74375
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/telemetry/otel-node.js
74600
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/telemetry/otel-node.js
74376
74601
  var import_resources2 = __toESM(require_src4(), 1);
74377
74602
  var import_sdk_trace_node = __toESM(require_src8(), 1);
74378
74603
  var import_semantic_conventions = __toESM(require_src2(), 1);
@@ -74423,7 +74648,7 @@ async function shutdownNodeTelemetry() {
74423
74648
  await Promise.all(pending);
74424
74649
  }
74425
74650
 
74426
- // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.18+863f28addc1a7cdc/node_modules/@gobing-ai/ts-infra/dist/application-node.js
74651
+ // ../../node_modules/.bun/@gobing-ai+ts-infra@0.4.19+79868827d1ab596b/node_modules/@gobing-ai/ts-infra/dist/application-node.js
74427
74652
  class ConfigValidationError extends Error {
74428
74653
  constructor(message) {
74429
74654
  super(message);
@@ -78849,6 +79074,9 @@ function registerFeatureCommand(program2, context4) {
78849
79074
  const resolved = await resolvePlanningFolders(context4.fs);
78850
79075
  const featuresDir = options.folder ?? context4.fs.resolve(resolved.featuresDir);
78851
79076
  const tasksDir = context4.fs.resolve(resolved.tasksDir);
79077
+ const tasksDirs = Object.keys(resolved.foldersConfig.folders).map((p) => context4.fs.resolve(p));
79078
+ if (!tasksDirs.includes(tasksDir))
79079
+ tasksDirs.unshift(tasksDir);
78852
79080
  const svc = new FeatureCheckService(context4.fs);
78853
79081
  const json3 = options.json === true;
78854
79082
  const strict = options.strict === true;
@@ -78867,6 +79095,7 @@ function registerFeatureCommand(program2, context4) {
78867
79095
  strict,
78868
79096
  featuresDir,
78869
79097
  tasksDir,
79098
+ tasksDirs,
78870
79099
  runDir: context4.fs.resolve(".spur/run"),
78871
79100
  severityOverrides: resolved.severityOverrides,
78872
79101
  asStatus: options.as
@@ -78962,6 +79191,9 @@ async function assertFeatureCheckPass(context4, id, folderOverride, strict, asSt
78962
79191
  const resolved = await resolvePlanningFolders(context4.fs);
78963
79192
  const featuresDir = folderOverride ?? context4.fs.resolve(resolved.featuresDir);
78964
79193
  const tasksDir = context4.fs.resolve(resolved.tasksDir);
79194
+ const tasksDirs = Object.keys(resolved.foldersConfig.folders).map((p) => context4.fs.resolve(p));
79195
+ if (!tasksDirs.includes(tasksDir))
79196
+ tasksDirs.unshift(tasksDir);
78965
79197
  const entries = await context4.fs.readDir(featuresDir);
78966
79198
  const fileName = entries.find((name) => name.match(new RegExp(`^${id}_.+\\.md$`)));
78967
79199
  if (fileName === undefined) {
@@ -78971,6 +79203,7 @@ async function assertFeatureCheckPass(context4, id, folderOverride, strict, asSt
78971
79203
  strict,
78972
79204
  featuresDir,
78973
79205
  tasksDir,
79206
+ tasksDirs,
78974
79207
  asStatus
78975
79208
  });
78976
79209
  if (!result.pass) {
@@ -79001,9 +79234,13 @@ function registerHistoryCommand(program2, context4) {
79001
79234
  const summary = await svc.analyze(options.since || undefined);
79002
79235
  context4.output.write(options.json ? toJson2(summary) : formatSummary(summary));
79003
79236
  });
79004
- noun.command("report").description("Reserved richer report surface; currently prints a TODO marker.").option("--json", "Output machine-readable JSON where supported").action(async (options) => {
79005
- const message = "TODO: spur history report is reserved for the richer report surface.";
79006
- context4.output.write(options.json ? toJson2({ status: "todo", message }) : message);
79237
+ noun.command("report").description("Reserved richer report surface; not yet implemented (see docs/04_DESIGN.md \xA7spur history report).").option("--json", "Output machine-readable JSON where supported").action(async (options) => {
79238
+ const message = `spur history report is reserved but not yet implemented (P8).
79239
+ ` + `See docs/04_DESIGN.md for the planned surface.
79240
+ ` + `Workaround: use "spur history analyze" for aggregate summaries, or
79241
+ ` + '"spur history import" to load session data, then query the database directly.';
79242
+ context4.output.write(options.json ? toJson2({ status: "not-implemented", message }) : message);
79243
+ context4.setExitCode(0);
79007
79244
  });
79008
79245
  }
79009
79246
  function formatImportResult(r) {
@@ -79031,7 +79268,7 @@ import { join as join19, resolve as resolve6 } from "path";
79031
79268
  var CLI_CONFIG = {
79032
79269
  binaryName: "spur",
79033
79270
  binaryLabel: "spur",
79034
- binaryVersion: "0.3.32",
79271
+ binaryVersion: "0.3.34",
79035
79272
  configDir: ".spur",
79036
79273
  configFile: ".spur/config.yaml",
79037
79274
  databaseFile: ".spur/spur.db"
@@ -85998,7 +86235,9 @@ function createFeatureHandlers(ctx) {
85998
86235
  }),
85999
86236
  sync: os2.feature.sync.handler(async ({ input }) => {
86000
86237
  if (input.direction === "push") {
86001
- throw new Error("Push sync (feature->tasks cascade) is not implemented");
86238
+ throw new HTTPException(501, {
86239
+ message: "Push sync (feature->tasks cascade) is not implemented; use the pull direction or spur feature sync CLI"
86240
+ });
86002
86241
  }
86003
86242
  const svc = ctx.featureService();
86004
86243
  const res = await svc.syncFeature(input.id);
@@ -89702,7 +89941,7 @@ var spur_config_schema_default = {
89702
89941
  },
89703
89942
  executors: {
89704
89943
  type: "array",
89705
- description: "Named executor profiles: each pairs a canonical agent with an optional model override. Referenced by name from `default` and `default-by-phase`.",
89944
+ description: "Named executor profiles: each pairs a canonical agent with an optional model override. Referenced by name from `agent.default` and stage model_policy (default-by-phase removed 0452).",
89706
89945
  items: {
89707
89946
  type: "object",
89708
89947
  required: ["name", "agent"],
@@ -89730,13 +89969,6 @@ var spur_config_schema_default = {
89730
89969
  }
89731
89970
  }
89732
89971
  },
89733
- "default-by-phase": {
89734
- type: "object",
89735
- description: "DEPRECATED (ADR-033). Backward-compat map of dev phase (e.g. dev-run, dev-review) to executor selector. Prefer executor `tier` + stage-registry model_policy. When present, a matching phase mapping is still authoritative (fail-fast; no fall back to `default`) and shadows stage routing for that phase.",
89736
- additionalProperties: {
89737
- type: "string"
89738
- }
89739
- },
89740
89972
  team: {
89741
89973
  type: "object",
89742
89974
  description: "Declarative agent teams keyed by team id (the map key is the teamId). Each team materializes a roster of agent specs (feature M). Mirrors @gobing-ai/spur-config TeamConfigSchema (Zod is SSOT).",
@@ -89764,7 +89996,10 @@ var spur_config_schema_default = {
89764
89996
  description: "Roster of member references (>= 1). A bare string is shorthand for { executor: <string> }; the composed agent id is <teamId>-<id ?? executor>.",
89765
89997
  items: {
89766
89998
  oneOf: [
89767
- { type: "string", minLength: 1 },
89999
+ {
90000
+ type: "string",
90001
+ minLength: 1
90002
+ },
89768
90003
  {
89769
90004
  type: "object",
89770
90005
  required: ["executor"],
@@ -89779,20 +90014,34 @@ var spur_config_schema_default = {
89779
90014
  minLength: 1,
89780
90015
  description: "Local member id; composed id is <teamId>-<id ?? executor> (must match ^[a-z][a-z0-9_-]{1,63}$)."
89781
90016
  },
89782
- purpose: { type: "string" },
90017
+ purpose: {
90018
+ type: "string"
90019
+ },
89783
90020
  workspace: {
89784
90021
  type: "string",
89785
90022
  minLength: 1,
89786
90023
  description: "Per-member workspace override. A leading `~` is tilde-expanded at load."
89787
90024
  },
89788
- model: { type: "string", minLength: 1 },
89789
- autonomy: { type: "string" },
89790
- systemPrompt: { type: "string" },
90025
+ model: {
90026
+ type: "string",
90027
+ minLength: 1
90028
+ },
90029
+ autonomy: {
90030
+ type: "string"
90031
+ },
90032
+ systemPrompt: {
90033
+ type: "string"
90034
+ },
89791
90035
  command: {
89792
90036
  type: "array",
89793
- items: { type: "string", minLength: 1 }
90037
+ items: {
90038
+ type: "string",
90039
+ minLength: 1
90040
+ }
89794
90041
  },
89795
- autostart: { type: "boolean" }
90042
+ autostart: {
90043
+ type: "boolean"
90044
+ }
89796
90045
  }
89797
90046
  }
89798
90047
  ]
@@ -89808,7 +90057,9 @@ var spur_config_schema_default = {
89808
90057
  properties: {
89809
90058
  paths: {
89810
90059
  type: "array",
89811
- items: { type: "string" },
90060
+ items: {
90061
+ type: "string"
90062
+ },
89812
90063
  description: "Glob paths to rule files."
89813
90064
  }
89814
90065
  }
@@ -89818,7 +90069,9 @@ var spur_config_schema_default = {
89818
90069
  properties: {
89819
90070
  paths: {
89820
90071
  type: "array",
89821
- items: { type: "string" },
90072
+ items: {
90073
+ type: "string"
90074
+ },
89822
90075
  description: "Glob paths to workflow directories."
89823
90076
  }
89824
90077
  }