@slowcook-ai/cli 0.25.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/cli.js +16 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/amend.d.ts +12 -0
  4. package/dist/commands/amend.d.ts.map +1 -0
  5. package/dist/commands/amend.js +99 -0
  6. package/dist/commands/amend.js.map +1 -0
  7. package/dist/commands/bench-browser.d.ts +2 -0
  8. package/dist/commands/bench-browser.d.ts.map +1 -0
  9. package/dist/commands/bench-browser.js +31 -0
  10. package/dist/commands/bench-browser.js.map +1 -0
  11. package/dist/commands/check/index.d.ts.map +1 -1
  12. package/dist/commands/check/index.js +13 -0
  13. package/dist/commands/check/index.js.map +1 -1
  14. package/dist/commands/check/style-drift.d.ts +18 -0
  15. package/dist/commands/check/style-drift.d.ts.map +1 -0
  16. package/dist/commands/check/style-drift.js +175 -0
  17. package/dist/commands/check/style-drift.js.map +1 -0
  18. package/dist/commands/check/surface-parity.d.ts +123 -0
  19. package/dist/commands/check/surface-parity.d.ts.map +1 -0
  20. package/dist/commands/check/surface-parity.js +328 -0
  21. package/dist/commands/check/surface-parity.js.map +1 -0
  22. package/dist/commands/chef/orchestrate.d.ts.map +1 -1
  23. package/dist/commands/chef/orchestrate.js +22 -2
  24. package/dist/commands/chef/orchestrate.js.map +1 -1
  25. package/dist/commands/extract/as-built-cli.d.ts +7 -0
  26. package/dist/commands/extract/as-built-cli.d.ts.map +1 -0
  27. package/dist/commands/extract/as-built-cli.js +67 -0
  28. package/dist/commands/extract/as-built-cli.js.map +1 -0
  29. package/dist/commands/extract/as-built.d.ts +21 -0
  30. package/dist/commands/extract/as-built.d.ts.map +1 -0
  31. package/dist/commands/extract/as-built.js +113 -0
  32. package/dist/commands/extract/as-built.js.map +1 -0
  33. package/dist/commands/extract/history-cli.d.ts +6 -0
  34. package/dist/commands/extract/history-cli.d.ts.map +1 -0
  35. package/dist/commands/extract/history-cli.js +58 -0
  36. package/dist/commands/extract/history-cli.js.map +1 -0
  37. package/dist/commands/extract/history.d.ts +42 -0
  38. package/dist/commands/extract/history.d.ts.map +1 -0
  39. package/dist/commands/extract/history.js +114 -0
  40. package/dist/commands/extract/history.js.map +1 -0
  41. package/dist/commands/extract/index.d.ts.map +1 -1
  42. package/dist/commands/extract/index.js +63 -3
  43. package/dist/commands/extract/index.js.map +1 -1
  44. package/dist/commands/extract/survey.d.ts +17 -0
  45. package/dist/commands/extract/survey.d.ts.map +1 -0
  46. package/dist/commands/extract/survey.js +176 -0
  47. package/dist/commands/extract/survey.js.map +1 -0
  48. package/dist/commands/eye/run.d.ts.map +1 -1
  49. package/dist/commands/eye/run.js +6 -0
  50. package/dist/commands/eye/run.js.map +1 -1
  51. package/dist/commands/guard.d.ts +4 -0
  52. package/dist/commands/guard.d.ts.map +1 -1
  53. package/dist/commands/guard.js +46 -2
  54. package/dist/commands/guard.js.map +1 -1
  55. package/dist/commands/init/templates.d.ts.map +1 -1
  56. package/dist/commands/init/templates.js +5 -3
  57. package/dist/commands/init/templates.js.map +1 -1
  58. package/dist/commands/recall/brief.d.ts +15 -0
  59. package/dist/commands/recall/brief.d.ts.map +1 -0
  60. package/dist/commands/recall/brief.js +32 -0
  61. package/dist/commands/recall/brief.js.map +1 -0
  62. package/dist/commands/recall/context.d.ts +18 -0
  63. package/dist/commands/recall/context.d.ts.map +1 -0
  64. package/dist/commands/recall/context.js +19 -0
  65. package/dist/commands/recall/context.js.map +1 -0
  66. package/dist/commands/recall/ctx.d.ts +31 -0
  67. package/dist/commands/recall/ctx.d.ts.map +1 -0
  68. package/dist/commands/recall/ctx.js +77 -0
  69. package/dist/commands/recall/ctx.js.map +1 -0
  70. package/dist/commands/recall/index.d.ts +2 -0
  71. package/dist/commands/recall/index.d.ts.map +1 -0
  72. package/dist/commands/recall/index.js +73 -0
  73. package/dist/commands/recall/index.js.map +1 -0
  74. package/dist/commands/vibe/app-gen.d.ts.map +1 -1
  75. package/dist/commands/vibe/app-gen.js +5 -3
  76. package/dist/commands/vibe/app-gen.js.map +1 -1
  77. package/dist/commands/vibe/as-built.d.ts +25 -0
  78. package/dist/commands/vibe/as-built.d.ts.map +1 -0
  79. package/dist/commands/vibe/as-built.js +115 -0
  80. package/dist/commands/vibe/as-built.js.map +1 -0
  81. package/dist/commands/vibe/index.d.ts.map +1 -1
  82. package/dist/commands/vibe/index.js +49 -1
  83. package/dist/commands/vibe/index.js.map +1 -1
  84. package/dist/commands.manifest.d.ts.map +1 -1
  85. package/dist/commands.manifest.js +22 -4
  86. package/dist/commands.manifest.js.map +1 -1
  87. package/dist/lib/browser/bench-worker.d.ts +2 -0
  88. package/dist/lib/browser/bench-worker.d.ts.map +1 -0
  89. package/dist/lib/browser/bench-worker.js +71 -0
  90. package/dist/lib/browser/bench-worker.js.map +1 -0
  91. package/dist/lib/browser/bench.d.ts +26 -0
  92. package/dist/lib/browser/bench.d.ts.map +1 -0
  93. package/dist/lib/browser/bench.js +68 -0
  94. package/dist/lib/browser/bench.js.map +1 -0
  95. package/dist/lib/browser/driver.d.ts +59 -0
  96. package/dist/lib/browser/driver.d.ts.map +1 -0
  97. package/dist/lib/browser/driver.js +19 -0
  98. package/dist/lib/browser/driver.js.map +1 -0
  99. package/dist/lib/browser/index.d.ts +8 -0
  100. package/dist/lib/browser/index.d.ts.map +1 -0
  101. package/dist/lib/browser/index.js +7 -0
  102. package/dist/lib/browser/index.js.map +1 -0
  103. package/dist/lib/browser/playwright-driver.d.ts +3 -0
  104. package/dist/lib/browser/playwright-driver.d.ts.map +1 -0
  105. package/dist/lib/browser/playwright-driver.js +44 -0
  106. package/dist/lib/browser/playwright-driver.js.map +1 -0
  107. package/dist/lib/browser/qa-replay.d.ts +47 -0
  108. package/dist/lib/browser/qa-replay.d.ts.map +1 -0
  109. package/dist/lib/browser/qa-replay.js +69 -0
  110. package/dist/lib/browser/qa-replay.js.map +1 -0
  111. package/dist/lib/browser/rustwright-driver.d.ts +5 -0
  112. package/dist/lib/browser/rustwright-driver.d.ts.map +1 -0
  113. package/dist/lib/browser/rustwright-driver.js +50 -0
  114. package/dist/lib/browser/rustwright-driver.js.map +1 -0
  115. package/dist/lib/browser/select.d.ts +21 -0
  116. package/dist/lib/browser/select.d.ts.map +1 -0
  117. package/dist/lib/browser/select.js +30 -0
  118. package/dist/lib/browser/select.js.map +1 -0
  119. package/package.json +9 -6
@@ -0,0 +1,77 @@
1
+ /**
2
+ * `ctx` wrapper — slowcook's bridge to the ctxrs/ctx CLI (Apache-2.0), which
3
+ * indexes local coding-agent session histories (Claude Code + others) into a
4
+ * private SQLite store and searches them token-efficiently.
5
+ *
6
+ * slowcook agents start context-blind: each brew/chef/refine run re-investigates
7
+ * what a prior session already decided or tried. `ctx` gives them recall. This
8
+ * module shells out to the binary (never vendors it) and is best-effort by
9
+ * design — if ctx isn't installed, recall degrades to "no prior context",
10
+ * never blocking a loop.
11
+ */
12
+ import { execFileSync } from "node:child_process";
13
+ const defaultRunner = (args) => execFileSync(process.env["CTX_BIN"] || "ctx", args, { encoding: "utf8", maxBuffer: 32 * 1024 * 1024, stdio: ["ignore", "pipe", "ignore"] });
14
+ /** is the ctx binary reachable? (best-effort recall degrades gracefully if not). */
15
+ export function ctxAvailable(run = defaultRunner) {
16
+ try {
17
+ run(["--version"]);
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }
24
+ /** run `ctx search --json` and return normalized results (empty on any failure). */
25
+ export function ctxSearch(opts, run = defaultRunner) {
26
+ // positional query = ctx's ranked/fuzzy search; --term is strict AND-match
27
+ // (extra words zero it out), so recall uses the positional form.
28
+ const args = ["search", "--json"];
29
+ if (opts.query)
30
+ args.push(opts.query);
31
+ if (opts.file)
32
+ args.push("--file", opts.file);
33
+ args.push("--limit", String(opts.limit ?? 6));
34
+ if (opts.since)
35
+ args.push("--since", opts.since);
36
+ if (opts.workspace)
37
+ args.push("--workspace", opts.workspace);
38
+ if (opts.includeCurrentSession)
39
+ args.push("--include-current-session");
40
+ // recall surfaces DECISIONS by default — assistant/user messages, not the
41
+ // command-echo + tool-output noise that drowns out the signal.
42
+ if (!opts.allEventTypes)
43
+ args.push("--event-type", "message");
44
+ let out;
45
+ try {
46
+ out = run(args);
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ try {
52
+ const parsed = JSON.parse(out);
53
+ return (parsed.results ?? [])
54
+ .filter((r) => r.item_type !== "session") // keep the richer session_result/event rows
55
+ .map((r) => ({
56
+ itemType: r.item_type ?? "", label: r.label ?? "", sessionId: r.session_id ?? "",
57
+ eventId: r.event_id, provider: r.provider ?? "", title: r.title,
58
+ snippet: (r.snippet ?? "").replace(/\s+/g, " ").trim(),
59
+ timestamp: r.timestamp, sourcePath: r.source_path, rank: r.rank, sessionImportance: r.session_importance,
60
+ }))
61
+ .filter((r) => r.snippet.length > 0);
62
+ }
63
+ catch {
64
+ return [];
65
+ }
66
+ }
67
+ /** one-time index of local sessions (idempotent; ctx also auto-refreshes on search). */
68
+ export function ctxSetup(run = defaultRunner) {
69
+ try {
70
+ run(["setup"]);
71
+ return true;
72
+ }
73
+ catch {
74
+ return false;
75
+ }
76
+ }
77
+ //# sourceMappingURL=ctx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctx.js","sourceRoot":"","sources":["../../../src/commands/recall/ctx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function recall(argv: string[], _version: string): Promise<void>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/recall/index.ts"],"names":[],"mappings":"AAwBA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC5E"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * `slowcook recall <query>` — 0.28 — recall prior agent work before a task.
3
+ *
4
+ * Wraps the ctxrs/ctx CLI (Apache-2.0): searches local coding-agent session
5
+ * histories and emits a compact "prior context" brief. The point is to stop
6
+ * slowcook's brew/chef/refine agents from starting context-blind and burning
7
+ * tokens re-deriving what a past session already settled.
8
+ *
9
+ * slowcook recall "wallet flag DCE bug" # by topic
10
+ * slowcook recall --file server/src/http.ts # sessions that touched a file
11
+ * slowcook recall "brand board" --json # structured (for loop injection)
12
+ *
13
+ * Best-effort: if ctx isn't installed, prints how to get it and exits 0 — recall
14
+ * must never block a loop. Other commands import { recallBrief, ctxSearch } to
15
+ * prepend the brief to an agent prompt (the loop-memory seam).
16
+ */
17
+ import { ctxAvailable, ctxSearch, ctxSetup } from "./ctx.js";
18
+ import { recallBrief } from "./brief.js";
19
+ const INSTALL_HINT = "ctx (the session-history index recall uses) isn't installed.\n" +
20
+ "Install it (Apache-2.0): curl -fsSL https://ctx.rs/install | sh — or grab the\n" +
21
+ "checksum-verified binary from https://github.com/ctxrs/ctx/releases. Then `ctx setup`.";
22
+ export async function recall(argv, _version) {
23
+ const opts = {};
24
+ const terms = [];
25
+ let json = false, setup = false;
26
+ for (let i = 0; i < argv.length; i++) {
27
+ const a = argv[i];
28
+ if (a === "--file")
29
+ opts.file = argv[++i];
30
+ else if (a === "--limit")
31
+ opts.limit = Number(argv[++i]);
32
+ else if (a === "--since")
33
+ opts.since = argv[++i];
34
+ else if (a === "--workspace")
35
+ opts.workspace = argv[++i];
36
+ else if (a === "--all-sessions")
37
+ opts.includeCurrentSession = true;
38
+ else if (a === "--all-events")
39
+ opts.allEventTypes = true;
40
+ else if (a === "--json")
41
+ json = true;
42
+ else if (a === "--setup")
43
+ setup = true;
44
+ else if (!a.startsWith("--"))
45
+ terms.push(a);
46
+ }
47
+ opts.query = terms.join(" ") || undefined;
48
+ if (!opts.query && !opts.file) {
49
+ console.error("usage: slowcook recall <query> | --file <path> [--limit n] [--since 30d] [--workspace <path>] [--json]");
50
+ process.exitCode = 2;
51
+ return;
52
+ }
53
+ // NOTE: recall searches ALL history by default — a decision learned building
54
+ // one repo often helps another (e.g. a dash lesson while working in slowcook).
55
+ // Pass --workspace <path> to scope to a single checkout.
56
+ if (!ctxAvailable()) {
57
+ if (json) {
58
+ console.log(JSON.stringify({ available: false, results: [] }));
59
+ return;
60
+ }
61
+ console.log(INSTALL_HINT);
62
+ return; // exit 0 — best-effort
63
+ }
64
+ if (setup)
65
+ ctxSetup();
66
+ const results = ctxSearch(opts);
67
+ if (json) {
68
+ console.log(JSON.stringify({ available: true, query: opts.query ?? null, file: opts.file ?? null, results }, null, 2));
69
+ return;
70
+ }
71
+ console.log(recallBrief(results, { label: opts.file ? opts.file : `"${opts.query}"`, max: opts.limit }));
72
+ }
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/recall/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"app-gen.d.ts","sourceRoot":"","sources":["../../../src/commands/vibe/app-gen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,OAAO;IACtB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAuVD;;;;;;;;;4CAS4C;AAC5C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAmD3E;AAoFD;2EAC2E;AAC3E,wBAAgB,QAAQ,IAAI,MAAM,CAUjC;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,CAwBrH"}
1
+ {"version":3,"file":"app-gen.d.ts","sourceRoot":"","sources":["../../../src/commands/vibe/app-gen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,WAAW,OAAO;IACtB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAgBjD;AAyVD;;;;;;;;;4CAS4C;AAC5C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAmD3E;AAoFD;2EAC2E;AAC3E,wBAAgB,QAAQ,IAAI,MAAM,CAUjC;AAED,mEAAmE;AACnE,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,EAAE,CAwBrH"}
@@ -205,13 +205,15 @@ function asyncTsx() {
205
205
  return `import type { ReactNode } from "react";
206
206
  import type { Async as AsyncResult } from "../lib/use-async";
207
207
 
208
- const KEYFRAMES = "@keyframes sc-spin{to{transform:rotate(360deg)}}@keyframes sc-fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}";
208
+ const KEYFRAMES = "@keyframes sc-spin{to{transform:rotate(360deg)}}@keyframes sc-fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}" +
209
+ ".sc-spinner{width:18px;height:18px;border-radius:999px;border:2px solid var(--color-border);border-top-color:var(--color-brand);animation:sc-spin .7s linear infinite;display:inline-block}" +
210
+ ".sc-error-card{animation:sc-fade .2s ease;border:1px solid var(--color-danger);border-radius:var(--radius-card);padding:18px;color:var(--color-danger);font-size:13.5px;background:color-mix(in srgb,var(--color-danger) 8%,transparent)}";
209
211
 
210
212
  export function Spinner({ label = "Loading…" }: { label?: string }) {
211
213
  return (
212
214
  <div style={{ display: "flex", alignItems: "center", gap: 10, padding: 28, color: "var(--color-text-dim)", fontSize: 13.5 }}>
213
215
  <style>{KEYFRAMES}</style>
214
- <span style={{ width: 18, height: 18, borderRadius: 999, border: "2px solid var(--color-border)", borderTopColor: "var(--color-brand)", animation: "sc-spin .7s linear infinite", display: "inline-block" }} />
216
+ <span className="sc-spinner" />
215
217
  {label}
216
218
  </div>
217
219
  );
@@ -219,7 +221,7 @@ export function Spinner({ label = "Loading…" }: { label?: string }) {
219
221
 
220
222
  export function ErrorState({ message }: { message: string }) {
221
223
  return (
222
- <div style={{ animation: "sc-fade .2s ease", border: "1px solid var(--color-danger)", borderRadius: "var(--radius-card)", padding: 18, color: "var(--color-danger)", fontSize: 13.5, background: "color-mix(in srgb, var(--color-danger) 8%, transparent)" }}>
224
+ <div className="sc-error-card">
223
225
  <style>{KEYFRAMES}</style>
224
226
  <b>Something went wrong.</b> {message}
225
227
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"app-gen.js","sourceRoot":"","sources":["../../../src/commands/vibe/app-gen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-gen.js","sourceRoot":"","sources":["../../../src/commands/vibe/app-gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { LlmClient } from "@slowcook-ai/core";
2
+ import { type VibeFileBlock } from "./emit.js";
3
+ export declare const AS_BUILT_VIBE_SYSTEM = "You are slowcook's as-built vibe agent. You are given the PRODUCTION\nsource of ONE existing surface. Produce a FAITHFUL, self-contained mock\nre-render of it for design review.\n\nRules, non-negotiable:\n- Output ONLY <file path=\"mock/src/apps/<surface>/...\">\u2026</file> blocks. No prose.\n- FAITHFUL means: same structure, same copy, same states as the source \u2014\n you are transcribing what IS, not designing. Do not improve, rename,\n restyle or add features. Uncertain behaviour becomes a code comment\n \"AS-BUILT-UNCLEAR: \u2026\", never an invention.\n- Self-contained: react only; no imports from the production tree or any\n package the mock app does not already use. Data the source fetches\n becomes inline fixtures marked \"@slowcook-honest: as-built fixture,\n shaped from <source path>\".\n- The FIRST line of every file must be a comment IN THAT FILE TYPE'S native\n comment syntax (// for ts/tsx, /* \u2026 */ for css, <!-- \u2026 --> for html):\n @slowcook-as-built-from <source path>@<sha> \u2014 prod-first: this mock\n mirrors production; edits here are PROPOSALS, not truth.\n- STYLING CONTRACT (style-drift post-mortem, 2026-07-08): tokens come from\n the mock app's CSS variables; recurring patterns (cards, buttons, chips,\n headings, inputs) use the design system's classes (.sc-*/Tailwind\n utilities). Inline style={{\u2026}} is allowed ONLY for one-off geometry\n (flex/grid math, sizes, positions) \u2014 never for color/background/border/\n font/shadow/radius. Do not invent a palette.";
4
+ export interface AsBuiltVibeInput {
5
+ repoRoot: string;
6
+ fromPath: string;
7
+ surface: string;
8
+ sha: string | null;
9
+ sources: {
10
+ path: string;
11
+ body: string;
12
+ }[];
13
+ brandYaml: string | null;
14
+ }
15
+ export declare function collectAsBuiltInput(repoRoot: string, fromPath: string, surface?: string): AsBuiltVibeInput;
16
+ export declare function buildAsBuiltVibePrompt(input: AsBuiltVibeInput): string;
17
+ export interface AsBuiltVibeResult {
18
+ written: string[];
19
+ files: VibeFileBlock[];
20
+ violations: string[];
21
+ }
22
+ export declare function runAsBuiltVibe(llm: LlmClient, model: string, input: AsBuiltVibeInput, opts?: {
23
+ dryRun?: boolean;
24
+ }): Promise<AsBuiltVibeResult>;
25
+ //# sourceMappingURL=as-built.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"as-built.d.ts","sourceRoot":"","sources":["../../../src/commands/vibe/as-built.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAEhF,eAAO,MAAM,oBAAoB,sgDAuBc,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA0B1G;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAQtE;AAED,MAAM,WAAW,iBAAiB;IAAG,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE;AAEtG,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,gBAAgB,EACvB,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAyB5B"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * `slowcook vibe --as-built --from <srcPath>` — #263: generate a FAITHFUL
3
+ * mock of an EXISTING surface from its production source (lazy brownfield
4
+ * mocking). Where normal vibe designs from a spec (mock-first), as-built
5
+ * vibe transcribes from code (prod-first): the mock is a reviewable
6
+ * re-render of what IS, stamped with its provenance so the parity baseline
7
+ * can tell staleness (prod moved) from mutation (mock edited).
8
+ *
9
+ * Uses the shared LlmClient (key-less capable via SLOWCOOK_LLM=claude-cli)
10
+ * and vibe's existing XML file-block emit path — including the hard
11
+ * mock/-only write guard.
12
+ */
13
+ import { existsSync, readFileSync } from "node:fs";
14
+ import { dirname, join, normalize } from "node:path";
15
+ import { execFileSync } from "node:child_process";
16
+ import { parseVibeOutput, writeVibeFiles } from "./emit.js";
17
+ export const AS_BUILT_VIBE_SYSTEM = `You are slowcook's as-built vibe agent. You are given the PRODUCTION
18
+ source of ONE existing surface. Produce a FAITHFUL, self-contained mock
19
+ re-render of it for design review.
20
+
21
+ Rules, non-negotiable:
22
+ - Output ONLY <file path="mock/src/apps/<surface>/...">…</file> blocks. No prose.
23
+ - FAITHFUL means: same structure, same copy, same states as the source —
24
+ you are transcribing what IS, not designing. Do not improve, rename,
25
+ restyle or add features. Uncertain behaviour becomes a code comment
26
+ "AS-BUILT-UNCLEAR: …", never an invention.
27
+ - Self-contained: react only; no imports from the production tree or any
28
+ package the mock app does not already use. Data the source fetches
29
+ becomes inline fixtures marked "@slowcook-honest: as-built fixture,
30
+ shaped from <source path>".
31
+ - The FIRST line of every file must be a comment IN THAT FILE TYPE'S native
32
+ comment syntax (// for ts/tsx, /* … */ for css, <!-- … --> for html):
33
+ @slowcook-as-built-from <source path>@<sha> — prod-first: this mock
34
+ mirrors production; edits here are PROPOSALS, not truth.
35
+ - STYLING CONTRACT (style-drift post-mortem, 2026-07-08): tokens come from
36
+ the mock app's CSS variables; recurring patterns (cards, buttons, chips,
37
+ headings, inputs) use the design system's classes (.sc-*/Tailwind
38
+ utilities). Inline style={{…}} is allowed ONLY for one-off geometry
39
+ (flex/grid math, sizes, positions) — never for color/background/border/
40
+ font/shadow/radius. Do not invent a palette.`;
41
+ export function collectAsBuiltInput(repoRoot, fromPath, surface) {
42
+ const norm = normalize(fromPath).replace(/\\/g, "/");
43
+ const abs = join(repoRoot, norm);
44
+ if (!existsSync(abs))
45
+ throw new Error(`--from source not found: ${norm}`);
46
+ const main = readFileSync(abs, "utf8");
47
+ const sources = [{ path: norm, body: main }];
48
+ // one hop of same-directory relative imports — the surface's local parts.
49
+ const dir = dirname(norm);
50
+ const rel = [...main.matchAll(/from\s+["']\.\/([\w./-]+)["']/g)].map((m) => m[1]).slice(0, 6);
51
+ for (const r of rel) {
52
+ for (const ext of ["", ".ts", ".tsx", ".js", ".jsx"]) {
53
+ const p = join(repoRoot, dir, r + ext);
54
+ if (existsSync(p) && !p.endsWith("/")) {
55
+ try {
56
+ sources.push({ path: join(dir, r + ext).replace(/\\/g, "/"), body: readFileSync(p, "utf8").slice(0, 8000) });
57
+ }
58
+ catch { /* skip */ }
59
+ break;
60
+ }
61
+ }
62
+ }
63
+ let brandYaml = null;
64
+ try {
65
+ brandYaml = readFileSync(join(repoRoot, ".brewing/brand.yaml"), "utf8").slice(0, 3000);
66
+ }
67
+ catch { /* none */ }
68
+ let sha = null;
69
+ try {
70
+ sha = execFileSync("git", ["rev-parse", "--short", "HEAD"], { cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
71
+ }
72
+ catch { /* not git */ }
73
+ const surfaceName = surface ?? (norm.split("/").pop() ?? "surface").replace(/\.(tsx?|jsx?)$/, "").replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
74
+ return { repoRoot, fromPath: norm, surface: surfaceName, sha, sources, brandYaml };
75
+ }
76
+ export function buildAsBuiltVibePrompt(input) {
77
+ const parts = [];
78
+ parts.push(`Surface name: ${input.surface}`);
79
+ parts.push(`Provenance to stamp: ${input.fromPath}@${input.sha ?? "HEAD"}`);
80
+ parts.push(`Target directory for ALL files: mock/src/apps/${input.surface}/`);
81
+ if (input.brandYaml)
82
+ parts.push(`===== .brewing/brand.yaml (design tokens) =====\n${input.brandYaml}`);
83
+ for (const s of input.sources)
84
+ parts.push(`===== PRODUCTION SOURCE: ${s.path} =====\n${s.body}`);
85
+ return parts.join("\n\n");
86
+ }
87
+ export async function runAsBuiltVibe(llm, model, input, opts = {}) {
88
+ const res = await llm.complete({
89
+ system: AS_BUILT_VIBE_SYSTEM,
90
+ cacheSystem: false,
91
+ model,
92
+ messages: [{ role: "user", content: buildAsBuiltVibePrompt(input) }],
93
+ maxTokens: 12000,
94
+ });
95
+ const out = parseVibeOutput(res.text);
96
+ const violations = [];
97
+ if (out.files.length === 0)
98
+ violations.push("model emitted no <file> blocks");
99
+ for (const f of out.files) {
100
+ // stamp must open the file in the file-type's native comment syntax
101
+ // (// for ts/js, /* for css, <!-- for html/md — the landing dogfood's
102
+ // css emission caught the //-only assumption).
103
+ if (!/^(\/\/|\/\*|<!--|#)\s*@slowcook-as-built-from/.test(f.contents)) {
104
+ violations.push(`${f.path}: missing @slowcook-as-built-from provenance stamp on line 1`);
105
+ }
106
+ if (!f.path.startsWith(`mock/src/apps/${input.surface}/`)) {
107
+ violations.push(`${f.path}: outside the surface directory mock/src/apps/${input.surface}/`);
108
+ }
109
+ }
110
+ if (violations.length > 0 || opts.dryRun)
111
+ return { written: [], files: out.files, violations };
112
+ const written = writeVibeFiles(input.repoRoot, out.files); // hard mock/-only guard inside
113
+ return { written, files: out.files, violations: [] };
114
+ }
115
+ //# sourceMappingURL=as-built.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"as-built.js","sourceRoot":"","sources":["../../../src/commands/vibe/as-built.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/vibe/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8RH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJ5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/vibe/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA4SH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4K5E"}
@@ -37,6 +37,17 @@ function parseArgs(argv) {
37
37
  args.specId = next;
38
38
  i++;
39
39
  }
40
+ else if (a === "--as-built") {
41
+ args.asBuilt = true;
42
+ }
43
+ else if (a === "--from" && next) {
44
+ args.fromPath = next;
45
+ i++;
46
+ }
47
+ else if (a === "--surface" && next) {
48
+ args.surface = next;
49
+ i++;
50
+ }
40
51
  else if (a === "--cwd" && next) {
41
52
  args.repoRoot = next;
42
53
  i++;
@@ -65,6 +76,13 @@ function parseArgs(argv) {
65
76
  process.exit(0);
66
77
  }
67
78
  }
79
+ if (args.asBuilt) {
80
+ if (!args.fromPath) {
81
+ console.error("--as-built requires --from <production source path>.");
82
+ process.exit(64);
83
+ }
84
+ return args;
85
+ }
68
86
  if (!args.specId) {
69
87
  console.error("--spec <id> is required.");
70
88
  printHelp();
@@ -184,7 +202,8 @@ function buildProjectContext(repoRoot) {
184
202
  const c = readFileSync(tokensPath, "utf8").trim();
185
203
  sections.push("## Existing design tokens (extracted from `**/*.css`)\n\n" +
186
204
  c +
187
- "\n\nReuse these tokens by exact name (`bg-coral`, `var(--tint-celebrate)`); do NOT introduce new hex/rgb values.");
205
+ "\n\nReuse these tokens by exact name (`bg-coral`, `var(--tint-celebrate)`); do NOT introduce new hex/rgb values." +
206
+ "\nSTYLING CONTRACT: recurring patterns use the design system's classes (`.sc-*`/Tailwind utilities); inline `style` is for one-off GEOMETRY only (flex/grid, sizes, positions) — never color/background/border/font/shadow/radius. `slowcook check style-drift` enforces this.");
188
207
  }
189
208
  catch {
190
209
  // ignore
@@ -324,6 +343,35 @@ export async function vibe(argv, cliVersion) {
324
343
  if (argv[0] === "app")
325
344
  return runApp(argv.slice(1));
326
345
  const args = parseArgs(argv);
346
+ if (args.asBuilt) {
347
+ // #263 — faithful mock of an EXISTING surface from its production source.
348
+ const { collectAsBuiltInput, runAsBuiltVibe } = await import("./as-built.js");
349
+ const { createLlmClient } = await import("../refine/llm.js");
350
+ let llm;
351
+ try {
352
+ llm = await createLlmClient();
353
+ }
354
+ catch (err) {
355
+ console.error(`vibe --as-built: ${err instanceof Error ? err.message : String(err)}`);
356
+ process.exit(1);
357
+ }
358
+ const input = collectAsBuiltInput(args.repoRoot, args.fromPath, args.surface);
359
+ console.log(`vibe --as-built: transcribing ${input.fromPath}@${input.sha ?? "HEAD"} → mock/src/apps/${input.surface}/ (${input.sources.length} source file(s))…`);
360
+ const result = await runAsBuiltVibe(llm, args.model === "claude-opus-4-7" ? "claude-opus-4-8" : args.model, input, { dryRun: args.dryRun });
361
+ if (result.violations.length > 0) {
362
+ console.error(`vibe --as-built: output rejected —`);
363
+ for (const v of result.violations)
364
+ console.error(` · ${v}`);
365
+ process.exit(1);
366
+ }
367
+ if (args.dryRun) {
368
+ console.log(`(dry run) would write:\n ${result.files.map((f) => f.path).join("\n ")}`);
369
+ return;
370
+ }
371
+ console.log(`Wrote ${result.written.length} file(s):\n ${result.written.join("\n ")}`);
372
+ console.log(`Prod-first surface: mock edits here are PROPOSALS — record its parity-baseline entry with direction: prod-first.`);
373
+ return;
374
+ }
327
375
  const anthropicApiKey = process.env["ANTHROPIC_API_KEY"];
328
376
  if (!anthropicApiKey) {
329
377
  console.error("ANTHROPIC_API_KEY environment variable is not set.");