pi-goal-list-loop-audit 0.28.17 → 0.28.18
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.
|
@@ -118,6 +118,11 @@ export const DEFAULT_SETTINGS: Settings = {
|
|
|
118
118
|
};
|
|
119
119
|
|
|
120
120
|
export function globalSettingsPath(): string {
|
|
121
|
+
// v0.28.18: test/embedding override — the suite must be hermetic from
|
|
122
|
+
// the developer's real global settings file (a user setting autoAccept
|
|
123
|
+
// globally once made draft-Confirm tests auto-accept and fail).
|
|
124
|
+
const override = process.env.GLLA_GLOBAL_SETTINGS_PATH;
|
|
125
|
+
if (override) return override;
|
|
121
126
|
return path.join(os.homedir(), ".pi", "agent", "pi-goal-list-loop-audit.settings.json");
|
|
122
127
|
}
|
|
123
128
|
|
|
@@ -337,8 +337,10 @@ export function buildSettingsRows(
|
|
|
337
337
|
// TUI table component
|
|
338
338
|
// =================================================================
|
|
339
339
|
|
|
340
|
-
/**
|
|
341
|
-
const
|
|
340
|
+
/** Column separator (v0.28.18: box-drawing — the menu reads as a table). */
|
|
341
|
+
const COL_SEP = " │ ";
|
|
342
|
+
/** Header-rule junction matching COL_SEP's visible width. */
|
|
343
|
+
const COL_RULE_SEP = "─┼─";
|
|
342
344
|
|
|
343
345
|
/** Maximum width for each fixed column before truncation kicks in. */
|
|
344
346
|
const MAX_KEY_W = 32;
|
|
@@ -450,15 +452,20 @@ export class SettingsMenuComponent implements Component {
|
|
|
450
452
|
let keyW = visibleWidth(this.theme.bold("KEY"));
|
|
451
453
|
let valueW = visibleWidth(this.theme.bold("VALUE"));
|
|
452
454
|
let sourceW = visibleWidth(this.theme.bold("SOURCE"));
|
|
453
|
-
|
|
454
|
-
|
|
455
|
+
// v0.28.18: widths are computed across ALL sections (not just the
|
|
456
|
+
// active one) so the grid does NOT reflow on tab switch — a table's
|
|
457
|
+
// columns stay put. The 2-char selection prefix ("▶ "/" ") counts
|
|
458
|
+
// toward the KEY column (before, rows overflowed keyW by 2 and the
|
|
459
|
+
// whole VALUE column sat 2 chars right of the header's VALUE).
|
|
460
|
+
for (const r of this.rows) {
|
|
461
|
+
if (visibleWidth(r.label) + 2 > keyW) keyW = visibleWidth(r.label) + 2;
|
|
455
462
|
if (visibleWidth(r.valueText) > valueW) valueW = visibleWidth(r.valueText);
|
|
456
463
|
if (visibleWidth(r.sourceText) > sourceW) sourceW = visibleWidth(r.sourceText);
|
|
457
464
|
}
|
|
458
465
|
keyW = Math.min(keyW, MAX_KEY_W);
|
|
459
466
|
valueW = Math.min(valueW, MAX_VALUE_W);
|
|
460
467
|
sourceW = Math.min(sourceW, MAX_SOURCE_W);
|
|
461
|
-
const descW = Math.max(MIN_DESC_W, width - keyW - valueW - sourceW - 3 *
|
|
468
|
+
const descW = Math.max(MIN_DESC_W, width - keyW - valueW - sourceW - 3 * visibleWidth(COL_SEP));
|
|
462
469
|
return { keyW, valueW, sourceW, descW };
|
|
463
470
|
}
|
|
464
471
|
|
|
@@ -469,17 +476,19 @@ export class SettingsMenuComponent implements Component {
|
|
|
469
476
|
|
|
470
477
|
private renderBody(width: number): string[] {
|
|
471
478
|
const { keyW, valueW, sourceW, descW } = this.widths(width);
|
|
472
|
-
const
|
|
479
|
+
const sep = this.theme.fg("dim", COL_SEP);
|
|
473
480
|
|
|
474
481
|
const lines: string[] = [];
|
|
475
482
|
|
|
476
483
|
lines.push(this.theme.fg("accent", this.theme.bold(this.title)));
|
|
477
484
|
|
|
485
|
+
// v0.28.18: EVERY tab is bracketed (active = accent, inactive = dim) —
|
|
486
|
+
// bare words read as floating text, not tabs.
|
|
478
487
|
lines.push(
|
|
479
488
|
SETTINGS_SECTIONS.map((s, i) =>
|
|
480
489
|
i === this.activeSectionIdx
|
|
481
490
|
? this.theme.fg("accent", `[${s.label}]`)
|
|
482
|
-
: this.theme.fg("dim", s.label),
|
|
491
|
+
: this.theme.fg("dim", `[${s.label}]`),
|
|
483
492
|
).join(" "),
|
|
484
493
|
);
|
|
485
494
|
|
|
@@ -489,7 +498,14 @@ export class SettingsMenuComponent implements Component {
|
|
|
489
498
|
this.padEnd(this.theme.bold("VALUE"), valueW),
|
|
490
499
|
this.padEnd(this.theme.bold("SOURCE"), sourceW),
|
|
491
500
|
this.theme.bold("DESCRIPTION"),
|
|
492
|
-
].join(
|
|
501
|
+
].join(sep),
|
|
502
|
+
);
|
|
503
|
+
// Header rule — the grid line that makes it read as a table.
|
|
504
|
+
lines.push(
|
|
505
|
+
this.theme.fg(
|
|
506
|
+
"dim",
|
|
507
|
+
["─".repeat(keyW), "─".repeat(valueW), "─".repeat(sourceW), "─".repeat(descW)].join(COL_RULE_SEP),
|
|
508
|
+
),
|
|
493
509
|
);
|
|
494
510
|
|
|
495
511
|
const vs = this.visibleRows();
|
|
@@ -499,12 +515,18 @@ export class SettingsMenuComponent implements Component {
|
|
|
499
515
|
vs.forEach((r, i) => {
|
|
500
516
|
const selected = i === this.selectedIdx;
|
|
501
517
|
const prefix = selected ? "▶ " : " ";
|
|
518
|
+
// v0.28.18: KEY (incl. prefix) and VALUE are truncated to their
|
|
519
|
+
// column — before, an over-long VALUE (e.g. the subagent effective-
|
|
520
|
+
// resolution composite) overflowed and shoved SOURCE/DESCRIPTION
|
|
521
|
+
// right on that row only, breaking the grid.
|
|
502
522
|
const row = [
|
|
503
|
-
this.padEnd(prefix + r.label, keyW),
|
|
504
|
-
this.padEnd(r.valueText, valueW),
|
|
505
|
-
this.padEnd(r.sourceText, sourceW),
|
|
523
|
+
this.padEnd(truncateToWidth(prefix + r.label, keyW, "…"), keyW),
|
|
524
|
+
this.padEnd(truncateToWidth(r.valueText, valueW, "…"), valueW),
|
|
525
|
+
this.padEnd(truncateToWidth(r.sourceText, sourceW, "…"), sourceW),
|
|
506
526
|
truncateToWidth(r.description, descW, "…"),
|
|
507
|
-
|
|
527
|
+
// Selected row: plain separators — the whole row gets one accent
|
|
528
|
+
// wrap; a nested dim separator's reset code would end it early.
|
|
529
|
+
].join(selected ? COL_SEP : sep);
|
|
508
530
|
lines.push(selected ? this.theme.fg("accent", row) : row);
|
|
509
531
|
});
|
|
510
532
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-goal-list-loop-audit",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.18",
|
|
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",
|