@entelligentsia/forgecli 0.8.4 → 0.9.0
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 +53 -0
- package/dist/bin/argv.d.ts +2 -2
- package/dist/bin/argv.js +17 -0
- package/dist/bin/argv.js.map +1 -1
- package/dist/bin/config.d.ts +69 -0
- package/dist/bin/config.js +315 -0
- package/dist/bin/config.js.map +1 -0
- package/dist/bin/doctor.d.ts +1 -0
- package/dist/bin/doctor.js +12 -0
- package/dist/bin/doctor.js.map +1 -1
- package/dist/bin/forge.js +7 -0
- package/dist/bin/forge.js.map +1 -1
- package/dist/extensions/forgecli/config-command.d.ts +8 -0
- package/dist/extensions/forgecli/config-command.js +66 -0
- package/dist/extensions/forgecli/config-command.js.map +1 -0
- package/dist/extensions/forgecli/config-layer.d.ts +38 -0
- package/dist/extensions/forgecli/config-layer.js +68 -0
- package/dist/extensions/forgecli/config-layer.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/component.d.ts +35 -0
- package/dist/extensions/forgecli/config-tui/component.js +236 -0
- package/dist/extensions/forgecli/config-tui/component.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/handler.d.ts +40 -0
- package/dist/extensions/forgecli/config-tui/handler.js +240 -0
- package/dist/extensions/forgecli/config-tui/handler.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/index.d.ts +5 -0
- package/dist/extensions/forgecli/config-tui/index.js +5 -0
- package/dist/extensions/forgecli/config-tui/index.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/keys.d.ts +26 -0
- package/dist/extensions/forgecli/config-tui/keys.js +33 -0
- package/dist/extensions/forgecli/config-tui/keys.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/plugin-config-reader.d.ts +23 -0
- package/dist/extensions/forgecli/config-tui/plugin-config-reader.js +58 -0
- package/dist/extensions/forgecli/config-tui/plugin-config-reader.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/advanced-menu.d.ts +7 -0
- package/dist/extensions/forgecli/config-tui/screens/advanced-menu.js +83 -0
- package/dist/extensions/forgecli/config-tui/screens/advanced-menu.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/confirm-quit.d.ts +11 -0
- package/dist/extensions/forgecli/config-tui/screens/confirm-quit.js +54 -0
- package/dist/extensions/forgecli/config-tui/screens/confirm-quit.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/override-editor.d.ts +11 -0
- package/dist/extensions/forgecli/config-tui/screens/override-editor.js +233 -0
- package/dist/extensions/forgecli/config-tui/screens/override-editor.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.d.ts +7 -0
- package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js +91 -0
- package/dist/extensions/forgecli/config-tui/screens/overrides-list-phases.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/overrides-list.d.ts +7 -0
- package/dist/extensions/forgecli/config-tui/screens/overrides-list.js +71 -0
- package/dist/extensions/forgecli/config-tui/screens/overrides-list.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/persona-editor.d.ts +10 -0
- package/dist/extensions/forgecli/config-tui/screens/persona-editor.js +182 -0
- package/dist/extensions/forgecli/config-tui/screens/persona-editor.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/persona-picker.d.ts +7 -0
- package/dist/extensions/forgecli/config-tui/screens/persona-picker.js +76 -0
- package/dist/extensions/forgecli/config-tui/screens/persona-picker.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/personas-list.d.ts +7 -0
- package/dist/extensions/forgecli/config-tui/screens/personas-list.js +98 -0
- package/dist/extensions/forgecli/config-tui/screens/personas-list.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/shared.d.ts +29 -0
- package/dist/extensions/forgecli/config-tui/screens/shared.js +100 -0
- package/dist/extensions/forgecli/config-tui/screens/shared.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/show-resolved.d.ts +23 -0
- package/dist/extensions/forgecli/config-tui/screens/show-resolved.js +128 -0
- package/dist/extensions/forgecli/config-tui/screens/show-resolved.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/tier-menu.d.ts +7 -0
- package/dist/extensions/forgecli/config-tui/screens/tier-menu.js +135 -0
- package/dist/extensions/forgecli/config-tui/screens/tier-menu.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/tier-picker.d.ts +9 -0
- package/dist/extensions/forgecli/config-tui/screens/tier-picker.js +122 -0
- package/dist/extensions/forgecli/config-tui/screens/tier-picker.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens/types.d.ts +24 -0
- package/dist/extensions/forgecli/config-tui/screens/types.js +5 -0
- package/dist/extensions/forgecli/config-tui/screens/types.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/screens.d.ts +24 -0
- package/dist/extensions/forgecli/config-tui/screens.js +78 -0
- package/dist/extensions/forgecli/config-tui/screens.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state/buffer.d.ts +11 -0
- package/dist/extensions/forgecli/config-tui/state/buffer.js +91 -0
- package/dist/extensions/forgecli/config-tui/state/buffer.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state/constants.d.ts +4 -0
- package/dist/extensions/forgecli/config-tui/state/constants.js +14 -0
- package/dist/extensions/forgecli/config-tui/state/constants.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state/index.d.ts +6 -0
- package/dist/extensions/forgecli/config-tui/state/index.js +9 -0
- package/dist/extensions/forgecli/config-tui/state/index.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state/init.d.ts +2 -0
- package/dist/extensions/forgecli/config-tui/state/init.js +30 -0
- package/dist/extensions/forgecli/config-tui/state/init.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state/model.d.ts +192 -0
- package/dist/extensions/forgecli/config-tui/state/model.js +4 -0
- package/dist/extensions/forgecli/config-tui/state/model.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state/reducer.d.ts +2 -0
- package/dist/extensions/forgecli/config-tui/state/reducer.js +212 -0
- package/dist/extensions/forgecli/config-tui/state/reducer.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state/selectors.d.ts +91 -0
- package/dist/extensions/forgecli/config-tui/state/selectors.js +231 -0
- package/dist/extensions/forgecli/config-tui/state/selectors.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/state.d.ts +6 -0
- package/dist/extensions/forgecli/config-tui/state.js +11 -0
- package/dist/extensions/forgecli/config-tui/state.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/theme.d.ts +37 -0
- package/dist/extensions/forgecli/config-tui/theme.js +88 -0
- package/dist/extensions/forgecli/config-tui/theme.js.map +1 -0
- package/dist/extensions/forgecli/config-tui/tier-meta.d.ts +28 -0
- package/dist/extensions/forgecli/config-tui/tier-meta.js +69 -0
- package/dist/extensions/forgecli/config-tui/tier-meta.js.map +1 -0
- package/dist/extensions/forgecli/config-writer.d.ts +16 -0
- package/dist/extensions/forgecli/config-writer.js +63 -0
- package/dist/extensions/forgecli/config-writer.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.js +85 -1
- package/dist/extensions/forgecli/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/forge-cli-schema.json +54 -0
- package/dist/extensions/forgecli/forge-commands.js +3 -8
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +13 -0
- package/dist/extensions/forgecli/forge-subagent.js +19 -0
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/index.js +16 -0
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/input-router.d.ts +33 -0
- package/dist/extensions/forgecli/input-router.js +133 -0
- package/dist/extensions/forgecli/input-router.js.map +1 -0
- package/dist/extensions/forgecli/model-resolver.d.ts +32 -0
- package/dist/extensions/forgecli/model-resolver.js +65 -0
- package/dist/extensions/forgecli/model-resolver.js.map +1 -0
- package/dist/extensions/forgecli/model-validator.d.ts +29 -0
- package/dist/extensions/forgecli/model-validator.js +107 -0
- package/dist/extensions/forgecli/model-validator.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.js +59 -0
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.js +93 -1
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/thread-switcher.js +5 -2
- package/dist/extensions/forgecli/thread-switcher.js.map +1 -1
- package/dist/extensions/forgecli/whats-new-widget.js +5 -2
- package/dist/extensions/forgecli/whats-new-widget.js.map +1 -1
- package/package.json +11 -3
- package/dist/extensions/forgecli/review-command.d.ts +0 -2
- package/dist/extensions/forgecli/review-command.js +0 -184
- package/dist/extensions/forgecli/review-command.js.map +0 -1
- package/dist/forge-payload/.tools/banners.cjs +0 -435
- package/dist/forge-payload/.tools/build-context-pack.cjs +0 -290
- package/dist/forge-payload/.tools/build-init-context.cjs +0 -322
- package/dist/forge-payload/.tools/build-overlay.cjs +0 -326
- package/dist/forge-payload/.tools/build-persona-pack.cjs +0 -226
- package/dist/forge-payload/.tools/collate.cjs +0 -1041
- package/dist/forge-payload/.tools/generation-manifest.cjs +0 -311
- package/dist/forge-payload/.tools/lib/forge-root.cjs +0 -59
- package/dist/forge-payload/.tools/lib/paths.cjs +0 -29
- package/dist/forge-payload/.tools/lib/pricing.cjs +0 -165
- package/dist/forge-payload/.tools/lib/project-root.cjs +0 -32
- package/dist/forge-payload/.tools/lib/result.js +0 -40
- package/dist/forge-payload/.tools/lib/store-facade.cjs +0 -162
- package/dist/forge-payload/.tools/lib/store-nlp.cjs +0 -250
- package/dist/forge-payload/.tools/lib/store-query-exec.cjs +0 -272
- package/dist/forge-payload/.tools/lib/validate.js +0 -141
- package/dist/forge-payload/.tools/manage-config.cjs +0 -340
- package/dist/forge-payload/.tools/manage-versions.cjs +0 -365
- package/dist/forge-payload/.tools/package.json +0 -3
- package/dist/forge-payload/.tools/parse-gates.cjs +0 -151
- package/dist/forge-payload/.tools/parse-verdict.cjs +0 -67
- package/dist/forge-payload/.tools/preflight-gate.cjs +0 -350
- package/dist/forge-payload/.tools/prompts/sprint-plan-prompt.md +0 -70
- package/dist/forge-payload/.tools/schemas/task-list.schema.json +0 -53
- package/dist/forge-payload/.tools/seed-store.cjs +0 -237
- package/dist/forge-payload/.tools/store-cli.cjs +0 -1226
- package/dist/forge-payload/.tools/store-query.cjs +0 -319
- package/dist/forge-payload/.tools/store.cjs +0 -315
- package/dist/forge-payload/.tools/substitute-placeholders.cjs +0 -625
- package/dist/forge-payload/.tools/validate-store.cjs +0 -593
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type RouterResult = {
|
|
2
|
+
consume?: boolean;
|
|
3
|
+
data?: string;
|
|
4
|
+
} | undefined;
|
|
5
|
+
export type RouterListener = (data: string) => RouterResult;
|
|
6
|
+
export interface RegisterOptions {
|
|
7
|
+
/** Stable name for debugging and unsubscription tracking. */
|
|
8
|
+
name: string;
|
|
9
|
+
/** When true, this listener is bypassed while any overlay is active.
|
|
10
|
+
* Use for keys that "activate" a widget (e.g. ↓ to open a strip) — the
|
|
11
|
+
* overlay needs the same key for navigation. Default: false. */
|
|
12
|
+
skipWhenOverlayActive?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare class ForgeInputRouter {
|
|
15
|
+
private listeners;
|
|
16
|
+
private overlayDepth;
|
|
17
|
+
register(listener: RouterListener, opts: RegisterOptions): () => void;
|
|
18
|
+
pushOverlay(): void;
|
|
19
|
+
popOverlay(): void;
|
|
20
|
+
isOverlayActive(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Mirrors pi's listener-chain semantics (tui.ts:544-560):
|
|
23
|
+
* - Each listener may return { consume: true } to stop dispatch.
|
|
24
|
+
* - Each listener may return { data: rewritten } to alter the value the
|
|
25
|
+
* next listener (and ultimately the focused overlay) sees.
|
|
26
|
+
* - Listeners flagged skipWhenOverlayActive=true are silently bypassed
|
|
27
|
+
* whenever overlayDepth > 0.
|
|
28
|
+
*/
|
|
29
|
+
dispatch(data: string): RouterResult;
|
|
30
|
+
}
|
|
31
|
+
export declare function getInputRouter(): ForgeInputRouter;
|
|
32
|
+
/** Test helper — replace the singleton with a fresh router. */
|
|
33
|
+
export declare function __resetInputRouterForTesting(): void;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// Centralised onTerminalInput dispatch for forge-cli.
|
|
2
|
+
//
|
|
3
|
+
// Plan 16 Slice 4c. Pi-mono's `ctx.ui.onTerminalInput` lets any extension hook
|
|
4
|
+
// raw stdin, with the first consumer winning. Pi runs listeners BEFORE
|
|
5
|
+
// routing to the focused overlay (pi-mono/packages/tui/src/tui.ts:544-560).
|
|
6
|
+
// That made forge-cli's two existing arrow-activator listeners
|
|
7
|
+
// (thread-switcher, whats-new-widget) silently eat ↑/↓ when the config TUI was
|
|
8
|
+
// mounted as an overlay.
|
|
9
|
+
//
|
|
10
|
+
// This router gives forge-cli a single pi listener whose dispatch is
|
|
11
|
+
// overlay-aware: listeners flagged `skipWhenOverlayActive: true` are bypassed
|
|
12
|
+
// whenever an overlay has been registered via `pushOverlay()`. Other listeners
|
|
13
|
+
// (critical hotkeys, theme switchers, etc.) still run.
|
|
14
|
+
//
|
|
15
|
+
// Wiring:
|
|
16
|
+
// 1. index.ts session_start: `ctx.ui.onTerminalInput((d) => router.dispatch(d))`.
|
|
17
|
+
// 2. Each consumer: `router.register(listener, { name, skipWhenOverlayActive })`.
|
|
18
|
+
// 3. Each overlay mounter: `router.pushOverlay()` before ctx.ui.custom,
|
|
19
|
+
// `popOverlay()` in a finally.
|
|
20
|
+
//
|
|
21
|
+
// Debug logging (when FORGE_DEBUG_INPUT=1):
|
|
22
|
+
// Each dispatch + push/pop is logged with timestamp + listener name +
|
|
23
|
+
// overlay depth + raw byte sequence (hex-escaped). Default target:
|
|
24
|
+
// /tmp/forge-input-router.log. Override with FORGE_DEBUG_INPUT_LOG=<path>.
|
|
25
|
+
// Logging goes through fs.appendFileSync — synchronous so events are
|
|
26
|
+
// captured even when the process crashes mid-render.
|
|
27
|
+
import * as fs from "node:fs";
|
|
28
|
+
function debugEnabled() {
|
|
29
|
+
return process.env.FORGE_DEBUG_INPUT === "1";
|
|
30
|
+
}
|
|
31
|
+
function debugLogPath() {
|
|
32
|
+
return process.env.FORGE_DEBUG_INPUT_LOG ?? "/tmp/forge-input-router.log";
|
|
33
|
+
}
|
|
34
|
+
function hexEscape(s) {
|
|
35
|
+
// Render printable ASCII as-is, escape everything else as \xNN. Helps spot
|
|
36
|
+
// arrow sequences (\x1b[A etc.) and Kitty-protocol variants at a glance.
|
|
37
|
+
return [...s]
|
|
38
|
+
.map((c) => {
|
|
39
|
+
const cp = c.codePointAt(0);
|
|
40
|
+
if (cp >= 0x20 && cp <= 0x7e)
|
|
41
|
+
return c;
|
|
42
|
+
return `\\x${cp.toString(16).padStart(2, "0")}`;
|
|
43
|
+
})
|
|
44
|
+
.join("");
|
|
45
|
+
}
|
|
46
|
+
function logEvent(line) {
|
|
47
|
+
if (!debugEnabled())
|
|
48
|
+
return;
|
|
49
|
+
try {
|
|
50
|
+
const ts = new Date().toISOString();
|
|
51
|
+
fs.appendFileSync(debugLogPath(), `${ts} ${line}\n`);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Logging must never crash the host; failure to write is silently ignored.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class ForgeInputRouter {
|
|
58
|
+
listeners = [];
|
|
59
|
+
overlayDepth = 0;
|
|
60
|
+
register(listener, opts) {
|
|
61
|
+
const entry = { fn: listener, opts };
|
|
62
|
+
this.listeners.push(entry);
|
|
63
|
+
logEvent(`register name=${opts.name} skipWhenOverlayActive=${!!opts.skipWhenOverlayActive} total=${this.listeners.length}`);
|
|
64
|
+
return () => {
|
|
65
|
+
const i = this.listeners.indexOf(entry);
|
|
66
|
+
if (i >= 0) {
|
|
67
|
+
this.listeners.splice(i, 1);
|
|
68
|
+
logEvent(`unregister name=${opts.name} remaining=${this.listeners.length}`);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
pushOverlay() {
|
|
73
|
+
this.overlayDepth++;
|
|
74
|
+
logEvent(`pushOverlay depth=${this.overlayDepth}`);
|
|
75
|
+
}
|
|
76
|
+
popOverlay() {
|
|
77
|
+
if (this.overlayDepth > 0)
|
|
78
|
+
this.overlayDepth--;
|
|
79
|
+
logEvent(`popOverlay depth=${this.overlayDepth}`);
|
|
80
|
+
}
|
|
81
|
+
isOverlayActive() {
|
|
82
|
+
return this.overlayDepth > 0;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Mirrors pi's listener-chain semantics (tui.ts:544-560):
|
|
86
|
+
* - Each listener may return { consume: true } to stop dispatch.
|
|
87
|
+
* - Each listener may return { data: rewritten } to alter the value the
|
|
88
|
+
* next listener (and ultimately the focused overlay) sees.
|
|
89
|
+
* - Listeners flagged skipWhenOverlayActive=true are silently bypassed
|
|
90
|
+
* whenever overlayDepth > 0.
|
|
91
|
+
*/
|
|
92
|
+
dispatch(data) {
|
|
93
|
+
if (debugEnabled()) {
|
|
94
|
+
logEvent(`dispatch IN data="${hexEscape(data)}" overlayDepth=${this.overlayDepth} listeners=${this.listeners.length}`);
|
|
95
|
+
}
|
|
96
|
+
let current = data;
|
|
97
|
+
for (const entry of this.listeners) {
|
|
98
|
+
if (this.overlayDepth > 0 && entry.opts.skipWhenOverlayActive) {
|
|
99
|
+
logEvent(` skip name=${entry.opts.name} (overlay active)`);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const result = entry.fn(current);
|
|
103
|
+
if (debugEnabled()) {
|
|
104
|
+
const r = result === undefined ? "passthrough" : `${result.consume ? "consume" : ""}${result.data !== undefined ? ` data="${hexEscape(result.data)}"` : ""}`.trim() || "noop";
|
|
105
|
+
logEvent(` call name=${entry.opts.name} → ${r}`);
|
|
106
|
+
}
|
|
107
|
+
if (result?.consume) {
|
|
108
|
+
logEvent(`dispatch OUT consumed-by=${entry.opts.name}`);
|
|
109
|
+
return { consume: true };
|
|
110
|
+
}
|
|
111
|
+
if (result?.data !== undefined)
|
|
112
|
+
current = result.data;
|
|
113
|
+
}
|
|
114
|
+
if (current !== data) {
|
|
115
|
+
logEvent(`dispatch OUT rewritten data="${hexEscape(current)}"`);
|
|
116
|
+
return { data: current };
|
|
117
|
+
}
|
|
118
|
+
logEvent(`dispatch OUT passthrough (focused overlay should receive)`);
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// ── Module-level singleton ───────────────────────────────────────────────────
|
|
123
|
+
let singleton = null;
|
|
124
|
+
export function getInputRouter() {
|
|
125
|
+
if (!singleton)
|
|
126
|
+
singleton = new ForgeInputRouter();
|
|
127
|
+
return singleton;
|
|
128
|
+
}
|
|
129
|
+
/** Test helper — replace the singleton with a fresh router. */
|
|
130
|
+
export function __resetInputRouterForTesting() {
|
|
131
|
+
singleton = null;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=input-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-router.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/input-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { MergedConfig } from "./config-layer.js";
|
|
2
|
+
export type { MergedConfig } from "./config-layer.js";
|
|
3
|
+
export type ResolveSource = "L4-inline" | "L4-name" | "L3" | "L2" | "L1" | "default" | "inherit";
|
|
4
|
+
export type LookupSource = "L3" | "L2" | "L1" | "default" | "missing";
|
|
5
|
+
export interface ResolveResult {
|
|
6
|
+
model: {
|
|
7
|
+
provider: string;
|
|
8
|
+
model: string;
|
|
9
|
+
} | undefined;
|
|
10
|
+
source: ResolveSource;
|
|
11
|
+
}
|
|
12
|
+
export interface LookupResult {
|
|
13
|
+
model: {
|
|
14
|
+
provider: string;
|
|
15
|
+
model: string;
|
|
16
|
+
} | undefined;
|
|
17
|
+
source: LookupSource;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Look up a persona-model name through L3 → L2 → L1 → default → missing.
|
|
21
|
+
* Used by resolveModelForPhase for L4-name resolution and direct persona lookups.
|
|
22
|
+
*/
|
|
23
|
+
export declare function lookupPersonaModel(personaName: string, pipelineName: string, merged: MergedConfig): LookupResult;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the {provider, model} pair for a specific phase invocation.
|
|
26
|
+
*
|
|
27
|
+
* Cascade order:
|
|
28
|
+
* L4-inline → L4-name → L3 → L2 → L1 → default persona-model → inherit
|
|
29
|
+
*
|
|
30
|
+
* When source is "inherit", model is undefined — caller must skip setModel.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveModelForPhase(pipelineName: string, phaseRole: string, personaNoun: string, merged: MergedConfig): ResolveResult;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
function toModel(pm) {
|
|
2
|
+
return { provider: pm.provider, model: pm.model };
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Look up a persona-model name through L3 → L2 → L1 → default → missing.
|
|
6
|
+
* Used by resolveModelForPhase for L4-name resolution and direct persona lookups.
|
|
7
|
+
*/
|
|
8
|
+
export function lookupPersonaModel(personaName, pipelineName, merged) {
|
|
9
|
+
// L3 — pipeline-level persona-models
|
|
10
|
+
const l3 = merged.pipelines?.[pipelineName]?.["persona-models"]?.[personaName];
|
|
11
|
+
if (l3)
|
|
12
|
+
return { model: toModel(l3), source: "L3" };
|
|
13
|
+
// L2 — project persona-models
|
|
14
|
+
const l2 = merged._project?.["persona-models"]?.[personaName];
|
|
15
|
+
if (l2)
|
|
16
|
+
return { model: toModel(l2), source: "L2" };
|
|
17
|
+
// L1 — global persona-models
|
|
18
|
+
const l1 = merged._global?.["persona-models"]?.[personaName];
|
|
19
|
+
if (l1)
|
|
20
|
+
return { model: toModel(l1), source: "L1" };
|
|
21
|
+
// default persona-model (same L3→L2→L1 walk with key="default")
|
|
22
|
+
if (personaName !== "default") {
|
|
23
|
+
const defL3 = merged.pipelines?.[pipelineName]?.["persona-models"]?.["default"];
|
|
24
|
+
if (defL3)
|
|
25
|
+
return { model: toModel(defL3), source: "default" };
|
|
26
|
+
const defL2 = merged._project?.["persona-models"]?.["default"];
|
|
27
|
+
if (defL2)
|
|
28
|
+
return { model: toModel(defL2), source: "default" };
|
|
29
|
+
const defL1 = merged._global?.["persona-models"]?.["default"];
|
|
30
|
+
if (defL1)
|
|
31
|
+
return { model: toModel(defL1), source: "default" };
|
|
32
|
+
}
|
|
33
|
+
return { model: undefined, source: "missing" };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve the {provider, model} pair for a specific phase invocation.
|
|
37
|
+
*
|
|
38
|
+
* Cascade order:
|
|
39
|
+
* L4-inline → L4-name → L3 → L2 → L1 → default persona-model → inherit
|
|
40
|
+
*
|
|
41
|
+
* When source is "inherit", model is undefined — caller must skip setModel.
|
|
42
|
+
*/
|
|
43
|
+
export function resolveModelForPhase(pipelineName, phaseRole, personaNoun, merged) {
|
|
44
|
+
const phase = merged.pipelines?.[pipelineName]?.phases?.[phaseRole];
|
|
45
|
+
const override = phase?.["model-override"];
|
|
46
|
+
if (override !== undefined) {
|
|
47
|
+
// L4-inline: override is an inline {provider, model} object
|
|
48
|
+
if (typeof override === "object") {
|
|
49
|
+
return { model: toModel(override), source: "L4-inline" };
|
|
50
|
+
}
|
|
51
|
+
// L4-name: override is a persona-model key string
|
|
52
|
+
const named = lookupPersonaModel(override, pipelineName, merged);
|
|
53
|
+
if (named.source !== "missing") {
|
|
54
|
+
return { model: named.model, source: "L4-name" };
|
|
55
|
+
}
|
|
56
|
+
// L4-name miss: fall through with original personaNoun
|
|
57
|
+
}
|
|
58
|
+
// L3 → L2 → L1 → default → missing
|
|
59
|
+
const lookup = lookupPersonaModel(personaNoun, pipelineName, merged);
|
|
60
|
+
if (lookup.source === "missing") {
|
|
61
|
+
return { model: undefined, source: "inherit" };
|
|
62
|
+
}
|
|
63
|
+
return { model: lookup.model, source: lookup.source };
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=model-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/model-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { MergedConfig } from "./config-layer.js";
|
|
2
|
+
export type ValidationCode = "UNKNOWN_PERSONA" | "MODEL_UNAVAILABLE" | "UNKNOWN_PIPELINE" | "UNRESOLVABLE_OVERRIDE";
|
|
3
|
+
export interface ValidationIssue {
|
|
4
|
+
code: ValidationCode;
|
|
5
|
+
message: string;
|
|
6
|
+
/** JSON-pointer-style path to the offending config value */
|
|
7
|
+
path?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ValidationReport {
|
|
10
|
+
errors: ValidationIssue[];
|
|
11
|
+
warnings: ValidationIssue[];
|
|
12
|
+
}
|
|
13
|
+
type AvailableModel = {
|
|
14
|
+
provider: string;
|
|
15
|
+
id: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Validate the merged forge-cli model config against runtime catalogues.
|
|
19
|
+
*
|
|
20
|
+
* - strict=false: unavailability and unknown persona names are warnings.
|
|
21
|
+
* - strict=true: those warnings become errors.
|
|
22
|
+
* - Unknown pipeline names are always errors when pipelineCatalogue is non-null;
|
|
23
|
+
* warnings when pipelineCatalogue is null (no .forge/config.json found).
|
|
24
|
+
* - Unresolvable model-override strings are always errors.
|
|
25
|
+
*
|
|
26
|
+
* The function is pure — no I/O. Callers pass in the pre-built catalogues.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateModelConfig(personaCatalogue: string[], pipelineCatalogue: string[] | null, merged: MergedConfig, availableModels: AvailableModel[], strict: boolean): ValidationReport;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { lookupPersonaModel } from "./model-resolver.js";
|
|
2
|
+
function isAvailable(pair, available) {
|
|
3
|
+
return available.some((m) => m.provider === pair.provider && m.id === pair.model);
|
|
4
|
+
}
|
|
5
|
+
function modelKey(pair) {
|
|
6
|
+
return `${pair.provider}:${pair.model}`;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Validate the merged forge-cli model config against runtime catalogues.
|
|
10
|
+
*
|
|
11
|
+
* - strict=false: unavailability and unknown persona names are warnings.
|
|
12
|
+
* - strict=true: those warnings become errors.
|
|
13
|
+
* - Unknown pipeline names are always errors when pipelineCatalogue is non-null;
|
|
14
|
+
* warnings when pipelineCatalogue is null (no .forge/config.json found).
|
|
15
|
+
* - Unresolvable model-override strings are always errors.
|
|
16
|
+
*
|
|
17
|
+
* The function is pure — no I/O. Callers pass in the pre-built catalogues.
|
|
18
|
+
*/
|
|
19
|
+
export function validateModelConfig(personaCatalogue, pipelineCatalogue, merged, availableModels, strict) {
|
|
20
|
+
const errors = [];
|
|
21
|
+
const warnings = [];
|
|
22
|
+
function issue(isError, code, message, path) {
|
|
23
|
+
(isError ? errors : warnings).push({ code, message, path });
|
|
24
|
+
}
|
|
25
|
+
// ── 1. Validate top-level and per-layer persona-models entries ────────────
|
|
26
|
+
const allPersonaEntries = collectPersonaEntries(merged);
|
|
27
|
+
for (const { key, value, path } of allPersonaEntries) {
|
|
28
|
+
if (key !== "default" && !personaCatalogue.includes(key)) {
|
|
29
|
+
issue(strict, "UNKNOWN_PERSONA", `Unknown persona name "${key}" — not in persona catalogue`, path);
|
|
30
|
+
}
|
|
31
|
+
if (!isAvailable(value, availableModels)) {
|
|
32
|
+
issue(strict, "MODEL_UNAVAILABLE", `${modelKey(value)} (persona "${key}") is not available in ModelRegistry`, path);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// ── 2. Validate pipeline names + per-pipeline phases ─────────────────────
|
|
36
|
+
const pipelines = merged.pipelines ?? {};
|
|
37
|
+
for (const [pipelineName, pipelineConfig] of Object.entries(pipelines)) {
|
|
38
|
+
const pipelinePath = `pipelines.${pipelineName}`;
|
|
39
|
+
// Unknown pipeline name
|
|
40
|
+
if (pipelineCatalogue !== null && !pipelineCatalogue.includes(pipelineName)) {
|
|
41
|
+
issue(true, "UNKNOWN_PIPELINE", `Unknown pipeline name "${pipelineName}" — not in .forge/config.json`, pipelinePath);
|
|
42
|
+
}
|
|
43
|
+
else if (pipelineCatalogue === null) {
|
|
44
|
+
issue(false, "UNKNOWN_PIPELINE", `Pipeline name "${pipelineName}" could not be verified — no .forge/config.json found`, pipelinePath);
|
|
45
|
+
}
|
|
46
|
+
// Per-pipeline persona-models entries
|
|
47
|
+
const pipelinePersonaModels = pipelineConfig["persona-models"] ?? {};
|
|
48
|
+
for (const [key, value] of Object.entries(pipelinePersonaModels)) {
|
|
49
|
+
const entryPath = `${pipelinePath}.persona-models.${key}`;
|
|
50
|
+
if (key !== "default" && !personaCatalogue.includes(key)) {
|
|
51
|
+
issue(strict, "UNKNOWN_PERSONA", `Unknown persona name "${key}" in pipeline "${pipelineName}"`, entryPath);
|
|
52
|
+
}
|
|
53
|
+
if (!isAvailable(value, availableModels)) {
|
|
54
|
+
issue(strict, "MODEL_UNAVAILABLE", `${modelKey(value)} (pipeline "${pipelineName}", persona "${key}") is not available`, entryPath);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Per-phase model-override validation
|
|
58
|
+
const phases = pipelineConfig.phases ?? {};
|
|
59
|
+
for (const [role, phase] of Object.entries(phases)) {
|
|
60
|
+
const override = phase["model-override"];
|
|
61
|
+
if (override === undefined)
|
|
62
|
+
continue;
|
|
63
|
+
const phasePath = `${pipelinePath}.phases.${role}.model-override`;
|
|
64
|
+
if (typeof override === "string") {
|
|
65
|
+
// Named persona-model key — must resolve via the cascade
|
|
66
|
+
const resolved = lookupPersonaModel(override, pipelineName, merged);
|
|
67
|
+
if (resolved.source === "missing") {
|
|
68
|
+
issue(true, "UNRESOLVABLE_OVERRIDE", `phases.${role}.model-override "${override}" in pipeline "${pipelineName}" does not resolve to any persona-model`, phasePath);
|
|
69
|
+
}
|
|
70
|
+
else if (resolved.model && !isAvailable(resolved.model, availableModels)) {
|
|
71
|
+
issue(strict, "MODEL_UNAVAILABLE", `${modelKey(resolved.model)} (override "${override}" in pipeline "${pipelineName}", phase "${role}") is not available`, phasePath);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Inline {provider, model} object — check availability only
|
|
76
|
+
if (!isAvailable(override, availableModels)) {
|
|
77
|
+
issue(strict, "MODEL_UNAVAILABLE", `${modelKey(override)} (inline override in pipeline "${pipelineName}", phase "${role}") is not available`, phasePath);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { errors, warnings };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Collect all persona-model entries across global and project layers,
|
|
86
|
+
* deduplicating by key (project wins, same as the merge in config-layer.ts).
|
|
87
|
+
* Returns one entry per unique key, with the winning layer's path annotation.
|
|
88
|
+
*/
|
|
89
|
+
function collectPersonaEntries(merged) {
|
|
90
|
+
const seen = new Map();
|
|
91
|
+
function add(key, value, layer) {
|
|
92
|
+
// project layer overwrites global layer (project wins)
|
|
93
|
+
if (!seen.has(key) || layer.startsWith("project")) {
|
|
94
|
+
seen.set(key, { key, value, path: `${layer}.persona-models.${key}` });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const global = merged._global?.["persona-models"] ?? {};
|
|
98
|
+
for (const [key, value] of Object.entries(global)) {
|
|
99
|
+
add(key, value, "global");
|
|
100
|
+
}
|
|
101
|
+
const project = merged._project?.["persona-models"] ?? {};
|
|
102
|
+
for (const [key, value] of Object.entries(project)) {
|
|
103
|
+
add(key, value, "project");
|
|
104
|
+
}
|
|
105
|
+
return Array.from(seen.values());
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=model-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-validator.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/model-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,16 +23,48 @@
|
|
|
23
23
|
// Audit-grep: grep -n "sendKickoff(" run-sprint.ts must return empty.
|
|
24
24
|
import * as fs from "node:fs";
|
|
25
25
|
import * as path from "node:path";
|
|
26
|
+
import { fileURLToPath } from "node:url";
|
|
26
27
|
import { spawnSync } from "node:child_process";
|
|
28
|
+
import { AuthStorage, ModelRegistry } from "@earendil-works/pi-coding-agent";
|
|
27
29
|
import { assertAudience } from "./audience-gate.js";
|
|
28
30
|
import { checkMaterialization } from "./plan.js";
|
|
29
31
|
import { loadWorkflow } from "./loaders/workflow-loader.js";
|
|
30
32
|
import { discoverForgeConfig } from "./forge-root.js";
|
|
31
33
|
import { getSessionRegistry } from "./session-registry.js";
|
|
32
34
|
import { loadForgePersona, runForgeSubagent } from "./forge-subagent.js";
|
|
35
|
+
import { loadLayeredConfig } from "./config-layer.js";
|
|
36
|
+
import { lookupPersonaModel } from "./model-resolver.js";
|
|
37
|
+
import { validateModelConfig } from "./model-validator.js";
|
|
33
38
|
import { attachViewportObserver } from "./viewport-events.js";
|
|
34
39
|
import { emitSyntheticEvent } from "./hook-dispatcher.js";
|
|
35
40
|
import { runTaskPipeline, isNonInteractive, formatLocalTime, emitEvent, isoCompact, validateId, readState as readTaskState, isStateStale, } from "./run-task.js";
|
|
41
|
+
// ── Model-routing preflight helpers (Plan 16 Slice 3) ────────────────────────
|
|
42
|
+
function readPersonaDirSprint(dir) {
|
|
43
|
+
try {
|
|
44
|
+
return fs.readdirSync(dir)
|
|
45
|
+
.filter((f) => f.endsWith(".md") && !f.endsWith("-skills.md"))
|
|
46
|
+
.map((f) => f.replace(/\.md$/, ""));
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function readPipelineNamesSprint(forgeCfgPath) {
|
|
53
|
+
try {
|
|
54
|
+
const raw = fs.readFileSync(forgeCfgPath, "utf-8");
|
|
55
|
+
const cfg = JSON.parse(raw);
|
|
56
|
+
if (cfg && typeof cfg === "object" && "pipelines" in cfg) {
|
|
57
|
+
const pipelines = cfg.pipelines;
|
|
58
|
+
if (pipelines && typeof pipelines === "object")
|
|
59
|
+
return Object.keys(pipelines);
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
36
68
|
function sprintStateFilePath(cwd, sprintId) {
|
|
37
69
|
if (!validateId(sprintId)) {
|
|
38
70
|
throw new Error(`Invalid sprintId for state file path: ${sprintId}`);
|
|
@@ -134,6 +166,9 @@ async function dispatchSprintCeremony(params) {
|
|
|
134
166
|
displayRole: "ceremony",
|
|
135
167
|
beginHeader: `─── sprint ${sprintId} ceremony begin · ${personaName} ───`,
|
|
136
168
|
});
|
|
169
|
+
// Resolve model routing for the ceremony's architect persona (Plan 16 Slice 2).
|
|
170
|
+
const { merged: ceremonyModelConfig } = loadLayeredConfig(cwd);
|
|
171
|
+
const ceremonyModelLookup = lookupPersonaModel(personaName, "default", ceremonyModelConfig);
|
|
137
172
|
try {
|
|
138
173
|
const result = await runForgeSubagent({
|
|
139
174
|
persona,
|
|
@@ -147,6 +182,7 @@ async function dispatchSprintCeremony(params) {
|
|
|
147
182
|
// so the system-prompt + persona prefix stays warm.
|
|
148
183
|
cacheSessionId: `forge:${sprintId}`,
|
|
149
184
|
onEvent: observer.onEvent,
|
|
185
|
+
requestedModel: ceremonyModelLookup.model,
|
|
150
186
|
});
|
|
151
187
|
model = result.model;
|
|
152
188
|
provider = result.provider;
|
|
@@ -321,6 +357,29 @@ export function registerRunSprint(pi, options = {}) {
|
|
|
321
357
|
}
|
|
322
358
|
}
|
|
323
359
|
}
|
|
360
|
+
// ── Model routing pre-flight (Plan 16 Slice 3) ──────────────────────
|
|
361
|
+
// Validate routing config once at sprint start (before any LLM calls).
|
|
362
|
+
{
|
|
363
|
+
const { merged: modelRoutingConfig } = loadLayeredConfig(cwd);
|
|
364
|
+
const personasDir = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "forge-payload", ".base-pack", "personas");
|
|
365
|
+
const personaCatalogue = readPersonaDirSprint(personasDir);
|
|
366
|
+
const forgeCfgPath = path.join(cwd, ".forge", "config.json");
|
|
367
|
+
const pipelineCatalogue = readPipelineNamesSprint(forgeCfgPath);
|
|
368
|
+
const modelRegistry = ModelRegistry.create(AuthStorage.create());
|
|
369
|
+
const availableModels = modelRegistry.getAvailable?.() ?? [];
|
|
370
|
+
const strict = process.env.FORGE_STRICT_MODELS === "1";
|
|
371
|
+
const { errors, warnings } = validateModelConfig(personaCatalogue, pipelineCatalogue, modelRoutingConfig, availableModels.map((m) => ({ provider: m.provider, id: m.id })), strict);
|
|
372
|
+
for (const w of warnings) {
|
|
373
|
+
ctx.ui.notify(`⚠ forge:run-sprint — model routing: ${w.message}`, "warning");
|
|
374
|
+
}
|
|
375
|
+
if (errors.length > 0) {
|
|
376
|
+
for (const e of errors) {
|
|
377
|
+
ctx.ui.notify(`× forge:run-sprint — model routing: ${e.message}`, "error");
|
|
378
|
+
}
|
|
379
|
+
ctx.ui.setStatus?.(SPRINT_STATUS_KEY, undefined);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
324
383
|
// ── Per-task loop (AC B-8) ────────────────────────────────────────
|
|
325
384
|
const registry = getSessionRegistry();
|
|
326
385
|
let lastModel;
|