@slowcook-ai/cli 0.6.13 → 0.7.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.
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +12 -4
- package/dist/commands/init/index.js.map +1 -1
- package/dist/commands/init/plan.d.ts.map +1 -1
- package/dist/commands/init/plan.js +17 -17
- package/dist/commands/init/plan.js.map +1 -1
- package/dist/commands/init/templates.d.ts +11 -5
- package/dist/commands/init/templates.d.ts.map +1 -1
- package/dist/commands/init/templates.js +59 -229
- package/dist/commands/init/templates.js.map +1 -1
- package/dist/commands/testgen/agent.d.ts +33 -0
- package/dist/commands/testgen/agent.d.ts.map +1 -1
- package/dist/commands/testgen/agent.js +185 -14
- package/dist/commands/testgen/agent.js.map +1 -1
- package/dist/commands/testgen/prompts.d.ts +10 -12
- package/dist/commands/testgen/prompts.d.ts.map +1 -1
- package/dist/commands/testgen/prompts.js +150 -87
- package/dist/commands/testgen/prompts.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"AAyIA,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF5E"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync, } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, chmodSync, mkdirSync, } from "node:fs";
|
|
2
2
|
import { dirname, resolve, relative, isAbsolute } from "node:path";
|
|
3
3
|
import { execSync } from "node:child_process";
|
|
4
4
|
import { buildPlan, InitError } from "./plan.js";
|
|
@@ -114,6 +114,11 @@ function applyAction(cwd, a) {
|
|
|
114
114
|
? a.contents
|
|
115
115
|
: "";
|
|
116
116
|
writeFileSync(full, contents, "utf8");
|
|
117
|
+
// Git hooks (under .githooks/) must be executable or git silently
|
|
118
|
+
// ignores them. Any file under .githooks/ gets +x on write.
|
|
119
|
+
if (a.path.startsWith(".githooks/")) {
|
|
120
|
+
chmodSync(full, 0o755);
|
|
121
|
+
}
|
|
117
122
|
}
|
|
118
123
|
export async function init(argv, cliVersion) {
|
|
119
124
|
const args = parseArgs(argv);
|
|
@@ -171,11 +176,14 @@ export async function init(argv, cliVersion) {
|
|
|
171
176
|
console.log(`slowcook init: ${plan.actions.length - skippedCount} file(s) written, ${skippedCount} skipped.`);
|
|
172
177
|
console.log();
|
|
173
178
|
console.log("Next steps:");
|
|
174
|
-
console.log(` 1.
|
|
179
|
+
console.log(` 1. Activate the slowcook pre-commit hook (one time, per clone):`);
|
|
180
|
+
console.log(` git config core.hooksPath .githooks`);
|
|
181
|
+
console.log(` Keeps .brewing/code-map.* fresh on every src/ commit so PRs don't fail map-check.`);
|
|
182
|
+
console.log(` 2. Review .brewing/frozen-paths.json — add/remove directories to match your repo.`);
|
|
175
183
|
if (owner === "@TODO-OWNER") {
|
|
176
|
-
console.log(`
|
|
184
|
+
console.log(` 3. Replace @TODO-OWNER in CODEOWNERS with your GitHub handle/team.`);
|
|
177
185
|
}
|
|
178
|
-
console.log(` ${owner === "@TODO-OWNER" ? "
|
|
186
|
+
console.log(` ${owner === "@TODO-OWNER" ? "4." : "3."} Run \`slowcook manifest record\` once your test set is stable.`);
|
|
179
187
|
console.log(` ${owner === "@TODO-OWNER" ? "4." : "3."} Commit and open a PR; slowcook CI will run on it.`);
|
|
180
188
|
}
|
|
181
189
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAcD,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa,CAO3D;AAED,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAgGxE"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Pure planning logic for `slowcook init`. Takes a snapshot of the filesystem
|
|
2
2
|
// (via an injected reader), returns the planned actions. No I/O side effects
|
|
3
3
|
// here — all writes happen in the CLI wrapper so this is trivially testable.
|
|
4
|
-
import { frozenPathsJson,
|
|
4
|
+
import { frozenPathsJson, brewingReadme, contextMdTemplate, slowcookCliVersionFile, preCommitHook, codeownersFullFile, codeownersSection, gitkeep, CLI_VERSION_FOR_TEMPLATES, SLOWCOOK_CLI_VERSION_FILE, SLOWCOOK_CODEOWNERS_MARKER_BEGIN, SLOWCOOK_CODEOWNERS_MARKER_END, } from "./templates.js";
|
|
5
|
+
import { getGitHubCiArtifacts } from "@slowcook-ai/forge-github";
|
|
6
|
+
import { getTsStackConfig } from "@slowcook-ai/stack-ts";
|
|
5
7
|
const TARGETS = {
|
|
6
8
|
frozenPaths: ".brewing/frozen-paths.json",
|
|
7
9
|
stack: ".brewing/stack.json",
|
|
@@ -9,10 +11,7 @@ const TARGETS = {
|
|
|
9
11
|
contextMd: ".brewing/context.md",
|
|
10
12
|
cliVersion: SLOWCOOK_CLI_VERSION_FILE,
|
|
11
13
|
manifestsGitkeep: ".brewing/manifests/.gitkeep",
|
|
12
|
-
|
|
13
|
-
specMergedWorkflow: ".github/workflows/slowcook-spec-merged.yml",
|
|
14
|
-
testgenWorkflow: ".github/workflows/slowcook-testgen.yml",
|
|
15
|
-
brewAutoWorkflow: ".github/workflows/slowcook-brew-auto.yml",
|
|
14
|
+
preCommitHook: ".githooks/pre-commit",
|
|
16
15
|
codeowners: "CODEOWNERS",
|
|
17
16
|
packageJson: "package.json",
|
|
18
17
|
};
|
|
@@ -61,7 +60,7 @@ export function buildPlan(reader, options) {
|
|
|
61
60
|
// 1. .brewing/frozen-paths.json
|
|
62
61
|
addSimpleFile(actions, reader, options.force, TARGETS.frozenPaths, frozenPathsJson());
|
|
63
62
|
// 2. .brewing/stack.json
|
|
64
|
-
addSimpleFile(actions, reader, options.force, TARGETS.stack,
|
|
63
|
+
addSimpleFile(actions, reader, options.force, TARGETS.stack, getTsStackConfig({ hasPlaywright: tmplParams.hasPlaywright }));
|
|
65
64
|
// 3. .brewing/README.md
|
|
66
65
|
addSimpleFile(actions, reader, options.force, TARGETS.brewingReadme, brewingReadme());
|
|
67
66
|
// 3b. .brewing/context.md (project context for agents)
|
|
@@ -74,17 +73,18 @@ export function buildPlan(reader, options) {
|
|
|
74
73
|
if (!reader.exists(".brewing/manifests/")) {
|
|
75
74
|
actions.push({ kind: "create", path: TARGETS.manifestsGitkeep, contents: gitkeep() });
|
|
76
75
|
}
|
|
77
|
-
// 5.
|
|
78
|
-
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
|
|
76
|
+
// 5. CI workflows are provided by the forge adapter. Today only GitHub
|
|
77
|
+
// is wired; future forges (GitLab, Gitea) supply their own via a
|
|
78
|
+
// similar static export. See packages/forge-github/src/templates.ts.
|
|
79
|
+
for (const artifact of getGitHubCiArtifacts({ cliVersion })) {
|
|
80
|
+
addSimpleFile(actions, reader, options.force, artifact.path, artifact.contents);
|
|
81
|
+
}
|
|
82
|
+
// 5e. .githooks/pre-commit — forces code-map regen on src/ commits.
|
|
83
|
+
// Activation per clone: `git config core.hooksPath .githooks`. Without
|
|
84
|
+
// this hook, contributors hit the stale-map CI failure on every PR
|
|
85
|
+
// that touches src/ and have to rebase-fixup. Generated file is
|
|
86
|
+
// executable; init writes the mode below.
|
|
87
|
+
addSimpleFile(actions, reader, options.force, TARGETS.preCommitHook, preCommitHook());
|
|
88
88
|
// 6. CODEOWNERS — special case (append if exists without our markers)
|
|
89
89
|
actions.push(planCodeowners(reader, options, tmplParams));
|
|
90
90
|
return { detected, actions, warnings };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAE7E,OAAO,EACL,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/commands/init/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,14 +15,20 @@ export interface TemplateParams {
|
|
|
15
15
|
export declare const SLOWCOOK_CODEOWNERS_MARKER_BEGIN = "# --- slowcook:frozen-paths BEGIN ---";
|
|
16
16
|
export declare const SLOWCOOK_CODEOWNERS_MARKER_END = "# --- slowcook:frozen-paths END ---";
|
|
17
17
|
export declare function frozenPathsJson(): string;
|
|
18
|
-
export declare function stackJson(params: TemplateParams): string;
|
|
19
18
|
export declare function contextMdTemplate(): string;
|
|
20
19
|
export declare function brewingReadme(): string;
|
|
21
|
-
export declare function slowcookTestgenWorkflow(cliVersion: string): string;
|
|
22
|
-
export declare function slowcookSpecMergedWorkflow(cliVersion: string): string;
|
|
23
|
-
export declare function slowcookBrewAutoWorkflow(): string;
|
|
24
|
-
export declare function slowcookWorkflow(cliVersion: string): string;
|
|
25
20
|
export declare function codeownersSection(params: TemplateParams): string;
|
|
26
21
|
export declare function codeownersFullFile(params: TemplateParams): string;
|
|
27
22
|
export declare function gitkeep(): string;
|
|
23
|
+
/**
|
|
24
|
+
* Committable git pre-commit hook that forces `.brewing/code-map.*` to
|
|
25
|
+
* stay in lockstep with `src/` on every commit. Without this, contributors
|
|
26
|
+
* (especially LLM agents) hit the stale-map CI failure repeatedly because
|
|
27
|
+
* the `slowcook map check` gate only catches staleness AFTER the commit.
|
|
28
|
+
*
|
|
29
|
+
* Activation is a one-time per-clone `git config core.hooksPath .githooks`
|
|
30
|
+
* — we can't set it from init because it's a local-clone concern. The
|
|
31
|
+
* generated `.brewing/README.md` documents the one-liner.
|
|
32
|
+
*/
|
|
33
|
+
export declare function preCommitHook(): string;
|
|
28
34
|
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAaD,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,0CAA0C,CAAC;AACxF,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AAEpF,wBAAgB,eAAe,IAAI,MAAM,CAoCxC;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,yBAAyB,UAAU,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAaD,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,gCAAgC,0CAA0C,CAAC;AACxF,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AAEpF,wBAAgB,eAAe,IAAI,MAAM,CAoCxC;AAGD,wBAAgB,iBAAiB,IAAI,MAAM,CAmD1C;AAED,wBAAgB,aAAa,IAAI,MAAM,CA0CtC;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAehE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQjE;AAED,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAqCtC"}
|
|
@@ -52,33 +52,6 @@ export function frozenPathsJson() {
|
|
|
52
52
|
},
|
|
53
53
|
}, null, 2) + "\n");
|
|
54
54
|
}
|
|
55
|
-
export function stackJson(params) {
|
|
56
|
-
const doc = "Project-level stack configuration consumed by slowcook (@slowcook-ai/stack-ts). " +
|
|
57
|
-
"Tells the harness how to discover and run tests. Only include suites that are " +
|
|
58
|
-
"actually runnable — slowcook refuses to record an incomplete manifest." +
|
|
59
|
-
(params.hasPlaywright
|
|
60
|
-
? " (Playwright detected in package.json; slowcook's playwright discovery is not yet " +
|
|
61
|
-
"implemented, so the e2e suite is intentionally omitted. Add it back post-upgrade.)"
|
|
62
|
-
: "");
|
|
63
|
-
return (JSON.stringify({
|
|
64
|
-
$schema: "./stack.schema.json",
|
|
65
|
-
$doc: doc,
|
|
66
|
-
language: "typescript",
|
|
67
|
-
package_manager: "npm",
|
|
68
|
-
test: {
|
|
69
|
-
backend: {
|
|
70
|
-
runner: "vitest",
|
|
71
|
-
run_command: "npx vitest run",
|
|
72
|
-
discover_command: "npx vitest list",
|
|
73
|
-
reporter_format: "vitest-list-lines",
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
lint: {
|
|
77
|
-
lint_command: "npm run lint",
|
|
78
|
-
typecheck_command: "npm run typecheck",
|
|
79
|
-
},
|
|
80
|
-
}, null, 2) + "\n");
|
|
81
|
-
}
|
|
82
55
|
export function contextMdTemplate() {
|
|
83
56
|
return `# Project context for slowcook agents
|
|
84
57
|
|
|
@@ -144,12 +117,23 @@ Consumer-side configuration for [slowcook](https://github.com/aminazar/slowcook)
|
|
|
144
117
|
| \`stack.json\` | How slowcook invokes tests / coverage / lint for this project |
|
|
145
118
|
| \`manifests/\` | Per-story test manifests; populated by \`slowcook manifest record\` |
|
|
146
119
|
|
|
120
|
+
## One-time setup per clone
|
|
121
|
+
|
|
122
|
+
After \`git clone\`, activate the slowcook pre-commit hook so the code map stays in lockstep with \`src/\` on every commit:
|
|
123
|
+
|
|
124
|
+
\`\`\`bash
|
|
125
|
+
git config core.hooksPath .githooks
|
|
126
|
+
\`\`\`
|
|
127
|
+
|
|
128
|
+
Without this, commits touching \`src/**/*.{ts,tsx}\` land with a stale \`.brewing/code-map.*\` and \`slowcook map check\` fails the PR. Bypass with \`git commit --no-verify\` if ever needed.
|
|
129
|
+
|
|
147
130
|
## Running slowcook locally
|
|
148
131
|
|
|
149
132
|
\`\`\`bash
|
|
150
133
|
npx --yes @slowcook-ai/cli@latest guard --base origin/main --head HEAD
|
|
151
134
|
npx --yes @slowcook-ai/cli@latest manifest record
|
|
152
135
|
npx --yes @slowcook-ai/cli@latest manifest verify
|
|
136
|
+
npx --yes @slowcook-ai/cli@latest map generate # refresh .brewing/code-map.*
|
|
153
137
|
\`\`\`
|
|
154
138
|
|
|
155
139
|
## When you legitimately need to modify a frozen path
|
|
@@ -163,208 +147,6 @@ npx --yes @slowcook-ai/cli@latest manifest verify
|
|
|
163
147
|
Deliberately slightly inconvenient. Frozen-path changes are rare events that deserve a reviewer's eyes.
|
|
164
148
|
`;
|
|
165
149
|
}
|
|
166
|
-
export function slowcookTestgenWorkflow(cliVersion) {
|
|
167
|
-
void cliVersion;
|
|
168
|
-
return `name: slowcook testgen
|
|
169
|
-
|
|
170
|
-
# Generates Vitest integration tests whenever a new spec lands on main
|
|
171
|
-
# (specs/story-*.yaml touched in the push). Idempotent — skips specs that
|
|
172
|
-
# already have tests. Output is a draft PR containing the new test files,
|
|
173
|
-
# per-story manifests, and (if the spec supersedes others) removal of
|
|
174
|
-
# the superseded stories' tests.
|
|
175
|
-
|
|
176
|
-
on:
|
|
177
|
-
push:
|
|
178
|
-
branches: [main]
|
|
179
|
-
paths:
|
|
180
|
-
- 'specs/story-*.yaml'
|
|
181
|
-
- 'specs/_index.yaml'
|
|
182
|
-
|
|
183
|
-
concurrency:
|
|
184
|
-
group: slowcook-testgen-main
|
|
185
|
-
cancel-in-progress: false
|
|
186
|
-
|
|
187
|
-
jobs:
|
|
188
|
-
testgen:
|
|
189
|
-
runs-on: ubuntu-latest
|
|
190
|
-
permissions:
|
|
191
|
-
contents: write
|
|
192
|
-
pull-requests: write
|
|
193
|
-
steps:
|
|
194
|
-
- uses: actions/checkout@v4
|
|
195
|
-
with:
|
|
196
|
-
fetch-depth: 0
|
|
197
|
-
|
|
198
|
-
${RESOLVE_PIN_STEP}
|
|
199
|
-
|
|
200
|
-
- name: Configure git identity for agent commits
|
|
201
|
-
run: |
|
|
202
|
-
git config user.name "slowcook-testgen[bot]"
|
|
203
|
-
git config user.email "slowcook-testgen@users.noreply.github.com"
|
|
204
|
-
|
|
205
|
-
- uses: actions/setup-node@v4
|
|
206
|
-
with:
|
|
207
|
-
node-version: 20
|
|
208
|
-
|
|
209
|
-
- name: Generate tests
|
|
210
|
-
env:
|
|
211
|
-
ANTHROPIC_API_KEY: \${{ secrets.ANTHROPIC_API_KEY }}
|
|
212
|
-
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}
|
|
213
|
-
SLOWCOOK_DEBUG: "1"
|
|
214
|
-
run: |
|
|
215
|
-
npx --yes "$SLOWCOOK_CLI" testgen --all
|
|
216
|
-
`;
|
|
217
|
-
}
|
|
218
|
-
export function slowcookSpecMergedWorkflow(cliVersion) {
|
|
219
|
-
void cliVersion;
|
|
220
|
-
return `name: slowcook — spec merged
|
|
221
|
-
|
|
222
|
-
# Transitions source-issue labels from \`spec-submitted\` → \`spec-ready\` when
|
|
223
|
-
# a spec PR merges. Detects spec PRs by the \`slowcook-spec\` label.
|
|
224
|
-
|
|
225
|
-
on:
|
|
226
|
-
pull_request:
|
|
227
|
-
types: [closed]
|
|
228
|
-
|
|
229
|
-
jobs:
|
|
230
|
-
transition:
|
|
231
|
-
if: >-
|
|
232
|
-
github.event.pull_request.merged == true &&
|
|
233
|
-
contains(github.event.pull_request.labels.*.name, 'slowcook-spec')
|
|
234
|
-
runs-on: ubuntu-latest
|
|
235
|
-
permissions:
|
|
236
|
-
issues: write
|
|
237
|
-
contents: read
|
|
238
|
-
pull-requests: read
|
|
239
|
-
steps:
|
|
240
|
-
- uses: actions/checkout@v4
|
|
241
|
-
with:
|
|
242
|
-
ref: \${{ github.event.pull_request.merge_commit_sha }}
|
|
243
|
-
|
|
244
|
-
${RESOLVE_PIN_STEP}
|
|
245
|
-
|
|
246
|
-
- uses: actions/setup-node@v4
|
|
247
|
-
with:
|
|
248
|
-
node-version: 20
|
|
249
|
-
|
|
250
|
-
- name: Transition labels
|
|
251
|
-
env:
|
|
252
|
-
GITHUB_TOKEN: \${{ secrets.GITHUB_TOKEN }}
|
|
253
|
-
run: |
|
|
254
|
-
npx --yes "$SLOWCOOK_CLI" on-spec-merged --pr \${{ github.event.pull_request.number }}
|
|
255
|
-
`;
|
|
256
|
-
}
|
|
257
|
-
export function slowcookBrewAutoWorkflow() {
|
|
258
|
-
return `name: slowcook brew — auto on tests merged
|
|
259
|
-
|
|
260
|
-
# Auto-triggers the \`slowcook-brew\` workflow when a tests PR (label
|
|
261
|
-
# \`slowcook-tests\`) merges to main. Extracts the story id(s) from the
|
|
262
|
-
# PR title and fires one brew run per story. Sonnet 4.6 default keeps
|
|
263
|
-
# cost around $0.05–$0.50 per story; \`slowcook-brew.yml\`'s concurrency
|
|
264
|
-
# rules serialize runs per story.
|
|
265
|
-
#
|
|
266
|
-
# Manual dispatch of \`slowcook-brew.yml\` remains available for explicit
|
|
267
|
-
# re-runs and for stories that need a non-default model/budget.
|
|
268
|
-
|
|
269
|
-
on:
|
|
270
|
-
pull_request:
|
|
271
|
-
types: [closed]
|
|
272
|
-
|
|
273
|
-
jobs:
|
|
274
|
-
trigger:
|
|
275
|
-
if: >-
|
|
276
|
-
github.event.pull_request.merged == true &&
|
|
277
|
-
contains(github.event.pull_request.labels.*.name, 'slowcook-tests')
|
|
278
|
-
runs-on: ubuntu-latest
|
|
279
|
-
permissions:
|
|
280
|
-
actions: write
|
|
281
|
-
contents: read
|
|
282
|
-
steps:
|
|
283
|
-
- name: Extract story ids from PR title
|
|
284
|
-
id: parse
|
|
285
|
-
env:
|
|
286
|
-
TITLE: \${{ github.event.pull_request.title }}
|
|
287
|
-
run: |
|
|
288
|
-
set -eu
|
|
289
|
-
IDS=$(printf '%s\\n' "$TITLE" | grep -oE 'story-[0-9]+' | sed 's/story-//' | sort -u | tr '\\n' ' ' || true)
|
|
290
|
-
if [ -z "$IDS" ]; then
|
|
291
|
-
echo "::notice::No story ids found in PR title '$TITLE' — skipping auto-brew."
|
|
292
|
-
fi
|
|
293
|
-
echo "story_ids=$IDS" >> "$GITHUB_OUTPUT"
|
|
294
|
-
|
|
295
|
-
- name: Dispatch brew per story
|
|
296
|
-
if: steps.parse.outputs.story_ids != ''
|
|
297
|
-
env:
|
|
298
|
-
GH_TOKEN: \${{ secrets.GITHUB_TOKEN }}
|
|
299
|
-
run: |
|
|
300
|
-
set -eu
|
|
301
|
-
for id in \${{ steps.parse.outputs.story_ids }}; do
|
|
302
|
-
echo "Dispatching slowcook-brew.yml for story-$id"
|
|
303
|
-
gh workflow run slowcook-brew.yml \\
|
|
304
|
-
--repo \${{ github.repository }} \\
|
|
305
|
-
-f story_id=$id \\
|
|
306
|
-
-f budget_usd=10 \\
|
|
307
|
-
-f max_iterations=10 \\
|
|
308
|
-
-f model=claude-sonnet-4-6
|
|
309
|
-
done
|
|
310
|
-
`;
|
|
311
|
-
}
|
|
312
|
-
export function slowcookWorkflow(cliVersion) {
|
|
313
|
-
void cliVersion;
|
|
314
|
-
return `name: slowcook
|
|
315
|
-
|
|
316
|
-
on:
|
|
317
|
-
pull_request:
|
|
318
|
-
types: [opened, synchronize, reopened, labeled, unlabeled]
|
|
319
|
-
|
|
320
|
-
concurrency:
|
|
321
|
-
group: slowcook-\${{ github.event.pull_request.number }}
|
|
322
|
-
cancel-in-progress: true
|
|
323
|
-
|
|
324
|
-
jobs:
|
|
325
|
-
check:
|
|
326
|
-
name: slowcook checks
|
|
327
|
-
runs-on: ubuntu-latest
|
|
328
|
-
steps:
|
|
329
|
-
- uses: actions/checkout@v4
|
|
330
|
-
with:
|
|
331
|
-
fetch-depth: 0
|
|
332
|
-
|
|
333
|
-
${RESOLVE_PIN_STEP}
|
|
334
|
-
|
|
335
|
-
- uses: actions/setup-node@v4
|
|
336
|
-
with:
|
|
337
|
-
node-version: 20
|
|
338
|
-
cache: npm
|
|
339
|
-
|
|
340
|
-
- name: Install consumer deps
|
|
341
|
-
# \`manifest verify\` shells out to the consumer's own test runner
|
|
342
|
-
# (e.g. \`npx vitest list\`) which loads the project's test config.
|
|
343
|
-
# Installing node_modules ensures that config can resolve its imports.
|
|
344
|
-
run: npm ci
|
|
345
|
-
|
|
346
|
-
- name: Guard — frozen paths
|
|
347
|
-
env:
|
|
348
|
-
HAS_OVERRIDE: \${{ contains(github.event.pull_request.labels.*.name, 'override-freeze') }}
|
|
349
|
-
run: |
|
|
350
|
-
set -eu
|
|
351
|
-
ARGS="--base origin/\${{ github.base_ref }} --head HEAD"
|
|
352
|
-
if [ "$HAS_OVERRIDE" = "true" ]; then
|
|
353
|
-
ARGS="$ARGS --override"
|
|
354
|
-
echo "::notice::'override-freeze' label present — guard runs in advisory mode."
|
|
355
|
-
fi
|
|
356
|
-
npx --yes "$SLOWCOOK_CLI" guard $ARGS
|
|
357
|
-
|
|
358
|
-
- name: Manifest — verify discoverable tests
|
|
359
|
-
run: npx --yes "$SLOWCOOK_CLI" manifest verify
|
|
360
|
-
|
|
361
|
-
- name: Code map — check it's up to date
|
|
362
|
-
# Fails if the committed .brewing/code-map.{json,md} differs from a
|
|
363
|
-
# fresh regeneration. Fix by running \`npx slowcook map generate\`
|
|
364
|
-
# locally, commit the result, and push.
|
|
365
|
-
run: npx --yes "$SLOWCOOK_CLI" map check
|
|
366
|
-
`;
|
|
367
|
-
}
|
|
368
150
|
export function codeownersSection(params) {
|
|
369
151
|
return `${SLOWCOOK_CODEOWNERS_MARKER_BEGIN}
|
|
370
152
|
# Paths frozen by slowcook. Agent-authored PRs cannot modify them;
|
|
@@ -393,4 +175,52 @@ ${codeownersSection(params)}`;
|
|
|
393
175
|
export function gitkeep() {
|
|
394
176
|
return "";
|
|
395
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Committable git pre-commit hook that forces `.brewing/code-map.*` to
|
|
180
|
+
* stay in lockstep with `src/` on every commit. Without this, contributors
|
|
181
|
+
* (especially LLM agents) hit the stale-map CI failure repeatedly because
|
|
182
|
+
* the `slowcook map check` gate only catches staleness AFTER the commit.
|
|
183
|
+
*
|
|
184
|
+
* Activation is a one-time per-clone `git config core.hooksPath .githooks`
|
|
185
|
+
* — we can't set it from init because it's a local-clone concern. The
|
|
186
|
+
* generated `.brewing/README.md` documents the one-liner.
|
|
187
|
+
*/
|
|
188
|
+
export function preCommitHook() {
|
|
189
|
+
return `#!/usr/bin/env bash
|
|
190
|
+
# slowcook pre-commit hook
|
|
191
|
+
#
|
|
192
|
+
# Keeps .brewing/code-map.{json,md} in lockstep with src/ so you never
|
|
193
|
+
# push a PR that fails \`slowcook map check\` on something you already
|
|
194
|
+
# had in your working tree.
|
|
195
|
+
#
|
|
196
|
+
# Activate once per clone:
|
|
197
|
+
# git config core.hooksPath .githooks
|
|
198
|
+
#
|
|
199
|
+
# Bypass temporarily: git commit --no-verify
|
|
200
|
+
|
|
201
|
+
set -eu
|
|
202
|
+
|
|
203
|
+
PIN_FILE=".brewing/slowcook-cli-version"
|
|
204
|
+
if [ ! -f "$PIN_FILE" ]; then
|
|
205
|
+
echo "slowcook pre-commit: missing $PIN_FILE, skipping map regen" >&2
|
|
206
|
+
exit 0
|
|
207
|
+
fi
|
|
208
|
+
CLI_PIN="$(tr -d '[:space:]' < "$PIN_FILE")"
|
|
209
|
+
|
|
210
|
+
STAGED_SRC=$(git diff --cached --name-only --diff-filter=ACMR | grep -E '^src/.*\\.(ts|tsx)$' || true)
|
|
211
|
+
if [ -z "$STAGED_SRC" ]; then
|
|
212
|
+
exit 0
|
|
213
|
+
fi
|
|
214
|
+
|
|
215
|
+
echo "slowcook pre-commit: regenerating code map (staged src/ changes detected)" >&2
|
|
216
|
+
if ! npx --yes "@slowcook-ai/cli@$CLI_PIN" map generate >/dev/null 2>&1; then
|
|
217
|
+
echo "slowcook pre-commit: map generate FAILED — commit aborted. Run 'npx slowcook map generate' manually to see the error." >&2
|
|
218
|
+
exit 1
|
|
219
|
+
fi
|
|
220
|
+
|
|
221
|
+
git add .brewing/code-map.json .brewing/code-map.md
|
|
222
|
+
|
|
223
|
+
exit 0
|
|
224
|
+
`;
|
|
225
|
+
}
|
|
396
226
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;;;0HAGiG,CAAC;AAS3H,MAAM,CAAC,MAAM,gCAAgC,GAAG,uCAAuC,CAAC;AACxF,MAAM,CAAC,MAAM,8BAA8B,GAAG,qCAAqC,CAAC;AAEpF,MAAM,UAAU,eAAe;IAC7B,OAAO,CACL,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,4BAA4B;QACrC,IAAI,EACF,qFAAqF;YACrF,6FAA6F;YAC7F,iEAAiE;QACnE,WAAW,EAAE;YACX,QAAQ;YACR,iBAAiB;YACjB,gBAAgB;YAChB,qBAAqB;SACtB;QACD,KAAK,EAAE;YACL,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,4BAA4B;YAC5B,qBAAqB;YACrB,qBAAqB;YACrB,gCAAgC;YAChC,4CAA4C;YAC5C,wCAAwC;SACzC;QACD,OAAO,EAAE;YACP,cAAc,EAAE;gBACd,gBAAgB,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC;aACzD;SACF;KACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CACT,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,+BAA+B,CAAC;AAEzE,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,OAAO,UAAU,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG;;;0HAGiG,CAAC;AAS3H,MAAM,CAAC,MAAM,gCAAgC,GAAG,uCAAuC,CAAC;AACxF,MAAM,CAAC,MAAM,8BAA8B,GAAG,qCAAqC,CAAC;AAEpF,MAAM,UAAU,eAAe;IAC7B,OAAO,CACL,IAAI,CAAC,SAAS,CACZ;QACE,OAAO,EAAE,4BAA4B;QACrC,IAAI,EACF,qFAAqF;YACrF,6FAA6F;YAC7F,iEAAiE;QACnE,WAAW,EAAE;YACX,QAAQ;YACR,iBAAiB;YACjB,gBAAgB;YAChB,qBAAqB;SACtB;QACD,KAAK,EAAE;YACL,kBAAkB;YAClB,mBAAmB;YACnB,kBAAkB;YAClB,4BAA4B;YAC5B,qBAAqB;YACrB,qBAAqB;YACrB,gCAAgC;YAChC,4CAA4C;YAC5C,wCAAwC;SACzC;QACD,OAAO,EAAE;YACP,cAAc,EAAE;gBACd,gBAAgB,EAAE,CAAC,cAAc,EAAE,oBAAoB,CAAC;aACzD;SACF;KACF,EACD,IAAI,EACJ,CAAC,CACF,GAAG,IAAI,CACT,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCR,CAAC;AACF,CAAC;AAGD,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,OAAO,GAAG,gCAAgC;;;;kCAIV,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;kCACZ,MAAM,CAAC,KAAK;8CACA,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;8CACZ,MAAM,CAAC,KAAK;EACxD,8BAA8B;CAC/B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAsB;IACvD,qEAAqE;IACrE,OAAO;;;;;EAKP,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCR,CAAC;AACF,CAAC"}
|
|
@@ -43,6 +43,39 @@ export type TestgenOutcome = {
|
|
|
43
43
|
*/
|
|
44
44
|
export declare function runTestgen(ctx: TestgenContext): Promise<TestgenOutcome>;
|
|
45
45
|
export declare function buildProjectContext(repoRoot: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Phase B2 (0.7.0) testgen output: one test file, zero-or-more route stubs,
|
|
48
|
+
* zero-or-more mock helpers. The LLM emits these as XML-tagged blocks
|
|
49
|
+
* (see TESTGEN_SYSTEM for the exact format); slowcook parses, de-duplicates
|
|
50
|
+
* against existing files, and writes only what's new.
|
|
51
|
+
*/
|
|
52
|
+
export interface TestgenBundle {
|
|
53
|
+
testContent: string;
|
|
54
|
+
stubs: Array<{
|
|
55
|
+
path: string;
|
|
56
|
+
contents: string;
|
|
57
|
+
}>;
|
|
58
|
+
helpers: Array<{
|
|
59
|
+
path: string;
|
|
60
|
+
contents: string;
|
|
61
|
+
}>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse XML-tagged multi-artifact output into a TestgenBundle.
|
|
65
|
+
*
|
|
66
|
+
* Accepted shape (from the prompt):
|
|
67
|
+
* <test_file>...</test_file>
|
|
68
|
+
* <stub path="src/app/api/foo/route.ts">...</stub> (zero or more)
|
|
69
|
+
* <helper path="tests/helpers/mocks/bar.ts">...</helper> (zero or more)
|
|
70
|
+
*
|
|
71
|
+
* Tolerant of code-fenced output: if the LLM wraps the whole thing in
|
|
72
|
+
* ```, we strip it. If a block's contents are themselves code-fenced,
|
|
73
|
+
* we strip those too — tier-1 test / helper / stub files are raw TS.
|
|
74
|
+
*
|
|
75
|
+
* Throws if `<test_file>` is missing or empty — that's the one mandatory
|
|
76
|
+
* artifact.
|
|
77
|
+
*/
|
|
78
|
+
export declare function parseTestgenBundle(raw: string, storyId: string): TestgenBundle;
|
|
46
79
|
/**
|
|
47
80
|
* Tier-1 conformance lint. Run on every generated test file before commit.
|
|
48
81
|
* Catches patterns the prompt forbids — inline `vi.mock`, `fetch(...)`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/agent.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAQ,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AASlD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAClD,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,GAAG,EAAE,OAAO,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CA8I7E;AAkED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8F5D;AAsCD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAqBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,CAiC9E;AASD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AA6DD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAepF;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BjF"}
|