@slowcook-ai/cli 0.15.0-alpha.2 → 0.15.0-alpha.4

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.
@@ -13,6 +13,7 @@ function parseArgs(argv) {
13
13
  wallClockMs: 60 * 60 * 1000, // 1 hour
14
14
  model: "claude-sonnet-4-6",
15
15
  baseBranch: "main",
16
+ mode: "auto",
16
17
  };
17
18
  for (let i = 0; i < argv.length; i++) {
18
19
  const arg = argv[i];
@@ -53,6 +54,14 @@ function parseArgs(argv) {
53
54
  args.baseBranch = next;
54
55
  i++;
55
56
  }
57
+ else if (arg === "--mode" && next) {
58
+ if (next !== "auto" && next !== "plate" && next !== "legacy") {
59
+ console.error(`--mode must be one of: auto, plate, legacy. Got: ${next}`);
60
+ process.exit(64);
61
+ }
62
+ args.mode = next;
63
+ i++;
64
+ }
56
65
  else if (arg === "--help" || arg === "-h") {
57
66
  printHelp();
58
67
  process.exit(0);
@@ -99,6 +108,77 @@ Exit codes:
99
108
  2 script error (missing env, bad args, etc.)
100
109
  `);
101
110
  }
111
+ /**
112
+ * 0.15.0-α.4 — resolve brew's execution mode.
113
+ *
114
+ * `requested === "plate"` or `"legacy"` → return as-is.
115
+ *
116
+ * `requested === "auto"` → detect from spec + GitHub state:
117
+ * plate-mode requires BOTH (a) the spec has at least one populated
118
+ * `proposals.fixtures.by_domain.<domain>` entry (UI surface), AND (b)
119
+ * a slowcook-mockup PR for this story has been merged on the repo.
120
+ * If either condition is unmet → legacy.
121
+ *
122
+ * GitHub check uses `gh pr list` to look for closed PRs whose head
123
+ * branch matches `slowcook/mockup/story-<id>`. Cheaper than fetching
124
+ * a single PR by branch name (which 404s instead of returning empty).
125
+ */
126
+ async function resolveBrewMode(args) {
127
+ if (args.requested === "plate")
128
+ return "plate";
129
+ if (args.requested === "legacy")
130
+ return "legacy";
131
+ // auto path
132
+ const specPath = join(args.repoRoot, "specs", `story-${args.storyId}.yaml`);
133
+ let specYaml = "";
134
+ try {
135
+ specYaml = require("node:fs").readFileSync(specPath, "utf8");
136
+ }
137
+ catch {
138
+ return "legacy";
139
+ }
140
+ // Same hasUiSurface heuristic as the vibe command.
141
+ const proposalsIdx = specYaml.search(/^proposals\s*:\s*$/m);
142
+ if (proposalsIdx < 0)
143
+ return "legacy";
144
+ const tail = specYaml.slice(proposalsIdx);
145
+ const fixturesMatch = tail.match(/^(\s+)fixtures\s*:\s*$/m);
146
+ if (!fixturesMatch)
147
+ return "legacy";
148
+ const fixturesBlockStart = tail.indexOf(fixturesMatch[0]) + fixturesMatch[0].length;
149
+ const byDomainMatch = tail
150
+ .slice(fixturesBlockStart)
151
+ .match(/^(\s+)by_domain\s*:\s*$/m);
152
+ if (!byDomainMatch)
153
+ return "legacy";
154
+ const byDomainIndentLen = byDomainMatch[1].length;
155
+ const after = tail.slice(fixturesBlockStart +
156
+ tail.slice(fixturesBlockStart).indexOf(byDomainMatch[0]) +
157
+ byDomainMatch[0].length);
158
+ const entryRe = new RegExp(`^( {${byDomainIndentLen + 1},}|\\t+)([a-z][a-z0-9_-]*)\\s*:\\s*$`, "m");
159
+ if (!entryRe.test(after))
160
+ return "legacy";
161
+ // Check for a merged slowcook-mockup PR.
162
+ try {
163
+ const branch = `slowcook/mockup/story-${args.storyId}`;
164
+ const out = execSync(`gh pr list --state merged --head ${JSON.stringify(branch)} --json number --limit 1`, {
165
+ cwd: args.repoRoot,
166
+ encoding: "utf8",
167
+ env: { ...process.env, GH_TOKEN: args.githubToken },
168
+ stdio: ["ignore", "pipe", "ignore"],
169
+ }).trim();
170
+ const arr = JSON.parse(out);
171
+ if (arr.length === 0) {
172
+ console.log(`(brew auto-detect: spec has fixtures but no merged slowcook-mockup PR for story-${args.storyId} found → legacy mode)`);
173
+ return "legacy";
174
+ }
175
+ return "plate";
176
+ }
177
+ catch (e) {
178
+ console.warn(`(brew auto-detect: gh pr list failed — ${e.message}; defaulting to legacy)`);
179
+ return "legacy";
180
+ }
181
+ }
102
182
  function detectOwnerRepo(cwd) {
103
183
  try {
104
184
  const url = execSync("git remote get-url origin", {
@@ -137,10 +217,34 @@ export async function brew(argv, cliVersion) {
137
217
  const spec = loadSpec(args.repoRoot, args.storyId);
138
218
  const stackConfig = readStackConfig(args.repoRoot);
139
219
  const frozenPaths = readFrozenPaths(args.repoRoot);
140
- // Allowed paths: honour spec's `api_contract` paths if declared; else empty (wide).
141
- // For 0.6, we don't strictly parse allowed_paths from the spec — it's a future field.
142
- // Treat absence as "anywhere outside frozen is fine" (allowedPaths=[]).
143
- const allowedPaths = [];
220
+ // 0.15.0-α.4 mode resolution. `auto` checks: does the spec have
221
+ // `proposals.fixtures.by_domain.*` populated AND has a slowcook-mockup
222
+ // PR for this story merged? If both yes → plate. Otherwise → legacy.
223
+ // Force-modes (plate / legacy) skip the check.
224
+ const resolvedMode = await resolveBrewMode({
225
+ requested: args.mode,
226
+ repoRoot: args.repoRoot,
227
+ storyId: args.storyId,
228
+ owner,
229
+ repo,
230
+ githubToken,
231
+ });
232
+ console.log(`brew mode: ${resolvedMode}${args.mode === "auto" ? " (auto-detected)" : ""}`);
233
+ // 0.15.0-α.4 — plate-mode pulls the latest mockup files onto main BEFORE
234
+ // brew starts, so the agent reads them as ground truth. The
235
+ // slowcook-mockup PR is expected to be MERGED before brew fires.
236
+ // We don't re-fetch here; the caller workflow pulls origin/main.
237
+ // Allowed paths. In plate-mode, restrict to data-layer + API + migrations
238
+ // + tests. Frozen-paths guard then physically rejects any UI edit.
239
+ // In legacy mode, fall through to today's "wide allowed_paths" behavior.
240
+ const allowedPaths = resolvedMode === "plate"
241
+ ? [
242
+ "src/lib/data/**", // brew rewrites .ts stub; .mock.ts protected by extension check
243
+ "src/app/api/**",
244
+ "supabase/migrations/**",
245
+ "tests/**",
246
+ ]
247
+ : [];
144
248
  const forge = new GitHubAdapter({ owner, repo, token: githubToken });
145
249
  const anthropic = new Anthropic({ apiKey: anthropicKey });
146
250
  const startedAt = new Date();
@@ -174,6 +278,7 @@ export async function brew(argv, cliVersion) {
174
278
  haltDir,
175
279
  runLogPath,
176
280
  cliVersion,
281
+ mode: resolvedMode,
177
282
  };
178
283
  try {
179
284
  const outcome = await runBrew(ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/brew/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/brew/index.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@
2
2
  * Re-export shim — see investigate/prompts.ts for the rationale.
3
3
  * Source of truth: `@slowcook-ai/llm-anthropic/prompts/brew`.
4
4
  */
5
- export { BREW_SYSTEM, BREW_TOOLS, turnPrompt, turnPromptParts, } from "@slowcook-ai/llm-anthropic";
5
+ export { BREW_SYSTEM, BREW_TOOLS, turnPrompt, turnPromptParts, BREW_PLATE_MODE_ADDENDUM, } from "@slowcook-ai/llm-anthropic";
6
6
  //# sourceMappingURL=prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/brew/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/brew/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,EACf,wBAAwB,GACzB,MAAM,4BAA4B,CAAC"}
@@ -2,5 +2,5 @@
2
2
  * Re-export shim — see investigate/prompts.ts for the rationale.
3
3
  * Source of truth: `@slowcook-ai/llm-anthropic/prompts/brew`.
4
4
  */
5
- export { BREW_SYSTEM, BREW_TOOLS, turnPrompt, turnPromptParts, } from "@slowcook-ai/llm-anthropic";
5
+ export { BREW_SYSTEM, BREW_TOOLS, turnPrompt, turnPromptParts, BREW_PLATE_MODE_ADDENDUM, } from "@slowcook-ai/llm-anthropic";
6
6
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/brew/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,GAChB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/brew/prompts.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,EACf,wBAAwB,GACzB,MAAM,4BAA4B,CAAC"}
@@ -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":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAE1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,eAAe,GAGhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,UAAU,GAAG,IAAI,CAAC;AAsCxB,oDAAoD;AACpD,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAiB;IAC9C,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;IAEjE,MAAM,UAAU,GAAG,yBAAyB,CAAC;QAC3C,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC/C,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,UAAU,EAAE,UAAU;QACtB,MAAM,EAAE,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC;QAClD,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAE9C,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEnD,mEAAmE;IACnE,uEAAuE;IACvE,oEAAoE;IACpE,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACzD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,OAAO,EAAE,OAAO,IAAI,4BAA4B;QAChD,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,QAAoC,EAAE,KAAa;IAClE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAGtB,CAAC;IACF,OAAO,eAAe,CAAC,KAAK,EAAE;QAC5B,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,YAAY,EAAE,KAAK,CAAC,aAAa;QACjC,eAAe,EAAE,KAAK,CAAC,uBAAuB,IAAI,CAAC;QACnD,iBAAiB,EAAE,KAAK,CAAC,2BAA2B,IAAI,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -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"}