@outerlayer/cli 0.33.0-next.20261023003700 → 0.33.0-next.20261023120437

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 (107) hide show
  1. package/README.md +11 -4
  2. package/dist/{agent-setup-55ZDEXCS.js → agent-setup-YHEW3WXB.js} +10 -10
  3. package/dist/{artifact-link-cmd-6FF2Y6QI.js → artifact-link-cmd-7FYKWA7J.js} +2 -2
  4. package/dist/{build-disk-JHTMPRAA.js → build-disk-ECTLWTPC.js} +4 -4
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-Y4P7QARW.js → builder-LUPHKUFM.js} +3 -3
  7. package/dist/{check-MRYFTLOO.js → check-4QNLMDP7.js} +28 -28
  8. package/dist/{chunk-3RIFVLPO.js → chunk-2JLM4GUF.js} +12 -12
  9. package/dist/{chunk-G63KT5I5.js → chunk-44V5SD4G.js} +1 -1
  10. package/dist/{chunk-ULBNTSAD.js → chunk-5M2J7B5N.js} +2 -2
  11. package/dist/{chunk-LJG6EMLJ.js → chunk-6CXNWKWD.js} +1 -1
  12. package/dist/{chunk-BKADJZ7F.js → chunk-6SPD266O.js} +3 -3
  13. package/dist/{chunk-Q2CMEQV7.js → chunk-7IFYI7XF.js} +3 -3
  14. package/dist/{chunk-AU346ENF.js → chunk-7UPMYRPS.js} +4 -4
  15. package/dist/{chunk-NSPRS7WK.js → chunk-7V5GUEDU.js} +1 -1
  16. package/dist/{chunk-EUVE2EAE.js → chunk-AKZRGFGT.js} +3 -3
  17. package/dist/{chunk-2N67C6IV.js → chunk-D3EDZPJR.js} +5 -5
  18. package/dist/{chunk-BJQ25STI.js → chunk-DKFUXYGD.js} +4 -4
  19. package/dist/{chunk-HE4FBF4T.js → chunk-EHOFFTVX.js} +2 -2
  20. package/dist/{chunk-HXA5GIHK.js → chunk-EJL6CWSP.js} +6 -6
  21. package/dist/chunk-ER6KQCVJ.js +18 -0
  22. package/dist/{chunk-DISTLL2Q.js → chunk-EXZACZ2P.js} +1 -1
  23. package/dist/{chunk-E6CO3MJE.js → chunk-F2D5BSXS.js} +38 -2
  24. package/dist/{chunk-UIUGTW5C.js → chunk-FT7MUQGO.js} +2 -2
  25. package/dist/{chunk-PWH3BEZF.js → chunk-FZUFUVLK.js} +13 -13
  26. package/dist/{chunk-XL2XWWU7.js → chunk-GO2DUPQS.js} +3 -3
  27. package/dist/{chunk-B2JURP6A.js → chunk-HLZMAJJD.js} +2 -2
  28. package/dist/{chunk-2EGCI2VW.js → chunk-IUPY54BZ.js} +10 -10
  29. package/dist/{chunk-GFYEMCPP.js → chunk-JEVKOZBB.js} +1 -1
  30. package/dist/{chunk-DY7Y7UT4.js → chunk-KUE4V2SK.js} +2 -2
  31. package/dist/{chunk-SVDOA4W2.js → chunk-L6MDOEHN.js} +7 -7
  32. package/dist/{chunk-HJYBWJAS.js → chunk-LYGI3T66.js} +2 -2
  33. package/dist/{chunk-EWVYQLD3.js → chunk-MPC2UAW2.js} +1 -1
  34. package/dist/{chunk-5DNCFOXA.js → chunk-NIY2UBT6.js} +1 -1
  35. package/dist/{chunk-FR7HWWCF.js → chunk-OGMXVPCS.js} +1 -1
  36. package/dist/{chunk-6Z4SZHV2.js → chunk-QKNFU5GA.js} +5 -5
  37. package/dist/{chunk-2WMZPJVE.js → chunk-S5CNYXUA.js} +4 -4
  38. package/dist/{chunk-7HHNGZS5.js → chunk-SQQD5MST.js} +4 -4
  39. package/dist/{chunk-QPWFVE3X.js → chunk-UK4RGH46.js} +2 -2
  40. package/dist/{chunk-JHTJPQSL.js → chunk-V673DFOL.js} +4 -4
  41. package/dist/{chunk-RQJMN5TJ.js → chunk-VWQCYOBS.js} +2 -2
  42. package/dist/{chunk-W2AEL4BJ.js → chunk-X4JEBMYN.js} +1 -1
  43. package/dist/{chunk-T5REPMNL.js → chunk-XCRET2GZ.js} +2 -2
  44. package/dist/{chunk-XHHTMFCX.js → chunk-YGZLRX5U.js} +1 -1
  45. package/dist/{chunk-SDU2IE22.js → chunk-YSM4EEUK.js} +12 -12
  46. package/dist/{chunk-VT4TTJPG.js → chunk-YXMGHGHR.js} +5 -5
  47. package/dist/{chunk-AVTI3FL5.js → chunk-ZF24JN7R.js} +1 -1
  48. package/dist/{claude-launcher-NTYHJUJM.js → claude-launcher-YRPW4SWA.js} +5 -5
  49. package/dist/{cli-K6XGL4EZ.js → cli-BC7JWQUQ.js} +149 -103
  50. package/dist/{command-7FAIIQGF.js → command-SQ4466SL.js} +19 -19
  51. package/dist/{config-QXMUWJAQ.js → config-MVA7YTFW.js} +5 -5
  52. package/dist/{connect-cmd-P5GASVAF.js → connect-cmd-KWXV2CGC.js} +8 -8
  53. package/dist/{container-start-CVP3NTDG.js → container-start-AQJ64LCF.js} +20 -20
  54. package/dist/{context-cleanup-BX5Y3AFL.js → context-cleanup-A2FGVVPH.js} +3 -3
  55. package/dist/{context-show-cmd-3EPJ7CJC.js → context-show-cmd-6F4UF4ND.js} +9 -9
  56. package/dist/{control-plane-launch-A3YCHQNQ.js → control-plane-launch-7SOH6IMA.js} +6 -6
  57. package/dist/{dist-ACTRIBVW.js → dist-IG2DKUJJ.js} +2 -2
  58. package/dist/{docker-ANW76BNW.js → docker-YKYQJHL2.js} +3 -3
  59. package/dist/{doctor-GJAHI3KU.js → doctor-4YZOP343.js} +20 -20
  60. package/dist/{emit-artifact-cmd-FDPJKGOO.js → emit-artifact-cmd-6QTTWBVN.js} +13 -13
  61. package/dist/{emit-cmd-OX6LYS6I.js → emit-cmd-3FG7FEGO.js} +6 -6
  62. package/dist/{emit-criteria-cmd-3SVGCMJN.js → emit-criteria-cmd-22VVCL2W.js} +10 -10
  63. package/dist/{emit-demo-cmd-6DF2QIAS.js → emit-demo-cmd-IQRS7BP2.js} +243 -51
  64. package/dist/{emit-finding-cmd-TLJWBGQE.js → emit-finding-cmd-TXDPJFVT.js} +10 -10
  65. package/dist/{emit-result-cmd-CJNVDV5V.js → emit-result-cmd-QHJDUC7J.js} +12 -12
  66. package/dist/{emit-step-cmd-347CZO7Y.js → emit-step-cmd-TQCOLXAA.js} +10 -10
  67. package/dist/{findings-cmd-LHTYEHYB.js → findings-cmd-EURKADAY.js} +10 -10
  68. package/dist/{fleet-readiness-KGR5AC2J.js → fleet-readiness-GXDSFTLP.js} +8 -8
  69. package/dist/{governing-source-JZQZUTMA.js → governing-source-IRRP7G5G.js} +13 -13
  70. package/dist/{hook-fast-6WDMNZG5.js → hook-fast-3IYSWDL4.js} +1 -1
  71. package/dist/index.js +4 -4
  72. package/dist/{init-ZQ5B3TJZ.js → init-63X6ECKF.js} +19 -19
  73. package/dist/{init-XDOKWBL2.js → init-T64C4MID.js} +19 -19
  74. package/dist/{init-cmd-YMGW2WXJ.js → init-cmd-7CGCDLBZ.js} +18 -18
  75. package/dist/{init-update-X7YLZL6H.js → init-update-LFKSC6Y4.js} +17 -17
  76. package/dist/{install-QPA7DQHO.js → install-47Z7VNWP.js} +6 -6
  77. package/dist/{layout-JGF7MJHG.js → layout-44S4OYLK.js} +4 -4
  78. package/dist/{login-browser-3RIZQJY2.js → login-browser-BJZYKWHF.js} +2 -2
  79. package/dist/{loop-UJL2UCUM.js → loop-YJF27PUS.js} +28 -28
  80. package/dist/{machine-2YPAFFCH.js → machine-VBITNWTR.js} +19 -19
  81. package/dist/{machine-skills-AGERT2HN.js → machine-skills-GOKW3U5N.js} +4 -4
  82. package/dist/{runner-env-HOUXKWIJ.js → runner-env-ILP6BAC2.js} +7 -7
  83. package/dist/{runner-identity-KPUVTRLS.js → runner-identity-MF3AYBR6.js} +3 -3
  84. package/dist/{runner-key-FUJD66R6.js → runner-key-5SGBLTDJ.js} +19 -19
  85. package/dist/{session-sender-7B3ZDWMC.js → session-sender-2DYAJIMM.js} +13 -13
  86. package/dist/{spec-cmd-Q26NE22H.js → spec-cmd-E6SINBX6.js} +11 -11
  87. package/dist/{starter-pack-UBEC5LTE.js → starter-pack-FWTXE6XB.js} +5 -5
  88. package/dist/{status-2KNTILGQ.js → status-AYHBGIAP.js} +24 -24
  89. package/dist/{sync-cmd-SSUYTMLJ.js → sync-cmd-NGX2PGIW.js} +12 -12
  90. package/dist/{watch-L5NCO46E.js → watch-ZIWZVU3Z.js} +12 -12
  91. package/dist/{work-claim-cmd-NJNOQFQE.js → work-claim-cmd-CIVWB7EJ.js} +15 -15
  92. package/dist/{work-cmd-W7WEHMQJ.js → work-cmd-OO6K6ELP.js} +10 -10
  93. package/dist/{work-comment-cmd-SSUOGVDD.js → work-comment-cmd-SY7NY2CR.js} +10 -10
  94. package/dist/work-demo-cmd-Y7EU335L.js +62 -0
  95. package/dist/{work-logs-cmd-WPMWMDX6.js → work-logs-cmd-PWOFLTGD.js} +10 -10
  96. package/dist/{work-open-pr-cmd-NO5YLOXD.js → work-open-pr-cmd-AJUTKYWN.js} +11 -11
  97. package/dist/{work-pr-cmd-37B5KECR.js → work-pr-cmd-DH43AH3V.js} +10 -10
  98. package/dist/work-proofs-cmd-6W6DDAP6.js +111 -0
  99. package/dist/{work-stop-cmd-3BJLXUJ3.js → work-stop-cmd-WZHBEKE4.js} +10 -10
  100. package/package.json +1 -1
  101. package/skill-pack/maintained/outerlayer-amend/SKILL.md +36 -34
  102. package/skill-pack/maintained/outerlayer-amend/scripts/rerecord-demo.mjs +187 -0
  103. package/skill-pack/maintained/outerlayer-build/SKILL.md +7 -2
  104. package/skill-pack/maintained/outerlayer-build/references/agent-briefs.md +16 -4
  105. package/skill-pack/maintained/outerlayer-build/references/evidence.md +11 -1
  106. package/skill-pack/maintained/outerlayer-build/references/release.md +3 -2
  107. package/skill-pack/maintained/outerlayer-evidence/SKILL.md +21 -18
package/README.md CHANGED
@@ -91,7 +91,10 @@ content:
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
93
  comment may do; `outerlayer work threads` reads them back. `outerlayer work logs`
94
- reads the runner's log for a host attempt. `outerlayer work stop` sends
94
+ reads the runner's log for a host attempt. `outerlayer work demo` reads an
95
+ item's newest demo record with `GET /v1/work-items/<n>/demo`.
96
+ `outerlayer work proofs` reads the item with `GET /v1/work-items/<n>` and
97
+ compares each proof with the head commit. `outerlayer work stop` sends
95
98
  `POST /v1/work-items/<n>/claim/stop` with the optional note, and the
96
99
  gateway records the request against the item's live host build. A runner
97
100
  key needs `git.read` and `work.read` to
@@ -375,10 +378,12 @@ content:
375
378
  or to the git checkout.
376
379
  - **`outerlayer emit demo <manifest>`** first reads the item's recorded
377
380
  criteria (`GET /v1/work-items/{number}`) to check the chapters' criterion
378
- ids. It cuts a recorded video once, from the first chapter's start to the
381
+ ids. With `--replaces <record id>`, it also reads the item's newest demo record
382
+ (`GET /v1/work-items/{number}/demo`) before it uploads anything. It cuts a recorded video once, from the first chapter's start to the
379
383
  last chapter's end, and emits it as one video artifact. It then emits a video
380
384
  artifact for each chapter with the same bytes and a time range in that video,
381
- followed by the manifest as the demo record. A recording over 8 MiB falls
385
+ followed by the manifest as the demo record. A chapter's screenshot frame is
386
+ emitted as a screenshot artifact after its clip. A recording over 8 MiB falls
382
387
  back to one clip for each chapter. It runs `ffmpeg` and `espeak-ng` on your
383
388
  machine as separate programs and speaks the narration there. Nothing is sent
384
389
  to a speech service. The first narrated run downloads the voice pack, about
@@ -482,10 +487,12 @@ before it gives up.
482
487
  | `outerlayer context emit [--check]` | Compile `.outerlayer/` into each configured target tool's native files (targets come from `.outerlayer/config.json`). `--check` computes outputs and diffs against disk without writing (CI mode). Bare `outerlayer emit` with no name still compiles, with a deprecation warning. |
483
488
  | `outerlayer hooks wrap` / `outerlayer hooks unwrap` | Auto-wrap (or undo wrapping) `PreToolUse`/`PostToolUse` hooks for execution evidence — one spawn per firing. |
484
489
  | `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. |
485
- | `outerlayer emit demo <manifest> [--compare <manifest>] [--no-narration] [--item <n>] [--pr <n>]` | Turn a recorded video and its manifest (written by `@outerlayer/playwright`) into a narrated demo: one WebM clip for each chapter, emitted as a video artifact. A chapter whose checks all passed is bound to its criterion. The manifest is emitted as the demo record. With `--compare`, a second run's stills are compared with the first run's, and each chapter reads `yes`, `no` or `not checked`. Needs `ffmpeg` and `ffprobe`, and `espeak-ng` unless `--no-narration`. Exit 1 means a chapter had a failed check. |
490
+ | `outerlayer emit demo <manifest> [--compare <manifest>] [--no-narration] [--item <n>] [--pr <n>] [--replaces <record id>]` | Turn a recorded video and its manifest (written by `@outerlayer/playwright`) into a narrated demo: one WebM clip for each chapter, emitted as a video artifact. A chapter whose checks all passed is bound to its criterion. A chapter of a version 4 manifest may hold a screenshot frame, which its test marked with `demo.screenshot()`. The frame is stored as a screenshot of the chapter's criterion only when that criterion declares `screenshot` and every check passed; otherwise the command says why it stored none. The manifest is emitted as the demo record, with the test file a version 3 or 4 manifest names. With `--replaces <record id>`, the new demo retires the item's old demo. With `--compare`, a second run's stills are compared with the first run's, and each chapter reads `yes`, `no` or `not checked`. Needs `ffmpeg` and `ffprobe`, and `espeak-ng` unless `--no-narration`. Exit 1 means a chapter had a failed check. |
486
491
  | `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. |
487
492
  | `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. |
488
493
  | `outerlayer work stop --item <n> [--note <text>]` | Ask the host that holds the item's build to end it. The host reads the request at its next heartbeat and ends the build with outcome `stopped`, so the build may run a little longer. The item is not built again until a new build request. Needs `work.update`. Exits 1 when no host build is running for the item. |
494
+ | `outerlayer work proofs [--item <n>] [--json]` | Lists each criterion that declares a proof other than `test` as current, out of date or missing at the checkout's HEAD, or at the head of a linked pull request that is open or merged. Exits 0 when every proof is current, 1 when any is not, and 2 when it cannot tell. |
495
+ | `outerlayer work demo --item <n> [--json]` | Print the item's newest demo record: its artifact id, the commit it was recorded at and the test that recorded it. `--json` prints `{ "demo": null }` for an item with no demo. |
489
496
  | `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. |
490
497
  | `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`. |
491
498
  | `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. |
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { keepHandWritten, runAgentSetup } from './chunk-SVDOA4W2.js';
4
- import './chunk-JHTJPQSL.js';
3
+ export { keepHandWritten, runAgentSetup } from './chunk-L6MDOEHN.js';
4
+ import './chunk-V673DFOL.js';
5
5
  import './chunk-KT4CN6OU.js';
6
- import './chunk-DY7Y7UT4.js';
7
- import './chunk-HJYBWJAS.js';
6
+ import './chunk-KUE4V2SK.js';
7
+ import './chunk-LYGI3T66.js';
8
8
  import './chunk-ANPNT6PM.js';
9
- import './chunk-EUVE2EAE.js';
10
- import './chunk-UIUGTW5C.js';
9
+ import './chunk-AKZRGFGT.js';
10
+ import './chunk-FT7MUQGO.js';
11
11
  import './chunk-6RKD7YZ6.js';
12
12
  import './chunk-PJDQPF5N.js';
13
13
  import './chunk-SOI6K5DY.js';
@@ -15,16 +15,16 @@ import './chunk-PA6CK6WQ.js';
15
15
  import './chunk-BALIE3BA.js';
16
16
  import './chunk-ZJSNLVCE.js';
17
17
  import './chunk-BJ3KTMDH.js';
18
- import './chunk-G63KT5I5.js';
18
+ import './chunk-44V5SD4G.js';
19
19
  import './chunk-5BHIBJDA.js';
20
20
  import './chunk-CDDED64E.js';
21
21
  import './chunk-RA3O54FC.js';
22
22
  import './chunk-CRB3POP4.js';
23
- import './chunk-AVTI3FL5.js';
23
+ import './chunk-ZF24JN7R.js';
24
24
  import './chunk-YQR6E6OV.js';
25
25
  import './chunk-TUSYOL2O.js';
26
- import './chunk-LJG6EMLJ.js';
27
- import './chunk-E6CO3MJE.js';
26
+ import './chunk-6CXNWKWD.js';
27
+ import './chunk-F2D5BSXS.js';
28
28
  import './chunk-VNVZDWO3.js';
29
29
  import './chunk-HACGUL52.js';
30
30
  import './chunk-MESOOLF4.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { sanitizeTerminal, readEffectiveArtifactSpoolState } from './chunk-EWVYQLD3.js';
3
+ import { sanitizeTerminal, readEffectiveArtifactSpoolState } from './chunk-MPC2UAW2.js';
4
4
  import { cliInvocation } from './chunk-CRB3POP4.js';
5
- import './chunk-E6CO3MJE.js';
5
+ import './chunk-F2D5BSXS.js';
6
6
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
7
7
  import './chunk-Z5GEFMRW.js';
8
8
 
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK, DOCKER_CACHE_MS, allocatedBytes, checkDiskFit, realBuildDiskProbe, runDocker, volumeBytes } from './chunk-W2AEL4BJ.js';
4
- import './chunk-FR7HWWCF.js';
3
+ export { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK, DOCKER_CACHE_MS, allocatedBytes, checkDiskFit, realBuildDiskProbe, runDocker, volumeBytes } from './chunk-X4JEBMYN.js';
4
+ import './chunk-OGMXVPCS.js';
5
5
  import './chunk-3Z3MPR55.js';
6
6
  import './chunk-NE63JADS.js';
7
- import './chunk-5DNCFOXA.js';
7
+ import './chunk-NIY2UBT6.js';
8
8
  import './chunk-SOI6K5DY.js';
9
9
  import './chunk-PA6CK6WQ.js';
10
10
  import './chunk-BALIE3BA.js';
11
- import './chunk-E6CO3MJE.js';
11
+ import './chunk-F2D5BSXS.js';
12
12
  import './chunk-HACGUL52.js';
13
13
  import './chunk-MESOOLF4.js';
14
14
  import './chunk-Z5GEFMRW.js';
@@ -1 +1 @@
1
- {"id":"2026-10-23T00:39:16.634Z+cbfef98","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-23T12:05:53.102Z+82d4e55","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,13 +1,13 @@
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-FR7HWWCF.js';
3
+ export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-OGMXVPCS.js';
4
4
  import './chunk-3Z3MPR55.js';
5
5
  import './chunk-NE63JADS.js';
6
- import './chunk-5DNCFOXA.js';
6
+ import './chunk-NIY2UBT6.js';
7
7
  import './chunk-SOI6K5DY.js';
8
8
  import './chunk-PA6CK6WQ.js';
9
9
  import './chunk-BALIE3BA.js';
10
- import './chunk-E6CO3MJE.js';
10
+ import './chunk-F2D5BSXS.js';
11
11
  import './chunk-HACGUL52.js';
12
12
  import './chunk-MESOOLF4.js';
13
13
  import './chunk-Z5GEFMRW.js';
@@ -1,67 +1,67 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-SDU2IE22.js';
4
- import './chunk-PWH3BEZF.js';
3
+ import { probeCredentials } from './chunk-YSM4EEUK.js';
4
+ import './chunk-FZUFUVLK.js';
5
+ import './chunk-GH246BGV.js';
5
6
  import './chunk-ZVB57WI6.js';
6
7
  import './chunk-57L2YAJA.js';
7
8
  import './chunk-3JVYMD4G.js';
8
9
  import './chunk-E7R2GIAW.js';
9
- import './chunk-XHHTMFCX.js';
10
+ import './chunk-YGZLRX5U.js';
10
11
  import './chunk-MZYOUIY5.js';
11
- import './chunk-GH246BGV.js';
12
12
  import './chunk-HVRQQOMH.js';
13
13
  import './chunk-6LBSAW6I.js';
14
14
  import './chunk-I3LTIAOR.js';
15
- import './chunk-Q2CMEQV7.js';
16
- import './chunk-2N67C6IV.js';
17
- import './chunk-AU346ENF.js';
15
+ import './chunk-7IFYI7XF.js';
16
+ import './chunk-D3EDZPJR.js';
17
+ import './chunk-7UPMYRPS.js';
18
18
  import './chunk-ESVW4MJY.js';
19
- import { managedProblems, managedFactsOf } from './chunk-7HHNGZS5.js';
19
+ import { managedProblems, managedFactsOf } from './chunk-SQQD5MST.js';
20
20
  import './chunk-NBZ7XBT6.js';
21
21
  import './chunk-TBT347UY.js';
22
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, probeHelper, HELPER_ENV, helperSocketPath, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-2EGCI2VW.js';
22
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, probeHelper, HELPER_ENV, helperSocketPath, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-IUPY54BZ.js';
23
23
  import './chunk-2PGI6RDE.js';
24
- import './chunk-DISTLL2Q.js';
24
+ import './chunk-EXZACZ2P.js';
25
25
  import './chunk-YXHKCHWG.js';
26
26
  import './chunk-F5UL23I2.js';
27
27
  import './chunk-JBJTC3UU.js';
28
28
  import './chunk-OGFGZQA3.js';
29
29
  import './chunk-5THSC6BD.js';
30
30
  import './chunk-L26V6ILJ.js';
31
- import './chunk-T5REPMNL.js';
31
+ import './chunk-XCRET2GZ.js';
32
32
  import './chunk-MZBQTVFG.js';
33
33
  import './chunk-TQMI335S.js';
34
- import { DEFAULT_UNIT_NAME } from './chunk-HE4FBF4T.js';
35
- import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-RQJMN5TJ.js';
36
- import './chunk-W2AEL4BJ.js';
37
- import './chunk-FR7HWWCF.js';
34
+ import { DEFAULT_UNIT_NAME } from './chunk-EHOFFTVX.js';
35
+ import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-VWQCYOBS.js';
36
+ import './chunk-X4JEBMYN.js';
37
+ import './chunk-OGMXVPCS.js';
38
38
  import './chunk-3Z3MPR55.js';
39
39
  import './chunk-NE63JADS.js';
40
- import './chunk-VT4TTJPG.js';
40
+ import './chunk-YXMGHGHR.js';
41
41
  import './chunk-IP7BIBXJ.js';
42
- import './chunk-B2JURP6A.js';
43
- import './chunk-2WMZPJVE.js';
44
- import './chunk-EWVYQLD3.js';
45
- import './chunk-5DNCFOXA.js';
46
- import './chunk-HJYBWJAS.js';
47
- import './chunk-NSPRS7WK.js';
42
+ import './chunk-HLZMAJJD.js';
43
+ import './chunk-S5CNYXUA.js';
44
+ import './chunk-MPC2UAW2.js';
45
+ import './chunk-NIY2UBT6.js';
46
+ import './chunk-LYGI3T66.js';
47
+ import './chunk-7V5GUEDU.js';
48
48
  import './chunk-G2JWZDFA.js';
49
49
  import './chunk-ANPNT6PM.js';
50
- import './chunk-EUVE2EAE.js';
51
- import './chunk-UIUGTW5C.js';
50
+ import './chunk-AKZRGFGT.js';
51
+ import './chunk-FT7MUQGO.js';
52
52
  import './chunk-6RKD7YZ6.js';
53
53
  import './chunk-PJDQPF5N.js';
54
54
  import './chunk-SOI6K5DY.js';
55
55
  import './chunk-PA6CK6WQ.js';
56
56
  import { claudeEnvPath } from './chunk-BALIE3BA.js';
57
- import './chunk-QPWFVE3X.js';
57
+ import './chunk-UK4RGH46.js';
58
58
  import './chunk-ZJSNLVCE.js';
59
59
  import './chunk-2O5KA67H.js';
60
60
  import './chunk-BKO6JEZI.js';
61
61
  import './chunk-FGF52V4V.js';
62
62
  import './chunk-HCVLP7XA.js';
63
63
  import './chunk-BJ3KTMDH.js';
64
- import './chunk-G63KT5I5.js';
64
+ import './chunk-44V5SD4G.js';
65
65
  import './chunk-5BHIBJDA.js';
66
66
  import './chunk-CDDED64E.js';
67
67
  import './chunk-RA3O54FC.js';
@@ -71,8 +71,8 @@ import './chunk-CRB3POP4.js';
71
71
  import './chunk-URIZRCRY.js';
72
72
  import './chunk-YQR6E6OV.js';
73
73
  import './chunk-TUSYOL2O.js';
74
- import './chunk-LJG6EMLJ.js';
75
- import './chunk-E6CO3MJE.js';
74
+ import './chunk-6CXNWKWD.js';
75
+ import './chunk-F2D5BSXS.js';
76
76
  import './chunk-VNVZDWO3.js';
77
77
  import { parseRunnerEnv } from './chunk-HACGUL52.js';
78
78
  import './chunk-MESOOLF4.js';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { checkStarterFiles, contextIsGoverned } from './chunk-BJQ25STI.js';
4
- import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-HXA5GIHK.js';
5
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-VT4TTJPG.js';
6
- import { isLinkedRepository } from './chunk-2WMZPJVE.js';
7
- import { sanitizeTerminal } from './chunk-EWVYQLD3.js';
8
- import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-5DNCFOXA.js';
3
+ import { checkStarterFiles, contextIsGoverned } from './chunk-DKFUXYGD.js';
4
+ import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-EJL6CWSP.js';
5
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-YXMGHGHR.js';
6
+ import { isLinkedRepository } from './chunk-S5CNYXUA.js';
7
+ import { sanitizeTerminal } from './chunk-MPC2UAW2.js';
8
+ import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-NIY2UBT6.js';
9
9
  import { C } from './chunk-ANPNT6PM.js';
10
- import { checkFormerSkillNames } from './chunk-UIUGTW5C.js';
10
+ import { checkFormerSkillNames } from './chunk-FT7MUQGO.js';
11
11
  import { resolveGatewayCredentials, defaultFetch } from './chunk-6RKD7YZ6.js';
12
- import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-QPWFVE3X.js';
12
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-UK4RGH46.js';
13
13
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-I7RZHMXW.js';
14
14
  import { hookCommandEscapesControlPlane, CONTROL_PLANE_DIR_VARIABLE } from './chunk-HCVLP7XA.js';
15
15
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
@@ -1195,8 +1195,8 @@ function doctorExitCode(checks) {
1195
1195
 
1196
1196
  // src/doctor-report.ts
1197
1197
  async function gatherDoctorChecks() {
1198
- const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-JHTMPRAA.js');
1199
- const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-QXMUWJAQ.js');
1198
+ const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-ECTLWTPC.js');
1199
+ const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-MVA7YTFW.js');
1200
1200
  const configPath = defaultRunnerConfigPath();
1201
1201
  const runnerHost = hasRunnerBlock(configPath);
1202
1202
  const hooks = (() => {
@@ -1217,7 +1217,7 @@ async function gatherDoctorChecks() {
1217
1217
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1218
1218
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1219
1219
  } else if (hasRunnerBlock(configPath)) {
1220
- const { runnerHostChecks } = await import('./doctor-GJAHI3KU.js');
1220
+ const { runnerHostChecks } = await import('./doctor-4YZOP343.js');
1221
1221
  const gateway = (() => {
1222
1222
  try {
1223
1223
  const { url, apiKey, appId } = loadRunnerConfig(configPath);
@@ -1245,7 +1245,7 @@ async function gatherDoctorChecks() {
1245
1245
  const { existsSync: existsSync3 } = await import('fs');
1246
1246
  if (process.platform !== "linux" || !existsSync3("/run/systemd/system")) return void 0;
1247
1247
  const { inspectService, realInspectProbes } = await import('./inspect-DNLXTXLA.js');
1248
- const { DEFAULT_UNIT_NAME } = await import('./install-QPA7DQHO.js');
1248
+ const { DEFAULT_UNIT_NAME } = await import('./install-47Z7VNWP.js');
1249
1249
  const { dirname: dirname2 } = await import('path');
1250
1250
  return inspectService(DEFAULT_UNIT_NAME, dirname2(configPath), realInspectProbes());
1251
1251
  })();
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
4
4
  import { resolvePackageVersion } from './chunk-RA3O54FC.js';
5
- import { splitRawFile } from './chunk-LJG6EMLJ.js';
5
+ import { splitRawFile } from './chunk-6CXNWKWD.js';
6
6
  import { existsSync, readFileSync, mkdirSync, writeFileSync, readdirSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
  import { fileURLToPath } from 'url';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
4
- import { autoConnect } from './chunk-B2JURP6A.js';
5
- import { resolveRepoIdentity } from './chunk-5DNCFOXA.js';
4
+ import { autoConnect } from './chunk-HLZMAJJD.js';
5
+ import { resolveRepoIdentity } from './chunk-NIY2UBT6.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-6RKD7YZ6.js';
8
8
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RESERVED_EMIT_NAMES, ARTIFACT_KINDS, ArtifactCriterionIdSchema } from './chunk-E6CO3MJE.js';
3
+ import { RESERVED_EMIT_NAMES, ARTIFACT_KINDS, ArtifactCriterionIdSchema } from './chunk-F2D5BSXS.js';
4
4
  import { __commonJS, __require, __toESM } from './chunk-Z5GEFMRW.js';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -2,15 +2,15 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
4
4
  import { detectActiveSession, transcriptPathForSession } from './chunk-IP7BIBXJ.js';
5
- import { autoConnect } from './chunk-B2JURP6A.js';
6
- import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-5DNCFOXA.js';
5
+ import { autoConnect } from './chunk-HLZMAJJD.js';
6
+ import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-NIY2UBT6.js';
7
7
  import { C } from './chunk-ANPNT6PM.js';
8
8
  import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-6RKD7YZ6.js';
9
9
  import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
10
10
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
11
11
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
12
12
  import { cliInvocation } from './chunk-CRB3POP4.js';
13
- import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-E6CO3MJE.js';
13
+ import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-F2D5BSXS.js';
14
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
15
15
  import { readFileSync, existsSync } from 'fs';
16
16
  import { join, dirname, basename } from 'path';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-2N67C6IV.js';
4
- import { CaptureDaemon } from './chunk-5DNCFOXA.js';
5
- import { spoolDir } from './chunk-QPWFVE3X.js';
3
+ import { LiveUploader } from './chunk-D3EDZPJR.js';
4
+ import { CaptureDaemon } from './chunk-NIY2UBT6.js';
5
+ import { spoolDir } from './chunk-UK4RGH46.js';
6
6
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
8
8
  import { mkdirSync, writeFileSync, rmSync } from 'fs';
@@ -2,14 +2,14 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
4
4
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
5
- import { autoConnect } from './chunk-B2JURP6A.js';
6
- import { acquireSpoolLockAt } from './chunk-EWVYQLD3.js';
7
- import { resolveRepoIdentity } from './chunk-5DNCFOXA.js';
5
+ import { autoConnect } from './chunk-HLZMAJJD.js';
6
+ import { acquireSpoolLockAt } from './chunk-MPC2UAW2.js';
7
+ import { resolveRepoIdentity } from './chunk-NIY2UBT6.js';
8
8
  import { C } from './chunk-ANPNT6PM.js';
9
9
  import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-6RKD7YZ6.js';
10
10
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
11
11
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
12
- import { StepNameSchema, StepBodySchema } from './chunk-E6CO3MJE.js';
12
+ import { StepNameSchema, StepBodySchema } from './chunk-F2D5BSXS.js';
13
13
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
14
14
  import { randomUUID } from 'crypto';
15
15
  import { readFileSync, existsSync, mkdirSync, writeFileSync, renameSync, appendFileSync } from 'fs';
@@ -5,7 +5,7 @@ import { C } from './chunk-ANPNT6PM.js';
5
5
  import { readCloudConfigStrict, CloudConfigError, readCloudConfig, writeCloudConfig, cloudConfigPath } from './chunk-PJDQPF5N.js';
6
6
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';
8
- import { CLI_LOGIN_MACHINE_NAME_MAX, CliLoginPollResponseSchema, CLI_LOGIN_KIND, CliLoginRefusalSchema, CliLoginStartedSchema } from './chunk-E6CO3MJE.js';
8
+ import { CLI_LOGIN_MACHINE_NAME_MAX, CliLoginPollResponseSchema, CLI_LOGIN_KIND, CliLoginRefusalSchema, CliLoginStartedSchema } from './chunk-F2D5BSXS.js';
9
9
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
10
10
  import { generateKeyPairSync, privateDecrypt, constants, createPrivateKey } from 'crypto';
11
11
  import { spawn } from 'child_process';
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { removeRetiredSkills } from './chunk-UIUGTW5C.js';
3
+ import { removeRetiredSkills } from './chunk-FT7MUQGO.js';
4
4
  import { defaultFetch, resolveGatewayCredentials } from './chunk-6RKD7YZ6.js';
5
5
  import { withTokenHeader } from './chunk-BALIE3BA.js';
6
6
  import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
7
- import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-G63KT5I5.js';
7
+ import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-44V5SD4G.js';
8
8
  import { cliInvocation } from './chunk-CRB3POP4.js';
9
9
  import { writeDegraded, writeSourceCache, SOURCE_CACHE_TTL_RETRY_MS, writeContextManifest, SOURCE_CACHE_TTL_SUCCESS_MS, readSourceCache, isSourceCacheFresh, clearDegraded } from './chunk-YQR6E6OV.js';
10
- import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-LJG6EMLJ.js';
10
+ import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-6CXNWKWD.js';
11
11
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
12
12
  import { execFileSync } from 'child_process';
13
13
  import { existsSync, mkdirSync, writeFileSync, chmodSync, lstatSync, readFileSync, copyFileSync } from 'fs';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { uploadSpooledSteps } from './chunk-AU346ENF.js';
3
+ import { uploadSpooledSteps } from './chunk-7UPMYRPS.js';
4
4
  import { LaunchFilter } from './chunk-ESVW4MJY.js';
5
5
  import { RepoFilter } from './chunk-TBT347UY.js';
6
- import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-EWVYQLD3.js';
7
- import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-5DNCFOXA.js';
6
+ import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-MPC2UAW2.js';
7
+ import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-NIY2UBT6.js';
8
8
  import { C } from './chunk-ANPNT6PM.js';
9
9
  import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-6RKD7YZ6.js';
10
10
  import { readCloudConfig, cloudConfigPath, writeCloudConfig } from './chunk-PJDQPF5N.js';
11
11
  import { signerFor, signRunnerRequest } from './chunk-SOI6K5DY.js';
12
- import { writeSyncStatus, spoolDir } from './chunk-QPWFVE3X.js';
12
+ import { writeSyncStatus, spoolDir } from './chunk-UK4RGH46.js';
13
13
  import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
14
14
  import { hookExecSpoolPath } from './chunk-2O5KA67H.js';
15
15
  import { applyReportedCost } from './chunk-BKO6JEZI.js';
@@ -17,7 +17,7 @@ import { readRepoConnection, findGitDirs } from './chunk-BJ3KTMDH.js';
17
17
  import { readLaunchSpoolState, launchStatusIsDecisive, launchedItemsBySession, launchesPath } from './chunk-T2Q7ISPE.js';
18
18
  import { cliInvocation } from './chunk-CRB3POP4.js';
19
19
  import { removeJournalHooks } from './chunk-TUSYOL2O.js';
20
- import { CAPTURE_TIERS, inferArtifactKind, bannedPathsForTier, downconvertSession, isHumanUserTurn, turnCountBound, EVENT_TYPES } from './chunk-E6CO3MJE.js';
20
+ import { CAPTURE_TIERS, inferArtifactKind, bannedPathsForTier, downconvertSession, isHumanUserTurn, turnCountBound, EVENT_TYPES } from './chunk-F2D5BSXS.js';
21
21
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
22
22
  import { dirname, basename, join, sep } from 'path';
23
23
  import { statSync, readFileSync, readdirSync, mkdirSync, writeFileSync, renameSync, existsSync, rmSync } from 'fs';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { mcpTargetPath, INIT_STDIO_ENTRY, INIT_DOCS_ENTRY, DOCS_MCP_SERVER_NAME } from './chunk-KT4CN6OU.js';
4
- import { POLICY_CONTENT, VALIDATOR_FILES, VALIDATORS_DIR, POLICY_PATH } from './chunk-DY7Y7UT4.js';
5
- import { skillsBaseFor } from './chunk-HJYBWJAS.js';
4
+ import { POLICY_CONTENT, VALIDATOR_FILES, VALIDATORS_DIR, POLICY_PATH } from './chunk-KUE4V2SK.js';
5
+ import { skillsBaseFor } from './chunk-LYGI3T66.js';
6
6
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
7
- import { resolvePackRoot, OUTERLAYER_SKILLS_BASE, skillDir, loadTemplateFiles, rewriteSkillPaths, restoreSkillPaths, TEMPLATE_SKILLS } from './chunk-G63KT5I5.js';
7
+ import { resolvePackRoot, OUTERLAYER_SKILLS_BASE, skillDir, loadTemplateFiles, rewriteSkillPaths, restoreSkillPaths, TEMPLATE_SKILLS } from './chunk-44V5SD4G.js';
8
8
  import { cliInvocation } from './chunk-CRB3POP4.js';
9
- import { hasSymlinkComponent } from './chunk-AVTI3FL5.js';
9
+ import { hasSymlinkComponent } from './chunk-ZF24JN7R.js';
10
10
  import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
11
11
  import { createHash } from 'crypto';
12
12
  import { existsSync, readFileSync } from 'fs';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { builtinKind } from './chunk-RQJMN5TJ.js';
4
- import { parseSize } from './chunk-FR7HWWCF.js';
3
+ import { builtinKind } from './chunk-VWQCYOBS.js';
4
+ import { parseSize } from './chunk-OGMXVPCS.js';
5
5
  import { runnerDir } from './chunk-PA6CK6WQ.js';
6
6
  import { CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-BALIE3BA.js';
7
7
  import { FD_SLOTS_PER_BUILD, FD_STORE_ENV } from './chunk-HACGUL52.js';
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { sanitizeTerminal } from './chunk-EWVYQLD3.js';
4
- import { isAgentsMdLayout } from './chunk-HJYBWJAS.js';
3
+ import { sanitizeTerminal } from './chunk-MPC2UAW2.js';
4
+ import { isAgentsMdLayout } from './chunk-LYGI3T66.js';
5
5
  import { resolveGatewayCredentials, defaultFetch } from './chunk-6RKD7YZ6.js';
6
6
  import { versionAtLeast } from './chunk-HCVLP7XA.js';
7
7
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
8
- import { machineSkillsState, staleClaudeSkills } from './chunk-GFYEMCPP.js';
9
- import { AGENTS_SKILLS_BASE, skillDir, namesCore, MACHINE_SKILL_PATH, isMaintainedCopy, loadTemplateFiles } from './chunk-G63KT5I5.js';
8
+ import { machineSkillsState, staleClaudeSkills } from './chunk-JEVKOZBB.js';
9
+ import { AGENTS_SKILLS_BASE, skillDir, namesCore, MACHINE_SKILL_PATH, isMaintainedCopy, loadTemplateFiles } from './chunk-44V5SD4G.js';
10
10
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
11
11
  import { cliInvocation } from './chunk-CRB3POP4.js';
12
- import { hasSymlinkComponent } from './chunk-AVTI3FL5.js';
13
- import { emitTree, ALL_TARGET_IDS, classifyTree, splitRawFile } from './chunk-LJG6EMLJ.js';
12
+ import { hasSymlinkComponent } from './chunk-ZF24JN7R.js';
13
+ import { emitTree, ALL_TARGET_IDS, classifyTree, splitRawFile } from './chunk-6CXNWKWD.js';
14
14
  import { execFileSync } from 'child_process';
15
15
  import { existsSync, readFileSync, writeFileSync, realpathSync, readdirSync } from 'fs';
16
16
  import { join, dirname, posix, basename, isAbsolute, relative } from 'path';
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+
4
+ createRequire(import.meta.url);
5
+
6
+ // src/demo/previous.ts
7
+ async function readNewestDemo(params) {
8
+ const endpoint = new URL(`/v1/work-items/${params.item}/demo`, params.url).toString();
9
+ const response = await params.fetchImpl(endpoint, {
10
+ method: "GET",
11
+ headers: { authorization: `Bearer ${params.apiKey}`, "x-outerlayer-app-id": params.appId }
12
+ });
13
+ if (!response.ok) throw new Error(`reading the demo of item ${params.item} failed (${response.status})`);
14
+ const body = await response.json();
15
+ return body.data?.demo ?? null;
16
+ }
17
+
18
+ export { readNewestDemo };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { DEFAULT_UNIT_NAME } from './chunk-HE4FBF4T.js';
3
+ import { DEFAULT_UNIT_NAME } from './chunk-EHOFFTVX.js';
4
4
  import { RUNNER_FILE_MODE } from './chunk-PA6CK6WQ.js';
5
5
  import { claudeEnvPath, withoutCredentialLines } from './chunk-BALIE3BA.js';
6
6
  import { parseRunnerEnv } from './chunk-HACGUL52.js';
@@ -22710,7 +22710,39 @@ var DemoManifestV2Schema = external_exports.strictObject({
22710
22710
  ...manifestFields,
22711
22711
  chapters: external_exports.array(DemoChapterV2Schema).min(1).max(DEMO_CHAPTERS_MAX)
22712
22712
  });
22713
- var DemoManifestSchema = external_exports.discriminatedUnion("schemaVersion", [DemoManifestV1Schema, DemoManifestV2Schema]);
22713
+ var DemoTestPathSchema = external_exports.string().min(1).max(500).refine((path) => !path.startsWith("/") && !path.split("/").includes(".."), {
22714
+ message: "a test path must be relative to the repository's root and stay inside it"
22715
+ });
22716
+ var DemoManifestV3Schema = external_exports.strictObject({
22717
+ schemaVersion: external_exports.literal(3),
22718
+ test: DemoTestPathSchema,
22719
+ ...manifestFields,
22720
+ chapters: external_exports.array(DemoChapterV2Schema).min(1).max(DEMO_CHAPTERS_MAX)
22721
+ });
22722
+ var DemoScreenshotSchema = external_exports.strictObject({
22723
+ /** The index, in the chapter's checks, of the check the frame follows. */
22724
+ check: external_exports.number().int().min(0),
22725
+ /** The PNG file, as a path relative to the manifest's folder. */
22726
+ file: external_exports.string().min(1).max(500),
22727
+ /** SHA-256 of the PNG file's bytes, in lower-case hex. */
22728
+ sha256: external_exports.string().regex(/^[0-9a-f]{64}$/),
22729
+ /** True when the frame is the whole page, not the viewport. */
22730
+ fullPage: external_exports.boolean(),
22731
+ /** True when the chapter's `demo.mask()` regions are covered in the frame. */
22732
+ masked: external_exports.boolean()
22733
+ });
22734
+ var DemoChapterV4Schema = external_exports.strictObject({ ...chapterWithStillsFields, screenshot: DemoScreenshotSchema.optional() }).refine(endsAfterStart, { message: "a chapter must end after it starts", path: ["end"] }).superRefine(stillsFollowPassedChecks).superRefine((chapter, context) => {
22735
+ if (chapter.screenshot !== void 0 && chapter.screenshot.check >= chapter.checks.length) {
22736
+ context.addIssue({ code: "custom", path: ["screenshot", "check"], message: "a screenshot must follow a check the chapter has" });
22737
+ }
22738
+ });
22739
+ var DemoManifestV4Schema = external_exports.strictObject({
22740
+ schemaVersion: external_exports.literal(4),
22741
+ test: DemoTestPathSchema,
22742
+ ...manifestFields,
22743
+ chapters: external_exports.array(DemoChapterV4Schema).min(1).max(DEMO_CHAPTERS_MAX)
22744
+ });
22745
+ var DemoManifestSchema = external_exports.discriminatedUnion("schemaVersion", [DemoManifestV1Schema, DemoManifestV2Schema, DemoManifestV3Schema, DemoManifestV4Schema]);
22714
22746
  var DemoRecordChapterSchema = external_exports.strictObject({
22715
22747
  ...chapterFields,
22716
22748
  /** The `clientArtifactId` of the chapter's clip. */
@@ -22755,7 +22787,9 @@ var DemoRecordChapterV3Schema = external_exports.strictObject({
22755
22787
  bound: external_exports.boolean(),
22756
22788
  comparable: DemoComparableSchema,
22757
22789
  stills: external_exports.array(DemoStillSchema.pick({ check: true, sha256: true })).max(DEMO_CHECKS_MAX),
22758
- difference: external_exports.strictObject({ check: external_exports.number().int().min(0), region: DemoRegionSchema }).optional()
22790
+ difference: external_exports.strictObject({ check: external_exports.number().int().min(0), region: DemoRegionSchema }).optional(),
22791
+ /** The stored screenshot frame: its `clientArtifactId`, and the manifest's fields for it. Present only for a bound frame. */
22792
+ screenshot: DemoScreenshotSchema.omit({ file: true }).extend({ artifactId: external_exports.string().min(1).max(64) }).optional()
22759
22793
  }).refine((chapter) => chapter.end > chapter.start, { message: "a chapter must end after it starts", path: ["end"] }).refine((chapter) => chapter.comparable === "no" === (chapter.difference !== void 0), {
22760
22794
  message: "a chapter has a difference exactly when it is not comparable",
22761
22795
  path: ["difference"]
@@ -22766,6 +22800,8 @@ var DemoRecordVideoSchema = external_exports.union([
22766
22800
  ]);
22767
22801
  var DemoRecordV3Schema = external_exports.strictObject({
22768
22802
  schemaVersion: external_exports.literal(3),
22803
+ /** The test that recorded the demo. Absent from a demo stored before the manifest named its test. */
22804
+ test: DemoTestPathSchema.optional(),
22769
22805
  video: DemoRecordVideoSchema,
22770
22806
  chapters: external_exports.array(DemoRecordChapterV3Schema).min(1).max(DEMO_CHAPTERS_MAX)
22771
22807
  });
@@ -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-G63KT5I5.js';
3
+ import { skillDir, FORMER_MAINTAINED_NAMES, isMaintainedCopy } from './chunk-44V5SD4G.js';
4
4
  import { cliInvocation } from './chunk-CRB3POP4.js';
5
- import { emitTree, ALL_TARGET_IDS, classifyTree } from './chunk-LJG6EMLJ.js';
5
+ import { emitTree, ALL_TARGET_IDS, classifyTree } from './chunk-6CXNWKWD.js';
6
6
  import { readFileSync, existsSync, unlinkSync, rmdirSync, readdirSync } from 'fs';
7
7
  import { join, dirname, relative, sep } from 'path';
8
8