pi-goal-list-loop-audit 0.27.3 → 0.27.5
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.
|
@@ -71,8 +71,13 @@ export interface Settings {
|
|
|
71
71
|
* its quota; "agent-default" restores upstream behavior. Applies to NEW
|
|
72
72
|
* sessions (pi-subagents registers agents at session start). */
|
|
73
73
|
/** v0.26.0: reviewer (post-completion follow-up enqueuer) config —
|
|
74
|
-
* project-scoped; see extensions/reviewer.ts DEFAULT_REVIEWER_CONFIG.
|
|
74
|
+
* project-scoped; see extensions/reviewer.ts DEFAULT_REVIEWER_CONFIG.
|
|
75
|
+
* v0.27.5: superseded by `postaudit` (same shape, terminology reflects
|
|
76
|
+
* the auditor-adjacent role). Both keys are read; `postaudit` wins
|
|
77
|
+
* when both are present. `reviewer` is kept for backwards compat. */
|
|
75
78
|
reviewer?: Record<string, unknown>;
|
|
79
|
+
/** v0.27.5: post-completion audit config. Same shape as `reviewer`. */
|
|
80
|
+
postaudit?: Record<string, unknown>;
|
|
76
81
|
subagentModelStrategy?: SubagentModelStrategy;
|
|
77
82
|
/** v0.24.6: per-agent-type model pin, e.g. { "Explore": "minimax/MiniMax-M3" }.
|
|
78
83
|
* Always wins over subagentModelStrategy — the managed override is written
|
|
@@ -140,6 +145,7 @@ export const SETTINGS_KEYS: Array<keyof Settings> = [
|
|
|
140
145
|
"stallEscalationRefires",
|
|
141
146
|
"stallShortWords",
|
|
142
147
|
"stallSimilarityThreshold",
|
|
148
|
+
"postaudit",
|
|
143
149
|
];
|
|
144
150
|
|
|
145
151
|
/** Where each effective setting comes from (for the /glla display). */
|
package/extensions/loops/goal.ts
CHANGED
|
@@ -683,7 +683,12 @@ function fireReviewer(
|
|
|
683
683
|
): void {
|
|
684
684
|
try {
|
|
685
685
|
const settings = loadSettings(ctx.cwd);
|
|
686
|
-
|
|
686
|
+
// v0.27.5: dual-read `reviewer` (legacy) and `postaudit` (new) settings
|
|
687
|
+
// keys. `postaudit` takes precedence when both are present — the
|
|
688
|
+
// existing settings file shape is preserved; the rename is purely
|
|
689
|
+
// vocabulary on the user-facing surface.
|
|
690
|
+
const reviewerBlock = (settings.postaudit ?? settings.reviewer) as Partial<ReviewerConfig> | undefined;
|
|
691
|
+
const config = resolveReviewerConfig(reviewerBlock);
|
|
687
692
|
if (opts.mode) config.mode = opts.mode;
|
|
688
693
|
const sources: Array<{ name: string; text: string }> = [];
|
|
689
694
|
try {
|
|
@@ -728,6 +733,19 @@ function fireReviewer(
|
|
|
728
733
|
if (!outcome.fired && outcome.suppressedReason && opts.manual) {
|
|
729
734
|
ctx.ui.notify(`Reviewer suppressed: ${outcome.suppressedReason}`, "info");
|
|
730
735
|
}
|
|
736
|
+
// v0.27.5: surface the silent review to interactive users. The internal
|
|
737
|
+
// runReviewer notify fires DURING the goal-completion handler, easy to
|
|
738
|
+
// miss because pi is busy transitioning state. The second notify
|
|
739
|
+
// arrives AFTER everything settles and points at the file directly.
|
|
740
|
+
// Skipped when manual=true (manual /review has its own UX already) and
|
|
741
|
+
// when the runner wasn't fired (suppressed / not applicable).
|
|
742
|
+
if (!opts.manual && outcome.fired && outcome.reportPath) {
|
|
743
|
+
const relPath = path.relative(ctx.cwd, outcome.reportPath) || outcome.reportPath;
|
|
744
|
+
ctx.ui.notify(
|
|
745
|
+
`↳ review written: ${relPath}${outcome.enqueued ? ` (${outcome.enqueued} enqueued to /list)` : ""}${outcome.proposed ? ` (${outcome.proposed} /goal proposed)` : ""}`,
|
|
746
|
+
"info",
|
|
747
|
+
);
|
|
748
|
+
}
|
|
731
749
|
} catch (err) {
|
|
732
750
|
ctx.ui.notify(`Reviewer failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`, "warning");
|
|
733
751
|
}
|
|
@@ -3216,6 +3234,13 @@ async function cmdSettings(args: string, ctx: ExtensionContext): Promise<void> {
|
|
|
3216
3234
|
await cmdReviewerSettings(ctx);
|
|
3217
3235
|
return;
|
|
3218
3236
|
}
|
|
3237
|
+
// v0.27.5: postaudit is the new vocabulary (the post-completion auditor).
|
|
3238
|
+
// Both keywords open the same config menu and resolve to the same settings
|
|
3239
|
+
// key — the legacy `reviewer` label is kept for backwards compatibility.
|
|
3240
|
+
if (/^postaudit\b/.test(trimmed)) {
|
|
3241
|
+
await cmdReviewerSettings(ctx);
|
|
3242
|
+
return;
|
|
3243
|
+
}
|
|
3219
3244
|
if (!trimmed) {
|
|
3220
3245
|
if (ctx.hasUI) {
|
|
3221
3246
|
await openSettingsUI(ctx);
|
|
@@ -3245,6 +3270,9 @@ async function cmdSettings(args: string, ctx: ExtensionContext): Promise<void> {
|
|
|
3245
3270
|
fmt("wedgeAlertMinutes", "wedgeAlert"),
|
|
3246
3271
|
fmt("stallShortWords", "stallShortWords"),
|
|
3247
3272
|
fmt("stallSimilarityThreshold", "stallSimilarityThreshold"),
|
|
3273
|
+
// v0.27.5: post-completion auditor config — read either the new
|
|
3274
|
+
// `postaudit` key or the legacy `reviewer` key (postaudit wins).
|
|
3275
|
+
`postaudit: ${JSON.stringify(loadSettings(ctx.cwd).postaudit ?? loadSettings(ctx.cwd).reviewer ?? {}) || '(unset — defaults)'}`,
|
|
3248
3276
|
// v0.25.6: effective per-type subagent model resolution.
|
|
3249
3277
|
...["Explore", "Plan", "general-purpose"].map(
|
|
3250
3278
|
(t) => `subagent ${t}: ${resolveEffectiveSubagentModel(t, loadSettings(ctx.cwd), (ctx.model as any)?.id ? `${(ctx.model as any).provider}/${(ctx.model as any).id}` : undefined)}`,
|
|
@@ -3529,10 +3557,21 @@ export default function (pi: ExtensionAPI): void {
|
|
|
3529
3557
|
// /loop — the metric loop (draft|start|status|stop)
|
|
3530
3558
|
// /glla — the settings UI (+ scriptable key=value)
|
|
3531
3559
|
// v0.22.5: subcommand autocomplete for the /-menu.
|
|
3560
|
+
// v0.27.4: pi's applyCompletion does NOT add a trailing space for argument
|
|
3561
|
+
// completions (it does for the top-level /goal itself). Without a trailing
|
|
3562
|
+
// space the user has to press Space before typing — and if they forget
|
|
3563
|
+
// they end up with `/goal startasdahlasf` (goal.ts:3545 area). Items whose
|
|
3564
|
+
// value ends in `=` (key=value pairs — the user types the value right
|
|
3565
|
+
// after the `=`) get no space; everything else gets a single trailing
|
|
3566
|
+
// space. `label` stays clean for the picker display.
|
|
3532
3567
|
const completions = (items: Array<[string, string]>) => (prefix: string) =>
|
|
3533
3568
|
items
|
|
3534
3569
|
.filter(([value]) => value.startsWith(prefix))
|
|
3535
|
-
.map(([value, description]) => ({
|
|
3570
|
+
.map(([value, description]) => ({
|
|
3571
|
+
value: value.endsWith("=") ? value : value + " ",
|
|
3572
|
+
label: value,
|
|
3573
|
+
description,
|
|
3574
|
+
}));
|
|
3536
3575
|
|
|
3537
3576
|
pi.registerCommand("goal", {
|
|
3538
3577
|
description: "Set/draft a goal, or /goal status|pause|resume|cancel|tweak <text>|archive|start <objective>. Objectives without a 'Done when:' clause are grilled into a contract first; include the clause or use /goal start to skip the interview and activate instantly.",
|
|
@@ -3565,7 +3604,8 @@ export default function (pi: ExtensionAPI): void {
|
|
|
3565
3604
|
["stats", "per-project ledger rollups: /glla stats [json|premature|project=<path>]"],
|
|
3566
3605
|
["audits", "audit-log browser: /glla audits [N|full] — recent verdicts from .pi-glla/audits.jsonl"],
|
|
3567
3606
|
["autoaccept=", "on: drafts activate without the Confirm dialog (unattended rigs)"],
|
|
3568
|
-
["reviewer", "reviewer config menu (post-completion follow-up enqueuer)"],
|
|
3607
|
+
["reviewer", "reviewer config menu (alias of postaudit — post-completion follow-up enqueuer)"],
|
|
3608
|
+
["postaudit", "post-completion audit config menu (the new name for /glla reviewer)"],
|
|
3569
3609
|
["project", "write a project override: /glla project key=value"],
|
|
3570
3610
|
]),
|
|
3571
3611
|
handler: settingsHandler,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-goal-list-loop-audit",
|
|
3
|
-
"version": "0.27.
|
|
3
|
+
"version": "0.27.5",
|
|
4
4
|
"description": "Goal. Loop. Audit. Done. — 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 — only the read tools needed to verify your goal.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "dracon",
|