@slowcook-ai/cli 0.19.2 → 0.19.4
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 +17 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/check/index.d.ts +2 -0
- package/dist/commands/check/index.d.ts.map +1 -1
- package/dist/commands/check/index.js +9 -0
- package/dist/commands/check/index.js.map +1 -1
- package/dist/commands/check/spec-validate.d.ts +46 -0
- package/dist/commands/check/spec-validate.d.ts.map +1 -0
- package/dist/commands/check/spec-validate.js +201 -0
- package/dist/commands/check/spec-validate.js.map +1 -0
- package/dist/commands/cost-log.d.ts +69 -0
- package/dist/commands/cost-log.d.ts.map +1 -0
- package/dist/commands/cost-log.js +206 -0
- package/dist/commands/cost-log.js.map +1 -0
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +18 -2
- 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 +13 -1
- package/dist/commands/init/plan.js.map +1 -1
- package/dist/commands/init/templates.d.ts +42 -0
- package/dist/commands/init/templates.d.ts.map +1 -1
- package/dist/commands/init/templates.js +206 -0
- package/dist/commands/init/templates.js.map +1 -1
- package/dist/commands/on-brew-merged/index.d.ts.map +1 -1
- package/dist/commands/on-brew-merged/index.js +61 -0
- package/dist/commands/on-brew-merged/index.js.map +1 -1
- package/dist/commands/upsert-agent-docs.d.ts.map +1 -1
- package/dist/commands/upsert-agent-docs.js +22 -0
- package/dist/commands/upsert-agent-docs.js.map +1 -1
- package/package.json +6 -6
package/dist/cli.js
CHANGED
|
@@ -31,6 +31,7 @@ import { fixtures } from "./commands/fixtures/index.js";
|
|
|
31
31
|
import { refreshKnowledge } from "./commands/refresh-knowledge.js";
|
|
32
32
|
import { upsertAgentDocs } from "./commands/upsert-agent-docs.js";
|
|
33
33
|
import { knowledgeAdd } from "./commands/knowledge-add.js";
|
|
34
|
+
import { costLog } from "./commands/cost-log.js";
|
|
34
35
|
import { evalCmd } from "./commands/eval/index.js";
|
|
35
36
|
import { devEnv } from "./commands/dev-env/index.js";
|
|
36
37
|
import { budget } from "./commands/budget/index.js";
|
|
@@ -73,6 +74,7 @@ Usage:
|
|
|
73
74
|
slowcook port --story <id> [--cwd <path>] [--dry-run] [--force]
|
|
74
75
|
slowcook preview (deploy|teardown) --pr <number> [--ssh-key <path>] [--cwd <path>]
|
|
75
76
|
slowcook check mock-isolation [--cwd <path>]
|
|
77
|
+
slowcook check spec [file...] [--cwd <path>]
|
|
76
78
|
slowcook run-mock <story-id> [--no-poll] [--poll-seconds <n>] [--branch <ref>]
|
|
77
79
|
slowcook dispatch <step> [inputs...]
|
|
78
80
|
slowcook fixtures check [--max-age-days <n>] [--story <id>]
|
|
@@ -107,7 +109,7 @@ Commands available in ${VERSION}:
|
|
|
107
109
|
plate (0.15-α.3) Mockup amendment agent. Triggered by /plate PR comments on slowcook-mockup PRs; force-pushes amendments.
|
|
108
110
|
port (0.16-α.8) Deterministic mock/ → src/ copy. Walks mock/src/, applies useScenarioFixture → useDataDomain rewrite, prepends provenance header. Pre-brew CI step.
|
|
109
111
|
preview (0.16-α.5) SSH preview deploy. \`deploy --pr N\`: build + run the mock app on the consumer's box; post URL to PR. \`teardown --pr N\`: stop + remove.
|
|
110
|
-
check (0.16-α.13) Static structural checks. \`check mock-isolation\` verifies every import in mock/ stays inside mock/ (catches vibe-prompt slippage that breaks the mock-vs-prod separation rule).
|
|
112
|
+
check (0.16-α.13) Static structural checks. \`check mock-isolation\` verifies every import in mock/ stays inside mock/ (catches vibe-prompt slippage that breaks the mock-vs-prod separation rule). \`check spec\` (0.19.4-α) re-runs spec content validators on a PR's spec files — closes the amendment-bypass gap where refine's in-process lint never re-fires.
|
|
111
113
|
recon (0.17.6+) Pre-brew structural divergence check. Compares story tests against mock + src/, surfaces missing components / testid gaps / brownfield rename hazards. Runs in slowcook-brew-auto.yml before brew dispatch.
|
|
112
114
|
run-mock (0.16-α.17) One-command mock launch + auto-pull. \`run-mock <story>\`: checkout mockup branch, npm install in mock/, run next dev with overlay env vars, poll origin every 15s + git pull --ff-only on plate amendments.
|
|
113
115
|
dispatch Trigger a slowcook GitHub Actions workflow remotely (brew / testgen / refine).
|
|
@@ -151,6 +153,20 @@ async function main() {
|
|
|
151
153
|
console.error(`unknown knowledge subcommand: ${sub ?? "(none)"}. try \`slowcook knowledge add --help\``);
|
|
152
154
|
process.exit(64);
|
|
153
155
|
}
|
|
156
|
+
case "cost": {
|
|
157
|
+
// `slowcook cost log --story <id> --usd <n> --agent <name> [...]`
|
|
158
|
+
// 0.19.x+ — explicit logging primitive for non-Actions agents
|
|
159
|
+
// (Claude Code sessions, Managed Agents, etc.) so their LLM spend
|
|
160
|
+
// lands in the canonical cost sidecar alongside in-process agent
|
|
161
|
+
// entries. See packages/cli/src/commands/cost-log.ts.
|
|
162
|
+
const sub = args[1];
|
|
163
|
+
if (sub === "log") {
|
|
164
|
+
await costLog(args.slice(2));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
console.error(`unknown cost subcommand: ${sub ?? "(none)"}. try \`slowcook cost log --help\``);
|
|
168
|
+
process.exit(64);
|
|
169
|
+
}
|
|
154
170
|
case "on-spec-merged":
|
|
155
171
|
await onSpecMerged(args.slice(1));
|
|
156
172
|
return;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Subcommands:
|
|
7
7
|
* - `mock-isolation` — every mock/ import resolves inside mock/
|
|
8
|
+
* - `spec` — re-run spec content validators on PRs touching
|
|
9
|
+
* specs/story-*.yaml (0.19.4-α / sc#146 #2)
|
|
8
10
|
*
|
|
9
11
|
* More to come (e.g. `mock-runtime-exports` to whitelist hooks vibe
|
|
10
12
|
* may import; `port-provenance` to verify src/ files copied via port
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/check/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB9E"}
|
|
@@ -5,17 +5,22 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Subcommands:
|
|
7
7
|
* - `mock-isolation` — every mock/ import resolves inside mock/
|
|
8
|
+
* - `spec` — re-run spec content validators on PRs touching
|
|
9
|
+
* specs/story-*.yaml (0.19.4-α / sc#146 #2)
|
|
8
10
|
*
|
|
9
11
|
* More to come (e.g. `mock-runtime-exports` to whitelist hooks vibe
|
|
10
12
|
* may import; `port-provenance` to verify src/ files copied via port
|
|
11
13
|
* carry the marker).
|
|
12
14
|
*/
|
|
13
15
|
import { runMockIsolationCheck } from "./mock-isolation.js";
|
|
16
|
+
import { runSpecValidateCli } from "./spec-validate.js";
|
|
14
17
|
export async function check(argv, _cliVersion) {
|
|
15
18
|
const sub = argv[0];
|
|
16
19
|
switch (sub) {
|
|
17
20
|
case "mock-isolation":
|
|
18
21
|
return runMockIsolationCli(argv.slice(1));
|
|
22
|
+
case "spec":
|
|
23
|
+
return runSpecValidateCli(argv.slice(1));
|
|
19
24
|
case undefined:
|
|
20
25
|
case "help":
|
|
21
26
|
case "--help":
|
|
@@ -34,11 +39,15 @@ slowcook check — static structural checks (0.16-α.13)
|
|
|
34
39
|
|
|
35
40
|
Usage:
|
|
36
41
|
slowcook check mock-isolation [--cwd <path>]
|
|
42
|
+
slowcook check spec [file...] [--cwd <path>]
|
|
37
43
|
|
|
38
44
|
Subcommands:
|
|
39
45
|
mock-isolation Verify every import in mock/ stays inside mock/.
|
|
40
46
|
Catches vibe-prompt slippage where a mock component
|
|
41
47
|
tries to import from the consumer's production src/.
|
|
48
|
+
spec Re-run spec content validators on one or more spec
|
|
49
|
+
files. Catches drift on amendment commits that
|
|
50
|
+
bypass refine's in-process lint.
|
|
42
51
|
|
|
43
52
|
Exit codes:
|
|
44
53
|
0 no violations
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/check/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/check/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAc,EAAE,WAAmB;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,gBAAgB;YACnB,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC,CAAC;YACvC,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,wDAAwD,GAAG,qBAAqB,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,kCAAkC,MAAM,CAAC,YAAY,iBAAiB,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CACX,kCAAkC,MAAM,CAAC,UAAU,CAAC,MAAM,wBAAwB,MAAM,CAAC,YAAY,aAAa,CACnH,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,KAAK,CACX,yEAAyE;QACvE,8DAA8D,CACjE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook check spec [file...]` — 0.19.4-α (sc#146 finding 2).
|
|
3
|
+
*
|
|
4
|
+
* Re-runs the spec content validators (the same ones refine/agent.ts
|
|
5
|
+
* calls in-process at emit time) against one or more on-disk spec
|
|
6
|
+
* files. Designed for CI to catch drift on PRs that AMEND a spec
|
|
7
|
+
* post-merge — the in-process lint never fires on amendments because
|
|
8
|
+
* those go straight to git, bypassing refine.
|
|
9
|
+
*
|
|
10
|
+
* Three validators wrap one CLI:
|
|
11
|
+
* - validateAndRepairSpec — token truncation / shape repair
|
|
12
|
+
* - validateEntityFieldReferences — `entity.field` ↔ auto/backend-entities.md
|
|
13
|
+
* - validateComponentReuseShape — components_to_reuse mock mentions spec fields
|
|
14
|
+
*
|
|
15
|
+
* If `auto/backend-entities.md` is absent the entity-field check is
|
|
16
|
+
* skipped quietly (its `parseEntityCatalog` returns empty). Same for
|
|
17
|
+
* the mock reader when the mock/ tree is missing.
|
|
18
|
+
*
|
|
19
|
+
* Exit codes:
|
|
20
|
+
* 0 — no findings across all files
|
|
21
|
+
* 1 — at least one finding (printed)
|
|
22
|
+
* 2 — invocation error (unreadable file, parse failure, etc.)
|
|
23
|
+
*/
|
|
24
|
+
import { type SpecValidationFinding } from "../refine/spec-validate.js";
|
|
25
|
+
export interface SpecCheckPerFileResult {
|
|
26
|
+
file: string;
|
|
27
|
+
storyId: string | null;
|
|
28
|
+
findings: SpecValidationFinding[];
|
|
29
|
+
/** Set when the file couldn't be parsed at all (Zod / YAML failure). */
|
|
30
|
+
parseError?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface SpecCheckResult {
|
|
33
|
+
perFile: SpecCheckPerFileResult[];
|
|
34
|
+
filesChecked: number;
|
|
35
|
+
totalFindings: number;
|
|
36
|
+
hasParseErrors: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Run the check. If `specPaths` is given, validates exactly those
|
|
40
|
+
* files (used by CI which passes the PR's changed-files list). If
|
|
41
|
+
* empty/undefined, scans `specs/story-*.yaml`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function runSpecValidateCheck(repoRoot: string, specPaths?: string[]): SpecCheckResult;
|
|
44
|
+
/** CLI wrapper. Wraps `runSpecValidateCheck`, prints, exits. */
|
|
45
|
+
export declare function runSpecValidateCli(argv: string[]): void;
|
|
46
|
+
//# sourceMappingURL=spec-validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-validate.d.ts","sourceRoot":"","sources":["../../../src/commands/check/spec-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,eAAe,CAiFjB;AA4BD,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAgDvD"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook check spec [file...]` — 0.19.4-α (sc#146 finding 2).
|
|
3
|
+
*
|
|
4
|
+
* Re-runs the spec content validators (the same ones refine/agent.ts
|
|
5
|
+
* calls in-process at emit time) against one or more on-disk spec
|
|
6
|
+
* files. Designed for CI to catch drift on PRs that AMEND a spec
|
|
7
|
+
* post-merge — the in-process lint never fires on amendments because
|
|
8
|
+
* those go straight to git, bypassing refine.
|
|
9
|
+
*
|
|
10
|
+
* Three validators wrap one CLI:
|
|
11
|
+
* - validateAndRepairSpec — token truncation / shape repair
|
|
12
|
+
* - validateEntityFieldReferences — `entity.field` ↔ auto/backend-entities.md
|
|
13
|
+
* - validateComponentReuseShape — components_to_reuse mock mentions spec fields
|
|
14
|
+
*
|
|
15
|
+
* If `auto/backend-entities.md` is absent the entity-field check is
|
|
16
|
+
* skipped quietly (its `parseEntityCatalog` returns empty). Same for
|
|
17
|
+
* the mock reader when the mock/ tree is missing.
|
|
18
|
+
*
|
|
19
|
+
* Exit codes:
|
|
20
|
+
* 0 — no findings across all files
|
|
21
|
+
* 1 — at least one finding (printed)
|
|
22
|
+
* 2 — invocation error (unreadable file, parse failure, etc.)
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
25
|
+
import { join, resolve, relative, basename } from "node:path";
|
|
26
|
+
import YAML from "yaml";
|
|
27
|
+
import { schemas } from "../refine/spec-yaml.js";
|
|
28
|
+
import { validateAndRepairSpec, validateEntityFieldReferences, validateComponentReuseShape, } from "../refine/spec-validate.js";
|
|
29
|
+
/**
|
|
30
|
+
* Run the check. If `specPaths` is given, validates exactly those
|
|
31
|
+
* files (used by CI which passes the PR's changed-files list). If
|
|
32
|
+
* empty/undefined, scans `specs/story-*.yaml`.
|
|
33
|
+
*/
|
|
34
|
+
export function runSpecValidateCheck(repoRoot, specPaths) {
|
|
35
|
+
const targets = specPaths && specPaths.length > 0
|
|
36
|
+
? specPaths.map((p) => (resolve(repoRoot, p)))
|
|
37
|
+
: discoverSpecs(repoRoot);
|
|
38
|
+
const entityCatalogPath = join(repoRoot, ".brewing", "repo-knowledge", "auto", "backend-entities.md");
|
|
39
|
+
const entityCatalogMd = existsSync(entityCatalogPath)
|
|
40
|
+
? readFileSync(entityCatalogPath, "utf8")
|
|
41
|
+
: "";
|
|
42
|
+
const mockReader = makeMockReader(repoRoot);
|
|
43
|
+
const perFile = [];
|
|
44
|
+
let totalFindings = 0;
|
|
45
|
+
let hasParseErrors = false;
|
|
46
|
+
for (const abs of targets) {
|
|
47
|
+
const rel = relative(repoRoot, abs);
|
|
48
|
+
const storyId = extractStoryId(rel);
|
|
49
|
+
if (!existsSync(abs)) {
|
|
50
|
+
perFile.push({
|
|
51
|
+
file: rel,
|
|
52
|
+
storyId,
|
|
53
|
+
findings: [],
|
|
54
|
+
parseError: "file not found",
|
|
55
|
+
});
|
|
56
|
+
hasParseErrors = true;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
let spec;
|
|
60
|
+
try {
|
|
61
|
+
const raw = YAML.parse(readFileSync(abs, "utf8"));
|
|
62
|
+
const parsed = schemas.Spec.safeParse(raw);
|
|
63
|
+
if (!parsed.success) {
|
|
64
|
+
perFile.push({
|
|
65
|
+
file: rel,
|
|
66
|
+
storyId,
|
|
67
|
+
findings: [],
|
|
68
|
+
parseError: parsed.error.issues
|
|
69
|
+
.map((i) => `${String(i.path.join("."))}: ${i.message}`)
|
|
70
|
+
.join("; "),
|
|
71
|
+
});
|
|
72
|
+
hasParseErrors = true;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
spec = parsed.data;
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
perFile.push({
|
|
79
|
+
file: rel,
|
|
80
|
+
storyId,
|
|
81
|
+
findings: [],
|
|
82
|
+
parseError: err instanceof Error ? err.message : String(err),
|
|
83
|
+
});
|
|
84
|
+
hasParseErrors = true;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const findings = [];
|
|
88
|
+
findings.push(...validateAndRepairSpec(spec));
|
|
89
|
+
if (entityCatalogMd) {
|
|
90
|
+
findings.push(...validateEntityFieldReferences(spec, entityCatalogMd));
|
|
91
|
+
}
|
|
92
|
+
findings.push(...validateComponentReuseShape(spec, mockReader));
|
|
93
|
+
totalFindings += findings.length;
|
|
94
|
+
perFile.push({ file: rel, storyId, findings });
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
perFile,
|
|
98
|
+
filesChecked: targets.length,
|
|
99
|
+
totalFindings,
|
|
100
|
+
hasParseErrors,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function discoverSpecs(repoRoot) {
|
|
104
|
+
const specsDir = join(repoRoot, "specs");
|
|
105
|
+
if (!existsSync(specsDir))
|
|
106
|
+
return [];
|
|
107
|
+
return readdirSync(specsDir)
|
|
108
|
+
.filter((f) => f.startsWith("story-") && f.endsWith(".yaml"))
|
|
109
|
+
.map((f) => join(specsDir, f));
|
|
110
|
+
}
|
|
111
|
+
function extractStoryId(relPath) {
|
|
112
|
+
const m = basename(relPath).match(/^story-(.+)\.yaml$/);
|
|
113
|
+
return m ? m[1] : null;
|
|
114
|
+
}
|
|
115
|
+
function makeMockReader(repoRoot) {
|
|
116
|
+
return (path) => {
|
|
117
|
+
const abs = resolve(repoRoot, path);
|
|
118
|
+
if (!existsSync(abs))
|
|
119
|
+
return null;
|
|
120
|
+
try {
|
|
121
|
+
if (statSync(abs).isFile())
|
|
122
|
+
return readFileSync(abs, "utf8");
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
/** CLI wrapper. Wraps `runSpecValidateCheck`, prints, exits. */
|
|
131
|
+
export function runSpecValidateCli(argv) {
|
|
132
|
+
let cwd = process.cwd();
|
|
133
|
+
const files = [];
|
|
134
|
+
for (let i = 0; i < argv.length; i++) {
|
|
135
|
+
const a = argv[i];
|
|
136
|
+
if (a === "--cwd" && argv[i + 1]) {
|
|
137
|
+
cwd = argv[i + 1];
|
|
138
|
+
i++;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (a === "--help" || a === "-h") {
|
|
142
|
+
printHelp();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
files.push(a);
|
|
146
|
+
}
|
|
147
|
+
const result = runSpecValidateCheck(cwd, files);
|
|
148
|
+
if (result.filesChecked === 0) {
|
|
149
|
+
console.log(`slowcook check spec: no spec files matched (expected specs/story-*.yaml or explicit paths).`);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
let exitCode = 0;
|
|
153
|
+
for (const f of result.perFile) {
|
|
154
|
+
if (f.parseError) {
|
|
155
|
+
console.error(`FAIL ${f.file} — parse error: ${f.parseError}`);
|
|
156
|
+
exitCode = 2;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (f.findings.length === 0) {
|
|
160
|
+
console.log(`PASS ${f.file}`);
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
console.error(`FAIL ${f.file} — ${f.findings.length} finding(s):`);
|
|
164
|
+
for (const finding of f.findings) {
|
|
165
|
+
console.error(` [${finding.action}] ${finding.path} — ${finding.message}`);
|
|
166
|
+
}
|
|
167
|
+
if (exitCode === 0)
|
|
168
|
+
exitCode = 1;
|
|
169
|
+
}
|
|
170
|
+
console.error("");
|
|
171
|
+
console.error(`slowcook check spec: ${result.totalFindings} finding(s) across ${result.filesChecked} file(s).`);
|
|
172
|
+
if (exitCode !== 0)
|
|
173
|
+
process.exit(exitCode);
|
|
174
|
+
}
|
|
175
|
+
function printHelp() {
|
|
176
|
+
console.log(`
|
|
177
|
+
slowcook check spec — re-run spec content validators on PRs that touch specs/story-*.yaml
|
|
178
|
+
|
|
179
|
+
Usage:
|
|
180
|
+
slowcook check spec [file...] [--cwd <path>]
|
|
181
|
+
|
|
182
|
+
Files default to specs/story-*.yaml when none are passed. CI workflows
|
|
183
|
+
should pass the PR's changed-files list so the check stays narrow.
|
|
184
|
+
|
|
185
|
+
Validators run:
|
|
186
|
+
- validateAndRepairSpec — token truncation / shape repair
|
|
187
|
+
- validateEntityFieldReferences — entity.field references vs
|
|
188
|
+
.brewing/repo-knowledge/auto/backend-entities.md
|
|
189
|
+
- validateComponentReuseShape — proposals.ui_layout.components_to_reuse
|
|
190
|
+
mock-vs-spec field overlap
|
|
191
|
+
|
|
192
|
+
Auto-skips checks whose context is missing (no entity catalog → skip
|
|
193
|
+
entity-field check; no mock/ tree → skip reuse-shape check).
|
|
194
|
+
|
|
195
|
+
Exit codes:
|
|
196
|
+
0 no findings
|
|
197
|
+
1 at least one finding
|
|
198
|
+
2 invocation error (parse failure, missing file)
|
|
199
|
+
`);
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=spec-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-validate.js","sourceRoot":"","sources":["../../../src/commands/check/spec-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook cost log` — 0.19.x+
|
|
3
|
+
*
|
|
4
|
+
* Append a cost entry for a non-Actions agent run into the canonical
|
|
5
|
+
* cost sidecar (`specs/story-<id>.cost.jsonl`).
|
|
6
|
+
*
|
|
7
|
+
* Why this exists: slowcook agents that run in-process emit cost
|
|
8
|
+
* markers + `appendCostEntry` calls automatically. But long-lived
|
|
9
|
+
* agents OUTSIDE slowcook's process (Claude Code session in a
|
|
10
|
+
* consumer repo, Managed Agents, Cursor mimicking the pipeline)
|
|
11
|
+
* generate no cost entries — their LLM spend is invisible to the
|
|
12
|
+
* cost-store + the workflow rollup. That makes "what does the
|
|
13
|
+
* methodology cost end-to-end" unanswerable, which matters for
|
|
14
|
+
* 0.20's AI-native-org thesis.
|
|
15
|
+
*
|
|
16
|
+
* This subcommand is the explicit logging primitive for those agents.
|
|
17
|
+
* Usage:
|
|
18
|
+
*
|
|
19
|
+
* slowcook cost log \\
|
|
20
|
+
* --story 009 \\
|
|
21
|
+
* --usd 0.42 \\
|
|
22
|
+
* --agent local-claude-pipeline \\
|
|
23
|
+
* [--model claude-opus-4-7] \\
|
|
24
|
+
* [--source-url https://github.com/.../pull/698] \\
|
|
25
|
+
* [--round brew-iteration-3] \\
|
|
26
|
+
* [--tokens-in 12000] [--tokens-out 1500] \\
|
|
27
|
+
* [--cache-read 85000] [--cache-create 12000] \\
|
|
28
|
+
* [--apply-to-spec]
|
|
29
|
+
*
|
|
30
|
+
* `--apply-to-spec` recomputes spec.cost.total_usd from the full
|
|
31
|
+
* sidecar after appending (same call slowcook agents make in-process).
|
|
32
|
+
*
|
|
33
|
+
* The convention: each session's log a single entry summarising the
|
|
34
|
+
* whole session (`--usd $TOTAL`), or one entry per logical round
|
|
35
|
+
* (refine-mimic, testgen-mimic, brew-mimic, …). Either works; the
|
|
36
|
+
* aggregator just sums.
|
|
37
|
+
*/
|
|
38
|
+
import { type CostEntry } from "../cost-store.js";
|
|
39
|
+
export interface CostLogArgs {
|
|
40
|
+
repoRoot: string;
|
|
41
|
+
storyId: string;
|
|
42
|
+
entry: CostEntry;
|
|
43
|
+
applyToSpec: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface CostLogResult {
|
|
46
|
+
sidecarPath: string;
|
|
47
|
+
appendedEntry: CostEntry;
|
|
48
|
+
appliedToSpec: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare function costLogCore(args: CostLogArgs): CostLogResult;
|
|
51
|
+
interface ParsedArgs {
|
|
52
|
+
storyId?: string;
|
|
53
|
+
usd?: number;
|
|
54
|
+
agent?: string;
|
|
55
|
+
model?: string;
|
|
56
|
+
sourceUrl?: string;
|
|
57
|
+
round?: string;
|
|
58
|
+
tokensIn?: number;
|
|
59
|
+
tokensOut?: number;
|
|
60
|
+
cacheRead?: number;
|
|
61
|
+
cacheCreate?: number;
|
|
62
|
+
applyToSpec: boolean;
|
|
63
|
+
help: boolean;
|
|
64
|
+
}
|
|
65
|
+
/** Pure arg parser — exported for testing. */
|
|
66
|
+
export declare function parseCostLogArgs(argv: string[]): ParsedArgs;
|
|
67
|
+
export declare function costLog(argv: string[]): Promise<void>;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=cost-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-log.d.ts","sourceRoot":"","sources":["../../src/commands/cost-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,SAAS,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa,CAY5D;AAED,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,8CAA8C;AAC9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA8C3D;AA+BD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC3D"}
|