@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.
- package/dist/{agent-bridge-DbVe1dHT.d.ts → agent-bridge-mOxbpFcg.d.ts} +1 -1
- package/dist/{agent-subagent-runner-C6eqID1t.d.ts → agent-subagent-runner-DukQLUcS.d.ts} +5 -5
- package/dist/{brain-s9DyD_Vf.d.ts → brain-Dfv4Y82E.d.ts} +1 -1
- package/dist/{config-84VaZpH6.d.ts → config-BSU-6vah.d.ts} +1 -1
- package/dist/coordination/index.d.ts +9 -9
- package/dist/coordination/index.js +103 -0
- package/dist/coordination/index.js.map +1 -1
- package/dist/defaults/index.d.ts +18 -17
- package/dist/defaults/index.js +276 -12
- package/dist/defaults/index.js.map +1 -1
- package/dist/execution/index.d.ts +61 -365
- package/dist/execution/index.js +423 -8
- package/dist/execution/index.js.map +1 -1
- package/dist/extension/index.d.ts +4 -4
- package/dist/goal-preamble-CI8lxeY1.d.ts +378 -0
- package/dist/{goal-store-DvWLNu52.d.ts → goal-store-ht0VmR1A.d.ts} +63 -21
- package/dist/{index-CqrroYcU.d.ts → index-BWRN6wOb.d.ts} +5 -5
- package/dist/{index-D3Nax3YU.d.ts → index-DIKEcfgC.d.ts} +3 -3
- package/dist/index.d.ts +31 -29
- package/dist/index.js +530 -53
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/index.d.ts +4 -4
- package/dist/kernel/index.d.ts +6 -6
- package/dist/{mcp-servers-D3E5ixAR.d.ts → mcp-servers-CXCsANdY.d.ts} +1 -1
- package/dist/{multi-agent-coordinator-DHNrjPaA.d.ts → multi-agent-coordinator-51LvnXkD.d.ts} +1 -1
- package/dist/{null-fleet-bus-BzzciAc4.d.ts → null-fleet-bus-D09hMzFQ.d.ts} +5 -5
- package/dist/observability/index.d.ts +1 -1
- package/dist/{parallel-eternal-engine-CTpcrb9O.d.ts → parallel-eternal-engine-CUtmM_0V.d.ts} +24 -5
- package/dist/{path-resolver-B7hgMAVe.d.ts → path-resolver-DDJiMAtX.d.ts} +1 -1
- package/dist/{pipeline-C1Ad9OjI.d.ts → pipeline-BqiA_UMr.d.ts} +2 -2
- package/dist/{plan-templates-CNphsz0n.d.ts → plan-templates-BdDxl9cI.d.ts} +2 -2
- package/dist/{provider-runner-cqvlB_oS.d.ts → provider-runner-BUunikwY.d.ts} +1 -1
- package/dist/sdd/index.d.ts +11 -6
- package/dist/sdd/index.js +124 -5
- package/dist/sdd/index.js.map +1 -1
- package/dist/{session-event-bridge-IVzs2GpE.d.ts → session-event-bridge-BpJ5trO9.d.ts} +1 -1
- package/dist/{skill-BJxzIyyN.d.ts → skill-Bj6Ezqb8.d.ts} +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/spec-TBi3Jr6T.d.ts +78 -0
- package/dist/storage/index.d.ts +21 -9
- package/dist/storage/index.js +157 -14
- package/dist/storage/index.js.map +1 -1
- package/dist/task-format-vGOIftmK.d.ts +23 -0
- package/dist/task-graph-u1q9Jkyk.d.ts +84 -0
- package/dist/types/index.d.ts +15 -14
- package/dist/utils/index.d.ts +3 -1
- package/dist/utils/index.js +110 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/tech-stack/SKILL.md +177 -0
- 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
|
-
|
|
9713
|
-
lines.push(
|
|
9714
|
-
|
|
9715
|
-
|
|
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(
|
|
9718
|
-
lines.push(
|
|
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
|
-
|
|
9722
|
-
|
|
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(
|
|
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 ?
|
|
9732
|
-
const cost = typeof e.costUsd === "number" ?
|
|
9733
|
-
lines.push(
|
|
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 ??
|
|
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.
|
|
10065
|
-
|
|
10066
|
-
|
|
10067
|
-
|
|
10068
|
-
|
|
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
|
|
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
|
|
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
|
|
19281
|
-
const raw = await
|
|
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
|
|
19296
|
-
await
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
19761
|
-
const prioIcon =
|
|
19762
|
-
const typeIcon =
|
|
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 =
|
|
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 =
|
|
19808
|
-
const 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.
|
|
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:
|
|
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:
|
|
25585
|
-
const content = await
|
|
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:
|
|
25593
|
-
const content = await
|
|
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
|
-
|
|
28720
|
-
|
|
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 ??
|
|
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.
|
|
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
|
-
() =>
|
|
30127
|
-
|
|
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.
|
|
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
|