@wrongstack/core 0.89.3 → 0.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/{agent-bridge-DbVe1dHT.d.ts → agent-bridge-mOxbpFcg.d.ts} +1 -1
  2. package/dist/{agent-subagent-runner-C6eqID1t.d.ts → agent-subagent-runner-DukQLUcS.d.ts} +5 -5
  3. package/dist/{brain-s9DyD_Vf.d.ts → brain-Dfv4Y82E.d.ts} +1 -1
  4. package/dist/{config-84VaZpH6.d.ts → config-BSU-6vah.d.ts} +1 -1
  5. package/dist/coordination/index.d.ts +9 -9
  6. package/dist/coordination/index.js +103 -0
  7. package/dist/coordination/index.js.map +1 -1
  8. package/dist/defaults/index.d.ts +18 -17
  9. package/dist/defaults/index.js +276 -12
  10. package/dist/defaults/index.js.map +1 -1
  11. package/dist/execution/index.d.ts +61 -365
  12. package/dist/execution/index.js +423 -8
  13. package/dist/execution/index.js.map +1 -1
  14. package/dist/extension/index.d.ts +4 -4
  15. package/dist/goal-preamble-CI8lxeY1.d.ts +378 -0
  16. package/dist/{goal-store-DvWLNu52.d.ts → goal-store-ht0VmR1A.d.ts} +63 -21
  17. package/dist/{index-CqrroYcU.d.ts → index-BWRN6wOb.d.ts} +5 -5
  18. package/dist/{index-D3Nax3YU.d.ts → index-DIKEcfgC.d.ts} +3 -3
  19. package/dist/index.d.ts +31 -29
  20. package/dist/index.js +530 -53
  21. package/dist/index.js.map +1 -1
  22. package/dist/infrastructure/index.d.ts +4 -4
  23. package/dist/kernel/index.d.ts +6 -6
  24. package/dist/{mcp-servers-D3E5ixAR.d.ts → mcp-servers-CXCsANdY.d.ts} +1 -1
  25. package/dist/{multi-agent-coordinator-DHNrjPaA.d.ts → multi-agent-coordinator-51LvnXkD.d.ts} +1 -1
  26. package/dist/{null-fleet-bus-BzzciAc4.d.ts → null-fleet-bus-D09hMzFQ.d.ts} +5 -5
  27. package/dist/observability/index.d.ts +1 -1
  28. package/dist/{parallel-eternal-engine-CTpcrb9O.d.ts → parallel-eternal-engine-CUtmM_0V.d.ts} +24 -5
  29. package/dist/{path-resolver-B7hgMAVe.d.ts → path-resolver-DDJiMAtX.d.ts} +1 -1
  30. package/dist/{pipeline-C1Ad9OjI.d.ts → pipeline-BqiA_UMr.d.ts} +2 -2
  31. package/dist/{plan-templates-CNphsz0n.d.ts → plan-templates-BdDxl9cI.d.ts} +2 -2
  32. package/dist/{provider-runner-cqvlB_oS.d.ts → provider-runner-BUunikwY.d.ts} +1 -1
  33. package/dist/sdd/index.d.ts +11 -6
  34. package/dist/sdd/index.js +124 -5
  35. package/dist/sdd/index.js.map +1 -1
  36. package/dist/{session-event-bridge-IVzs2GpE.d.ts → session-event-bridge-BpJ5trO9.d.ts} +1 -1
  37. package/dist/{skill-BJxzIyyN.d.ts → skill-Bj6Ezqb8.d.ts} +1 -1
  38. package/dist/skills/index.d.ts +1 -1
  39. package/dist/spec-TBi3Jr6T.d.ts +78 -0
  40. package/dist/storage/index.d.ts +21 -9
  41. package/dist/storage/index.js +157 -14
  42. package/dist/storage/index.js.map +1 -1
  43. package/dist/task-format-vGOIftmK.d.ts +23 -0
  44. package/dist/task-graph-u1q9Jkyk.d.ts +84 -0
  45. package/dist/types/index.d.ts +15 -14
  46. package/dist/utils/index.d.ts +3 -1
  47. package/dist/utils/index.js +110 -1
  48. package/dist/utils/index.js.map +1 -1
  49. package/package.json +1 -1
  50. package/skills/tech-stack/SKILL.md +177 -0
  51. package/dist/task-graph-DJBqO0EY.d.ts +0 -161
package/dist/index.js CHANGED
@@ -4442,6 +4442,115 @@ function formatTodosList(todos) {
4442
4442
  return lines.join("\n");
4443
4443
  }
4444
4444
 
4445
+ // src/utils/task-format.ts
4446
+ function computeTaskItemProgress(tasks) {
4447
+ let completed = 0;
4448
+ let pending = 0;
4449
+ let inProgress = 0;
4450
+ let blocked = 0;
4451
+ let failed = 0;
4452
+ let review = 0;
4453
+ let estimatedHours = 0;
4454
+ let actualHours = 0;
4455
+ for (const t2 of tasks) {
4456
+ switch (t2.status) {
4457
+ case "completed":
4458
+ completed++;
4459
+ break;
4460
+ case "pending":
4461
+ pending++;
4462
+ break;
4463
+ case "in_progress":
4464
+ inProgress++;
4465
+ break;
4466
+ case "blocked":
4467
+ blocked++;
4468
+ break;
4469
+ case "failed":
4470
+ failed++;
4471
+ break;
4472
+ case "review":
4473
+ review++;
4474
+ break;
4475
+ }
4476
+ estimatedHours += t2.estimateHours ?? 0;
4477
+ }
4478
+ return {
4479
+ total: tasks.length,
4480
+ pending,
4481
+ inProgress,
4482
+ blocked,
4483
+ failed,
4484
+ review,
4485
+ completed,
4486
+ percentComplete: tasks.length > 0 ? Math.round(completed / tasks.length * 100) : 0,
4487
+ estimatedHours,
4488
+ actualHours
4489
+ };
4490
+ }
4491
+ var STATUS_ICON = {
4492
+ pending: "\u25CB",
4493
+ in_progress: "\u25D0",
4494
+ blocked: "\u2298",
4495
+ failed: "\u2717",
4496
+ review: "\u25D1",
4497
+ completed: "\u25CF"
4498
+ };
4499
+ var PRIORITY_ICON = {
4500
+ critical: "\u{1F534}",
4501
+ high: "\u{1F7E0}",
4502
+ medium: "\u{1F7E1}",
4503
+ low: "\u{1F7E2}"
4504
+ };
4505
+ var TYPE_ICON = {
4506
+ feature: "\u26A1",
4507
+ bugfix: "\u{1F41B}",
4508
+ refactor: "\u267B\uFE0F",
4509
+ docs: "\u{1F4DD}",
4510
+ test: "\u{1F9EA}",
4511
+ chore: "\u{1F527}"
4512
+ };
4513
+ function formatTaskProgress(tasks) {
4514
+ const p = computeTaskItemProgress(tasks);
4515
+ if (p.total === 0) return "No tasks.";
4516
+ const barWidth = 24;
4517
+ const filled = Math.round(p.percentComplete / 100 * barWidth);
4518
+ const empty = barWidth - filled;
4519
+ const bar = "\u2588".repeat(filled) + "\u2591".repeat(empty);
4520
+ return [
4521
+ `${color.bold("Tasks")} [${bar}] ${p.percentComplete}%`,
4522
+ ` ${color.green("\u25CF")} ${p.completed} done \u2502 ${color.yellow("\u25D0")} ${p.inProgress} active \u2502 ${color.dim("\u25CB")} ${p.pending} pending \u2502 \u2298 ${p.blocked} blocked \u2502 \u2717 ${p.failed} failed`,
4523
+ p.estimatedHours > 0 ? ` ${color.dim(`est. ${p.estimatedHours}h`)}` : ""
4524
+ ].filter(Boolean).join("\n");
4525
+ }
4526
+ function formatTaskList(tasks) {
4527
+ if (tasks.length === 0) return "No tasks.";
4528
+ const order = ["in_progress", "blocked", "review", "pending", "failed", "completed"];
4529
+ const groups = /* @__PURE__ */ new Map();
4530
+ for (const t2 of tasks) {
4531
+ const list = groups.get(t2.status) ?? [];
4532
+ list.push(t2);
4533
+ groups.set(t2.status, list);
4534
+ }
4535
+ const lines = [];
4536
+ lines.push(color.dim(`Tasks (${tasks.length} total):`));
4537
+ for (const status of order) {
4538
+ const group = groups.get(status);
4539
+ if (!group || group.length === 0) continue;
4540
+ const icon = STATUS_ICON[status];
4541
+ lines.push(` ${icon} ${status.toUpperCase()} (${group.length})`);
4542
+ for (const t2 of group) {
4543
+ const prio = PRIORITY_ICON[t2.priority];
4544
+ const type = TYPE_ICON[t2.type];
4545
+ const deps = t2.dependsOn && t2.dependsOn.length > 0 ? ` ${color.dim("\u2190")} ${color.dim(t2.dependsOn.map((d) => d.slice(0, 8)).join(", "))}` : "";
4546
+ const who = t2.assignee ? ` ${color.dim(`@${t2.assignee}`)}` : "";
4547
+ const hrs = t2.estimateHours ? ` ${color.dim(`${t2.estimateHours}h`)}` : "";
4548
+ lines.push(` ${type} ${prio} ${t2.title}${deps}${who}${hrs}`);
4549
+ }
4550
+ }
4551
+ return lines.join("\n");
4552
+ }
4553
+
4445
4554
  // src/utils/glob-match.ts
4446
4555
  function escapeRegex(s) {
4447
4556
  return s.replace(/[.+^${}()|\\]/g, "\\$&");
@@ -9679,6 +9788,14 @@ function emptyGoal(goal) {
9679
9788
  journal: []
9680
9789
  };
9681
9790
  }
9791
+ function setProgress(goal, progress, note) {
9792
+ const clamped = Math.min(100, Math.max(0, progress));
9793
+ return {
9794
+ ...goal,
9795
+ progress: clamped,
9796
+ progressNote: note ?? clamped + "% complete"
9797
+ };
9798
+ }
9682
9799
  function appendJournal(goal, entry) {
9683
9800
  const iteration = goal.iterations + 1;
9684
9801
  const at = (/* @__PURE__ */ new Date()).toISOString();
@@ -9707,34 +9824,110 @@ function summarizeUsage(goal) {
9707
9824
  }
9708
9825
  return { totalCostUsd, totalInputTokens, totalOutputTokens, iterationsWithUsage };
9709
9826
  }
9827
+ var DOLLAR = "$";
9710
9828
  function formatGoal(goal, journalLimit = 10) {
9711
9829
  const lines = [];
9712
- lines.push(`Goal: ${goal.goal}`);
9713
- lines.push(`Set: ${goal.setAt}`);
9714
- lines.push(`Last activity: ${goal.lastActivityAt}`);
9715
- lines.push(`Iterations: ${goal.iterations}`);
9830
+ const displayGoal = goal.refinedGoal || goal.goal;
9831
+ lines.push(color.bold("Goal") + ": " + displayGoal);
9832
+ if (goal.refinedGoal && goal.refinedGoal !== goal.goal) {
9833
+ const snippet = goal.goal.length > 60 ? goal.goal.slice(0, 60) + "\u2026" : goal.goal;
9834
+ lines.push(color.dim(' (original: "' + snippet + '")'));
9835
+ }
9836
+ if (typeof goal.progress === "number") {
9837
+ const pct = Math.min(100, Math.max(0, Math.round(goal.progress)));
9838
+ const filled = Math.round(pct / 5);
9839
+ const empty = 20 - filled;
9840
+ const bar = color.green("\u2588".repeat(filled)) + color.dim("\u2591".repeat(empty));
9841
+ lines.push("Progress: " + bar + " " + color.bold(pct + "%"));
9842
+ if (goal.progressNote) {
9843
+ lines.push(" " + color.dim(goal.progressNote));
9844
+ }
9845
+ if (goal.progressTrend) {
9846
+ const trendIcon = goal.progressTrend === "accelerating" ? "\u{1F680}" : goal.progressTrend === "stalling" ? "\u26A0\uFE0F" : "\u27A1\uFE0F";
9847
+ lines.push(" Trend: " + trendIcon + " " + goal.progressTrend);
9848
+ }
9849
+ }
9850
+ if (goal.deliverables && goal.deliverables.length > 0) {
9851
+ lines.push("");
9852
+ lines.push(color.bold("Deliverables:"));
9853
+ for (const d of goal.deliverables) {
9854
+ const done = /^\[[x✓]\]|✅|\(done\)/i.test(d);
9855
+ const marker = done ? color.green("\u2713") : color.dim("\u25CB");
9856
+ lines.push(" " + marker + " " + d);
9857
+ }
9858
+ }
9859
+ lines.push("");
9860
+ lines.push("Set: " + goal.setAt);
9861
+ lines.push("Last activity: " + goal.lastActivityAt);
9862
+ lines.push("Iterations: " + goal.iterations);
9716
9863
  const stateLabel = goal.goalState ?? "active";
9717
- lines.push(`State: ${stateLabel}${goal.iterations > 0 ? ` (iteration #${goal.iterations})` : ""}`);
9718
- lines.push(`Engine: ${goal.engineState}`);
9864
+ lines.push("State: " + stateLabel + (goal.iterations > 0 ? " (iteration #" + goal.iterations + ")" : ""));
9865
+ lines.push("Engine: " + goal.engineState);
9719
9866
  const usage = summarizeUsage(goal);
9720
9867
  if (usage.iterationsWithUsage > 0) {
9721
- lines.push(
9722
- `Spent: $${usage.totalCostUsd.toFixed(4)} (in ${usage.totalInputTokens} / out ${usage.totalOutputTokens} tokens across ${usage.iterationsWithUsage} iterations)`
9723
- );
9868
+ const spent = "Spent: " + DOLLAR + usage.totalCostUsd.toFixed(4) + " (in " + usage.totalInputTokens + " / out " + usage.totalOutputTokens + " tokens across " + usage.iterationsWithUsage + " iterations)";
9869
+ lines.push(spent);
9724
9870
  }
9725
9871
  if (goal.journal.length > 0) {
9726
9872
  lines.push("");
9727
- lines.push(`Recent journal (last ${Math.min(journalLimit, goal.journal.length)}):`);
9873
+ lines.push("Recent journal (last " + Math.min(journalLimit, goal.journal.length) + "):");
9728
9874
  const tail = goal.journal.slice(-journalLimit);
9729
9875
  for (const e of tail) {
9730
9876
  const mark = e.status === "success" ? "\u2713" : e.status === "failure" ? "\u2717" : e.status === "aborted" ? "\u2298" : "\xB7";
9731
- const note = e.note ? ` \u2014 ${e.note}` : "";
9732
- const cost = typeof e.costUsd === "number" ? ` ($${e.costUsd.toFixed(4)})` : "";
9733
- lines.push(` #${e.iteration} ${mark} [${e.source}] ${e.task}${cost}${note}`);
9877
+ const note = e.note ? " \u2014 " + e.note : "";
9878
+ const cost = typeof e.costUsd === "number" ? " (" + DOLLAR + e.costUsd.toFixed(4) + ")" : "";
9879
+ lines.push(" #" + e.iteration + " " + mark + " [" + e.source + "] " + e.task + cost + note);
9734
9880
  }
9735
9881
  }
9736
9882
  return lines.join("\n");
9737
9883
  }
9884
+ function parseProgressFromText(text) {
9885
+ const re = /\[progress:\s*(\d{1,3})%\]\s*(?:[—\-]\s*(.+))?/i;
9886
+ const m = text.match(re);
9887
+ if (!m) return null;
9888
+ const progress = Math.min(100, Math.max(0, Number.parseInt(m[1], 10)));
9889
+ const note = m[2]?.trim() || void 0;
9890
+ return { progress, note };
9891
+ }
9892
+ function recordProgress(goal, progress, note) {
9893
+ const clamped = Math.min(100, Math.max(0, progress));
9894
+ const history = [...goal.progressHistory ?? [], { at: (/* @__PURE__ */ new Date()).toISOString(), progress: clamped, note }];
9895
+ const trimmed = history.length > 200 ? history.slice(-200) : history;
9896
+ return {
9897
+ ...goal,
9898
+ progress: clamped,
9899
+ progressNote: note ?? `${clamped}% complete`,
9900
+ progressHistory: trimmed,
9901
+ progressTrend: computeTrend(trimmed)
9902
+ };
9903
+ }
9904
+ var MAX_PROGRESS_HISTORY = 200;
9905
+ function computeTrend(history) {
9906
+ if (history.length < 3) return void 0;
9907
+ const recent = history.slice(-5);
9908
+ const deltas = [];
9909
+ for (let i = 1; i < recent.length; i++) {
9910
+ deltas.push(recent[i].progress - recent[i - 1].progress);
9911
+ }
9912
+ if (deltas.length < 2) return void 0;
9913
+ const avgDelta = deltas.reduce((a, b) => a + b, 0) / deltas.length;
9914
+ if (avgDelta > 2) return "accelerating";
9915
+ if (avgDelta < -1) return "stalling";
9916
+ return "steady";
9917
+ }
9918
+
9919
+ // src/execution/autonomy-brain.ts
9920
+ function formatDecisionSummary(decision, request) {
9921
+ const question = request.question.length > 80 ? request.question.slice(0, 77) + "\u2026" : request.question;
9922
+ if (decision.type === "deny") {
9923
+ return `\u{1F9E0} Brain: DENIED \u2014 "${question}" \u2192 ${decision.reason}`;
9924
+ }
9925
+ if (decision.type === "answer") {
9926
+ const action = decision.optionId ? `chose [${decision.optionId}]` : decision.text.length > 60 ? decision.text.slice(0, 57) + "\u2026" : decision.text;
9927
+ return `\u{1F9E0} Brain: DECIDED \u2014 "${question}" \u2192 ${action}`;
9928
+ }
9929
+ return `\u{1F9E0} Brain: ASKED HUMAN \u2014 "${question}"`;
9930
+ }
9738
9931
 
9739
9932
  // src/execution/eternal-autonomy.ts
9740
9933
  var execFileP = promisify(execFile);
@@ -9805,7 +9998,7 @@ var EternalAutonomyEngine = class {
9805
9998
  this.consecutiveFailures = 0;
9806
9999
  }
9807
10000
  if (this.stopRequested) break;
9808
- await sleep(this.opts.cycleGapMs ?? 1e3);
10001
+ await sleep(this.opts.cycleGapMs ?? 0);
9809
10002
  }
9810
10003
  } finally {
9811
10004
  this.state = "stopped";
@@ -9975,6 +10168,18 @@ var EternalAutonomyEngine = class {
9975
10168
  this.stopRequested = true;
9976
10169
  return true;
9977
10170
  }
10171
+ const parsed = parseProgressFromText(finalText);
10172
+ if (parsed) {
10173
+ await this.updateProgress(parsed.progress, parsed.note);
10174
+ if (parsed.progress >= 100) {
10175
+ await this.markGoalCompleted(
10176
+ { source: action.source, task: action.task, directive: action.directive },
10177
+ `progress reached 100%: ${parsed.note ?? "goal complete"}`
10178
+ );
10179
+ this.stopRequested = true;
10180
+ return true;
10181
+ }
10182
+ }
9978
10183
  this.iterationsSinceCompact++;
9979
10184
  await this.maybeCompact().catch((err) => {
9980
10185
  this.opts.onError?.(
@@ -10061,11 +10266,16 @@ var EternalAutonomyEngine = class {
10061
10266
  this.consecutiveBrainstormDone++;
10062
10267
  const threshold = this.opts.brainstormDoneStopThreshold ?? 3;
10063
10268
  if (this.consecutiveBrainstormDone >= threshold) {
10064
- await this.markGoalCompleted(
10065
- { source: "brainstorm", task: "no further work", directive: "" },
10066
- `brainstorm returned DONE ${this.consecutiveBrainstormDone}x in a row`
10067
- );
10068
- this.stopRequested = true;
10269
+ const shouldStop = await this.consultBrainForDone(goal);
10270
+ if (shouldStop) {
10271
+ await this.markGoalCompleted(
10272
+ { source: "brainstorm", task: "no further work", directive: "" },
10273
+ `brainstorm returned DONE ${this.consecutiveBrainstormDone}x in a row${this.opts.brain ? ", brain confirmed" : ""}`
10274
+ );
10275
+ this.stopRequested = true;
10276
+ } else {
10277
+ this.consecutiveBrainstormDone = 0;
10278
+ }
10069
10279
  }
10070
10280
  return null;
10071
10281
  }
@@ -10299,6 +10509,69 @@ ${recentJournal}` : "No prior iterations.",
10299
10509
  async appendFailure(task, note) {
10300
10510
  await this.appendIterationEntry({ source: "manual", task, status: "failure", note });
10301
10511
  }
10512
+ /**
10513
+ * Consult the brain on whether the goal is truly complete.
10514
+ * Without a brain, always returns true (use heuristic: DONE threshold met = done).
10515
+ */
10516
+ async consultBrainForDone(goal) {
10517
+ if (!this.opts.brain) return true;
10518
+ const deliverablesStatus = goal.deliverables?.length ? `
10519
+ Deliverables: ${goal.deliverables.length} total, progress ${goal.progress ?? "unknown"}%` : "";
10520
+ const recentJournal = goal.journal.slice(-5).map(
10521
+ (e) => ` #${e.iteration} [${e.status}] ${e.task}`
10522
+ ).join("\n");
10523
+ try {
10524
+ const decision = await this.opts.brain.decide({
10525
+ id: `goal-done-${goal.iterations}`,
10526
+ source: "system",
10527
+ question: `Brainstorm returned DONE ${this.consecutiveBrainstormDone}x. Is the goal truly complete?`,
10528
+ context: [
10529
+ `Goal: ${goal.goal}`,
10530
+ `Iterations: ${goal.iterations}`,
10531
+ `Progress: ${goal.progress ?? "unknown"}%`,
10532
+ deliverablesStatus,
10533
+ recentJournal ? `
10534
+ Recent work:
10535
+ ${recentJournal}` : ""
10536
+ ].join("\n"),
10537
+ risk: "high",
10538
+ fallback: "continue"
10539
+ });
10540
+ const summary = formatDecisionSummary(decision, {
10541
+ id: `goal-done-${goal.iterations}`,
10542
+ source: "system",
10543
+ question: "Is the goal complete?",
10544
+ risk: "high",
10545
+ fallback: "continue"
10546
+ });
10547
+ const rationale = "rationale" in decision ? decision.rationale : void 0;
10548
+ await this.appendIterationEntry({
10549
+ source: "brainstorm",
10550
+ task: summary,
10551
+ status: "success",
10552
+ note: rationale
10553
+ });
10554
+ if (decision.type === "deny") {
10555
+ return false;
10556
+ }
10557
+ if (decision.type === "answer") {
10558
+ const text = decision.text.toLowerCase();
10559
+ return text.includes("complete") || text.includes("done") || text.includes("yes");
10560
+ }
10561
+ return true;
10562
+ } catch {
10563
+ return true;
10564
+ }
10565
+ }
10566
+ /**
10567
+ * Persist a progress update from the agent's [PROGRESS: N%] output.
10568
+ */
10569
+ async updateProgress(progress, note) {
10570
+ const current = await loadGoal(this.goalPath);
10571
+ if (!current) return;
10572
+ const updated = recordProgress(current, progress, note);
10573
+ await saveGoal(this.goalPath, updated);
10574
+ }
10302
10575
  async persistEngineState(state) {
10303
10576
  const current = await loadGoal(this.goalPath);
10304
10577
  if (!current) return;
@@ -12952,6 +13225,109 @@ Working rules:
12952
13225
  "cloud cost"
12953
13226
  ]
12954
13227
  }
13228
+ },
13229
+ {
13230
+ config: {
13231
+ id: "tech-stack",
13232
+ name: "Tech Stack Validator",
13233
+ role: "tech-stack",
13234
+ tools: ["search", "fetch", "read", "grep", "glob", "outdated", "audit", "json"],
13235
+ prompt: `You are the Tech Stack Validator \u2014 a single-shot validation agent that fires
13236
+ before any package, library, or framework choice is committed.
13237
+
13238
+ Your ONLY job: verify that a technology choice is current, real, and not obsolete.
13239
+ You are the "this isn't code, this is 10-year-old technology" agent. Intervene
13240
+ hard when the LLM hallucinates a version number or suggests dead tech.
13241
+
13242
+ ## Critical rules
13243
+
13244
+ 1. **Verify existence.** Search npm registry (fetch https://registry.npmjs.org/<pkg>/latest)
13245
+ or web search. A package that doesn't exist = hallucination.
13246
+
13247
+ 2. **Check latest version.** Never trust any version number from the model. Always
13248
+ fetch the actual latest stable version from npm or the project's release page.
13249
+
13250
+ 3. **Reject dead packages.** No release in >2 years + unresolved critical issues =
13251
+ dead. Suggest a maintained replacement.
13252
+
13253
+ 4. **Reject prehistoric tech.** Any package/pattern superseded \u22655 years ago is
13254
+ REJECTED. Key blocklist:
13255
+ - axios / node-fetch / got / request \u2192 native fetch (Node 18+)
13256
+ - moment \u2192 date-fns / luxon / Temporal
13257
+ - jQuery (new projects) \u2192 vanilla DOM / React
13258
+ - Gulp / Grunt \u2192 tsup / esbuild / vite
13259
+ - CoffeeScript / Flow \u2192 TypeScript
13260
+ - Bluebird \u2192 native Promises
13261
+ - crypto-js \u2192 node:crypto / Web Crypto
13262
+ - Bower \u2192 npm/pnpm
13263
+ - underscore \u2192 lodash or native ES2020+
13264
+
13265
+ 5. **The intervention phrase.** When rejecting on age grounds, you MUST output
13266
+ exactly: "This isn't code, this is X-year-old technology." where X =
13267
+ current year \u2212 the year the technology was made obsolete. Follow with
13268
+ what replaced it and a one-step migration path.
13269
+
13270
+ 6. **Prefer built-in over third-party.** Check Node 22+ native APIs first:
13271
+ node:test, node:sqlite, fetch, WebSocket, Web Crypto \u2014 all built-in.
13272
+
13273
+ ## Workflow (single-shot \u2014 do NOT loop)
13274
+
13275
+ 1. Receive the proposed package + version
13276
+ 2. Search npm registry or web for the latest version
13277
+ 3. Check age, maintenance status, deprecation
13278
+ 4. Output verdict: APPROVED (with exact version) or REJECTED (with replacement)
13279
+
13280
+ ## Output format
13281
+
13282
+ ### Tech Stack Validation \u2014 <package>
13283
+
13284
+ **Status**: APPROVED | REJECTED
13285
+
13286
+ **Package**: <name>@<version>
13287
+ **Source**: <URL you checked \u2014 npm registry, GitHub, web search>
13288
+ **Age**: <first release> \u2014 <last release date>
13289
+ **Verdict**: 1\u20132 sentence explanation.
13290
+
13291
+ When REJECTED on age:
13292
+ **"This isn't code, this is X-year-old technology."**
13293
+ **Replaced by**: <modern alternative>
13294
+ **Migration**: <one concrete step>
13295
+
13296
+ When APPROVED:
13297
+ **Install**: pnpm add <name>@^<major>.<minor>.0`
13298
+ },
13299
+ budget: {
13300
+ timeoutMs: 6e4,
13301
+ maxIterations: 5,
13302
+ maxToolCalls: 20,
13303
+ maxTokens: 4e4,
13304
+ maxCostUsd: 0.1
13305
+ },
13306
+ capability: {
13307
+ phase: "meta",
13308
+ summary: "Single-shot tech stack validator: checks npm for latest versions, rejects dead/obsolete packages, enforces modern alternatives.",
13309
+ keywords: [
13310
+ "tech stack",
13311
+ "version",
13312
+ "package",
13313
+ "library",
13314
+ "framework",
13315
+ "dependency",
13316
+ "install",
13317
+ "upgrade",
13318
+ "latest",
13319
+ "npm",
13320
+ "pnpm add",
13321
+ "outdated",
13322
+ "obsolete",
13323
+ "deprecated",
13324
+ "what version",
13325
+ "which package",
13326
+ "check version",
13327
+ "verify version",
13328
+ "is this current"
13329
+ ]
13330
+ }
12955
13331
  }
12956
13332
  ];
12957
13333
 
@@ -14744,7 +15120,17 @@ ${journalTail.join("\n")}` : "Recent journal: (none \u2014 this is the first ite
14744
15120
  }
14745
15121
 
14746
15122
  // src/execution/goal-preamble.ts
14747
- function buildGoalPreamble(goal) {
15123
+ function buildGoalPreamble(goal, deliverables) {
15124
+ const deliverableBlock = deliverables && deliverables.length > 0 ? [
15125
+ "",
15126
+ "CONCRETE DELIVERABLES (check these off as you go):",
15127
+ ...deliverables.map((d, i) => ` ${i + 1}. ${d}`),
15128
+ "",
15129
+ "After EACH iteration, estimate your completion percentage (0\u2013100)",
15130
+ "against this deliverable list. Output it as:",
15131
+ " [PROGRESS: N%] \u2014 <1-sentence status>",
15132
+ "The eternal engine reads this to update the progress bar."
15133
+ ].join("\n") : "";
14748
15134
  return [
14749
15135
  "[GOAL \u2014 LOCKED IN. You will work on this until it is verifiably done.",
14750
15136
  "The user granted you full autonomy. Read these constraints once, then act.",
@@ -14753,6 +15139,7 @@ function buildGoalPreamble(goal) {
14753
15139
  "---",
14754
15140
  goal,
14755
15141
  "---",
15142
+ deliverableBlock,
14756
15143
  "",
14757
15144
  "AUTHORITY YOU HAVE:",
14758
15145
  "- Spawn as many subagents as the work needs (delegate / spawn_subagent).",
@@ -14774,6 +15161,7 @@ function buildGoalPreamble(goal) {
14774
15161
  "- You can tell the user HOW to verify it themselves in 10 seconds.",
14775
15162
  '- You have NOT hedged. None of: "looks like it should work", "I',
14776
15163
  ' believe this fixes it", "the changes appear correct".',
15164
+ `- Progress bar shows 100%. All deliverables checked off.`,
14777
15165
  "",
14778
15166
  "WHAT IS NOT DONE \u2014 never report any of these as completion:",
14779
15167
  "- An error message you didn't recover from.",
@@ -14788,6 +15176,13 @@ function buildGoalPreamble(goal) {
14788
15176
  " respond to with a fresh attempt (different role, different model,",
14789
15177
  " tighter prompt).",
14790
15178
  "",
15179
+ "PROGRESS REPORTING \u2014 MANDATORY every iteration:",
15180
+ "- End every response with exactly: [PROGRESS: N%] \u2014 <status note>",
15181
+ " where N is your honest estimate (0-100) of how much of the goal",
15182
+ " is done. The engine tracks this and shows a live progress bar.",
15183
+ "- Example: [PROGRESS: 45%] \u2014 Auth module refactored, 3/5 tests pass,",
15184
+ " remaining: test coverage + docs update.",
15185
+ "",
14791
15186
  "PERSISTENCE PROTOCOL:",
14792
15187
  "- If blocked, try at least 3 different angles before reporting the",
14793
15188
  " problem to the user. Different tool inputs, different subagent",
@@ -18579,7 +18974,7 @@ var TaskTracker = class {
18579
18974
  const blockers = this.getBlockers(taskId);
18580
18975
  return blockers.every((id) => {
18581
18976
  const node = this.graph?.nodes.get(id);
18582
- return node?.status === "completed";
18977
+ return node?.status === "completed" || node?.status === "failed";
18583
18978
  });
18584
18979
  }
18585
18980
  getProgress() {
@@ -18611,7 +19006,7 @@ var TaskTracker = class {
18611
19006
  const remainingBlockers = this.getBlockers(depId);
18612
19007
  const allUnblocked = remainingBlockers.every((id) => {
18613
19008
  const blocker = this.graph?.nodes.get(id);
18614
- return blocker?.status === "completed";
19009
+ return blocker?.status === "completed" || blocker?.status === "failed";
18615
19010
  });
18616
19011
  if (allUnblocked) {
18617
19012
  dep.status = "pending";
@@ -18625,7 +19020,7 @@ var TaskTracker = class {
18625
19020
  const blockers = this.getBlockers(taskId);
18626
19021
  const someBlocked = blockers.some((id) => {
18627
19022
  const blocker = this.graph?.nodes.get(id);
18628
- return blocker?.status !== "completed";
19023
+ return blocker?.status !== "completed" && blocker?.status !== "failed";
18629
19024
  });
18630
19025
  if (someBlocked) {
18631
19026
  const node = this.graph.nodes.get(taskId);
@@ -19265,10 +19660,10 @@ var AISpecBuilder = class {
19265
19660
  async saveSession() {
19266
19661
  if (!this.sessionPath) return;
19267
19662
  try {
19268
- const fsp20 = await import('fs/promises');
19663
+ const fsp21 = await import('fs/promises');
19269
19664
  const path37 = await import('path');
19270
19665
  const { atomicWrite: atomicWrite2 } = await Promise.resolve().then(() => (init_atomic_write(), atomic_write_exports));
19271
- await fsp20.mkdir(path37.dirname(this.sessionPath), { recursive: true });
19666
+ await fsp21.mkdir(path37.dirname(this.sessionPath), { recursive: true });
19272
19667
  await atomicWrite2(this.sessionPath, JSON.stringify(this.session, null, 2));
19273
19668
  } catch {
19274
19669
  }
@@ -19277,8 +19672,8 @@ var AISpecBuilder = class {
19277
19672
  async loadSession() {
19278
19673
  if (!this.sessionPath) return false;
19279
19674
  try {
19280
- const fsp20 = await import('fs/promises');
19281
- const raw = await fsp20.readFile(this.sessionPath, "utf8");
19675
+ const fsp21 = await import('fs/promises');
19676
+ const raw = await fsp21.readFile(this.sessionPath, "utf8");
19282
19677
  const loaded = JSON.parse(raw);
19283
19678
  if (loaded?.id && loaded?.phase && loaded?.title) {
19284
19679
  this.session = loaded;
@@ -19292,8 +19687,8 @@ var AISpecBuilder = class {
19292
19687
  async deleteSession() {
19293
19688
  if (!this.sessionPath) return;
19294
19689
  try {
19295
- const fsp20 = await import('fs/promises');
19296
- await fsp20.unlink(this.sessionPath);
19690
+ const fsp21 = await import('fs/promises');
19691
+ await fsp21.unlink(this.sessionPath);
19297
19692
  } catch {
19298
19693
  }
19299
19694
  }
@@ -19694,7 +20089,7 @@ function templateToMarkdown(template, title) {
19694
20089
  }
19695
20090
 
19696
20091
  // src/sdd/task-visualizer.ts
19697
- var STATUS_ICON = {
20092
+ var STATUS_ICON2 = {
19698
20093
  pending: "\u25CB",
19699
20094
  in_progress: "\u25D0",
19700
20095
  blocked: "\u2298",
@@ -19702,13 +20097,13 @@ var STATUS_ICON = {
19702
20097
  review: "\u25D1",
19703
20098
  completed: "\u25CF"
19704
20099
  };
19705
- var PRIORITY_ICON = {
20100
+ var PRIORITY_ICON2 = {
19706
20101
  critical: "\u{1F534}",
19707
20102
  high: "\u{1F7E0}",
19708
20103
  medium: "\u{1F7E1}",
19709
20104
  low: "\u{1F7E2}"
19710
20105
  };
19711
- var TYPE_ICON = {
20106
+ var TYPE_ICON2 = {
19712
20107
  feature: "\u26A1",
19713
20108
  bugfix: "\u{1F41B}",
19714
20109
  refactor: "\u267B\uFE0F",
@@ -19757,9 +20152,9 @@ function renderNode(graph, nodeId, lines, rendered, childrenMap, compact, prefix
19757
20152
  rendered.add(nodeId);
19758
20153
  const node = graph.nodes.get(nodeId);
19759
20154
  if (!node) return;
19760
- const icon = STATUS_ICON[node.status];
19761
- const prioIcon = PRIORITY_ICON[node.priority];
19762
- const typeIcon = TYPE_ICON[node.type];
20155
+ const icon = STATUS_ICON2[node.status];
20156
+ const prioIcon = PRIORITY_ICON2[node.priority];
20157
+ const typeIcon = TYPE_ICON2[node.type];
19763
20158
  const title = compact ? truncate2(node.title, 40) : node.title;
19764
20159
  const blockedBy = childrenMap.get(nodeId) ?? [];
19765
20160
  const depsStr = blockedBy.length > 0 ? ` \u2190 [${blockedBy.map((d) => graph.nodes.get(d)?.title?.slice(0, 12) ?? "?").join(", ")}]` : "";
@@ -19801,11 +20196,11 @@ function renderTaskList(graph) {
19801
20196
  }
19802
20197
  for (const [status, group] of Object.entries(groups)) {
19803
20198
  if (group.length === 0) continue;
19804
- const icon = STATUS_ICON[status];
20199
+ const icon = STATUS_ICON2[status];
19805
20200
  lines.push(`${icon} ${status.toUpperCase()} (${group.length})`);
19806
20201
  for (const node of group) {
19807
- const prio = PRIORITY_ICON[node.priority];
19808
- const type = TYPE_ICON[node.type];
20202
+ const prio = PRIORITY_ICON2[node.priority];
20203
+ const type = TYPE_ICON2[node.type];
19809
20204
  lines.push(` ${type} ${prio} ${node.title}`);
19810
20205
  }
19811
20206
  lines.push("");
@@ -20444,14 +20839,17 @@ var SddParallelRun = class {
20444
20839
  this.opts = opts;
20445
20840
  this.slots = Math.min(16, Math.max(1, opts.parallelSlots ?? 4));
20446
20841
  this.timeoutMs = opts.taskTimeoutMs ?? 3e5;
20842
+ this.maxRetries = Math.max(0, opts.maxRetries ?? 2);
20447
20843
  this.decomposer = new SddTaskDecomposer(opts.tracker, opts.graph, { parallelSlots: this.slots });
20448
20844
  }
20449
20845
  opts;
20450
20846
  slots;
20451
20847
  timeoutMs;
20848
+ maxRetries;
20452
20849
  decomposer;
20453
20850
  coordinator = null;
20454
20851
  stopRequested = false;
20852
+ retryMap = /* @__PURE__ */ new Map();
20455
20853
  // -------------------------------------------------------------------
20456
20854
  // Public API
20457
20855
  // -------------------------------------------------------------------
@@ -20463,6 +20861,7 @@ var SddParallelRun = class {
20463
20861
  /** Execute all waves until completion or deadlock. Returns final summary. */
20464
20862
  async run() {
20465
20863
  this.stopRequested = false;
20864
+ this.retryMap.clear();
20466
20865
  const startTime = Date.now();
20467
20866
  let totalCompleted = 0;
20468
20867
  let totalFailed = 0;
@@ -20591,9 +20990,20 @@ var SddParallelRun = class {
20591
20990
  const taskId = expectDefined(taskIds[i]);
20592
20991
  if (result.status === "success") {
20593
20992
  this.opts.tracker.updateNodeStatus(taskId, "completed");
20993
+ this.retryMap.delete(taskId);
20594
20994
  } else {
20595
20995
  const errMsg = result.error?.kind ? `${result.error.kind}: ${result.error.message}` : result.error?.message ?? "unknown error";
20596
- this.opts.tracker.updateNodeStatus(taskId, "failed", errMsg);
20996
+ const currentRetries = this.retryMap.get(taskId) ?? 0;
20997
+ if (currentRetries < this.maxRetries) {
20998
+ this.retryMap.set(taskId, currentRetries + 1);
20999
+ this.opts.tracker.updateNodeStatus(
21000
+ taskId,
21001
+ "pending",
21002
+ `Retry ${currentRetries + 1}/${this.maxRetries}: ${errMsg}`
21003
+ );
21004
+ } else {
21005
+ this.opts.tracker.updateNodeStatus(taskId, "failed", errMsg);
21006
+ }
20597
21007
  }
20598
21008
  }
20599
21009
  return {
@@ -20608,6 +21018,7 @@ var SddParallelRun = class {
20608
21018
  }
20609
21019
  buildProgress() {
20610
21020
  const gp = this.opts.tracker.getProgress();
21021
+ const isDeadlocked = !this.decomposer.isDone() && this.decomposer.nextBatch().deadlocked;
20611
21022
  return {
20612
21023
  wave: this.decomposer.getWaveCount(),
20613
21024
  total: gp.total,
@@ -20617,7 +21028,7 @@ var SddParallelRun = class {
20617
21028
  blocked: gp.blocked,
20618
21029
  pending: gp.pending,
20619
21030
  percent: gp.percentComplete,
20620
- deadlocked: false
21031
+ deadlocked: isDeadlocked
20621
21032
  };
20622
21033
  }
20623
21034
  };
@@ -23388,6 +23799,43 @@ async function revertSnapshots(snapshots, projectRoot) {
23388
23799
  return { revertedFiles, errors };
23389
23800
  }
23390
23801
 
23802
+ // src/storage/task-store.ts
23803
+ init_atomic_write();
23804
+ function emptyTaskFile(sessionId) {
23805
+ return {
23806
+ version: 1,
23807
+ sessionId,
23808
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
23809
+ tasks: []
23810
+ };
23811
+ }
23812
+ async function loadTasks(filePath) {
23813
+ let raw;
23814
+ try {
23815
+ raw = await fsp3.readFile(filePath, "utf8");
23816
+ } catch {
23817
+ return null;
23818
+ }
23819
+ try {
23820
+ const parsed = JSON.parse(raw);
23821
+ if (parsed?.version !== 1 || !Array.isArray(parsed.tasks)) return null;
23822
+ return parsed;
23823
+ } catch {
23824
+ return null;
23825
+ }
23826
+ }
23827
+ async function saveTasks(filePath, tasks) {
23828
+ try {
23829
+ tasks.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
23830
+ await atomicWrite(filePath, JSON.stringify(tasks, null, 2), { mode: 384 });
23831
+ } catch (err) {
23832
+ console.warn(
23833
+ "[task-store] save failed:",
23834
+ err instanceof Error ? err.message : String(err)
23835
+ );
23836
+ }
23837
+ }
23838
+
23391
23839
  // src/storage/prompt-store.ts
23392
23840
  init_atomic_write();
23393
23841
  var DefaultPromptStore = class {
@@ -25581,16 +26029,16 @@ Use \`/security report <number>\` to view a specific report.` };
25581
26029
  }
25582
26030
  const index = Number.parseInt(reportId, 10) - 1;
25583
26031
  if (!Number.isNaN(index) && reports[index]) {
25584
- const { readFile: readFile39 } = await import('fs/promises');
25585
- const content = await readFile39(join(reportsDir, reports[index]), "utf-8");
26032
+ const { readFile: readFile40 } = await import('fs/promises');
26033
+ const content = await readFile40(join(reportsDir, reports[index]), "utf-8");
25586
26034
  return { message: `# Security Report
25587
26035
 
25588
26036
  ${content}` };
25589
26037
  }
25590
26038
  const match = reports.find((r) => r.includes(reportId));
25591
26039
  if (match) {
25592
- const { readFile: readFile39 } = await import('fs/promises');
25593
- const content = await readFile39(join(reportsDir, match), "utf-8");
26040
+ const { readFile: readFile40 } = await import('fs/promises');
26041
+ const content = await readFile40(join(reportsDir, match), "utf-8");
25594
26042
  return { message: `# Security Report
25595
26043
 
25596
26044
  ${content}` };
@@ -28716,8 +29164,13 @@ var SlashCommandRegistry = class {
28716
29164
  if (!entry) {
28717
29165
  return { message: `Unknown command "/${name}". Type /help for a list.` };
28718
29166
  }
28719
- const res = await entry.cmd.run(args, ctx);
28720
- return res ?? {};
29167
+ try {
29168
+ const res = await entry.cmd.run(args, ctx);
29169
+ return res ?? {};
29170
+ } catch (err) {
29171
+ const msg = err instanceof Error ? err.message : String(err);
29172
+ return { message: `Command "/${name}" failed: ${msg}` };
29173
+ }
28721
29174
  }
28722
29175
  };
28723
29176
 
@@ -29411,7 +29864,7 @@ var PhaseOrchestrator = class {
29411
29864
  maxVerifyAttempts: opts.maxVerifyAttempts ?? 2,
29412
29865
  autonomous: opts.autonomous ?? true,
29413
29866
  phaseDelayMs: opts.phaseDelayMs ?? 0,
29414
- stopOnFailure: opts.stopOnFailure ?? true,
29867
+ stopOnFailure: opts.stopOnFailure ?? false,
29415
29868
  events: this.events
29416
29869
  };
29417
29870
  }
@@ -29858,7 +30311,7 @@ var PhaseOrchestrator = class {
29858
30311
  if (phase.status !== "pending") continue;
29859
30312
  const depsDone = phase.dependsOn.every((depId) => {
29860
30313
  const dep = this.graph.phases.get(depId);
29861
- return dep?.status === "completed" || dep?.status === "skipped";
30314
+ return dep?.status === "completed" || dep?.status === "skipped" || dep?.status === "failed";
29862
30315
  });
29863
30316
  if (depsDone || phase.parallelizable) {
29864
30317
  ready.push(phase);
@@ -30069,7 +30522,9 @@ var AutoPhaseRunner = class {
30069
30522
  if (failedPhase) {
30070
30523
  this.opts.onFail?.(this.graph, failedPhase, new Error(p.error));
30071
30524
  }
30072
- this.cleanup();
30525
+ if (this.opts.stopOnFailure) {
30526
+ this.cleanup();
30527
+ }
30073
30528
  }
30074
30529
  };
30075
30530
  /** Stores the unsubscribe function returned by EventBus.on() */
@@ -30123,10 +30578,32 @@ var AutoPhaseRunner = class {
30123
30578
  }, 2e3);
30124
30579
  }
30125
30580
  this.maxRunTimer = setTimeout(
30126
- () => this.stop(),
30127
- this.opts.maxRunDurationMs ?? 24 * 60 * 6e4
30581
+ () => {
30582
+ this.opts.onProgress?.({
30583
+ totalPhases: 0,
30584
+ pending: 0,
30585
+ ready: 0,
30586
+ running: 0,
30587
+ paused: 0,
30588
+ completed: 0,
30589
+ failed: 0,
30590
+ skipped: 0,
30591
+ percentComplete: 0,
30592
+ totalTasks: 0,
30593
+ completedTasks: 0,
30594
+ failedTasks: 0,
30595
+ estimatedHours: 0,
30596
+ actualHours: 0
30597
+ });
30598
+ this.stop();
30599
+ },
30600
+ this.opts.maxRunDurationMs ?? 7 * 24 * 60 * 6e4
30128
30601
  );
30129
- this.maxRunTimer.unref?.();
30602
+ if (this.opts.maxRunDurationMs !== void 0 && this.opts.maxRunDurationMs <= 0) {
30603
+ clearTimeout(this.maxRunTimer);
30604
+ this.maxRunTimer = null;
30605
+ }
30606
+ this.maxRunTimer?.unref?.();
30130
30607
  if (this.opts.events) {
30131
30608
  const events = this.opts.events;
30132
30609
  const onUntyped = events.on;
@@ -32467,6 +32944,6 @@ ${formatPlan(updated)}`
32467
32944
  };
32468
32945
  }
32469
32946
 
32470
- export { ACP_AGENTS, AGENTS_BY_PHASE, AGENT_CATALOG, AISpecBuilder, ALL_AGENT_DEFINITIONS, ALL_FLEET_AGENTS, ALL_SYNC_CATEGORIES, AUDIT_LOG_AGENT, Agent, AgentError, AnnotationsStore, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutoPhasePlanner, AutoPhaseRunner, AutonomousRunner, BUG_HUNTER_AGENT, BrainDecisionQueue, BudgetExceededError, CONTEXT_WINDOW_MODES, CORE_RECONSTRUCT_EVENTS, CheckpointManager, CloudSync, CollaborationBus, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_AUTONOMY_CONFIG, 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_SESSION_LOGGING_CONFIG, DEFAULT_SESSION_PRUNE_DAYS, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DEFAULT_TOOLS_CONFIG, DefaultAttachmentStore, DefaultBrainArbiter, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultPromptStore, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, ENHANCER_SYSTEM_PROMPT, ERROR_CODES, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FLEET_ROSTER_WITHACP, FileMemoryBackend, FleetBus, FleetCostCapError, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, FsError, GitignoreUpdater, GraphMemoryBackend, HookRegistry, HookRunner, HumanEscalatingBrainArbiter, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MATRIX_PHASE_KEYS, MAX_JOURNAL_ENTRIES, MEMORY_TYPE_LABELS, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, ObservableBrainArbiter, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, PhaseGraphBuilder, PhaseOrchestrator, PhaseStore, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReplayLogStore, ReplayProviderRunner, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, STANDARD_AUDIT_EVENTS, ScopedEventBus, SddParallelRun, SddTaskDecomposer, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SessionMemoryConsolidator, SessionRecovery, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolAuditLog, ToolError, ToolExecutor, ToolRegistry, WorktreeManager, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, assertSafePath, atomicWrite, attachAutoExtend, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, bootConfig, braveSearchServer, buildBtwBlock, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, collabInjectMiddleware, collabPauseMiddleware, color, compileGlob, compileUserRegex, completePartialObject, composeDirectorPrompt, composeSubagentPrompt, computeTaskProgress, consumeBtwNotes, context7Server, contextManagerTool, createAutoExecutor, createAutoPhaseFromTaskGraph, createContextManagerTool, createDefaultPipelines, createDelegateTool, createGitPlugin, createMcpControlTool, createMessage, createObservabilityPlugin, createPlanPlugin, createPromptsPlugin, createSecurityPlugin, createSecuritySlashCommand, createSessionEventBridge, createSkillsPlugin, createSyncPlugin, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, dispatchAgent, downloadGitHubTarball, emptyGoal, emptyPlan, encryptConfigSecrets, enhanceUserPrompt, ensureDir, estimateRequestTokens, estimateRequestTokensCalibrated, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, expandGlob, expectDefined, extractRunEnv, filesystemServer, findCriticalPath, flagsToConfigPatch, formatContextWindowModeList, formatGoal, formatHumanPrompt, formatPlan, formatPlanTemplates, formatTodosList, getAgentDefinition, getCalibrationState, getContextWindowMode, getPlanTemplate, getTemplate, getTermSize, githubServer, goalFilePath, googleMapsServer, hashRequest, hookMatcherMatches, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isInteractive, isPluginError, isSessionError, isStdinTTY, isStdoutTTY, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isValidMatrixKey, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAskTool, makeAssignTool, makeAutonomyPromptContributor, makeAwaitTasksTool, makeCollabDebugTool, makeContinueToNextIterationTool, makeDirectorSessionFactory, makeFleetEmitTool, makeFleetHealthTool, makeFleetSessionTool, makeFleetStatusTool, makeFleetUsageTool, makeLLMClassifier, makeRollUpTool, makeSpawnTool, makeTerminateTool, matchAny, matchGlob, matrixKeyKind, mergeCustomModelDefs, mergeModelsPayload, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, normalizedEqual, onResize, parseContinueDirective, parseEntries, parseSkillRef, pendingBtwCount, phaseForRole, projectHash, projectSlug, recentTextTurns, recordActualUsage, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resetCalibration, resolveAuditLevel, resolveContextWindowPolicy, resolveModelMatrix, resolveSessionLoggingConfig, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, runProviderWithRetry, runShellHook, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTodosCheckpoint, scoreAgents, securitySlashCommand, sentinelServer, setBtwNote, setOutputLineGuard, setPlanItemStatus, setRawMode, shouldEnhance, slackServer, sleep, stableStringify, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, withFileLock, wrapAsState, writeErr, writeOut, zaiVisionServer };
32947
+ export { ACP_AGENTS, AGENTS_BY_PHASE, AGENT_CATALOG, AISpecBuilder, ALL_AGENT_DEFINITIONS, ALL_FLEET_AGENTS, ALL_SYNC_CATEGORIES, AUDIT_LOG_AGENT, Agent, AgentError, AnnotationsStore, AutoApprovePermissionPolicy, AutoCompactionMiddleware, AutoExecutor, AutoPhasePlanner, AutoPhaseRunner, AutonomousRunner, BUG_HUNTER_AGENT, BrainDecisionQueue, BudgetExceededError, CONTEXT_WINDOW_MODES, CORE_RECONSTRUCT_EVENTS, CheckpointManager, CloudSync, CollaborationBus, ConfigError, ConfigMigrationError, Container, Context, ConversationState, DEFAULT_AUTONOMY_CONFIG, 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_SESSION_LOGGING_CONFIG, DEFAULT_SESSION_PRUNE_DAYS, DEFAULT_SPEC_TEMPLATE, DEFAULT_SUBAGENT_BASELINE, DEFAULT_TOOLS_CONFIG, DefaultAttachmentStore, DefaultBrainArbiter, DefaultConfigLoader, DefaultConfigStore, DefaultErrorHandler, DefaultHealthRegistry, DefaultLogger, DefaultMemoryStore, DefaultModeStore, DefaultModelsRegistry, DefaultMultiAgentCoordinator, DefaultPathResolver, DefaultPermissionPolicy, DefaultPluginAPI, DefaultPromptStore, DefaultProviderRunner, DefaultRetryPolicy, DefaultSecretScrubber, DefaultSecretVault, DefaultSessionReader, DefaultSessionRewinder, DefaultSessionStore, DefaultSkillLoader, DefaultSystemPromptBuilder, DefaultTaskStore, DefaultTokenCounter, Director, DirectorStateCheckpoint, DoneConditionChecker, ENHANCER_SYSTEM_PROMPT, ERROR_CODES, EternalAutonomyEngine, EventBus, ExtensionRegistry, FLEET_ROSTER, FLEET_ROSTER_BUDGETS, FLEET_ROSTER_WITHACP, FileMemoryBackend, FleetBus, FleetCostCapError, FleetManager, FleetSpawnBudgetError, FleetUsageAggregator, FsError, GitignoreUpdater, GraphMemoryBackend, HookRegistry, HookRunner, HumanEscalatingBrainArbiter, HybridCompactor, InMemoryAgentBridge, InMemoryBridgeTransport, InMemoryMetricsSink, InputBuilder, IntelligentCompactor, KERNEL_API_VERSION, LAYER_1_IDENTITY, LLMSelector, MATRIX_PHASE_KEYS, MAX_JOURNAL_ENTRIES, MAX_PROGRESS_HISTORY, MEMORY_TYPE_LABELS, NULL_FLEET_BUS, NoopMetricsSink, NoopTracer, OTelTracer, ObservableBrainArbiter, PROMETHEUS_CONTENT_TYPE, ParallelEternalEngine, PhaseGraphBuilder, PhaseOrchestrator, PhaseStore, Pipeline, PluginError, ProviderError, ProviderRegistry, QueueStore, REFACTOR_PLANNER_AGENT, RecoveryLock, ReplayLogStore, ReplayProviderRunner, ReportGenerator, RunController, SECURITY_SCANNER_AGENT, SPEC_TEMPLATES, STANDARD_AUDIT_EVENTS, ScopedEventBus, SddParallelRun, SddTaskDecomposer, SecurityScanner, SecurityScannerOrchestrator, SelectiveCompactor, SessionAnalyzer, SessionError, SessionMemoryConsolidator, SessionRecovery, SkillGenerator, SkillInstaller, SkillManifestStore, SlashCommandRegistry, SpecDrivenDev, SpecParser, SpecStore, SpecVersioning, SubagentBudget, TOKENS, TaskFlow, TaskGenerator, TaskGraphStore, TaskTracker, TechStackDetector, ToolAuditLog, ToolError, ToolExecutor, ToolRegistry, WorktreeManager, WrongStackError, addPlanItem, allServers, analyzeCriticalPath, appendJournal, applyRosterBudget, asBlocks, asText, assertSafePath, atomicWrite, attachAutoExtend, attachPlanCheckpoint, attachTodosCheckpoint, awsServer, blockServer, bootConfig, braveSearchServer, buildBtwBlock, buildChildEnv, buildGoalPreamble, buildOtlpMetricsRequest, buildOtlpTracesRequest, buildRecoveryStrategies, classifyFamily, clearPlan, collabInjectMiddleware, collabPauseMiddleware, color, compileGlob, compileUserRegex, completePartialObject, composeDirectorPrompt, composeSubagentPrompt, computeTaskItemProgress, computeTaskProgress, consumeBtwNotes, context7Server, contextManagerTool, createAutoExecutor, createAutoPhaseFromTaskGraph, createContextManagerTool, createDefaultPipelines, createDelegateTool, createGitPlugin, createMcpControlTool, createMessage, createObservabilityPlugin, createPlanPlugin, createPromptsPlugin, createSecurityPlugin, createSecuritySlashCommand, createSessionEventBridge, createSkillsPlugin, createSyncPlugin, createToolOutputSerializer, decryptConfigSecrets, defaultGitignoreUpdater, defaultOrchestrator, defaultReportGenerator, defaultSecurityScanner, defaultSkillGenerator, defaultTechStackDetector, deriveTodosFromPlanItem, detectNewlineStyle, dispatchAgent, downloadGitHubTarball, emptyGoal, emptyPlan, emptyTaskFile, encryptConfigSecrets, enhanceUserPrompt, ensureDir, estimateRequestTokens, estimateRequestTokensCalibrated, estimateTextTokens, estimateToolDefTokens, estimateToolInputTokens, estimateToolResultTokens, everArtServer, expandGlob, expectDefined, extractRunEnv, filesystemServer, findCriticalPath, flagsToConfigPatch, formatContextWindowModeList, formatGoal, formatHumanPrompt, formatPlan, formatPlanTemplates, formatTaskList, formatTaskProgress, formatTodosList, getAgentDefinition, getCalibrationState, getContextWindowMode, getPlanTemplate, getTemplate, getTermSize, githubServer, goalFilePath, googleMapsServer, hashRequest, hookMatcherMatches, isAgentError, isConfigError, isContextWindowModeId, isFsError, isImageBlock, isInteractive, isPluginError, isSessionError, isStdinTTY, isStdoutTTY, isTextBlock, isThinkingBlock, isToolError, isToolResultBlock, isToolUseBlock, isValidMatrixKey, isWrongStackError, listContextWindowModes, listPlanTemplates, listTemplates, loadDirectorState, loadGoal, loadPlan, loadPlugins, loadProjectModes, loadTasks, loadTodosCheckpoint, loadUserModes, makeAgentSubagentRunner, makeAskTool, makeAssignTool, makeAutonomyPromptContributor, makeAwaitTasksTool, makeCollabDebugTool, makeContinueToNextIterationTool, makeDirectorSessionFactory, makeFleetEmitTool, makeFleetHealthTool, makeFleetSessionTool, makeFleetStatusTool, makeFleetUsageTool, makeLLMClassifier, makeRollUpTool, makeSpawnTool, makeTerminateTool, matchAny, matchGlob, matrixKeyKind, mergeCustomModelDefs, mergeModelsPayload, migratePlaintextSecrets, miniMaxVisionServer, normalizeToLf, normalizedEqual, onResize, parseContinueDirective, parseEntries, parseProgressFromText, parseSkillRef, pendingBtwCount, phaseForRole, projectHash, projectSlug, recentTextTurns, recordActualUsage, recordProgress, removePlanItem, renderProgress, renderPrometheus, renderSpecAnalysis, renderTaskGraph, renderTaskList, repairToolUseAdjacency, resetCalibration, resolveAuditLevel, resolveContextWindowPolicy, resolveModelMatrix, resolveSessionLoggingConfig, resolveWstackPaths, rewriteConfigEncrypted, rosterSummaryFromConfigs, runConfigMigrations, runProviderWithRetry, runShellHook, safeParse, safeStringify, sanitizeJsonString, saveGoal, savePlan, saveTasks, saveTodosCheckpoint, scoreAgents, securitySlashCommand, sentinelServer, setBtwNote, setOutputLineGuard, setPlanItemStatus, setProgress, setRawMode, shouldEnhance, slackServer, sleep, stableStringify, startMetricsServer, startOtlpMetricsExporter, startOtlpTraceExporter, stripAnsi, summarizeUsage, templateToMarkdown, toStyle, toWrongStackError, topologicalSort, unifiedDiff, unloadPlugins, validateAgainstSchema, wireMetricsToEvents, withFileLock, wrapAsState, writeErr, writeOut, zaiVisionServer };
32471
32948
  //# sourceMappingURL=index.js.map
32472
32949
  //# sourceMappingURL=index.js.map