@wrongstack/core 0.8.5 → 0.8.6

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.
Files changed (32) hide show
  1. package/dist/{agent-bridge-DPxcUVkn.d.ts → agent-bridge-Bad3ZGQ7.d.ts} +1 -1
  2. package/dist/{agent-subagent-runner-Cav3yEJM.d.ts → agent-subagent-runner-Cc8sRJOF.d.ts} +3 -3
  3. package/dist/coordination/index.d.ts +8 -8
  4. package/dist/defaults/index.d.ts +11 -11
  5. package/dist/{events-DyhxkstG.d.ts → events-yCpJD4wa.d.ts} +49 -0
  6. package/dist/execution/index.d.ts +7 -7
  7. package/dist/extension/index.d.ts +2 -2
  8. package/dist/index-BvZld4Dr.d.ts +200 -0
  9. package/dist/{index-oYZeWsuJ.d.ts → index-SxpnwRlJ.d.ts} +1 -1
  10. package/dist/index.d.ts +51 -18
  11. package/dist/index.js +381 -41
  12. package/dist/index.js.map +1 -1
  13. package/dist/infrastructure/index.d.ts +2 -2
  14. package/dist/kernel/index.d.ts +16 -88
  15. package/dist/kernel/index.js +3 -1
  16. package/dist/kernel/index.js.map +1 -1
  17. package/dist/{multi-agent-CRMznZmf.d.ts → multi-agent-C8uY45AY.d.ts} +9 -1
  18. package/dist/{multi-agent-coordinator-IQKrMfXz.d.ts → multi-agent-coordinator-C7YbZUY8.d.ts} +2 -2
  19. package/dist/{null-fleet-bus-sKnVwEd8.d.ts → null-fleet-bus-Bb2jVLKr.d.ts} +5 -5
  20. package/dist/observability/index.d.ts +1 -1
  21. package/dist/{path-resolver-1CIYbH2Q.d.ts → path-resolver-DnC1nOjb.d.ts} +1 -1
  22. package/dist/{plan-templates-D8zQgZzc.d.ts → plan-templates-Cqdy6rtM.d.ts} +2 -2
  23. package/dist/{provider-runner-BrA0XR-l.d.ts → provider-runner-C4ouU7--.d.ts} +1 -1
  24. package/dist/sdd/index.d.ts +4 -4
  25. package/dist/storage/index.d.ts +3 -3
  26. package/dist/{tool-executor-QwfWnQZ8.d.ts → tool-executor-Ch25BDwa.d.ts} +1 -1
  27. package/dist/types/index.d.ts +7 -7
  28. package/dist/utils/index.d.ts +1 -1
  29. package/dist/utils/index.js +1 -0
  30. package/dist/utils/index.js.map +1 -1
  31. package/dist/{wstack-paths-Bxik3CsK.d.ts → wstack-paths-CJYrjQU8.d.ts} +2 -0
  32. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { randomBytes, createCipheriv, createDecipheriv, randomUUID, createHash }
3
3
  import * as fsp2 from 'fs/promises';
4
4
  import { readFile, readdir, stat, mkdir } from 'fs/promises';
5
5
  import * as path6 from 'path';
6
- import { join, extname, relative } from 'path';
6
+ import { join, extname, relative, resolve, sep } from 'path';
7
7
  import * as fs2 from 'fs';
8
8
  import * as os5 from 'os';
9
9
  import { execFile, spawn } from 'child_process';
@@ -93,7 +93,7 @@ async function renameWithRetry(from, to) {
93
93
  if (!code || !TRANSIENT_RENAME_CODES.has(code) || i === delays.length) {
94
94
  throw err;
95
95
  }
96
- await new Promise((resolve7) => setTimeout(resolve7, delays[i]));
96
+ await new Promise((resolve8) => setTimeout(resolve8, delays[i]));
97
97
  }
98
98
  }
99
99
  throw lastErr;
@@ -830,7 +830,9 @@ var TOKENS = {
830
830
  ModelsRegistry: t("ModelsRegistry"),
831
831
  ModeStore: t("ModeStore"),
832
832
  /** Replaces the entire provider call layer — retry, streaming, tracing. */
833
- ProviderRunner: t("ProviderRunner")
833
+ ProviderRunner: t("ProviderRunner"),
834
+ /** Optional git-worktree lifecycle manager (per-phase isolation in AutoPhase). */
835
+ WorktreeManager: t("WorktreeManager")
834
836
  };
835
837
 
836
838
  // src/kernel/run-controller.ts
@@ -2692,7 +2694,7 @@ var InMemoryAgentBridge = class {
2692
2694
  );
2693
2695
  }
2694
2696
  this.inflightGuards.add(correlationId);
2695
- return new Promise((resolve7, reject) => {
2697
+ return new Promise((resolve8, reject) => {
2696
2698
  const timer = setTimeout(() => {
2697
2699
  this.inflightGuards.delete(correlationId);
2698
2700
  this.pendingRequests.delete(correlationId);
@@ -2704,7 +2706,7 @@ var InMemoryAgentBridge = class {
2704
2706
  return;
2705
2707
  }
2706
2708
  this.pendingRequests.set(correlationId, {
2707
- resolve: resolve7,
2709
+ resolve: resolve8,
2708
2710
  reject,
2709
2711
  timer
2710
2712
  });
@@ -3920,6 +3922,7 @@ function resolveWstackPaths(opts) {
3920
3922
  projectLocalConfig: path6.join(projectDir, "config.local.json"),
3921
3923
  inProjectAgentsFile: path6.join(opts.projectRoot, ".wrongstack", "AGENTS.md"),
3922
3924
  inProjectSkills: path6.join(opts.projectRoot, ".wrongstack", "skills"),
3925
+ inProjectWorktrees: path6.join(opts.projectRoot, ".wrongstack", "worktrees"),
3923
3926
  projectHash: hash,
3924
3927
  projectGoal: path6.join(projectDir, "goal.json"),
3925
3928
  projectSpecs: path6.join(projectDir, "specs"),
@@ -6621,8 +6624,8 @@ async function streamProviderToResponse(provider, req, signal, ctx, events) {
6621
6624
  try {
6622
6625
  await Promise.race([
6623
6626
  Promise.resolve(iter.return?.()),
6624
- new Promise((resolve7) => {
6625
- drainTimer = setTimeout(resolve7, 500);
6627
+ new Promise((resolve8) => {
6628
+ drainTimer = setTimeout(resolve8, 500);
6626
6629
  })
6627
6630
  ]);
6628
6631
  } finally {
@@ -6683,7 +6686,7 @@ async function runProviderWithRetry(opts) {
6683
6686
  description
6684
6687
  });
6685
6688
  }
6686
- await new Promise((resolve7, reject) => {
6689
+ await new Promise((resolve8, reject) => {
6687
6690
  let settled = false;
6688
6691
  const onAbort = () => {
6689
6692
  if (settled) return;
@@ -6696,7 +6699,7 @@ async function runProviderWithRetry(opts) {
6696
6699
  settled = true;
6697
6700
  clearTimeout(t2);
6698
6701
  signal.removeEventListener("abort", onAbort);
6699
- resolve7();
6702
+ resolve8();
6700
6703
  }, delay);
6701
6704
  if (signal.aborted) {
6702
6705
  onAbort();
@@ -8340,7 +8343,7 @@ ${recentJournal}` : "No prior iterations.",
8340
8343
  }
8341
8344
  };
8342
8345
  function sleep(ms) {
8343
- return new Promise((resolve7) => setTimeout(resolve7, ms));
8346
+ return new Promise((resolve8) => setTimeout(resolve8, ms));
8344
8347
  }
8345
8348
 
8346
8349
  // src/coordination/subagent-budget.ts
@@ -8490,12 +8493,12 @@ var SubagentBudget = class _SubagentBudget {
8490
8493
  if (!bus || !bus.hasListenerFor("budget.threshold_reached")) {
8491
8494
  return Promise.resolve("stop");
8492
8495
  }
8493
- return new Promise((resolve7) => {
8496
+ return new Promise((resolve8) => {
8494
8497
  let resolved = false;
8495
8498
  const respond = (d) => {
8496
8499
  if (resolved) return;
8497
8500
  resolved = true;
8498
- resolve7(d);
8501
+ resolve8(d);
8499
8502
  };
8500
8503
  const fallback = setTimeout(
8501
8504
  () => respond("stop"),
@@ -11536,7 +11539,7 @@ var DefaultMultiAgentCoordinator = class extends EventEmitter {
11536
11539
  taskIds.map((id) => {
11537
11540
  const cached = this.completedResults.find((r) => r.taskId === id);
11538
11541
  if (cached) return cached;
11539
- return new Promise((resolve7, reject) => {
11542
+ return new Promise((resolve8, reject) => {
11540
11543
  const timeout = setTimeout(() => {
11541
11544
  this.off("task.completed", handler);
11542
11545
  reject(new Error(`awaitTasks timed out waiting for task "${id}"`));
@@ -11545,7 +11548,7 @@ var DefaultMultiAgentCoordinator = class extends EventEmitter {
11545
11548
  if (result.taskId === id) {
11546
11549
  clearTimeout(timeout);
11547
11550
  this.off("task.completed", handler);
11548
- resolve7(result);
11551
+ resolve8(result);
11549
11552
  }
11550
11553
  };
11551
11554
  this.on("task.completed", handler);
@@ -11975,7 +11978,7 @@ function providerErrorToSubagentError(err, message, cause) {
11975
11978
 
11976
11979
  // src/execution/parallel-eternal-engine.ts
11977
11980
  function sleep2(ms) {
11978
- return new Promise((resolve7) => setTimeout(resolve7, ms));
11981
+ return new Promise((resolve8) => setTimeout(resolve8, ms));
11979
11982
  }
11980
11983
  var GOAL_COMPLETE_MARKER2 = /^\s*\[goal[_\s-]?complete\]\s*$/im;
11981
11984
  var ParallelEternalEngine = class {
@@ -13617,11 +13620,11 @@ var Director = class {
13617
13620
  if (cached) return cached;
13618
13621
  const existing = this.taskWaiters.get(id);
13619
13622
  if (existing) return existing.promise;
13620
- let resolve7;
13623
+ let resolve8;
13621
13624
  const promise = new Promise((res) => {
13622
- resolve7 = res;
13625
+ resolve8 = res;
13623
13626
  });
13624
- this.taskWaiters.set(id, { promise, resolve: resolve7 });
13627
+ this.taskWaiters.set(id, { promise, resolve: resolve8 });
13625
13628
  return promise;
13626
13629
  })
13627
13630
  );
@@ -13937,7 +13940,7 @@ function createDelegateTool(opts) {
13937
13940
  subagentId
13938
13941
  });
13939
13942
  const dir = director;
13940
- const result = await new Promise((resolve7) => {
13943
+ const result = await new Promise((resolve8) => {
13941
13944
  let settled = false;
13942
13945
  let timer;
13943
13946
  const finish = (value) => {
@@ -13946,7 +13949,7 @@ function createDelegateTool(opts) {
13946
13949
  if (timer) clearTimeout(timer);
13947
13950
  offTool();
13948
13951
  offIter();
13949
- resolve7(value);
13952
+ resolve8(value);
13950
13953
  };
13951
13954
  const arm = () => {
13952
13955
  if (timer) clearTimeout(timer);
@@ -17089,9 +17092,9 @@ var DefaultHealthRegistry = class {
17089
17092
  }
17090
17093
  async runOne(check) {
17091
17094
  let timer = null;
17092
- const timeout = new Promise((resolve7) => {
17095
+ const timeout = new Promise((resolve8) => {
17093
17096
  timer = setTimeout(
17094
- () => resolve7({ status: "unhealthy", detail: `timeout after ${this.timeoutMs}ms` }),
17097
+ () => resolve8({ status: "unhealthy", detail: `timeout after ${this.timeoutMs}ms` }),
17095
17098
  this.timeoutMs
17096
17099
  );
17097
17100
  });
@@ -17330,14 +17333,14 @@ async function startMetricsServer(opts) {
17330
17333
  const { createServer } = await import('http');
17331
17334
  server = createServer(listener);
17332
17335
  }
17333
- await new Promise((resolve7, reject) => {
17336
+ await new Promise((resolve8, reject) => {
17334
17337
  const onError = (err) => {
17335
17338
  server.off("listening", onListening);
17336
17339
  reject(err);
17337
17340
  };
17338
17341
  const onListening = () => {
17339
17342
  server.off("error", onError);
17340
- resolve7();
17343
+ resolve8();
17341
17344
  };
17342
17345
  server.once("error", onError);
17343
17346
  server.once("listening", onListening);
@@ -17349,8 +17352,8 @@ async function startMetricsServer(opts) {
17349
17352
  return {
17350
17353
  port: boundPort,
17351
17354
  url: `${protocol}://${host}:${boundPort}${path28}`,
17352
- close: () => new Promise((resolve7, reject) => {
17353
- server.close((err) => err ? reject(err) : resolve7());
17355
+ close: () => new Promise((resolve8, reject) => {
17356
+ server.close((err) => err ? reject(err) : resolve8());
17354
17357
  })
17355
17358
  };
17356
17359
  }
@@ -19474,8 +19477,8 @@ var ReportGenerator = class {
19474
19477
  try {
19475
19478
  await stat(this.options.outputDir);
19476
19479
  } catch {
19477
- const { mkdir: mkdir13 } = await import('fs/promises');
19478
- await mkdir13(this.options.outputDir, { recursive: true });
19480
+ const { mkdir: mkdir14 } = await import('fs/promises');
19481
+ await mkdir14(this.options.outputDir, { recursive: true });
19479
19482
  }
19480
19483
  }
19481
19484
  generateMarkdown(result) {
@@ -19751,7 +19754,7 @@ var SecurityScannerOrchestrator = class {
19751
19754
  const delay = Math.round(policy.delayMs(attempt));
19752
19755
  const status = isProviderErr ? err.status : 0;
19753
19756
  console.warn(`[SecurityScanner] retry ${attempt + 1} after ${delay}ms (status=${status}) \u2014 ${errAsErr.message}`);
19754
- await new Promise((resolve7) => setTimeout(resolve7, delay));
19757
+ await new Promise((resolve8) => setTimeout(resolve8, delay));
19755
19758
  return this.completeWithRetry(provider, request, abortController, attempt + 1);
19756
19759
  }
19757
19760
  }
@@ -21248,12 +21251,12 @@ function makeContinueToNextIterationTool() {
21248
21251
  // src/core/iteration-limit.ts
21249
21252
  function requestLimitExtension(opts) {
21250
21253
  const { events, currentIterations, currentLimit, autoExtend, timeoutMs = 3e4 } = opts;
21251
- return new Promise((resolve7) => {
21254
+ return new Promise((resolve8) => {
21252
21255
  let resolved = false;
21253
21256
  const timerFired = () => {
21254
21257
  if (!resolved) {
21255
21258
  resolved = true;
21256
- resolve7(0);
21259
+ resolve8(0);
21257
21260
  }
21258
21261
  };
21259
21262
  const timer = setTimeout(timerFired, timeoutMs);
@@ -21262,14 +21265,14 @@ function requestLimitExtension(opts) {
21262
21265
  if (!resolved) {
21263
21266
  resolved = true;
21264
21267
  clearTimeout(timer);
21265
- resolve7(0);
21268
+ resolve8(0);
21266
21269
  }
21267
21270
  };
21268
21271
  const grant = (extra) => {
21269
21272
  if (!resolved) {
21270
21273
  resolved = true;
21271
21274
  clearTimeout(timer);
21272
- resolve7(Math.max(0, extra));
21275
+ resolve8(Math.max(0, extra));
21273
21276
  }
21274
21277
  };
21275
21278
  events.emit("iteration.limit_reached", {
@@ -21283,7 +21286,7 @@ function requestLimitExtension(opts) {
21283
21286
  if (!resolved) {
21284
21287
  resolved = true;
21285
21288
  clearTimeout(timer);
21286
- resolve7(100);
21289
+ resolve8(100);
21287
21290
  }
21288
21291
  });
21289
21292
  }
@@ -21852,13 +21855,13 @@ var Agent = class {
21852
21855
  }
21853
21856
  }
21854
21857
  waitForConfirm(info) {
21855
- return new Promise((resolve7) => {
21858
+ return new Promise((resolve8) => {
21856
21859
  this.events.emit("tool.confirm_needed", {
21857
21860
  tool: info.tool,
21858
21861
  input: info.input,
21859
21862
  toolUseId: info.toolUseId,
21860
21863
  suggestedPattern: info.suggestedPattern,
21861
- resolve: resolve7
21864
+ resolve: resolve8
21862
21865
  });
21863
21866
  });
21864
21867
  }
@@ -22575,12 +22578,12 @@ ${mem}`);
22575
22578
  }
22576
22579
  }
22577
22580
  async gitStatus(root) {
22578
- return new Promise((resolve7) => {
22581
+ return new Promise((resolve8) => {
22579
22582
  let settled = false;
22580
22583
  const finish = (s) => {
22581
22584
  if (settled) return;
22582
22585
  settled = true;
22583
- resolve7(s);
22586
+ resolve8(s);
22584
22587
  };
22585
22588
  let proc;
22586
22589
  const timer = setTimeout(() => {
@@ -23455,10 +23458,19 @@ var PhaseOrchestrator = class {
23455
23458
  tickInterval = null;
23456
23459
  trackerCache = /* @__PURE__ */ new Map();
23457
23460
  taskRetryCounts = /* @__PURE__ */ new Map();
23461
+ // ── Git-worktree isolation (optional) ──────────────────────────────────────
23462
+ worktrees;
23463
+ /** Per-phase worktree handles, keyed by phase id. */
23464
+ phaseWorktrees = /* @__PURE__ */ new Map();
23465
+ /** Serializes all merges back to the base branch (one at a time). */
23466
+ mergeQueue = Promise.resolve();
23467
+ /** Per-phase merge promise, so a phase merges only after its deps do. */
23468
+ phaseMergePromise = /* @__PURE__ */ new Map();
23458
23469
  constructor(opts) {
23459
23470
  this.graph = opts.graph;
23460
23471
  this.ctx = opts.ctx;
23461
23472
  this.events = opts.events ?? this.createNoopEventBus();
23473
+ this.worktrees = opts.worktrees;
23462
23474
  this.opts = {
23463
23475
  maxConcurrentPhases: opts.maxConcurrentPhases ?? 1,
23464
23476
  maxConcurrentTasks: opts.maxConcurrentTasks ?? 2,
@@ -23490,10 +23502,17 @@ var PhaseOrchestrator = class {
23490
23502
  (p) => !this.runningPhases.has(p.id) && p.status !== "completed" && p.status !== "failed"
23491
23503
  );
23492
23504
  }
23505
+ await this.drainMerges();
23493
23506
  if (this.opts.autonomous) {
23494
23507
  this.tickInterval = setInterval(() => this.tick(), 1e3);
23495
23508
  }
23496
23509
  }
23510
+ /** Bekleyen tüm faz merge'lerini (dep-sıralı + global seri) bekle. */
23511
+ async drainMerges() {
23512
+ await Promise.allSettled([...this.phaseMergePromise.values()]);
23513
+ await this.mergeQueue.catch(() => {
23514
+ });
23515
+ }
23497
23516
  /** Duraklat — aktif fazlar çalışmaya devam eder ama yeni faz başlamaz */
23498
23517
  pause() {
23499
23518
  this.paused = true;
@@ -23518,6 +23537,12 @@ var PhaseOrchestrator = class {
23518
23537
  this.updatePhaseStatus(phase, "paused");
23519
23538
  }
23520
23539
  }
23540
+ if (this.worktrees) {
23541
+ for (const handle of this.worktrees.list()) {
23542
+ void this.worktrees.release(handle, { keep: true }).catch(() => {
23543
+ });
23544
+ }
23545
+ }
23521
23546
  }
23522
23547
  // ─── Tick Loop (Autonomous) ───────────────────────────────────────────────
23523
23548
  async tick() {
@@ -23556,6 +23581,16 @@ var PhaseOrchestrator = class {
23556
23581
  phase.startedAt = Date.now();
23557
23582
  this.runningPhases.add(phase.id);
23558
23583
  this.graph.activePhaseIds.push(phase.id);
23584
+ if (this.worktrees && !this.phaseWorktrees.has(phase.id)) {
23585
+ try {
23586
+ const handle = await this.worktrees.allocate(phase.id, {
23587
+ slugHint: phase.name,
23588
+ ownerLabel: phase.name
23589
+ });
23590
+ if (handle.status === "active") this.phaseWorktrees.set(phase.id, handle);
23591
+ } catch {
23592
+ }
23593
+ }
23559
23594
  this.emit("phase.started", { phaseId: phase.id, name: phase.name });
23560
23595
  try {
23561
23596
  await this.executePhaseTasks(phase);
@@ -23578,6 +23613,7 @@ var PhaseOrchestrator = class {
23578
23613
  error: `${failedTasks} task(s) failed`
23579
23614
  });
23580
23615
  this.ctx.onPhaseFail?.(phase, new Error(`${failedTasks} task(s) failed`));
23616
+ await this.keepWorktreeForReview(phase);
23581
23617
  } else {
23582
23618
  this.updatePhaseStatus(phase, "completed");
23583
23619
  phase.completedAt = Date.now();
@@ -23591,6 +23627,7 @@ var PhaseOrchestrator = class {
23591
23627
  durationMs: phase.actualDurationMs
23592
23628
  });
23593
23629
  this.ctx.onPhaseComplete?.(phase);
23630
+ await this.commitAndEnqueueMerge(phase);
23594
23631
  }
23595
23632
  } catch (error) {
23596
23633
  this.updatePhaseStatus(phase, "failed");
@@ -23605,8 +23642,56 @@ var PhaseOrchestrator = class {
23605
23642
  error: error instanceof Error ? error.message : String(error)
23606
23643
  });
23607
23644
  this.ctx.onPhaseFail?.(phase, error instanceof Error ? error : new Error(String(error)));
23645
+ await this.keepWorktreeForReview(phase);
23608
23646
  }
23609
23647
  }
23648
+ // ─── Worktree integration ───────────────────────────────────────────────────
23649
+ /**
23650
+ * Commit the phase's worktree changes, then enqueue the merge back into the
23651
+ * base branch. Merges run dependency-ordered (a phase merges only after its
23652
+ * `dependsOn` phases) and globally serialized (one at a time) to avoid
23653
+ * concurrent writes to the base tree.
23654
+ */
23655
+ async commitAndEnqueueMerge(phase) {
23656
+ const handle = this.phaseWorktrees.get(phase.id);
23657
+ if (!this.worktrees || !handle) return;
23658
+ try {
23659
+ await this.worktrees.commitAll(handle, `autophase(${phase.name}): ${phase.id}`);
23660
+ } catch {
23661
+ }
23662
+ const depPromises = phase.dependsOn.map((d) => this.phaseMergePromise.get(d)).filter((p) => Boolean(p));
23663
+ const merged = (async () => {
23664
+ await Promise.allSettled(depPromises);
23665
+ this.mergeQueue = this.mergeQueue.then(() => this.mergeOne(phase, handle));
23666
+ await this.mergeQueue;
23667
+ })();
23668
+ this.phaseMergePromise.set(phase.id, merged);
23669
+ }
23670
+ /** Squash-merge one phase. Conflicts mark the worktree needs-review (run continues). */
23671
+ async mergeOne(phase, handle) {
23672
+ if (!this.worktrees) return;
23673
+ try {
23674
+ const result = await this.worktrees.merge(handle, { squash: true });
23675
+ await this.worktrees.release(handle, { keep: !result.ok });
23676
+ } catch (err) {
23677
+ this.emit("phase.failed", {
23678
+ phaseId: phase.id,
23679
+ name: phase.name,
23680
+ error: `worktree merge failed: ${err instanceof Error ? err.message : String(err)}`
23681
+ });
23682
+ }
23683
+ }
23684
+ /** A failed phase keeps its worktree on disk for inspection (no merge). */
23685
+ async keepWorktreeForReview(phase) {
23686
+ const handle = this.phaseWorktrees.get(phase.id);
23687
+ if (!this.worktrees || !handle) return;
23688
+ try {
23689
+ await this.worktrees.commitAll(handle, `autophase(${phase.name}) [failed]: ${phase.id}`);
23690
+ } catch {
23691
+ }
23692
+ await this.worktrees.release(handle, { keep: true }).catch(() => {
23693
+ });
23694
+ }
23610
23695
  async executePhaseTasks(phase) {
23611
23696
  const pendingTasks = this.getExecutableTasks(phase);
23612
23697
  while (pendingTasks.length > 0 && !this.stopped) {
@@ -23632,7 +23717,8 @@ var PhaseOrchestrator = class {
23632
23717
  async executeSingleTask(task, phase) {
23633
23718
  const tracker = this.getTrackerForPhase(phase);
23634
23719
  tracker.updateNodeStatus(task.id, "in_progress");
23635
- return this.ctx.executeTask(task, phase.id);
23720
+ const handle = this.phaseWorktrees.get(phase.id);
23721
+ return this.ctx.executeTask(task, phase.id, { cwd: handle?.dir, branch: handle?.branch });
23636
23722
  }
23637
23723
  markTaskCompleted(phase, task) {
23638
23724
  const tracker = this.getTrackerForPhase(phase);
@@ -23855,7 +23941,7 @@ var PhaseOrchestrator = class {
23855
23941
  };
23856
23942
  }
23857
23943
  delay(ms) {
23858
- return new Promise((resolve7) => setTimeout(resolve7, ms));
23944
+ return new Promise((resolve8) => setTimeout(resolve8, ms));
23859
23945
  }
23860
23946
  };
23861
23947
 
@@ -24499,7 +24585,261 @@ var CheckpointManager = class {
24499
24585
  }
24500
24586
  }
24501
24587
  };
24588
+ var MAX_SLUG = 40;
24589
+ var WorktreeManager = class {
24590
+ projectRoot;
24591
+ events;
24592
+ gitBin;
24593
+ runGit;
24594
+ /** Keyed by ownerId. */
24595
+ handles = /* @__PURE__ */ new Map();
24596
+ usedSlugs = /* @__PURE__ */ new Set();
24597
+ constructor(opts) {
24598
+ this.projectRoot = resolve(opts.projectRoot);
24599
+ this.events = opts.events;
24600
+ this.gitBin = opts.gitBin ?? "git";
24601
+ this.runGit = opts.run ?? ((args, cwd) => this.defaultRun(args, cwd));
24602
+ }
24603
+ /** Create a fresh worktree + branch forked from the current base branch. */
24604
+ async allocate(ownerId, opts = {}) {
24605
+ const existing = this.handles.get(ownerId);
24606
+ if (existing && (existing.status === "allocating" || existing.status === "active")) {
24607
+ return existing;
24608
+ }
24609
+ const slug = this.makeSlug(opts.slugHint ?? ownerId);
24610
+ const branch = `wstack/ap/${slug}`;
24611
+ const dir = join(this.worktreesRoot(), slug);
24612
+ assertSafePath(dir, this.projectRoot);
24613
+ const baseBranch = opts.baseBranch ?? await this.detectBaseBranch();
24614
+ const handle = {
24615
+ id: slug,
24616
+ ownerId,
24617
+ ownerLabel: opts.ownerLabel ?? opts.slugHint ?? ownerId,
24618
+ slug,
24619
+ dir,
24620
+ branch,
24621
+ baseBranch,
24622
+ status: "allocating",
24623
+ createdAt: Date.now(),
24624
+ updatedAt: Date.now(),
24625
+ insertions: 0,
24626
+ deletions: 0,
24627
+ files: 0
24628
+ };
24629
+ this.handles.set(ownerId, handle);
24630
+ try {
24631
+ await mkdir(this.worktreesRoot(), { recursive: true });
24632
+ const res = await this.runGit(
24633
+ ["worktree", "add", "-b", branch, dir, baseBranch],
24634
+ this.projectRoot
24635
+ );
24636
+ if (res.code !== 0) {
24637
+ return this.fail(handle, res.stderr || "git worktree add failed");
24638
+ }
24639
+ } catch (err) {
24640
+ return this.fail(handle, err instanceof Error ? err.message : String(err));
24641
+ }
24642
+ this.setStatus(handle, "active");
24643
+ this.emit("worktree.allocated", {
24644
+ handleId: handle.id,
24645
+ ownerId: handle.ownerId,
24646
+ ownerLabel: handle.ownerLabel,
24647
+ slug: handle.slug,
24648
+ dir: handle.dir,
24649
+ branch: handle.branch,
24650
+ baseBranch: handle.baseBranch
24651
+ });
24652
+ return handle;
24653
+ }
24654
+ /** Stage everything and commit inside the worktree. */
24655
+ async commitAll(handle, message) {
24656
+ this.setStatus(handle, "committing");
24657
+ await this.runGit(["add", "-A"], handle.dir);
24658
+ const staged = await this.runGit(["diff", "--cached", "--quiet"], handle.dir);
24659
+ if (staged.code === 0) {
24660
+ this.emitCommitted(handle, false);
24661
+ return { committed: false };
24662
+ }
24663
+ const committed = await this.runGit(["commit", "-m", message], handle.dir);
24664
+ if (committed.code !== 0) {
24665
+ this.fail(handle, committed.stderr || "git commit failed");
24666
+ return { committed: false };
24667
+ }
24668
+ const stats = await this.collectStats(handle.dir);
24669
+ handle.insertions = stats.insertions;
24670
+ handle.deletions = stats.deletions;
24671
+ handle.files = stats.files;
24672
+ handle.sha = stats.sha;
24673
+ handle.updatedAt = Date.now();
24674
+ this.emitCommitted(handle, true);
24675
+ return { committed: true };
24676
+ }
24677
+ /** Merge the worktree branch back into the base branch (squash by default). */
24678
+ async merge(handle, opts = {}) {
24679
+ const squash = opts.squash ?? true;
24680
+ this.setStatus(handle, "merging");
24681
+ const checkout = await this.runGit(["checkout", handle.baseBranch], this.projectRoot);
24682
+ if (checkout.code !== 0) {
24683
+ this.fail(handle, checkout.stderr || `checkout ${handle.baseBranch} failed`);
24684
+ return { ok: false, stderr: checkout.stderr };
24685
+ }
24686
+ const mergeArgs = squash ? ["merge", "--squash", handle.branch] : ["merge", "--no-ff", handle.branch];
24687
+ const merged = await this.runGit(mergeArgs, this.projectRoot);
24688
+ if (merged.code !== 0) {
24689
+ const conflictFiles = await this.unmergedFiles();
24690
+ await this.runGit(["reset", "--hard", "HEAD"], this.projectRoot);
24691
+ handle.conflictFiles = conflictFiles;
24692
+ this.setStatus(handle, "needs-review", { lastError: merged.stderr });
24693
+ this.emit("worktree.conflict", {
24694
+ handleId: handle.id,
24695
+ ownerId: handle.ownerId,
24696
+ branch: handle.branch,
24697
+ conflictFiles
24698
+ });
24699
+ return { ok: false, conflict: true, conflictFiles, stderr: merged.stderr };
24700
+ }
24701
+ if (squash) {
24702
+ const msg = opts.message ?? `merge ${handle.branch} (squash)`;
24703
+ const commit = await this.runGit(["commit", "-m", msg], this.projectRoot);
24704
+ if (commit.code !== 0 && !/nothing to commit/i.test(commit.stdout + commit.stderr)) {
24705
+ this.fail(handle, commit.stderr || "squash commit failed");
24706
+ return { ok: false, stderr: commit.stderr };
24707
+ }
24708
+ }
24709
+ this.setStatus(handle, "merged");
24710
+ this.emit("worktree.merged", {
24711
+ handleId: handle.id,
24712
+ ownerId: handle.ownerId,
24713
+ branch: handle.branch,
24714
+ baseBranch: handle.baseBranch,
24715
+ squash
24716
+ });
24717
+ return { ok: true };
24718
+ }
24719
+ /**
24720
+ * Remove the worktree + branch. Conflicted/failed handles (or `keep:true`)
24721
+ * are left on disk for inspection.
24722
+ */
24723
+ async release(handle, opts = {}) {
24724
+ const keep = opts.keep || handle.status === "needs-review" || handle.status === "failed";
24725
+ if (!keep) {
24726
+ await this.runGit(["worktree", "remove", "--force", handle.dir], this.projectRoot);
24727
+ await this.runGit(["branch", "-D", handle.branch], this.projectRoot);
24728
+ await this.runGit(["worktree", "prune"], this.projectRoot);
24729
+ this.handles.delete(handle.ownerId);
24730
+ }
24731
+ this.emit("worktree.released", {
24732
+ handleId: handle.id,
24733
+ ownerId: handle.ownerId,
24734
+ branch: handle.branch,
24735
+ kept: keep
24736
+ });
24737
+ }
24738
+ get(ownerId) {
24739
+ return this.handles.get(ownerId);
24740
+ }
24741
+ list() {
24742
+ return [...this.handles.values()];
24743
+ }
24744
+ // ── internals ────────────────────────────────────────────────────────────
24745
+ worktreesRoot() {
24746
+ return join(this.projectRoot, ".wrongstack", "worktrees");
24747
+ }
24748
+ async detectBaseBranch() {
24749
+ const head = await this.runGit(["rev-parse", "--abbrev-ref", "HEAD"], this.projectRoot);
24750
+ const name = head.stdout.trim();
24751
+ if (name && name !== "HEAD") return name;
24752
+ const sha = await this.runGit(["rev-parse", "HEAD"], this.projectRoot);
24753
+ return sha.stdout.trim() || "HEAD";
24754
+ }
24755
+ makeSlug(hint) {
24756
+ let base = hint.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/-+/g, "-").replace(/^[-.]+/, "").replace(/[-.]+$/, "").slice(0, MAX_SLUG).replace(/[-.]+$/, "");
24757
+ if (!base) base = "wt";
24758
+ let slug = `${base}-${crypto.randomUUID().slice(0, 6)}`;
24759
+ while (this.usedSlugs.has(slug)) slug = `${base}-${crypto.randomUUID().slice(0, 6)}`;
24760
+ this.usedSlugs.add(slug);
24761
+ return slug;
24762
+ }
24763
+ async collectStats(dir) {
24764
+ const sha = (await this.runGit(["rev-parse", "HEAD"], dir)).stdout.trim();
24765
+ const numstat = await this.runGit(["show", "--numstat", "--format=", "HEAD"], dir);
24766
+ let insertions = 0;
24767
+ let deletions = 0;
24768
+ let files = 0;
24769
+ for (const line of numstat.stdout.split("\n")) {
24770
+ const m = line.trim().match(/^(\d+|-)\t(\d+|-)\t(.+)$/);
24771
+ if (!m) continue;
24772
+ files++;
24773
+ if (m[1] !== "-") insertions += Number(m[1]);
24774
+ if (m[2] !== "-") deletions += Number(m[2]);
24775
+ }
24776
+ return { insertions, deletions, files, sha };
24777
+ }
24778
+ async unmergedFiles() {
24779
+ const res = await this.runGit(
24780
+ ["diff", "--name-only", "--diff-filter=U"],
24781
+ this.projectRoot
24782
+ );
24783
+ return res.stdout.split("\n").map((s) => s.trim()).filter(Boolean);
24784
+ }
24785
+ emitCommitted(handle, committed) {
24786
+ this.emit("worktree.committed", {
24787
+ handleId: handle.id,
24788
+ ownerId: handle.ownerId,
24789
+ branch: handle.branch,
24790
+ committed,
24791
+ insertions: handle.insertions,
24792
+ deletions: handle.deletions,
24793
+ files: handle.files,
24794
+ sha: handle.sha
24795
+ });
24796
+ }
24797
+ fail(handle, error) {
24798
+ this.setStatus(handle, "failed", { lastError: error });
24799
+ this.emit("worktree.failed", {
24800
+ handleId: handle.id,
24801
+ ownerId: handle.ownerId,
24802
+ branch: handle.branch,
24803
+ error
24804
+ });
24805
+ return handle;
24806
+ }
24807
+ setStatus(handle, status, patch) {
24808
+ handle.status = status;
24809
+ handle.updatedAt = Date.now();
24810
+ if (patch) Object.assign(handle, patch);
24811
+ }
24812
+ emit(event, payload) {
24813
+ this.events?.emit(event, payload);
24814
+ }
24815
+ defaultRun(args, cwd) {
24816
+ return new Promise((res) => {
24817
+ let stdout = "";
24818
+ let stderr = "";
24819
+ const child = spawn(this.gitBin, args, {
24820
+ cwd,
24821
+ env: buildChildEnv(),
24822
+ stdio: ["ignore", "pipe", "pipe"]
24823
+ });
24824
+ child.stdout?.on("data", (c) => {
24825
+ stdout += c.toString();
24826
+ });
24827
+ child.stderr?.on("data", (c) => {
24828
+ stderr += c.toString();
24829
+ });
24830
+ child.on("error", (err) => res({ code: 1, stdout, stderr: err.message }));
24831
+ child.on("close", (code) => res({ code: code ?? 1, stdout, stderr }));
24832
+ });
24833
+ }
24834
+ };
24835
+ function assertSafePath(dir, projectRoot) {
24836
+ const root = resolve(projectRoot);
24837
+ const abs = resolve(dir);
24838
+ if (abs !== root && !abs.startsWith(root + sep)) {
24839
+ throw new Error(`worktree path escapes project root: ${dir}`);
24840
+ }
24841
+ }
24502
24842
 
24503
- export { AGENTS_BY_PHASE, AGENT_CATALOG, AISpecBuilder, ALL_AGENT_DEFINITIONS, ALL_FLEET_AGENTS, AUDIT_LOG_AGENT, Agent, AgentError, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutoPhasePlanner, AutoPhaseRunner, AutonomousRunner, BUG_HUNTER_AGENT, BudgetExceededError, CONTEXT_WINDOW_MODES, CheckpointManager, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_CONFIG_MIGRATIONS, DEFAULT_CONTEXT_CONFIG, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_DIRECTOR_PREAMBLE, DEFAULT_DISPATCH_ROLE, DEFAULT_MAX_ITERATIONS, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DEFAULT_TOOLS_CONFIG, DefaultAttachmentStore, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, ERROR_CODES, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FleetBus, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, FsError, GitignoreUpdater, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MAX_JOURNAL_ENTRIES, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, PhaseGraphBuilder, PhaseOrchestrator, PhaseStore, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, ScopedEventBus, SddParallelRun, SddTaskDecomposer, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolError, ToolExecutor, ToolRegistry, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, atomicWrite, attachAutoExtend, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, braveSearchServer, buildBtwBlock, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, color, compileGlob, compileUserRegex, composeDirectorPrompt, composeSubagentPrompt, computeTaskProgress, consumeBtwNotes, context7Server, contextManagerTool, createAutoExecutor, createAutoPhaseFromTaskGraph, createContextManagerTool, createDefaultPipelines, createDelegateTool, createMcpControlTool, createMessage, createSecuritySlashCommand, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, dispatchAgent, downloadGitHubTarball, emptyGoal, emptyPlan, encryptConfigSecrets, ensureDir, estimateRequestTokens, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, extractRunEnv, filesystemServer, findCriticalPath, formatContextWindowModeList, formatGoal, formatPlan, formatPlanTemplates, formatTodosList, getAgentDefinition, getContextWindowMode, getPlanTemplate, getTemplate, githubServer, goalFilePath, googleMapsServer, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isPluginError, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAutonomyPromptContributor, makeContinueToNextIterationTool, makeDirectorSessionFactory, makeLLMClassifier, matchAny, matchGlob, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, parseContinueDirective, parseSkillRef, pendingBtwCount, projectHash, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resolveContextWindowPolicy, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTodosCheckpoint, scoreAgents, securitySlashCommand, sentinelServer, setBtwNote, setPlanItemStatus, slackServer, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, wrapAsState, zaiVisionServer };
24843
+ export { AGENTS_BY_PHASE, AGENT_CATALOG, AISpecBuilder, ALL_AGENT_DEFINITIONS, ALL_FLEET_AGENTS, AUDIT_LOG_AGENT, Agent, AgentError, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutoPhasePlanner, AutoPhaseRunner, AutonomousRunner, BUG_HUNTER_AGENT, BudgetExceededError, CONTEXT_WINDOW_MODES, CheckpointManager, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_CONFIG_MIGRATIONS, DEFAULT_CONTEXT_CONFIG, DEFAULT_CONTEXT_WINDOW_MODE_ID, DEFAULT_DIRECTOR_PREAMBLE, DEFAULT_DISPATCH_ROLE, DEFAULT_MAX_ITERATIONS, DEFAULT_MODES, DEFAULT_RECOVERY_STRATEGIES, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DEFAULT_TOOLS_CONFIG, DefaultAttachmentStore, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, ERROR_CODES, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FleetBus, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, FsError, GitignoreUpdater, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MAX_JOURNAL_ENTRIES, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, PhaseGraphBuilder, PhaseOrchestrator, PhaseStore, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, ScopedEventBus, SddParallelRun, SddTaskDecomposer, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolError, ToolExecutor, ToolRegistry, WorktreeManager, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, assertSafePath, atomicWrite, attachAutoExtend, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, braveSearchServer, buildBtwBlock, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, color, compileGlob, compileUserRegex, composeDirectorPrompt, composeSubagentPrompt, computeTaskProgress, consumeBtwNotes, context7Server, contextManagerTool, createAutoExecutor, createAutoPhaseFromTaskGraph, createContextManagerTool, createDefaultPipelines, createDelegateTool, createMcpControlTool, createMessage, createSecuritySlashCommand, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, dispatchAgent, downloadGitHubTarball, emptyGoal, emptyPlan, encryptConfigSecrets, ensureDir, estimateRequestTokens, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, extractRunEnv, filesystemServer, findCriticalPath, formatContextWindowModeList, formatGoal, formatPlan, formatPlanTemplates, formatTodosList, getAgentDefinition, getContextWindowMode, getPlanTemplate, getTemplate, githubServer, goalFilePath, googleMapsServer, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isPluginError, isSessionError, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAutonomyPromptContributor, makeContinueToNextIterationTool, makeDirectorSessionFactory, makeLLMClassifier, matchAny, matchGlob, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, parseContinueDirective, parseSkillRef, pendingBtwCount, projectHash, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resolveContextWindowPolicy, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTodosCheckpoint, scoreAgents, securitySlashCommand, sentinelServer, setBtwNote, setPlanItemStatus, slackServer, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, wrapAsState, zaiVisionServer };
24504
24844
  //# sourceMappingURL=index.js.map
24505
24845
  //# sourceMappingURL=index.js.map