@slowcook-ai/cli 0.19.0-alpha.14 → 0.19.0-alpha.17
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 +27 -0
- package/REPORTING.md +40 -1
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/extract/index.d.ts.map +1 -1
- package/dist/commands/extract/index.js +23 -1
- package/dist/commands/extract/index.js.map +1 -1
- package/dist/commands/garnish/index.d.ts +56 -0
- package/dist/commands/garnish/index.d.ts.map +1 -0
- package/dist/commands/garnish/index.js +281 -0
- package/dist/commands/garnish/index.js.map +1 -0
- package/dist/commands/garnish/trailer.d.ts +79 -0
- package/dist/commands/garnish/trailer.d.ts.map +1 -0
- package/dist/commands/garnish/trailer.js +118 -0
- package/dist/commands/garnish/trailer.js.map +1 -0
- package/dist/commands/init/templates.d.ts.map +1 -1
- package/dist/commands/init/templates.js +12 -4
- package/dist/commands/init/templates.js.map +1 -1
- package/dist/commands/map/emit-typeorm.d.ts +117 -0
- package/dist/commands/map/emit-typeorm.d.ts.map +1 -0
- package/dist/commands/map/emit-typeorm.js +341 -0
- package/dist/commands/map/emit-typeorm.js.map +1 -0
- package/dist/commands/map/index.d.ts +18 -0
- package/dist/commands/map/index.d.ts.map +1 -1
- package/dist/commands/map/index.js +28 -0
- package/dist/commands/map/index.js.map +1 -1
- package/dist/commands/run-mock/index.d.ts.map +1 -1
- package/dist/commands/run-mock/index.js +128 -21
- package/dist/commands/run-mock/index.js.map +1 -1
- package/package.json +9 -9
package/AGENTS.md
CHANGED
|
@@ -128,6 +128,8 @@ All commands accept `--help` for full flag listings. One-line summaries:
|
|
|
128
128
|
| `slowcook recipe --regression --bug-profile <path>` | Emit failing regression test for a sift'd bug | ~$0.50–1 |
|
|
129
129
|
| `slowcook sift --bug-profile <path>` | Narrow red→green ratchet for a bug fix, bounded by `fix_scope` | ~$0.50–2 |
|
|
130
130
|
| `slowcook refactor` | Read `.brewing/refactor/proposals.json`, rank by benefit/cost | $0 |
|
|
131
|
+
| `slowcook garnish` | Local commit-gate for human tweaks on agent work — runs scoped tests, commits with `Tweaks-output-of:` trailers (learning signal for the upstream agent) | $0 |
|
|
132
|
+
| `slowcook run-mock <story> --garnish` | DevTools Workspaces flow — boots mock locally, disables overlay, prints Chrome pairing instructions, auto-watches saves + auto-commits via garnish on green | $0 (per-commit; LLM only if test infra needs one) |
|
|
131
133
|
| `slowcook docs <topic>` | Print bundled doc (`reporting`, `agents`, `read-only`) | $0 |
|
|
132
134
|
| `slowcook help` | List all commands | $0 |
|
|
133
135
|
|
|
@@ -199,6 +201,31 @@ non-negotiable defaults unless the user specifically overrides.
|
|
|
199
201
|
- **Use `SLOWCOOK_READ_ONLY=1`** when reproducing a bug on someone else's
|
|
200
202
|
repo. Blocks every GitHub-side write.
|
|
201
203
|
|
|
204
|
+
### Local-developer flow (alternative to the remote overlay)
|
|
205
|
+
|
|
206
|
+
- **`slowcook garnish`** is the right command when you (or another
|
|
207
|
+
engineer) edits files on top of an agent's commit. It runs the
|
|
208
|
+
relevant tests, commits on green with trailers that record which
|
|
209
|
+
upstream agent's work you tweaked. Don't `git commit` by hand on
|
|
210
|
+
top of agent work — you lose the learning-signal trailer.
|
|
211
|
+
- **`slowcook run-mock <story> --garnish`** is the right command if
|
|
212
|
+
you want to edit the mock app via Chrome DevTools Workspaces.
|
|
213
|
+
It prints the one-time Chrome setup, then auto-garnishes on save.
|
|
214
|
+
The remote overlay is disabled in this mode — they're alternative
|
|
215
|
+
feedback channels, not stacked.
|
|
216
|
+
|
|
217
|
+
### CI/CD posture (2026-05-12)
|
|
218
|
+
|
|
219
|
+
- `main` is branch-protected: no force-push, no deletion. Admin
|
|
220
|
+
bypass is on, so solo merges still work. When you arrive as a
|
|
221
|
+
contributor, expect PR + 1 approval to land.
|
|
222
|
+
- Dependabot opens weekly grouped PRs (anthropic / vitest /
|
|
223
|
+
typescript / testing) and monthly GitHub Actions version PRs.
|
|
224
|
+
Auto-merge is OFF; everything goes through a human glance.
|
|
225
|
+
- Open ops backlog lives at [`docs/plans/ci-cd-roadmap.md`](./docs/plans/ci-cd-roadmap.md).
|
|
226
|
+
Two HIGH items are filed as GitHub issues; the rest are queued
|
|
227
|
+
in the doc until they become pressing.
|
|
228
|
+
|
|
202
229
|
---
|
|
203
230
|
|
|
204
231
|
## What to read next
|
package/REPORTING.md
CHANGED
|
@@ -142,7 +142,9 @@ without any custom bundling.
|
|
|
142
142
|
|
|
143
143
|
## Where to file
|
|
144
144
|
|
|
145
|
-
- **Public bug reports**: <https://github.com/aminazar/slowcook/issues
|
|
145
|
+
- **Public bug reports**: <https://github.com/aminazar/slowcook/issues>.
|
|
146
|
+
The bug-report issue template (auto-applied when you click "New issue")
|
|
147
|
+
asks for the four URLs the maintainer needs.
|
|
146
148
|
- **Private bug reports** (when artifacts can't be public): same repo,
|
|
147
149
|
**but file a public issue** with the description + your reproduction
|
|
148
150
|
arrangement. Don't paste private logs into a public issue. The
|
|
@@ -150,5 +152,42 @@ without any custom bundling.
|
|
|
150
152
|
|
|
151
153
|
---
|
|
152
154
|
|
|
155
|
+
## What you'll see when a fix ships
|
|
156
|
+
|
|
157
|
+
When the maintainer ships a fix in a new alpha (e.g., `cli@0.19.0-alpha.X`),
|
|
158
|
+
expect a comment on your bug issue along these lines:
|
|
159
|
+
|
|
160
|
+
> Fixed in `cli@0.19.0-alpha.X`. Bump your `.brewing/slowcook-cli-version`
|
|
161
|
+
> and re-run. Close this issue if resolved; comment if not.
|
|
162
|
+
>
|
|
163
|
+
> `<!-- slowcook:fix-notice cli=0.19.0-alpha.X issue=N -->`
|
|
164
|
+
|
|
165
|
+
The issue stays **open** until you confirm the fix worked. You close it.
|
|
166
|
+
That gives the maintainer signal that the fix actually landed in your
|
|
167
|
+
context — not just in slowcook's own test suite.
|
|
168
|
+
|
|
169
|
+
If the fix didn't work, comment on the issue with what's still broken.
|
|
170
|
+
The maintainer reopens (if you closed) or continues debugging.
|
|
171
|
+
|
|
172
|
+
## Triage labels
|
|
173
|
+
|
|
174
|
+
The slowcook repo uses a small label set so you can filter for what's
|
|
175
|
+
actionable:
|
|
176
|
+
|
|
177
|
+
| Label | Meaning |
|
|
178
|
+
|---|---|
|
|
179
|
+
| `bug` | Confirmed bug. Auto-applied by the issue template. |
|
|
180
|
+
| `needs-info` | Maintainer needs more context (additional URL, runner output, etc.). |
|
|
181
|
+
| `confirmed` | Maintainer reproduced; working on a fix. |
|
|
182
|
+
| `regression-test-pending` | Fix landed but the regression test is still TODO. |
|
|
183
|
+
| `fixed-in-α.X` | Fix shipped in `cli@0.19.0-alpha.X`. Reporter to confirm + close. |
|
|
184
|
+
| `blocked-on-anthropic` | Bug is in the Anthropic API / SDK, not slowcook. |
|
|
185
|
+
| `wont-fix` | Out of scope or incompatible with architectural intent. |
|
|
186
|
+
|
|
187
|
+
Filter via GitHub's issue search, e.g.:
|
|
188
|
+
`gh issue list --repo aminazar/slowcook --label "fixed-in-α.13"`
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
153
192
|
*This doc is intentionally short. Read [AGENTS.md](./AGENTS.md) for
|
|
154
193
|
the slowcook architecture overview.*
|
package/dist/cli.js
CHANGED
|
@@ -87,6 +87,7 @@ Commands available in ${VERSION}:
|
|
|
87
87
|
chef-drift (0.18.0-α.9 L1) Surgical drift-fixer. Triggered by mock-isolation / recon / brew / navigator halts.
|
|
88
88
|
chef-orchestrate (0.19.0-α.2 L3) Pipeline orchestrator. Decides redispatch_brew / rebase / escalate / close on a halted PR.
|
|
89
89
|
refactor (0.19.0-α.7) Rank refactor proposals by benefit/cost. Reads .brewing/refactor/proposals.json.
|
|
90
|
+
garnish (0.19.0-α.15) Local commit-gate for human tweaks on agent work. Runs tests, commits with learning-signal trailers.
|
|
90
91
|
catchup Detect + run pipeline steps that should have triggered but didn't.
|
|
91
92
|
brew Ratcheted implementation loop: flip red tests to green for one story.
|
|
92
93
|
map Generate / check the repo-wide code map (APIs, pages, components, helpers, types).
|
|
@@ -238,6 +239,18 @@ async function main() {
|
|
|
238
239
|
await docs(args.slice(1), VERSION);
|
|
239
240
|
return;
|
|
240
241
|
}
|
|
242
|
+
case "garnish":
|
|
243
|
+
// 0.19.0-α.15 — local commit-gate for human (or other-agent)
|
|
244
|
+
// tweaks layered on top of an agent's work. Detects uncommitted
|
|
245
|
+
// changes, runs scoped tests, commits with Tweaks-output-of:
|
|
246
|
+
// trailers marking each agent-authored file the tweak touched.
|
|
247
|
+
// A future `slowcook reflect` mines these trailers for learning
|
|
248
|
+
// signal (eval-set fixtures, prompt-amendment candidates).
|
|
249
|
+
{
|
|
250
|
+
const { garnish } = await import("./commands/garnish/index.js");
|
|
251
|
+
await garnish(args.slice(1), VERSION);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
241
254
|
case "vibe":
|
|
242
255
|
// 0.15.0-α.1 — design-first mockup generator (plate-pipeline α.1).
|
|
243
256
|
// Reads spec + brownfield extracts + code-map; emits a runnable
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,uEAAuE;AACvE,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAW,CAAC,GAAG,EAAE;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BU,OAAO
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,uEAAuE;AACvE,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAW,CAAC,GAAG,EAAE;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA4BU,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiC9B,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,OAAO;YACV,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO;QACT,KAAK,UAAU;YACb,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACrC,OAAO;QACT,KAAK,gBAAgB;YACnB,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,KAAK,iBAAiB;YACpB,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,gBAAgB;YACnB,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO;QACT,KAAK,oBAAoB;YACvB,4DAA4D;YAC5D,8DAA8D;YAC9D,sDAAsD;YACtD,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,2DAA2D;YAC3D,4DAA4D;YAC5D,6DAA6D;YAC7D,6DAA6D;YAC7D,0DAA0D;YAC1D,EAAE;YACF,2DAA2D;YAC3D,6DAA6D;YAC7D,4DAA4D;YAC5D,uDAAuD;YACvD,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC3C,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YACD,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO;QACT,KAAK,aAAa;YAChB,gEAAgE;YAChE,wEAAwE;YACxE,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1C,OAAO;QACT,KAAK,MAAM;YACT,+DAA+D;YAC/D,iEAAiE;YACjE,sCAAsC;YACtC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,MAAM;YACT,4DAA4D;YAC5D,iEAAiE;YACjE,mDAAmD;YACnD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,SAAS;YACZ,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO;QACT,KAAK,MAAM;YACT,6DAA6D;YAC7D,0DAA0D;YAC1D,6DAA6D;YAC7D,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;gBAChE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,YAAY;YACf,+DAA+D;YAC/D,gEAAgE;YAChE,gEAAgE;YAChE,2DAA2D;YAC3D,oEAAoE;YACpE,oEAAoE;YACpE,CAAC;gBACC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;gBACnE,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;QACH,KAAK,kBAAkB;YACrB,iEAAiE;YACjE,gEAAgE;YAChE,gEAAgE;YAChE,gEAAgE;YAChE,gEAAgE;YAChE,uCAAuC;YACvC,CAAC;gBACC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;gBAC3E,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;QACH,KAAK,KAAK;YACR,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO;QACT,KAAK,SAAS;YACZ,sEAAsE;YACtE,iEAAiE;YACjE,kEAAkE;YAClE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO;QACT,KAAK,UAAU;YACb,gEAAgE;YAChE,8DAA8D;YAC9D,qDAAqD;YACrD,6DAA6D;YAC7D,yCAAyC;YACzC,CAAC;gBACC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;gBAClE,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;QACH,KAAK,MAAM;YACT,6DAA6D;YAC7D,gEAAgE;YAChE,8DAA8D;YAC9D,CAAC;gBACC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;QACH,KAAK,SAAS;YACZ,6DAA6D;YAC7D,gEAAgE;YAChE,6DAA6D;YAC7D,+DAA+D;YAC/D,gEAAgE;YAChE,2DAA2D;YAC3D,CAAC;gBACC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;gBAChE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;QACH,KAAK,MAAM;YACT,mEAAmE;YACnE,gEAAgE;YAChE,uDAAuD;YACvD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,OAAO;YACV,6DAA6D;YAC7D,2DAA2D;YAC3D,qDAAqD;YACrD,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO;QACT,KAAK,MAAM;YACT,yDAAyD;YACzD,8DAA8D;YAC9D,0DAA0D;YAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,SAAS;YACZ,gEAAgE;YAChE,+DAA+D;YAC/D,0DAA0D;YAC1D,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO;QACT,KAAK,OAAO;YACV,yDAAyD;YACzD,mDAAmD;YACnD,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO;QACT,KAAK,OAAO;YACV,4DAA4D;YAC5D,yDAAyD;YACzD,sDAAsD;YACtD,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO;QACT,KAAK,UAAU;YACb,6DAA6D;YAC7D,gEAAgE;YAChE,kDAAkD;YAClD,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO;QACT,KAAK,UAAU;YACb,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO;QACT,KAAK,UAAU;YACb,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO;QACT,KAAK,SAAS,CAAC;QACf,KAAK,WAAW,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;YACnC,OAAO;QACT,KAAK,SAAS,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW;IACjC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/extract/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/extract/index.ts"],"names":[],"mappings":"AA4GA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChF"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { emitSchemaDiagram, emitTokensCatalog } from "../map/index.js";
|
|
1
|
+
import { emitSchemaDiagram, emitTokensCatalog, emitEntitiesDiagram, } from "../map/index.js";
|
|
2
2
|
function parseArgs(argv) {
|
|
3
3
|
const args = {
|
|
4
4
|
repoRoot: process.cwd(),
|
|
5
5
|
schema: false,
|
|
6
6
|
tokens: false,
|
|
7
|
+
entities: false,
|
|
7
8
|
};
|
|
8
9
|
let any = false;
|
|
9
10
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -21,6 +22,10 @@ function parseArgs(argv) {
|
|
|
21
22
|
args.tokens = true;
|
|
22
23
|
any = true;
|
|
23
24
|
}
|
|
25
|
+
else if (a === "--entities") {
|
|
26
|
+
args.entities = true;
|
|
27
|
+
any = true;
|
|
28
|
+
}
|
|
24
29
|
else if (a === "--help" || a === "-h") {
|
|
25
30
|
printHelp();
|
|
26
31
|
process.exit(0);
|
|
@@ -35,6 +40,7 @@ function parseArgs(argv) {
|
|
|
35
40
|
if (!any) {
|
|
36
41
|
args.schema = true;
|
|
37
42
|
args.tokens = true;
|
|
43
|
+
args.entities = true;
|
|
38
44
|
}
|
|
39
45
|
return args;
|
|
40
46
|
}
|
|
@@ -61,6 +67,13 @@ Targets:
|
|
|
61
67
|
Design-token catalog from :root + @theme blocks in
|
|
62
68
|
**/*.css (skipping node_modules / .next / build dirs).
|
|
63
69
|
Skipped silently when no .css files / no tokens are found.
|
|
70
|
+
--entities .brewing/diagrams/entities.md (0.19.0+ / slowcook#36)
|
|
71
|
+
Mermaid ERD + per-entity table from TypeORM
|
|
72
|
+
**/*.entity.ts files containing @Entity decorators.
|
|
73
|
+
Skipped silently when no entity files are found (e.g.
|
|
74
|
+
Prisma / Drizzle / Supabase consumers). Tracked in git
|
|
75
|
+
by default; the init gitignore template carves out an
|
|
76
|
+
exception for this file.
|
|
64
77
|
|
|
65
78
|
This command does NOT run the ts-morph code-map scan; for that,
|
|
66
79
|
use \`slowcook map generate\`.
|
|
@@ -86,5 +99,14 @@ export async function extract(argv, _cliVersion) {
|
|
|
86
99
|
console.log(`Skipped tokens extract: ${r.skippedReason}`);
|
|
87
100
|
}
|
|
88
101
|
}
|
|
102
|
+
if (args.entities) {
|
|
103
|
+
const r = emitEntitiesDiagram(args.repoRoot);
|
|
104
|
+
if (r.written) {
|
|
105
|
+
console.log(`Wrote .brewing/diagrams/entities.md (${r.entityCount} entities, ${r.relationCount} relations, ${r.fileCount} *.entity.ts file(s) scanned).`);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.log(`Skipped entities extract: ${r.skippedReason}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
89
111
|
}
|
|
90
112
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/extract/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/extract/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook garnish` — 0.19.0-α.15.
|
|
3
|
+
*
|
|
4
|
+
* Local commit-gate for human (or other-agent) tweaks layered on top
|
|
5
|
+
* of an agent's work. The PM (or engineer) edits files in the working
|
|
6
|
+
* tree — by hand, via DevTools Workspaces, via any editor — then runs
|
|
7
|
+
* `slowcook garnish`. The cli:
|
|
8
|
+
*
|
|
9
|
+
* 1. Detects uncommitted changes in the working tree.
|
|
10
|
+
* 2. For each changed file, identifies the agent (if any) whose last
|
|
11
|
+
* commit touched the file. Files last touched by humans get no
|
|
12
|
+
* trailer entry (no learning signal for an agent).
|
|
13
|
+
* 3. Runs the relevant tests scoped to the changed files (or the
|
|
14
|
+
* caller-provided test glob via --scope).
|
|
15
|
+
* 4. If tests pass: commits the staged changes with a subject naming
|
|
16
|
+
* the touched files + `Tweaks-output-of:` trailer lines marking
|
|
17
|
+
* each agent-authored file the tweak touched. Optionally pushes.
|
|
18
|
+
* 5. If tests fail: prints the failure summary + exits non-zero
|
|
19
|
+
* without committing.
|
|
20
|
+
*
|
|
21
|
+
* The trailer lines are the load-bearing piece — a future `slowcook
|
|
22
|
+
* reflect` command mines them to surface learning signal for the
|
|
23
|
+
* upstream agent (eval-set fixtures, prompt-amendment candidates).
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* 0.19.0-α.16 — runGarnish, the reusable core. Other commands
|
|
27
|
+
* (run-mock --garnish, for one) call this in-process on debounced
|
|
28
|
+
* file-save batches; doing it as a subprocess invocation would
|
|
29
|
+
* re-pay node startup every time.
|
|
30
|
+
*
|
|
31
|
+
* Returns a structured result; never calls process.exit. Caller
|
|
32
|
+
* decides what to do on each kind.
|
|
33
|
+
*/
|
|
34
|
+
export interface RunGarnishOptions {
|
|
35
|
+
repoRoot: string;
|
|
36
|
+
scope?: string | null;
|
|
37
|
+
message?: string | null;
|
|
38
|
+
push?: boolean;
|
|
39
|
+
silent?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export type RunGarnishResult = {
|
|
42
|
+
kind: "no-changes";
|
|
43
|
+
} | {
|
|
44
|
+
kind: "tests-failed";
|
|
45
|
+
touchedFiles: string[];
|
|
46
|
+
outputTail: string;
|
|
47
|
+
} | {
|
|
48
|
+
kind: "committed";
|
|
49
|
+
sha: string;
|
|
50
|
+
touchedFiles: string[];
|
|
51
|
+
agentRefCount: number;
|
|
52
|
+
pushed: boolean;
|
|
53
|
+
};
|
|
54
|
+
export declare function runGarnish(opts: RunGarnishOptions): Promise<RunGarnishResult>;
|
|
55
|
+
export declare function garnish(argv: string[], _cliVersion: string): Promise<void>;
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/garnish/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAsJH;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpE;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEN,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmEnF;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDhF"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `slowcook garnish` — 0.19.0-α.15.
|
|
3
|
+
*
|
|
4
|
+
* Local commit-gate for human (or other-agent) tweaks layered on top
|
|
5
|
+
* of an agent's work. The PM (or engineer) edits files in the working
|
|
6
|
+
* tree — by hand, via DevTools Workspaces, via any editor — then runs
|
|
7
|
+
* `slowcook garnish`. The cli:
|
|
8
|
+
*
|
|
9
|
+
* 1. Detects uncommitted changes in the working tree.
|
|
10
|
+
* 2. For each changed file, identifies the agent (if any) whose last
|
|
11
|
+
* commit touched the file. Files last touched by humans get no
|
|
12
|
+
* trailer entry (no learning signal for an agent).
|
|
13
|
+
* 3. Runs the relevant tests scoped to the changed files (or the
|
|
14
|
+
* caller-provided test glob via --scope).
|
|
15
|
+
* 4. If tests pass: commits the staged changes with a subject naming
|
|
16
|
+
* the touched files + `Tweaks-output-of:` trailer lines marking
|
|
17
|
+
* each agent-authored file the tweak touched. Optionally pushes.
|
|
18
|
+
* 5. If tests fail: prints the failure summary + exits non-zero
|
|
19
|
+
* without committing.
|
|
20
|
+
*
|
|
21
|
+
* The trailer lines are the load-bearing piece — a future `slowcook
|
|
22
|
+
* reflect` command mines them to surface learning signal for the
|
|
23
|
+
* upstream agent (eval-set fixtures, prompt-amendment candidates).
|
|
24
|
+
*/
|
|
25
|
+
import { execSync, spawnSync } from "node:child_process";
|
|
26
|
+
import { existsSync, writeFileSync } from "node:fs";
|
|
27
|
+
import { join } from "node:path";
|
|
28
|
+
import { composeCommitMessage, agentFromAuthor, } from "./trailer.js";
|
|
29
|
+
function parseArgs(argv) {
|
|
30
|
+
const args = {
|
|
31
|
+
repoRoot: process.cwd(),
|
|
32
|
+
scope: null,
|
|
33
|
+
push: false,
|
|
34
|
+
message: null,
|
|
35
|
+
dryRun: false,
|
|
36
|
+
};
|
|
37
|
+
for (let i = 0; i < argv.length; i++) {
|
|
38
|
+
const a = argv[i];
|
|
39
|
+
const next = argv[i + 1];
|
|
40
|
+
if (a === "--cwd" && next) {
|
|
41
|
+
args.repoRoot = next;
|
|
42
|
+
i++;
|
|
43
|
+
}
|
|
44
|
+
else if (a === "--scope" && next) {
|
|
45
|
+
args.scope = next;
|
|
46
|
+
i++;
|
|
47
|
+
}
|
|
48
|
+
else if (a === "--push") {
|
|
49
|
+
args.push = true;
|
|
50
|
+
}
|
|
51
|
+
else if (a === "--message" && next) {
|
|
52
|
+
args.message = next;
|
|
53
|
+
i++;
|
|
54
|
+
}
|
|
55
|
+
else if (a === "-m" && next) {
|
|
56
|
+
args.message = next;
|
|
57
|
+
i++;
|
|
58
|
+
}
|
|
59
|
+
else if (a === "--dry-run") {
|
|
60
|
+
args.dryRun = true;
|
|
61
|
+
}
|
|
62
|
+
else if (a === "--help" || a === "-h") {
|
|
63
|
+
printHelp();
|
|
64
|
+
process.exit(0);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return args;
|
|
68
|
+
}
|
|
69
|
+
function printHelp() {
|
|
70
|
+
console.log(`
|
|
71
|
+
slowcook garnish — commit a human (or other-agent) tweak on top of agent work
|
|
72
|
+
|
|
73
|
+
Detects uncommitted changes, runs the relevant tests, and (if green) commits
|
|
74
|
+
with \`Tweaks-output-of:\` trailers marking which upstream agent's work was
|
|
75
|
+
tweaked. A future \`slowcook reflect\` mines these trailers for learning signal.
|
|
76
|
+
|
|
77
|
+
Usage:
|
|
78
|
+
slowcook garnish [options]
|
|
79
|
+
|
|
80
|
+
Options:
|
|
81
|
+
--cwd <path> Repo root (default: cwd).
|
|
82
|
+
--scope <glob> Pass through to vitest (\`vitest run <glob>\`). Default:
|
|
83
|
+
run vitest related to the changed files.
|
|
84
|
+
--message <text> Optional commit body. Default: subject-only.
|
|
85
|
+
-m <text> Short form of --message.
|
|
86
|
+
--push Push to origin after committing.
|
|
87
|
+
--dry-run Print what would happen; do not run tests or commit.
|
|
88
|
+
|
|
89
|
+
Examples:
|
|
90
|
+
# Edit some files via DevTools Workspaces / by hand, then:
|
|
91
|
+
slowcook garnish
|
|
92
|
+
|
|
93
|
+
# Force a specific test scope:
|
|
94
|
+
slowcook garnish --scope 'tests/integration/story-018-*'
|
|
95
|
+
|
|
96
|
+
# Commit + push:
|
|
97
|
+
slowcook garnish -m "Tightened the spacing on the Pin button." --push
|
|
98
|
+
`);
|
|
99
|
+
}
|
|
100
|
+
function gitChangedFiles(repoRoot) {
|
|
101
|
+
const out = execSync(`git -C "${repoRoot}" status --porcelain`, {
|
|
102
|
+
encoding: "utf8",
|
|
103
|
+
});
|
|
104
|
+
const lines = out.split("\n").filter((l) => l.length > 0);
|
|
105
|
+
return lines
|
|
106
|
+
.map((line) => {
|
|
107
|
+
// Format: "XY path" or "XY path-old -> path-new" for renames.
|
|
108
|
+
// Take the rightmost path; safe enough for our use.
|
|
109
|
+
const status = line.slice(0, 2).trim();
|
|
110
|
+
const rest = line.slice(3).trim();
|
|
111
|
+
const path = rest.includes(" -> ") ? rest.split(" -> ")[1] : rest;
|
|
112
|
+
return { path, status };
|
|
113
|
+
})
|
|
114
|
+
.filter((f) => f.status !== "??"); // skip untracked-only (user can `git add` first)
|
|
115
|
+
}
|
|
116
|
+
function lastTouchingCommit(repoRoot, file) {
|
|
117
|
+
try {
|
|
118
|
+
const sha = execSync(`git -C "${repoRoot}" log -n 1 --format=%H -- "${file}"`, { encoding: "utf8" }).trim();
|
|
119
|
+
if (!sha)
|
|
120
|
+
return null;
|
|
121
|
+
const author = execSync(`git -C "${repoRoot}" show -s --format=%an "${sha}"`, { encoding: "utf8" }).trim();
|
|
122
|
+
return { sha, author };
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function resolveUpstreamRefs(repoRoot, files) {
|
|
129
|
+
const refs = [];
|
|
130
|
+
const humanFiles = [];
|
|
131
|
+
for (const file of files) {
|
|
132
|
+
const upstream = lastTouchingCommit(repoRoot, file);
|
|
133
|
+
if (!upstream) {
|
|
134
|
+
// File doesn't exist in history yet — must be newly-added by this tweak.
|
|
135
|
+
humanFiles.push(file);
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const agent = agentFromAuthor(upstream.author);
|
|
139
|
+
if (agent) {
|
|
140
|
+
refs.push({ agent, sha: upstream.sha, file });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
humanFiles.push(file);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return { refs, humanFiles };
|
|
147
|
+
}
|
|
148
|
+
function runTests(repoRoot, files, scopeOverride) {
|
|
149
|
+
const cmd = scopeOverride
|
|
150
|
+
? `npx vitest run ${scopeOverride}`
|
|
151
|
+
: `npx vitest related ${files.map((f) => `"${f}"`).join(" ")}`;
|
|
152
|
+
const result = spawnSync(cmd, {
|
|
153
|
+
cwd: repoRoot,
|
|
154
|
+
shell: true,
|
|
155
|
+
encoding: "utf8",
|
|
156
|
+
maxBuffer: 4 * 1024 * 1024,
|
|
157
|
+
});
|
|
158
|
+
const output = (result.stdout || "") + (result.stderr || "");
|
|
159
|
+
const ok = result.status === 0;
|
|
160
|
+
return { ok, output };
|
|
161
|
+
}
|
|
162
|
+
export async function runGarnish(opts) {
|
|
163
|
+
const repoRoot = opts.repoRoot;
|
|
164
|
+
const scope = opts.scope ?? null;
|
|
165
|
+
const log = opts.silent ? () => undefined : (msg) => console.log(msg);
|
|
166
|
+
const warn = opts.silent ? () => undefined : (msg) => console.warn(msg);
|
|
167
|
+
const changed = gitChangedFiles(repoRoot);
|
|
168
|
+
if (changed.length === 0) {
|
|
169
|
+
return { kind: "no-changes" };
|
|
170
|
+
}
|
|
171
|
+
const touchedFiles = changed.map((c) => c.path);
|
|
172
|
+
const { refs, humanFiles } = resolveUpstreamRefs(repoRoot, touchedFiles);
|
|
173
|
+
if (!opts.silent) {
|
|
174
|
+
log(` ${touchedFiles.length} file(s) with uncommitted changes:`);
|
|
175
|
+
for (const f of touchedFiles)
|
|
176
|
+
log(` ${f}`);
|
|
177
|
+
log(` upstream: ${refs.length} agent-authored, ${humanFiles.length} human/new`);
|
|
178
|
+
if (refs.length > 0) {
|
|
179
|
+
const byAgent = {};
|
|
180
|
+
for (const r of refs)
|
|
181
|
+
byAgent[r.agent] = (byAgent[r.agent] ?? 0) + 1;
|
|
182
|
+
const summary = Object.entries(byAgent).map(([a, n]) => `${a}=${n}`).join(", ");
|
|
183
|
+
log(` (${summary})`);
|
|
184
|
+
}
|
|
185
|
+
log("\n running tests" + (scope ? ` (--scope ${scope})` : " (vitest related)") + "...");
|
|
186
|
+
}
|
|
187
|
+
const tests = runTests(repoRoot, touchedFiles, scope);
|
|
188
|
+
if (!tests.ok) {
|
|
189
|
+
const tail = tests.output.split("\n").slice(-40).join("\n");
|
|
190
|
+
return { kind: "tests-failed", touchedFiles, outputTail: tail };
|
|
191
|
+
}
|
|
192
|
+
log(" ✓ tests passed.");
|
|
193
|
+
const message = composeCommitMessage({
|
|
194
|
+
touchedFiles,
|
|
195
|
+
upstreamRefs: refs,
|
|
196
|
+
userMessage: opts.message ?? undefined,
|
|
197
|
+
});
|
|
198
|
+
const msgFile = join(repoRoot, ".brewing/.garnish-commit-msg.tmp");
|
|
199
|
+
if (!existsSync(join(repoRoot, ".brewing"))) {
|
|
200
|
+
execSync(`mkdir -p "${join(repoRoot, ".brewing")}"`);
|
|
201
|
+
}
|
|
202
|
+
writeFileSync(msgFile, message, "utf8");
|
|
203
|
+
for (const f of touchedFiles) {
|
|
204
|
+
try {
|
|
205
|
+
execSync(`git -C "${repoRoot}" add -- "${f}"`, { stdio: "ignore" });
|
|
206
|
+
}
|
|
207
|
+
catch { /* deleted file; ignore */ }
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
execSync(`git -C "${repoRoot}" commit -F "${msgFile}"`, {
|
|
211
|
+
stdio: opts.silent ? "ignore" : "inherit",
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
catch (e) {
|
|
215
|
+
warn(` garnish commit failed: ${e.message.slice(0, 200)}`);
|
|
216
|
+
return { kind: "tests-failed", touchedFiles, outputTail: e.message };
|
|
217
|
+
}
|
|
218
|
+
const sha = execSync(`git -C "${repoRoot}" rev-parse HEAD`, { encoding: "utf8" }).trim();
|
|
219
|
+
let pushed = false;
|
|
220
|
+
if (opts.push) {
|
|
221
|
+
try {
|
|
222
|
+
execSync(`git -C "${repoRoot}" push`, { stdio: opts.silent ? "ignore" : "inherit" });
|
|
223
|
+
pushed = true;
|
|
224
|
+
}
|
|
225
|
+
catch (e) {
|
|
226
|
+
warn(` warn: push failed: ${e.message.slice(0, 200)}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return { kind: "committed", sha, touchedFiles, agentRefCount: refs.length, pushed };
|
|
230
|
+
}
|
|
231
|
+
export async function garnish(argv, _cliVersion) {
|
|
232
|
+
const args = parseArgs(argv);
|
|
233
|
+
console.log(`slowcook garnish · cwd: ${args.repoRoot.replace(process.cwd() + "/", ".")}`);
|
|
234
|
+
if (args.dryRun) {
|
|
235
|
+
const changed = gitChangedFiles(args.repoRoot);
|
|
236
|
+
if (changed.length === 0) {
|
|
237
|
+
console.log(" no uncommitted changes; nothing to garnish.");
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const touchedFiles = changed.map((c) => c.path);
|
|
241
|
+
const { refs, humanFiles } = resolveUpstreamRefs(args.repoRoot, touchedFiles);
|
|
242
|
+
console.log(` ${touchedFiles.length} file(s) with uncommitted changes:`);
|
|
243
|
+
for (const f of touchedFiles)
|
|
244
|
+
console.log(` ${f}`);
|
|
245
|
+
console.log(` upstream: ${refs.length} agent-authored, ${humanFiles.length} human/new`);
|
|
246
|
+
if (refs.length > 0) {
|
|
247
|
+
const byAgent = {};
|
|
248
|
+
for (const r of refs)
|
|
249
|
+
byAgent[r.agent] = (byAgent[r.agent] ?? 0) + 1;
|
|
250
|
+
const summary = Object.entries(byAgent).map(([a, n]) => `${a}=${n}`).join(", ");
|
|
251
|
+
console.log(` (${summary})`);
|
|
252
|
+
}
|
|
253
|
+
console.log("\n [dry-run] would run tests + commit; skipping.");
|
|
254
|
+
const message = composeCommitMessage({
|
|
255
|
+
touchedFiles,
|
|
256
|
+
upstreamRefs: refs,
|
|
257
|
+
userMessage: args.message ?? undefined,
|
|
258
|
+
});
|
|
259
|
+
console.log("\n commit message would be:\n");
|
|
260
|
+
for (const line of message.split("\n"))
|
|
261
|
+
console.log(` ${line}`);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const result = await runGarnish({
|
|
265
|
+
repoRoot: args.repoRoot,
|
|
266
|
+
scope: args.scope,
|
|
267
|
+
message: args.message,
|
|
268
|
+
push: args.push,
|
|
269
|
+
});
|
|
270
|
+
if (result.kind === "no-changes") {
|
|
271
|
+
console.log(" no uncommitted changes; nothing to garnish.");
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (result.kind === "tests-failed") {
|
|
275
|
+
console.error("\n ✗ tests failed. Garnish blocked; working tree unchanged.\n");
|
|
276
|
+
console.error(result.outputTail);
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
console.log(`\n ✓ garnished: ${result.sha.slice(0, 7)} (${result.agentRefCount} agent ref(s) recorded)${result.pushed ? " · pushed" : ""}`);
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/garnish/index.ts"],"names":[],"mappings":"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"}
|