@slowcook-ai/cli 0.19.0-alpha.0 → 0.19.0-alpha.8
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 +27 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/brew/agent.d.ts +129 -0
- package/dist/commands/brew/agent.d.ts.map +1 -1
- package/dist/commands/brew/agent.js +132 -0
- package/dist/commands/brew/agent.js.map +1 -1
- package/dist/commands/chef/drift-fix.d.ts +13 -2
- package/dist/commands/chef/drift-fix.d.ts.map +1 -1
- package/dist/commands/chef/drift-fix.js +58 -22
- package/dist/commands/chef/drift-fix.js.map +1 -1
- package/dist/commands/chef/orchestrate.d.ts +34 -0
- package/dist/commands/chef/orchestrate.d.ts.map +1 -0
- package/dist/commands/chef/orchestrate.js +385 -0
- package/dist/commands/chef/orchestrate.js.map +1 -0
- package/dist/commands/init/mock.d.ts +46 -0
- package/dist/commands/init/mock.d.ts.map +1 -1
- package/dist/commands/init/mock.js +142 -2
- package/dist/commands/init/mock.js.map +1 -1
- package/dist/commands/recon/index.d.ts.map +1 -1
- package/dist/commands/recon/index.js +108 -5
- package/dist/commands/recon/index.js.map +1 -1
- package/dist/commands/recon/reuse.d.ts +118 -0
- package/dist/commands/recon/reuse.d.ts.map +1 -0
- package/dist/commands/recon/reuse.js +269 -0
- package/dist/commands/recon/reuse.js.map +1 -0
- package/dist/commands/recon/shape-preserve.d.ts +46 -0
- package/dist/commands/recon/shape-preserve.d.ts.map +1 -1
- package/dist/commands/recon/shape-preserve.js +126 -0
- package/dist/commands/recon/shape-preserve.js.map +1 -1
- package/dist/commands/refactor/index.d.ts +15 -0
- package/dist/commands/refactor/index.d.ts.map +1 -0
- package/dist/commands/refactor/index.js +126 -0
- package/dist/commands/refactor/index.js.map +1 -0
- package/dist/commands/refactor/score.d.ts +38 -0
- package/dist/commands/refactor/score.d.ts.map +1 -0
- package/dist/commands/refactor/score.js +79 -0
- package/dist/commands/refactor/score.js.map +1 -0
- package/dist/commands/refactor/types.d.ts +64 -0
- package/dist/commands/refactor/types.d.ts.map +1 -0
- package/dist/commands/refactor/types.js +26 -0
- package/dist/commands/refactor/types.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.19.0-alpha.8 — recon reuse-scan: deterministic near-duplicate
|
|
3
|
+
* detection for components AND API routes / utility modules. Pure
|
|
4
|
+
* functions for testing; cli wiring in `recon/index.ts`'s
|
|
5
|
+
* --reuse-scan flag.
|
|
6
|
+
*
|
|
7
|
+
* Why this exists: when driver creates `NewItemCard` that's near-
|
|
8
|
+
* identical to existing `RewoCard` — OR when two API routes both
|
|
9
|
+
* do auth → query → NextResponse.json with similar shapes —
|
|
10
|
+
* navigator can't catch it (its prompt is calibrated for diff-
|
|
11
|
+
* level critique, not codebase-scale similarity). A static AST-ish
|
|
12
|
+
* hash + Jaccard similarity catches it cheaply + deterministically.
|
|
13
|
+
* False positives are acceptable because the refactor command's
|
|
14
|
+
* ranking + the PM's eyeball filter the noise.
|
|
15
|
+
*
|
|
16
|
+
* Approach: regex-extract a "structural signature" (JSX tags,
|
|
17
|
+
* destructured params, calls, exports, imports). Auto-categorize
|
|
18
|
+
* by JSX presence: component-vs-component uses jsx-heavy weighting,
|
|
19
|
+
* api-vs-api uses calls-heavy, cross-category pairs short-circuit
|
|
20
|
+
* to 0 (we don't compare a component against a route handler).
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Extract a structural signature from a TS/TSX file's source.
|
|
24
|
+
* Pure: takes (path, source); returns a normalized signature.
|
|
25
|
+
*
|
|
26
|
+
* Works for components (JSX tags will be populated), API route
|
|
27
|
+
* handlers (callsUsed captures supabase/auth/NextResponse), and
|
|
28
|
+
* utility modules (callsUsed + exports). Strings + comments are
|
|
29
|
+
* NOT stripped — false positives are rare for the categories we
|
|
30
|
+
* capture.
|
|
31
|
+
*/
|
|
32
|
+
export function extractStructuralSignature(path, source) {
|
|
33
|
+
const exports = new Set();
|
|
34
|
+
const imports = new Set();
|
|
35
|
+
const jsxTags = new Set();
|
|
36
|
+
const propsUsed = new Set();
|
|
37
|
+
const callsUsed = new Set();
|
|
38
|
+
// Exports: `export default function Foo`, `export function Foo`,
|
|
39
|
+
// `export const Foo`, `export async function GET`,
|
|
40
|
+
// `export { Foo, Bar as Baz }`.
|
|
41
|
+
for (const m of source.matchAll(/export\s+default\s+function\s+([A-Za-z_]\w*)/g))
|
|
42
|
+
exports.add(m[1]);
|
|
43
|
+
for (const m of source.matchAll(/export\s+(?:async\s+)?function\s+([A-Za-z_]\w*)/g))
|
|
44
|
+
exports.add(m[1]);
|
|
45
|
+
for (const m of source.matchAll(/export\s+const\s+([A-Za-z_]\w*)/g))
|
|
46
|
+
exports.add(m[1]);
|
|
47
|
+
for (const m of source.matchAll(/export\s*\{\s*([^}]+)\s*\}/g)) {
|
|
48
|
+
for (const piece of m[1].split(",")) {
|
|
49
|
+
const name = piece.trim().split(/\s+as\s+/)[0].trim();
|
|
50
|
+
if (name)
|
|
51
|
+
exports.add(name);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Imports: `import X from "..."`, `import { A, B } from "..."`,
|
|
55
|
+
// `import X, { A } from "..."`. Skip the source path; we want
|
|
56
|
+
// the symbols.
|
|
57
|
+
const importRe = /import\s+(?:type\s+)?(?:([A-Za-z_]\w*)(?:\s*,\s*\{([^}]*)\})?|\{([^}]*)\})\s+from\s+["'][^"']+["']/g;
|
|
58
|
+
for (const m of source.matchAll(importRe)) {
|
|
59
|
+
if (m[1])
|
|
60
|
+
imports.add(m[1]);
|
|
61
|
+
const named = m[2] ?? m[3];
|
|
62
|
+
if (named) {
|
|
63
|
+
for (const piece of named.split(",")) {
|
|
64
|
+
const name = piece.trim().split(/\s+as\s+/)[0].trim();
|
|
65
|
+
if (name)
|
|
66
|
+
imports.add(name);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// JSX tags: <Foo> or <Foo />. The negative lookbehind excludes
|
|
71
|
+
// TypeScript generics — `Promise<Response>` has `e<` (identifier
|
|
72
|
+
// char then `<`) so it's skipped, while real JSX `<Foo` is preceded
|
|
73
|
+
// by whitespace/paren/brace/etc. and matches.
|
|
74
|
+
for (const m of source.matchAll(/(?<![A-Za-z_$0-9])<([A-Za-z][\w.]*)[\s/>]/g)) {
|
|
75
|
+
jsxTags.add(m[1]);
|
|
76
|
+
}
|
|
77
|
+
// Destructured params: `function Foo({ a, b, c }: Props)` —
|
|
78
|
+
// works for components (Props) AND API handlers
|
|
79
|
+
// (`async function GET(req: NextRequest, { params }: { params: ... })`).
|
|
80
|
+
for (const m of source.matchAll(/function\s+[A-Za-z_]\w*\s*\(\s*\{([^}]+)\}\s*[:)]/g)) {
|
|
81
|
+
for (const piece of m[1].split(",")) {
|
|
82
|
+
const name = piece.trim().split(":")[0].trim().split("=")[0].trim();
|
|
83
|
+
if (name && /^[A-Za-z_]\w*$/.test(name))
|
|
84
|
+
propsUsed.add(name);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Arrow function destructure: ({ a, b }) => OR ({ a, b }: { a: T }) =>
|
|
88
|
+
// Type annotation can be ANY shape (alias, inline object, union); we just
|
|
89
|
+
// need to land on `=>` after the destructure body. `[^=]*=>` skips
|
|
90
|
+
// arbitrary annotation text up to the arrow.
|
|
91
|
+
for (const m of source.matchAll(/\(\s*\{([^}]+)\}[^=]*=>/g)) {
|
|
92
|
+
for (const piece of m[1].split(",")) {
|
|
93
|
+
const name = piece.trim().split(":")[0].trim().split("=")[0].trim();
|
|
94
|
+
if (name && /^[A-Za-z_]\w*$/.test(name))
|
|
95
|
+
propsUsed.add(name);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Second-arg destructure used by Next.js route handlers:
|
|
99
|
+
// export async function GET(req: Request, { params }: { params: ... })
|
|
100
|
+
for (const m of source.matchAll(/,\s*\{([^}]+)\}\s*:\s*\{[^}]*\}/g)) {
|
|
101
|
+
for (const piece of m[1].split(",")) {
|
|
102
|
+
const name = piece.trim().split(":")[0].trim().split("=")[0].trim();
|
|
103
|
+
if (name && /^[A-Za-z_]\w*$/.test(name))
|
|
104
|
+
propsUsed.add(name);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Function calls: anything that looks like `<name>(`,
|
|
108
|
+
// `<obj>.<method>(`, or `<obj>.<method>.<chain>(`. Captures hooks
|
|
109
|
+
// (useState, useFoo), db ops (supabase.from), fetch, auth helpers,
|
|
110
|
+
// NextResponse.json, etc. — the structural fingerprint of a file
|
|
111
|
+
// when you ignore its strings + JSX.
|
|
112
|
+
//
|
|
113
|
+
// Filter: skip primitives + control-flow keywords masquerading as
|
|
114
|
+
// calls (`if(`, `for(`, `while(`). Skip lowercase one-letter
|
|
115
|
+
// names (regex's true/false noise).
|
|
116
|
+
const callRe = /\b([A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*)\s*\(/g;
|
|
117
|
+
const skip = new Set([
|
|
118
|
+
"if", "for", "while", "switch", "catch", "return", "typeof", "await",
|
|
119
|
+
"throw", "new", "yield", "delete", "void", "function", "async",
|
|
120
|
+
"true", "false", "null", "undefined",
|
|
121
|
+
]);
|
|
122
|
+
for (const m of source.matchAll(callRe)) {
|
|
123
|
+
const name = m[1];
|
|
124
|
+
// Skip the bare keywords; capture the full chain otherwise.
|
|
125
|
+
if (skip.has(name))
|
|
126
|
+
continue;
|
|
127
|
+
callsUsed.add(name);
|
|
128
|
+
}
|
|
129
|
+
// Filter call-name false positives: when a file declares X via
|
|
130
|
+
// `export function X(...)` or `export const X = (...)`, the function
|
|
131
|
+
// name itself looks like a call site to the bare-call regex. Remove
|
|
132
|
+
// export names from callsUsed so a file's identity (its export name)
|
|
133
|
+
// doesn't pollute its structural signature.
|
|
134
|
+
for (const e of exports)
|
|
135
|
+
callsUsed.delete(e);
|
|
136
|
+
return {
|
|
137
|
+
path,
|
|
138
|
+
exports: [...exports].sort(),
|
|
139
|
+
imports: [...imports].sort(),
|
|
140
|
+
jsxTags: [...jsxTags].sort(),
|
|
141
|
+
propsUsed: [...propsUsed].sort(),
|
|
142
|
+
callsUsed: [...callsUsed].sort(),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Jaccard similarity of two string sets. Pure.
|
|
147
|
+
* |a ∩ b| / |a ∪ b|
|
|
148
|
+
* Returns 1 if both sets empty (degenerate equal-empty case);
|
|
149
|
+
* 0 if one is empty + the other isn't.
|
|
150
|
+
*/
|
|
151
|
+
export function jaccard(a, b) {
|
|
152
|
+
if (a.length === 0 && b.length === 0)
|
|
153
|
+
return 1;
|
|
154
|
+
if (a.length === 0 || b.length === 0)
|
|
155
|
+
return 0;
|
|
156
|
+
const sa = new Set(a);
|
|
157
|
+
const sb = new Set(b);
|
|
158
|
+
let inter = 0;
|
|
159
|
+
for (const x of sa)
|
|
160
|
+
if (sb.has(x))
|
|
161
|
+
inter++;
|
|
162
|
+
const union = sa.size + sb.size - inter;
|
|
163
|
+
return inter / union;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Compute similarity between two structural signatures. Auto-
|
|
167
|
+
* categorizes by JSX presence:
|
|
168
|
+
*
|
|
169
|
+
* component-vs-component (both have jsxTags):
|
|
170
|
+
* 0.50 jsx + 0.30 props + 0.20 calls
|
|
171
|
+
*
|
|
172
|
+
* api/utility-vs-api/utility (both jsxTags empty):
|
|
173
|
+
* 0.60 calls + 0.30 props + 0.10 imports
|
|
174
|
+
*
|
|
175
|
+
* cross-category (one has jsx, other doesn't):
|
|
176
|
+
* return 0 — comparing a component to a route handler is
|
|
177
|
+
* never a useful "duplicate" finding.
|
|
178
|
+
*
|
|
179
|
+
* Returns a number in [0, 1]. Default duplicate threshold: 0.7.
|
|
180
|
+
*/
|
|
181
|
+
export function signatureSimilarity(a, b) {
|
|
182
|
+
const aHasJsx = a.jsxTags.length > 0;
|
|
183
|
+
const bHasJsx = b.jsxTags.length > 0;
|
|
184
|
+
if (aHasJsx !== bHasJsx)
|
|
185
|
+
return 0;
|
|
186
|
+
if (aHasJsx && bHasJsx) {
|
|
187
|
+
return (0.5 * jaccard(a.jsxTags, b.jsxTags) +
|
|
188
|
+
0.3 * jaccard(a.propsUsed, b.propsUsed) +
|
|
189
|
+
0.2 * jaccard(a.callsUsed, b.callsUsed));
|
|
190
|
+
}
|
|
191
|
+
// API / utility comparison
|
|
192
|
+
return (0.6 * jaccard(a.callsUsed, b.callsUsed) +
|
|
193
|
+
0.3 * jaccard(a.propsUsed, b.propsUsed) +
|
|
194
|
+
0.1 * jaccard(a.imports, b.imports));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Scan a list of structural signatures + return all pairs whose
|
|
198
|
+
* similarity is >= threshold. Output is sorted by similarity
|
|
199
|
+
* descending. Pure: caller owns IO (reading files into the
|
|
200
|
+
* signatures array).
|
|
201
|
+
*/
|
|
202
|
+
export function scanForDuplicates(signatures, threshold = 0.7) {
|
|
203
|
+
const out = [];
|
|
204
|
+
for (let i = 0; i < signatures.length; i++) {
|
|
205
|
+
for (let j = i + 1; j < signatures.length; j++) {
|
|
206
|
+
const a = signatures[i];
|
|
207
|
+
const b = signatures[j];
|
|
208
|
+
const sim = signatureSimilarity(a, b);
|
|
209
|
+
if (sim >= threshold) {
|
|
210
|
+
const category = a.jsxTags.length > 0 && b.jsxTags.length > 0 ? "component" : "api-or-util";
|
|
211
|
+
out.push({
|
|
212
|
+
a: a.path,
|
|
213
|
+
b: b.path,
|
|
214
|
+
similarity: sim,
|
|
215
|
+
category,
|
|
216
|
+
axes: {
|
|
217
|
+
jsx: jaccard(a.jsxTags, b.jsxTags),
|
|
218
|
+
props: jaccard(a.propsUsed, b.propsUsed),
|
|
219
|
+
calls: jaccard(a.callsUsed, b.callsUsed),
|
|
220
|
+
imports: jaccard(a.imports, b.imports),
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
out.sort((x, y) => y.similarity - x.similarity);
|
|
227
|
+
return out;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Convert a duplicate-pair finding into a refactor proposal that
|
|
231
|
+
* the `slowcook refactor` command can rank. Pure synthesis — no IO.
|
|
232
|
+
*
|
|
233
|
+
* The proposal has:
|
|
234
|
+
* - id: deterministic from the pair (so re-running doesn't dup)
|
|
235
|
+
* - title: "consolidate <A> + <B> (NN% similar)" with the category
|
|
236
|
+
* - filesAffected: both paths
|
|
237
|
+
* - estimatedLocDelta: caller doesn't know, conservative 0
|
|
238
|
+
* (the proposal tells you to merge; the actual diff happens
|
|
239
|
+
* when someone DOES the work)
|
|
240
|
+
* - estimatedValueScore: scaled from similarity
|
|
241
|
+
* (similarity 0.7 → 5; 0.85 → 7; 0.95 → 9)
|
|
242
|
+
*/
|
|
243
|
+
export function pairToRefactorProposal(pair) {
|
|
244
|
+
const idSlug = [pair.a, pair.b]
|
|
245
|
+
.sort()
|
|
246
|
+
.map((p) => p.replace(/[^A-Za-z0-9]/g, "-"))
|
|
247
|
+
.join("__");
|
|
248
|
+
const id = `reuse-scan/${idSlug}`;
|
|
249
|
+
const pct = Math.round(pair.similarity * 100);
|
|
250
|
+
const score = Math.round(5 + (pair.similarity - 0.7) * (4 / 0.3)); // 0.7→5, 1.0→9
|
|
251
|
+
const categoryLabel = pair.category === "component" ? "components" : "API/utility files";
|
|
252
|
+
return {
|
|
253
|
+
id,
|
|
254
|
+
title: `consolidate ${pair.a} + ${pair.b} (${pct}% similar ${categoryLabel})`,
|
|
255
|
+
rationale: `Recon's reuse scan flagged these two ${categoryLabel} as ${pct}% structurally similar. Likely candidate for extraction into a shared module or for one to be deleted in favor of the other. Per-axis: jsx=${pair.axes.jsx.toFixed(2)} props=${pair.axes.props.toFixed(2)} calls=${pair.axes.calls.toFixed(2)} imports=${pair.axes.imports.toFixed(2)}.`,
|
|
256
|
+
filesAffected: [pair.a, pair.b],
|
|
257
|
+
estimatedLocDelta: 0,
|
|
258
|
+
estimatedValueScore: Math.max(1, Math.min(9, score)),
|
|
259
|
+
evidence: {
|
|
260
|
+
similarity: pair.similarity,
|
|
261
|
+
category: pair.category,
|
|
262
|
+
jsx_jaccard: pair.axes.jsx,
|
|
263
|
+
props_jaccard: pair.axes.props,
|
|
264
|
+
calls_jaccard: pair.axes.calls,
|
|
265
|
+
imports_jaccard: pair.axes.imports,
|
|
266
|
+
},
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=reuse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reuse.js","sourceRoot":"","sources":["../../../src/commands/recon/reuse.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,8 +48,54 @@ export declare function stripMockChromeSubtrees(source: string): string;
|
|
|
48
48
|
interface SynthOpts {
|
|
49
49
|
story: string;
|
|
50
50
|
shapes: ExtractedShape[];
|
|
51
|
+
/**
|
|
52
|
+
* 0.19.0-alpha.6 (#75) — emit mode.
|
|
53
|
+
* "v1": source-grep tests (asserts text in brewed src/). Cheap,
|
|
54
|
+
* no render, but fragile (passes when testid is in a comment;
|
|
55
|
+
* misses dynamic className composition).
|
|
56
|
+
* "v2": render-and-assert tests. Imports the component, mounts
|
|
57
|
+
* via @testing-library/react, queries the live DOM. Catches
|
|
58
|
+
* drift v1 misses; requires components to render with default
|
|
59
|
+
* props (or skips downstream assertions cleanly).
|
|
60
|
+
* Default: v1. Callers opt into v2 via --shape-mode v2.
|
|
61
|
+
*/
|
|
62
|
+
emitMode?: "v1" | "v2";
|
|
51
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* 0.19.0-alpha.6 — convert a `src/<rel>.tsx` source path to its
|
|
66
|
+
* `@/<rel>` tsconfig-alias import specifier (drops the `.tsx`
|
|
67
|
+
* extension; keeps directory structure). Pure: no IO.
|
|
68
|
+
*
|
|
69
|
+
* Examples:
|
|
70
|
+
* src/components/members/MemberReactionsPage.tsx
|
|
71
|
+
* → @/components/members/MemberReactionsPage
|
|
72
|
+
* src/lib/foo.ts
|
|
73
|
+
* → @/lib/foo
|
|
74
|
+
* mock/src/components/X.tsx (already mock-ish)
|
|
75
|
+
* → @/components/X (caller should pass mockToSrcPath first)
|
|
76
|
+
*/
|
|
77
|
+
export declare function srcPathToAliasImport(srcPath: string): string;
|
|
52
78
|
export declare function synthesiseShapeTestFile(opts: SynthOpts): string;
|
|
79
|
+
/**
|
|
80
|
+
* 0.19.0-alpha.6 (#75) — v2: render-and-assert structural tests.
|
|
81
|
+
*
|
|
82
|
+
* For each mock file, emit a test that:
|
|
83
|
+
* 1. Imports the brewed src/ component via the @/ alias.
|
|
84
|
+
* 2. Renders it with default props (`<Component />`) using
|
|
85
|
+
* @testing-library/react.
|
|
86
|
+
* 3. Queries the live DOM for testid presence, className tokens
|
|
87
|
+
* on the rendered output, and <header> landmark presence.
|
|
88
|
+
*
|
|
89
|
+
* Keeps v1's "no inline hex" anti-wiring assertion (still source-
|
|
90
|
+
* grep, cheap, catches token-family drift). The render assertions
|
|
91
|
+
* are the v2 win — catches dynamic-className drift v1 missed.
|
|
92
|
+
*
|
|
93
|
+
* Defensive: every assertion wraps render in a top-level
|
|
94
|
+
* "renders with default props" test. If that fails (component
|
|
95
|
+
* needs real props), the downstream tests fail too — clean signal
|
|
96
|
+
* that recon needs scenario-derived prop synthesis (a future α).
|
|
97
|
+
*/
|
|
98
|
+
export declare function synthesiseShapeTestFileV2(opts: SynthOpts): string;
|
|
53
99
|
/**
|
|
54
100
|
* Walk mock/src/ + return any file that contains `story-N` in source
|
|
55
101
|
* OR is referenced by a scenario file for the story.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-preserve.d.ts","sourceRoot":"","sources":["../../../src/commands/recon/shape-preserve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iFAAiF;IACjF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAWD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAiBrF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY9D;AA0GD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"shape-preserve.d.ts","sourceRoot":"","sources":["../../../src/commands/recon/shape-preserve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iFAAiF;IACjF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4EAA4E;IAC5E,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAWD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAiBrF;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY9D;AA0GD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAK/D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAiFjE;AAkFD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA+E/E;AAGD,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC"}
|
|
@@ -167,7 +167,133 @@ function extractTokens(source, tokens) {
|
|
|
167
167
|
function escapeRegExp(s) {
|
|
168
168
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
169
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* 0.19.0-alpha.6 — convert a `src/<rel>.tsx` source path to its
|
|
172
|
+
* `@/<rel>` tsconfig-alias import specifier (drops the `.tsx`
|
|
173
|
+
* extension; keeps directory structure). Pure: no IO.
|
|
174
|
+
*
|
|
175
|
+
* Examples:
|
|
176
|
+
* src/components/members/MemberReactionsPage.tsx
|
|
177
|
+
* → @/components/members/MemberReactionsPage
|
|
178
|
+
* src/lib/foo.ts
|
|
179
|
+
* → @/lib/foo
|
|
180
|
+
* mock/src/components/X.tsx (already mock-ish)
|
|
181
|
+
* → @/components/X (caller should pass mockToSrcPath first)
|
|
182
|
+
*/
|
|
183
|
+
export function srcPathToAliasImport(srcPath) {
|
|
184
|
+
const stripped = srcPath.replace(/^(?:mock\/)?src\//, "@/").replace(/\.(tsx?|jsx?)$/, "");
|
|
185
|
+
return stripped;
|
|
186
|
+
}
|
|
170
187
|
export function synthesiseShapeTestFile(opts) {
|
|
188
|
+
if (opts.emitMode === "v2") {
|
|
189
|
+
return synthesiseShapeTestFileV2(opts);
|
|
190
|
+
}
|
|
191
|
+
return synthesiseShapeTestFileV1(opts);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* 0.19.0-alpha.6 (#75) — v2: render-and-assert structural tests.
|
|
195
|
+
*
|
|
196
|
+
* For each mock file, emit a test that:
|
|
197
|
+
* 1. Imports the brewed src/ component via the @/ alias.
|
|
198
|
+
* 2. Renders it with default props (`<Component />`) using
|
|
199
|
+
* @testing-library/react.
|
|
200
|
+
* 3. Queries the live DOM for testid presence, className tokens
|
|
201
|
+
* on the rendered output, and <header> landmark presence.
|
|
202
|
+
*
|
|
203
|
+
* Keeps v1's "no inline hex" anti-wiring assertion (still source-
|
|
204
|
+
* grep, cheap, catches token-family drift). The render assertions
|
|
205
|
+
* are the v2 win — catches dynamic-className drift v1 missed.
|
|
206
|
+
*
|
|
207
|
+
* Defensive: every assertion wraps render in a top-level
|
|
208
|
+
* "renders with default props" test. If that fails (component
|
|
209
|
+
* needs real props), the downstream tests fail too — clean signal
|
|
210
|
+
* that recon needs scenario-derived prop synthesis (a future α).
|
|
211
|
+
*/
|
|
212
|
+
export function synthesiseShapeTestFileV2(opts) {
|
|
213
|
+
const { story, shapes } = opts;
|
|
214
|
+
const lines = [];
|
|
215
|
+
lines.push("// @vitest-environment jsdom");
|
|
216
|
+
lines.push("//");
|
|
217
|
+
lines.push(`// AUTO-GENERATED by slowcook recon --shape-mode v2 (story-${story}). Do not edit by hand.`);
|
|
218
|
+
lines.push("// Renders each component + queries the live DOM. v2 catches dynamic-className");
|
|
219
|
+
lines.push("// drift that v1's source-grep tests miss.");
|
|
220
|
+
lines.push("//");
|
|
221
|
+
lines.push("// Re-running recon regenerates this file.");
|
|
222
|
+
lines.push("");
|
|
223
|
+
lines.push(`import { describe, it, expect, afterEach } from "vitest";`);
|
|
224
|
+
lines.push(`import { render, cleanup } from "@testing-library/react";`);
|
|
225
|
+
// Import each component once at top of file so the test runner can
|
|
226
|
+
// resolve them at module-eval time (same shape as production tests).
|
|
227
|
+
for (const shape of shapes) {
|
|
228
|
+
if (!shape.componentName)
|
|
229
|
+
continue;
|
|
230
|
+
const alias = srcPathToAliasImport(mockToSrcPath(shape.file));
|
|
231
|
+
// Default-imports for default-exported components, named imports otherwise.
|
|
232
|
+
// Best-effort detection: the source's "export default function" form
|
|
233
|
+
// implies default. Fall back to default import (most common shape).
|
|
234
|
+
lines.push(`import ${shape.componentName} from "${alias}";`);
|
|
235
|
+
}
|
|
236
|
+
lines.push("");
|
|
237
|
+
lines.push(`describe("story-${story} structural shape v2 (recon-emitted)", () => {`);
|
|
238
|
+
lines.push(` afterEach(() => { cleanup(); });`);
|
|
239
|
+
lines.push(``);
|
|
240
|
+
if (shapes.every((s) => s.testids.length === 0 && s.visualTokens.length === 0 && !s.hasHeader)) {
|
|
241
|
+
lines.push(` it.skip("no testids/tokens/header found in mock UI — nothing to assert", () => {});`);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
for (const shape of shapes) {
|
|
245
|
+
if (!shape.componentName)
|
|
246
|
+
continue;
|
|
247
|
+
const cn = shape.componentName;
|
|
248
|
+
lines.push(` describe("<${cn} /> from ${shape.file}", () => {`);
|
|
249
|
+
// Sentinel: can the component render with default props at all?
|
|
250
|
+
lines.push(` it("renders with default props (no throw)", () => {`);
|
|
251
|
+
lines.push(` expect(() => render(<${cn} />)).not.toThrow();`);
|
|
252
|
+
lines.push(` });`);
|
|
253
|
+
// Per-testid render assertions
|
|
254
|
+
for (const tid of shape.testids) {
|
|
255
|
+
lines.push(` it("DOM contains data-testid='${tid}'", () => {`);
|
|
256
|
+
lines.push(` const { queryByTestId } = render(<${cn} />);`);
|
|
257
|
+
lines.push(` expect(queryByTestId(${JSON.stringify(tid)})).toBeTruthy();`);
|
|
258
|
+
lines.push(` });`);
|
|
259
|
+
}
|
|
260
|
+
// Per-token render assertions: search the rendered DOM tree
|
|
261
|
+
for (const token of shape.visualTokens) {
|
|
262
|
+
lines.push(` it("rendered DOM has class token '${token}'", () => {`);
|
|
263
|
+
lines.push(` const { container } = render(<${cn} />);`);
|
|
264
|
+
lines.push(` const found = container.querySelector('[class*="${token}"]');`);
|
|
265
|
+
lines.push(` expect(found, ${JSON.stringify(`expected at least one element with class token '${token}'`)}).toBeTruthy();`);
|
|
266
|
+
lines.push(` });`);
|
|
267
|
+
}
|
|
268
|
+
// Header semantic landmark
|
|
269
|
+
if (shape.hasHeader) {
|
|
270
|
+
lines.push(` it("rendered DOM contains a <header> element", () => {`);
|
|
271
|
+
lines.push(` const { container } = render(<${cn} />);`);
|
|
272
|
+
lines.push(` expect(container.querySelector("header")).toBeTruthy();`);
|
|
273
|
+
lines.push(` });`);
|
|
274
|
+
}
|
|
275
|
+
lines.push(` });`);
|
|
276
|
+
lines.push(``);
|
|
277
|
+
}
|
|
278
|
+
// Anti-wiring: source-grep "no inline hex" — kept from v1 for
|
|
279
|
+
// token-family preservation. Cheap + complementary to the render
|
|
280
|
+
// assertions (catches different drift class).
|
|
281
|
+
lines.push(` describe("token-family preservation (source-grep)", () => {`);
|
|
282
|
+
lines.push(` const { readFileSync, existsSync } = require("node:fs");`);
|
|
283
|
+
for (const shape of shapes) {
|
|
284
|
+
const srcPath = mockToSrcPath(shape.file);
|
|
285
|
+
lines.push(` it("${shape.componentName ?? shape.file}: no inline hex/rgb in className/style", () => {`);
|
|
286
|
+
lines.push(` const src = existsSync(${JSON.stringify(srcPath)}) ? readFileSync(${JSON.stringify(srcPath)}, "utf8") : "";`);
|
|
287
|
+
lines.push(` const styled = src.match(/(?:className|style)\\s*=\\s*["\`'][^"\`']*?[#][0-9a-fA-F]{3,8}[^"\`']*?["\`']/g) || [];`);
|
|
288
|
+
lines.push(` expect(styled, "no inline hex in className/style").toEqual([]);`);
|
|
289
|
+
lines.push(` });`);
|
|
290
|
+
}
|
|
291
|
+
lines.push(` });`);
|
|
292
|
+
}
|
|
293
|
+
lines.push(`});`);
|
|
294
|
+
return lines.join("\n") + "\n";
|
|
295
|
+
}
|
|
296
|
+
function synthesiseShapeTestFileV1(opts) {
|
|
171
297
|
const { story, shapes } = opts;
|
|
172
298
|
const lines = [];
|
|
173
299
|
lines.push("// @vitest-environment jsdom");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape-preserve.js","sourceRoot":"","sources":["../../../src/commands/recon/shape-preserve.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shape-preserve.js","sourceRoot":"","sources":["../../../src/commands/recon/shape-preserve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook refactor` — α.7 (#64).
|
|
3
|
+
*
|
|
4
|
+
* Reads candidate refactor proposals from
|
|
5
|
+
* .brewing/refactor/proposals.json
|
|
6
|
+
* Filters by --scope patterns, ranks by benefit/cost, prints a table.
|
|
7
|
+
*
|
|
8
|
+
* α.7 ships ranking + reporting only. LLM-backed proposal generation
|
|
9
|
+
* + auto-application land in later alphas. This command's job today
|
|
10
|
+
* is to give the architecture room: any proposer (hand-authored
|
|
11
|
+
* JSON, recon emissions, future LLM agent) drops files into the
|
|
12
|
+
* standard input path + this command consumes them.
|
|
13
|
+
*/
|
|
14
|
+
export declare function refactor(argv: string[], _cliVersion: string): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/refactor/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoEH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CjF"}
|