@slowcook-ai/cli 0.16.0-alpha.3 → 0.17.0-alpha.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.
Files changed (88) hide show
  1. package/README.md +10 -0
  2. package/dist/cli.js +49 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/brew/agent.d.ts +25 -1
  5. package/dist/commands/brew/agent.d.ts.map +1 -1
  6. package/dist/commands/brew/agent.js +123 -20
  7. package/dist/commands/brew/agent.js.map +1 -1
  8. package/dist/commands/brew/halt.d.ts +1 -1
  9. package/dist/commands/brew/halt.d.ts.map +1 -1
  10. package/dist/commands/brew/halt.js +13 -0
  11. package/dist/commands/brew/halt.js.map +1 -1
  12. package/dist/commands/check/index.d.ts +14 -0
  13. package/dist/commands/check/index.d.ts.map +1 -0
  14. package/dist/commands/check/index.js +75 -0
  15. package/dist/commands/check/index.js.map +1 -0
  16. package/dist/commands/check/mock-isolation.d.ts +52 -0
  17. package/dist/commands/check/mock-isolation.d.ts.map +1 -0
  18. package/dist/commands/check/mock-isolation.js +186 -0
  19. package/dist/commands/check/mock-isolation.js.map +1 -0
  20. package/dist/commands/init/mock.d.ts.map +1 -1
  21. package/dist/commands/init/mock.js +47 -13
  22. package/dist/commands/init/mock.js.map +1 -1
  23. package/dist/commands/on-mockup-approved/index.d.ts +25 -0
  24. package/dist/commands/on-mockup-approved/index.d.ts.map +1 -0
  25. package/dist/commands/on-mockup-approved/index.js +359 -0
  26. package/dist/commands/on-mockup-approved/index.js.map +1 -0
  27. package/dist/commands/plate/classify.d.ts +65 -0
  28. package/dist/commands/plate/classify.d.ts.map +1 -0
  29. package/dist/commands/plate/classify.js +194 -0
  30. package/dist/commands/plate/classify.js.map +1 -0
  31. package/dist/commands/plate/index.d.ts.map +1 -1
  32. package/dist/commands/plate/index.js +259 -34
  33. package/dist/commands/plate/index.js.map +1 -1
  34. package/dist/commands/port/index.d.ts +30 -0
  35. package/dist/commands/port/index.d.ts.map +1 -0
  36. package/dist/commands/port/index.js +237 -0
  37. package/dist/commands/port/index.js.map +1 -0
  38. package/dist/commands/port/transform.d.ts +68 -0
  39. package/dist/commands/port/transform.d.ts.map +1 -0
  40. package/dist/commands/port/transform.js +122 -0
  41. package/dist/commands/port/transform.js.map +1 -0
  42. package/dist/commands/preview/config.d.ts +73 -0
  43. package/dist/commands/preview/config.d.ts.map +1 -0
  44. package/dist/commands/preview/config.js +200 -0
  45. package/dist/commands/preview/config.js.map +1 -0
  46. package/dist/commands/preview/deploy.d.ts +35 -0
  47. package/dist/commands/preview/deploy.d.ts.map +1 -0
  48. package/dist/commands/preview/deploy.js +247 -0
  49. package/dist/commands/preview/deploy.js.map +1 -0
  50. package/dist/commands/preview/index.d.ts +9 -0
  51. package/dist/commands/preview/index.d.ts.map +1 -0
  52. package/dist/commands/preview/index.js +67 -0
  53. package/dist/commands/preview/index.js.map +1 -0
  54. package/dist/commands/preview/ssh.d.ts +49 -0
  55. package/dist/commands/preview/ssh.d.ts.map +1 -0
  56. package/dist/commands/preview/ssh.js +99 -0
  57. package/dist/commands/preview/ssh.js.map +1 -0
  58. package/dist/commands/preview/teardown.d.ts +25 -0
  59. package/dist/commands/preview/teardown.d.ts.map +1 -0
  60. package/dist/commands/preview/teardown.js +164 -0
  61. package/dist/commands/preview/teardown.js.map +1 -0
  62. package/dist/commands/recon/index.d.ts +60 -0
  63. package/dist/commands/recon/index.d.ts.map +1 -0
  64. package/dist/commands/recon/index.js +278 -0
  65. package/dist/commands/recon/index.js.map +1 -0
  66. package/dist/commands/refine/context.d.ts +12 -0
  67. package/dist/commands/refine/context.d.ts.map +1 -1
  68. package/dist/commands/refine/context.js +72 -0
  69. package/dist/commands/refine/context.js.map +1 -1
  70. package/dist/commands/refine/history-index.d.ts +84 -0
  71. package/dist/commands/refine/history-index.d.ts.map +1 -0
  72. package/dist/commands/refine/history-index.js +289 -0
  73. package/dist/commands/refine/history-index.js.map +1 -0
  74. package/dist/commands/refine/index.d.ts.map +1 -1
  75. package/dist/commands/refine/index.js +28 -0
  76. package/dist/commands/refine/index.js.map +1 -1
  77. package/dist/commands/run-mock/index.d.ts +34 -0
  78. package/dist/commands/run-mock/index.d.ts.map +1 -0
  79. package/dist/commands/run-mock/index.js +308 -0
  80. package/dist/commands/run-mock/index.js.map +1 -0
  81. package/dist/commands/vibe/emit.d.ts +6 -0
  82. package/dist/commands/vibe/emit.d.ts.map +1 -1
  83. package/dist/commands/vibe/emit.js +12 -0
  84. package/dist/commands/vibe/emit.js.map +1 -1
  85. package/dist/commands/vibe/index.d.ts.map +1 -1
  86. package/dist/commands/vibe/index.js +180 -47
  87. package/dist/commands/vibe/index.js.map +1 -1
  88. package/package.json +4 -3
@@ -0,0 +1,186 @@
1
+ /**
2
+ * `slowcook check mock-isolation` — 0.16.0-α.13.
3
+ *
4
+ * Static structural check: every TypeScript file under `mock/src/` and
5
+ * `mock/scenarios/` must only import from:
6
+ *
7
+ * - npm packages (anything not starting with "." or "/" or "@/")
8
+ * - relative paths that stay inside mock/ (`./`, `../` that don't escape)
9
+ * - the `@/` alias (which resolves to mock/src/, NOT the consumer's
10
+ * production src/) — and the resolved target file must exist
11
+ *
12
+ * Specifically REJECTS:
13
+ *
14
+ * - `@/` imports that resolve to a path NOT present in mock/src/
15
+ * (e.g. vibe writing `import { X } from "@/lib/emotions"` when
16
+ * emotions only exists in the consumer's production `src/lib/`)
17
+ * - Relative parent-traversal imports that escape `mock/`
18
+ *
19
+ * Why a hard check: vibe's prompt includes a "DO NOT cross-import"
20
+ * rule (slowcook 0.16.0-α.12), but prompts are soft signals. A real
21
+ * structural check fails CI on slippage and gives the architecture's
22
+ * "two filesystems" rule a teeth-bearing enforcement.
23
+ *
24
+ * The check runs in two contexts:
25
+ *
26
+ * - Locally via `slowcook check mock-isolation [--cwd <path>]`
27
+ * - Inside the `slowcook-vibe.yml` workflow as a post-emit step
28
+ * (so vibe's PR fails if the LLM regresses and pushes a bad
29
+ * import)
30
+ *
31
+ * Pure-disk check; no LLM. No tsc dependency. Regex + readFileSync.
32
+ */
33
+ import { readFileSync, existsSync, statSync, readdirSync } from "node:fs";
34
+ import { join, relative, resolve, dirname } from "node:path";
35
+ /**
36
+ * Run the check. Returns the list of violations + how many files were
37
+ * scanned. Empty violations array = clean.
38
+ */
39
+ export function runMockIsolationCheck(repoRoot) {
40
+ const mockDir = join(repoRoot, "mock");
41
+ if (!existsSync(mockDir)) {
42
+ return { violations: [], filesChecked: 0 };
43
+ }
44
+ const violations = [];
45
+ const files = walkTsFiles(mockDir);
46
+ for (const absFile of files) {
47
+ const body = readFileSync(absFile, "utf8");
48
+ const fileViolations = checkFile(absFile, body, repoRoot, mockDir);
49
+ violations.push(...fileViolations);
50
+ }
51
+ return { violations, filesChecked: files.length };
52
+ }
53
+ /**
54
+ * Inspect one file's import statements. Returns violations.
55
+ */
56
+ export function checkFile(absFile, body, repoRoot, mockRoot) {
57
+ const violations = [];
58
+ const relFile = relative(repoRoot, absFile).replace(/\\/g, "/");
59
+ const dir = dirname(absFile);
60
+ // Match import statements. Single-line; covers:
61
+ // import { X } from "..."
62
+ // import X from "..."
63
+ // import "..."
64
+ // import * as X from "..."
65
+ // NOT covered: dynamic import() calls (rare in vibe output; can be
66
+ // added later if dogfood shows misses).
67
+ const importRe = /^\s*import\s+(?:[^"';]+\s+from\s+)?["']([^"']+)["']/gm;
68
+ // Track line number per match
69
+ const lines = body.split(/\r?\n/);
70
+ for (let i = 0; i < lines.length; i++) {
71
+ const m = lines[i].match(/^\s*import\s+(?:[^"';]+\s+from\s+)?["']([^"']+)["']/);
72
+ if (!m)
73
+ continue;
74
+ const importPath = m[1];
75
+ // npm package import — anything not starting with `.` or `/` or `@/`
76
+ // Note: `@scope/pkg` is npm; `@/foo` is the project alias.
77
+ if (!importPath.startsWith(".") &&
78
+ !importPath.startsWith("/") &&
79
+ !importPath.startsWith("@/")) {
80
+ // npm package — fine
81
+ continue;
82
+ }
83
+ // `@/` alias check — must resolve to a file inside mock/src/
84
+ if (importPath.startsWith("@/")) {
85
+ const aliasPath = importPath.slice(2); // strip "@/"
86
+ const candidate = join(mockRoot, "src", aliasPath);
87
+ if (!resolveExists(candidate)) {
88
+ violations.push({
89
+ file: relFile,
90
+ line: i + 1,
91
+ importPath,
92
+ reason: `\`@/\` resolves to mock/src/${aliasPath}, which doesn't exist. The mock has no access to the consumer's production src/. Inline what you need OR write a file at mock/src/${aliasPath}.`,
93
+ });
94
+ }
95
+ continue;
96
+ }
97
+ // Relative import (./, ../) — must not escape mock/
98
+ if (importPath.startsWith(".")) {
99
+ const candidate = join(dir, importPath);
100
+ const resolved = resolve(candidate);
101
+ const mockAbs = resolve(mockRoot);
102
+ if (!resolved.startsWith(mockAbs + "/") && resolved !== mockAbs) {
103
+ violations.push({
104
+ file: relFile,
105
+ line: i + 1,
106
+ importPath,
107
+ reason: `Relative import escapes mock/. The mock is a separate filesystem; cannot reach the consumer's production code.`,
108
+ });
109
+ continue;
110
+ }
111
+ // Existence check (for `.ts` / `.tsx` / `.js` / `.jsx`)
112
+ if (!resolveExists(candidate)) {
113
+ violations.push({
114
+ file: relFile,
115
+ line: i + 1,
116
+ importPath,
117
+ reason: `Relative import resolves to a non-existent file (no .ts/.tsx/.js/.jsx + no /index variant found at ${relative(repoRoot, candidate)}).`,
118
+ });
119
+ }
120
+ continue;
121
+ }
122
+ // Absolute path import (`/foo`) — almost always wrong
123
+ violations.push({
124
+ file: relFile,
125
+ line: i + 1,
126
+ importPath,
127
+ reason: `Absolute-path import. Use relative path or @/ alias.`,
128
+ });
129
+ }
130
+ // Unused but kept for clarity that the regex can be tightened later:
131
+ void importRe;
132
+ return violations;
133
+ }
134
+ function resolveExists(candidate) {
135
+ // Try the literal candidate first.
136
+ if (existsSync(candidate)) {
137
+ if (statSync(candidate).isFile())
138
+ return true;
139
+ // Directory — try /index.{ts,tsx,js,jsx}
140
+ for (const ext of ["ts", "tsx", "js", "jsx"]) {
141
+ if (existsSync(join(candidate, `index.${ext}`)))
142
+ return true;
143
+ }
144
+ }
145
+ // Try with each TypeScript / JavaScript extension appended.
146
+ for (const ext of ["ts", "tsx", "js", "jsx", "mts", "cts"]) {
147
+ if (existsSync(`${candidate}.${ext}`))
148
+ return true;
149
+ }
150
+ return false;
151
+ }
152
+ function walkTsFiles(dir, acc = []) {
153
+ let entries;
154
+ try {
155
+ entries = readdirSync(dir);
156
+ }
157
+ catch {
158
+ return acc;
159
+ }
160
+ for (const name of entries) {
161
+ if (name.startsWith("."))
162
+ continue;
163
+ if (name === "node_modules")
164
+ continue;
165
+ if (name === ".next")
166
+ continue;
167
+ if (name === "dist")
168
+ continue;
169
+ const full = join(dir, name);
170
+ let st;
171
+ try {
172
+ st = statSync(full);
173
+ }
174
+ catch {
175
+ continue;
176
+ }
177
+ if (st.isDirectory()) {
178
+ walkTsFiles(full, acc);
179
+ }
180
+ else if (/\.(tsx?|mts|cts)$/.test(name)) {
181
+ acc.push(full);
182
+ }
183
+ }
184
+ return acc;
185
+ }
186
+ //# sourceMappingURL=mock-isolation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-isolation.js","sourceRoot":"","sources":["../../../src/commands/check/mock-isolation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/commands/init/mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,YAAY,CAoBtF;AAqCD,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,EAAE,CAkC/D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhF"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/commands/init/mock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,YAAY,CAoBtF;AAsDD,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,EAAE,CAmC/D;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhF"}
@@ -80,6 +80,21 @@ What it writes:
80
80
  mock/scenarios/.gitkeep empty until vibe writes story-N.ts files
81
81
  `);
82
82
  }
83
+ function detectMockPackageName(args) {
84
+ // Try the parent package.json's name; fall back to "slowcook-mock".
85
+ // npm rejects `${...}` in name, so the previous literal placeholder
86
+ // broke `npm install` — bug fix in 0.16.0-alpha.11.
87
+ try {
88
+ const parent = JSON.parse(readFileSync(join(args.cwd, "package.json"), "utf8"));
89
+ if (parent.name && /^[a-z0-9_-]/i.test(parent.name)) {
90
+ // Strip leading @scope/
91
+ const base = parent.name.replace(/^@[^/]+\//, "");
92
+ return `${base}-mock`;
93
+ }
94
+ }
95
+ catch { /* ignore */ }
96
+ return "slowcook-mock";
97
+ }
83
98
  export function planMockFiles(args) {
84
99
  const productionGlobals = join(args.cwd, "src/app/globals.css");
85
100
  let globalsContents;
@@ -98,8 +113,9 @@ export function planMockFiles(args) {
98
113
  globalsContents = MINIMAL_GLOBALS_CSS;
99
114
  globalsNote = "(no src/app/globals.css found; wrote minimal Tailwind directives — extend manually)";
100
115
  }
116
+ const pkgName = detectMockPackageName(args);
101
117
  return [
102
- { path: "mock/package.json", contents: PACKAGE_JSON(args.runtimeVersion), skipIfExists: true },
118
+ { path: "mock/package.json", contents: PACKAGE_JSON(args.runtimeVersion, pkgName), skipIfExists: true },
103
119
  { path: "mock/Dockerfile", contents: DOCKERFILE, skipIfExists: true },
104
120
  { path: "mock/tsconfig.json", contents: TSCONFIG, skipIfExists: true },
105
121
  { path: "mock/next.config.js", contents: NEXT_CONFIG, skipIfExists: true },
@@ -171,11 +187,13 @@ export async function initMock(argv, cliVersion) {
171
187
  * here. After 0.16 the cli's package.json could carry a peer-pin field.
172
188
  */
173
189
  function mockRuntimeVersionFor(_cliVersion) {
174
- return "^0.1.1";
190
+ // Pin to ^0.1.0 — what's actually on npm. ^ picks up 0.1.x patches
191
+ // when they publish; bumping past 0.2 needs an intentional cli release.
192
+ return "^0.1.0";
175
193
  }
176
194
  // ---------------- templates ----------------
177
- const PACKAGE_JSON = (runtimeVersion) => `{
178
- "name": "${"$"}{REPO_NAME}-mock",
195
+ const PACKAGE_JSON = (runtimeVersion, name) => `{
196
+ "name": "${name}",
179
197
  "version": "0.0.0",
180
198
  "private": true,
181
199
  "description": "Singular UI mock app. Run with \`npm run dev\` on :3100. See mock/README.md.",
@@ -330,6 +348,7 @@ body {
330
348
  const LAYOUT_TSX = `import type { Metadata } from "next";
331
349
  import type { ReactNode } from "react";
332
350
  import { ScenarioRegistryProvider } from "@slowcook-ai/mock-runtime";
351
+ import { SlowcookReviewOverlay } from "@slowcook-ai/review-overlay/react";
333
352
  import { registry } from "@/lib/scenario-registry";
334
353
  import "./globals.css";
335
354
 
@@ -345,19 +364,23 @@ export default function RootLayout({ children }: { children: ReactNode }) {
345
364
  <ScenarioRegistryProvider registry={registry}>
346
365
  {children}
347
366
  {/*
348
- Review-overlay mount-point. Once @slowcook-ai/review-overlay
349
- ships (slowcook 0.16-α.5), import + render <SlowcookReviewOverlay />
350
- here. The overlay provides a floating toggle for nav-mode
351
- comment-mode and POSTs element-anchored comments to the GitHub
352
- PR for plate to consume.
367
+ Review-overlay (review-overlay 0.5.1+ auto-detects all
368
+ props from process.env.NEXT_PUBLIC_SLOWCOOK_*). Set those
369
+ in dev (\`slowcook run-mock\` does it for you) to activate.
370
+ Production builds keep them unset so the overlay
371
+ short-circuits to null + tree-shakes out cleanly.
353
372
  */}
373
+ <SlowcookReviewOverlay />
354
374
  </ScenarioRegistryProvider>
355
375
  </body>
356
376
  </html>
357
377
  );
358
378
  }
359
379
  `;
360
- const PAGE_TSX = `import { ScenarioPicker } from "@slowcook-ai/mock-runtime";
380
+ const PAGE_TSX = `"use client";
381
+
382
+ import { ScenarioPicker } from "@slowcook-ai/mock-runtime";
383
+ import { useScenarioCommentStats } from "@slowcook-ai/review-overlay/react";
361
384
 
362
385
  /**
363
386
  * Mock app homepage = scenario picker (provided by the runtime).
@@ -365,9 +388,19 @@ const PAGE_TSX = `import { ScenarioPicker } from "@slowcook-ai/mock-runtime";
365
388
  * Replaces this with a custom picker if you want different grouping/
366
389
  * filtering. The runtime's hooks + registry API are stable; this UI
367
390
  * is a default that consumers can swap.
391
+ *
392
+ * The \`useScenarioCommentStats\` hook (review-overlay 0.4.0+) walks
393
+ * every mockup PR's comments + groups by story_id. Cards then show
394
+ * comment / applied / unresolved / spec-altering counts. Only fires
395
+ * when NEXT_PUBLIC_SLOWCOOK_REVIEW=1 + a PAT is in localStorage.
368
396
  */
369
397
  export default function Page() {
370
- return <ScenarioPicker />;
398
+ const stats = useScenarioCommentStats({
399
+ owner: process.env["NEXT_PUBLIC_SLOWCOOK_OWNER"] ?? "",
400
+ repo: process.env["NEXT_PUBLIC_SLOWCOOK_REPO"] ?? "",
401
+ enabled: process.env["NEXT_PUBLIC_SLOWCOOK_REVIEW"] === "1",
402
+ });
403
+ return <ScenarioPicker commentStats={stats ?? undefined} />;
371
404
  }
372
405
  `;
373
406
  const SCENARIO_REGISTRY = `import { defineScenarios } from "@slowcook-ai/mock-runtime";
@@ -385,7 +418,7 @@ const SCENARIO_REGISTRY = `import { defineScenarios } from "@slowcook-ai/mock-ru
385
418
 
386
419
  // Vibe-managed imports below this line. Don't reorder; vibe inserts
387
420
  // new lines at the bottom of the import block.
388
- // e.g. import story017 from "../../scenarios/story-017.js";
421
+ // e.g. import story017 from "../../scenarios/story-017";
389
422
 
390
423
  export const registry = defineScenarios([
391
424
  // story017,
@@ -429,6 +462,7 @@ clicking or refreshes to start over).
429
462
  \`\`\`ts
430
463
  // mock/scenarios/story-017.ts
431
464
  import type { Scenario } from "@slowcook-ai/mock-runtime";
465
+ // (no \`.js\` extensions in TS imports — Next/Turbopack uses bundler resolution)
432
466
 
433
467
  const scenario: Scenario = {
434
468
  id: "017",
@@ -452,7 +486,7 @@ Then add to the registry in \`mock/src/lib/scenario-registry.ts\`:
452
486
 
453
487
  \`\`\`ts
454
488
  import { defineScenarios } from "@slowcook-ai/mock-runtime";
455
- import story017 from "../../scenarios/story-017.js";
489
+ import story017 from "../../scenarios/story-017";
456
490
 
457
491
  export const registry = defineScenarios([story017]);
458
492
  \`\`\`
@@ -1 +1 @@
1
- {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../src/commands/init/mock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../src/commands/init/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `slowcook on-mockup-approved --pr <number>` — 0.16.0-α.25.
3
+ *
4
+ * Called from a workflow that fires on `pull_request.labeled` with
5
+ * label = `slowcook-mockup-approved`. Walks every cost source for the
6
+ * story (refine on the source issue, refine + spec-merge on the spec
7
+ * PR, recipe on the tests PR, vibe + plate on the mockup PR), itemizes
8
+ * each run, and posts (or UPDATES) a cost-rollup audit comment on the
9
+ * originating GitHub issue.
10
+ *
11
+ * α.25 changes vs α.23:
12
+ * - Walks ALL related sources, not just the mockup PR. Captures
13
+ * refine + recipe runs that previously went uncounted.
14
+ * - Itemizes each run (one row per cost marker) instead of grouping
15
+ * by agent. Includes timestamp, agent, model, $, source link, and
16
+ * commit SHA when available (parsed from plate's breadcrumb JSON).
17
+ * - Idempotent: looks for an existing `slowcook:on-mockup-approved`
18
+ * marker in the issue's comments; updates that comment in place
19
+ * instead of double-posting.
20
+ *
21
+ * Pairs with on-spec-merged / on-tests-merged / on-brew-merged so the
22
+ * issue thread tells the full pipeline story end-to-end.
23
+ */
24
+ export declare function onMockupApproved(argv: string[]): Promise<void>;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/on-mockup-approved/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAuOH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0KpE"}