@slowcook-ai/cli 0.19.0-alpha.17 → 0.19.0-alpha.40
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/AGENTS.md +2 -1
- package/dist/cli.js +37 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/brand/index.d.ts +58 -0
- package/dist/commands/brand/index.d.ts.map +1 -0
- package/dist/commands/brand/index.js +257 -0
- package/dist/commands/brand/index.js.map +1 -0
- package/dist/commands/budget/index.d.ts +2 -0
- package/dist/commands/budget/index.d.ts.map +1 -0
- package/dist/commands/budget/index.js +252 -0
- package/dist/commands/budget/index.js.map +1 -0
- package/dist/commands/dev-env/config.d.ts +136 -0
- package/dist/commands/dev-env/config.d.ts.map +1 -0
- package/dist/commands/dev-env/config.js +96 -0
- package/dist/commands/dev-env/config.js.map +1 -0
- package/dist/commands/dev-env/index.d.ts +27 -0
- package/dist/commands/dev-env/index.d.ts.map +1 -0
- package/dist/commands/dev-env/index.js +226 -0
- package/dist/commands/dev-env/index.js.map +1 -0
- package/dist/commands/dev-env/init.d.ts +28 -0
- package/dist/commands/dev-env/init.d.ts.map +1 -0
- package/dist/commands/dev-env/init.js +135 -0
- package/dist/commands/dev-env/init.js.map +1 -0
- package/dist/commands/eval/index.d.ts +54 -0
- package/dist/commands/eval/index.d.ts.map +1 -0
- package/dist/commands/eval/index.js +283 -0
- package/dist/commands/eval/index.js.map +1 -0
- package/dist/commands/init/mock-vite.d.ts +54 -0
- package/dist/commands/init/mock-vite.d.ts.map +1 -0
- package/dist/commands/init/mock-vite.js +611 -0
- package/dist/commands/init/mock-vite.js.map +1 -0
- package/dist/commands/init/mock.d.ts +6 -0
- package/dist/commands/init/mock.d.ts.map +1 -1
- package/dist/commands/init/mock.js +20 -4
- package/dist/commands/init/mock.js.map +1 -1
- package/dist/commands/init/plan.d.ts +26 -1
- package/dist/commands/init/plan.d.ts.map +1 -1
- package/dist/commands/init/plan.js +41 -3
- package/dist/commands/init/plan.js.map +1 -1
- package/dist/commands/plate/agent.d.ts +7 -0
- package/dist/commands/plate/agent.d.ts.map +1 -1
- package/dist/commands/plate/agent.js +1 -1
- package/dist/commands/plate/agent.js.map +1 -1
- package/dist/commands/plate/index.d.ts.map +1 -1
- package/dist/commands/plate/index.js +6 -0
- package/dist/commands/plate/index.js.map +1 -1
- package/dist/commands/recon/index.d.ts +1 -1
- package/dist/commands/recon/index.d.ts.map +1 -1
- package/dist/commands/recon/index.js +26 -0
- package/dist/commands/recon/index.js.map +1 -1
- package/dist/commands/recon/migration-gate.d.ts +59 -0
- package/dist/commands/recon/migration-gate.d.ts.map +1 -0
- package/dist/commands/recon/migration-gate.js +131 -0
- package/dist/commands/recon/migration-gate.js.map +1 -0
- package/dist/commands/refine/agent.d.ts +12 -0
- package/dist/commands/refine/agent.d.ts.map +1 -1
- package/dist/commands/refine/agent.js +173 -13
- package/dist/commands/refine/agent.js.map +1 -1
- package/dist/commands/refine/brownfield-answer.d.ts +81 -0
- package/dist/commands/refine/brownfield-answer.d.ts.map +1 -0
- package/dist/commands/refine/brownfield-answer.js +231 -0
- package/dist/commands/refine/brownfield-answer.js.map +1 -0
- package/dist/commands/refine/context.d.ts.map +1 -1
- package/dist/commands/refine/context.js +18 -0
- package/dist/commands/refine/context.js.map +1 -1
- package/dist/commands/refine/history-index.d.ts +59 -0
- package/dist/commands/refine/history-index.d.ts.map +1 -1
- package/dist/commands/refine/history-index.js +195 -8
- package/dist/commands/refine/history-index.js.map +1 -1
- package/dist/commands/refine/index.d.ts.map +1 -1
- package/dist/commands/refine/index.js +32 -1
- package/dist/commands/refine/index.js.map +1 -1
- package/dist/commands/refine/proposals-synth.d.ts +50 -1
- package/dist/commands/refine/proposals-synth.d.ts.map +1 -1
- package/dist/commands/refine/proposals-synth.js +199 -35
- package/dist/commands/refine/proposals-synth.js.map +1 -1
- package/dist/commands/refine/spec-yaml.d.ts +274 -250
- package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
- package/dist/commands/refine/spec-yaml.js +10 -0
- package/dist/commands/refine/spec-yaml.js.map +1 -1
- package/dist/commands/run-mock/index.d.ts.map +1 -1
- package/dist/commands/run-mock/index.js +7 -1
- package/dist/commands/run-mock/index.js.map +1 -1
- package/dist/commands/testgen/agent.d.ts.map +1 -1
- package/dist/commands/testgen/agent.js +34 -9
- package/dist/commands/testgen/agent.js.map +1 -1
- package/dist/commands/vibe/agent.d.ts +7 -0
- package/dist/commands/vibe/agent.d.ts.map +1 -1
- package/dist/commands/vibe/agent.js +2 -2
- package/dist/commands/vibe/agent.js.map +1 -1
- package/dist/commands/vibe/index.d.ts.map +1 -1
- package/dist/commands/vibe/index.js +7 -1
- package/dist/commands/vibe/index.js.map +1 -1
- package/dist/cost-store.d.ts +52 -0
- package/dist/cost-store.d.ts.map +1 -0
- package/dist/cost-store.js +108 -0
- package/dist/cost-store.js.map +1 -0
- package/dist/lib/budget.d.ts +123 -0
- package/dist/lib/budget.d.ts.map +1 -0
- package/dist/lib/budget.js +225 -0
- package/dist/lib/budget.js.map +1 -0
- package/dist/lib/mock-shape.d.ts +44 -0
- package/dist/lib/mock-shape.d.ts.map +1 -0
- package/dist/lib/mock-shape.js +77 -0
- package/dist/lib/mock-shape.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook eval` — 0.19.0-α.17 (closes #19, partial).
|
|
3
|
+
*
|
|
4
|
+
* No-regression gate for prompt-changing PRs. Loads frozen fixtures
|
|
5
|
+
* from `packages/cli/eval/fixtures/<id>/fixture.json`, calls the
|
|
6
|
+
* relevant `build*Prompt(args)` function from `@slowcook-ai/llm-anthropic`,
|
|
7
|
+
* and asserts the resulting prompt string contains all of the
|
|
8
|
+
* fixture's `expected_prompt_includes` substrings and none of its
|
|
9
|
+
* `expected_prompt_excludes` substrings.
|
|
10
|
+
*
|
|
11
|
+
* Why prompt-shape assertions instead of running the LLM against the
|
|
12
|
+
* fixture: the regression class #19 names ("subtle prompt drift that
|
|
13
|
+
* drops critical context") is structural. Asserting on construction
|
|
14
|
+
* shape catches it deterministically without burning Anthropic credit
|
|
15
|
+
* or introducing nondeterminism into CI. A future fixture-class can
|
|
16
|
+
* layer LLM-output assertions on top once we have a recorded-replay
|
|
17
|
+
* shape; today this gate is the cheap, fast, contract-grade floor.
|
|
18
|
+
*
|
|
19
|
+
* Discovery model: walks `packages/cli/eval/fixtures/<id>/` directly
|
|
20
|
+
* by listing subdirectories with a `fixture.json` inside. No central
|
|
21
|
+
* registry — each fixture is self-describing.
|
|
22
|
+
*/
|
|
23
|
+
import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
|
|
24
|
+
import { dirname, join } from "node:path";
|
|
25
|
+
import { fileURLToPath } from "node:url";
|
|
26
|
+
import { buildChefPrompt, buildChefOrchestratePrompt, buildInvestigateUserPrompt, buildNavigatorPrompt, buildPlateAmendmentPrompt, buildSiftTurnPrompt, buildVibeUserPrompt, REFINEMENT_ANALYST_SYSTEM, BROWNFIELD_ANSWER_SYSTEM, } from "@slowcook-ai/llm-anthropic";
|
|
27
|
+
/**
|
|
28
|
+
* Map from `fixture.agent` → prompt-builder function. Each builder is
|
|
29
|
+
* the canonical entrypoint that consumer agents call at runtime — so
|
|
30
|
+
* a prompt regression that drops context will show up here.
|
|
31
|
+
*
|
|
32
|
+
* Plate's builder returns Array<...> rather than string; we render its
|
|
33
|
+
* concatenated text for the substring check.
|
|
34
|
+
*/
|
|
35
|
+
const BUILDERS = {
|
|
36
|
+
chef: (args) => buildChefPrompt(args),
|
|
37
|
+
"chef-orchestrate": (args) => buildChefOrchestratePrompt(args),
|
|
38
|
+
investigate: (args) => buildInvestigateUserPrompt(args),
|
|
39
|
+
navigator: (args) => buildNavigatorPrompt(args),
|
|
40
|
+
plate: (args) => {
|
|
41
|
+
const blocks = buildPlateAmendmentPrompt(args);
|
|
42
|
+
return blocks
|
|
43
|
+
.map((b) => {
|
|
44
|
+
if (typeof b === "string")
|
|
45
|
+
return b;
|
|
46
|
+
if (b && typeof b === "object" && "text" in b)
|
|
47
|
+
return String(b.text);
|
|
48
|
+
return JSON.stringify(b);
|
|
49
|
+
})
|
|
50
|
+
.join("\n\n");
|
|
51
|
+
},
|
|
52
|
+
sift: (args) => buildSiftTurnPrompt(args),
|
|
53
|
+
vibe: (args) => buildVibeUserPrompt(args),
|
|
54
|
+
refine: (args) => {
|
|
55
|
+
// REFINEMENT_ANALYST_SYSTEM is the system prompt — the surface
|
|
56
|
+
// where the PM-facing question-shape + decide-first rules live.
|
|
57
|
+
// Eval fixtures assert on the system prompt's contents.
|
|
58
|
+
const a = args;
|
|
59
|
+
return REFINEMENT_ANALYST_SYSTEM(a.checklist ?? "", a.projectContext ?? "");
|
|
60
|
+
},
|
|
61
|
+
"refine-brownfield-answer": () => {
|
|
62
|
+
// 0.19.0-α.36 — Pass B reflexive brownfield-answer prompt. Static,
|
|
63
|
+
// no inputs woven in; the prompt is consumed as-is. Eval fixtures
|
|
64
|
+
// assert on its required-rules surface (verbatim copy, source
|
|
65
|
+
// citation, conservative-ambiguous, JSON output, etc.).
|
|
66
|
+
return BROWNFIELD_ANSWER_SYSTEM;
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
function parseArgs(argv) {
|
|
70
|
+
const args = { all: false, list: false };
|
|
71
|
+
for (let i = 0; i < argv.length; i++) {
|
|
72
|
+
const a = argv[i];
|
|
73
|
+
const next = argv[i + 1];
|
|
74
|
+
if (a === "--fixture" && next) {
|
|
75
|
+
args.fixtureId = next;
|
|
76
|
+
i++;
|
|
77
|
+
}
|
|
78
|
+
else if (a === "--all") {
|
|
79
|
+
args.all = true;
|
|
80
|
+
}
|
|
81
|
+
else if (a === "--list") {
|
|
82
|
+
args.list = true;
|
|
83
|
+
}
|
|
84
|
+
else if (a === "--fixtures-dir" && next) {
|
|
85
|
+
args.fixturesDir = next;
|
|
86
|
+
i++;
|
|
87
|
+
}
|
|
88
|
+
else if (a === "--help" || a === "-h") {
|
|
89
|
+
printHelp();
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return args;
|
|
94
|
+
}
|
|
95
|
+
function printHelp() {
|
|
96
|
+
console.log(`
|
|
97
|
+
slowcook eval — prompt-regression gate
|
|
98
|
+
|
|
99
|
+
Loads frozen fixtures from packages/cli/eval/fixtures/<id>/fixture.json
|
|
100
|
+
and asserts the agent's prompt-builder output contains all expected
|
|
101
|
+
substrings (and none of the excluded ones).
|
|
102
|
+
|
|
103
|
+
Usage:
|
|
104
|
+
slowcook eval --fixture <id> Run one fixture by id.
|
|
105
|
+
slowcook eval --all Run every discovered fixture.
|
|
106
|
+
slowcook eval --list List fixture ids + descriptions.
|
|
107
|
+
|
|
108
|
+
Options:
|
|
109
|
+
--fixtures-dir <path> Override the default fixtures location
|
|
110
|
+
(mostly for tests / local experiments).
|
|
111
|
+
|
|
112
|
+
Exit code:
|
|
113
|
+
0 all targeted fixtures passed
|
|
114
|
+
1 at least one fixture failed or errored
|
|
115
|
+
64 usage error
|
|
116
|
+
`);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolve the default fixtures directory. Walks up from the CLI's
|
|
120
|
+
* compiled location to find the `packages/cli/eval/fixtures/` tree.
|
|
121
|
+
* In tests + local dev the caller passes `--fixtures-dir` directly.
|
|
122
|
+
*/
|
|
123
|
+
export function defaultFixturesDir() {
|
|
124
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
125
|
+
// here is .../packages/cli/dist/commands/eval — climb out to packages/cli/.
|
|
126
|
+
return join(here, "..", "..", "..", "eval", "fixtures");
|
|
127
|
+
}
|
|
128
|
+
export function listFixtureIds(fixturesDir) {
|
|
129
|
+
if (!existsSync(fixturesDir))
|
|
130
|
+
return [];
|
|
131
|
+
return readdirSync(fixturesDir)
|
|
132
|
+
.filter((name) => {
|
|
133
|
+
const path = join(fixturesDir, name);
|
|
134
|
+
if (!statSync(path).isDirectory())
|
|
135
|
+
return false;
|
|
136
|
+
return existsSync(join(path, "fixture.json"));
|
|
137
|
+
})
|
|
138
|
+
.sort();
|
|
139
|
+
}
|
|
140
|
+
export function loadFixture(fixturesDir, id) {
|
|
141
|
+
const path = join(fixturesDir, id, "fixture.json");
|
|
142
|
+
if (!existsSync(path)) {
|
|
143
|
+
throw new Error(`Fixture not found: ${id} (expected ${path})`);
|
|
144
|
+
}
|
|
145
|
+
const raw = readFileSync(path, "utf8");
|
|
146
|
+
let parsed;
|
|
147
|
+
try {
|
|
148
|
+
parsed = JSON.parse(raw);
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
throw new Error(`Fixture ${id} is not valid JSON: ${e.message}`);
|
|
152
|
+
}
|
|
153
|
+
validateFixture(parsed, id);
|
|
154
|
+
return parsed;
|
|
155
|
+
}
|
|
156
|
+
function validateFixture(f, idHint) {
|
|
157
|
+
if (!f.id)
|
|
158
|
+
throw new Error(`Fixture ${idHint}: missing 'id'`);
|
|
159
|
+
if (!f.agent)
|
|
160
|
+
throw new Error(`Fixture ${f.id}: missing 'agent'`);
|
|
161
|
+
if (!(f.agent in BUILDERS)) {
|
|
162
|
+
throw new Error(`Fixture ${f.id}: unknown agent '${f.agent}'. Known: ${Object.keys(BUILDERS).sort().join(", ")}`);
|
|
163
|
+
}
|
|
164
|
+
if (!f.input || typeof f.input !== "object") {
|
|
165
|
+
throw new Error(`Fixture ${f.id}: missing 'input' object`);
|
|
166
|
+
}
|
|
167
|
+
if (!Array.isArray(f.expected_prompt_includes)) {
|
|
168
|
+
throw new Error(`Fixture ${f.id}: 'expected_prompt_includes' must be an array of strings`);
|
|
169
|
+
}
|
|
170
|
+
if (f.expected_prompt_includes.length === 0) {
|
|
171
|
+
throw new Error(`Fixture ${f.id}: 'expected_prompt_includes' is empty — a fixture must assert at least one substring`);
|
|
172
|
+
}
|
|
173
|
+
if (f.expected_prompt_excludes && !Array.isArray(f.expected_prompt_excludes)) {
|
|
174
|
+
throw new Error(`Fixture ${f.id}: 'expected_prompt_excludes' must be an array of strings if present`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export function runFixture(f) {
|
|
178
|
+
const builder = BUILDERS[f.agent];
|
|
179
|
+
if (!builder) {
|
|
180
|
+
return {
|
|
181
|
+
id: f.id,
|
|
182
|
+
agent: f.agent,
|
|
183
|
+
status: "error",
|
|
184
|
+
missingIncludes: [],
|
|
185
|
+
unexpectedExcludes: [],
|
|
186
|
+
errorMessage: `No builder registered for agent '${f.agent}'`,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
let prompt;
|
|
190
|
+
try {
|
|
191
|
+
prompt = builder(f.input);
|
|
192
|
+
}
|
|
193
|
+
catch (e) {
|
|
194
|
+
return {
|
|
195
|
+
id: f.id,
|
|
196
|
+
agent: f.agent,
|
|
197
|
+
status: "error",
|
|
198
|
+
missingIncludes: [],
|
|
199
|
+
unexpectedExcludes: [],
|
|
200
|
+
errorMessage: `Prompt builder threw: ${e.message}`,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
const missing = f.expected_prompt_includes.filter((s) => !prompt.includes(s));
|
|
204
|
+
const unexpected = (f.expected_prompt_excludes ?? []).filter((s) => prompt.includes(s));
|
|
205
|
+
return {
|
|
206
|
+
id: f.id,
|
|
207
|
+
agent: f.agent,
|
|
208
|
+
status: missing.length === 0 && unexpected.length === 0 ? "pass" : "fail",
|
|
209
|
+
missingIncludes: missing,
|
|
210
|
+
unexpectedExcludes: unexpected,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function reportResult(r) {
|
|
214
|
+
const icon = r.status === "pass" ? "✓" : r.status === "fail" ? "✗" : "!";
|
|
215
|
+
console.log(`${icon} [${r.agent}] ${r.id}`);
|
|
216
|
+
if (r.status === "fail") {
|
|
217
|
+
if (r.missingIncludes.length > 0) {
|
|
218
|
+
console.log(" Missing required substrings:");
|
|
219
|
+
for (const s of r.missingIncludes)
|
|
220
|
+
console.log(` - ${JSON.stringify(s)}`);
|
|
221
|
+
}
|
|
222
|
+
if (r.unexpectedExcludes.length > 0) {
|
|
223
|
+
console.log(" Found forbidden substrings:");
|
|
224
|
+
for (const s of r.unexpectedExcludes)
|
|
225
|
+
console.log(` - ${JSON.stringify(s)}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else if (r.status === "error") {
|
|
229
|
+
console.log(` ${r.errorMessage}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
export async function evalCmd(argv) {
|
|
233
|
+
const args = parseArgs(argv);
|
|
234
|
+
const fixturesDir = args.fixturesDir ?? defaultFixturesDir();
|
|
235
|
+
if (!args.all && !args.fixtureId && !args.list) {
|
|
236
|
+
console.error("slowcook eval: one of --all / --fixture / --list is required");
|
|
237
|
+
printHelp();
|
|
238
|
+
process.exit(64);
|
|
239
|
+
}
|
|
240
|
+
const allIds = listFixtureIds(fixturesDir);
|
|
241
|
+
if (allIds.length === 0) {
|
|
242
|
+
console.error(`No fixtures found under ${fixturesDir}`);
|
|
243
|
+
process.exit(1);
|
|
244
|
+
}
|
|
245
|
+
if (args.list) {
|
|
246
|
+
console.log(`Fixtures in ${fixturesDir}:`);
|
|
247
|
+
for (const id of allIds) {
|
|
248
|
+
const f = loadFixture(fixturesDir, id);
|
|
249
|
+
console.log(` ${id} [${f.agent}] ${f.description}`);
|
|
250
|
+
}
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
const targets = args.all ? allIds : [args.fixtureId];
|
|
254
|
+
const results = [];
|
|
255
|
+
for (const id of targets) {
|
|
256
|
+
let f;
|
|
257
|
+
try {
|
|
258
|
+
f = loadFixture(fixturesDir, id);
|
|
259
|
+
}
|
|
260
|
+
catch (e) {
|
|
261
|
+
results.push({
|
|
262
|
+
id,
|
|
263
|
+
agent: "?",
|
|
264
|
+
status: "error",
|
|
265
|
+
missingIncludes: [],
|
|
266
|
+
unexpectedExcludes: [],
|
|
267
|
+
errorMessage: e.message,
|
|
268
|
+
});
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
results.push(runFixture(f));
|
|
272
|
+
}
|
|
273
|
+
for (const r of results)
|
|
274
|
+
reportResult(r);
|
|
275
|
+
const passed = results.filter((r) => r.status === "pass").length;
|
|
276
|
+
const failed = results.filter((r) => r.status === "fail").length;
|
|
277
|
+
const errored = results.filter((r) => r.status === "error").length;
|
|
278
|
+
console.log("");
|
|
279
|
+
console.log(`Eval summary: ${passed} passed, ${failed} failed, ${errored} errored.`);
|
|
280
|
+
if (failed > 0 || errored > 0)
|
|
281
|
+
process.exit(1);
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/eval/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook init mock --shape vite` — scaffold a Vite/React SPA mock.
|
|
3
|
+
*
|
|
4
|
+
* Sibling of the Next.js scaffolder (`mock.ts`). The Vite shape is the
|
|
5
|
+
* preferred default for new consumers as of sc#82 — solves the focus-
|
|
6
|
+
* loss / hydration-mismatch / `'use client'`-everywhere class of bugs
|
|
7
|
+
* that the Next.js shape inherits from production.
|
|
8
|
+
*
|
|
9
|
+
* Layout produced:
|
|
10
|
+
*
|
|
11
|
+
* mock/
|
|
12
|
+
* ├── package.json vite + react + react-router-dom + @slowcook-ai/mock-runtime
|
|
13
|
+
* ├── vite.config.ts port 3100; @/ → src/ alias
|
|
14
|
+
* ├── tsconfig.json ESNext + bundler resolution + jsx react-jsx
|
|
15
|
+
* ├── index.html #root mount
|
|
16
|
+
* ├── .gitignore node_modules, dist
|
|
17
|
+
* ├── README.md run instructions + how vibe extends the router
|
|
18
|
+
* └── src/
|
|
19
|
+
* ├── main.tsx StrictMode + BrowserRouter + ScenarioRegistryProvider
|
|
20
|
+
* ├── App.tsx <Routes /> — vibe appends new screen routes here
|
|
21
|
+
* ├── design-system/ ← `slowcook brand` populates this; seeded minimal here
|
|
22
|
+
* │ ├── tokens.ts
|
|
23
|
+
* │ ├── css.ts
|
|
24
|
+
* │ └── index.ts
|
|
25
|
+
* ├── lib/
|
|
26
|
+
* │ └── scenario-registry.ts
|
|
27
|
+
* └── apps/.gitkeep
|
|
28
|
+
*
|
|
29
|
+
* Plus, at the repo root:
|
|
30
|
+
* .brewing/mock.yaml downstream agents read this to know the shape
|
|
31
|
+
*
|
|
32
|
+
* The design-system files seeded here are MINIMAL — a neutral palette,
|
|
33
|
+
* just enough so `npm run dev` renders something. The full design-system
|
|
34
|
+
* (logo, full primitives, ds-* utility CSS) is the output of the
|
|
35
|
+
* `slowcook brand` agent (Phase 4 of sc#82); it runs once per project
|
|
36
|
+
* and overwrites these seed files.
|
|
37
|
+
*/
|
|
38
|
+
export interface MockViteInitArgs {
|
|
39
|
+
cwd: string;
|
|
40
|
+
force: boolean;
|
|
41
|
+
dryRun: boolean;
|
|
42
|
+
/** Pinned version of @slowcook-ai/mock-runtime to depend on. */
|
|
43
|
+
runtimeVersion: string;
|
|
44
|
+
}
|
|
45
|
+
interface FileToWrite {
|
|
46
|
+
path: string;
|
|
47
|
+
contents: string;
|
|
48
|
+
skipIfExists?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare function planMockViteFiles(args: MockViteInitArgs): FileToWrite[];
|
|
51
|
+
export declare function applyMockViteFiles(args: MockViteInitArgs, files: FileToWrite[]): void;
|
|
52
|
+
export declare function initMockVite(argv: string[], cliVersion: string): Promise<void>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=mock-vite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-vite.d.ts","sourceRoot":"","sources":["../../../src/commands/init/mock-vite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,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,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAiBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,EAAE,CAmBvE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAerF;AAggBD,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BpF"}
|