@slowcook-ai/cli 0.11.10 → 0.11.13
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/commands/brew/agent.d.ts.map +1 -1
- package/dist/commands/brew/agent.js +68 -1
- package/dist/commands/brew/agent.js.map +1 -1
- package/dist/commands/brew/prompts.d.ts +8 -0
- package/dist/commands/brew/prompts.d.ts.map +1 -1
- package/dist/commands/brew/prompts.js +10 -0
- package/dist/commands/brew/prompts.js.map +1 -1
- package/dist/commands/brew/provenance.d.ts +79 -0
- package/dist/commands/brew/provenance.d.ts.map +1 -0
- package/dist/commands/brew/provenance.js +162 -0
- package/dist/commands/brew/provenance.js.map +1 -0
- package/dist/commands/refine/agent.d.ts +12 -0
- package/dist/commands/refine/agent.d.ts.map +1 -1
- package/dist/commands/refine/agent.js +133 -6
- package/dist/commands/refine/agent.js.map +1 -1
- package/dist/commands/refine/index.d.ts.map +1 -1
- package/dist/commands/refine/index.js +5 -0
- package/dist/commands/refine/index.js.map +1 -1
- package/dist/commands/refine/prompts.d.ts.map +1 -1
- package/dist/commands/refine/prompts.js +14 -1
- package/dist/commands/refine/prompts.js.map +1 -1
- package/dist/commands/refine/proposals-synth.js +64 -12
- package/dist/commands/refine/proposals-synth.js.map +1 -1
- package/dist/commands/refine/spec-yaml.d.ts +230 -230
- package/package.json +4 -4
|
@@ -51,30 +51,82 @@ function deriveRoutes(spec) {
|
|
|
51
51
|
if (typeof p === "string" && !p.startsWith("/api/"))
|
|
52
52
|
paths.add(p);
|
|
53
53
|
}
|
|
54
|
-
// 2. Path mentions in
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
// 2. Path mentions in ALL prose fields, not just ui_behavior. Specs use
|
|
55
|
+
// `<handle>` in preconditions/invariants/acceptance_scenarios as the
|
|
56
|
+
// canonical dynamic-segment shorthand; example handles like `/u/amin`
|
|
57
|
+
// show up in ui_behavior + scenarios as concrete repros. We capture
|
|
58
|
+
// BOTH forms and coalesce below so the proposal emits the dynamic
|
|
59
|
+
// route, not an accidental static route keyed on an example handle.
|
|
60
|
+
const prose = [
|
|
61
|
+
...Object.values(spec.ui_behavior ?? {}),
|
|
62
|
+
...(spec.preconditions ?? []),
|
|
63
|
+
...(spec.invariants ?? []),
|
|
64
|
+
...(spec.acceptance_scenarios ?? []),
|
|
65
|
+
...(spec.non_goals ?? []),
|
|
66
|
+
].join("\n");
|
|
67
|
+
// Regex accepts either `[name]` (Next.js App Router shape) or
|
|
68
|
+
// `<name>` (spec shorthand) as dynamic segments, alongside literal
|
|
69
|
+
// path segments. The `<>` form is normalised to `[]` after the scan.
|
|
70
|
+
const pathRe = /(?:^|[\s(`"'])(\/(?:[a-z][a-z0-9_-]*)(?:\/(?:\[[a-z_]+\]|<[a-z_]+>|[a-z0-9_-]+))*)(?=[`"'\s)),.?]|$)/gi;
|
|
57
71
|
let m;
|
|
58
|
-
while ((m = pathRe.exec(
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
// and paths that look like file refs
|
|
62
|
-
if (path.startsWith("/api/"))
|
|
72
|
+
while ((m = pathRe.exec(prose)) !== null) {
|
|
73
|
+
const raw = m[1];
|
|
74
|
+
if (raw.startsWith("/api/"))
|
|
63
75
|
continue;
|
|
64
|
-
if (
|
|
76
|
+
if (raw.includes("."))
|
|
65
77
|
continue;
|
|
66
|
-
|
|
78
|
+
// Normalise <name> → [name] so downstream file-path derivation
|
|
79
|
+
// sees a Next.js-shaped route regardless of which form the spec
|
|
80
|
+
// used in prose.
|
|
81
|
+
const normalised = raw.replace(/<([a-z_]+)>/gi, "[$1]");
|
|
82
|
+
paths.add(normalised);
|
|
67
83
|
}
|
|
68
84
|
if (paths.size === 0)
|
|
69
85
|
return null;
|
|
70
|
-
|
|
86
|
+
// Coalesce literal siblings into their dynamic parent: if both
|
|
87
|
+
// `/u/amin` and `/u/[handle]` are present, keep only `/u/[handle]`.
|
|
88
|
+
// This handles the common case where a spec includes both
|
|
89
|
+
// `<handle>` (canonical form) and concrete example handles in
|
|
90
|
+
// repro scenarios. Without this, testgen+brew see two routes and
|
|
91
|
+
// either pick the wrong one or generate duplicate files.
|
|
92
|
+
const pathList = Array.from(paths);
|
|
93
|
+
const hasDynamicSibling = (p) => {
|
|
94
|
+
for (const other of pathList) {
|
|
95
|
+
if (other === p)
|
|
96
|
+
continue;
|
|
97
|
+
if (!other.includes("["))
|
|
98
|
+
continue;
|
|
99
|
+
// Compare segment-by-segment: same length, same literal segments,
|
|
100
|
+
// other's `[name]` segments win over self's literal.
|
|
101
|
+
const aSegs = p.split("/");
|
|
102
|
+
const bSegs = other.split("/");
|
|
103
|
+
if (aSegs.length !== bSegs.length)
|
|
104
|
+
continue;
|
|
105
|
+
let fits = true;
|
|
106
|
+
for (let i = 0; i < aSegs.length; i++) {
|
|
107
|
+
const a = aSegs[i];
|
|
108
|
+
const b = bSegs[i];
|
|
109
|
+
if (a === b)
|
|
110
|
+
continue;
|
|
111
|
+
if (b.startsWith("[") && b.endsWith("]"))
|
|
112
|
+
continue;
|
|
113
|
+
fits = false;
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
if (fits)
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
};
|
|
121
|
+
const coalesced = pathList.filter((p) => p.includes("[") || !hasDynamicSibling(p));
|
|
122
|
+
const entries = coalesced.sort().map((path) => ({
|
|
71
123
|
path,
|
|
72
124
|
file: pathToPageFile(path),
|
|
73
125
|
}));
|
|
74
126
|
return {
|
|
75
127
|
status: "pending",
|
|
76
128
|
proposed_by: "spec-body-synth",
|
|
77
|
-
rationale: "Derived from api_contract +
|
|
129
|
+
rationale: "Derived from api_contract + prose fields. `<name>` dynamic segments are normalised to `[name]`; literal example paths that have a dynamic sibling (e.g., `/u/amin` alongside `/u/[handle]`) are dropped in favour of the dynamic form. Review the path-to-file mapping against the project's Next.js App Router convention.",
|
|
78
130
|
paths: entries,
|
|
79
131
|
};
|
|
80
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposals-synth.js","sourceRoot":"","sources":["../../../src/commands/refine/proposals-synth.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAU;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACtC,MAAM,WAAW,GAAkB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEnD,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM;YAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI;YAAE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM;YAAE,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1C,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAAU;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,2EAA2E;IAC3E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAI,KAA2B,CAAC,IAAI,CAAC;QAC5C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"proposals-synth.js","sourceRoot":"","sources":["../../../src/commands/refine/proposals-synth.ts"],"names":[],"mappings":"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"}
|