@slowcook-ai/cli 0.19.0-alpha.17 → 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/AGENTS.md +2 -1
- package/dist/cli.js +37 -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 +54 -0
- package/dist/commands/eval/index.d.ts.map +1 -0
- package/dist/commands/eval/index.js +283 -0
- package/dist/commands/eval/index.js.map +1 -0
- 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/init/plan.d.ts +26 -1
- package/dist/commands/init/plan.d.ts.map +1 -1
- package/dist/commands/init/plan.js +41 -3
- package/dist/commands/init/plan.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/recon/index.d.ts +1 -1
- package/dist/commands/recon/index.d.ts.map +1 -1
- package/dist/commands/recon/index.js +26 -0
- package/dist/commands/recon/index.js.map +1 -1
- package/dist/commands/recon/migration-gate.d.ts +59 -0
- package/dist/commands/recon/migration-gate.d.ts.map +1 -0
- package/dist/commands/recon/migration-gate.js +131 -0
- package/dist/commands/recon/migration-gate.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 +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 +59 -0
- package/dist/commands/refine/history-index.d.ts.map +1 -1
- package/dist/commands/refine/history-index.js +195 -8
- package/dist/commands/refine/history-index.js.map +1 -1
- package/dist/commands/refine/index.d.ts.map +1 -1
- package/dist/commands/refine/index.js +32 -1
- package/dist/commands/refine/index.js.map +1 -1
- package/dist/commands/refine/proposals-synth.d.ts +50 -1
- package/dist/commands/refine/proposals-synth.d.ts.map +1 -1
- package/dist/commands/refine/proposals-synth.js +199 -35
- package/dist/commands/refine/proposals-synth.js.map +1 -1
- package/dist/commands/refine/spec-yaml.d.ts +274 -250
- package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
- package/dist/commands/refine/spec-yaml.js +10 -0
- package/dist/commands/refine/spec-yaml.js.map +1 -1
- package/dist/commands/run-mock/index.d.ts.map +1 -1
- package/dist/commands/run-mock/index.js +7 -1
- package/dist/commands/run-mock/index.js.map +1 -1
- package/dist/commands/testgen/agent.d.ts.map +1 -1
- package/dist/commands/testgen/agent.js +34 -9
- package/dist/commands/testgen/agent.js.map +1 -1
- package/dist/commands/vibe/agent.d.ts +7 -0
- package/dist/commands/vibe/agent.d.ts.map +1 -1
- package/dist/commands/vibe/agent.js +2 -2
- package/dist/commands/vibe/agent.js.map +1 -1
- package/dist/commands/vibe/index.d.ts.map +1 -1
- package/dist/commands/vibe/index.js +7 -1
- package/dist/commands/vibe/index.js.map +1 -1
- package/dist/cost-store.d.ts +52 -0
- package/dist/cost-store.d.ts.map +1 -0
- package/dist/cost-store.js +108 -0
- package/dist/cost-store.js.map +1 -0
- package/dist/lib/budget.d.ts +123 -0
- package/dist/lib/budget.d.ts.map +1 -0
- package/dist/lib/budget.js +225 -0
- package/dist/lib/budget.js.map +1 -0
- package/dist/lib/mock-shape.d.ts +44 -0
- package/dist/lib/mock-shape.d.ts.map +1 -0
- package/dist/lib/mock-shape.js +77 -0
- package/dist/lib/mock-shape.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { LlmClient } from "@slowcook-ai/core";
|
|
2
|
+
export interface AnsweredQ {
|
|
3
|
+
question: string;
|
|
4
|
+
answer: string;
|
|
5
|
+
source: string;
|
|
6
|
+
}
|
|
7
|
+
export interface UnansweredQ {
|
|
8
|
+
question: string;
|
|
9
|
+
why_unanswered: string;
|
|
10
|
+
}
|
|
11
|
+
export interface BrownfieldAnswerResult {
|
|
12
|
+
answered: AnsweredQ[];
|
|
13
|
+
unanswered: UnansweredQ[];
|
|
14
|
+
costUsd: number;
|
|
15
|
+
usage: {
|
|
16
|
+
inputTokens: number;
|
|
17
|
+
outputTokens: number;
|
|
18
|
+
cacheReadTokens: number;
|
|
19
|
+
cacheCreateTokens: number;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Detect whether the consumer's repo has ANY brownfield signal that
|
|
24
|
+
* Pass B could draw from. Greenfield = none of these present:
|
|
25
|
+
*
|
|
26
|
+
* - `.brewing/context.md` with non-empty content
|
|
27
|
+
* - `src/lib/entities/*.ts` (at least one entity file)
|
|
28
|
+
* - `specs/_index.yaml` (at least one active story)
|
|
29
|
+
* - `.brewing/diagrams/entities.md` or `.brewing/diagrams/schema.mmd`
|
|
30
|
+
*
|
|
31
|
+
* Cheap check (filesystem stat + small reads). No LLM. Used to gate
|
|
32
|
+
* Pass B so greenfield projects don't pay for an empty-answer call.
|
|
33
|
+
*/
|
|
34
|
+
export declare function hasBrownfield(repoRoot: string): boolean;
|
|
35
|
+
export interface BrownfieldAnswerInputs {
|
|
36
|
+
draftQuestionsMarkdown: string;
|
|
37
|
+
projectContext: string;
|
|
38
|
+
mockExcerpt?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Run Pass B. Returns structured answered/unanswered split + cost.
|
|
42
|
+
* Throws on JSON parse failure — caller decides whether to fall back
|
|
43
|
+
* (today: caller catches + posts the original Pass A markdown unchanged).
|
|
44
|
+
*/
|
|
45
|
+
export declare function answerQuestionsFromBrownfield(inputs: BrownfieldAnswerInputs, opts: {
|
|
46
|
+
llm: LlmClient;
|
|
47
|
+
model: string;
|
|
48
|
+
}): Promise<BrownfieldAnswerResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Parse Pass B's JSON output. Tolerant of stray code fences / leading
|
|
51
|
+
* prose (the model occasionally adds "Here is the JSON:" despite the
|
|
52
|
+
* prompt). Falls back to JSON.parse of the largest brace-balanced
|
|
53
|
+
* substring.
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseAnswerJson(text: string): {
|
|
56
|
+
answered: AnsweredQ[];
|
|
57
|
+
unanswered: UnansweredQ[];
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Render the `<details>` audit-trail block listing brownfield-answered
|
|
61
|
+
* questions. Returns empty string when there are no answered Qs (no
|
|
62
|
+
* point spamming the comment with an empty disclosure).
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatAnsweredDetails(answered: AnsweredQ[]): string;
|
|
65
|
+
/**
|
|
66
|
+
* Render the visible PM-facing question list from `unanswered`. Each
|
|
67
|
+
* question text is preserved verbatim (Pass A's labeled-options format
|
|
68
|
+
* survives). Numbered list, blank-line separated. Empty when there are
|
|
69
|
+
* no unanswered Qs (caller decides what to do — probably emit a spec
|
|
70
|
+
* directly next round, or post a "nothing more to ask" note).
|
|
71
|
+
*/
|
|
72
|
+
export declare function formatUnansweredQuestions(unanswered: UnansweredQ[]): string;
|
|
73
|
+
/**
|
|
74
|
+
* Compose the final question-comment markdown body, replacing Pass A's
|
|
75
|
+
* raw questions output with the Pass B filtered view + audit details.
|
|
76
|
+
* Leading "I checked first..." note appears only when at least one
|
|
77
|
+
* answer was found, so greenfield-like cases (Pass B ran but found
|
|
78
|
+
* nothing) don't show a misleading "I checked first" banner.
|
|
79
|
+
*/
|
|
80
|
+
export declare function composePassBComment(result: BrownfieldAnswerResult, fallbackMarkdown: string): string;
|
|
81
|
+
//# sourceMappingURL=brownfield-answer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brownfield-answer.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/brownfield-answer.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA4CvD;AAED,MAAM,WAAW,sBAAsB;IACrC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE;IAAE,GAAG,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,sBAAsB,CAAC,CAgBjC;AA0BD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7C,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,UAAU,EAAE,WAAW,EAAE,CAAC;CAC3B,CAkBA;AAkBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAqBnE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAK3E;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,sBAAsB,EAC9B,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAsBR"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 0.19.0-α.36 — refine Pass B: reflexive brownfield-answer pass.
|
|
3
|
+
*
|
|
4
|
+
* After Pass A drafts clarifying questions, this second LLM call checks
|
|
5
|
+
* each question against the same brownfield context Pass A saw and
|
|
6
|
+
* decides whether the context already answers it. The PM only sees the
|
|
7
|
+
* unanswered questions in the main comment body; the answered ones go
|
|
8
|
+
* into a `<details>` audit-trail block so a technical PM can verify.
|
|
9
|
+
*
|
|
10
|
+
* Skipped entirely on greenfield projects (no `.brewing/context.md`,
|
|
11
|
+
* no `src/lib/entities/`, no `specs/_index.yaml` entries) — there's no
|
|
12
|
+
* context to draw from, so Pass B would always emit zero answers
|
|
13
|
+
* and just burn an LLM call.
|
|
14
|
+
*
|
|
15
|
+
* The pattern mirrors `side-effects-audit.ts`: structured JSON output,
|
|
16
|
+
* deterministic markdown rendering on slowcook's side.
|
|
17
|
+
*/
|
|
18
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
import { BROWNFIELD_ANSWER_SYSTEM } from "@slowcook-ai/llm-anthropic";
|
|
21
|
+
/**
|
|
22
|
+
* Detect whether the consumer's repo has ANY brownfield signal that
|
|
23
|
+
* Pass B could draw from. Greenfield = none of these present:
|
|
24
|
+
*
|
|
25
|
+
* - `.brewing/context.md` with non-empty content
|
|
26
|
+
* - `src/lib/entities/*.ts` (at least one entity file)
|
|
27
|
+
* - `specs/_index.yaml` (at least one active story)
|
|
28
|
+
* - `.brewing/diagrams/entities.md` or `.brewing/diagrams/schema.mmd`
|
|
29
|
+
*
|
|
30
|
+
* Cheap check (filesystem stat + small reads). No LLM. Used to gate
|
|
31
|
+
* Pass B so greenfield projects don't pay for an empty-answer call.
|
|
32
|
+
*/
|
|
33
|
+
export function hasBrownfield(repoRoot) {
|
|
34
|
+
// 1. context.md with body
|
|
35
|
+
try {
|
|
36
|
+
const p = join(repoRoot, ".brewing", "context.md");
|
|
37
|
+
if (existsSync(p) && statSync(p).size > 20)
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
/* fall through */
|
|
42
|
+
}
|
|
43
|
+
// 2. entities/
|
|
44
|
+
try {
|
|
45
|
+
const dir = join(repoRoot, "src", "lib", "entities");
|
|
46
|
+
if (existsSync(dir) &&
|
|
47
|
+
readdirSync(dir).some((f) => f.endsWith(".ts") && f !== "index.ts")) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
/* fall through */
|
|
53
|
+
}
|
|
54
|
+
// 3. specs index with stories
|
|
55
|
+
try {
|
|
56
|
+
const p = join(repoRoot, "specs", "_index.yaml");
|
|
57
|
+
if (existsSync(p)) {
|
|
58
|
+
const body = readFileSync(p, "utf8");
|
|
59
|
+
// crude: look for any `story_id:` or 1+ keyed entry under stories:.
|
|
60
|
+
if (/\bstory_id:|\n\s{2,}\w[\w-]*:/.test(body))
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* fall through */
|
|
66
|
+
}
|
|
67
|
+
// 4. brownfield extracts
|
|
68
|
+
for (const rel of [
|
|
69
|
+
".brewing/diagrams/entities.md",
|
|
70
|
+
".brewing/diagrams/schema.mmd",
|
|
71
|
+
".brewing/tokens.md",
|
|
72
|
+
]) {
|
|
73
|
+
try {
|
|
74
|
+
if (existsSync(join(repoRoot, rel)))
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
/* fall through */
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Run Pass B. Returns structured answered/unanswered split + cost.
|
|
85
|
+
* Throws on JSON parse failure — caller decides whether to fall back
|
|
86
|
+
* (today: caller catches + posts the original Pass A markdown unchanged).
|
|
87
|
+
*/
|
|
88
|
+
export async function answerQuestionsFromBrownfield(inputs, opts) {
|
|
89
|
+
const userMessage = buildUserMessage(inputs);
|
|
90
|
+
const response = await opts.llm.complete({
|
|
91
|
+
system: BROWNFIELD_ANSWER_SYSTEM,
|
|
92
|
+
cacheSystem: false,
|
|
93
|
+
model: opts.model,
|
|
94
|
+
messages: [{ role: "user", content: userMessage }],
|
|
95
|
+
maxTokens: 4096,
|
|
96
|
+
});
|
|
97
|
+
const { answered, unanswered } = parseAnswerJson(response.text);
|
|
98
|
+
return {
|
|
99
|
+
answered,
|
|
100
|
+
unanswered,
|
|
101
|
+
costUsd: response.costUsd,
|
|
102
|
+
usage: response.usage,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function buildUserMessage(inputs) {
|
|
106
|
+
const sections = [];
|
|
107
|
+
sections.push("## Brownfield context (what Pass A saw)");
|
|
108
|
+
sections.push("");
|
|
109
|
+
sections.push(inputs.projectContext);
|
|
110
|
+
if (inputs.mockExcerpt && inputs.mockExcerpt.trim()) {
|
|
111
|
+
sections.push("");
|
|
112
|
+
sections.push("## Mock excerpt (design source-of-truth for this story)");
|
|
113
|
+
sections.push("");
|
|
114
|
+
sections.push("```tsx");
|
|
115
|
+
sections.push(inputs.mockExcerpt);
|
|
116
|
+
sections.push("```");
|
|
117
|
+
}
|
|
118
|
+
sections.push("");
|
|
119
|
+
sections.push("## Pass A's draft questions (markdown)");
|
|
120
|
+
sections.push("");
|
|
121
|
+
sections.push(inputs.draftQuestionsMarkdown);
|
|
122
|
+
sections.push("");
|
|
123
|
+
sections.push("Emit the JSON object only — no prose, no fences. Copy questions verbatim including any (a)/(b)/(c) options.");
|
|
124
|
+
return sections.join("\n");
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Parse Pass B's JSON output. Tolerant of stray code fences / leading
|
|
128
|
+
* prose (the model occasionally adds "Here is the JSON:" despite the
|
|
129
|
+
* prompt). Falls back to JSON.parse of the largest brace-balanced
|
|
130
|
+
* substring.
|
|
131
|
+
*/
|
|
132
|
+
export function parseAnswerJson(text) {
|
|
133
|
+
let raw = text.trim();
|
|
134
|
+
// Strip markdown code-fence wrappers if the model added them.
|
|
135
|
+
raw = raw.replace(/^```(?:json)?\s*\n?/i, "").replace(/\n?```\s*$/i, "");
|
|
136
|
+
// If the model prefixed prose, find the first { and matching close.
|
|
137
|
+
const firstBrace = raw.indexOf("{");
|
|
138
|
+
const lastBrace = raw.lastIndexOf("}");
|
|
139
|
+
if (firstBrace > 0 && lastBrace > firstBrace) {
|
|
140
|
+
raw = raw.slice(firstBrace, lastBrace + 1);
|
|
141
|
+
}
|
|
142
|
+
const parsed = JSON.parse(raw);
|
|
143
|
+
const answered = Array.isArray(parsed.answered)
|
|
144
|
+
? parsed.answered.filter(isAnsweredQ)
|
|
145
|
+
: [];
|
|
146
|
+
const unanswered = Array.isArray(parsed.unanswered)
|
|
147
|
+
? parsed.unanswered.filter(isUnansweredQ)
|
|
148
|
+
: [];
|
|
149
|
+
return { answered, unanswered };
|
|
150
|
+
}
|
|
151
|
+
function isAnsweredQ(x) {
|
|
152
|
+
if (!x || typeof x !== "object")
|
|
153
|
+
return false;
|
|
154
|
+
const r = x;
|
|
155
|
+
return (typeof r.question === "string" &&
|
|
156
|
+
typeof r.answer === "string" &&
|
|
157
|
+
typeof r.source === "string");
|
|
158
|
+
}
|
|
159
|
+
function isUnansweredQ(x) {
|
|
160
|
+
if (!x || typeof x !== "object")
|
|
161
|
+
return false;
|
|
162
|
+
const r = x;
|
|
163
|
+
return typeof r.question === "string" && typeof r.why_unanswered === "string";
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Render the `<details>` audit-trail block listing brownfield-answered
|
|
167
|
+
* questions. Returns empty string when there are no answered Qs (no
|
|
168
|
+
* point spamming the comment with an empty disclosure).
|
|
169
|
+
*/
|
|
170
|
+
export function formatAnsweredDetails(answered) {
|
|
171
|
+
if (answered.length === 0)
|
|
172
|
+
return "";
|
|
173
|
+
const lines = [];
|
|
174
|
+
lines.push("");
|
|
175
|
+
lines.push(`<details>\n<summary>🔍 <strong>${answered.length} question${answered.length === 1 ? "" : "s"} answered from brownfield context (audit trail)</strong></summary>\n`);
|
|
176
|
+
lines.push("");
|
|
177
|
+
lines.push(`_I checked the entities digest, active specs, brownfield extracts, and mock before asking the PM. These would have been questions, but the answer was already in the codebase:_\n`);
|
|
178
|
+
answered.forEach((a, i) => {
|
|
179
|
+
lines.push(`**${i + 1}. ${a.question.trim()}**`);
|
|
180
|
+
lines.push("");
|
|
181
|
+
lines.push(`Answer: ${a.answer.trim()}`);
|
|
182
|
+
lines.push("");
|
|
183
|
+
lines.push(`Source: \`${a.source.trim()}\``);
|
|
184
|
+
lines.push("");
|
|
185
|
+
});
|
|
186
|
+
lines.push("</details>");
|
|
187
|
+
return lines.join("\n");
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Render the visible PM-facing question list from `unanswered`. Each
|
|
191
|
+
* question text is preserved verbatim (Pass A's labeled-options format
|
|
192
|
+
* survives). Numbered list, blank-line separated. Empty when there are
|
|
193
|
+
* no unanswered Qs (caller decides what to do — probably emit a spec
|
|
194
|
+
* directly next round, or post a "nothing more to ask" note).
|
|
195
|
+
*/
|
|
196
|
+
export function formatUnansweredQuestions(unanswered) {
|
|
197
|
+
if (unanswered.length === 0)
|
|
198
|
+
return "";
|
|
199
|
+
return unanswered
|
|
200
|
+
.map((u, i) => `**${i + 1}.** ${u.question.trim()}`)
|
|
201
|
+
.join("\n\n");
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Compose the final question-comment markdown body, replacing Pass A's
|
|
205
|
+
* raw questions output with the Pass B filtered view + audit details.
|
|
206
|
+
* Leading "I checked first..." note appears only when at least one
|
|
207
|
+
* answer was found, so greenfield-like cases (Pass B ran but found
|
|
208
|
+
* nothing) don't show a misleading "I checked first" banner.
|
|
209
|
+
*/
|
|
210
|
+
export function composePassBComment(result, fallbackMarkdown) {
|
|
211
|
+
const totalQs = result.answered.length + result.unanswered.length;
|
|
212
|
+
// If Pass B parsed zero questions altogether — most likely a parse
|
|
213
|
+
// glitch where the model didn't return either array. Fall back to
|
|
214
|
+
// Pass A's original markdown so we never lose the questions entirely.
|
|
215
|
+
if (totalQs === 0)
|
|
216
|
+
return fallbackMarkdown;
|
|
217
|
+
const lines = [];
|
|
218
|
+
if (result.answered.length > 0) {
|
|
219
|
+
lines.push(`_🔍 Checked brownfield first: **${result.answered.length} of ${totalQs}** question${totalQs === 1 ? "" : "s"} already answered in your codebase (see audit trail below). **${result.unanswered.length}** still need${result.unanswered.length === 1 ? "s" : ""} your input:_`);
|
|
220
|
+
lines.push("");
|
|
221
|
+
}
|
|
222
|
+
if (result.unanswered.length > 0) {
|
|
223
|
+
lines.push(formatUnansweredQuestions(result.unanswered));
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
lines.push(`_✅ All ${result.answered.length} draft questions were answered from brownfield context. I'll proceed to emit the spec on the next pass — re-trigger this agent (remove + re-add the \`needs-refinement\` label) when you've confirmed the audit trail below._`);
|
|
227
|
+
}
|
|
228
|
+
lines.push(formatAnsweredDetails(result.answered));
|
|
229
|
+
return lines.join("\n");
|
|
230
|
+
}
|
|
231
|
+
//# sourceMappingURL=brownfield-answer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brownfield-answer.js","sourceRoot":"","sources":["../../../src/commands/refine/brownfield-answer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6B5D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA+ClE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA6B5D;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA+ClE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAoGtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmCtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ7D"}
|
|
@@ -155,6 +155,24 @@ export function readHistoryIndexDigest(repoRoot) {
|
|
|
155
155
|
lines.push("Column-level detail is in `.brewing/history-index.json`.");
|
|
156
156
|
lines.push("");
|
|
157
157
|
}
|
|
158
|
+
// 0.19.0-α.23 — mock surface is the consumer's hand-authored
|
|
159
|
+
// design source-of-truth. When the PM says "match the mock" or
|
|
160
|
+
// gestures at an existing flow, refine reads the actual mock JSX
|
|
161
|
+
// here instead of asking the PM for paths.
|
|
162
|
+
if (idx.mock_surface && idx.mock_surface.length > 0) {
|
|
163
|
+
lines.push("### Mock surface (design source-of-truth)");
|
|
164
|
+
lines.push("These are the consumer's hand-authored mock pages/components. When the PM says \"match the mock\" or references an existing flow without citing a file, treat these as the canonical design. Mirror layout, role toggles, copy, and behavior in your spec; only deviate when the PM explicitly asks.");
|
|
165
|
+
lines.push("");
|
|
166
|
+
for (const m of idx.mock_surface) {
|
|
167
|
+
const routeLabel = m.route ? `route \`${m.route}\`` : "component";
|
|
168
|
+
lines.push(`<details><summary><strong>${m.name}</strong> — ${routeLabel} (\`${m.file}\`)</summary>\n`);
|
|
169
|
+
lines.push("```tsx");
|
|
170
|
+
lines.push(m.excerpt);
|
|
171
|
+
lines.push("```");
|
|
172
|
+
lines.push("</details>\n");
|
|
173
|
+
}
|
|
174
|
+
lines.push("");
|
|
175
|
+
}
|
|
158
176
|
if (idx.test_helpers && idx.test_helpers.length > 0) {
|
|
159
177
|
lines.push("### Existing test helpers (use these idioms; don't invent new mocking patterns)");
|
|
160
178
|
for (const h of idx.test_helpers.slice(0, 30)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/commands/refine/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,30 @@ export interface TestFileEntry {
|
|
|
59
59
|
/** describe / it titles found in the file (best-effort regex). */
|
|
60
60
|
test_names: string[];
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* A mock page or component, captured so refine can answer
|
|
64
|
+
* "match the mock" without making the PM cite paths.
|
|
65
|
+
*
|
|
66
|
+
* 0.19.0-α.23 — added because real PM issues describe user pain
|
|
67
|
+
* ("registration should look like the mock"), and the indexer
|
|
68
|
+
* previously only saw production `src/`. Refine then either
|
|
69
|
+
* hallucinated a design or had to ask. Surfacing mock files in
|
|
70
|
+
* context closes the loop: PM says "as mock" → refine reads the
|
|
71
|
+
* actual mock excerpt → spec mirrors it.
|
|
72
|
+
*
|
|
73
|
+
* The excerpt is bounded to the first ~1.5KB so refine's prompt
|
|
74
|
+
* doesn't blow up on a 5KB mock file.
|
|
75
|
+
*/
|
|
76
|
+
export interface MockEntry {
|
|
77
|
+
/** repo-relative path. */
|
|
78
|
+
file: string;
|
|
79
|
+
/** Route inferred from app/router-shape file location, or null for components. */
|
|
80
|
+
route: string | null;
|
|
81
|
+
/** Component or page name (best-effort extraction, falls back to file basename). */
|
|
82
|
+
name: string;
|
|
83
|
+
/** First ~1500 chars of the file (after trimming whitespace) so refine sees the actual JSX/markup. */
|
|
84
|
+
excerpt: string;
|
|
85
|
+
}
|
|
62
86
|
export interface HistoryIndex {
|
|
63
87
|
generated_at: string;
|
|
64
88
|
generator: "slowcook-refine-history-index@0.17.0";
|
|
@@ -67,6 +91,8 @@ export interface HistoryIndex {
|
|
|
67
91
|
migrations: MigrationEntry[];
|
|
68
92
|
test_helpers: TestHelperEntry[];
|
|
69
93
|
test_files: TestFileEntry[];
|
|
94
|
+
/** 0.19.0-α.23 — mock surface (design source-of-truth). */
|
|
95
|
+
mock_surface: MockEntry[];
|
|
70
96
|
}
|
|
71
97
|
interface BuildOptions {
|
|
72
98
|
repoRoot: string;
|
|
@@ -77,8 +103,41 @@ interface BuildOptions {
|
|
|
77
103
|
migrations?: string;
|
|
78
104
|
tests?: string;
|
|
79
105
|
helpers?: string;
|
|
106
|
+
/** Default: `mock/src` (matches slowcook init scaffold). */
|
|
107
|
+
mockRoot?: string;
|
|
80
108
|
};
|
|
81
109
|
}
|
|
82
110
|
export declare function buildHistoryIndex(opts: BuildOptions): HistoryIndex;
|
|
111
|
+
export declare const TYPEORM_MIGRATION_FALLBACK_DIRS: string[];
|
|
112
|
+
/**
|
|
113
|
+
* The columns `DatabaseCreateTable` (delgoosh's helper) adds implicitly on
|
|
114
|
+
* EVERY table. Knowing these prevents the migration gate from raising a
|
|
115
|
+
* false-positive "missing column" verdict when the spec references e.g.
|
|
116
|
+
* `created_at` and the migration uses the helper.
|
|
117
|
+
*
|
|
118
|
+
* Kept conservative: only columns added by the helper at delgoosh-monorepo's
|
|
119
|
+
* version (id, created_at, updated_at, deleted_at). Future TypeORM helpers
|
|
120
|
+
* with different defaults need their own entry — or, longer-term, slowcook
|
|
121
|
+
* should infer this from the helper's source.
|
|
122
|
+
*/
|
|
123
|
+
export declare const TYPEORM_HELPER_IMPLICIT_COLUMNS: string[];
|
|
124
|
+
export declare function scanMigrations(repoRoot: string, dir: string): MigrationEntry[];
|
|
125
|
+
/**
|
|
126
|
+
* Parse a single TypeORM migration TS file into the same MigrationEntry shape
|
|
127
|
+
* the SQL parser produces. Sees two patterns:
|
|
128
|
+
*
|
|
129
|
+
* 1. `await queryRunner.query(\`CREATE TABLE x ...\`)` — extract the SQL
|
|
130
|
+
* template body and run it through the existing SQL parsers.
|
|
131
|
+
* 2. `await DatabaseCreateTable(queryRunner, 'tbl', [{name:'a'},{name:'b'}])`
|
|
132
|
+
* — extract `tbl` + each column's name + the implicit-columns helpers
|
|
133
|
+
* add (id, created_at, updated_at, deleted_at).
|
|
134
|
+
*
|
|
135
|
+
* Pattern 2 is delgoosh-monorepo-specific; pattern 1 covers raw SQL writers.
|
|
136
|
+
* EXPORTED for unit testing.
|
|
137
|
+
*/
|
|
138
|
+
export declare function parseTypeOrmMigration(name: string, body: string): MigrationEntry;
|
|
139
|
+
export declare function extractCreateTables(sql: string): string[];
|
|
140
|
+
export declare function extractColumnsAdded(sql: string): Record<string, string[]>;
|
|
141
|
+
export declare function scanMockSurface(repoRoot: string, mockRoot: string): MockEntry[];
|
|
83
142
|
export {};
|
|
84
143
|
//# sourceMappingURL=history-index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history-index.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/history-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,wFAAwF;IACxF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,sCAAsC,CAAC;IAClD,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,UAAU,EAAE,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"history-index.d.ts","sourceRoot":"","sources":["../../../src/commands/refine/history-index.ts"],"names":[],"mappings":"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"}
|