@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.
- package/README.md +10 -0
- package/dist/cli.js +49 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/brew/agent.d.ts +25 -1
- package/dist/commands/brew/agent.d.ts.map +1 -1
- package/dist/commands/brew/agent.js +123 -20
- package/dist/commands/brew/agent.js.map +1 -1
- package/dist/commands/brew/halt.d.ts +1 -1
- package/dist/commands/brew/halt.d.ts.map +1 -1
- package/dist/commands/brew/halt.js +13 -0
- package/dist/commands/brew/halt.js.map +1 -1
- package/dist/commands/check/index.d.ts +14 -0
- package/dist/commands/check/index.d.ts.map +1 -0
- package/dist/commands/check/index.js +75 -0
- package/dist/commands/check/index.js.map +1 -0
- package/dist/commands/check/mock-isolation.d.ts +52 -0
- package/dist/commands/check/mock-isolation.d.ts.map +1 -0
- package/dist/commands/check/mock-isolation.js +186 -0
- package/dist/commands/check/mock-isolation.js.map +1 -0
- package/dist/commands/init/mock.d.ts.map +1 -1
- package/dist/commands/init/mock.js +47 -13
- package/dist/commands/init/mock.js.map +1 -1
- package/dist/commands/on-mockup-approved/index.d.ts +25 -0
- package/dist/commands/on-mockup-approved/index.d.ts.map +1 -0
- package/dist/commands/on-mockup-approved/index.js +359 -0
- package/dist/commands/on-mockup-approved/index.js.map +1 -0
- package/dist/commands/plate/classify.d.ts +65 -0
- package/dist/commands/plate/classify.d.ts.map +1 -0
- package/dist/commands/plate/classify.js +194 -0
- package/dist/commands/plate/classify.js.map +1 -0
- package/dist/commands/plate/index.d.ts.map +1 -1
- package/dist/commands/plate/index.js +259 -34
- package/dist/commands/plate/index.js.map +1 -1
- package/dist/commands/port/index.d.ts +30 -0
- package/dist/commands/port/index.d.ts.map +1 -0
- package/dist/commands/port/index.js +237 -0
- package/dist/commands/port/index.js.map +1 -0
- package/dist/commands/port/transform.d.ts +68 -0
- package/dist/commands/port/transform.d.ts.map +1 -0
- package/dist/commands/port/transform.js +122 -0
- package/dist/commands/port/transform.js.map +1 -0
- package/dist/commands/preview/config.d.ts +73 -0
- package/dist/commands/preview/config.d.ts.map +1 -0
- package/dist/commands/preview/config.js +200 -0
- package/dist/commands/preview/config.js.map +1 -0
- package/dist/commands/preview/deploy.d.ts +35 -0
- package/dist/commands/preview/deploy.d.ts.map +1 -0
- package/dist/commands/preview/deploy.js +247 -0
- package/dist/commands/preview/deploy.js.map +1 -0
- package/dist/commands/preview/index.d.ts +9 -0
- package/dist/commands/preview/index.d.ts.map +1 -0
- package/dist/commands/preview/index.js +67 -0
- package/dist/commands/preview/index.js.map +1 -0
- package/dist/commands/preview/ssh.d.ts +49 -0
- package/dist/commands/preview/ssh.d.ts.map +1 -0
- package/dist/commands/preview/ssh.js +99 -0
- package/dist/commands/preview/ssh.js.map +1 -0
- package/dist/commands/preview/teardown.d.ts +25 -0
- package/dist/commands/preview/teardown.d.ts.map +1 -0
- package/dist/commands/preview/teardown.js +164 -0
- package/dist/commands/preview/teardown.js.map +1 -0
- package/dist/commands/recon/index.d.ts +60 -0
- package/dist/commands/recon/index.d.ts.map +1 -0
- package/dist/commands/recon/index.js +278 -0
- package/dist/commands/recon/index.js.map +1 -0
- package/dist/commands/refine/context.d.ts +12 -0
- package/dist/commands/refine/context.d.ts.map +1 -1
- package/dist/commands/refine/context.js +72 -0
- package/dist/commands/refine/context.js.map +1 -1
- package/dist/commands/refine/history-index.d.ts +84 -0
- package/dist/commands/refine/history-index.d.ts.map +1 -0
- package/dist/commands/refine/history-index.js +289 -0
- package/dist/commands/refine/history-index.js.map +1 -0
- package/dist/commands/refine/index.d.ts.map +1 -1
- package/dist/commands/refine/index.js +28 -0
- package/dist/commands/refine/index.js.map +1 -1
- package/dist/commands/run-mock/index.d.ts +34 -0
- package/dist/commands/run-mock/index.d.ts.map +1 -0
- package/dist/commands/run-mock/index.js +308 -0
- package/dist/commands/run-mock/index.js.map +1 -0
- package/dist/commands/vibe/emit.d.ts +6 -0
- package/dist/commands/vibe/emit.d.ts.map +1 -1
- package/dist/commands/vibe/emit.js +12 -0
- package/dist/commands/vibe/emit.js.map +1 -1
- package/dist/commands/vibe/index.d.ts.map +1 -1
- package/dist/commands/vibe/index.js +180 -47
- package/dist/commands/vibe/index.js.map +1 -1
- 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;
|
|
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
|
-
|
|
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": "${
|
|
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
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
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 = `
|
|
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
|
-
|
|
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
|
|
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
|
|
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":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAY,MAAM,SAAS,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAmBpD,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,cAAsB;IACtE,MAAM,IAAI,GAAiB;QACzB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,cAAc;KACf,CAAC;IACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;YAAC,CAAC,EAAE,CAAC;QAAC,CAAC;aAC/C,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAAC,CAAC;aAC3C,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;aAC9C,IAAI,CAAC,KAAK,mBAAmB,IAAI,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAAC,CAAC,EAAE,CAAC;QAAC,CAAC;aAC3E,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb,CAAC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAkB;IAC9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAChE,IAAI,eAAuB,CAAC;IAC5B,IAAI,WAAmB,CAAC;IACxB,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,eAAe,GAAG,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAC1D,WAAW,GAAG,0EAA0E,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,eAAe,GAAG,mBAAmB,CAAC;YACtC,WAAW,GAAG,2FAA2F,CAAC;QAC5G,CAAC;IACH,CAAC;SAAM,CAAC;QACN,eAAe,GAAG,mBAAmB,CAAC;QACtC,WAAW,GAAG,qFAAqF,CAAC;IACtG,CAAC;IACD,OAAO;QACL,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE;
|
|
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"}
|