baro-ai 0.70.7 → 0.70.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.mjs +46 -24
- package/dist/cli.mjs.map +1 -1
- package/dist/runner.mjs +1 -1
- package/dist/runner.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -47767,7 +47767,7 @@ exactly this shape:
|
|
|
47767
47767
|
{"action":"split"|"prereq"|"rewire"|"skip"|"abort",
|
|
47768
47768
|
"reason":"\u2026",
|
|
47769
47769
|
"added":[ { "id":"S?","priority":N,"title":"\u2026","description":"\u2026",
|
|
47770
|
-
"dependsOn":["\u2026"], "acceptance":["\u2026"]
|
|
47770
|
+
"dependsOn":["\u2026"], "acceptance":["\u2026"] } ],
|
|
47771
47771
|
"removed":["S?"],
|
|
47772
47772
|
"modifiedDeps":[{"id":"S?","newDependsOn":["\u2026"]}]}
|
|
47773
47773
|
|
|
@@ -47777,18 +47777,22 @@ Rules:
|
|
|
47777
47777
|
- "modifiedDeps" rewires a story's dependsOn \u2014 use to repoint dependents
|
|
47778
47778
|
of a removed story to a replacement.
|
|
47779
47779
|
- "abort" \u2192 empty added/removed/modifiedDeps arrays.
|
|
47780
|
-
-
|
|
47781
|
-
|
|
47782
|
-
|
|
47783
|
-
|
|
47784
|
-
|
|
47785
|
-
|
|
47786
|
-
shown ("
|
|
47787
|
-
|
|
47788
|
-
|
|
47789
|
-
|
|
47790
|
-
|
|
47791
|
-
|
|
47780
|
+
- MODEL: LEAVE "model" UNSET on the stories you add \u2014 they run on the
|
|
47781
|
+
default (cheaper) model, which is exactly what split children want.
|
|
47782
|
+
Do NOT use planner tier names ("haiku"/"sonnet"/"opus") \u2014 the story
|
|
47783
|
+
model is not chosen by tier here; it is either the default or an
|
|
47784
|
+
explicit escalation route (below).
|
|
47785
|
+
- ESCALATION vs SPLIT \u2014 the failing story already burned its retries on
|
|
47786
|
+
the model shown ("Model that just failed"). Two ways to recover:
|
|
47787
|
+
* SPLIT (preferred): if it was TOO BROAD \u2014 too many files/concerns
|
|
47788
|
+
for one session \u2014 break it into smaller, focused stories and
|
|
47789
|
+
leave their "model" unset (they stay on the cheaper model). A
|
|
47790
|
+
smaller, sharper story is usually what a stuck run actually needs.
|
|
47791
|
+
* ESCALATE (sparingly): if the story was already RIGHT-SIZED but
|
|
47792
|
+
genuinely needs a more capable model, set that ONE story's "model"
|
|
47793
|
+
to the exact ESCALATION ROUTE printed in the failure context
|
|
47794
|
+
below. That runs it on the stronger model. Only escalate when the
|
|
47795
|
+
scope is already tight \u2014 never as a reflex.
|
|
47792
47796
|
- Output ONLY the JSON object, nothing else.`;
|
|
47793
47797
|
var Surgeon = class extends BaseObserver {
|
|
47794
47798
|
opts;
|
|
@@ -47803,7 +47807,8 @@ var Surgeon = class extends BaseObserver {
|
|
|
47803
47807
|
claudeBin: opts.claudeBin ?? "claude",
|
|
47804
47808
|
timeoutMs: opts.timeoutMs ?? 9e4,
|
|
47805
47809
|
snapshot: opts.snapshot,
|
|
47806
|
-
resolveRoute: opts.resolveRoute
|
|
47810
|
+
resolveRoute: opts.resolveRoute,
|
|
47811
|
+
escalationRoute: opts.escalationRoute
|
|
47807
47812
|
};
|
|
47808
47813
|
}
|
|
47809
47814
|
/** Resolves once every in-flight LLM evaluation has completed. */
|
|
@@ -47842,7 +47847,7 @@ var Surgeon = class extends BaseObserver {
|
|
|
47842
47847
|
*/
|
|
47843
47848
|
async evaluateWithLlm(failure) {
|
|
47844
47849
|
const snap = this.opts.snapshot();
|
|
47845
|
-
const prompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute);
|
|
47850
|
+
const prompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute, this.opts.escalationRoute);
|
|
47846
47851
|
try {
|
|
47847
47852
|
const { stdout } = await execFileAsync3(
|
|
47848
47853
|
this.opts.claudeBin,
|
|
@@ -47892,7 +47897,7 @@ var Surgeon = class extends BaseObserver {
|
|
|
47892
47897
|
}
|
|
47893
47898
|
}
|
|
47894
47899
|
};
|
|
47895
|
-
function buildSurgeonPrompt(snap, failure, resolveRoute) {
|
|
47900
|
+
function buildSurgeonPrompt(snap, failure, resolveRoute, escalationRoute) {
|
|
47896
47901
|
const storyLines = snap.stories.map(
|
|
47897
47902
|
(s2) => ` - ${s2.id} ${s2.passes ? "[passed]" : "[pending]"} ${s2.model ? `<tier:${s2.model}> ` : ""}"${s2.title}" deps=${JSON.stringify(s2.dependsOn)}`
|
|
47898
47903
|
).join("\n");
|
|
@@ -47915,6 +47920,12 @@ function buildSurgeonPrompt(snap, failure, resolveRoute) {
|
|
|
47915
47920
|
] : [],
|
|
47916
47921
|
`Attempts: ${failure.attempts}`,
|
|
47917
47922
|
`Error: ${failure.error ?? "(no reason captured)"}`,
|
|
47923
|
+
...escalationRoute ? [
|
|
47924
|
+
"",
|
|
47925
|
+
`# Escalation route`,
|
|
47926
|
+
`To ESCALATE a right-sized story onto the stronger model, set that story's "model" to EXACTLY: ${escalationRoute}`,
|
|
47927
|
+
`Otherwise leave "model" unset \u2014 added stories run on the default (cheaper) model. Prefer splitting a too-broad story over escalating.`
|
|
47928
|
+
] : [],
|
|
47918
47929
|
"",
|
|
47919
47930
|
`# Decide`,
|
|
47920
47931
|
`Output the replan JSON per the rules in your system prompt.`
|
|
@@ -47964,7 +47975,8 @@ var SurgeonCodex = class extends BaseObserver {
|
|
|
47964
47975
|
codexBin: opts.codexBin ?? "codex",
|
|
47965
47976
|
timeoutMs: opts.timeoutMs ?? 3e5,
|
|
47966
47977
|
snapshot: opts.snapshot,
|
|
47967
|
-
resolveRoute: opts.resolveRoute
|
|
47978
|
+
resolveRoute: opts.resolveRoute,
|
|
47979
|
+
escalationRoute: opts.escalationRoute
|
|
47968
47980
|
};
|
|
47969
47981
|
}
|
|
47970
47982
|
async idle() {
|
|
@@ -47988,7 +48000,7 @@ var SurgeonCodex = class extends BaseObserver {
|
|
|
47988
48000
|
}
|
|
47989
48001
|
async evaluateWithLlm(failure) {
|
|
47990
48002
|
const snap = this.opts.snapshot();
|
|
47991
|
-
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute);
|
|
48003
|
+
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute, this.opts.escalationRoute);
|
|
47992
48004
|
const prompt = `${SURGEON_SYSTEM_PROMPT}
|
|
47993
48005
|
|
|
47994
48006
|
${userPrompt}`;
|
|
@@ -48061,7 +48073,8 @@ var SurgeonOpenAI = class extends BaseObserver {
|
|
|
48061
48073
|
maxReplans: opts.maxReplans ?? Infinity,
|
|
48062
48074
|
model: opts.model ?? "gpt-5.5",
|
|
48063
48075
|
snapshot: opts.snapshot,
|
|
48064
|
-
resolveRoute: opts.resolveRoute
|
|
48076
|
+
resolveRoute: opts.resolveRoute,
|
|
48077
|
+
escalationRoute: opts.escalationRoute
|
|
48065
48078
|
};
|
|
48066
48079
|
this.model = pickModel3(this.opts.model);
|
|
48067
48080
|
}
|
|
@@ -48093,7 +48106,7 @@ var SurgeonOpenAI = class extends BaseObserver {
|
|
|
48093
48106
|
*/
|
|
48094
48107
|
async evaluate(failure) {
|
|
48095
48108
|
const snap = this.opts.snapshot();
|
|
48096
|
-
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute);
|
|
48109
|
+
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute, this.opts.escalationRoute);
|
|
48097
48110
|
const context = ModelContext.create("surgeon").addContextItem(SystemMessageItem.create(SURGEON_SYSTEM_PROMPT)).addContextItem(UserMessageItem.create(userPrompt));
|
|
48098
48111
|
try {
|
|
48099
48112
|
const round = await runInferenceRound(context, this.model);
|
|
@@ -48151,7 +48164,8 @@ var SurgeonOpenCode = class extends BaseObserver {
|
|
|
48151
48164
|
opencodeBin: opts.opencodeBin ?? "opencode",
|
|
48152
48165
|
timeoutMs: opts.timeoutMs ?? 3e5,
|
|
48153
48166
|
snapshot: opts.snapshot,
|
|
48154
|
-
resolveRoute: opts.resolveRoute
|
|
48167
|
+
resolveRoute: opts.resolveRoute,
|
|
48168
|
+
escalationRoute: opts.escalationRoute
|
|
48155
48169
|
};
|
|
48156
48170
|
}
|
|
48157
48171
|
async idle() {
|
|
@@ -48175,7 +48189,7 @@ var SurgeonOpenCode = class extends BaseObserver {
|
|
|
48175
48189
|
}
|
|
48176
48190
|
async evaluateWithLlm(failure) {
|
|
48177
48191
|
const snap = this.opts.snapshot();
|
|
48178
|
-
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute);
|
|
48192
|
+
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute, this.opts.escalationRoute);
|
|
48179
48193
|
const prompt = `${SURGEON_SYSTEM_PROMPT}
|
|
48180
48194
|
|
|
48181
48195
|
${userPrompt}`;
|
|
@@ -48231,7 +48245,8 @@ var SurgeonPi = class extends BaseObserver {
|
|
|
48231
48245
|
piBin: opts.piBin ?? "pi",
|
|
48232
48246
|
timeoutMs: opts.timeoutMs ?? 3e5,
|
|
48233
48247
|
snapshot: opts.snapshot,
|
|
48234
|
-
resolveRoute: opts.resolveRoute
|
|
48248
|
+
resolveRoute: opts.resolveRoute,
|
|
48249
|
+
escalationRoute: opts.escalationRoute
|
|
48235
48250
|
};
|
|
48236
48251
|
}
|
|
48237
48252
|
async idle() {
|
|
@@ -48255,7 +48270,7 @@ var SurgeonPi = class extends BaseObserver {
|
|
|
48255
48270
|
}
|
|
48256
48271
|
async evaluateWithLlm(failure) {
|
|
48257
48272
|
const snap = this.opts.snapshot();
|
|
48258
|
-
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute);
|
|
48273
|
+
const userPrompt = buildSurgeonPrompt(snap, failure, this.opts.resolveRoute, this.opts.escalationRoute);
|
|
48259
48274
|
const prompt = `${SURGEON_SYSTEM_PROMPT}
|
|
48260
48275
|
|
|
48261
48276
|
${userPrompt}`;
|
|
@@ -48552,16 +48567,20 @@ async function orchestrate(config) {
|
|
|
48552
48567
|
return null;
|
|
48553
48568
|
}
|
|
48554
48569
|
} : void 0;
|
|
48570
|
+
const surgeonEscalationModel = config.surgeonModel ?? (surgeonLlm === "openai" ? "gpt-5.5" : surgeonLlm === "claude" ? "opus" : void 0);
|
|
48571
|
+
const escalationRoute = surgeonEscalationModel && !config.storyModel ? `${surgeonLlm}:${surgeonEscalationModel}` : void 0;
|
|
48555
48572
|
if (surgeonLlm === "openai") {
|
|
48556
48573
|
surgeon = new SurgeonOpenAI({
|
|
48557
48574
|
snapshot,
|
|
48558
48575
|
resolveRoute,
|
|
48576
|
+
escalationRoute,
|
|
48559
48577
|
model: config.surgeonModel ?? "gpt-5.5"
|
|
48560
48578
|
});
|
|
48561
48579
|
} else if (surgeonLlm === "codex") {
|
|
48562
48580
|
surgeon = new SurgeonCodex({
|
|
48563
48581
|
snapshot,
|
|
48564
48582
|
resolveRoute,
|
|
48583
|
+
escalationRoute,
|
|
48565
48584
|
useLlm: config.surgeonUseLlm ?? true,
|
|
48566
48585
|
model: config.surgeonModel
|
|
48567
48586
|
});
|
|
@@ -48569,6 +48588,7 @@ async function orchestrate(config) {
|
|
|
48569
48588
|
surgeon = new SurgeonOpenCode({
|
|
48570
48589
|
snapshot,
|
|
48571
48590
|
resolveRoute,
|
|
48591
|
+
escalationRoute,
|
|
48572
48592
|
useLlm: config.surgeonUseLlm ?? true,
|
|
48573
48593
|
model: config.surgeonModel
|
|
48574
48594
|
});
|
|
@@ -48576,6 +48596,7 @@ async function orchestrate(config) {
|
|
|
48576
48596
|
surgeon = new SurgeonPi({
|
|
48577
48597
|
snapshot,
|
|
48578
48598
|
resolveRoute,
|
|
48599
|
+
escalationRoute,
|
|
48579
48600
|
useLlm: config.surgeonUseLlm ?? true,
|
|
48580
48601
|
model: config.surgeonModel
|
|
48581
48602
|
});
|
|
@@ -48583,6 +48604,7 @@ async function orchestrate(config) {
|
|
|
48583
48604
|
surgeon = new Surgeon({
|
|
48584
48605
|
snapshot,
|
|
48585
48606
|
resolveRoute,
|
|
48607
|
+
escalationRoute,
|
|
48586
48608
|
useLlm: config.surgeonUseLlm ?? false,
|
|
48587
48609
|
model: config.surgeonModel ?? "opus"
|
|
48588
48610
|
});
|