pi-goal-list-loop-audit 0.34.11 → 0.34.12
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.
|
@@ -202,7 +202,14 @@ export function buildStatusText(state: State, audit?: AuditDisplayProgress | nul
|
|
|
202
202
|
const kind = pauseKind(g);
|
|
203
203
|
if (kind === "decision") return `glla: ${paint(theme, "accent", "⏸ decision needed")}${heldSuffix}`;
|
|
204
204
|
if (kind === "error") return `glla: ${paint(theme, "error", `⏸ action needed — ${truncate(g.pauseReason ?? "", 30)}`)}${heldSuffix}`;
|
|
205
|
-
if (kind === "wait")
|
|
205
|
+
if (kind === "wait") {
|
|
206
|
+
// v0.34.12: live countdown (the UI ticker keeps rendering through a
|
|
207
|
+
// timed wait) — "resumes in 23m" beats a static clock time, and a
|
|
208
|
+
// passed resumeAt says "resuming…" instead of lying about the past.
|
|
209
|
+
const rms = g.pauseResumeAt ? Date.parse(g.pauseResumeAt) - now : Number.NaN;
|
|
210
|
+
const when = Number.isNaN(rms) ? "" : rms <= 0 ? " · resuming…" : ` · resumes in ${fmtElapsed(rms)}`;
|
|
211
|
+
return `glla: ${paint(theme, "dim", `⏳ waiting${when}`)}${heldSuffix}`;
|
|
212
|
+
}
|
|
206
213
|
const label = `paused ⏸ ${truncate(g.pauseReason ?? "", 40)}`;
|
|
207
214
|
return `glla: ${paint(theme, pauseIsError(g) ? "error" : "warning", label)}${heldSuffix}`;
|
|
208
215
|
}
|
package/extensions/loops/goal.ts
CHANGED
|
@@ -641,6 +641,14 @@ const ZOMBIE_RUN_ALERT_THROTTLE_MS = 10 * 60_000;
|
|
|
641
641
|
// last send; a landed turn — even a lazy text-only one — disarms it.
|
|
642
642
|
const CONTINUATION_UNANSWERED_MS = 150_000;
|
|
643
643
|
const CONTINUATION_UNANSWERED_THROTTLE_MS = 300_000;
|
|
644
|
+
// v0.34.12: eager-continuation settle delay. Hellhunter 2026-08-01 (post-
|
|
645
|
+
// restart): every turn cycle paid a 60s heartbeat tax because the eager
|
|
646
|
+
// continuation fires AT agent_end — exactly pi's turn-teardown blackhole
|
|
647
|
+
// window — so it vanished and the 60s heartbeat refire did the real work.
|
|
648
|
+
// Ledger showed the tell: goal_continuation_sent pairs + a refire per
|
|
649
|
+
// cycle. Sending 2.5s AFTER agent_end lets teardown settle; the send lands
|
|
650
|
+
// and the next turn starts immediately. 2.5s per turn beats 60s per turn.
|
|
651
|
+
const EAGER_CONTINUATION_SETTLE_MS = Number(process.env.GLLA_EAGER_SETTLE_MS ?? 2_500);
|
|
644
652
|
// v0.29.19: dead-turn caps (agent_end exemption path). 6 consecutive
|
|
645
653
|
// provider-error turns = a real outage, not bad luck — stop honestly.
|
|
646
654
|
// 3 consecutive user aborts = the user means it (user aborts mean STOP).
|
|
@@ -718,7 +726,9 @@ function startUITicker(): void {
|
|
|
718
726
|
if (uiTicker) return;
|
|
719
727
|
uiTicker = setInterval(() => {
|
|
720
728
|
const ctx = freshCtx();
|
|
721
|
-
|
|
729
|
+
// v0.34.12: keep ticking during a timed wait-pause too — the status
|
|
730
|
+
// line counts down to resumeAt live (pully field request 2026-08-01).
|
|
731
|
+
if (ctx && (isSupervising() || (state.goal?.status === "paused" && !!state.goal.pauseResumeAt))) refreshUI(ctx);
|
|
722
732
|
}, 1_000);
|
|
723
733
|
uiTicker.unref?.();
|
|
724
734
|
}
|
|
@@ -6711,7 +6721,8 @@ export default function (pi: ExtensionAPI): void {
|
|
|
6711
6721
|
// pause/cancel, the stall watchdog, the 5-consecutive-errors pause, or
|
|
6712
6722
|
// the token guard — never via an elapsed-time cutoff.
|
|
6713
6723
|
|
|
6714
|
-
|
|
6724
|
+
// v0.34.12: NOT immediately — agent_end is the blackhole boundary.
|
|
6725
|
+
scheduleContinuation(ctx, false, EAGER_CONTINUATION_SETTLE_MS);
|
|
6715
6726
|
});
|
|
6716
6727
|
|
|
6717
6728
|
pi.on("tool_call", (event: any) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-goal-list-loop-audit",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.12",
|
|
4
4
|
"description": "Mission control for autonomous pi: interview-drafted goals, an audited task queue, and forever-loops (metric, spec, project-audit) that run for hours. An isolated extension-less auditor re-verifies every completion with raw evidence; confirmed drafts, decision pauses and consent gates keep you in charge.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "dracon",
|