@entelligentsia/forgecli 0.11.3 → 0.15.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 +314 -0
- package/README.md +2 -1
- package/dist/CHANGELOG-forge-plugin.md +183 -0
- package/dist/bin/forge.js +20 -1
- package/dist/bin/forge.js.map +1 -1
- package/dist/extensions/forgecli/config-layer.d.ts +15 -0
- package/dist/extensions/forgecli/config-layer.js.map +1 -1
- package/dist/extensions/forgecli/enhance.js +1 -1
- package/dist/extensions/forgecli/enhance.js.map +1 -1
- package/dist/extensions/forgecli/forge-cli-schema.json +19 -0
- package/dist/extensions/forgecli/forge-tools.js +80 -0
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/forge-update-command.js +24 -18
- package/dist/extensions/forgecli/forge-update-command.js.map +1 -1
- package/dist/extensions/forgecli/friction-emit.d.ts +97 -0
- package/dist/extensions/forgecli/friction-emit.js +246 -0
- package/dist/extensions/forgecli/friction-emit.js.map +1 -0
- package/dist/extensions/forgecli/hook-dispatcher.js +20 -0
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/index.js +29 -5
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/regenerate.d.ts +22 -0
- package/dist/extensions/forgecli/regenerate.js +133 -3
- package/dist/extensions/forgecli/regenerate.js.map +1 -1
- package/dist/extensions/forgecli/skill-curation-flag.d.ts +21 -0
- package/dist/extensions/forgecli/skill-curation-flag.js +71 -0
- package/dist/extensions/forgecli/skill-curation-flag.js.map +1 -0
- package/dist/extensions/forgecli/skill-curator-subagent.d.ts +101 -0
- package/dist/extensions/forgecli/skill-curator-subagent.js +342 -0
- package/dist/extensions/forgecli/skill-curator-subagent.js.map +1 -0
- package/dist/extensions/forgecli/skill-retriever.d.ts +84 -0
- package/dist/extensions/forgecli/skill-retriever.js +246 -0
- package/dist/extensions/forgecli/skill-retriever.js.map +1 -0
- package/dist/extensions/forgecli/skill-usage-tracker.d.ts +91 -0
- package/dist/extensions/forgecli/skill-usage-tracker.js +224 -0
- package/dist/extensions/forgecli/skill-usage-tracker.js.map +1 -0
- package/dist/forge-payload/.base-pack/workflows/enhance.md +331 -11
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/event.schema.json +20 -2
- package/dist/forge-payload/.schemas/migrations.json +96 -0
- package/dist/forge-payload/.schemas/proposal.schema.json +40 -0
- package/dist/forge-payload/agents/store-query-validator.md +103 -0
- package/dist/forge-payload/agents/tomoshibi.md +185 -0
- package/dist/forge-payload/commands/regenerate.md +109 -20
- package/dist/forge-payload/hooks/check-update.js +378 -0
- package/dist/forge-payload/hooks/forge-permissions.js +158 -0
- package/dist/forge-payload/hooks/triage-error.js +71 -0
- package/dist/forge-payload/hooks/validate-write.js +236 -0
- package/dist/forge-payload/integrity.json +32 -0
- package/dist/forge-payload/meta/workflows/meta-enhance.md +331 -11
- package/dist/forge-payload/schemas/structure-manifest.json +511 -0
- package/dist/forge-payload/tools/compression-gate.cjs +192 -0
- package/dist/forge-payload/tools/delete-candidate-detector.cjs +114 -0
- package/dist/forge-payload/tools/judge-proposal.cjs +177 -0
- package/dist/forge-payload/tools/manage-versions.cjs +132 -4
- package/dist/forge-payload/tools/queue-drain.cjs +152 -0
- package/dist/forge-payload/tools/replay-scoring.cjs +117 -0
- package/node_modules/@mariozechner/clipboard/package.json +2 -1
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +3 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/clipboard.linux-x64-musl.node +0 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +25 -0
- package/package.json +4 -2
|
@@ -12,10 +12,63 @@
|
|
|
12
12
|
// Idempotent — re-running with no changes overwrites with identical bytes.
|
|
13
13
|
//
|
|
14
14
|
// See forge-cli companion to forge#83 / #85.
|
|
15
|
-
import { spawn } from "node:child_process";
|
|
15
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
16
16
|
import * as fs from "node:fs";
|
|
17
17
|
import * as path from "node:path";
|
|
18
18
|
import { getBundledPayloadRoot, getBundledToolsRoot } from "./forge-init.js";
|
|
19
|
+
// ── Pre-write modification guard (forge-cli#26 / forge#106 / FORGE-BUG-037) ──
|
|
20
|
+
//
|
|
21
|
+
// `substitute-placeholders.cjs` blanket-overwrites every file in the four
|
|
22
|
+
// structural-element categories. Before invoking it, enumerate each .forge/<cat>/
|
|
23
|
+
// file and run `generation-manifest.cjs check`. Any file whose recorded hash
|
|
24
|
+
// no longer matches its on-disk content is a manual modification — typically
|
|
25
|
+
// applied by /forge:enhance Phase 2 — and would be silently destroyed.
|
|
26
|
+
// Surface the list to the user and require explicit confirmation.
|
|
27
|
+
const STRUCTURAL_CATEGORIES = ["personas", "skills", "workflows", "templates"];
|
|
28
|
+
/**
|
|
29
|
+
* Enumerate files in .forge/{personas,skills,workflows,templates}/ and return
|
|
30
|
+
* those whose state diverges from the manifest baseline. Two divergence states
|
|
31
|
+
* are surfaced (both warrant a prompt before overwrite):
|
|
32
|
+
*
|
|
33
|
+
* - "modified": file content differs from the recorded manifest hash. Typically
|
|
34
|
+
* caused by /forge:enhance Phase 2 applying edits in-place.
|
|
35
|
+
* - "untracked": file exists on disk but has NO manifest entry. Caused by a
|
|
36
|
+
* prior regenerate that ran `clear-namespace` without re-recording. A fresh
|
|
37
|
+
* /forge:init records hashes for every generated file, so "untracked" should
|
|
38
|
+
* never appear in a clean install — its presence signals user content that's
|
|
39
|
+
* been disconnected from the tracking system. See forge-cli#30.
|
|
40
|
+
*
|
|
41
|
+
* Pure function (no I/O beyond fs reads + manifest tool spawns).
|
|
42
|
+
*/
|
|
43
|
+
export function findModifiedStructuralFiles(cwd, toolsRoot) {
|
|
44
|
+
const manifestTool = path.join(toolsRoot, "generation-manifest.cjs");
|
|
45
|
+
if (!fs.existsSync(manifestTool))
|
|
46
|
+
return [];
|
|
47
|
+
const modified = [];
|
|
48
|
+
for (const category of STRUCTURAL_CATEGORIES) {
|
|
49
|
+
const dir = path.join(cwd, ".forge", category);
|
|
50
|
+
if (!fs.existsSync(dir))
|
|
51
|
+
continue;
|
|
52
|
+
const files = fs.readdirSync(dir).filter((f) => f.endsWith(".md"));
|
|
53
|
+
for (const f of files) {
|
|
54
|
+
const relPath = path.posix.join(".forge", category, f);
|
|
55
|
+
const result = spawnSync("node", [manifestTool, "check", relPath], {
|
|
56
|
+
cwd,
|
|
57
|
+
encoding: "utf8",
|
|
58
|
+
timeout: 5_000,
|
|
59
|
+
});
|
|
60
|
+
// generation-manifest check exit codes:
|
|
61
|
+
// 0 = pristine, 1 = modified, 2 = untracked, 3 = file missing
|
|
62
|
+
if (result.status === 1) {
|
|
63
|
+
modified.push({ category, relativePath: relPath, state: "modified" });
|
|
64
|
+
}
|
|
65
|
+
else if (result.status === 2) {
|
|
66
|
+
modified.push({ category, relativePath: relPath, state: "untracked" });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return modified;
|
|
71
|
+
}
|
|
19
72
|
async function runTool(toolPath, argv, cwd, ctx, label, timeoutMs = 60_000) {
|
|
20
73
|
return await new Promise((resolve) => {
|
|
21
74
|
const child = spawn("node", [toolPath, ...argv], { cwd, stdio: ["ignore", "pipe", "pipe"] });
|
|
@@ -55,7 +108,7 @@ export function registerRegenerate(pi) {
|
|
|
55
108
|
pi.registerCommand("forge:regenerate", {
|
|
56
109
|
description: "Re-materialize .forge/ and .claude/commands/ from the bundled forge-payload " +
|
|
57
110
|
"(deterministic subset of the plugin's /forge:regenerate — runs substitute-placeholders.cjs).",
|
|
58
|
-
async handler(
|
|
111
|
+
async handler(args, ctx) {
|
|
59
112
|
const cwd = process.cwd();
|
|
60
113
|
const configPath = path.join(cwd, ".forge", "config.json");
|
|
61
114
|
if (!fs.existsSync(configPath)) {
|
|
@@ -75,6 +128,42 @@ export function registerRegenerate(pi) {
|
|
|
75
128
|
ctx.ui.notify(`× forge:regenerate — base-pack missing at ${basePackDir}`, "error");
|
|
76
129
|
return;
|
|
77
130
|
}
|
|
131
|
+
// Pre-write modification guard (forge-cli#26 / forge#106 / FORGE-BUG-037).
|
|
132
|
+
// Skip with --force (e.g. CI / dogfood reset). Otherwise, surface any
|
|
133
|
+
// manual modifications (typically applied by /forge:enhance Phase 2)
|
|
134
|
+
// and require explicit confirmation before overwriting them.
|
|
135
|
+
const force = (args ?? []).includes("--force");
|
|
136
|
+
if (!force) {
|
|
137
|
+
const divergent = findModifiedStructuralFiles(cwd, toolsRoot);
|
|
138
|
+
if (divergent.length > 0) {
|
|
139
|
+
const modCount = divergent.filter((m) => m.state === "modified").length;
|
|
140
|
+
const untCount = divergent.filter((m) => m.state === "untracked").length;
|
|
141
|
+
const summary = [
|
|
142
|
+
`${divergent.length} file(s) in .forge/ diverge from the manifest baseline:`,
|
|
143
|
+
` ${modCount} modified (hash mismatch — typical /forge:enhance Phase 2 edit)`,
|
|
144
|
+
` ${untCount} untracked (no manifest entry — usually means a prior regenerate cleared the namespace)`,
|
|
145
|
+
"",
|
|
146
|
+
"Divergent files:",
|
|
147
|
+
...divergent.map((m) => ` △ [${m.state}] ${m.relativePath}`),
|
|
148
|
+
"",
|
|
149
|
+
"Edits CAPTURED by /forge:enhance Phase 2 snapshots (.forge/archive/snap-N/)",
|
|
150
|
+
"will be RESTORED automatically post-regenerate via `manage-versions replay`",
|
|
151
|
+
"(forge#107 / Approach A — overlay semantics, later snapshots win).",
|
|
152
|
+
"",
|
|
153
|
+
"Edits NOT captured in any snapshot will be lost. To capture before regen, run",
|
|
154
|
+
"/forge:enhance Phase 2 → approve edits → ensure `add-snapshot` was called.",
|
|
155
|
+
"",
|
|
156
|
+
"Answer 'yes' to proceed (snapshot-captured edits survive automatically).",
|
|
157
|
+
"Answer 'no' to abort.",
|
|
158
|
+
"Use --force to skip this prompt AND skip replay (pristine base-pack).",
|
|
159
|
+
].join("\n");
|
|
160
|
+
const proceed = await ctx.ui.confirm(`Proceed with regenerate? (${divergent.length} divergent file(s): ${modCount} modified, ${untCount} untracked)`, summary);
|
|
161
|
+
if (!proceed) {
|
|
162
|
+
ctx.ui.notify(`〇 forge:regenerate cancelled — ${divergent.length} divergent file(s) preserved.`, "info");
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
78
167
|
ctx.ui.setStatus?.("forge:regenerate", "rebuilding init-context…");
|
|
79
168
|
// 1. Rebuild init-context.json so substitute has fresh placeholders.
|
|
80
169
|
if (fs.existsSync(buildInitContextTool)) {
|
|
@@ -111,7 +200,48 @@ export function registerRegenerate(pi) {
|
|
|
111
200
|
"--out",
|
|
112
201
|
cwd,
|
|
113
202
|
], cwd, ctx, "substitute-placeholders", 60_000);
|
|
114
|
-
//
|
|
203
|
+
// 3a. Replay user enhancements (forge#107 / forge-cli#27 — Approach A layer 3).
|
|
204
|
+
// After substitute-placeholders wrote fresh base-pack content over
|
|
205
|
+
// .forge/{personas,skills,workflows,templates}/, restore any user-enhanced
|
|
206
|
+
// files captured by /forge:enhance Phase 2 snapshots from .forge/archive/snap-N/.
|
|
207
|
+
// Mirrors regenerate.md's per-category replay step. Pure additive — replay
|
|
208
|
+
// is a no-op when no snapshots match. Skipped when --force is used (force
|
|
209
|
+
// is "I want pristine base-pack content, no overlay").
|
|
210
|
+
const manageVersionsTool = path.join(toolsRoot, "manage-versions.cjs");
|
|
211
|
+
let replayTotal = 0;
|
|
212
|
+
if (ok && !force && fs.existsSync(manageVersionsTool)) {
|
|
213
|
+
ctx.ui.setStatus?.("forge:regenerate", "replaying user enhancements…");
|
|
214
|
+
const replayCategories = ["personas", "skills", "workflows", "templates"];
|
|
215
|
+
for (const category of replayCategories) {
|
|
216
|
+
await new Promise((resolve) => {
|
|
217
|
+
const child = spawn("node", [manageVersionsTool, "replay", "--target", category], {
|
|
218
|
+
cwd,
|
|
219
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
220
|
+
});
|
|
221
|
+
let stdoutBuf = "";
|
|
222
|
+
child.stdout?.on("data", (d) => {
|
|
223
|
+
stdoutBuf += d.toString();
|
|
224
|
+
});
|
|
225
|
+
child.on("close", (code) => {
|
|
226
|
+
if (code === 0) {
|
|
227
|
+
// Parse "restored — N file(s)" out of stdout to track total
|
|
228
|
+
const m = stdoutBuf.match(/(\d+)\s+file\(s\)\s+restored/);
|
|
229
|
+
if (m) {
|
|
230
|
+
replayTotal += parseInt(m[1], 10);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Non-zero exit (e.g. structure-versions.json missing on a
|
|
234
|
+
// project that never ran /forge:enhance): treat as no-op.
|
|
235
|
+
resolve();
|
|
236
|
+
});
|
|
237
|
+
child.on("error", () => resolve());
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
if (replayTotal > 0) {
|
|
241
|
+
ctx.ui.notify(`〇 replay: ${replayTotal} user enhancement(s) restored from snapshots`, "info");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// 3b. Refresh schemas from bundled .schemas/. substitute-placeholders does
|
|
115
245
|
// not touch .forge/schemas/, but a forge plugin version bump can ship
|
|
116
246
|
// schema changes (e.g. 0.43.13 added `provider` required + dropped
|
|
117
247
|
// `estimatedCostUSD`). Without this step, regenerated workflows assume
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regenerate.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/regenerate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"regenerate.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/regenerate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse an env flag value to a tri-state: true / false / null (absent or
|
|
3
|
+
* unrecognised). Unrecognised values fall through to the disk layers — we
|
|
4
|
+
* do NOT throw or coerce to false silently.
|
|
5
|
+
*/
|
|
6
|
+
declare function parseEnvFlag(raw: string | undefined): boolean | null;
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the SKILL-CURATION feature flag for the given working directory.
|
|
9
|
+
*
|
|
10
|
+
* Default OFF — the helper returns true only when an explicit `true` value
|
|
11
|
+
* is found in the env override or one of the config layers.
|
|
12
|
+
*
|
|
13
|
+
* `cwd` defaults to `process.cwd()` for production call sites; tests pass
|
|
14
|
+
* a temp dir to isolate filesystem state.
|
|
15
|
+
*/
|
|
16
|
+
export declare function isSkillCurationEnabled(cwd?: string): boolean;
|
|
17
|
+
export declare const _internal: {
|
|
18
|
+
parseEnvFlag: typeof parseEnvFlag;
|
|
19
|
+
ENV_FLAG: string;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// Skill-curation feature flag — FORGE-S24-T12.
|
|
2
|
+
//
|
|
3
|
+
// Single source of truth for resolving `forgeCli.skillCuration.enabled`
|
|
4
|
+
// from the layered config. The four SKILL-CURATION emission modules
|
|
5
|
+
// (T08 skill-retriever, T09 skill-usage-tracker, T10 skill-curator-subagent,
|
|
6
|
+
// T11 friction-emit) call `isSkillCurationEnabled()` at the top of their
|
|
7
|
+
// public emission / dispatch entry points and no-op when it returns false.
|
|
8
|
+
//
|
|
9
|
+
// Resolution order (first match wins):
|
|
10
|
+
// 1. Env override `FORGE_CLI_SKILL_CURATION_ENABLED` — accepts "1"/"true"
|
|
11
|
+
// (case-insensitive) for on, "0"/"false" for off. Provided primarily
|
|
12
|
+
// for unit tests and one-shot operator overrides; takes precedence
|
|
13
|
+
// over disk config so a poisoned config never blocks an operator
|
|
14
|
+
// from turning the flag on or off for a single session.
|
|
15
|
+
// 2. Project config (`<cwd>/.pi/forge-cli/config.json`): `forgeCli.skillCuration.enabled`.
|
|
16
|
+
// 3. Global config (`~/.pi/forge-cli/config.json`): `forgeCli.skillCuration.enabled`.
|
|
17
|
+
// 4. Default: false (Iron Law — gated rollout per FORGE-S24-T12 AC2).
|
|
18
|
+
//
|
|
19
|
+
// Iron Laws (forge-cli-engineer):
|
|
20
|
+
// IL1 — code only under forge-cli/src/extensions/forgecli/
|
|
21
|
+
// IL2 — TypeScript; no runtime cast. The layered loader has already
|
|
22
|
+
// Ajv-validated the JSON against forge-cli-schema.json before
|
|
23
|
+
// we read it.
|
|
24
|
+
// IL7 — no silent continuation past failures: a malformed config is
|
|
25
|
+
// surfaced by `loadLayeredConfig().errors` upstream; this helper
|
|
26
|
+
// treats a missing/null layer as "no opinion" and falls through
|
|
27
|
+
// to the next layer (NOT as a silent off-default — the off-default
|
|
28
|
+
// is the explicit final step).
|
|
29
|
+
import { loadLayeredConfig } from "./config-layer.js";
|
|
30
|
+
const ENV_FLAG = "FORGE_CLI_SKILL_CURATION_ENABLED";
|
|
31
|
+
/**
|
|
32
|
+
* Parse an env flag value to a tri-state: true / false / null (absent or
|
|
33
|
+
* unrecognised). Unrecognised values fall through to the disk layers — we
|
|
34
|
+
* do NOT throw or coerce to false silently.
|
|
35
|
+
*/
|
|
36
|
+
function parseEnvFlag(raw) {
|
|
37
|
+
if (raw === undefined)
|
|
38
|
+
return null;
|
|
39
|
+
const normalised = raw.trim().toLowerCase();
|
|
40
|
+
if (normalised === "1" || normalised === "true")
|
|
41
|
+
return true;
|
|
42
|
+
if (normalised === "0" || normalised === "false")
|
|
43
|
+
return false;
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve the SKILL-CURATION feature flag for the given working directory.
|
|
48
|
+
*
|
|
49
|
+
* Default OFF — the helper returns true only when an explicit `true` value
|
|
50
|
+
* is found in the env override or one of the config layers.
|
|
51
|
+
*
|
|
52
|
+
* `cwd` defaults to `process.cwd()` for production call sites; tests pass
|
|
53
|
+
* a temp dir to isolate filesystem state.
|
|
54
|
+
*/
|
|
55
|
+
export function isSkillCurationEnabled(cwd = process.cwd()) {
|
|
56
|
+
const envValue = parseEnvFlag(process.env[ENV_FLAG]);
|
|
57
|
+
if (envValue !== null)
|
|
58
|
+
return envValue;
|
|
59
|
+
const layered = loadLayeredConfig(cwd);
|
|
60
|
+
const projectFlag = layered.project?.forgeCli?.skillCuration?.enabled;
|
|
61
|
+
if (typeof projectFlag === "boolean")
|
|
62
|
+
return projectFlag;
|
|
63
|
+
const globalFlag = layered.global?.forgeCli?.skillCuration?.enabled;
|
|
64
|
+
if (typeof globalFlag === "boolean")
|
|
65
|
+
return globalFlag;
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
// Exposed for unit tests that want to assert env-parsing behaviour
|
|
69
|
+
// without touching the disk layers.
|
|
70
|
+
export const _internal = { parseEnvFlag, ENV_FLAG };
|
|
71
|
+
//# sourceMappingURL=skill-curation-flag.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-curation-flag.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/skill-curation-flag.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,EAAE;AACF,wEAAwE;AACxE,oEAAoE;AACpE,6EAA6E;AAC7E,yEAAyE;AACzE,2EAA2E;AAC3E,EAAE;AACF,uCAAuC;AACvC,4EAA4E;AAC5E,0EAA0E;AAC1E,wEAAwE;AACxE,sEAAsE;AACtE,6DAA6D;AAC7D,6FAA6F;AAC7F,wFAAwF;AACxF,wEAAwE;AACxE,EAAE;AACF,kCAAkC;AAClC,8DAA8D;AAC9D,uEAAuE;AACvE,uEAAuE;AACvE,uBAAuB;AACvB,uEAAuE;AACvE,0EAA0E;AAC1E,yEAAyE;AACzE,4EAA4E;AAC5E,wCAAwC;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AAEpD;;;;GAIG;AACH,SAAS,YAAY,CAAC,GAAuB;IAC5C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/D,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACjE,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAEvC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAEvC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC;IACtE,IAAI,OAAO,WAAW,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAEzD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC;IACpE,IAAI,OAAO,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IAEvD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,mEAAmE;AACnE,oCAAoC;AACpC,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type Static, Type } from "typebox";
|
|
2
|
+
import { type ForgePersona } from "./forge-subagent.js";
|
|
3
|
+
/**
|
|
4
|
+
* One retrieved skill (T08 output) supplied to the curator as context.
|
|
5
|
+
* `body` is the actual SKILL.md text the agent was shown during the task —
|
|
6
|
+
* the curator reads it to decide whether the skill needs updating.
|
|
7
|
+
*/
|
|
8
|
+
export declare const RetrievedSkillBodySchema: Type.TObject<{
|
|
9
|
+
skillId: Type.TString;
|
|
10
|
+
name: Type.TString;
|
|
11
|
+
body: Type.TString;
|
|
12
|
+
}>;
|
|
13
|
+
export type RetrievedSkillBody = Static<typeof RetrievedSkillBodySchema>;
|
|
14
|
+
export declare const TaskOutcomeSchema: Type.TObject<{
|
|
15
|
+
verdict: Type.TUnion<[Type.TLiteral<"approved">, Type.TLiteral<"revision">, Type.TLiteral<"failed">, Type.TLiteral<"aborted">]>;
|
|
16
|
+
notes: Type.TOptional<Type.TString>;
|
|
17
|
+
}>;
|
|
18
|
+
export type TaskOutcome = Static<typeof TaskOutcomeSchema>;
|
|
19
|
+
export declare const CuratorInputSchema: Type.TObject<{
|
|
20
|
+
sprintId: Type.TString;
|
|
21
|
+
taskId: Type.TString;
|
|
22
|
+
cwd: Type.TString;
|
|
23
|
+
ts: Type.TString;
|
|
24
|
+
trajectorySummary: Type.TString;
|
|
25
|
+
retrievedSkills: Type.TArray<Type.TObject<{
|
|
26
|
+
skillId: Type.TString;
|
|
27
|
+
name: Type.TString;
|
|
28
|
+
body: Type.TString;
|
|
29
|
+
}>>;
|
|
30
|
+
outcome: Type.TObject<{
|
|
31
|
+
verdict: Type.TUnion<[Type.TLiteral<"approved">, Type.TLiteral<"revision">, Type.TLiteral<"failed">, Type.TLiteral<"aborted">]>;
|
|
32
|
+
notes: Type.TOptional<Type.TString>;
|
|
33
|
+
}>;
|
|
34
|
+
}>;
|
|
35
|
+
export type CuratorInput = Static<typeof CuratorInputSchema>;
|
|
36
|
+
/**
|
|
37
|
+
* The enhancement proposal schema accepted by this module — mirrors
|
|
38
|
+
* `forge/forge/schemas/proposal.schema.json` (the queue-drain contract).
|
|
39
|
+
* `op` is restricted to the canonical three-op enum; other fields are
|
|
40
|
+
* passed through verbatim if present.
|
|
41
|
+
*
|
|
42
|
+
* Strict on required keys (so malformed items are dropped), permissive on
|
|
43
|
+
* optional keys (so the curator can supply rationale, sourceFrictionIds,
|
|
44
|
+
* generated_at, etc., without us re-enumerating the entire schema here).
|
|
45
|
+
*/
|
|
46
|
+
declare const ProposalSchema: Type.TObject<{
|
|
47
|
+
op: Type.TUnion<[Type.TLiteral<"insert_skill">, Type.TLiteral<"update_skill">, Type.TLiteral<"delete_skill">]>;
|
|
48
|
+
target_path: Type.TString;
|
|
49
|
+
diff_body: Type.TString;
|
|
50
|
+
rationale: Type.TOptional<Type.TString>;
|
|
51
|
+
sourceFrictionIds: Type.TOptional<Type.TArray<Type.TString>>;
|
|
52
|
+
generated_at: Type.TOptional<Type.TString>;
|
|
53
|
+
sprintId: Type.TOptional<Type.TString>;
|
|
54
|
+
proposalId: Type.TOptional<Type.TString>;
|
|
55
|
+
}>;
|
|
56
|
+
export type Proposal = Static<typeof ProposalSchema>;
|
|
57
|
+
export interface CuratorResult {
|
|
58
|
+
exitCode: 0 | 1;
|
|
59
|
+
written: number;
|
|
60
|
+
queueFile?: string;
|
|
61
|
+
errorMessage?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Compose the first user message for the curator subagent. The body embeds
|
|
65
|
+
* the trajectory summary, retrieved-skill bodies, and task outcome, and
|
|
66
|
+
* instructs the curator to return zero or more proposals in a fenced JSON
|
|
67
|
+
* block. The schema is described inline so the curator does not need to
|
|
68
|
+
* read an external file.
|
|
69
|
+
*/
|
|
70
|
+
export declare function composeCuratorTask(input: CuratorInput): string;
|
|
71
|
+
/**
|
|
72
|
+
* Pull zero or more proposals from the curator's final assistant text.
|
|
73
|
+
* Strategy: try fenced ```json blocks first (the requested format), then
|
|
74
|
+
* fall back to a bare JSON array scan. Items that fail TypeBox validation
|
|
75
|
+
* are dropped — the failure mode for ill-formed proposals is silent
|
|
76
|
+
* exclusion, not exception, because the curator's output is best-effort.
|
|
77
|
+
*/
|
|
78
|
+
export declare function parseProposalsFromOutput(text: string): Proposal[];
|
|
79
|
+
/**
|
|
80
|
+
* Inline curator persona. We do NOT add a file under
|
|
81
|
+
* `forge/forge/meta/personas/` (Iron Law 1 — forge-cli only). The persona
|
|
82
|
+
* system prompt is small and self-contained; it tells the LLM to act as a
|
|
83
|
+
* skill curator and reiterates the output format and the no-write rule.
|
|
84
|
+
*
|
|
85
|
+
* The persona is exported so tests can introspect it; in production the
|
|
86
|
+
* defaultCuratorPersona() factory is consumed by runSkillCurator.
|
|
87
|
+
*/
|
|
88
|
+
export declare function defaultCuratorPersona(): ForgePersona;
|
|
89
|
+
/**
|
|
90
|
+
* Run the per-task curator subagent and write its proposals to the
|
|
91
|
+
* enhancement-proposals queue. Always returns a typed result; never throws
|
|
92
|
+
* on subagent failure (IL7).
|
|
93
|
+
*
|
|
94
|
+
* Caller (orchestrator) is responsible for:
|
|
95
|
+
* - assembling `retrievedSkills` from the T08 retriever's output;
|
|
96
|
+
* - assembling `trajectorySummary` from the task transcript;
|
|
97
|
+
* - emitting the canonical phase event AFTER this call returns,
|
|
98
|
+
* using its own captured runtime telemetry (Slice 2 contract).
|
|
99
|
+
*/
|
|
100
|
+
export declare function runSkillCurator(input: CuratorInput): Promise<CuratorResult>;
|
|
101
|
+
export {};
|