@slowcook-ai/cli 0.15.0-alpha.2 → 0.15.0-alpha.3
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/cli.js +9 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/plate/agent.d.ts +55 -0
- package/dist/commands/plate/agent.d.ts.map +1 -0
- package/dist/commands/plate/agent.js +75 -0
- package/dist/commands/plate/agent.js.map +1 -0
- package/dist/commands/plate/index.d.ts +12 -0
- package/dist/commands/plate/index.d.ts.map +1 -0
- package/dist/commands/plate/index.js +364 -0
- package/dist/commands/plate/index.js.map +1 -0
- package/dist/commands/plate/prompts.d.ts +6 -0
- package/dist/commands/plate/prompts.d.ts.map +1 -0
- package/dist/commands/plate/prompts.js +6 -0
- package/dist/commands/plate/prompts.js.map +1 -0
- package/package.json +5 -5
package/dist/cli.js
CHANGED
|
@@ -19,6 +19,7 @@ import { brew } from "./commands/brew/index.js";
|
|
|
19
19
|
import { map } from "./commands/map/index.js";
|
|
20
20
|
import { extract } from "./commands/extract/index.js";
|
|
21
21
|
import { vibe } from "./commands/vibe/index.js";
|
|
22
|
+
import { plate } from "./commands/plate/index.js";
|
|
22
23
|
import { dispatch } from "./commands/dispatch/index.js";
|
|
23
24
|
import { fixtures } from "./commands/fixtures/index.js";
|
|
24
25
|
// Read VERSION from package.json at runtime so the CLI's self-reported
|
|
@@ -55,6 +56,7 @@ Usage:
|
|
|
55
56
|
slowcook map (generate|check) [--cwd <path>] [--out <path>] [--md <path>]
|
|
56
57
|
slowcook extract [--schema] [--tokens] [--cwd <path>]
|
|
57
58
|
slowcook vibe --spec <id> [--cwd <path>] [--owner <login>] [--repo <name>] [--dry-run]
|
|
59
|
+
slowcook plate --pr <number> [--cwd <path>] [--owner <login>] [--repo <name>] [--review-comment-id <id>]
|
|
58
60
|
slowcook dispatch <step> [inputs...]
|
|
59
61
|
slowcook fixtures check [--max-age-days <n>] [--story <id>]
|
|
60
62
|
slowcook version
|
|
@@ -77,6 +79,7 @@ Commands available in ${VERSION}:
|
|
|
77
79
|
map Generate / check the repo-wide code map (APIs, pages, components, helpers, types).
|
|
78
80
|
extract Brownfield extracts (schema.mmd, tokens.md) for refine/investigate context. Fast, no node_modules.
|
|
79
81
|
vibe (0.15-α.1) Design-first mockup generator. Reads spec + brownfield + code-map; emits runnable React mockup to slowcook/mockup/story-N PR.
|
|
82
|
+
plate (0.15-α.3) Mockup amendment agent. Triggered by /plate PR comments on slowcook-mockup PRs; force-pushes amendments.
|
|
80
83
|
dispatch Trigger a slowcook GitHub Actions workflow remotely (brew / testgen / refine).
|
|
81
84
|
|
|
82
85
|
Coming in later versions:
|
|
@@ -165,6 +168,12 @@ async function main() {
|
|
|
165
168
|
// React mockup to slowcook/mockup/story-N branch + PR.
|
|
166
169
|
await vibe(args.slice(1), VERSION);
|
|
167
170
|
return;
|
|
171
|
+
case "plate":
|
|
172
|
+
// 0.15.0-α.3 — mockup amendment agent. Triggered by `/plate`
|
|
173
|
+
// PR comments on a slowcook-mockup PR; reads PM feedback +
|
|
174
|
+
// amends mockup files; force-pushes the same branch.
|
|
175
|
+
await plate(args.slice(1), VERSION);
|
|
176
|
+
return;
|
|
168
177
|
case "dispatch":
|
|
169
178
|
await dispatch(args.slice(1));
|
|
170
179
|
return;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,uEAAuE;AACvE,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAW,CAAC,GAAG,EAAE;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plate agent — mockup-amendment loop (0.15.0-α.3).
|
|
3
|
+
*
|
|
4
|
+
* Single-shot LLM call per `/plate` trigger. Reads PR comments + image
|
|
5
|
+
* attachments since the last plate commit, amends mockup files with
|
|
6
|
+
* minimum diff, returns the parsed result for the index.ts wrapper to
|
|
7
|
+
* write + force-push.
|
|
8
|
+
*
|
|
9
|
+
* Same shape as vibe's agent but accepts vision-message inputs (image
|
|
10
|
+
* blocks alongside text). No format-compliance retry — plate is mid-
|
|
11
|
+
* iteration; if the model emits prose-only on round 1, the calling
|
|
12
|
+
* dispatch surfaces the problem to the PM via a comment ("plate
|
|
13
|
+
* couldn't parse a response — re-run with `/plate` to retry").
|
|
14
|
+
*/
|
|
15
|
+
import { type PlateFeedback } from "./prompts.js";
|
|
16
|
+
import { type VibeChangeRequest, type VibeFileBlock } from "../vibe/emit.js";
|
|
17
|
+
export interface PlateContext {
|
|
18
|
+
repoRoot: string;
|
|
19
|
+
anthropicApiKey: string;
|
|
20
|
+
model: string;
|
|
21
|
+
storyId: string;
|
|
22
|
+
prNumber: number;
|
|
23
|
+
cliVersion: string;
|
|
24
|
+
/** Pre-rendered project-context blob (same shape as vibe). */
|
|
25
|
+
projectContext: string;
|
|
26
|
+
/** Spec YAML, for context only. */
|
|
27
|
+
specYaml: string;
|
|
28
|
+
/** Current state of mockup files on the branch. */
|
|
29
|
+
currentFiles: Array<{
|
|
30
|
+
path: string;
|
|
31
|
+
contents: string;
|
|
32
|
+
}>;
|
|
33
|
+
/** PM feedback to act on. */
|
|
34
|
+
feedback: PlateFeedback;
|
|
35
|
+
}
|
|
36
|
+
export type PlateResult = {
|
|
37
|
+
kind: "amended";
|
|
38
|
+
files: VibeFileBlock[];
|
|
39
|
+
changeRequests: VibeChangeRequest[];
|
|
40
|
+
summary: string;
|
|
41
|
+
spendUsd: number;
|
|
42
|
+
} | {
|
|
43
|
+
kind: "no-op";
|
|
44
|
+
summary: string;
|
|
45
|
+
spendUsd: number;
|
|
46
|
+
} | {
|
|
47
|
+
kind: "format-failure";
|
|
48
|
+
finalText: string;
|
|
49
|
+
spendUsd: number;
|
|
50
|
+
};
|
|
51
|
+
/** Extract the optional `<plate_summary>` block. */
|
|
52
|
+
declare function parsePlateSummary(body: string): string | null;
|
|
53
|
+
export declare function runPlate(ctx: PlateContext): Promise<PlateResult>;
|
|
54
|
+
export { parsePlateSummary };
|
|
55
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/plate/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAKzB,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,6BAA6B;IAC7B,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN,oDAAoD;AACpD,iBAAS,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGtD;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA6CtE;AAeD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plate agent — mockup-amendment loop (0.15.0-α.3).
|
|
3
|
+
*
|
|
4
|
+
* Single-shot LLM call per `/plate` trigger. Reads PR comments + image
|
|
5
|
+
* attachments since the last plate commit, amends mockup files with
|
|
6
|
+
* minimum diff, returns the parsed result for the index.ts wrapper to
|
|
7
|
+
* write + force-push.
|
|
8
|
+
*
|
|
9
|
+
* Same shape as vibe's agent but accepts vision-message inputs (image
|
|
10
|
+
* blocks alongside text). No format-compliance retry — plate is mid-
|
|
11
|
+
* iteration; if the model emits prose-only on round 1, the calling
|
|
12
|
+
* dispatch surfaces the problem to the PM via a comment ("plate
|
|
13
|
+
* couldn't parse a response — re-run with `/plate` to retry").
|
|
14
|
+
*/
|
|
15
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
16
|
+
import { PLATE_AMENDMENT_SYSTEM, buildPlateAmendmentPrompt, } from "./prompts.js";
|
|
17
|
+
import { parseVibeOutput, } from "../vibe/emit.js";
|
|
18
|
+
import { costUsdForUsage } from "@slowcook-ai/llm-anthropic";
|
|
19
|
+
const MAX_TOKENS = 8192;
|
|
20
|
+
/** Extract the optional `<plate_summary>` block. */
|
|
21
|
+
function parsePlateSummary(body) {
|
|
22
|
+
const m = body.match(/<plate_summary>([\s\S]*?)<\/plate_summary>/);
|
|
23
|
+
return m ? m[1].trim() : null;
|
|
24
|
+
}
|
|
25
|
+
export async function runPlate(ctx) {
|
|
26
|
+
const anthropic = new Anthropic({ apiKey: ctx.anthropicApiKey });
|
|
27
|
+
const userBlocks = buildPlateAmendmentPrompt({
|
|
28
|
+
storyId: ctx.storyId,
|
|
29
|
+
prNumber: ctx.prNumber,
|
|
30
|
+
specYaml: ctx.specYaml,
|
|
31
|
+
currentFiles: ctx.currentFiles,
|
|
32
|
+
feedback: ctx.feedback,
|
|
33
|
+
});
|
|
34
|
+
const response = await anthropic.messages.create({
|
|
35
|
+
model: ctx.model,
|
|
36
|
+
max_tokens: MAX_TOKENS,
|
|
37
|
+
system: PLATE_AMENDMENT_SYSTEM(ctx.projectContext),
|
|
38
|
+
messages: [{ role: "user", content: userBlocks }],
|
|
39
|
+
});
|
|
40
|
+
const spendUsd = costUsd(response, ctx.model);
|
|
41
|
+
let finalText = "";
|
|
42
|
+
for (const block of response.content) {
|
|
43
|
+
if (block.type === "text")
|
|
44
|
+
finalText = block.text;
|
|
45
|
+
}
|
|
46
|
+
const parsed = parseVibeOutput(finalText);
|
|
47
|
+
const summary = parsePlateSummary(finalText) ?? "";
|
|
48
|
+
// No-op case: summary present but no file blocks. Plate explicitly
|
|
49
|
+
// chose not to amend (because feedback was answered by existing state,
|
|
50
|
+
// or it surfaced a clarifying question). We still post the summary.
|
|
51
|
+
if (parsed.files.length === 0) {
|
|
52
|
+
if (summary) {
|
|
53
|
+
return { kind: "no-op", summary, spendUsd };
|
|
54
|
+
}
|
|
55
|
+
return { kind: "format-failure", finalText, spendUsd };
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
kind: "amended",
|
|
59
|
+
files: parsed.files,
|
|
60
|
+
changeRequests: parsed.changeRequests,
|
|
61
|
+
summary: summary || "(no summary block emitted)",
|
|
62
|
+
spendUsd,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function costUsd(response, model) {
|
|
66
|
+
const usage = response.usage;
|
|
67
|
+
return costUsdForUsage(model, {
|
|
68
|
+
inputTokens: usage.input_tokens,
|
|
69
|
+
outputTokens: usage.output_tokens,
|
|
70
|
+
cacheReadTokens: usage.cache_read_input_tokens ?? 0,
|
|
71
|
+
cacheCreateTokens: usage.cache_creation_input_tokens ?? 0,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export { parsePlateSummary };
|
|
75
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/commands/plate/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook plate --pr <number>` — 0.15.0-α.3.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `slowcook refine --pr` for the mockup branch. Triggered by
|
|
5
|
+
* `/plate <prose>` PR comments + reviews on a slowcook-mockup PR.
|
|
6
|
+
*
|
|
7
|
+
* α.3 ships without screenshot-attachment vision (text-only feedback).
|
|
8
|
+
* Vision support (PlateImageAttachment) is wired in the prompt + agent
|
|
9
|
+
* but the index doesn't fetch image attachments yet — coming α.3.1.
|
|
10
|
+
*/
|
|
11
|
+
export declare function plate(argv: string[], cliVersion: string): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/plate/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA8OH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiM7E"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook plate --pr <number>` — 0.15.0-α.3.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `slowcook refine --pr` for the mockup branch. Triggered by
|
|
5
|
+
* `/plate <prose>` PR comments + reviews on a slowcook-mockup PR.
|
|
6
|
+
*
|
|
7
|
+
* α.3 ships without screenshot-attachment vision (text-only feedback).
|
|
8
|
+
* Vision support (PlateImageAttachment) is wired in the prompt + agent
|
|
9
|
+
* but the index doesn't fetch image attachments yet — coming α.3.1.
|
|
10
|
+
*/
|
|
11
|
+
import { execSync } from "node:child_process";
|
|
12
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
13
|
+
import { join } from "node:path";
|
|
14
|
+
import { GitHubAdapter } from "@slowcook-ai/forge-github";
|
|
15
|
+
import { runPlate } from "./agent.js";
|
|
16
|
+
import { writeVibeFiles } from "../vibe/emit.js";
|
|
17
|
+
function parseArgs(argv) {
|
|
18
|
+
const args = {
|
|
19
|
+
prNumber: -1,
|
|
20
|
+
repoRoot: process.cwd(),
|
|
21
|
+
model: "claude-opus-4-7",
|
|
22
|
+
};
|
|
23
|
+
for (let i = 0; i < argv.length; i++) {
|
|
24
|
+
const a = argv[i];
|
|
25
|
+
const next = argv[i + 1];
|
|
26
|
+
if (a === "--pr" && next) {
|
|
27
|
+
args.prNumber = parseInt(next, 10);
|
|
28
|
+
i++;
|
|
29
|
+
}
|
|
30
|
+
else if (a === "--cwd" && next) {
|
|
31
|
+
args.repoRoot = next;
|
|
32
|
+
i++;
|
|
33
|
+
}
|
|
34
|
+
else if (a === "--owner" && next) {
|
|
35
|
+
args.owner = next;
|
|
36
|
+
i++;
|
|
37
|
+
}
|
|
38
|
+
else if (a === "--repo" && next) {
|
|
39
|
+
args.repo = next;
|
|
40
|
+
i++;
|
|
41
|
+
}
|
|
42
|
+
else if (a === "--model" && next) {
|
|
43
|
+
args.model = next;
|
|
44
|
+
i++;
|
|
45
|
+
}
|
|
46
|
+
else if (a === "--review-comment-id" && next) {
|
|
47
|
+
args.reviewCommentId = parseInt(next, 10);
|
|
48
|
+
i++;
|
|
49
|
+
}
|
|
50
|
+
else if (a === "--help" || a === "-h") {
|
|
51
|
+
printHelp();
|
|
52
|
+
process.exit(0);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (!Number.isFinite(args.prNumber) || args.prNumber <= 0) {
|
|
56
|
+
console.error("--pr <number> is required.");
|
|
57
|
+
printHelp();
|
|
58
|
+
process.exit(64);
|
|
59
|
+
}
|
|
60
|
+
return args;
|
|
61
|
+
}
|
|
62
|
+
function printHelp() {
|
|
63
|
+
console.log(`
|
|
64
|
+
slowcook plate — mockup amendment agent (0.15 plate-pipeline α.3)
|
|
65
|
+
|
|
66
|
+
Reads PR comments + review comments since the last plate commit on a
|
|
67
|
+
slowcook-mockup PR; amends mockup files with minimum diff; force-pushes
|
|
68
|
+
the same branch. Triggered by \`/plate <prose>\` PR comments.
|
|
69
|
+
|
|
70
|
+
Usage:
|
|
71
|
+
slowcook plate --pr <number> [--cwd <path>] [--owner <login>] [--repo <name>]
|
|
72
|
+
[--model <id>] [--review-comment-id <id>]
|
|
73
|
+
|
|
74
|
+
Options:
|
|
75
|
+
--pr <number> The mockup PR number. REQUIRED.
|
|
76
|
+
--cwd <path> Repo root (default: cwd).
|
|
77
|
+
--owner <login> GitHub owner (default: detect from git remote).
|
|
78
|
+
--repo <name> GitHub repo (default: detect from git remote).
|
|
79
|
+
--model <id> Anthropic model (default: claude-opus-4-7).
|
|
80
|
+
--review-comment-id <id> Reply threaded under this inline comment id.
|
|
81
|
+
|
|
82
|
+
Environment:
|
|
83
|
+
ANTHROPIC_API_KEY (required) Anthropic API key.
|
|
84
|
+
GITHUB_TOKEN (required) for fetching PR comments + force-push.
|
|
85
|
+
`);
|
|
86
|
+
}
|
|
87
|
+
function detectOwnerRepo(cwd) {
|
|
88
|
+
try {
|
|
89
|
+
const url = execSync("git remote get-url origin", {
|
|
90
|
+
cwd,
|
|
91
|
+
encoding: "utf8",
|
|
92
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
93
|
+
}).trim();
|
|
94
|
+
const m = url.match(/github\.com[:/]([^/]+)\/([^/.]+)(?:\.git)?$/);
|
|
95
|
+
if (m && m[1] && m[2])
|
|
96
|
+
return { owner: m[1], repo: m[2] };
|
|
97
|
+
}
|
|
98
|
+
catch { /* not a git repo */ }
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
function buildProjectContext(repoRoot) {
|
|
102
|
+
// Same shape as vibe's. Kept inline rather than imported to keep the
|
|
103
|
+
// two commands' coupling at the prompt layer only (project-context
|
|
104
|
+
// construction may diverge between vibe and plate later).
|
|
105
|
+
const sections = [];
|
|
106
|
+
for (const [path, heading, note] of [
|
|
107
|
+
[
|
|
108
|
+
".brewing/diagrams/schema.mmd",
|
|
109
|
+
"Existing schema (extracted from `supabase/migrations/*.sql`)",
|
|
110
|
+
"Reuse entity names verbatim.",
|
|
111
|
+
],
|
|
112
|
+
[
|
|
113
|
+
".brewing/diagrams/tokens.md",
|
|
114
|
+
"Existing design tokens (extracted from `**/*.css`)",
|
|
115
|
+
"Reuse tokens by exact name; do NOT introduce new hex/rgb.",
|
|
116
|
+
],
|
|
117
|
+
[
|
|
118
|
+
".brewing/code-map.md",
|
|
119
|
+
"Code-map (existing components, pages, helpers)",
|
|
120
|
+
"Reuse components by import path; never duplicate primitives.",
|
|
121
|
+
],
|
|
122
|
+
]) {
|
|
123
|
+
const fp = join(repoRoot, path);
|
|
124
|
+
if (!existsSync(fp))
|
|
125
|
+
continue;
|
|
126
|
+
try {
|
|
127
|
+
const c = readFileSync(fp, "utf8").trim();
|
|
128
|
+
sections.push(`## ${heading}\n\n${c}\n\n${note}`);
|
|
129
|
+
}
|
|
130
|
+
catch { /* skip */ }
|
|
131
|
+
}
|
|
132
|
+
if (sections.length === 0) {
|
|
133
|
+
return "_(No `.brewing/diagrams/` or `.brewing/code-map.md` extracts found. Plate will run blind.)_";
|
|
134
|
+
}
|
|
135
|
+
return sections.join("\n\n---\n\n");
|
|
136
|
+
}
|
|
137
|
+
function fetchPrMeta(prNumber) {
|
|
138
|
+
const json = execSync(`gh pr view ${prNumber} --json number,headRefName,baseRefName,labels`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
139
|
+
const parsed = JSON.parse(json);
|
|
140
|
+
return {
|
|
141
|
+
number: parsed.number,
|
|
142
|
+
headBranch: parsed.headRefName,
|
|
143
|
+
baseBranch: parsed.baseRefName,
|
|
144
|
+
labels: parsed.labels.map((l) => l.name),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function fetchTimelineComments(prNumber) {
|
|
148
|
+
const json = execSync(`gh api repos/{owner}/{repo}/issues/${prNumber}/comments --paginate`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
149
|
+
const arr = JSON.parse(json);
|
|
150
|
+
return arr
|
|
151
|
+
.filter((c) => c.user.type !== "Bot")
|
|
152
|
+
.map((c) => ({ author: c.user.login, body: c.body, createdAt: c.created_at }));
|
|
153
|
+
}
|
|
154
|
+
function fetchInlineComments(prNumber) {
|
|
155
|
+
const json = execSync(`gh api repos/{owner}/{repo}/pulls/${prNumber}/comments --paginate`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
156
|
+
const arr = JSON.parse(json);
|
|
157
|
+
return arr
|
|
158
|
+
.filter((c) => c.user.type !== "Bot")
|
|
159
|
+
.map((c) => ({
|
|
160
|
+
author: c.user.login,
|
|
161
|
+
body: c.body,
|
|
162
|
+
createdAt: c.created_at,
|
|
163
|
+
path: c.path,
|
|
164
|
+
line: c.line ?? undefined,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
function lastPlateCommitDate(repoRoot, branch) {
|
|
168
|
+
try {
|
|
169
|
+
const out = execSync(`git -C ${JSON.stringify(repoRoot)} log -1 --format=%aI --author="slowcook-plate\\[bot\\]" ${JSON.stringify(branch)}`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
|
|
170
|
+
return out || null;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function listBranchFiles(repoRoot, branch) {
|
|
177
|
+
// Files plate is allowed to amend live under src/ + src/lib/data/*.mock.ts.
|
|
178
|
+
// We list everything under src/ on the branch and let the agent's own
|
|
179
|
+
// hard rules govern what to amend.
|
|
180
|
+
const out = [];
|
|
181
|
+
const patterns = ["src/**/*.tsx", "src/**/*.ts"];
|
|
182
|
+
for (const pat of patterns) {
|
|
183
|
+
const lsOut = execSync(`git -C ${JSON.stringify(repoRoot)} ls-tree -r --name-only ${JSON.stringify(branch)} -- ${JSON.stringify(pat)}`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
184
|
+
for (const line of lsOut.split("\n")) {
|
|
185
|
+
const trimmed = line.trim();
|
|
186
|
+
if (!trimmed)
|
|
187
|
+
continue;
|
|
188
|
+
// Only include files that vibe would have written: page.tsx,
|
|
189
|
+
// src/components/**, src/lib/data/*.mock.ts. Skip the brew-target
|
|
190
|
+
// <domain>.ts stubs (plate must not touch them).
|
|
191
|
+
const isPage = /\/page\.tsx$/.test(trimmed);
|
|
192
|
+
const isComponent = trimmed.startsWith("src/components/");
|
|
193
|
+
const isMockData = /^src\/lib\/data\/[^/]+\.mock\.ts$/.test(trimmed);
|
|
194
|
+
if (!isPage && !isComponent && !isMockData)
|
|
195
|
+
continue;
|
|
196
|
+
try {
|
|
197
|
+
const contents = execSync(`git -C ${JSON.stringify(repoRoot)} show ${JSON.stringify(branch + ":" + trimmed)}`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
198
|
+
out.push({ path: trimmed, contents });
|
|
199
|
+
}
|
|
200
|
+
catch { /* skip files git can't show (binary, deleted) */ }
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return out;
|
|
204
|
+
}
|
|
205
|
+
export async function plate(argv, cliVersion) {
|
|
206
|
+
const args = parseArgs(argv);
|
|
207
|
+
const anthropicApiKey = process.env["ANTHROPIC_API_KEY"];
|
|
208
|
+
const githubToken = process.env["GITHUB_TOKEN"];
|
|
209
|
+
if (!anthropicApiKey || !githubToken) {
|
|
210
|
+
console.error("ANTHROPIC_API_KEY + GITHUB_TOKEN environment variables are required.");
|
|
211
|
+
process.exit(2);
|
|
212
|
+
}
|
|
213
|
+
let owner = args.owner;
|
|
214
|
+
let repo = args.repo;
|
|
215
|
+
if (!owner || !repo) {
|
|
216
|
+
const detected = detectOwnerRepo(args.repoRoot);
|
|
217
|
+
if (!detected) {
|
|
218
|
+
console.error("Could not detect owner/repo from git remote. Pass --owner and --repo.");
|
|
219
|
+
process.exit(2);
|
|
220
|
+
}
|
|
221
|
+
owner = owner ?? detected.owner;
|
|
222
|
+
repo = repo ?? detected.repo;
|
|
223
|
+
}
|
|
224
|
+
const pr = fetchPrMeta(args.prNumber);
|
|
225
|
+
if (!pr.labels.includes("slowcook-mockup")) {
|
|
226
|
+
console.error(`PR #${pr.number} is not labeled \`slowcook-mockup\` (labels: ${pr.labels.join(", ")}). plate only acts on mockup PRs.`);
|
|
227
|
+
process.exit(2);
|
|
228
|
+
}
|
|
229
|
+
if (!pr.headBranch.startsWith("slowcook/mockup/story-")) {
|
|
230
|
+
console.error(`PR #${pr.number} head branch '${pr.headBranch}' doesn't match slowcook/mockup/story-N convention. Refusing to act.`);
|
|
231
|
+
process.exit(2);
|
|
232
|
+
}
|
|
233
|
+
const storyId = pr.headBranch.replace(/^slowcook\/mockup\/story-/, "");
|
|
234
|
+
// Fetch the spec from main (the source of truth).
|
|
235
|
+
execSync(`git -C ${JSON.stringify(args.repoRoot)} fetch origin main`, {
|
|
236
|
+
stdio: ["ignore", "ignore", "pipe"],
|
|
237
|
+
});
|
|
238
|
+
let specYaml = "";
|
|
239
|
+
try {
|
|
240
|
+
specYaml = execSync(`git -C ${JSON.stringify(args.repoRoot)} show origin/main:specs/story-${storyId}.yaml`, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] });
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
console.error(`Spec for story-${storyId} not found on origin/main. Did the spec PR merge?`);
|
|
244
|
+
process.exit(2);
|
|
245
|
+
}
|
|
246
|
+
// Project context (brownfield + code-map). For plate we need them
|
|
247
|
+
// current — extract first.
|
|
248
|
+
console.log("Refreshing brownfield extracts + code-map...");
|
|
249
|
+
try {
|
|
250
|
+
execSync(`node ${JSON.stringify(process.argv[1])} extract`, {
|
|
251
|
+
cwd: args.repoRoot,
|
|
252
|
+
stdio: "inherit",
|
|
253
|
+
});
|
|
254
|
+
execSync(`node ${JSON.stringify(process.argv[1])} map generate`, {
|
|
255
|
+
cwd: args.repoRoot,
|
|
256
|
+
stdio: "inherit",
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
catch (e) {
|
|
260
|
+
console.warn(`extract/map refresh failed (${e.message}); plate will use stale or empty context.`);
|
|
261
|
+
}
|
|
262
|
+
const projectContext = buildProjectContext(args.repoRoot);
|
|
263
|
+
// Fetch + checkout the mockup branch into the working tree.
|
|
264
|
+
execSync(`git -C ${JSON.stringify(args.repoRoot)} fetch origin ${JSON.stringify(pr.headBranch)}`, { stdio: ["ignore", "ignore", "pipe"] });
|
|
265
|
+
execSync(`git -C ${JSON.stringify(args.repoRoot)} checkout ${JSON.stringify(pr.headBranch)}`, { stdio: ["ignore", "ignore", "pipe"] });
|
|
266
|
+
// Read the current mockup files.
|
|
267
|
+
const currentFiles = listBranchFiles(args.repoRoot, pr.headBranch);
|
|
268
|
+
console.log(`Loaded ${currentFiles.length} mockup file(s) from branch ${pr.headBranch}.`);
|
|
269
|
+
// Fetch PM feedback. For α.3 we include EVERYTHING since the PR was
|
|
270
|
+
// opened (no since-last-plate-commit cutoff). Idempotent enough for
|
|
271
|
+
// single iterations; α.3.1 adds the cutoff.
|
|
272
|
+
const cutoffDate = lastPlateCommitDate(args.repoRoot, pr.headBranch);
|
|
273
|
+
if (cutoffDate) {
|
|
274
|
+
console.log(`Filtering feedback to comments newer than last plate commit at ${cutoffDate}.`);
|
|
275
|
+
}
|
|
276
|
+
const filterByDate = (c) => cutoffDate ? c.createdAt > cutoffDate : true;
|
|
277
|
+
const feedback = {
|
|
278
|
+
timelineComments: fetchTimelineComments(pr.number).filter(filterByDate),
|
|
279
|
+
inlineComments: fetchInlineComments(pr.number).filter(filterByDate),
|
|
280
|
+
screenshots: [], // α.3.1 will populate from comment attachments
|
|
281
|
+
};
|
|
282
|
+
console.log(`Feedback to act on: ${feedback.timelineComments.length} timeline comment(s), ${feedback.inlineComments.length} inline comment(s).`);
|
|
283
|
+
if (feedback.timelineComments.length === 0 && feedback.inlineComments.length === 0) {
|
|
284
|
+
console.log("Nothing to amend. Exiting cleanly.");
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const ctx = {
|
|
288
|
+
repoRoot: args.repoRoot,
|
|
289
|
+
anthropicApiKey,
|
|
290
|
+
model: args.model,
|
|
291
|
+
storyId,
|
|
292
|
+
prNumber: pr.number,
|
|
293
|
+
cliVersion,
|
|
294
|
+
projectContext,
|
|
295
|
+
specYaml,
|
|
296
|
+
currentFiles,
|
|
297
|
+
feedback,
|
|
298
|
+
};
|
|
299
|
+
console.log(`Running plate (model: ${args.model})...`);
|
|
300
|
+
const result = await runPlate(ctx);
|
|
301
|
+
if (result.kind === "format-failure") {
|
|
302
|
+
console.error(`Plate emitted no parseable output. Spend: $${result.spendUsd.toFixed(4)}.`);
|
|
303
|
+
if (process.env["SLOWCOOK_DEBUG"]) {
|
|
304
|
+
console.error("\n--- agent's final text ---\n");
|
|
305
|
+
console.error(result.finalText);
|
|
306
|
+
}
|
|
307
|
+
process.exit(1);
|
|
308
|
+
}
|
|
309
|
+
const forge = new GitHubAdapter({ owner, repo, token: githubToken });
|
|
310
|
+
if (result.kind === "no-op") {
|
|
311
|
+
console.log(`Plate decided not to amend (spend $${result.spendUsd.toFixed(4)}). Posting summary as PR reply.`);
|
|
312
|
+
await forge.createIssueComment(pr.number, plateReplyBody(result.summary, result.spendUsd, cliVersion, []));
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
// Amended: write files + commit + force-push.
|
|
316
|
+
console.log(`Plate amended ${result.files.length} file(s) (spend $${result.spendUsd.toFixed(4)}). Writing + committing.`);
|
|
317
|
+
const written = writeVibeFiles(args.repoRoot, result.files);
|
|
318
|
+
// Configure git identity.
|
|
319
|
+
try {
|
|
320
|
+
execSync(`git -C ${JSON.stringify(args.repoRoot)} config user.name "slowcook-plate[bot]"`);
|
|
321
|
+
execSync(`git -C ${JSON.stringify(args.repoRoot)} config user.email "slowcook-plate@users.noreply.github.com"`);
|
|
322
|
+
}
|
|
323
|
+
catch { /* assume parent already configured */ }
|
|
324
|
+
for (const p of written)
|
|
325
|
+
await forge.git.stage(p);
|
|
326
|
+
if (forge.git.hasStagedChanges) {
|
|
327
|
+
const changed = await forge.git.hasStagedChanges();
|
|
328
|
+
if (!changed) {
|
|
329
|
+
console.log("No-op amendment (re-emitted byte-identical files). Posting note instead of commit.");
|
|
330
|
+
await forge.createIssueComment(pr.number, plateReplyBody(`${result.summary}\n\n_(plate produced byte-identical files — no commit. Re-comment with sharper feedback if you wanted a change.)_`, result.spendUsd, cliVersion, result.changeRequests.map((cr) => ({ component: cr.component, path: cr.path, rationale: cr.rationale }))));
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
await forge.git.commit(`plate: amend story-${storyId} mockup per PR #${pr.number} feedback\n\nGenerated by slowcook plate@${cliVersion}.\n`);
|
|
335
|
+
// Force-push: the mockup branch is plate's working state and may be
|
|
336
|
+
// amended repeatedly across iterations. Same shape as refine's
|
|
337
|
+
// amendment force-push pattern.
|
|
338
|
+
execSync(`git -C ${JSON.stringify(args.repoRoot)} push --force-with-lease origin ${JSON.stringify(pr.headBranch)}`, { stdio: "inherit" });
|
|
339
|
+
await forge.createIssueComment(pr.number, plateReplyBody(result.summary, result.spendUsd, cliVersion, result.changeRequests.map((cr) => ({ component: cr.component, path: cr.path, rationale: cr.rationale }))));
|
|
340
|
+
console.log(`Plate amendment pushed + summary posted on PR #${pr.number}.`);
|
|
341
|
+
}
|
|
342
|
+
function plateReplyBody(summary, spendUsd, cliVersion, changeRequests) {
|
|
343
|
+
const parts = [];
|
|
344
|
+
parts.push("### slowcook · plate amendment");
|
|
345
|
+
parts.push("");
|
|
346
|
+
parts.push(summary);
|
|
347
|
+
if (changeRequests.length > 0) {
|
|
348
|
+
parts.push("");
|
|
349
|
+
parts.push("#### Component-change requests surfaced");
|
|
350
|
+
parts.push("");
|
|
351
|
+
parts.push("These structural changes to existing primitives need PM approval before plate can apply them. Comment / amend the spec to authorize:");
|
|
352
|
+
parts.push("");
|
|
353
|
+
for (const cr of changeRequests) {
|
|
354
|
+
parts.push(`- **\`${cr.component}\`** (\`${cr.path}\`)`);
|
|
355
|
+
parts.push("");
|
|
356
|
+
parts.push(` ${cr.rationale.replace(/\n/g, "\n ")}`);
|
|
357
|
+
parts.push("");
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
parts.push("");
|
|
361
|
+
parts.push(`<!-- slowcook:cost agent=plate usd=${spendUsd.toFixed(4)} model=claude-opus-4-7 cli=${cliVersion} -->`);
|
|
362
|
+
return parts.join("\n");
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/plate/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-export shim — see investigate/prompts.ts for the rationale.
|
|
3
|
+
* Source of truth: `@slowcook-ai/llm-anthropic/prompts/plate`.
|
|
4
|
+
*/
|
|
5
|
+
export { PLATE_AMENDMENT_SYSTEM, PLATE_TOOLS, buildPlateAmendmentPrompt, type PlateAmendmentPromptArgs, type PlateFeedback, type PlateImageAttachment, type PlateImageMediaType, } from "@slowcook-ai/llm-anthropic";
|
|
6
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/plate/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,yBAAyB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-export shim — see investigate/prompts.ts for the rationale.
|
|
3
|
+
* Source of truth: `@slowcook-ai/llm-anthropic/prompts/plate`.
|
|
4
|
+
*/
|
|
5
|
+
export { PLATE_AMENDMENT_SYSTEM, PLATE_TOOLS, buildPlateAmendmentPrompt, } from "@slowcook-ai/llm-anthropic";
|
|
6
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/plate/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,yBAAyB,GAK1B,MAAM,4BAA4B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slowcook-ai/cli",
|
|
3
|
-
"version": "0.15.0-alpha.
|
|
3
|
+
"version": "0.15.0-alpha.3",
|
|
4
4
|
"description": "CLI for the slowcook brewing harness",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "aminazar",
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
"ts-morph": "^24.0.0",
|
|
39
39
|
"yaml": "^2.6.0",
|
|
40
40
|
"zod": "^3.23.8",
|
|
41
|
-
"@slowcook-ai/core": "^0.12.0",
|
|
42
41
|
"@slowcook-ai/stack-ts": "^0.9.6",
|
|
43
|
-
"@slowcook-ai/llm-anthropic": "^0.
|
|
44
|
-
"@slowcook-ai/
|
|
45
|
-
"@slowcook-ai/recorder": "^0.9.1"
|
|
42
|
+
"@slowcook-ai/llm-anthropic": "^0.11.0",
|
|
43
|
+
"@slowcook-ai/core": "^0.12.0",
|
|
44
|
+
"@slowcook-ai/recorder": "^0.9.1",
|
|
45
|
+
"@slowcook-ai/forge-github": "^0.10.3"
|
|
46
46
|
},
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public"
|