@slowcook-ai/cli 0.19.0-alpha.18 → 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/dist/cli.js +28 -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.map +1 -1
- package/dist/commands/eval/index.js +15 -1
- package/dist/commands/eval/index.js.map +1 -1
- 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/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/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 +29 -0
- package/dist/commands/refine/history-index.d.ts.map +1 -1
- package/dist/commands/refine/history-index.js +63 -0
- 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,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook dev-env <subcmd>` — manages the consumer's long-lived
|
|
3
|
+
* dev/preview environment. Phase 2 of the dev-env design.
|
|
4
|
+
*
|
|
5
|
+
* Subcommands:
|
|
6
|
+
*
|
|
7
|
+
* push --story <id> [--branch <name>]
|
|
8
|
+
* Force-push the current branch (or --branch) to the configured
|
|
9
|
+
* `source_branch` (default: `dev`). Agents (brew, plate) invoke
|
|
10
|
+
* this to preview their story-branch on the shared dev URL.
|
|
11
|
+
* Phase 3 wires this into brew/plate workflows automatically.
|
|
12
|
+
*
|
|
13
|
+
* switch --story <id>
|
|
14
|
+
* Locate the PR for story <id>, force-push its HEAD to
|
|
15
|
+
* `source_branch`. Operator-driven version of `push`.
|
|
16
|
+
*
|
|
17
|
+
* up | sync | reset
|
|
18
|
+
* Phase 2 stubs — print the canonical shell-out for the consumer
|
|
19
|
+
* to wire into their dev-deploy workflow. Phase 2.1 fills in the
|
|
20
|
+
* SSH-driven runtime path.
|
|
21
|
+
*
|
|
22
|
+
* init
|
|
23
|
+
* Phase 2.1 stub — scaffold `.brewing/dev-env.yaml` from detected
|
|
24
|
+
* apps. Not implemented yet; consumers hand-author for now.
|
|
25
|
+
*/
|
|
26
|
+
import { execSync } from "node:child_process";
|
|
27
|
+
import { loadDevEnvConfig } from "./config.js";
|
|
28
|
+
import { devEnvInit } from "./init.js";
|
|
29
|
+
function parseArgs(argv) {
|
|
30
|
+
const args = {
|
|
31
|
+
subcommand: argv[0] ?? "help",
|
|
32
|
+
repoRoot: process.cwd(),
|
|
33
|
+
};
|
|
34
|
+
for (let i = 1; i < argv.length; i++) {
|
|
35
|
+
const a = argv[i];
|
|
36
|
+
const next = argv[i + 1];
|
|
37
|
+
if (a === "--story" && next) {
|
|
38
|
+
args.story = next;
|
|
39
|
+
i++;
|
|
40
|
+
}
|
|
41
|
+
else if (a === "--branch" && next) {
|
|
42
|
+
args.branch = next;
|
|
43
|
+
i++;
|
|
44
|
+
}
|
|
45
|
+
else if (a === "--cwd" && next) {
|
|
46
|
+
args.repoRoot = next;
|
|
47
|
+
i++;
|
|
48
|
+
}
|
|
49
|
+
else if (a === "--help" || a === "-h") {
|
|
50
|
+
printHelp();
|
|
51
|
+
process.exit(0);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return args;
|
|
55
|
+
}
|
|
56
|
+
function printHelp() {
|
|
57
|
+
console.log(`
|
|
58
|
+
slowcook dev-env — manage the long-lived dev/preview environment
|
|
59
|
+
|
|
60
|
+
Subcommands:
|
|
61
|
+
init [--apps-dir <path>] [--force]
|
|
62
|
+
Scaffold .brewing/dev-env.yaml from detected apps in apps/*.
|
|
63
|
+
Infers per-app mode from package.json deps (Next → dev,
|
|
64
|
+
NestJS → nest-watch, else → start). Assigns ports starting at
|
|
65
|
+
3000. ssh_target left as REPLACE_ME — hand-edit.
|
|
66
|
+
|
|
67
|
+
push --story <id> [--branch <name>]
|
|
68
|
+
Force-push the current branch (or --branch) to the dev env's
|
|
69
|
+
source_branch (default: dev). Agents invoke this to preview a
|
|
70
|
+
story-branch on the shared dev URL.
|
|
71
|
+
|
|
72
|
+
switch --story <id>
|
|
73
|
+
Look up the PR for story <id> and push its HEAD to source_branch.
|
|
74
|
+
|
|
75
|
+
up | sync | reset
|
|
76
|
+
Phase 2 stubs — print the canonical shell-out for the consumer
|
|
77
|
+
to wire into their dev-deploy workflow.
|
|
78
|
+
|
|
79
|
+
Config:
|
|
80
|
+
.brewing/dev-env.yaml describes apps, modes, ports, ssh target, seed
|
|
81
|
+
script. See slowcook's docs/dev-env.md for the schema.
|
|
82
|
+
|
|
83
|
+
Examples:
|
|
84
|
+
slowcook dev-env push --story 001
|
|
85
|
+
slowcook dev-env switch --story 001
|
|
86
|
+
`);
|
|
87
|
+
}
|
|
88
|
+
export async function devEnv(argv) {
|
|
89
|
+
const args = parseArgs(argv);
|
|
90
|
+
// help has no config dependency — render before anything else
|
|
91
|
+
if (args.subcommand === "help" ||
|
|
92
|
+
args.subcommand === "--help" ||
|
|
93
|
+
args.subcommand === "-h") {
|
|
94
|
+
printHelp();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// init runs BEFORE config exists — it's the bootstrap step.
|
|
98
|
+
if (args.subcommand === "init") {
|
|
99
|
+
await devEnvInit(argv.slice(1));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
let config;
|
|
103
|
+
try {
|
|
104
|
+
config = loadDevEnvConfig(args.repoRoot);
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
console.error(`slowcook dev-env: ${e.message}`);
|
|
108
|
+
process.exit(64);
|
|
109
|
+
}
|
|
110
|
+
switch (args.subcommand) {
|
|
111
|
+
case "push":
|
|
112
|
+
return runPush(args, config);
|
|
113
|
+
case "switch":
|
|
114
|
+
return runSwitch(args, config);
|
|
115
|
+
case "up":
|
|
116
|
+
case "sync":
|
|
117
|
+
case "reset":
|
|
118
|
+
return printStubShell(args.subcommand, config);
|
|
119
|
+
default:
|
|
120
|
+
console.error(`Unknown subcommand: ${args.subcommand}`);
|
|
121
|
+
printHelp();
|
|
122
|
+
process.exit(64);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Force-push the local branch to source_branch on origin. The git
|
|
127
|
+
* mechanics are the load-bearing part of Phase 3's auto-preview flow.
|
|
128
|
+
*/
|
|
129
|
+
function runPush(args, config) {
|
|
130
|
+
const sourceBranch = config.source_branch;
|
|
131
|
+
const localBranch = args.branch ??
|
|
132
|
+
execSync("git rev-parse --abbrev-ref HEAD", {
|
|
133
|
+
cwd: args.repoRoot,
|
|
134
|
+
encoding: "utf8",
|
|
135
|
+
}).trim();
|
|
136
|
+
if (!localBranch || localBranch === "HEAD") {
|
|
137
|
+
console.error("slowcook dev-env push: couldn't resolve a local branch (detached HEAD?). Pass --branch <name>.");
|
|
138
|
+
process.exit(64);
|
|
139
|
+
}
|
|
140
|
+
console.log(`[dev-env push] ${localBranch} → origin/${sourceBranch}${args.story ? ` (story-${args.story})` : ""}`);
|
|
141
|
+
try {
|
|
142
|
+
execSync(`git push --force origin ${localBranch}:${sourceBranch}`, {
|
|
143
|
+
cwd: args.repoRoot,
|
|
144
|
+
stdio: "inherit",
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
console.error(`slowcook dev-env push: git push failed. Check your push permissions on origin/${sourceBranch}.`);
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
console.log(`[dev-env push] done. dev-deploy workflow will fire on origin/${sourceBranch}.`);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Look up a PR by story id (via the gh CLI) and push its HEAD to
|
|
155
|
+
* source_branch. For operator-driven "show me story X on the dev URL"
|
|
156
|
+
* without checking out the branch locally.
|
|
157
|
+
*/
|
|
158
|
+
function runSwitch(args, config) {
|
|
159
|
+
if (!args.story) {
|
|
160
|
+
console.error("slowcook dev-env switch: --story <id> required.");
|
|
161
|
+
process.exit(64);
|
|
162
|
+
}
|
|
163
|
+
const sourceBranch = config.source_branch;
|
|
164
|
+
// Use the GitHub CLI to find the open PR for the story. gh is part
|
|
165
|
+
// of slowcook's hard dependencies (already used by every other
|
|
166
|
+
// command); fail clearly if missing.
|
|
167
|
+
let prRef;
|
|
168
|
+
try {
|
|
169
|
+
const out = execSync(`gh pr list --search "story-${args.story} in:title" --json headRefName,number --limit 1 --jq '.[0].headRefName'`, { cwd: args.repoRoot, encoding: "utf8" }).trim();
|
|
170
|
+
if (!out) {
|
|
171
|
+
console.error(`slowcook dev-env switch: no open PR found with "story-${args.story}" in the title.`);
|
|
172
|
+
process.exit(1);
|
|
173
|
+
}
|
|
174
|
+
prRef = out;
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
console.error(`slowcook dev-env switch: gh CLI failed — ${e.message.slice(0, 200)}`);
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
console.log(`[dev-env switch] story-${args.story} → ${prRef} → origin/${sourceBranch}`);
|
|
181
|
+
// Fetch the PR's branch + push it to source_branch.
|
|
182
|
+
execSync(`git fetch origin ${prRef}`, {
|
|
183
|
+
cwd: args.repoRoot,
|
|
184
|
+
stdio: "inherit",
|
|
185
|
+
});
|
|
186
|
+
execSync(`git push --force origin origin/${prRef}:${sourceBranch}`, {
|
|
187
|
+
cwd: args.repoRoot,
|
|
188
|
+
stdio: "inherit",
|
|
189
|
+
});
|
|
190
|
+
console.log(`[dev-env switch] done.`);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Stub for up / sync / reset — emits the canonical shell command the
|
|
194
|
+
* consumer wires into their dev-deploy workflow. Phase 2.1 will fill
|
|
195
|
+
* in the SSH-driven runtime path that respects ssh_target + apps[*].mode.
|
|
196
|
+
*/
|
|
197
|
+
function printStubShell(subcommand, config) {
|
|
198
|
+
const apps = Object.keys(config.apps).join(", ");
|
|
199
|
+
console.log(`slowcook dev-env ${subcommand}: phase-2 stub. Apps configured: ${apps}.`);
|
|
200
|
+
console.log("");
|
|
201
|
+
switch (subcommand) {
|
|
202
|
+
case "up":
|
|
203
|
+
console.log("Wire this into your dev-deploy workflow:");
|
|
204
|
+
console.log(" docker compose -f compose.dev.yml up -d --build");
|
|
205
|
+
if (config.seed_script) {
|
|
206
|
+
console.log(` pnpm exec ts-node ${config.seed_script}`);
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
case "sync":
|
|
210
|
+
console.log("Wire this into your dev-deploy workflow:");
|
|
211
|
+
console.log(` git fetch origin && git reset --hard origin/${config.source_branch}`);
|
|
212
|
+
console.log(" pnpm install --prefer-frozen-lockfile && pnpm build");
|
|
213
|
+
console.log(" docker compose -f compose.dev.yml up -d --build");
|
|
214
|
+
break;
|
|
215
|
+
case "reset":
|
|
216
|
+
console.log("Wire this into your dev-deploy workflow:");
|
|
217
|
+
if (config.seed_script) {
|
|
218
|
+
console.log(` pnpm exec ts-node ${config.seed_script} --reset`);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
console.log(" (no seed_script configured — nothing to reset)");
|
|
222
|
+
}
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/dev-env/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook dev-env init` — scaffold `.brewing/dev-env.yaml` from
|
|
3
|
+
* detected apps in the consumer's repo. Phase 2.1 of the dev-env arc.
|
|
4
|
+
*
|
|
5
|
+
* Detection heuristics (lightweight, no actual build):
|
|
6
|
+
* - Walks `apps/*` looking for sub-dirs with a package.json.
|
|
7
|
+
* - Infers `mode` from dependencies:
|
|
8
|
+
* Next.js → mode: dev (hot-reload-friendly)
|
|
9
|
+
* NestJS → mode: nest-watch
|
|
10
|
+
* fallback → mode: start
|
|
11
|
+
* - Assigns sequential ports starting at 3000.
|
|
12
|
+
* - Sets reasonable defaults for source_branch, persistence.
|
|
13
|
+
* - Leaves ssh_target empty (consumer fills in).
|
|
14
|
+
*
|
|
15
|
+
* The output is a STARTING POINT — consumers tweak ports, container
|
|
16
|
+
* names, ssh_target details by hand. `init --force` overwrites; the
|
|
17
|
+
* default refuses to clobber an existing file.
|
|
18
|
+
*/
|
|
19
|
+
interface DetectedApp {
|
|
20
|
+
name: string;
|
|
21
|
+
mode: "dev" | "start" | "nest-watch";
|
|
22
|
+
port: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function detectAppsForInit(repoRoot: string, appsDir?: string): DetectedApp[];
|
|
25
|
+
export declare function renderDevEnvYaml(apps: DetectedApp[]): string;
|
|
26
|
+
export declare function devEnvInit(argv: string[]): Promise<void>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/dev-env/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AA8BD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAS,GACf,WAAW,EAAE,CAuBf;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,CAqC5D;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B9D"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook dev-env init` — scaffold `.brewing/dev-env.yaml` from
|
|
3
|
+
* detected apps in the consumer's repo. Phase 2.1 of the dev-env arc.
|
|
4
|
+
*
|
|
5
|
+
* Detection heuristics (lightweight, no actual build):
|
|
6
|
+
* - Walks `apps/*` looking for sub-dirs with a package.json.
|
|
7
|
+
* - Infers `mode` from dependencies:
|
|
8
|
+
* Next.js → mode: dev (hot-reload-friendly)
|
|
9
|
+
* NestJS → mode: nest-watch
|
|
10
|
+
* fallback → mode: start
|
|
11
|
+
* - Assigns sequential ports starting at 3000.
|
|
12
|
+
* - Sets reasonable defaults for source_branch, persistence.
|
|
13
|
+
* - Leaves ssh_target empty (consumer fills in).
|
|
14
|
+
*
|
|
15
|
+
* The output is a STARTING POINT — consumers tweak ports, container
|
|
16
|
+
* names, ssh_target details by hand. `init --force` overwrites; the
|
|
17
|
+
* default refuses to clobber an existing file.
|
|
18
|
+
*/
|
|
19
|
+
import { readFileSync, writeFileSync, readdirSync, existsSync, statSync, mkdirSync } from "node:fs";
|
|
20
|
+
import { join, dirname } from "node:path";
|
|
21
|
+
import YAML from "yaml";
|
|
22
|
+
function parseArgs(argv) {
|
|
23
|
+
const args = {
|
|
24
|
+
repoRoot: process.cwd(),
|
|
25
|
+
force: false,
|
|
26
|
+
appsDir: "apps",
|
|
27
|
+
};
|
|
28
|
+
for (let i = 0; i < argv.length; i++) {
|
|
29
|
+
const a = argv[i];
|
|
30
|
+
const next = argv[i + 1];
|
|
31
|
+
if (a === "--cwd" && next) {
|
|
32
|
+
args.repoRoot = next;
|
|
33
|
+
i++;
|
|
34
|
+
}
|
|
35
|
+
else if (a === "--apps-dir" && next) {
|
|
36
|
+
args.appsDir = next;
|
|
37
|
+
i++;
|
|
38
|
+
}
|
|
39
|
+
else if (a === "--force") {
|
|
40
|
+
args.force = true;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return args;
|
|
44
|
+
}
|
|
45
|
+
export function detectAppsForInit(repoRoot, appsDir = "apps") {
|
|
46
|
+
const root = join(repoRoot, appsDir);
|
|
47
|
+
if (!existsSync(root))
|
|
48
|
+
return [];
|
|
49
|
+
const out = [];
|
|
50
|
+
let port = 3000;
|
|
51
|
+
for (const name of readdirSync(root).sort()) {
|
|
52
|
+
const appDir = join(root, name);
|
|
53
|
+
if (!statSync(appDir).isDirectory())
|
|
54
|
+
continue;
|
|
55
|
+
const pkgPath = join(appDir, "package.json");
|
|
56
|
+
if (!existsSync(pkgPath))
|
|
57
|
+
continue;
|
|
58
|
+
let pkg = {};
|
|
59
|
+
try {
|
|
60
|
+
pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
|
|
66
|
+
let mode = "start";
|
|
67
|
+
if (deps["next"])
|
|
68
|
+
mode = "dev";
|
|
69
|
+
else if (deps["@nestjs/core"] || deps["@nestjs/common"])
|
|
70
|
+
mode = "nest-watch";
|
|
71
|
+
out.push({ name, mode, port: port++ });
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
export function renderDevEnvYaml(apps) {
|
|
76
|
+
const yaml = {
|
|
77
|
+
$schema: "./dev-env.schema.json",
|
|
78
|
+
schema_version: 1,
|
|
79
|
+
source_branch: "dev",
|
|
80
|
+
seed_script: "scripts/seed-dev-data.ts",
|
|
81
|
+
ssh_target: {
|
|
82
|
+
host: "REPLACE_ME.example.com",
|
|
83
|
+
user: "deploy",
|
|
84
|
+
checkout_dir: "/opt/yourapp-dev",
|
|
85
|
+
key_secret: "YOURAPP_DEV_SSH_KEY",
|
|
86
|
+
},
|
|
87
|
+
persistence: {
|
|
88
|
+
db_volume: "pg-dev-data",
|
|
89
|
+
uploads_volume: "",
|
|
90
|
+
},
|
|
91
|
+
apps: Object.fromEntries(apps.map((a) => [
|
|
92
|
+
a.name,
|
|
93
|
+
{
|
|
94
|
+
mode: a.mode,
|
|
95
|
+
port: a.port,
|
|
96
|
+
container: a.name,
|
|
97
|
+
},
|
|
98
|
+
])),
|
|
99
|
+
};
|
|
100
|
+
return (`# slowcook dev-env config — generated by \`slowcook dev-env init\`.\n` +
|
|
101
|
+
`# Hand-tweak: ssh_target.{host,user,checkout_dir,key_secret} must point at\n` +
|
|
102
|
+
`# YOUR deploy box; ports may collide on a small host — adjust to free ones;\n` +
|
|
103
|
+
`# container names default to app names — change if your compose uses others.\n` +
|
|
104
|
+
`#\n` +
|
|
105
|
+
`# See packages/cli/src/commands/dev-env/config.ts in slowcook for the\n` +
|
|
106
|
+
`# full zod schema.\n\n` +
|
|
107
|
+
YAML.stringify(yaml, { lineWidth: 0 }));
|
|
108
|
+
}
|
|
109
|
+
export async function devEnvInit(argv) {
|
|
110
|
+
const args = parseArgs(argv);
|
|
111
|
+
const outPath = join(args.repoRoot, ".brewing/dev-env.yaml");
|
|
112
|
+
if (existsSync(outPath) && !args.force) {
|
|
113
|
+
console.error(`slowcook dev-env init: ${outPath} already exists. Pass --force to overwrite.`);
|
|
114
|
+
process.exit(64);
|
|
115
|
+
}
|
|
116
|
+
const apps = detectAppsForInit(args.repoRoot, args.appsDir);
|
|
117
|
+
if (apps.length === 0) {
|
|
118
|
+
console.error(`slowcook dev-env init: no apps detected under \`${args.appsDir}/\`. Pass --apps-dir <path> or hand-author the config.`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
mkdirSync(dirname(outPath), { recursive: true });
|
|
122
|
+
writeFileSync(outPath, renderDevEnvYaml(apps), "utf8");
|
|
123
|
+
console.log(`slowcook dev-env init: wrote ${outPath}`);
|
|
124
|
+
console.log(` apps detected (${apps.length}):`);
|
|
125
|
+
for (const a of apps) {
|
|
126
|
+
console.log(` - ${a.name} (mode: ${a.mode}, port: ${a.port})`);
|
|
127
|
+
}
|
|
128
|
+
console.log("");
|
|
129
|
+
console.log("Next steps:");
|
|
130
|
+
console.log(" 1. Edit ssh_target.{host,user,checkout_dir,key_secret}");
|
|
131
|
+
console.log(" 2. Adjust ports if they collide on your deploy box");
|
|
132
|
+
console.log(" 3. Add the dev-deploy.yml workflow (see slowcook docs/dev-env-checkpoint-phase-3.md for the canonical shape)");
|
|
133
|
+
console.log(` 4. Set the SSH-key secret named in ssh_target.key_secret on your repo`);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/dev-env/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAiBH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAClC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAsGD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAS5D;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAcpE;AA0BD,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,aAAa,CAkCpD;AAmBD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD3D"}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
import { readFileSync, readdirSync, existsSync, statSync } from "node:fs";
|
|
24
24
|
import { dirname, join } from "node:path";
|
|
25
25
|
import { fileURLToPath } from "node:url";
|
|
26
|
-
import { buildChefPrompt, buildChefOrchestratePrompt, buildInvestigateUserPrompt, buildNavigatorPrompt, buildPlateAmendmentPrompt, buildSiftTurnPrompt, buildVibeUserPrompt, } from "@slowcook-ai/llm-anthropic";
|
|
26
|
+
import { buildChefPrompt, buildChefOrchestratePrompt, buildInvestigateUserPrompt, buildNavigatorPrompt, buildPlateAmendmentPrompt, buildSiftTurnPrompt, buildVibeUserPrompt, REFINEMENT_ANALYST_SYSTEM, BROWNFIELD_ANSWER_SYSTEM, } from "@slowcook-ai/llm-anthropic";
|
|
27
27
|
/**
|
|
28
28
|
* Map from `fixture.agent` → prompt-builder function. Each builder is
|
|
29
29
|
* the canonical entrypoint that consumer agents call at runtime — so
|
|
@@ -51,6 +51,20 @@ const BUILDERS = {
|
|
|
51
51
|
},
|
|
52
52
|
sift: (args) => buildSiftTurnPrompt(args),
|
|
53
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
|
+
},
|
|
54
68
|
};
|
|
55
69
|
function parseArgs(argv) {
|
|
56
70
|
const args = { all: false, list: false };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/eval/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,
|
|
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"}
|