@outerlayer/cli 0.18.0 → 0.19.1
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/CHANGELOG.md +33 -0
- package/README.md +21 -2
- package/dist/{agent-setup-RBTEACYU.js → agent-setup-AM42SA2D.js} +15 -16
- package/dist/{artifact-link-cmd-AVM2EKTV.js → artifact-link-cmd-OWRI5AJX.js} +2 -2
- package/dist/build-info.json +1 -1
- package/dist/{builder-DUI2ZH2H.js → builder-C4QNTYMS.js} +3 -3
- package/dist/{check-5C4YDZYV.js → check-W2JGXN3B.js} +44 -43
- package/dist/{chunk-S26M3YBJ.js → chunk-3UZTIRLF.js} +1 -1
- package/dist/{chunk-Y5MXET4M.js → chunk-3ZR7Y23Y.js} +11 -10
- package/dist/{chunk-47TTLEDX.js → chunk-5VML45HH.js} +35 -13
- package/dist/{chunk-F4XSVQJ4.js → chunk-6X4SQ5MY.js} +2 -2
- package/dist/{chunk-T4Y6SCG3.js → chunk-7UWVLZXD.js} +2 -2
- package/dist/{chunk-N3CUDFCW.js → chunk-7VUK5RFS.js} +15 -2
- package/dist/{chunk-SWCTGCSC.js → chunk-7YP7T6GV.js} +1 -1
- package/dist/{chunk-3OFZM4X6.js → chunk-B6SCN5NY.js} +151 -20
- package/dist/{chunk-KDVIU23F.js → chunk-BWSUPRDK.js} +1 -1
- package/dist/{chunk-S76AYB4M.js → chunk-CG36IONK.js} +5 -5
- package/dist/{chunk-RAZTWYZN.js → chunk-CGGPS7SI.js} +7 -8
- package/dist/chunk-CJJDJ7AT.js +56 -0
- package/dist/{chunk-W5VPCONO.js → chunk-EAEELQVQ.js} +33 -227
- package/dist/{chunk-QQM2UJ6T.js → chunk-F2KXHIFI.js} +182 -28
- package/dist/{chunk-KK4VBOH6.js → chunk-FBTGMSQF.js} +10 -11
- package/dist/{chunk-MQJSXHV7.js → chunk-G3IJ3N6F.js} +5 -3
- package/dist/{chunk-FUB7LRUE.js → chunk-GEMQLBMW.js} +5 -5
- package/dist/{chunk-Y5GE76XC.js → chunk-HOKXGFDR.js} +33 -81
- package/dist/{chunk-IP7BIBXJ.js → chunk-IF2OSI5T.js} +35 -1
- package/dist/{chunk-UYOYTKE2.js → chunk-JHGEBPLE.js} +3 -3
- package/dist/chunk-KYS3TQAG.js +296 -0
- package/dist/chunk-LLM3I5YU.js +89 -0
- package/dist/{chunk-B3UKB46N.js → chunk-LRG3ZMZD.js} +4 -5
- package/dist/{chunk-NL4XPC7W.js → chunk-LW7G5TJB.js} +1 -1
- package/dist/{chunk-MNTSH4CL.js → chunk-NNLA7LLQ.js} +1 -1
- package/dist/{chunk-GOBOJMOJ.js → chunk-PIZRPNKR.js} +4 -4
- package/dist/{chunk-ULSIJGLS.js → chunk-PSN33ERW.js} +56 -14
- package/dist/{chunk-WGAUY5LE.js → chunk-QEFKA2QD.js} +1 -1
- package/dist/{chunk-BMYGAGBJ.js → chunk-QNLX477Q.js} +155 -23
- package/dist/{chunk-JF42URPU.js → chunk-R22NZSGA.js} +33 -9
- package/dist/chunk-TUSYOL2O.js +113 -0
- package/dist/{chunk-ESC6UR76.js → chunk-TWF3RICI.js} +6 -6
- package/dist/{chunk-L2USZT6T.js → chunk-VMJPFQNE.js} +1 -1
- package/dist/{chunk-X5N6KC6V.js → chunk-WFSUUUAN.js} +2 -3
- package/dist/{chunk-6CHIYEZZ.js → chunk-XZ4H4X5F.js} +9 -83
- package/dist/{chunk-LXAY4A2G.js → chunk-YQR6E6OV.js} +34 -49
- package/dist/chunk-Z7K3L4FC.js +174 -0
- package/dist/{claude-launcher-YVXI76NX.js → claude-launcher-J5M44PFS.js} +20 -7
- package/dist/{cli-C77H54BV.js → cli-EXX2R73G.js} +206 -230
- package/dist/{command-H5CILO4S.js → command-ZQNEPDS6.js} +29 -30
- package/dist/{config-FXDG4NPJ.js → config-CLSGABD5.js} +2 -2
- package/dist/{connect-cmd-ZW5FV3ZW.js → connect-cmd-UNYKGDAL.js} +7 -7
- package/dist/context-cleanup-CHEWNYU6.js +11 -0
- package/dist/control-plane-launch-34LNRJWR.js +216 -0
- package/dist/{dist-QTX4RSCL.js → dist-WO7NOJNG.js} +2 -2
- package/dist/{docker-RC3PRX3Q.js → docker-BFU3AQGY.js} +4 -4
- package/dist/{doctor-2NQQML6P.js → doctor-DHUM5DBB.js} +32 -33
- package/dist/{emit-artifact-cmd-7MP63KXU.js → emit-artifact-cmd-XBHM647X.js} +17 -17
- package/dist/{emit-cmd-PPN4QQF2.js → emit-cmd-W55AEBCA.js} +6 -6
- package/dist/{emit-criteria-cmd-3RXPDLNK.js → emit-criteria-cmd-CRTYEF7D.js} +11 -12
- package/dist/{emit-finding-cmd-OL7JB6H3.js → emit-finding-cmd-7JHVRYOP.js} +12 -13
- package/dist/{emit-result-cmd-UZVMOCF4.js → emit-result-cmd-5NZMLCJK.js} +17 -17
- package/dist/emit-step-cmd-347XNGPQ.js +26 -0
- package/dist/{governing-source-BUU4IABS.js → governing-source-HAA4OW57.js} +21 -22
- package/dist/{hook-fast-W5MKHMJT.js → hook-fast-RL5E5OXE.js} +3 -3
- package/dist/{import-capture-cmd-ZO6KGHI2.js → import-capture-cmd-TK4XY7RD.js} +4 -4
- package/dist/{import-ruler-cmd-KJMWL5V6.js → import-ruler-cmd-T6LLO6Q7.js} +2 -2
- package/dist/index.js +4 -4
- package/dist/{init-WNXXYMO7.js → init-V6FOMD2V.js} +30 -31
- package/dist/{init-VWXIZEAN.js → init-XG47KCI4.js} +30 -31
- package/dist/{init-cmd-WS6TIRYT.js → init-cmd-Z4O4PPLZ.js} +70 -27
- package/dist/{init-update-E3J6TVIN.js → init-update-7DVAKWW3.js} +21 -22
- package/dist/{install-CBWIEF3R.js → install-4SEFIIW2.js} +3 -3
- package/dist/{login-browser-O63QZN7D.js → login-browser-DX35MARZ.js} +2 -2
- package/dist/{loop-UGI2BJOT.js → loop-TPUYUMSY.js} +44 -43
- package/dist/{machine-JOW4RNZ7.js → machine-TRHBT5NE.js} +26 -27
- package/dist/{mcp-serve-cmd-DOTY5FKY.js → mcp-serve-cmd-N3UTY6EE.js} +5 -5
- package/dist/{runner-env-4NB2GA7O.js → runner-env-FRZFFHDF.js} +4 -4
- package/dist/{runner-key-TC3NFWFV.js → runner-key-5FOWCW7J.js} +30 -31
- package/dist/{session-sender-NNVPSPY7.js → session-sender-U2BBUWNO.js} +19 -15
- package/dist/shell-function-NRD4KVUK.js +6 -0
- package/dist/{spec-cmd-OWVTBB4J.js → spec-cmd-FVLJOFGC.js} +12 -13
- package/dist/{starter-pack-OPWUDOWX.js → starter-pack-6LQVLBIA.js} +5 -5
- package/dist/{status-TKCLLKFG.js → status-BINH7MBG.js} +33 -32
- package/dist/{sync-cmd-Q6VYNPWG.js → sync-cmd-VXOUFS4I.js} +18 -14
- package/dist/{watch-ARAGADTF.js → watch-OH645CV2.js} +18 -14
- package/dist/{work-claim-cmd-34FERLYX.js → work-claim-cmd-ZRPSHMPT.js} +16 -17
- package/dist/{work-cmd-7S5B2H2P.js → work-cmd-5I3J2XQQ.js} +12 -13
- package/dist/{work-comment-cmd-SZJSPM5S.js → work-comment-cmd-UCCPWUSR.js} +12 -13
- package/dist/work-logs-cmd-7352CJPG.js +60 -0
- package/dist/{work-open-pr-cmd-RPXKCBWS.js → work-open-pr-cmd-LSH4VHJM.js} +13 -14
- package/dist/{work-pr-cmd-5LGANL32.js → work-pr-cmd-H4OQR26N.js} +12 -13
- package/package.json +2 -2
- package/skill-pack/maintained/outerlayer-cli/SKILL.md +9 -2
- package/skill-pack/maintained/outerlayer-cli/references/find-out-why-a-build-ended.md +76 -0
- package/skill-pack/shipped.json +1 -0
- package/skill-pack/template/build/references/release.md +3 -1
- package/dist/chunk-WBT5X3NH.js +0 -40
- package/dist/chunk-XCCLFVXM.js +0 -401
- package/dist/context-adopt-O5OFXMKI.js +0 -109
- package/dist/context-materialize-Y5IJ4MQT.js +0 -23
- package/dist/{chunk-NACDBXUG.js → chunk-BM63HB2M.js} +1 -1
- package/dist/{chunk-ZRL6HKBY.js → chunk-FVMYKL6L.js} +1 -1
- package/dist/{chunk-52NC2FIU.js → chunk-NTRCK4NH.js} +1 -1
- package/dist/{chunk-XGP3VYOG.js → chunk-P53VEAOF.js} +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @outerlayer/cli
|
|
2
2
|
|
|
3
|
+
## 0.19.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 331130f: A session start that removes an earlier CLI's copies also puts back `.outerlayer-pin.json` when that CLI rewrote it, so `git status` is clean afterwards. A staged change to the pin is left alone.
|
|
8
|
+
|
|
9
|
+
`outerlayer init --local --shell-function` adds the `claude` shell function, and `--local --no-shell-function` removes it. `--local` used to skip both flags without a word.
|
|
10
|
+
|
|
11
|
+
## 0.19.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- 5153995: Add `outerlayer emit step <name>`. An agent reports that it started a step, such as "Review round 2", and the work item's Activity tab shows it.
|
|
16
|
+
|
|
17
|
+
The name is 1 to 80 characters on one line. If the gateway cannot be reached, the command queues the step with the time you ran it and exits 0, and `outerlayer sync` sends it later. If the gateway refuses the step, the command prints the reason and exits 1.
|
|
18
|
+
|
|
19
|
+
- 3d15dba: On a laptop, `outerlayer claude` starts Claude Code with your control plane attached, without writing its files into your repository. It keeps a copy of the control plane under `~/.outerlayer/context/` and starts Claude Code with that copy added.
|
|
20
|
+
|
|
21
|
+
A governed repository can now commit its own `CLAUDE.md`, `AGENTS.md` and skills. `outerlayer init` can add a `claude` function to your zsh or bash startup file, so plain `claude` starts the same way. A session that did not start through `outerlayer claude` says the shared instructions are missing.
|
|
22
|
+
|
|
23
|
+
`outerlayer context materialize` and the pre-commit guard are removed. A session start removes the files, the exclude block and the guard that an earlier CLI added to a checkout.
|
|
24
|
+
|
|
25
|
+
- 3210eaa: `outerlayer work logs` prints the runner's log for a host attempt. A runner now sends that log with every release, and gives a reason when a build command dies of a signal it did not send.
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- ff302c8: The build skill says a pull request closes a GitHub issue, and that a person completes a Linear or Jira issue in its tracker after merge.
|
|
30
|
+
- de29d22: `outerlayer context emit` deletes a generated file whose source is gone, so every orphan `--check` reports is one a plain emit clears. Before, `--check` reported these files and emit left them, so the check kept failing.
|
|
31
|
+
|
|
32
|
+
Neither form reads inside a nested git repository, a submodule, or a governed clone any more. Generated files there belong to that tree, not to the repository being emitted.
|
|
33
|
+
|
|
34
|
+
- 13ee333: Update the bundled `@noble/hashes` library from 1.8 to 2.4. The CLI's pricing code depends on it. Token costs the CLI reports are unchanged.
|
|
35
|
+
|
|
3
36
|
## 0.18.0
|
|
4
37
|
|
|
5
38
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -90,7 +90,8 @@ content:
|
|
|
90
90
|
`release` marks it done. `outerlayer work comment` posts one comment on a
|
|
91
91
|
work item's general thread or a criterion thread — the detected session id
|
|
92
92
|
rides along the same way it does for `emit`, only ever narrowing what the
|
|
93
|
-
comment may do; `outerlayer work threads` reads them back.
|
|
93
|
+
comment may do; `outerlayer work threads` reads them back. `outerlayer work logs`
|
|
94
|
+
reads the runner's log for a host attempt. A runner key
|
|
94
95
|
needs `git.read` and `work.read` to
|
|
95
96
|
list and read items, and `work.claim` to claim, renew or release — `work.claim`
|
|
96
97
|
is not granted to a dashboard role by default, since a claim is a host's
|
|
@@ -103,7 +104,11 @@ content:
|
|
|
103
104
|
credential.
|
|
104
105
|
- **`outerlayer runner start`** lists, claims, renews and releases work
|
|
105
106
|
items the same way `work claim`/`renew`/`release` do, on the schedule its
|
|
106
|
-
config sets
|
|
107
|
+
config sets. Each release also carries the runner's own log for the attempt:
|
|
108
|
+
the lines the runner logged for that item, and the tail of the stage log when
|
|
109
|
+
the attempt ended in provision, sync, cleanup or report. It is scrubbed with
|
|
110
|
+
the same patterns as the build's session, capped at 64 KiB and always sent.
|
|
111
|
+
The runner sends nothing else about the job it runs; the
|
|
107
112
|
agent it starts is a separate process with its own credentials, from the
|
|
108
113
|
`runner` block, never the copy-out daemon's. It also sends a heartbeat at
|
|
109
114
|
the end of every poll: the host, the CLI version, the poll interval, the
|
|
@@ -240,6 +245,11 @@ content:
|
|
|
240
245
|
credited the member who asked for the build. The runner sets that author in
|
|
241
246
|
the build's environment and adds the `Co-authored-by` line with git hooks it
|
|
242
247
|
writes into the build's own directory.
|
|
248
|
+
- **`outerlayer claude`** asks your gateway which repository governs the
|
|
249
|
+
current one (`GET /v1/context/source`, with your API key). When one does, it
|
|
250
|
+
runs `git fetch` of that control plane into a cache under
|
|
251
|
+
`~/.outerlayer/context` and starts Claude Code with the files attached.
|
|
252
|
+
Nothing is written into your working tree.
|
|
243
253
|
- **`outerlayer runner start` with `builtin:container` hooks** also asks your
|
|
244
254
|
gateway which repository governs the item's repository (`GET
|
|
245
255
|
/v1/context/source`, signed with the host key), after the recipe's
|
|
@@ -327,6 +337,13 @@ content:
|
|
|
327
337
|
declared proof kind, from the JSON file you name. The anchoring is the same
|
|
328
338
|
as `emit finding`. Nothing but the file's content and the item number is
|
|
329
339
|
sent.
|
|
340
|
+
- **`outerlayer emit step <name>`** sends the step's name, the time you ran the
|
|
341
|
+
command, a random id for the step and the item number
|
|
342
|
+
(`POST /v1/work-items/steps`). The item is `--item`, or the item the
|
|
343
|
+
recorded session was launched for. When the gateway cannot be reached, the
|
|
344
|
+
same four values, the factory id and the directory are kept in
|
|
345
|
+
`~/.outerlayer/spool/steps.jsonl`, and `outerlayer sync` sends them later.
|
|
346
|
+
Nothing from the session itself is sent.
|
|
330
347
|
- **`outerlayer mcp serve`** is the stdio MCP server your editor spawns. It
|
|
331
348
|
forwards every JSON-RPC message the editor sends to the gateway and returns
|
|
332
349
|
the reply.
|
|
@@ -391,9 +408,11 @@ before it gives up.
|
|
|
391
408
|
| `outerlayer emit artifact <file> --caption <text> [--for <criterion-id>] [--pr <n>]` | Upload a proof artifact — screenshot, recording, report, or log — with its caption. Inside a recorded session it spools locally and ships on the next `sync`; otherwise it uploads immediately, anchored to a pull request or the current checkout. `--replaces` retires artifacts an earlier run uploaded. A JUnit XML file bound with `--for` proves a criterion that declares `test` proof; `--test <name[=path:line]>` binds only the named tests. |
|
|
392
409
|
| `outerlayer emit <name> --result <pass\|fail> [--link <url>] [--body <text>\|--body-file <path>] --item <number>` | Record one named check's outcome on a work item. A check that ran carries the run URL as its proof (`--link`); a judgment you are making yourself carries one sentence (`--body`, or `--body-file` to read it from a file — `-` reads standard input). A `fail` needs at least one of the two; a `pass` needs neither. `--item` names the work item by the number printed when the item was created — always required, in or out of a recorded session; a session records checks on its own item like any other, stored as the session's, but cannot clear a person's fail. Prints the recorded check's id. Who recorded it comes from your API key, never from what you send. |
|
|
393
410
|
| `outerlayer work comment --item <n> [--criterion <id>] --body <text> [--artifact <id>] [--pass\|--fail\|--attach\|--ready]` | Post one comment on a work item's general thread, or on one acceptance criterion's own thread with `--criterion`. `--pass`/`--fail` need a person's own credential and apply to the whole item, so they work on the general thread only and the gateway refuses them with `--criterion`; `--attach` makes the named artifact that criterion's current proof; `--ready` hands a thread back to a person. The detected session id rides along automatically, only ever narrowing what the comment may do. |
|
|
411
|
+
| `outerlayer work logs --item <n> [--attempt <claim id>]` | Print the runner's log for a host attempt on a work item: the newest attempt a runner made, or the one `--attempt` names (an `id` from `claims` in `work status --json`). The log is what the runner did around the agent, with secrets removed on the host. Exits 1 for an attempt that is still running or that an older runner released without a log. |
|
|
394
412
|
| `outerlayer work threads --item <n>` | Read a work item's threads back — the general thread first, then one per criterion with proof or a comment, each with its `waitingOn`. |
|
|
395
413
|
| `outerlayer emit finding --id <id> --category <context\|flaky-test\|tooling\|environment\|defect\|other> --title <text> --file <path> --where <label> [--line <n>] [--item <number>] [--cause <text>] [--detail <text>] [--suggestion <text>] [--command <text>] [--error <text>] [--test <name>] [--symbol <name>] [--started-at <event> --ended-at <event>] [--problem <id> … --link-reason <text> \| --new] …` | Record one problem you hit in the factory. `--category` is one of `context` (an instruction that is wrong, broken or missing), `flaky-test`, `tooling`, `environment`, `defect` (a bug outside your own change) or `other`. A `context` finding also needs `--rule-path` and `--rule-relation` (`wrong`, `broken` or `missing`), and `--rule-quote` unless the relation is `missing`. `--cause`, `--detail`, `--suggestion`, `--command`, `--error` (the first error line), `--test` and `--symbol` carry what a fix needs. Every finding joins a factory-level problem: when a key of the finding matches a known problem it joins that problem; otherwise nothing is stored, the closest problems are printed, and the command exits with code 3. Run it again with `--problem <id> --link-reason <text>` (repeat `--problem` for each problem the finding reports) or with `--new`. Without `--started-at`, it prints the session's recent events with ids and times; name the event where you hit the problem and the one where you got past it with `--started-at` and `--ended-at`. Findings are informational; nothing reads one to pass or fail the work. `--item` names the work item; without it, inside a recorded session, the item that session was launched for is used automatically. Re-emitting the same `--id` on the item replaces that finding and keeps its problems. |
|
|
396
414
|
| `outerlayer emit findings <file> [--item <number>]` | Record a whole batch at once, read from a JSON file (`-` for standard input) with `"schemaVersion": 3` — the same shape and validation as `emit finding`, one record per id. A finding's `startedAt` and `endedAt` may be event ids. The findings that match a key are stored; those that need a choice are listed with their candidates and not stored, and the exit code is 3. Anchored the same way: `--item`, else a recorded session's own item. |
|
|
415
|
+
| `outerlayer emit step <name> [--item <number>]` | Report that you started a step. The name is free text, 1 to 80 characters on one line. The work item's Activity tab shows the step with the time you ran the command. A step has a start and nothing else, so run it again at the start of the next step. `--item` names the work item; without it, inside a recorded session, the item that session was launched for is used. If the gateway cannot be reached, or answers with a 5xx, the step is queued in `~/.outerlayer/spool/steps.jsonl`, the command exits 0, and `outerlayer sync` sends it later with its original time. If the gateway refuses the step, the command prints why and exits 1. |
|
|
397
416
|
| `outerlayer emit criteria <file> [--item <number>]` | Record a work item's acceptance criteria as one list, read from a JSON file (`-` for standard input): `{"criteria": [{"id": "AC-1", "text": "Given …", "proof": null}]}`. An `id` is 1 to 64 characters of `A-Z a-z 0-9 . _ : -`, the same id `emit artifact --for` binds evidence to. `proof` is `video`, `screenshot`, `report`, `log`, `test`, `file` or `null` (any bound artifact proves it). The list holds 1 to 200 criteria, each `text` at most 2,000 characters, with no id twice. It is validated before anything is sent. This list is the only source for the item's Criteria tab. Once an item has a list, only a person can replace it: run the command outside an agent session, with your own login. Anchored the same way as `emit findings`: `--item`, else a recorded session's own item. |
|
|
398
417
|
| `outerlayer mcp install [--transport stdio\|http] [--url] [--name] [--command]` | Write (or update) an `mcpServers` entry in `.mcp.json` for the OuterLayer gateway. Default `stdio`: the client spawns `outerlayer mcp serve`, which reads the API key from `~/.outerlayer/config.json` (or `OUTERLAYER_API_KEY`) each time it connects, so a reconnect picks up a newly saved or rotated key. `--transport http` writes a direct `POST /v1/mcp` entry referencing `${OUTERLAYER_API_KEY}`, resolved by the client from the environment it was launched with. Never writes an API key. Pass `--url`/`--app-id` for self-host. |
|
|
399
418
|
| `outerlayer mcp serve [--url] [--app-id]` | Stdio MCP server bridging stdin/stdout JSON-RPC to the gateway's `POST /v1/mcp`. What the stdio `.mcp.json` entry runs; exits 1 with a clear message when no API key is configured. |
|
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { keepHandWritten, runAgentSetup } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { keepHandWritten, runAgentSetup } from './chunk-CGGPS7SI.js';
|
|
4
|
+
import './chunk-5VML45HH.js';
|
|
5
5
|
import './chunk-YVZJ6GKF.js';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-6X4SQ5MY.js';
|
|
7
7
|
import './chunk-ANPNT6PM.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-N3CUDFCW.js';
|
|
8
|
+
import './chunk-EAEELQVQ.js';
|
|
9
|
+
import './chunk-7UWVLZXD.js';
|
|
10
|
+
import './chunk-FVMYKL6L.js';
|
|
11
|
+
import './chunk-NTRCK4NH.js';
|
|
12
|
+
import './chunk-ZJSNLVCE.js';
|
|
13
|
+
import './chunk-BJ3KTMDH.js';
|
|
14
|
+
import './chunk-NNLA7LLQ.js';
|
|
16
15
|
import './chunk-EABW6AJQ.js';
|
|
16
|
+
import './chunk-CRB3POP4.js';
|
|
17
|
+
import './chunk-YQR6E6OV.js';
|
|
18
|
+
import './chunk-WFSUUUAN.js';
|
|
19
|
+
import './chunk-7VUK5RFS.js';
|
|
20
|
+
import './chunk-VNVZDWO3.js';
|
|
17
21
|
import './chunk-RA3O54FC.js';
|
|
18
22
|
import './chunk-M2ZWWTWZ.js';
|
|
19
23
|
import './chunk-N2PXGQRL.js';
|
|
20
24
|
import './chunk-BQXFBI7T.js';
|
|
21
|
-
import './chunk-XCCLFVXM.js';
|
|
22
|
-
import './chunk-ZJSNLVCE.js';
|
|
23
|
-
import './chunk-BJ3KTMDH.js';
|
|
24
|
-
import './chunk-CRB3POP4.js';
|
|
25
|
-
import './chunk-VNVZDWO3.js';
|
|
26
25
|
import './chunk-Z5GEFMRW.js';
|
|
27
26
|
|
|
28
27
|
createRequire(import.meta.url);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { sanitizeTerminal, readEffectiveArtifactSpoolState } from './chunk-
|
|
4
|
-
import './chunk-N3CUDFCW.js';
|
|
3
|
+
import { sanitizeTerminal, readEffectiveArtifactSpoolState } from './chunk-G3IJ3N6F.js';
|
|
5
4
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
5
|
+
import './chunk-7VUK5RFS.js';
|
|
6
6
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
7
7
|
import './chunk-Z5GEFMRW.js';
|
|
8
8
|
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"2026-10-
|
|
1
|
+
{"id":"2026-10-13T20:24:21.442Z+3c40b5d","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-
|
|
3
|
+
export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-3UZTIRLF.js';
|
|
4
4
|
import './chunk-7RQ73DLO.js';
|
|
5
5
|
import './chunk-CX22S5BA.js';
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-
|
|
6
|
+
import './chunk-QNLX477Q.js';
|
|
7
|
+
import './chunk-7VUK5RFS.js';
|
|
8
8
|
import './chunk-N2PXGQRL.js';
|
|
9
9
|
import './chunk-BQXFBI7T.js';
|
|
10
10
|
import './chunk-Z5GEFMRW.js';
|
|
@@ -1,39 +1,41 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { probeCredentials } from './chunk-
|
|
3
|
+
import { probeCredentials } from './chunk-F2KXHIFI.js';
|
|
4
|
+
import './chunk-B6SCN5NY.js';
|
|
5
|
+
import './chunk-MTP2QEVO.js';
|
|
6
|
+
import './chunk-S5PCA3SN.js';
|
|
4
7
|
import './chunk-3JVYMD4G.js';
|
|
5
|
-
import './chunk-I2UOAV7X.js';
|
|
6
8
|
import './chunk-YETTWTAY.js';
|
|
7
|
-
import './chunk-3OFZM4X6.js';
|
|
8
9
|
import './chunk-SADUQSO4.js';
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-UYOYTKE2.js';
|
|
10
|
+
import './chunk-I2UOAV7X.js';
|
|
11
|
+
import './chunk-BWSUPRDK.js';
|
|
12
|
+
import './chunk-JHGEBPLE.js';
|
|
13
13
|
import './chunk-XNGMQ27R.js';
|
|
14
|
-
import
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-YYYRBYWG.js';
|
|
17
|
-
import './chunk-GOBOJMOJ.js';
|
|
18
|
-
import './chunk-JF42URPU.js';
|
|
14
|
+
import './chunk-R22NZSGA.js';
|
|
15
|
+
import './chunk-KYS3TQAG.js';
|
|
19
16
|
import './chunk-ESVW4MJY.js';
|
|
17
|
+
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-GEMQLBMW.js';
|
|
18
|
+
import './chunk-YYYRBYWG.js';
|
|
19
|
+
import './chunk-AMFWYESY.js';
|
|
20
20
|
import './chunk-TBT347UY.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
24
|
-
import './chunk-
|
|
21
|
+
import './chunk-PIZRPNKR.js';
|
|
22
|
+
import './chunk-7YP7T6GV.js';
|
|
23
|
+
import './chunk-LW7G5TJB.js';
|
|
24
|
+
import './chunk-3ZR7Y23Y.js';
|
|
25
|
+
import './chunk-OGFGZQA3.js';
|
|
26
|
+
import './chunk-VMJPFQNE.js';
|
|
27
|
+
import './chunk-3UZTIRLF.js';
|
|
25
28
|
import './chunk-GGOMT6KF.js';
|
|
26
29
|
import './chunk-X5H2WYMB.js';
|
|
27
|
-
import './chunk-
|
|
28
|
-
import './chunk-
|
|
29
|
-
import './chunk-WGAUY5LE.js';
|
|
30
|
+
import './chunk-XZ4H4X5F.js';
|
|
31
|
+
import './chunk-QEFKA2QD.js';
|
|
30
32
|
import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
|
|
31
|
-
import './chunk-
|
|
32
|
-
import './chunk-
|
|
33
|
-
import './chunk-
|
|
34
|
-
import './chunk-
|
|
35
|
-
import './chunk-
|
|
36
|
-
import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-
|
|
33
|
+
import './chunk-FBTGMSQF.js';
|
|
34
|
+
import './chunk-IF2OSI5T.js';
|
|
35
|
+
import './chunk-CG36IONK.js';
|
|
36
|
+
import './chunk-G3IJ3N6F.js';
|
|
37
|
+
import './chunk-BM63HB2M.js';
|
|
38
|
+
import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-P53VEAOF.js';
|
|
37
39
|
import './chunk-UXYLWVTQ.js';
|
|
38
40
|
import './chunk-7RQ73DLO.js';
|
|
39
41
|
import './chunk-3CWUOFV6.js';
|
|
@@ -41,36 +43,35 @@ import './chunk-QOZKPLVJ.js';
|
|
|
41
43
|
import './chunk-CX22S5BA.js';
|
|
42
44
|
import './chunk-ECODQ7II.js';
|
|
43
45
|
import './chunk-JBJTC3UU.js';
|
|
44
|
-
import './chunk-
|
|
46
|
+
import './chunk-PSN33ERW.js';
|
|
45
47
|
import './chunk-F7CU5ABH.js';
|
|
46
48
|
import './chunk-BKO6JEZI.js';
|
|
47
|
-
import './chunk-
|
|
48
|
-
import './chunk-NACDBXUG.js';
|
|
49
|
+
import './chunk-QNLX477Q.js';
|
|
49
50
|
import './chunk-GOSFARMS.js';
|
|
50
51
|
import './chunk-ANPNT6PM.js';
|
|
51
52
|
import './chunk-T2Q7ISPE.js';
|
|
52
53
|
import './chunk-WZBHBH3J.js';
|
|
53
54
|
import './chunk-5QRP3MVS.js';
|
|
54
|
-
import './chunk-
|
|
55
|
-
import './chunk-
|
|
56
|
-
import './chunk-
|
|
57
|
-
import './chunk-
|
|
58
|
-
import './chunk-
|
|
59
|
-
import './chunk-
|
|
60
|
-
import './chunk-
|
|
61
|
-
import './chunk-
|
|
55
|
+
import './chunk-LLM3I5YU.js';
|
|
56
|
+
import './chunk-EAEELQVQ.js';
|
|
57
|
+
import './chunk-7UWVLZXD.js';
|
|
58
|
+
import './chunk-FVMYKL6L.js';
|
|
59
|
+
import './chunk-NTRCK4NH.js';
|
|
60
|
+
import './chunk-ZJSNLVCE.js';
|
|
61
|
+
import './chunk-BJ3KTMDH.js';
|
|
62
|
+
import './chunk-G2YNJIGF.js';
|
|
63
|
+
import './chunk-NNLA7LLQ.js';
|
|
62
64
|
import './chunk-EABW6AJQ.js';
|
|
65
|
+
import './chunk-CRB3POP4.js';
|
|
66
|
+
import './chunk-YQR6E6OV.js';
|
|
67
|
+
import './chunk-TUSYOL2O.js';
|
|
68
|
+
import './chunk-WFSUUUAN.js';
|
|
69
|
+
import './chunk-7VUK5RFS.js';
|
|
70
|
+
import './chunk-VNVZDWO3.js';
|
|
63
71
|
import './chunk-RA3O54FC.js';
|
|
64
72
|
import './chunk-M2ZWWTWZ.js';
|
|
65
73
|
import './chunk-N2PXGQRL.js';
|
|
66
74
|
import './chunk-BQXFBI7T.js';
|
|
67
|
-
import './chunk-ULSIJGLS.js';
|
|
68
|
-
import './chunk-G2YNJIGF.js';
|
|
69
|
-
import './chunk-XCCLFVXM.js';
|
|
70
|
-
import './chunk-ZJSNLVCE.js';
|
|
71
|
-
import './chunk-BJ3KTMDH.js';
|
|
72
|
-
import './chunk-CRB3POP4.js';
|
|
73
|
-
import './chunk-VNVZDWO3.js';
|
|
74
75
|
import './chunk-Z5GEFMRW.js';
|
|
75
76
|
import { readFileSync } from 'fs';
|
|
76
77
|
import { join, dirname } from 'path';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { parseSize } from './chunk-7RQ73DLO.js';
|
|
4
4
|
import { BUILDKIT_IMAGE } from './chunk-CX22S5BA.js';
|
|
5
|
-
import { compareVersions } from './chunk-
|
|
5
|
+
import { compareVersions } from './chunk-QNLX477Q.js';
|
|
6
6
|
import { runnerDir } from './chunk-N2PXGQRL.js';
|
|
7
7
|
import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-BQXFBI7T.js';
|
|
8
8
|
import { createHash } from 'crypto';
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { currentCliBuild } from './chunk-OGFGZQA3.js';
|
|
4
|
+
import { createDockerHost, childEnvironment, spawnRun } from './chunk-VMJPFQNE.js';
|
|
5
|
+
import { builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, JUDGE_DIR, MAX_REPORT_BYTES } from './chunk-3UZTIRLF.js';
|
|
5
6
|
import { execCapture } from './chunk-GGOMT6KF.js';
|
|
6
7
|
import { GUEST_CID } from './chunk-X5H2WYMB.js';
|
|
7
|
-
import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim,
|
|
8
|
-
import { WorkCommandError } from './chunk-
|
|
8
|
+
import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-XZ4H4X5F.js';
|
|
9
|
+
import { WorkCommandError } from './chunk-FBTGMSQF.js';
|
|
9
10
|
import { hostAllowed } from './chunk-UXYLWVTQ.js';
|
|
10
11
|
import { parseDuKilobytes } from './chunk-7RQ73DLO.js';
|
|
11
12
|
import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-3CWUOFV6.js';
|
|
12
13
|
import { RecipeError } from './chunk-QOZKPLVJ.js';
|
|
13
14
|
import { CLAUDE_CODE_VERSION, firecrackerArch, MICROVM_ARCHES, DEFAULT_BASE_IMAGE, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GUEST_ASSETS_VERSION } from './chunk-CX22S5BA.js';
|
|
14
15
|
import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
16
|
+
import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-QNLX477Q.js';
|
|
17
|
+
import { sharedSkillNames, skillConflictMessage } from './chunk-LLM3I5YU.js';
|
|
18
|
+
import { versionAtLeast, MINIMUM_CLAUDE_VERSION } from './chunk-G2YNJIGF.js';
|
|
19
|
+
import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-WFSUUUAN.js';
|
|
20
|
+
import { downconvertSession } from './chunk-7VUK5RFS.js';
|
|
19
21
|
import { rootfsPathFor, diskTemplatesDir, RUNNER_FILE_MODE, deliveryDir, ghConfigDir, runnerDirOfBuild, spoolDir, mirrorDir, buildDir, RUNNER_DIR_MODE, SHIM_DIR, vmAssetsDir } from './chunk-N2PXGQRL.js';
|
|
20
22
|
import { repositoriesOf, primaryOf, RELAY_PORT, repositoryPath, CHECKOUT_DIR, lifecycleWorkdir, claudeCredential, buildEnvironment, startBuildServices, checkEnvironment, AGENT_CREDENTIAL_MISSING, checkoutPath, JOB_MOUNT } from './chunk-BQXFBI7T.js';
|
|
21
|
-
import { versionAtLeast, MINIMUM_CLAUDE_VERSION } from './chunk-G2YNJIGF.js';
|
|
22
23
|
import { readFileSync, existsSync, mkdirSync, chmodSync, truncateSync, rmSync, writeFileSync, readdirSync, lstatSync, copyFileSync, accessSync, constants, statSync, rmdirSync, renameSync, unlinkSync, openSync, closeSync, mkdtempSync, createWriteStream, createReadStream } from 'fs';
|
|
23
24
|
import { join, dirname, basename } from 'path';
|
|
24
25
|
import { spawnSync, spawn } from 'child_process';
|
|
@@ -731,7 +732,7 @@ async function deliveryRefusal(input, staged) {
|
|
|
731
732
|
const ownNames = new Set(own.stdout.split("\n").map((name) => name.trim()));
|
|
732
733
|
const clash = sharedSkillNames(join(staged.dir, "tree")).find((name) => ownNames.has(name));
|
|
733
734
|
if (clash === void 0) return void 0;
|
|
734
|
-
return `context_skill_conflict:
|
|
735
|
+
return `context_skill_conflict: ${skillConflictMessage({ skill: clash, repository: input.repository, controlPlane: staged.repository })}, and would replace it in this build; rename or remove it from the repository`;
|
|
735
736
|
}
|
|
736
737
|
async function deliver(input, staged) {
|
|
737
738
|
const dir = deliveryDir(staged.repository, staged.sha);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { C } from './chunk-ANPNT6PM.js';
|
|
4
|
-
import { retiredSkillPaths, removeRetiredSkills } from './chunk-
|
|
5
|
-
import { maintainedFilesForExistingSkills, loadMaintainedFiles, writeMaintainedFiles } from './chunk-
|
|
6
|
-
import { emitTree, parseOuterlayerConfig, classifyTree, generatedHeaderSource, CONTEXT_PIN_FILENAME, normalizePath } from './chunk-X5N6KC6V.js';
|
|
4
|
+
import { retiredSkillPaths, removeRetiredSkills } from './chunk-7UWVLZXD.js';
|
|
5
|
+
import { maintainedFilesForExistingSkills, loadMaintainedFiles, writeMaintainedFiles } from './chunk-NNLA7LLQ.js';
|
|
7
6
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
8
|
-
import {
|
|
7
|
+
import { emitTree, parseOuterlayerConfig, classifyTree, generatedHeaderSource, CONTEXT_PIN_FILENAME, normalizePath } from './chunk-WFSUUUAN.js';
|
|
8
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync, copyFileSync, unlinkSync, rmdirSync, readdirSync } from 'fs';
|
|
9
9
|
import { join, dirname, relative, sep } from 'path';
|
|
10
10
|
|
|
11
11
|
createRequire(import.meta.url);
|
|
@@ -32,6 +32,9 @@ function discoverOuterlayerPaths(repoRoot) {
|
|
|
32
32
|
walk(repoRoot, repoRoot, false, out);
|
|
33
33
|
return out.sort();
|
|
34
34
|
}
|
|
35
|
+
function isForeignTree(dir) {
|
|
36
|
+
return existsSync(join(dir, ".git")) || existsSync(join(dir, CONTEXT_PIN_FILENAME));
|
|
37
|
+
}
|
|
35
38
|
function walk(dir, repoRoot, insideOuterlayer, out) {
|
|
36
39
|
let entries;
|
|
37
40
|
try {
|
|
@@ -44,7 +47,7 @@ function walk(dir, repoRoot, insideOuterlayer, out) {
|
|
|
44
47
|
const full = join(dir, entry.name);
|
|
45
48
|
if (entry.isDirectory()) {
|
|
46
49
|
if (!insideOuterlayer && SKIP_DIRS.has(entry.name)) continue;
|
|
47
|
-
if (!insideOuterlayer &&
|
|
50
|
+
if (!insideOuterlayer && isForeignTree(full)) continue;
|
|
48
51
|
walk(full, repoRoot, insideOuterlayer || entry.name === ".outerlayer", out);
|
|
49
52
|
} else if (entry.isFile() && insideOuterlayer) {
|
|
50
53
|
out.push(toRepoRelative(repoRoot, full));
|
|
@@ -82,13 +85,14 @@ function writeOutputs(repoRoot, result, maintained) {
|
|
|
82
85
|
}
|
|
83
86
|
return { files, copies, maintained: [...changedMaintained.created, ...changedMaintained.rewritten] };
|
|
84
87
|
}
|
|
85
|
-
function renderSuccess(targets, files, copies, maintained, retired) {
|
|
88
|
+
function renderSuccess(targets, files, copies, maintained, retired, orphaned) {
|
|
86
89
|
const copySuffix = copies.length > 0 ? `, ${copies.length} ${copies.length === 1 ? "copy" : "copies"}` : "";
|
|
87
90
|
const lines = [
|
|
88
91
|
`${C.green}\u2713${C.reset} emitted ${files.length} file${files.length === 1 ? "" : "s"}${copySuffix} for ${C.dim}${targets.join(", ")}${C.reset}`
|
|
89
92
|
];
|
|
90
93
|
for (const path of maintained) lines.push(` ${C.dim}updated ${path} to this CLI's version${C.reset}`);
|
|
91
94
|
for (const path of retired) lines.push(` ${C.dim}removed ${path}: this skill has a new name${C.reset}`);
|
|
95
|
+
for (const path of orphaned) lines.push(` ${C.dim}removed ${path}: its source is gone${C.reset}`);
|
|
92
96
|
return lines.join("\n");
|
|
93
97
|
}
|
|
94
98
|
function renderFailure(errors) {
|
|
@@ -132,7 +136,7 @@ function walkAll(dir, repoRoot, out) {
|
|
|
132
136
|
if (entry.isSymbolicLink()) continue;
|
|
133
137
|
const full = join(dir, entry.name);
|
|
134
138
|
if (entry.isDirectory()) {
|
|
135
|
-
if (SKIP_DIRS.has(entry.name) || entry.name === ".outerlayer") continue;
|
|
139
|
+
if (SKIP_DIRS.has(entry.name) || entry.name === ".outerlayer" || isForeignTree(full)) continue;
|
|
136
140
|
walkAll(full, repoRoot, out);
|
|
137
141
|
} else if (entry.isFile()) {
|
|
138
142
|
out.push(toRepoRelative(repoRoot, full));
|
|
@@ -155,6 +159,21 @@ function findOrphans(repoRoot, computedFiles, sourcePaths) {
|
|
|
155
159
|
}
|
|
156
160
|
return orphans;
|
|
157
161
|
}
|
|
162
|
+
function removeOrphans(repoRoot, orphans) {
|
|
163
|
+
const removed = [];
|
|
164
|
+
for (const { path } of orphans) {
|
|
165
|
+
unlinkSync(join(repoRoot, path));
|
|
166
|
+
removed.push(path);
|
|
167
|
+
for (let dir = dirname(path); dir !== "."; dir = dirname(dir)) {
|
|
168
|
+
try {
|
|
169
|
+
rmdirSync(join(repoRoot, dir));
|
|
170
|
+
} catch {
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return removed;
|
|
176
|
+
}
|
|
158
177
|
function withholdKept(repoRoot, result, keep) {
|
|
159
178
|
if (keep === void 0) return { result, kept: [] };
|
|
160
179
|
const kept = [];
|
|
@@ -187,9 +206,11 @@ function runEmit(opts = {}) {
|
|
|
187
206
|
const emitted = emitTree(built.input);
|
|
188
207
|
const { result, kept } = withholdKept(cwd, emitted, opts.keep);
|
|
189
208
|
const hasErrors = result.errors.length > 0;
|
|
190
|
-
|
|
209
|
+
const outputs = new Set(emitted.files.map((f) => f.path));
|
|
210
|
+
if (opts.check) return runCheck(cwd, opts, targets, result, hasErrors, outputs, built.sourcePaths, maintained, kept, retired);
|
|
191
211
|
const written = hasErrors ? { files: [], copies: [], maintained: [] } : writeOutputs(cwd, result, maintained);
|
|
192
212
|
const removed = hasErrors ? [] : removeRetiredSkills(cwd);
|
|
213
|
+
const orphaned = hasErrors ? [] : removeOrphans(cwd, findOrphans(cwd, outputs, built.sourcePaths));
|
|
193
214
|
const exitCode = hasErrors ? 1 : 0;
|
|
194
215
|
const output = opts.json ? JSON.stringify({
|
|
195
216
|
targets,
|
|
@@ -197,9 +218,10 @@ function runEmit(opts = {}) {
|
|
|
197
218
|
copies: written.copies,
|
|
198
219
|
maintained: written.maintained,
|
|
199
220
|
retired: removed,
|
|
221
|
+
orphaned,
|
|
200
222
|
warnings: result.warnings,
|
|
201
223
|
errors: result.errors
|
|
202
|
-
}) : hasErrors ? renderFailure(result.errors) : renderSuccess(targets, written.files, written.copies, written.maintained, removed);
|
|
224
|
+
}) : hasErrors ? renderFailure(result.errors) : renderSuccess(targets, written.files, written.copies, written.maintained, removed, orphaned);
|
|
203
225
|
if (!opts.quiet) {
|
|
204
226
|
if (opts.json) {
|
|
205
227
|
process.stdout.write(output + "\n");
|
|
@@ -218,13 +240,14 @@ function runEmit(opts = {}) {
|
|
|
218
240
|
maintained: written.maintained,
|
|
219
241
|
kept,
|
|
220
242
|
retired: removed,
|
|
243
|
+
orphaned,
|
|
221
244
|
warnings: result.warnings,
|
|
222
245
|
errors: result.errors,
|
|
223
246
|
output,
|
|
224
247
|
exitCode
|
|
225
248
|
};
|
|
226
249
|
}
|
|
227
|
-
function runCheck(cwd, opts, targets, result, hasErrors, sourcePaths, maintained, kept, retired) {
|
|
250
|
+
function runCheck(cwd, opts, targets, result, hasErrors, outputs, sourcePaths, maintained, kept, retired) {
|
|
228
251
|
const drift = [];
|
|
229
252
|
if (!hasErrors) {
|
|
230
253
|
for (const path of retired) drift.push({ kind: "retired", path });
|
|
@@ -232,7 +255,6 @@ function runCheck(cwd, opts, targets, result, hasErrors, sourcePaths, maintained
|
|
|
232
255
|
const d = compareFile(cwd, file.path, file.content);
|
|
233
256
|
if (d) drift.push(d);
|
|
234
257
|
}
|
|
235
|
-
const computedFiles = new Set(result.files.map((f) => f.path));
|
|
236
258
|
for (const file of result.files) {
|
|
237
259
|
const d = compareFile(cwd, file.path, file.content);
|
|
238
260
|
if (d) drift.push(d);
|
|
@@ -242,7 +264,7 @@ function runCheck(cwd, opts, targets, result, hasErrors, sourcePaths, maintained
|
|
|
242
264
|
if (d) drift.push(d);
|
|
243
265
|
}
|
|
244
266
|
const retiredPaths = new Set(retired);
|
|
245
|
-
drift.push(...findOrphans(cwd,
|
|
267
|
+
drift.push(...findOrphans(cwd, outputs, sourcePaths).filter((d) => !retiredPaths.has(d.path)));
|
|
246
268
|
drift.sort((a, b) => a.path.localeCompare(b.path) || a.kind.localeCompare(b.kind));
|
|
247
269
|
}
|
|
248
270
|
const exitCode = hasErrors || drift.length > 0 ? 1 : 0;
|
|
@@ -258,7 +280,7 @@ function runCheck(cwd, opts, targets, result, hasErrors, sourcePaths, maintained
|
|
|
258
280
|
`);
|
|
259
281
|
}
|
|
260
282
|
}
|
|
261
|
-
return { targets, files: [], copies: [], maintained: [], kept, retired: [], warnings: result.warnings, errors: result.errors, drift, output, exitCode };
|
|
283
|
+
return { targets, files: [], copies: [], maintained: [], kept, retired: [], orphaned: [], warnings: result.warnings, errors: result.errors, drift, output, exitCode };
|
|
262
284
|
}
|
|
263
285
|
|
|
264
286
|
export { EmitError, runEmit };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { C } from './chunk-ANPNT6PM.js';
|
|
4
|
-
import { resolvePackRoot, loadTemplateFiles, loadMaintainedFiles, TEMPLATE_SKILLS, skillDir, writeMaintainedFiles, MAINTAINED_SKILLS } from './chunk-
|
|
5
|
-
import { resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
4
|
+
import { resolvePackRoot, loadTemplateFiles, loadMaintainedFiles, TEMPLATE_SKILLS, skillDir, writeMaintainedFiles, MAINTAINED_SKILLS } from './chunk-NNLA7LLQ.js';
|
|
6
5
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
6
|
+
import { resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
7
7
|
import { readFileSync, existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
8
8
|
import { join, dirname } from 'path';
|
|
9
9
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { skillDir, FORMER_MAINTAINED_NAMES, isMaintainedCopy } from './chunk-
|
|
4
|
-
import { emitTree, ALL_TARGET_IDS, classifyTree } from './chunk-X5N6KC6V.js';
|
|
3
|
+
import { skillDir, FORMER_MAINTAINED_NAMES, isMaintainedCopy } from './chunk-NNLA7LLQ.js';
|
|
5
4
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
5
|
+
import { emitTree, ALL_TARGET_IDS, classifyTree } from './chunk-WFSUUUAN.js';
|
|
6
6
|
import { readFileSync, existsSync, unlinkSync, rmdirSync, readdirSync } from 'fs';
|
|
7
7
|
import { join, dirname, relative, sep } from 'path';
|
|
8
8
|
|
|
@@ -22279,7 +22279,7 @@ var ArtifactTombstoneRecordSchema = external_exports.looseObject({
|
|
|
22279
22279
|
});
|
|
22280
22280
|
external_exports.union([ArtifactSpoolRecordSchema, ArtifactTombstoneRecordSchema]);
|
|
22281
22281
|
var EMITTED_RESULTS = ["pass", "fail"];
|
|
22282
|
-
var RESERVED_EMIT_NAMES = ["artifact", "criteria", "finding", "findings"];
|
|
22282
|
+
var RESERVED_EMIT_NAMES = ["artifact", "criteria", "finding", "findings", "step"];
|
|
22283
22283
|
var EmittedNameSchema = external_exports.string().regex(/^[a-z][a-z0-9._-]{0,63}$/).superRefine((name, ctx) => {
|
|
22284
22284
|
if (RESERVED_EMIT_NAMES.includes(name)) {
|
|
22285
22285
|
ctx.addIssue({
|
|
@@ -22324,6 +22324,19 @@ external_exports.object({
|
|
|
22324
22324
|
item: external_exports.object({ number: external_exports.number().int().positive() }).optional(),
|
|
22325
22325
|
sessionId: external_exports.string().optional()
|
|
22326
22326
|
}).superRefine((request, ctx) => refuseDuplicateIds(request.criteria, ctx));
|
|
22327
|
+
var STEP_NAME_MAX = 80;
|
|
22328
|
+
var CONTROL_CHARACTER = /[\u0000-\u001f\u007f-\u009f\u2028\u2029]/;
|
|
22329
|
+
var StepNameSchema = external_exports.string().trim().min(1, "name must not be empty").max(STEP_NAME_MAX, `name must be at most ${STEP_NAME_MAX} characters`).refine((name) => !CONTROL_CHARACTER.test(name), {
|
|
22330
|
+
message: "name must be one line, with no line break or control character"
|
|
22331
|
+
});
|
|
22332
|
+
var StepBodySchema = external_exports.object({
|
|
22333
|
+
/** Minted by the CLI once per step; the same id on the same item is the same step. */
|
|
22334
|
+
clientStepId: external_exports.string().uuid(),
|
|
22335
|
+
name: StepNameSchema,
|
|
22336
|
+
item: external_exports.object({ number: external_exports.number().int().positive() }),
|
|
22337
|
+
/** When the agent started the step. The gateway clamps it to the receive time. */
|
|
22338
|
+
startedAt: external_exports.string().datetime({ offset: true })
|
|
22339
|
+
});
|
|
22327
22340
|
var FINDING_CATEGORIES = ["context", "flaky-test", "tooling", "environment", "defect", "other"];
|
|
22328
22341
|
var FINDING_RULE_RELATIONS = ["wrong", "broken", "missing"];
|
|
22329
22342
|
var FINDING_ID_MAX_LENGTH = 64;
|
|
@@ -22531,4 +22544,4 @@ xmlchars/xmlns/1.0/ed3.js:
|
|
|
22531
22544
|
*)
|
|
22532
22545
|
*/
|
|
22533
22546
|
|
|
22534
|
-
export { ARTIFACT_KINDS, ARTIFACT_MAX_CAPTION_LENGTH, ARTIFACT_MAX_FILENAME_LENGTH, ARTIFACT_MAX_REPLACES_TARGETS, ArtifactCriterionIdSchema, ArtifactSpoolRecordSchema, ArtifactTombstoneRecordSchema, BUCKET_MODEL_MAX_LENGTH, CAPTURE_TIERS, CriteriaListSchema, EMITTED_RESULTS, EMITTED_RESULT_MAX_BODY_LENGTH, EMITTED_RESULT_MAX_LINK_LENGTH, EVENT_TYPES, EmittedNameSchema, FindingBatchSchema, FindingsResponseSchema, INPUT_BAND_BOUNDARIES, RESERVED_EMIT_NAMES, SAME_PROBLEM_RULES, SCHEMA_VERSION, SPEED_MAX_LENGTH, bannedPathsForTier, bindTests, downconvertSession, inferArtifactKind, inputBandOf, isHumanUserTurn, mediaTypeForArtifactPath, parseAgentSession, parseJunit, parseTestSelector, turnCountBound };
|
|
22547
|
+
export { ARTIFACT_KINDS, ARTIFACT_MAX_CAPTION_LENGTH, ARTIFACT_MAX_FILENAME_LENGTH, ARTIFACT_MAX_REPLACES_TARGETS, ArtifactCriterionIdSchema, ArtifactSpoolRecordSchema, ArtifactTombstoneRecordSchema, BUCKET_MODEL_MAX_LENGTH, CAPTURE_TIERS, CriteriaListSchema, EMITTED_RESULTS, EMITTED_RESULT_MAX_BODY_LENGTH, EMITTED_RESULT_MAX_LINK_LENGTH, EVENT_TYPES, EmittedNameSchema, FindingBatchSchema, FindingsResponseSchema, INPUT_BAND_BOUNDARIES, RESERVED_EMIT_NAMES, SAME_PROBLEM_RULES, SCHEMA_VERSION, SPEED_MAX_LENGTH, StepBodySchema, StepNameSchema, bannedPathsForTier, bindTests, downconvertSession, inferArtifactKind, inputBandOf, isHumanUserTurn, mediaTypeForArtifactPath, parseAgentSession, parseJunit, parseTestSelector, turnCountBound };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { DEFAULT_UNIT_NAME } from './chunk-
|
|
3
|
+
import { DEFAULT_UNIT_NAME } from './chunk-QEFKA2QD.js';
|
|
4
4
|
import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
|
|
5
5
|
import { RUNNER_FILE_MODE } from './chunk-N2PXGQRL.js';
|
|
6
6
|
import { existsSync, readFileSync, writeFileSync, renameSync, rmSync } from 'fs';
|