gsd-pi 2.35.0-dev.6179610 → 2.35.0-dev.67d0e02
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/dist/resources/extensions/gsd/commands.js +0 -6
- package/dist/resources/extensions/gsd/preferences.js +0 -12
- package/package.json +1 -1
- package/src/resources/extensions/gsd/commands.ts +0 -7
- package/src/resources/extensions/gsd/preferences.ts +1 -14
- package/dist/resources/extensions/gsd/commands-rate.js +0 -31
- package/src/resources/extensions/gsd/commands-rate.ts +0 -55
|
@@ -74,7 +74,6 @@ export function registerGSDCommand(pi) {
|
|
|
74
74
|
{ cmd: "triage", desc: "Manually trigger triage of pending captures" },
|
|
75
75
|
{ cmd: "dispatch", desc: "Dispatch a specific phase directly" },
|
|
76
76
|
{ cmd: "history", desc: "View execution history" },
|
|
77
|
-
{ cmd: "rate", desc: "Rate last unit's model tier (over/ok/under) — improves adaptive routing" },
|
|
78
77
|
{ cmd: "undo", desc: "Revert last completed unit" },
|
|
79
78
|
{ cmd: "skip", desc: "Prevent a unit from auto-mode dispatch" },
|
|
80
79
|
{ cmd: "export", desc: "Export milestone/slice results" },
|
|
@@ -514,11 +513,6 @@ export async function handleGSDCommand(args, ctx, pi) {
|
|
|
514
513
|
await handleUndo(trimmed.replace(/^undo\s*/, "").trim(), ctx, pi, projectRoot());
|
|
515
514
|
return;
|
|
516
515
|
}
|
|
517
|
-
if (trimmed === "rate" || trimmed.startsWith("rate ")) {
|
|
518
|
-
const { handleRate } = await import("./commands-rate.js");
|
|
519
|
-
await handleRate(trimmed.replace(/^rate\s*/, "").trim(), ctx, projectRoot());
|
|
520
|
-
return;
|
|
521
|
-
}
|
|
522
516
|
if (trimmed.startsWith("skip ")) {
|
|
523
517
|
await handleSkip(trimmed.replace(/^skip\s*/, "").trim(), ctx, projectRoot());
|
|
524
518
|
return;
|
|
@@ -15,7 +15,6 @@ import { join } from "node:path";
|
|
|
15
15
|
import { gsdRoot } from "./paths.js";
|
|
16
16
|
import { parse as parseYaml } from "yaml";
|
|
17
17
|
import { normalizeStringArray } from "../shared/mod.js";
|
|
18
|
-
import { resolveProfileDefaults as _resolveProfileDefaults } from "./preferences-models.js";
|
|
19
18
|
import { MODE_DEFAULTS, } from "./preferences-types.js";
|
|
20
19
|
import { validatePreferences } from "./preferences-validation.js";
|
|
21
20
|
import { formatSkillRef } from "./preferences-skills.js";
|
|
@@ -80,17 +79,6 @@ export function loadEffectiveGSDPreferences() {
|
|
|
80
79
|
...(mergedWarnings.length > 0 ? { warnings: mergedWarnings } : {}),
|
|
81
80
|
};
|
|
82
81
|
}
|
|
83
|
-
// Apply token-profile defaults as the lowest-priority layer so that
|
|
84
|
-
// `token_profile: budget` sets models and phase-skips automatically.
|
|
85
|
-
// Explicit user preferences always override profile defaults.
|
|
86
|
-
const profile = result.preferences.token_profile;
|
|
87
|
-
if (profile) {
|
|
88
|
-
const profileDefaults = _resolveProfileDefaults(profile);
|
|
89
|
-
result = {
|
|
90
|
-
...result,
|
|
91
|
-
preferences: mergePreferences(profileDefaults, result.preferences),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
82
|
// Apply mode defaults as the lowest-priority layer
|
|
95
83
|
if (result.preferences.mode) {
|
|
96
84
|
result = {
|
package/package.json
CHANGED
|
@@ -89,7 +89,6 @@ export function registerGSDCommand(pi: ExtensionAPI): void {
|
|
|
89
89
|
{ cmd: "triage", desc: "Manually trigger triage of pending captures" },
|
|
90
90
|
{ cmd: "dispatch", desc: "Dispatch a specific phase directly" },
|
|
91
91
|
{ cmd: "history", desc: "View execution history" },
|
|
92
|
-
{ cmd: "rate", desc: "Rate last unit's model tier (over/ok/under) — improves adaptive routing" },
|
|
93
92
|
{ cmd: "undo", desc: "Revert last completed unit" },
|
|
94
93
|
{ cmd: "skip", desc: "Prevent a unit from auto-mode dispatch" },
|
|
95
94
|
{ cmd: "export", desc: "Export milestone/slice results" },
|
|
@@ -567,12 +566,6 @@ export async function handleGSDCommand(
|
|
|
567
566
|
return;
|
|
568
567
|
}
|
|
569
568
|
|
|
570
|
-
if (trimmed === "rate" || trimmed.startsWith("rate ")) {
|
|
571
|
-
const { handleRate } = await import("./commands-rate.js");
|
|
572
|
-
await handleRate(trimmed.replace(/^rate\s*/, "").trim(), ctx, projectRoot());
|
|
573
|
-
return;
|
|
574
|
-
}
|
|
575
|
-
|
|
576
569
|
if (trimmed.startsWith("skip ")) {
|
|
577
570
|
await handleSkip(trimmed.replace(/^skip\s*/, "").trim(), ctx, projectRoot());
|
|
578
571
|
return;
|
|
@@ -15,10 +15,9 @@ import { homedir } from "node:os";
|
|
|
15
15
|
import { join } from "node:path";
|
|
16
16
|
import { gsdRoot } from "./paths.js";
|
|
17
17
|
import { parse as parseYaml } from "yaml";
|
|
18
|
-
import type { PostUnitHookConfig, PreDispatchHookConfig
|
|
18
|
+
import type { PostUnitHookConfig, PreDispatchHookConfig } from "./types.js";
|
|
19
19
|
import type { DynamicRoutingConfig } from "./model-router.js";
|
|
20
20
|
import { normalizeStringArray } from "../shared/mod.js";
|
|
21
|
-
import { resolveProfileDefaults as _resolveProfileDefaults } from "./preferences-models.js";
|
|
22
21
|
|
|
23
22
|
import {
|
|
24
23
|
MODE_DEFAULTS,
|
|
@@ -142,18 +141,6 @@ export function loadEffectiveGSDPreferences(): LoadedGSDPreferences | null {
|
|
|
142
141
|
};
|
|
143
142
|
}
|
|
144
143
|
|
|
145
|
-
// Apply token-profile defaults as the lowest-priority layer so that
|
|
146
|
-
// `token_profile: budget` sets models and phase-skips automatically.
|
|
147
|
-
// Explicit user preferences always override profile defaults.
|
|
148
|
-
const profile = result.preferences.token_profile as TokenProfile | undefined;
|
|
149
|
-
if (profile) {
|
|
150
|
-
const profileDefaults = _resolveProfileDefaults(profile);
|
|
151
|
-
result = {
|
|
152
|
-
...result,
|
|
153
|
-
preferences: mergePreferences(profileDefaults as GSDPreferences, result.preferences),
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
|
|
157
144
|
// Apply mode defaults as the lowest-priority layer
|
|
158
145
|
if (result.preferences.mode) {
|
|
159
146
|
result = {
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* /gsd rate — Submit feedback on the last unit's model tier assignment.
|
|
3
|
-
* Feeds into the adaptive routing history so future dispatches improve.
|
|
4
|
-
*/
|
|
5
|
-
import { loadLedgerFromDisk } from "./metrics.js";
|
|
6
|
-
import { recordFeedback, initRoutingHistory } from "./routing-history.js";
|
|
7
|
-
const VALID_RATINGS = new Set(["over", "under", "ok"]);
|
|
8
|
-
export async function handleRate(args, ctx, basePath) {
|
|
9
|
-
const rating = args.trim().toLowerCase();
|
|
10
|
-
if (!rating || !VALID_RATINGS.has(rating)) {
|
|
11
|
-
ctx.ui.notify("Usage: /gsd rate <over|ok|under>\n" +
|
|
12
|
-
" over — model was overpowered for that task (encourage cheaper)\n" +
|
|
13
|
-
" ok — model was appropriate\n" +
|
|
14
|
-
" under — model was too weak (encourage stronger)", "info");
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
const ledger = loadLedgerFromDisk(basePath);
|
|
18
|
-
if (!ledger || ledger.units.length === 0) {
|
|
19
|
-
ctx.ui.notify("No completed units found — nothing to rate.", "warning");
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
const lastUnit = ledger.units[ledger.units.length - 1];
|
|
23
|
-
const tier = lastUnit.tier;
|
|
24
|
-
if (!tier) {
|
|
25
|
-
ctx.ui.notify("Last unit has no tier data (dynamic routing was not active). Rating skipped.", "warning");
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
initRoutingHistory(basePath);
|
|
29
|
-
recordFeedback(lastUnit.type, lastUnit.id, tier, rating);
|
|
30
|
-
ctx.ui.notify(`Recorded "${rating}" for ${lastUnit.type}/${lastUnit.id} at tier ${tier}.`, "info");
|
|
31
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* /gsd rate — Submit feedback on the last unit's model tier assignment.
|
|
3
|
-
* Feeds into the adaptive routing history so future dispatches improve.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
7
|
-
import { loadLedgerFromDisk } from "./metrics.js";
|
|
8
|
-
import { recordFeedback, initRoutingHistory } from "./routing-history.js";
|
|
9
|
-
import type { ComplexityTier } from "./complexity-classifier.js";
|
|
10
|
-
|
|
11
|
-
const VALID_RATINGS = new Set(["over", "under", "ok"]);
|
|
12
|
-
|
|
13
|
-
export async function handleRate(
|
|
14
|
-
args: string,
|
|
15
|
-
ctx: ExtensionCommandContext,
|
|
16
|
-
basePath: string,
|
|
17
|
-
): Promise<void> {
|
|
18
|
-
const rating = args.trim().toLowerCase();
|
|
19
|
-
|
|
20
|
-
if (!rating || !VALID_RATINGS.has(rating)) {
|
|
21
|
-
ctx.ui.notify(
|
|
22
|
-
"Usage: /gsd rate <over|ok|under>\n" +
|
|
23
|
-
" over — model was overpowered for that task (encourage cheaper)\n" +
|
|
24
|
-
" ok — model was appropriate\n" +
|
|
25
|
-
" under — model was too weak (encourage stronger)",
|
|
26
|
-
"info",
|
|
27
|
-
);
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const ledger = loadLedgerFromDisk(basePath);
|
|
32
|
-
if (!ledger || ledger.units.length === 0) {
|
|
33
|
-
ctx.ui.notify("No completed units found — nothing to rate.", "warning");
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const lastUnit = ledger.units[ledger.units.length - 1];
|
|
38
|
-
const tier = lastUnit.tier as ComplexityTier | undefined;
|
|
39
|
-
|
|
40
|
-
if (!tier) {
|
|
41
|
-
ctx.ui.notify(
|
|
42
|
-
"Last unit has no tier data (dynamic routing was not active). Rating skipped.",
|
|
43
|
-
"warning",
|
|
44
|
-
);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
initRoutingHistory(basePath);
|
|
49
|
-
recordFeedback(lastUnit.type, lastUnit.id, tier, rating as "over" | "under" | "ok");
|
|
50
|
-
|
|
51
|
-
ctx.ui.notify(
|
|
52
|
-
`Recorded "${rating}" for ${lastUnit.type}/${lastUnit.id} at tier ${tier}.`,
|
|
53
|
-
"info",
|
|
54
|
-
);
|
|
55
|
-
}
|