@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
package/dist/cli.js
CHANGED
|
@@ -29,6 +29,9 @@ import { runMock } from "./commands/run-mock/index.js";
|
|
|
29
29
|
import { dispatch } from "./commands/dispatch/index.js";
|
|
30
30
|
import { fixtures } from "./commands/fixtures/index.js";
|
|
31
31
|
import { evalCmd } from "./commands/eval/index.js";
|
|
32
|
+
import { devEnv } from "./commands/dev-env/index.js";
|
|
33
|
+
import { budget } from "./commands/budget/index.js";
|
|
34
|
+
import { brand } from "./commands/brand/index.js";
|
|
32
35
|
// Read VERSION from package.json at runtime so the CLI's self-reported
|
|
33
36
|
// version, the spec's `refined_by` field, and the init template's workflow
|
|
34
37
|
// pin all stay in lockstep with the package version. Prevents the silent
|
|
@@ -71,6 +74,9 @@ Usage:
|
|
|
71
74
|
slowcook dispatch <step> [inputs...]
|
|
72
75
|
slowcook fixtures check [--max-age-days <n>] [--story <id>]
|
|
73
76
|
slowcook eval (--all | --fixture <id> | --list) [--fixtures-dir <path>]
|
|
77
|
+
slowcook dev-env (push|switch|up|sync|reset) [--story <id>] [--branch <name>]
|
|
78
|
+
slowcook budget [show|set|rm] [--monthly <usd>] [--start-day <1-31>] [--story <usd>] [--cwd <path>]
|
|
79
|
+
slowcook brand [--brief <prose>] [--refresh] [--dry-run] [--model <id>] [--cwd <path>]
|
|
74
80
|
slowcook version
|
|
75
81
|
slowcook help
|
|
76
82
|
|
|
@@ -102,6 +108,8 @@ Commands available in ${VERSION}:
|
|
|
102
108
|
recon (0.17.6+) Pre-brew structural divergence check. Compares story tests against mock + src/, surfaces missing components / testid gaps / brownfield rename hazards. Runs in slowcook-brew-auto.yml before brew dispatch.
|
|
103
109
|
run-mock (0.16-α.17) One-command mock launch + auto-pull. \`run-mock <story>\`: checkout mockup branch, npm install in mock/, run next dev with overlay env vars, poll origin every 15s + git pull --ff-only on plate amendments.
|
|
104
110
|
dispatch Trigger a slowcook GitHub Actions workflow remotely (brew / testgen / refine).
|
|
111
|
+
budget (0.19.0-α.35) Manage the project monthly budget for the fuel gauge. \`budget set --monthly 50\` writes .brewing/budget.yaml; no args shows config + month-to-date spend.
|
|
112
|
+
brand (0.19.0-α.40, sc#82 Phase 4) Design-system foundation agent. Reads a brand brief (\`.brewing/brand.yaml\` or \`--brief\`) and emits mock/src/design-system/{tokens.ts, css.ts}. Runs once per project; \`--refresh\` overwrites.
|
|
105
113
|
|
|
106
114
|
Coming in later versions:
|
|
107
115
|
review, dashboard
|
|
@@ -307,6 +315,26 @@ async function main() {
|
|
|
307
315
|
// against silent context drops.
|
|
308
316
|
await evalCmd(args.slice(1));
|
|
309
317
|
return;
|
|
318
|
+
case "dev-env":
|
|
319
|
+
// 0.19.0-α.21 (dev-env Phase 2) — long-lived preview env on
|
|
320
|
+
// a shared branch. push/switch implemented; up/sync/reset stub
|
|
321
|
+
// print canonical shell-outs for now.
|
|
322
|
+
await devEnv(args.slice(1));
|
|
323
|
+
return;
|
|
324
|
+
case "budget":
|
|
325
|
+
// 0.19.0-α.35 (sc#66 follow-up) — manage .brewing/budget.yaml.
|
|
326
|
+
// No args = show current config + month-to-date spend. `set
|
|
327
|
+
// --monthly N` writes; `rm` deletes (disables the fuel gauge).
|
|
328
|
+
await budget(args.slice(1));
|
|
329
|
+
return;
|
|
330
|
+
case "brand":
|
|
331
|
+
// 0.19.0-α.40 (sc#82 Phase 4) — design-system foundation agent.
|
|
332
|
+
// Runs once per consumer (or on --refresh) to populate
|
|
333
|
+
// mock/src/design-system/{tokens.ts, css.ts} from a brand brief.
|
|
334
|
+
// Vibe/plate/brew inherit these tokens; no more shadcn-default
|
|
335
|
+
// drift when the consumer has a real brand.
|
|
336
|
+
await brand(args.slice(1), VERSION);
|
|
337
|
+
return;
|
|
310
338
|
case "version":
|
|
311
339
|
case "--version":
|
|
312
340
|
case "-v":
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
declare const BrandConfigSchema: z.ZodObject<{
|
|
3
|
+
schema_version: z.ZodLiteral<1>;
|
|
4
|
+
name: z.ZodString;
|
|
5
|
+
description: z.ZodString;
|
|
6
|
+
/** Free-form palette hint (e.g. "soft teals + warm corals"). */
|
|
7
|
+
palette_hint: z.ZodOptional<z.ZodString>;
|
|
8
|
+
/** Languages the app supports (e.g. ["en", "fa"]). Drives FONTS entries. */
|
|
9
|
+
languages: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
10
|
+
/** Optional explicit hex codes (PM nails specific values). */
|
|
11
|
+
colors: z.ZodOptional<z.ZodObject<{
|
|
12
|
+
primary: z.ZodOptional<z.ZodString>;
|
|
13
|
+
accent: z.ZodOptional<z.ZodString>;
|
|
14
|
+
}, "strip", z.ZodTypeAny, {
|
|
15
|
+
primary?: string | undefined;
|
|
16
|
+
accent?: string | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
primary?: string | undefined;
|
|
19
|
+
accent?: string | undefined;
|
|
20
|
+
}>>;
|
|
21
|
+
/** Optional font preferences. */
|
|
22
|
+
fonts_hint: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
schema_version: 1;
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
languages: string[];
|
|
28
|
+
palette_hint?: string | undefined;
|
|
29
|
+
colors?: {
|
|
30
|
+
primary?: string | undefined;
|
|
31
|
+
accent?: string | undefined;
|
|
32
|
+
} | undefined;
|
|
33
|
+
fonts_hint?: string | undefined;
|
|
34
|
+
}, {
|
|
35
|
+
schema_version: 1;
|
|
36
|
+
name: string;
|
|
37
|
+
description: string;
|
|
38
|
+
palette_hint?: string | undefined;
|
|
39
|
+
languages?: string[] | undefined;
|
|
40
|
+
colors?: {
|
|
41
|
+
primary?: string | undefined;
|
|
42
|
+
accent?: string | undefined;
|
|
43
|
+
} | undefined;
|
|
44
|
+
fonts_hint?: string | undefined;
|
|
45
|
+
}>;
|
|
46
|
+
export type BrandConfig = z.infer<typeof BrandConfigSchema>;
|
|
47
|
+
interface BrandArgs {
|
|
48
|
+
cwd: string;
|
|
49
|
+
refresh: boolean;
|
|
50
|
+
dryRun: boolean;
|
|
51
|
+
briefInline: string | undefined;
|
|
52
|
+
model: string;
|
|
53
|
+
}
|
|
54
|
+
export declare function loadBrandConfig(repoRoot: string): BrandConfig | null;
|
|
55
|
+
export declare function buildProjectContext(repoRoot: string, args: BrandArgs): string;
|
|
56
|
+
export declare function brand(argv: string[], _cliVersion: string): Promise<void>;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/brand/index.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,QAAA,MAAM,iBAAiB;;;;IAIrB,gEAAgE;;IAEhE,4EAA4E;;IAE5E,8DAA8D;;;;;;;;;;;IAO9D,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;EAEjC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,UAAU,SAAS;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAoED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAWpE;AAcD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CA6B7E;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwG9E"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook brand` — design-system foundation agent (sc#82 Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* Runs ONCE per consumer (or on `--refresh`) to populate
|
|
5
|
+
* `mock/src/design-system/{tokens.ts, css.ts}` from a brand brief.
|
|
6
|
+
* Every downstream agent (vibe, plate, brew) inherits the tokens this
|
|
7
|
+
* emits. Without brand, vibe falls back to the neutral seed values
|
|
8
|
+
* `slowcook init mock --shape vite` scaffolds and outputs drift toward
|
|
9
|
+
* shadcn-default styling.
|
|
10
|
+
*
|
|
11
|
+
* Brief sources, in priority order:
|
|
12
|
+
* 1. `--brief "<inline prose>"` flag
|
|
13
|
+
* 2. `.brewing/brand.yaml` file (consumer-authored)
|
|
14
|
+
* 3. CLAUDE.md / README.md (best-effort extraction)
|
|
15
|
+
*
|
|
16
|
+
* Idempotency: refuses to overwrite `mock/src/design-system/tokens.ts`
|
|
17
|
+
* + `css.ts` without `--refresh`. Designed to be safe re-run as the
|
|
18
|
+
* project evolves; PMs explicitly opt-in to brand drift.
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, readFileSync, } from "node:fs";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import YAML from "yaml";
|
|
23
|
+
import { z } from "zod";
|
|
24
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
25
|
+
import { BRAND_SYSTEM, costUsdForUsage } from "@slowcook-ai/llm-anthropic";
|
|
26
|
+
import { parseVibeOutput, writeVibeFiles } from "../vibe/emit.js";
|
|
27
|
+
const DEFAULT_MODEL = "claude-opus-4-7";
|
|
28
|
+
const MAX_TOKENS = 8192;
|
|
29
|
+
const BrandConfigSchema = z.object({
|
|
30
|
+
schema_version: z.literal(1),
|
|
31
|
+
name: z.string().min(1),
|
|
32
|
+
description: z.string().min(1),
|
|
33
|
+
/** Free-form palette hint (e.g. "soft teals + warm corals"). */
|
|
34
|
+
palette_hint: z.string().optional(),
|
|
35
|
+
/** Languages the app supports (e.g. ["en", "fa"]). Drives FONTS entries. */
|
|
36
|
+
languages: z.array(z.string()).min(1).default(["en"]),
|
|
37
|
+
/** Optional explicit hex codes (PM nails specific values). */
|
|
38
|
+
colors: z
|
|
39
|
+
.object({
|
|
40
|
+
primary: z.string().regex(/^#[0-9A-Fa-f]{6}$/).optional(),
|
|
41
|
+
accent: z.string().regex(/^#[0-9A-Fa-f]{6}$/).optional(),
|
|
42
|
+
})
|
|
43
|
+
.optional(),
|
|
44
|
+
/** Optional font preferences. */
|
|
45
|
+
fonts_hint: z.string().optional(),
|
|
46
|
+
});
|
|
47
|
+
function parseArgs(argv) {
|
|
48
|
+
const args = {
|
|
49
|
+
cwd: process.cwd(),
|
|
50
|
+
refresh: false,
|
|
51
|
+
dryRun: false,
|
|
52
|
+
briefInline: undefined,
|
|
53
|
+
model: DEFAULT_MODEL,
|
|
54
|
+
};
|
|
55
|
+
for (let i = 0; i < argv.length; i++) {
|
|
56
|
+
const a = argv[i];
|
|
57
|
+
const next = argv[i + 1];
|
|
58
|
+
if (a === "--cwd" && next) {
|
|
59
|
+
args.cwd = next;
|
|
60
|
+
i++;
|
|
61
|
+
}
|
|
62
|
+
else if (a === "--refresh") {
|
|
63
|
+
args.refresh = true;
|
|
64
|
+
}
|
|
65
|
+
else if (a === "--dry-run") {
|
|
66
|
+
args.dryRun = true;
|
|
67
|
+
}
|
|
68
|
+
else if (a === "--brief" && next) {
|
|
69
|
+
args.briefInline = next;
|
|
70
|
+
i++;
|
|
71
|
+
}
|
|
72
|
+
else if (a === "--model" && next) {
|
|
73
|
+
args.model = next;
|
|
74
|
+
i++;
|
|
75
|
+
}
|
|
76
|
+
else if (a === "--help" || a === "-h") {
|
|
77
|
+
printHelp();
|
|
78
|
+
process.exit(0);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return args;
|
|
82
|
+
}
|
|
83
|
+
function printHelp() {
|
|
84
|
+
console.log(`
|
|
85
|
+
slowcook brand — design-system foundation agent (sc#82 Phase 4)
|
|
86
|
+
|
|
87
|
+
Emits mock/src/design-system/{tokens.ts, css.ts} from a brand brief.
|
|
88
|
+
Runs once per project, on demand. Vibe + plate + brew inherit the
|
|
89
|
+
tokens this writes.
|
|
90
|
+
|
|
91
|
+
Usage:
|
|
92
|
+
slowcook brand Read brief from .brewing/brand.yaml + emit (refuses to overwrite without --refresh)
|
|
93
|
+
slowcook brand --brief "<prose>" Use inline brief instead of brand.yaml
|
|
94
|
+
slowcook brand --refresh Overwrite existing design-system files
|
|
95
|
+
slowcook brand --dry-run Print planned files without writing
|
|
96
|
+
slowcook brand --cwd <path> Project root (default: cwd)
|
|
97
|
+
slowcook brand --model <id> Model (default: claude-opus-4-7)
|
|
98
|
+
|
|
99
|
+
Brief sources, in priority order:
|
|
100
|
+
1. --brief flag (inline)
|
|
101
|
+
2. .brewing/brand.yaml
|
|
102
|
+
3. CLAUDE.md / README.md (best-effort)
|
|
103
|
+
|
|
104
|
+
Brand.yaml shape:
|
|
105
|
+
schema_version: 1
|
|
106
|
+
name: <project name>
|
|
107
|
+
description: <one-paragraph brief>
|
|
108
|
+
palette_hint: soft teals + warm corals # optional
|
|
109
|
+
languages: [en, fa] # default: [en]
|
|
110
|
+
colors: # optional
|
|
111
|
+
primary: '#3BAFA0'
|
|
112
|
+
accent: '#E8A07A'
|
|
113
|
+
fonts_hint: Vazirmatn body, Lalezar headings # optional
|
|
114
|
+
`);
|
|
115
|
+
}
|
|
116
|
+
export function loadBrandConfig(repoRoot) {
|
|
117
|
+
const p = join(repoRoot, ".brewing", "brand.yaml");
|
|
118
|
+
if (!existsSync(p))
|
|
119
|
+
return null;
|
|
120
|
+
const raw = YAML.parse(readFileSync(p, "utf8"));
|
|
121
|
+
const parsed = BrandConfigSchema.safeParse(raw);
|
|
122
|
+
if (!parsed.success) {
|
|
123
|
+
throw new Error(`Invalid .brewing/brand.yaml: ${parsed.error.issues.map((i) => i.message).join("; ")}`);
|
|
124
|
+
}
|
|
125
|
+
return parsed.data;
|
|
126
|
+
}
|
|
127
|
+
function readBriefFromMarkdown(repoRoot) {
|
|
128
|
+
for (const candidate of ["CLAUDE.md", "README.md"]) {
|
|
129
|
+
const p = join(repoRoot, candidate);
|
|
130
|
+
if (existsSync(p)) {
|
|
131
|
+
const body = readFileSync(p, "utf8");
|
|
132
|
+
// Use the first ~2000 characters as best-effort context.
|
|
133
|
+
return body.slice(0, 2000);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
export function buildProjectContext(repoRoot, args) {
|
|
139
|
+
const sections = [];
|
|
140
|
+
sections.push("## Brand brief\n");
|
|
141
|
+
if (args.briefInline) {
|
|
142
|
+
sections.push(args.briefInline);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
const cfg = loadBrandConfig(repoRoot);
|
|
146
|
+
if (cfg) {
|
|
147
|
+
sections.push(`**Name:** ${cfg.name}\n\n${cfg.description}`);
|
|
148
|
+
if (cfg.palette_hint)
|
|
149
|
+
sections.push(`\n**Palette hint:** ${cfg.palette_hint}`);
|
|
150
|
+
if (cfg.fonts_hint)
|
|
151
|
+
sections.push(`**Fonts hint:** ${cfg.fonts_hint}`);
|
|
152
|
+
sections.push(`**Languages:** ${cfg.languages.join(", ")}`);
|
|
153
|
+
if (cfg.colors) {
|
|
154
|
+
const lines = ["**Explicit colours (use VERBATIM, derive variants):**"];
|
|
155
|
+
if (cfg.colors.primary)
|
|
156
|
+
lines.push(`- primary: ${cfg.colors.primary}`);
|
|
157
|
+
if (cfg.colors.accent)
|
|
158
|
+
lines.push(`- accent: ${cfg.colors.accent}`);
|
|
159
|
+
sections.push(lines.join("\n"));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const md = readBriefFromMarkdown(repoRoot);
|
|
164
|
+
if (md) {
|
|
165
|
+
sections.push("(No `.brewing/brand.yaml`; reading project README/CLAUDE.md as best-effort context.)\n\n");
|
|
166
|
+
sections.push(md);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
sections.push("(No brand brief found. Default to a neutral, professional palette.)");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return sections.join("\n");
|
|
174
|
+
}
|
|
175
|
+
export async function brand(argv, _cliVersion) {
|
|
176
|
+
let args;
|
|
177
|
+
try {
|
|
178
|
+
args = parseArgs(argv);
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
console.error(e.message);
|
|
182
|
+
process.exit(2);
|
|
183
|
+
}
|
|
184
|
+
// Pre-flight: refuse to overwrite without --refresh.
|
|
185
|
+
const tokensPath = join(args.cwd, "mock", "src", "design-system", "tokens.ts");
|
|
186
|
+
const cssPath = join(args.cwd, "mock", "src", "design-system", "css.ts");
|
|
187
|
+
const exists = existsSync(tokensPath) || existsSync(cssPath);
|
|
188
|
+
if (exists && !args.refresh && !args.dryRun) {
|
|
189
|
+
console.error(`mock/src/design-system/{tokens.ts,css.ts} already exist. Pass --refresh to overwrite.`);
|
|
190
|
+
process.exit(2);
|
|
191
|
+
}
|
|
192
|
+
const anthropicApiKey = process.env["ANTHROPIC_API_KEY"];
|
|
193
|
+
if (!anthropicApiKey && !args.dryRun) {
|
|
194
|
+
console.error(`ANTHROPIC_API_KEY not set. Either set it or pass --dry-run.`);
|
|
195
|
+
process.exit(2);
|
|
196
|
+
}
|
|
197
|
+
const projectContext = buildProjectContext(args.cwd, args);
|
|
198
|
+
console.log(`slowcook brand · cwd: ${args.cwd} (model: ${args.model}${args.dryRun ? ", dry-run" : ""}${args.refresh ? ", refresh" : ""})`);
|
|
199
|
+
if (args.dryRun) {
|
|
200
|
+
console.log("\n--- Project context the agent will receive ---\n");
|
|
201
|
+
console.log(projectContext);
|
|
202
|
+
console.log("\n--dry-run: no LLM call, no files written.");
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const anthropic = new Anthropic({ apiKey: anthropicApiKey });
|
|
206
|
+
const userPrompt = `Generate the design-system foundation for this mock app from the brand brief in your system prompt. Emit the two file blocks (\`mock/src/design-system/tokens.ts\` + \`mock/src/design-system/css.ts\`) per the Output format. No prose preamble.`;
|
|
207
|
+
const response = await anthropic.messages.create({
|
|
208
|
+
model: args.model,
|
|
209
|
+
max_tokens: MAX_TOKENS,
|
|
210
|
+
system: BRAND_SYSTEM(projectContext),
|
|
211
|
+
messages: [{ role: "user", content: userPrompt }],
|
|
212
|
+
});
|
|
213
|
+
let spendUsd = 0;
|
|
214
|
+
try {
|
|
215
|
+
// SDK type for usage has narrowed over versions; read via loose cast so
|
|
216
|
+
// newer cache-token fields don't trip strict typecheck.
|
|
217
|
+
const raw = response.usage;
|
|
218
|
+
spendUsd = costUsdForUsage(args.model, {
|
|
219
|
+
inputTokens: raw.input_tokens,
|
|
220
|
+
outputTokens: raw.output_tokens,
|
|
221
|
+
cacheReadTokens: raw.cache_read_input_tokens ?? 0,
|
|
222
|
+
cacheCreateTokens: raw.cache_creation_input_tokens ?? 0,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
/* cost calc best-effort */
|
|
227
|
+
}
|
|
228
|
+
let finalText = "";
|
|
229
|
+
for (const block of response.content) {
|
|
230
|
+
if (block.type === "text")
|
|
231
|
+
finalText = block.text;
|
|
232
|
+
}
|
|
233
|
+
const parsed = parseVibeOutput(finalText);
|
|
234
|
+
if (parsed.files.length === 0) {
|
|
235
|
+
console.error(`Brand agent emitted no <file> blocks. Spend: $${spendUsd.toFixed(4)}.`);
|
|
236
|
+
if (process.env["SLOWCOOK_DEBUG"]) {
|
|
237
|
+
console.error("\n--- agent's final text ---\n");
|
|
238
|
+
console.error(finalText);
|
|
239
|
+
}
|
|
240
|
+
process.exit(2);
|
|
241
|
+
}
|
|
242
|
+
// Validate paths: every file must be under mock/src/design-system/
|
|
243
|
+
for (const f of parsed.files) {
|
|
244
|
+
if (!f.path.startsWith("mock/src/design-system/")) {
|
|
245
|
+
console.error(`Brand emit refused: file outside mock/src/design-system/: ${f.path}. Run with --dry-run to see what the agent wanted to write.`);
|
|
246
|
+
process.exit(2);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Write — writeVibeFiles enforces the mock/ root constraint.
|
|
250
|
+
const written = writeVibeFiles(args.cwd, parsed.files);
|
|
251
|
+
for (const p of written) {
|
|
252
|
+
console.log(` write ${p}`);
|
|
253
|
+
}
|
|
254
|
+
console.log(`\nDone. Spend: $${spendUsd.toFixed(4)}.`);
|
|
255
|
+
console.log(`Next: \`slowcook vibe --spec <id>\` — vibe will read your new design-system on the next dispatch.`);
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/brand/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/budget/index.ts"],"names":[],"mappings":"AA2HA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkK1D"}
|