pi-goal-list-loop-audit 0.34.0 → 0.34.2
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.
|
@@ -196,11 +196,14 @@ export function buildStatusText(state: State, audit?: AuditDisplayProgress | nul
|
|
|
196
196
|
// v0.28.22: the status line names the ACTIONABILITY, not the reason —
|
|
197
197
|
// "decision needed" / "action needed" / "waiting" tell you at a glance
|
|
198
198
|
// whether the session needs you. Legacy pauses keep the reason dump.
|
|
199
|
+
// v0.34.1: the policy word leaves the status line — the widget's head
|
|
200
|
+
// chip already names the type ("list item"), so "glla: list ⏸ …" doubled
|
|
201
|
+
// it. Status line = state/actionability only.
|
|
199
202
|
const kind = pauseKind(g);
|
|
200
|
-
if (kind === "decision") return `glla: ${
|
|
201
|
-
if (kind === "error") return `glla: ${
|
|
202
|
-
if (kind === "wait") return `glla: ${
|
|
203
|
-
const label =
|
|
203
|
+
if (kind === "decision") return `glla: ${paint(theme, "accent", "⏸ decision needed")}${heldSuffix}`;
|
|
204
|
+
if (kind === "error") return `glla: ${paint(theme, "error", `⏸ action needed — ${truncate(g.pauseReason ?? "", 30)}`)}${heldSuffix}`;
|
|
205
|
+
if (kind === "wait") return `glla: ${paint(theme, "dim", `⏳ waiting${g.pauseResumeAt ? ` · resumes ${shortClock(g.pauseResumeAt)}` : ""}`)}${heldSuffix}`;
|
|
206
|
+
const label = `paused ⏸ ${truncate(g.pauseReason ?? "", 40)}`;
|
|
204
207
|
return `glla: ${paint(theme, pauseIsError(g) ? "error" : "warning", label)}${heldSuffix}`;
|
|
205
208
|
}
|
|
206
209
|
if (g.status === "active") {
|
|
@@ -208,7 +211,7 @@ export function buildStatusText(state: State, audit?: AuditDisplayProgress | nul
|
|
|
208
211
|
// v0.29.11: the fresh session HOLDS it (hold-everything restore gate;
|
|
209
212
|
// autoresume=on resumes for you) — name the verb, don't promise auto.
|
|
210
213
|
if (g.interruptedAt) {
|
|
211
|
-
return `glla: ${
|
|
214
|
+
return `glla: ${paint(theme, "error", "⚠ interrupted — stale handle · /reload → /glla resume")}${heldSuffix}`;
|
|
212
215
|
}
|
|
213
216
|
// v0.24.7: list policy gets its own wording — a queue item is not a goal.
|
|
214
217
|
// v0.28.11 (U10): goal policy joins it — "list 29" read as a command
|
|
@@ -217,7 +220,10 @@ export function buildStatusText(state: State, audit?: AuditDisplayProgress | nul
|
|
|
217
220
|
const n = state.list?.length ?? 0;
|
|
218
221
|
const queue = n === 0 ? "" : ` · ${n} queued`;
|
|
219
222
|
const tasks = g.taskList ? ` ${countDone(g)}/${countTotal(g)} tasks ·` : "";
|
|
220
|
-
|
|
223
|
+
// v0.34.1: no policy word here either — "glla: list ●" duplicated the
|
|
224
|
+
// widget's "list item" chip (field screenshot 2026-08-01). The queue
|
|
225
|
+
// suffix still hints list context when the widget is scrolled away.
|
|
226
|
+
return `glla: ${paint(theme, "success", "●")}${tasks} ${fmtElapsed(now - Date.parse(g.createdAt))}${queue}${heldSuffix}`;
|
|
221
227
|
}
|
|
222
228
|
// complete/aborted → clear — but a held loop still shows.
|
|
223
229
|
if (held) return `glla: loop ${paint(theme, "warning", "⏸ held")} · iter ${held.iteration} — /loop to resume`;
|
package/extensions/loops/goal.ts
CHANGED
|
@@ -2023,7 +2023,14 @@ async function cmdResume(ctx: ExtensionContext): Promise<void> {
|
|
|
2023
2023
|
const usage = state.goal.usage
|
|
2024
2024
|
? { tokensUsed: state.goal.usage.tokensUsed, tokensLimit: freshLimit }
|
|
2025
2025
|
: undefined;
|
|
2026
|
-
|
|
2026
|
+
// v0.34.2: clear the stale-handle interrupt marker on a MANUAL resume too —
|
|
2027
|
+
// the only clear-site used to be the autoResume restore path, so with
|
|
2028
|
+
// autoresume=off a resumed goal kept the red "⚠ interrupted — stale handle"
|
|
2029
|
+
// status line forever while actively working (hegemon, 2026-08-01). The
|
|
2030
|
+
// marker's promise ("a fresh session will resume you") is fulfilled by a
|
|
2031
|
+
// manual resume exactly as by an automatic one. (staleEntry still re-marks
|
|
2032
|
+
// below — a resume inside a stale session is a NEW interrupt.)
|
|
2033
|
+
updateGoal({ status: "active", pauseReason: undefined, pauseSuggestedAction: undefined, pauseKind: undefined, pauseOptions: undefined, pauseRecommended: undefined, pauseResumeAt: undefined, interruptedAt: undefined, interruptedReason: undefined, ...(staleEntry ? { interruptedAt: nowIso(), interruptedReason: "resumed in a stale session" } : {}), ...(usage ? { usage } : {}) }, ctx);
|
|
2027
2034
|
if (staleEntry) return;
|
|
2028
2035
|
// v0.22.5: say what was resumed — with a non-empty list this also resumes
|
|
2029
2036
|
// the queue (the active goal IS the list's head item).
|
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.2",
|
|
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",
|