pi-goal-list-loop-audit 0.29.3 → 0.29.4
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/extensions/loops/goal.ts +23 -21
- package/package.json +1 -1
package/extensions/loops/goal.ts
CHANGED
|
@@ -3383,13 +3383,11 @@ function registerAgentTools(pi: any, ctx: ExtensionContext): void {
|
|
|
3383
3383
|
persistState(liveCtx);
|
|
3384
3384
|
appendLedger(liveCtx.cwd, "list_added", { id: item.id, objective: item.objective, drafted: true });
|
|
3385
3385
|
if (!state.goal || state.goal.status === "complete" || state.goal.status === "aborted") {
|
|
3386
|
-
// v0.
|
|
3387
|
-
//
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
return { content: [{ type: "text", text: "Draft accepted and added to the list, but NOT started (the user's autoResume setting is off — auto-accepted drafts queue, they don't auto-start). Do NOT begin work. Tell the user: /list next starts it." }], details: {} };
|
|
3392
|
-
}
|
|
3386
|
+
// v0.29.4: an auto-accepted draft STARTS — autoAcceptDrafts is the
|
|
3387
|
+
// pre-consent (the user asked for the draft in-session). The
|
|
3388
|
+
// 0.28.28 autoResume hold is lifted: that setting now gates ONLY
|
|
3389
|
+
// launch-time restore. The 0.29.1 zombie-twin guard already
|
|
3390
|
+
// refused duplicates of just-completed work upstream.
|
|
3393
3391
|
activateNextListItem(liveCtx);
|
|
3394
3392
|
return { content: [{ type: "text", text: "Confirmed and activated (list was empty). Begin work now." }], details: {} };
|
|
3395
3393
|
}
|
|
@@ -3397,20 +3395,11 @@ function registerAgentTools(pi: any, ctx: ExtensionContext): void {
|
|
|
3397
3395
|
}
|
|
3398
3396
|
const goal = createGoal(full, liveCtx);
|
|
3399
3397
|
setGoal(goal, liveCtx, autoAccept ? "draft-autoaccepted" : "draft-confirmed");
|
|
3400
|
-
// v0.
|
|
3401
|
-
//
|
|
3402
|
-
//
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
status: "paused",
|
|
3406
|
-
pauseKind: "blocked",
|
|
3407
|
-
pauseReason: "auto-accepted draft — held for the user's go-ahead (autoResume off)",
|
|
3408
|
-
pauseSuggestedAction: "/goal resume to start · /goal cancel to drop · /glla autoresume=on starts auto-accepted drafts automatically",
|
|
3409
|
-
}, liveCtx);
|
|
3410
|
-
appendLedger(liveCtx.cwd, "draft_held", { goalId: goal.id, reason: "autoaccept-autoresume-off" });
|
|
3411
|
-
liveCtx.ui.notify(`Draft auto-accepted and HELD (autoResume off): ${goal.objective.slice(0, 80)} — /goal resume to start, /goal cancel to drop.`, "info");
|
|
3412
|
-
return { content: [{ type: "text", text: "Goal accepted but HELD (the user's autoResume setting is off — auto-accepted drafts do not auto-start). Do NOT begin work. Tell the user: /goal resume starts it, /goal cancel drops it." }], details: {} };
|
|
3413
|
-
}
|
|
3398
|
+
// v0.29.4: auto-accepted drafts START (autoAcceptDrafts is the
|
|
3399
|
+
// pre-consent — the user asked for the draft in-session). autoResume
|
|
3400
|
+
// no longer gates draft starts; it gates ONLY launch-time restore of
|
|
3401
|
+
// persisted state ("load it but not auto start it"). Zombie twins of
|
|
3402
|
+
// just-completed work are refused upstream (0.29.1).
|
|
3414
3403
|
iterationCounter = 0;
|
|
3415
3404
|
consecutiveErrorIterations = 0;
|
|
3416
3405
|
consecutiveAbortIterations = 0;
|
|
@@ -5367,6 +5356,12 @@ export default function (pi: ExtensionAPI): void {
|
|
|
5367
5356
|
// "unproductive turns" pause). pi's own retry owns the backoff;
|
|
5368
5357
|
// the nudge counter neither increments nor resets on these turns.
|
|
5369
5358
|
appendLedger(ctx.cwd, "stall_nudge_exempt_error", { nudgesSoFar: heartbeatNudges });
|
|
5359
|
+
} else if (lastA?.stopReason === "aborted") {
|
|
5360
|
+
// v0.29.4: user aborts are not model unproductivity either — the
|
|
5361
|
+
// user pressed Esc. Counting the interrupt tripped the stall brake
|
|
5362
|
+
// on the USER's action (pully field case: Esc-spam → STALL WARNING
|
|
5363
|
+
// 1/3, 2/3 → a bogus "stalled" pause). Neither increment nor reset.
|
|
5364
|
+
appendLedger(ctx.cwd, "stall_nudge_exempt_aborted", { nudgesSoFar: heartbeatNudges });
|
|
5370
5365
|
} else {
|
|
5371
5366
|
const s = loadSettings(ctx.cwd);
|
|
5372
5367
|
const shortWordsThr = s.stallShortWords ?? DEFAULT_STALL_SHORT_WORDS;
|
|
@@ -5529,6 +5524,13 @@ export default function (pi: ExtensionAPI): void {
|
|
|
5529
5524
|
appendLedger(ctx.cwd, "goal_paused", { reason: "5 consecutive aborts (user interrupted)" });
|
|
5530
5525
|
return;
|
|
5531
5526
|
}
|
|
5527
|
+
// v0.29.4: an abort stands the chain DOWN — no auto re-fire. The old
|
|
5528
|
+
// fall-through re-fired the continuation immediately, so every Esc
|
|
5529
|
+
// was answered by another turn under the user's hands ("it auto
|
|
5530
|
+
// triggered and I kept spamming esc on it" — pully, 2026-07-30).
|
|
5531
|
+
ctx.ui.notify(`${goalNoun()} standing down — turn aborted by user (not counted toward stalls). /goal resume to continue, /goal cancel to stop.`, "info");
|
|
5532
|
+
appendLedger(ctx.cwd, "abort_stand_down", { consecutiveAborts: consecutiveAbortIterations });
|
|
5533
|
+
return;
|
|
5532
5534
|
} else {
|
|
5533
5535
|
consecutiveErrorIterations = 0;
|
|
5534
5536
|
consecutiveAbortIterations = 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-goal-list-loop-audit",
|
|
3
|
-
"version": "0.29.
|
|
3
|
+
"version": "0.29.4",
|
|
4
4
|
"description": "Goal. Loop. Audit. Done. \u2014 a pi-coding-agent extension that supervises long-running work, with isolated auditor on each completion. Beat bamboozling by design: the auditor runs in a fresh session with no extensions, no skills, no editor \u2014 only the read tools needed to verify your goal.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "dracon",
|