@slowcook-ai/cli 0.4.3 → 0.4.5

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.
Files changed (37) hide show
  1. package/dist/cli.js +19 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/init/plan.d.ts.map +1 -1
  4. package/dist/commands/init/plan.js +4 -1
  5. package/dist/commands/init/plan.js.map +1 -1
  6. package/dist/commands/init/templates.d.ts +2 -1
  7. package/dist/commands/init/templates.d.ts.map +1 -1
  8. package/dist/commands/init/templates.js +61 -1
  9. package/dist/commands/init/templates.js.map +1 -1
  10. package/dist/commands/refine/agent.d.ts.map +1 -1
  11. package/dist/commands/refine/agent.js +53 -18
  12. package/dist/commands/refine/agent.js.map +1 -1
  13. package/dist/commands/refine/context.d.ts +17 -0
  14. package/dist/commands/refine/context.d.ts.map +1 -0
  15. package/dist/commands/refine/context.js +69 -0
  16. package/dist/commands/refine/context.js.map +1 -0
  17. package/dist/commands/refine/prompts.d.ts +1 -1
  18. package/dist/commands/refine/prompts.d.ts.map +1 -1
  19. package/dist/commands/refine/prompts.js +8 -1
  20. package/dist/commands/refine/prompts.js.map +1 -1
  21. package/dist/commands/refine/spec-yaml.d.ts +13 -3
  22. package/dist/commands/refine/spec-yaml.d.ts.map +1 -1
  23. package/dist/commands/refine/spec-yaml.js +31 -5
  24. package/dist/commands/refine/spec-yaml.js.map +1 -1
  25. package/dist/commands/testgen/agent.d.ts +55 -0
  26. package/dist/commands/testgen/agent.d.ts.map +1 -0
  27. package/dist/commands/testgen/agent.js +317 -0
  28. package/dist/commands/testgen/agent.js.map +1 -0
  29. package/dist/commands/testgen/index.d.ts +2 -0
  30. package/dist/commands/testgen/index.d.ts.map +1 -0
  31. package/dist/commands/testgen/index.js +173 -0
  32. package/dist/commands/testgen/index.js.map +1 -0
  33. package/dist/commands/testgen/prompts.d.ts +12 -0
  34. package/dist/commands/testgen/prompts.d.ts.map +1 -0
  35. package/dist/commands/testgen/prompts.js +54 -0
  36. package/dist/commands/testgen/prompts.js.map +1 -0
  37. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/testgen/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * System prompt for the test-gen agent. Takes a frozen spec as input; emits a
3
+ * single Vitest integration test file.
4
+ *
5
+ * The agent does NOT read the consumer's src/. It tests the spec's contract,
6
+ * not the implementation. HTTP-style integration tests (fetch the API, assert
7
+ * on the response) are preferred because they don't need the implementation
8
+ * to exist at test-collection time — they fail at runtime if the endpoint is
9
+ * missing, which is exactly the "red test" state brewing wants.
10
+ */
11
+ export declare const TESTGEN_SYSTEM: (projectContext: string) => string;
12
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,cAAc,GAAI,gBAAgB,MAAM,WA0CwK,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * System prompt for the test-gen agent. Takes a frozen spec as input; emits a
3
+ * single Vitest integration test file.
4
+ *
5
+ * The agent does NOT read the consumer's src/. It tests the spec's contract,
6
+ * not the implementation. HTTP-style integration tests (fetch the API, assert
7
+ * on the response) are preferred because they don't need the implementation
8
+ * to exist at test-collection time — they fail at runtime if the endpoint is
9
+ * missing, which is exactly the "red test" state brewing wants.
10
+ */
11
+ export const TESTGEN_SYSTEM = (projectContext) => `You are a rigorous test engineer for the slowcook brewing harness.
12
+
13
+ Your job is to turn a frozen spec YAML into ONE Vitest integration test file that covers every acceptance scenario in the spec, plus invariant checks and key API-contract edge cases.
14
+
15
+ ## Input
16
+
17
+ You will receive:
18
+ - The full spec YAML (already validated, frozen).
19
+ - Project context (stack config, existing test style snippets if present).
20
+
21
+ ## Output format
22
+
23
+ Emit ONLY the TypeScript test file contents. No prose before or after, no code fences. Start with the first line of the file (imports) and end with the last closing brace. The file must:
24
+
25
+ - Be valid TypeScript that Vitest can collect (imports resolve or fail at RUNTIME, not at collection — prefer HTTP calls over direct function imports).
26
+ - Use \`describe\` / \`it\` from Vitest.
27
+ - Use \`beforeEach\` / \`afterEach\` for setup/teardown if needed.
28
+ - Include ALL acceptance scenarios as \`it\` blocks, named to match the scenario (Given/When/Then phrasing preserved).
29
+ - Include invariant checks as separate \`it\` blocks where they can be asserted via HTTP.
30
+ - Include negative tests for every error response listed in \`api_contract\` (403, 429, 404, etc.).
31
+ - Include edge cases for each invariant (e.g., "exactly at the boundary").
32
+
33
+ ## Stylistic conventions
34
+
35
+ - One describe block per API endpoint or per cohesive topic.
36
+ - Test names use natural language matching acceptance scenarios, e.g. \`it("rejects a self-report with 409", ...)\`.
37
+ - Use \`fetch\` (global) for HTTP calls — avoid importing app code. This keeps tests runnable even before implementation exists.
38
+ - Prefer environment variables for the API base URL (fall back to \`http://localhost:3000\`). Expose via a local const.
39
+ - If the spec references a DB table, DO NOT import the DB client directly. Tests should assert via HTTP + response shape only; schema-level invariants surface as HTTP contract failures.
40
+ - Mark deliberately-incomplete assertions with a \`// TODO(story-N): ...\` comment ONLY when the spec explicitly left a detail as non-goal; otherwise assert concretely.
41
+
42
+ ## Project context (consumer's conventions)
43
+
44
+ ${projectContext}
45
+
46
+ ## Do NOT
47
+
48
+ - Read or reference files outside the spec. Don't import types from the consumer's source code. The spec is the contract.
49
+ - Skip an acceptance scenario. Every scenario in the spec must have at least one corresponding \`it\` block.
50
+ - Write flaky tests. If timing is involved, fake it deterministically (set test time, mock Date, etc.).
51
+ - Use \`test.skip\` / \`test.todo\` — these are caught by slowcook's static scan and will fail the manifest check.
52
+
53
+ Produce a complete, parseable file that, when executed against an unimplemented API, fails with clear messages (status code mismatches, response shape mismatches). That is the desired "red" state brewing will turn green.`;
54
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/testgen/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,cAAsB,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCxD,cAAc;;;;;;;;;6NAS6M,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slowcook-ai/cli",
3
- "version": "0.4.3",
3
+ "version": "0.4.5",
4
4
  "description": "CLI for the slowcook brewing harness",
5
5
  "license": "MIT",
6
6
  "author": "aminazar",
@@ -36,9 +36,9 @@
36
36
  "@anthropic-ai/sdk": "^0.32.1",
37
37
  "yaml": "^2.6.0",
38
38
  "zod": "^3.23.8",
39
- "@slowcook-ai/core": "^0.3.0",
40
- "@slowcook-ai/stack-ts": "^0.3.0",
41
- "@slowcook-ai/forge-github": "^0.4.1"
39
+ "@slowcook-ai/core": "^0.4.0",
40
+ "@slowcook-ai/stack-ts": "^0.4.0",
41
+ "@slowcook-ai/forge-github": "^0.4.2"
42
42
  },
43
43
  "publishConfig": {
44
44
  "access": "public"