pi-goal-list-loop-audit 0.38.1 → 0.38.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.38.3 — truncate picker/settings titles to terminal width (PR #41) (2026-09-02)
4
+
5
+ ### Fixed
6
+ `Rendered line N exceeds terminal width` crash when opening `Main/Auditor fallback models` (and `ModelPicker` / `SettingsMenu`) — long help titles now truncated with `truncateToWidth(…, "…")` to the available width, matching existing picker-row truncation. Prevents `pi` TUI crash that made the `glla: [LIVE]` widget disappear between audit/loop iterations and after `page.reload()`/`/reload` (Next item `audit ended between loops, and the ui disappeared` / Screenshot_20260902_121313). Regression test `multi-model-picker: render truncates a long title to the terminal width` pins 140-col rendering.
7
+
8
+ ## 0.38.2 — thinking selected with model, remove standalone rows (2026-09-02)
9
+
10
+ ### Changed
11
+ `Drafter thinking` and `Auditor thinking` standalone rows removed from `/glla` — thinking is now selected **with** the model pick (the existing `Drafter agent` / `Auditor agent` flows already prompt for thinking immediately after the model, and that ladder is model-aware via `auditorThinkingLevels`). Main had no standalone thinking row; Drafter/Auditor now match it. Stored `drafterThinkingLevel` / `auditorThinkingLevel` keys remain read for fallback-chain rendering (`modelThinkingText`) and for the model-pick ladder, but there is no separate editor — re-pick the model to change thinking. Prevents stale thinking selection and the "Main has no selector, others do" inconsistency.
12
+
3
13
  ## 0.38.1 — drafter/auditor fallback parity with Main (2026-09-02)
4
14
 
5
15
  ### Fixed
package/docs/INDEX.md CHANGED
@@ -18,7 +18,7 @@ For shipped docs, the relevant entry points are:
18
18
  failback; v0.35.9 hardened cross-version npm tarball checks; v0.35.10
19
19
  handles multi-entry npm dry-run reports; v0.35.11 accepts both npm report
20
20
  shapes; v0.35.12 supports npm 12's keyed pack reports; v0.35.13 fixes stale-API recovery loops.
21
- v0.35.14–v0.38.1 continue through the supervisor freeze (`/glla pause`),
21
+ v0.35.14–v0.38.3 continue through the supervisor freeze (`/glla pause`),
22
22
  load hold, auditor picker parity, Windows launch fix, zombie-watchdog
23
23
  subagent carve-out, due-wait backstop, the `/glla agents` visibility panel,
24
24
  durable state-root selection, blank-until-resume auditor context, frozen
@@ -1187,40 +1187,6 @@ export async function handleSettingChoice(id: string, ctx: ExtensionContext): Pr
1187
1187
  );
1188
1188
  return;
1189
1189
  }
1190
- case "drafterThinkingLevel": {
1191
- const settings = loadSettings(ctx.cwd);
1192
- const pickedModel = settings.drafterModel
1193
- ? resolvePickedModel(ctx, { kind: "ref", ref: settings.drafterModel })
1194
- : (ctx.model as any);
1195
- const levels = auditorThinkingLevels(pickedModel);
1196
- if (levels.length <= 1) {
1197
- ctx.ui.notify(
1198
- `Drafter agent ${pickedModel ? `${pickedModel.provider}/${pickedModel.id}` : "(session)"} exposes no thinking levels — drafting runs with thinking off.`,
1199
- "info",
1200
- );
1201
- return;
1202
- }
1203
- const preferred = settings.drafterThinkingLevel ?? ctx.thinkingLevel ?? "high";
1204
- const thinking = await ctx.ui.select(
1205
- "Drafter thinking — TEMPORARY DRAFTING AGENT ONLY (your session thinking is restored afterward)",
1206
- drafterThinkingChoiceOptions(
1207
- levels,
1208
- levels.includes(preferred) ? preferred : levels.includes("high") ? "high" : levels[levels.length - 1],
1209
- settings.drafterThinkingLevel === undefined,
1210
- ),
1211
- );
1212
- if (thinking) {
1213
- if (thinking.startsWith("session —")) {
1214
- saveSettings("global", ctx.cwd, { drafterThinkingLevel: undefined });
1215
- ctx.ui.notify("Drafter thinking: inherited from the session.", "info");
1216
- } else {
1217
- const level = thinking.split(" ")[0] as ConfiguredThinkingLevel;
1218
- saveSettings("global", ctx.cwd, { drafterThinkingLevel: level });
1219
- ctx.ui.notify(`Drafter thinking: ${level}.`, "info");
1220
- }
1221
- }
1222
- return;
1223
- }
1224
1190
  case "drafterModelFallbacks": {
1225
1191
  const global = loadGlobalSettings();
1226
1192
  const current = normalizeMainModelFallbackRefs(global.drafterModelFallbacks);
@@ -1316,30 +1282,6 @@ export async function handleSettingChoice(id: string, ctx: ExtensionContext): Pr
1316
1282
  ctx.ui.notify(`Auditor model: ${pick.kind === "session" ? "session model (override cleared)" : pick.ref}${t ? ` · thinking ${t.split(" ")[0]}` : ""}`, "info");
1317
1283
  return;
1318
1284
  }
1319
- case "auditorThinkingLevel": {
1320
- // v0.34.127: standalone path — the v0.31.4 comment claimed "/glla
1321
- // thinking=" is the direct path, but no such action ever existed; the
1322
- // ONLY way to change the level was re-picking the auditor model. The
1323
- // Auditor thinking row fixes that with the same ladder + dialog the
1324
- // model flow uses.
1325
- const curThinking = loadSettings(ctx.cwd).auditorThinkingLevel;
1326
- const inheritedThinking = ctx.thinkingLevel ?? "max";
1327
- const resolved = resolveAuditorModel(ctx);
1328
- const levels = auditorThinkingLevels(resolved.model);
1329
- if (levels.length <= 1) {
1330
- ctx.ui.notify(
1331
- `Auditor model ${resolved.model ? `${resolved.model.provider}/${resolved.model.id}` : "(session)"} exposes no thinking levels — the auditor runs with thinking off.`,
1332
- "info",
1333
- );
1334
- return;
1335
- }
1336
- const t = await ctx.ui.select(
1337
- "Auditor thinking — DETACHED auditor worker ONLY (your session model's thinking is untouched)",
1338
- levels.map((lv) => `${lv} — ${THINKING_DESCR[lv] ?? ""}${lv === (curThinking ?? inheritedThinking) ? " (current)" : ""}`),
1339
- );
1340
- if (t) saveSettings("global", ctx.cwd, { auditorThinkingLevel: t.split(" ")[0] as Settings["auditorThinkingLevel"] });
1341
- return;
1342
- }
1343
1285
  case "auditorModelFallbacks": {
1344
1286
  const settings = loadGlobalSettings();
1345
1287
  const current = normalizeMainModelFallbackRefs(settings.auditorModelFallbacks);
@@ -210,7 +210,7 @@ export class ModelPickerComponent {
210
210
  render(width: number): string[] {
211
211
  const w = Math.max(20, width - 2);
212
212
  const lines: string[] = [];
213
- lines.push(this.theme.fg("accent", this.theme.bold(this.title)));
213
+ lines.push(this.theme.fg("accent", this.theme.bold(truncateToWidth(this.title, w, "…"))));
214
214
  lines.push("");
215
215
  const searchLine = `search: ${this.query}`;
216
216
  lines.push(this.theme.fg("muted", truncateToWidth(searchLine, w, "…") + "▏"));
@@ -322,7 +322,7 @@ export class MultiModelPickerComponent {
322
322
  render(width: number): string[] {
323
323
  const w = Math.max(20, width - 2);
324
324
  const lines: string[] = [];
325
- lines.push(this.theme.fg("accent", this.theme.bold(this.title)));
325
+ lines.push(this.theme.fg("accent", this.theme.bold(truncateToWidth(this.title, w, "…"))));
326
326
  if (this.unorderedSet) {
327
327
  lines.push(this.theme.fg("muted", "selected extensions are loaded by the auditor; order does not matter:"));
328
328
  } else if (this.currentRef) {
@@ -311,14 +311,6 @@ export function buildSettingsRows(
311
311
  sourceText: src("drafterModel"),
312
312
  description: "temporary agent/model used only during /goal, /list, and /loop drafting; after confirmation or interruption the session agent is restored",
313
313
  },
314
- {
315
- id: "drafterThinkingLevel",
316
- section: "drafter",
317
- label: "Drafter thinking",
318
- valueText: settings.drafterThinkingLevel ? settings.drafterThinkingLevel : `inherit ${sessionThinking}`,
319
- sourceText: src("drafterThinkingLevel"),
320
- description: "requested drafting-agent reasoning level — the same request follows the drafter fallback chain and Pi clamps it per model; unset inherits the session level",
321
- },
322
314
  {
323
315
  id: "drafterModelFallbacks",
324
316
  section: "drafter",
@@ -358,14 +350,6 @@ export function buildSettingsRows(
358
350
  sourceText: src("auditorModel"),
359
351
  description: "provider/model override for the isolated auditor agent — the fallback chain below runs after this primary; its thinking defaults to the parent session",
360
352
  },
361
- {
362
- id: "auditorThinkingLevel",
363
- section: "auditor",
364
- label: "Auditor thinking",
365
- valueText: settings.auditorThinkingLevel ?? sessionThinking,
366
- sourceText: src("auditorThinkingLevel"),
367
- description: "DETACHED auditor worker's reasoning level — unset inherits the parent session dial (including max); an explicit value overrides it",
368
- },
369
353
  {
370
354
  id: "auditorModelFallbacks",
371
355
  section: "auditor",
@@ -778,7 +762,7 @@ export class SettingsMenuComponent implements Component {
778
762
 
779
763
  const lines: string[] = [];
780
764
 
781
- lines.push(this.theme.fg("accent", this.theme.bold(this.title)));
765
+ lines.push(this.theme.fg("accent", this.theme.bold(truncateToWidth(this.title, Math.max(20, width - 2), "…"))));
782
766
 
783
767
  // v0.28.19: color-only tabs (user call: "dropping the brackets") —
784
768
  // active = accent + bold, inactive = dim. No bracket chrome.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-goal-list-loop-audit",
3
- "version": "0.38.1",
3
+ "version": "0.38.3",
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. A detached extension-less auditor process re-verifies every completion with raw evidence without holding the main pi turn; confirmed drafts, decision pauses and consent gates keep you in charge.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "author": "dracon",