@outerlayer/cli 0.25.1 → 0.26.0

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 (91) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +0 -1
  3. package/dist/{agent-setup-PDIIGMKE.js → agent-setup-YHFZB2BC.js} +5 -5
  4. package/dist/{build-YYVAJ75G.js → build-JK2DLT6X.js} +4 -4
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-MNUJS4RG.js → builder-TMA25KRR.js} +4 -4
  7. package/dist/{check-C6HEFW6R.js → check-FAGTKWHT.js} +28 -28
  8. package/dist/{chunk-QMQC6JCO.js → chunk-4IFKLYMM.js} +1 -1
  9. package/dist/{chunk-A6ORKBVJ.js → chunk-4QKHBDEN.js} +20 -11
  10. package/dist/{chunk-APBTVIM4.js → chunk-4R24DSL2.js} +4 -4
  11. package/dist/{chunk-ZGMQQWCV.js → chunk-5PMQDQFV.js} +2 -2
  12. package/dist/{chunk-5222PA6S.js → chunk-665QWBNW.js} +1 -1
  13. package/dist/{chunk-O2WYUIK7.js → chunk-6FAP657M.js} +1 -1
  14. package/dist/{chunk-S6AWZKJN.js → chunk-6S3UEBLB.js} +3 -3
  15. package/dist/{chunk-ENFBARQP.js → chunk-6WZKI6LQ.js} +18 -11
  16. package/dist/{chunk-N3VSI5ZI.js → chunk-7I6GZSN3.js} +3 -3
  17. package/dist/{chunk-Q435LWVN.js → chunk-AINUN2TT.js} +3 -3
  18. package/dist/{chunk-OEU4JSDE.js → chunk-ARMZI56S.js} +4 -4
  19. package/dist/{chunk-K5WVK7IC.js → chunk-C3AMVSMS.js} +1 -1
  20. package/dist/{chunk-23SPSYXZ.js → chunk-CLUUAX6O.js} +2 -2
  21. package/dist/{chunk-FXUVXSY2.js → chunk-D4UDE2AP.js} +1 -1
  22. package/dist/{chunk-F57CLUH7.js → chunk-DVAAATJP.js} +16 -16
  23. package/dist/{chunk-CQRIZNE6.js → chunk-DZUANBKP.js} +5 -5
  24. package/dist/{chunk-ZODVSFI4.js → chunk-F6DIHHBS.js} +1 -1
  25. package/dist/{chunk-3WZ5ECSM.js → chunk-FQCLEH34.js} +2 -2
  26. package/dist/{chunk-SNQR2EYI.js → chunk-G2T4HCGT.js} +1 -1
  27. package/dist/{chunk-M4B6QKNZ.js → chunk-GJZEUQ6D.js} +1 -1
  28. package/dist/{chunk-4S4VBDSO.js → chunk-H3AEZIYB.js} +1 -1
  29. package/dist/{chunk-C36EOUUU.js → chunk-ITP76BST.js} +4 -4
  30. package/dist/{chunk-QXNJWSTM.js → chunk-JF572PM5.js} +3 -3
  31. package/dist/{chunk-ATGHVEU4.js → chunk-KDDFI5MR.js} +1 -1
  32. package/dist/{chunk-ZI2ZVWKT.js → chunk-L4CW6LZQ.js} +1 -1
  33. package/dist/{chunk-IGRRD7PX.js → chunk-MLD2NA7N.js} +1 -1
  34. package/dist/{chunk-H6ZFLIX3.js → chunk-P7UQZFNY.js} +2 -2
  35. package/dist/{chunk-DEBOL6ON.js → chunk-PYSKSROG.js} +1 -1
  36. package/dist/{chunk-24LQ34XL.js → chunk-TI33WRBT.js} +4 -4
  37. package/dist/{chunk-XRYUJTAT.js → chunk-TKL74NLB.js} +1 -1
  38. package/dist/{chunk-3FNPTQRH.js → chunk-WVM6PM2N.js} +5 -5
  39. package/dist/{chunk-VAMUWK55.js → chunk-XBCJI6SV.js} +2 -2
  40. package/dist/{chunk-I25F6YVP.js → chunk-XK7FRM5J.js} +6 -6
  41. package/dist/{claude-launcher-WGOCLTG6.js → claude-launcher-FXFXYW2E.js} +1 -1
  42. package/dist/{cli-YMTNHR4W.js → cli-CD4UNXBY.js} +80 -129
  43. package/dist/{command-DKYZC7PH.js → command-A54TSZWD.js} +19 -19
  44. package/dist/{connect-cmd-F7T4LNKX.js → connect-cmd-HAFFAVEO.js} +4 -4
  45. package/dist/{container-start-AX7QXJMR.js → container-start-NRPEMKKE.js} +18 -18
  46. package/dist/{control-plane-launch-ZFT6SI4N.js → control-plane-launch-FRK5IZXC.js} +4 -4
  47. package/dist/{docker-5EC5TE3Y.js → docker-4X2A5HDY.js} +4 -4
  48. package/dist/{doctor-S6YCZGUU.js → doctor-AXJQQBKY.js} +36 -22
  49. package/dist/{emit-artifact-cmd-DJO475VZ.js → emit-artifact-cmd-Y2GMWCSD.js} +8 -8
  50. package/dist/{emit-criteria-cmd-EULQ2MLI.js → emit-criteria-cmd-LI7OLHEC.js} +5 -5
  51. package/dist/{emit-finding-cmd-QIIKMITO.js → emit-finding-cmd-3LU7C356.js} +5 -5
  52. package/dist/{emit-result-cmd-NMCLTA47.js → emit-result-cmd-NKAKRBW2.js} +8 -8
  53. package/dist/{emit-step-cmd-72OX5P6M.js → emit-step-cmd-JQ23TRF5.js} +6 -6
  54. package/dist/{governing-source-JNQ6PX2A.js → governing-source-73APROH6.js} +8 -8
  55. package/dist/{hook-fast-NEELST6G.js → hook-fast-GD7F2EBL.js} +1 -1
  56. package/dist/{pending-BGLMTB5Q.js → host-key-5TKBNUZ4.js} +2 -2
  57. package/dist/{image-tag-6KJOGBQK.js → image-tag-5SJ6ZKT7.js} +2 -2
  58. package/dist/index.js +4 -4
  59. package/dist/{init-G7XC5WWL.js → init-5WVPLO3G.js} +18 -18
  60. package/dist/{init-624F4JIP.js → init-IFQCZKY6.js} +18 -18
  61. package/dist/{init-cmd-UUYA57VO.js → init-cmd-KNYXSA6O.js} +8 -8
  62. package/dist/{init-update-MMV33PLM.js → init-update-HTHYQOHU.js} +6 -6
  63. package/dist/{install-MPEJJ7X6.js → install-QSTTBUHX.js} +2 -2
  64. package/dist/{install-cmd-SE6NCTJK.js → install-cmd-3DXJJUAA.js} +4 -4
  65. package/dist/{logs-T4ERSOQ4.js → logs-VN2HKDSH.js} +1 -1
  66. package/dist/{loop-K5B2A3VW.js → loop-HTWKPG3J.js} +28 -28
  67. package/dist/{machine-J4IFVIKU.js → machine-AYYL2WXW.js} +15 -15
  68. package/dist/{mcp-serve-cmd-7M4VLNI4.js → mcp-serve-cmd-QBFQN553.js} +3 -3
  69. package/dist/paths-ZC6BMWMT.js +8 -0
  70. package/dist/{host-key-ICJEQBWH.js → pending-54HC7MM3.js} +2 -2
  71. package/dist/{pidfile-VYBH3IMN.js → pidfile-BY5Z6YH7.js} +2 -2
  72. package/dist/{record-GNOHDJ2O.js → record-K23IN6QN.js} +2 -2
  73. package/dist/{runner-env-GUFV544G.js → runner-env-2D7MPOIJ.js} +3 -3
  74. package/dist/{runner-identity-HZ6CBM2R.js → runner-identity-NH6RLVMI.js} +4 -4
  75. package/dist/{runner-key-FFVZUEHE.js → runner-key-3HAVHQZI.js} +18 -18
  76. package/dist/{session-sender-3SUWNNVP.js → session-sender-535VA2CA.js} +9 -9
  77. package/dist/{spec-cmd-VZDE6FFH.js → spec-cmd-KERLZ6GJ.js} +6 -6
  78. package/dist/{status-GXTD44DX.js → status-IAXWRX7B.js} +19 -19
  79. package/dist/{sync-cmd-VFB3NEJ6.js → sync-cmd-EIRKU5FA.js} +8 -8
  80. package/dist/{watch-LWMTDD3L.js → watch-SMF5CW5T.js} +8 -8
  81. package/dist/{work-claim-cmd-FOBTDQVR.js → work-claim-cmd-JCUBRZKN.js} +8 -8
  82. package/dist/{work-cmd-6HARIBMW.js → work-cmd-C3CFJZYD.js} +6 -6
  83. package/dist/{work-comment-cmd-BITPALHR.js → work-comment-cmd-NDE3O7PN.js} +6 -6
  84. package/dist/{work-logs-cmd-VGB3O2LZ.js → work-logs-cmd-KUGBBJAO.js} +6 -6
  85. package/dist/{work-open-pr-cmd-SVZCNOIM.js → work-open-pr-cmd-TFIGKPRL.js} +7 -7
  86. package/dist/{work-pr-cmd-SJT46GN4.js → work-pr-cmd-KKCLXRJL.js} +6 -6
  87. package/dist/{work-stop-cmd-WXKVVA4S.js → work-stop-cmd-QUEDBM4Q.js} +6 -6
  88. package/package.json +2 -2
  89. package/dist/import-capture-cmd-TCOKNVBM.js +0 -73
  90. package/dist/import-ruler-cmd-VJOHOJQ7.js +0 -173
  91. package/dist/paths-2KGM2LZV.js +0 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @outerlayer/cli
2
2
 
3
+ ## 0.26.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9dab934: Remove `outerlayer import capture`, `outerlayer import ruler` and `outerlayer hooks install-git`. `outerlayer init` installs the maintained skills, and `outerlayer init --update` refreshes them. `outerlayer init` and `outerlayer sync` remove the git hooks that an earlier version installed.
8
+
9
+ ### Patch Changes
10
+
11
+ - 847b8eb: MicroVM builds use Firecracker 1.17.0. On a host with the root helper, run `outerlayer runner install --service --replace` so its builds use it too. Until then, `outerlayer doctor` and each build's log say the helper runs an older Firecracker.
12
+ - 0405fed: MicroVM builds no longer stop after a CLI update that pins a new Firecracker, guest kernel or guest helper. The runner keeps each file under its pinned hash and downloads the new one.
13
+
14
+ ## 0.25.2
15
+
16
+ ### Patch Changes
17
+
18
+ - 73ce466: MicroVM builds under the jailer no longer fail when an earlier release left the runner's build directory writable by its group. The runner makes that directory private first, and `outerlayer doctor` reports it.
19
+
3
20
  ## 0.25.1
4
21
 
5
22
  ### Patch Changes
package/README.md CHANGED
@@ -437,7 +437,6 @@ before it gives up.
437
437
  | `outerlayer daemon` | Run the copy-out daemon in the foreground (`--once` for a single sweep, which uploads nothing). Once cloud credentials exist, it also streams a launched session's new turns as they land — see Privacy, above. `outerlayer watch` is the former name and still works, with a warning. |
438
438
  | `outerlayer doctor` | Check the installation: hooks, status-line freshness, sync health and, with a factory key, the GitHub App access builds need. `--json` prints the checks and a summary for scripts. |
439
439
  | `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. |
440
- | `outerlayer import ruler` | Port a `.ruler/` tree ([Ruler](https://github.com/intellectronica/ruler)) into the equivalent `.outerlayer/` tree — mostly a rename; never overwrites an existing `.outerlayer/`. |
441
440
  | `outerlayer hooks wrap` / `outerlayer hooks unwrap` | Auto-wrap (or undo wrapping) `PreToolUse`/`PostToolUse` hooks for execution evidence — one spawn per firing. |
442
441
  | `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. |
443
442
  | `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. |
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { keepHandWritten, runAgentSetup } from './chunk-4S4VBDSO.js';
3
+ export { keepHandWritten, runAgentSetup } from './chunk-H3AEZIYB.js';
4
4
  import './chunk-WX2WEERU.js';
5
5
  import './chunk-VJBFQP3H.js';
6
- import './chunk-FXUVXSY2.js';
6
+ import './chunk-D4UDE2AP.js';
7
7
  import './chunk-MQ743JX3.js';
8
- import './chunk-M4B6QKNZ.js';
8
+ import './chunk-GJZEUQ6D.js';
9
9
  import './chunk-ZJSNLVCE.js';
10
10
  import './chunk-BJ3KTMDH.js';
11
11
  import './chunk-YVZJ6GKF.js';
@@ -21,8 +21,8 @@ import './chunk-RKOTJQVG.js';
21
21
  import './chunk-QZBXLLTV.js';
22
22
  import './chunk-VNVZDWO3.js';
23
23
  import './chunk-RA3O54FC.js';
24
- import './chunk-ZODVSFI4.js';
25
- import './chunk-ZI2ZVWKT.js';
24
+ import './chunk-F6DIHHBS.js';
25
+ import './chunk-L4CW6LZQ.js';
26
26
  import './chunk-2K3TCQHW.js';
27
27
  import './chunk-JGD5TWQ2.js';
28
28
  import './chunk-Z5GEFMRW.js';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { buildRepositoryImage } from './chunk-Q435LWVN.js';
4
- import './chunk-DEBOL6ON.js';
3
+ export { buildRepositoryImage } from './chunk-AINUN2TT.js';
4
+ import './chunk-PYSKSROG.js';
5
5
  import './chunk-JBJTC3UU.js';
6
- export { RecipeError } from './chunk-APBTVIM4.js';
7
- import './chunk-ZI2ZVWKT.js';
6
+ export { RecipeError } from './chunk-4R24DSL2.js';
7
+ import './chunk-L4CW6LZQ.js';
8
8
  import './chunk-2K3TCQHW.js';
9
9
  import './chunk-JGD5TWQ2.js';
10
10
  import './chunk-Z5GEFMRW.js';
@@ -1 +1 @@
1
- {"id":"2026-10-16T12:01:15.085Z+0bf4474","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-16T14:55:16.789Z+b8b6796","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,12 +1,12 @@
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-N3VSI5ZI.js';
4
- import './chunk-APBTVIM4.js';
3
+ export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-7I6GZSN3.js';
4
+ import './chunk-4R24DSL2.js';
5
5
  import './chunk-7RQ73DLO.js';
6
6
  import './chunk-QE3UQAHK.js';
7
7
  import './chunk-QZBXLLTV.js';
8
- import './chunk-ZODVSFI4.js';
9
- import './chunk-ZI2ZVWKT.js';
8
+ import './chunk-F6DIHHBS.js';
9
+ import './chunk-L4CW6LZQ.js';
10
10
  import './chunk-2K3TCQHW.js';
11
11
  import './chunk-JGD5TWQ2.js';
12
12
  import './chunk-Z5GEFMRW.js';
@@ -1,53 +1,53 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-F57CLUH7.js';
4
- import './chunk-A6ORKBVJ.js';
5
- import './chunk-XRYUJTAT.js';
3
+ import { probeCredentials } from './chunk-DVAAATJP.js';
4
+ import './chunk-4QKHBDEN.js';
5
+ import './chunk-TKL74NLB.js';
6
6
  import './chunk-ZVB57WI6.js';
7
- import './chunk-O2WYUIK7.js';
7
+ import './chunk-6FAP657M.js';
8
8
  import './chunk-3JVYMD4G.js';
9
9
  import './chunk-YETTWTAY.js';
10
10
  import './chunk-TPKYTORP.js';
11
- import './chunk-VAMUWK55.js';
11
+ import './chunk-XBCJI6SV.js';
12
12
  import './chunk-2N72GPS2.js';
13
13
  import './chunk-UNF7MWEL.js';
14
- import './chunk-C36EOUUU.js';
15
- import './chunk-H6ZFLIX3.js';
14
+ import './chunk-ITP76BST.js';
15
+ import './chunk-P7UQZFNY.js';
16
16
  import './chunk-ESVW4MJY.js';
17
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-24LQ34XL.js';
18
- import './chunk-QMQC6JCO.js';
17
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-TI33WRBT.js';
18
+ import './chunk-4IFKLYMM.js';
19
19
  import './chunk-YYYRBYWG.js';
20
20
  import './chunk-TBT347UY.js';
21
- import './chunk-OEU4JSDE.js';
22
- import './chunk-S6AWZKJN.js';
23
- import './chunk-ENFBARQP.js';
24
- import './chunk-5222PA6S.js';
21
+ import './chunk-ARMZI56S.js';
22
+ import './chunk-6S3UEBLB.js';
23
+ import './chunk-6WZKI6LQ.js';
24
+ import './chunk-665QWBNW.js';
25
25
  import './chunk-TQMI335S.js';
26
- import './chunk-ZGMQQWCV.js';
27
- import './chunk-IGRRD7PX.js';
26
+ import './chunk-5PMQDQFV.js';
27
+ import './chunk-MLD2NA7N.js';
28
28
  import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
29
- import './chunk-Q435LWVN.js';
30
- import './chunk-DEBOL6ON.js';
29
+ import './chunk-AINUN2TT.js';
30
+ import './chunk-PYSKSROG.js';
31
31
  import './chunk-JBJTC3UU.js';
32
32
  import './chunk-OGFGZQA3.js';
33
- import './chunk-N3VSI5ZI.js';
34
- import './chunk-APBTVIM4.js';
33
+ import './chunk-7I6GZSN3.js';
34
+ import './chunk-4R24DSL2.js';
35
35
  import './chunk-HPOEVC2V.js';
36
36
  import './chunk-XGJUNNXL.js';
37
- import './chunk-3FNPTQRH.js';
38
- import './chunk-CQRIZNE6.js';
39
- import './chunk-3WZ5ECSM.js';
40
- import './chunk-SNQR2EYI.js';
37
+ import './chunk-WVM6PM2N.js';
38
+ import './chunk-DZUANBKP.js';
39
+ import './chunk-FQCLEH34.js';
40
+ import './chunk-G2T4HCGT.js';
41
41
  import './chunk-BUP5N3X6.js';
42
42
  import './chunk-XSPA5ODY.js';
43
43
  import './chunk-GOSFARMS.js';
44
44
  import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-JWRX5ZTT.js';
45
45
  import './chunk-UXYLWVTQ.js';
46
46
  import './chunk-7RQ73DLO.js';
47
- import './chunk-FXUVXSY2.js';
47
+ import './chunk-D4UDE2AP.js';
48
48
  import './chunk-MQ743JX3.js';
49
- import './chunk-M4B6QKNZ.js';
50
- import './chunk-K5WVK7IC.js';
49
+ import './chunk-GJZEUQ6D.js';
50
+ import './chunk-C3AMVSMS.js';
51
51
  import './chunk-ZJSNLVCE.js';
52
52
  import './chunk-DYEFPYME.js';
53
53
  import './chunk-BKO6JEZI.js';
@@ -69,8 +69,8 @@ import './chunk-RKOTJQVG.js';
69
69
  import './chunk-QZBXLLTV.js';
70
70
  import './chunk-VNVZDWO3.js';
71
71
  import './chunk-RA3O54FC.js';
72
- import './chunk-ZODVSFI4.js';
73
- import './chunk-ZI2ZVWKT.js';
72
+ import './chunk-F6DIHHBS.js';
73
+ import './chunk-L4CW6LZQ.js';
74
74
  import './chunk-2K3TCQHW.js';
75
75
  import './chunk-JGD5TWQ2.js';
76
76
  import './chunk-Z5GEFMRW.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
3
+ import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
4
4
  import { readlinkSync, realpathSync, mkdirSync, unlinkSync, symlinkSync, renameSync, readFileSync, writeFileSync, rmSync, existsSync, readdirSync } from 'fs';
5
5
  import { join, basename, sep, resolve } from 'path';
6
6
 
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readsJobState, READ_JOB_STATE_FORMATS, jobStateFormatOf } from './chunk-ZVB57WI6.js';
4
- import { senderPidfile } from './chunk-VAMUWK55.js';
4
+ import { senderPidfile } from './chunk-XBCJI6SV.js';
5
5
  import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-2N72GPS2.js';
6
6
  import { writeDockerClientConfig } from './chunk-UNF7MWEL.js';
7
- import { installScrubContext } from './chunk-C36EOUUU.js';
8
- import { ADDED_USER, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, HelperRefusal, GH_CONFIG_YML, ghHostsYml, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-ENFBARQP.js';
9
- import { readBranchHead, fetchCommit, diffBetween } from './chunk-Q435LWVN.js';
7
+ import { installScrubContext } from './chunk-ITP76BST.js';
8
+ import { ADDED_USER, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, helperFirecrackerNote, HelperRefusal, GH_CONFIG_YML, ghHostsYml, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-6WZKI6LQ.js';
9
+ import { readBranchHead, fetchCommit, diffBetween } from './chunk-AINUN2TT.js';
10
10
  import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
11
- import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, COMMAND_DIR, childEnvironment, judgeCommand, JUDGE_MAX_TURNS, MAX_REPORT_BYTES, JUDGE_DIR } from './chunk-N3VSI5ZI.js';
12
- import { CLAUDE_CODE_VERSION } from './chunk-APBTVIM4.js';
11
+ import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, COMMAND_DIR, childEnvironment, judgeCommand, JUDGE_MAX_TURNS, MAX_REPORT_BYTES, JUDGE_DIR } from './chunk-7I6GZSN3.js';
12
+ import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-4R24DSL2.js';
13
13
  import { waitForAgent, vmExecArgs } from './chunk-HPOEVC2V.js';
14
14
  import { socketPathProblem, vsockLinks, linkVsockSockets } from './chunk-XGJUNNXL.js';
15
- import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, retrySend, formatClock } from './chunk-3FNPTQRH.js';
16
- import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-CQRIZNE6.js';
15
+ import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, retrySend, formatClock } from './chunk-WVM6PM2N.js';
16
+ import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-DZUANBKP.js';
17
17
  import { planArtifactUpload } from './chunk-BUP5N3X6.js';
18
18
  import { isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-JWRX5ZTT.js';
19
19
  import { parseSize } from './chunk-7RQ73DLO.js';
@@ -23,8 +23,8 @@ import { resolvePackRoot } from './chunk-HBISTTG3.js';
23
23
  import { parsePolicy } from './chunk-RKOTJQVG.js';
24
24
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
25
25
  import { resolveVersion } from './chunk-RA3O54FC.js';
26
- import { signerFor } from './chunk-ZODVSFI4.js';
27
- import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath } from './chunk-ZI2ZVWKT.js';
26
+ import { signerFor } from './chunk-F6DIHHBS.js';
27
+ import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath } from './chunk-L4CW6LZQ.js';
28
28
  import { claudeCredential, repositoriesOf, primaryOf, buildEnvironment, JOB_MOUNT, CHECKOUT_DIR, parseIsolation, proxyEnvironment, withProxyWarningHidden, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, withHooksPath, startBuildServices, BUILT_IN_NAMES, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, authorEnvironment, withTunnelRecord, commitIdentityRecord, RELAY_PORT, repositoryPath, lifecycleWorkdir, checkEnvironment, EVAL_INPUT_DIR } from './chunk-2K3TCQHW.js';
29
29
  import { RUNNER_WORDED_REASONS, UNKNOWN_TRACKING_REASON } from './chunk-JGD5TWQ2.js';
30
30
  import { existsSync, statSync, appendFileSync, mkdirSync, chmodSync, writeFileSync, accessSync, constants, openSync, readFileSync, closeSync, rmSync, readdirSync, linkSync, lstatSync, fstatSync, readSync, realpathSync } from 'fs';
@@ -207,9 +207,17 @@ function vmAlive(runtime, state) {
207
207
  if (state.jailed !== void 0) return runtime.vm.helper.alive(state.jailed.unit);
208
208
  return state.firecracker !== void 0 && runtime.vm.firecracker.alive(state.firecracker);
209
209
  }
210
+ function makeBuildsDirPrivate(buildDir2) {
211
+ const builds = dirname(buildDir2);
212
+ const stat = statSync(builds);
213
+ if (stat.uid === process.getuid?.() && (stat.mode & 18) !== 0) chmodSync(builds, 448);
214
+ }
210
215
  async function helperFor(runtime, log) {
211
216
  const probe = await runtime.vm.helper.probe();
212
- if (probe.ok) return probe.client;
217
+ if (probe.ok) {
218
+ if (probe.firecracker !== FIRECRACKER_VERSION) log(`${helperFirecrackerNote(probe.firecracker)}; run \`outerlayer runner install --service --replace\` to update it`);
219
+ return probe.client;
220
+ }
213
221
  if (probe.reason === "unsupported") log(probe.detail);
214
222
  else if (probe.unreachable === true) log(`${probe.detail}, so this build runs without the jailer`);
215
223
  return void 0;
@@ -337,6 +345,7 @@ async function provisionMicroVm(input) {
337
345
  if (input.aborted()) return bail("", true);
338
346
  mkdirSync(buildDir2, { recursive: true, mode: 448 });
339
347
  chmodSync(buildDir2, 448);
348
+ makeBuildsDirPrivate(buildDir2);
340
349
  try {
341
350
  const gitRemote = gitRemoteFor(runtime, { repositories, tokens, buildDir: buildDir2, log: (line) => log.line(`${tag} ${line}`) });
342
351
  runtime.tunnels.set(buildId, await startServicesFor(runtime, config, buildDir2, jobDir, itemKey, true, gitRemote));
@@ -242,12 +242,12 @@ var MICROVM_ARCHES = ["x86_64"];
242
242
  function firecrackerArch(nodeArch) {
243
243
  return nodeArch === "x64" ? "x86_64" : nodeArch === "arm64" ? "aarch64" : nodeArch;
244
244
  }
245
- var FIRECRACKER_VERSION = "1.16.2";
245
+ var FIRECRACKER_VERSION = "1.17.0";
246
246
  var FIRECRACKER_SHA256 = {
247
- x86_64: "32e3cdcd4081f91fe2b024a266f57dcb3b4e5fec5033e0cb22467ad7f7820bda"
247
+ x86_64: "06094a1108ae9e82aa4c23a775aa92758f53f1175d422270d9d6162cb9ade558"
248
248
  };
249
249
  var FIRECRACKER_BINARY_SHA256 = {
250
- x86_64: "8227875ceda44177a4d501052dae4a2f9d7837362f5399f02cf0748e68418377"
250
+ x86_64: "99ad0f5cd0514a88aad0e9ae8cfdb3cc3b4ab9d190e1194602406c786b5de7a5"
251
251
  };
252
252
  var GUEST_ASSETS_VERSION = "1";
253
253
  var GUEST_ASSETS_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/guest-${GUEST_ASSETS_VERSION}`;
@@ -262,7 +262,7 @@ function guestAssetsPinned(arch) {
262
262
  return GUEST_KERNEL_SHA256[arch] !== zero && GUEST_HELPER_SHA256[arch] !== zero;
263
263
  }
264
264
  var JAILER_BINARY_SHA256 = {
265
- x86_64: "99832d2270741af67ffacd46da716b4b016338541af5a742907ab965b2e9ac9e"
265
+ x86_64: "65ef226e96f0ceda55ba643f445801ef2cc0ea667ef67cad8ac4f406c9c8434f"
266
266
  };
267
267
  var HOST_HELPER_ASSETS_VERSION = "4";
268
268
  var HOST_HELPER_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/guest-${HOST_HELPER_ASSETS_VERSION}`;
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { DEFAULT_UNIT_NAME } from './chunk-IGRRD7PX.js';
3
+ import { DEFAULT_UNIT_NAME } from './chunk-MLD2NA7N.js';
4
4
  import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
5
- import { RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
5
+ import { RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
6
6
  import { existsSync, readFileSync, writeFileSync, renameSync, rmSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { isVersion, compareVersions } from './chunk-TQMI335S.js';
4
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
5
5
  import { readFileSync, mkdirSync, writeFileSync, renameSync } from 'fs';
6
6
  import { join } from 'path';
7
7
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
4
4
  import { readFileSync, mkdirSync, writeFileSync, renameSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { MIN_ENGINE_MAJOR } from './chunk-ENFBARQP.js';
4
- import { runnerImageVersion } from './chunk-5222PA6S.js';
5
- import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-APBTVIM4.js';
3
+ import { MIN_ENGINE_MAJOR } from './chunk-6WZKI6LQ.js';
4
+ import { runnerImageVersion } from './chunk-665QWBNW.js';
5
+ import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-4R24DSL2.js';
6
6
  import { spawnSync } from 'child_process';
7
7
  import { existsSync, accessSync, constants, statSync, readFileSync } from 'fs';
8
8
 
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { runnerImageVersion } from './chunk-5222PA6S.js';
4
- import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-Q435LWVN.js';
3
+ import { runnerImageVersion } from './chunk-665QWBNW.js';
4
+ import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-AINUN2TT.js';
5
5
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
6
6
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
7
- import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, JUDGE_REPORT, MAX_REPORT_BYTES, spawnRun } from './chunk-N3VSI5ZI.js';
8
- import { hostHelperPinned, firecrackerArch, MICROVM_ARCHES, RecipeError, DOCKER_FEATURE, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GUEST_ASSETS_VERSION, DEFAULT_BASE_IMAGE } from './chunk-APBTVIM4.js';
7
+ import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, JUDGE_REPORT, MAX_REPORT_BYTES, spawnRun } from './chunk-7I6GZSN3.js';
8
+ import { FIRECRACKER_VERSION, hostHelperPinned, firecrackerArch, MICROVM_ARCHES, RecipeError, DOCKER_FEATURE, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, DEFAULT_BASE_IMAGE } from './chunk-4R24DSL2.js';
9
9
  import { execCapture } from './chunk-HPOEVC2V.js';
10
10
  import { GUEST_CID } from './chunk-XGJUNNXL.js';
11
- import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-3FNPTQRH.js';
12
- import { WorkCommandError } from './chunk-CQRIZNE6.js';
11
+ import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-WVM6PM2N.js';
12
+ import { WorkCommandError } from './chunk-DZUANBKP.js';
13
13
  import { hostAllowed } from './chunk-UXYLWVTQ.js';
14
14
  import { parseDuKilobytes } from './chunk-7RQ73DLO.js';
15
15
  import { sharedSkillNames, skillConflictMessage } from './chunk-VPEGE3QZ.js';
@@ -17,7 +17,7 @@ import { versionAtLeast, MINIMUM_CLAUDE_VERSION } from './chunk-HCVLP7XA.js';
17
17
  import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-QE3UQAHK.js';
18
18
  import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-RKOTJQVG.js';
19
19
  import { downconvertSession } from './chunk-QZBXLLTV.js';
20
- import { vmAssetsDir, RUNNER_DIR_MODE, rootfsPathFor, diskTemplatesDir, RUNNER_FILE_MODE, deliveryDir, ghConfigDir, runnerDirOfBuild, spoolDir, mirrorDir, buildDir, SHIM_DIR } from './chunk-ZI2ZVWKT.js';
20
+ import { vmAssetsDir, RUNNER_DIR_MODE, rootfsPathFor, diskTemplatesDir, RUNNER_FILE_MODE, deliveryDir, ghConfigDir, runnerDirOfBuild, spoolDir, mirrorDir, buildDir, SHIM_DIR } from './chunk-L4CW6LZQ.js';
21
21
  import { repositoriesOf, primaryOf, RELAY_PORT, repositoryPath, CHECKOUT_DIR, lifecycleWorkdir, claudeCredential, buildEnvironment, startBuildServices, checkEnvironment, AGENT_CREDENTIAL_MISSING, checkoutPath, JOB_MOUNT } from './chunk-2K3TCQHW.js';
22
22
  import { RELAY_USER, RELAY_ID, UNKNOWN_TRANSPORT_REASON, DOCKER_DESKTOP_REASON, MAX_MALFORMED_SESSIONS, MALFORMED_REASON, MAX_OPEN_STREAMS, STREAM_WINDOW, SESSION_WINDOW, targetOfPath } from './chunk-JGD5TWQ2.js';
23
23
  import { readFileSync, mkdirSync, existsSync, mkdtempSync, rmSync, chmodSync, truncateSync, writeFileSync, readdirSync, lstatSync, copyFileSync, accessSync, constants, statSync, rmdirSync, renameSync, unlinkSync, openSync, closeSync, createWriteStream, createReadStream } from 'fs';
@@ -213,6 +213,9 @@ function helperClient(socketPath, options = {}) {
213
213
  }
214
214
  };
215
215
  }
216
+ function helperFirecrackerNote(helperFirecracker) {
217
+ return `the root helper runs Firecracker ${helperFirecracker}, not the ${FIRECRACKER_VERSION} this release pins, so microVM builds run under the jailer with Firecracker ${helperFirecracker}`;
218
+ }
216
219
  function reinstallMessage(protocol) {
217
220
  const spoken = protocol === void 0 ? "a protocol it does not name" : `protocol ${protocol}`;
218
221
  return `the root helper speaks ${spoken}, which this runner does not support, so microVM builds run without the jailer; run \`outerlayer runner install --service --replace\` to install the helper that goes with this release`;
@@ -476,8 +479,12 @@ async function download(file, url, fetchImpl) {
476
479
  if (!response.ok) throw new AssetError(file, `${file} could not be downloaded from ${url}: the server answered ${response.status}`);
477
480
  return Buffer.from(await response.arrayBuffer());
478
481
  }
482
+ function keptPath(dir, sha256, name) {
483
+ mkdirSync(join(dir, sha256), { recursive: true, mode: RUNNER_DIR_MODE });
484
+ return join(dir, sha256, name);
485
+ }
479
486
  async function ensureFile(dir, file, pin, fetchImpl, mode) {
480
- const path = join(dir, file);
487
+ const path = keptPath(dir, pin.sha256, file);
481
488
  if (existsSync(path)) {
482
489
  const actual2 = sha256Of(readFileSync(path));
483
490
  if (actual2 !== pin.sha256) throw pinProblem(file, pin.sha256, actual2, `at ${path}`);
@@ -499,7 +506,7 @@ function extractWithTar(arch, program = "firecracker") {
499
506
  }
500
507
  async function ensureFirecracker(input) {
501
508
  const { dir, arch, pins, fetchImpl } = input;
502
- const firecracker = join(dir, "firecracker");
509
+ const firecracker = keptPath(dir, pins.firecracker.binarySha256, "firecracker");
503
510
  if (existsSync(firecracker)) {
504
511
  const actual = sha256Of(readFileSync(firecracker));
505
512
  if (actual !== pins.firecracker.binarySha256) throw pinProblem("firecracker", pins.firecracker.binarySha256, actual, `at ${firecracker}`);
@@ -549,7 +556,7 @@ async function ensureJailer(options) {
549
556
  const fetchImpl = options.fetchImpl ?? fetch;
550
557
  const dir = vmAssetsDir(options.runnerDir);
551
558
  mkdirSync(dir, { recursive: true, mode: RUNNER_DIR_MODE });
552
- const jailer = join(dir, "jailer");
559
+ const jailer = keptPath(dir, expected, "jailer");
553
560
  if (existsSync(jailer)) {
554
561
  const actual = sha256Of(readFileSync(jailer));
555
562
  if (actual !== expected) throw pinProblem("jailer", expected, actual, `at ${jailer}`);
@@ -3304,4 +3311,4 @@ async function startCheckContainer(input) {
3304
3311
  };
3305
3312
  }
3306
3313
 
3307
- export { ADDED_USER, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HelperRefusal, LEASE_SECONDS, MIN_ENGINE_MAJOR, cleanupContainer, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, deleteBuildDisk, deliverContainerHooks, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, filesAreCopied, ghHostsYml, gitRemoteFor, helperSocketPath, isLiteralAddress, keepGhConfigCurrent, leaseExpiresAtMs, lifecycleFailureReason, lifecycleSteps, machineConfig, measureDisk, obtainImage, outOfMemoryReason, parseCpuList, prepareBranch, probeHelper, provisionContainer, resolveAgentUser, runBuildSteps, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startServicesFor, stopContainer, syncInContainer, writeEvalInput };
3314
+ export { ADDED_USER, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HelperRefusal, LEASE_SECONDS, MIN_ENGINE_MAJOR, cleanupContainer, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, deleteBuildDisk, deliverContainerHooks, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, filesAreCopied, ghHostsYml, gitRemoteFor, helperFirecrackerNote, helperSocketPath, isLiteralAddress, keepGhConfigCurrent, leaseExpiresAtMs, lifecycleFailureReason, lifecycleSteps, machineConfig, measureDisk, obtainImage, outOfMemoryReason, parseCpuList, prepareBranch, probeHelper, provisionContainer, resolveAgentUser, runBuildSteps, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startServicesFor, stopContainer, syncInContainer, writeEvalInput };
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RecipeError, BUILDKIT_IMAGE } from './chunk-APBTVIM4.js';
3
+ import { RecipeError, BUILDKIT_IMAGE } from './chunk-4R24DSL2.js';
4
4
  import { parseSize } from './chunk-7RQ73DLO.js';
5
5
  import { compareVersions } from './chunk-QE3UQAHK.js';
6
- import { ensureHostKey } from './chunk-ZODVSFI4.js';
7
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-ZI2ZVWKT.js';
6
+ import { ensureHostKey } from './chunk-F6DIHHBS.js';
7
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-L4CW6LZQ.js';
8
8
  import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-2K3TCQHW.js';
9
9
  import { JOIN_DIR, RELAY_ID, JOIN_SOCKET, TARGET_GATEWAY, TARGET_CLAUDE, destinationTarget, RELAY_USER } from './chunk-JGD5TWQ2.js';
10
10
  import { StringDecoder } from 'string_decoder';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-DEBOL6ON.js';
3
+ import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-PYSKSROG.js';
4
4
  import { startTimeOf } from './chunk-JBJTC3UU.js';
5
- import { CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, RecipeError, locateRecipe, readRecipe, assertBuildable, TINI_VERSION, GH_VERSION, writeSanitizedRecipe, classifyProperties, GH_SHA256, TINI_SHA256, SANITIZED_NAME } from './chunk-APBTVIM4.js';
6
- import { RUNNER_DIR_MODE, repoCacheDir, imagesDir, attemptStamp, runnerDir, rootfsPathFor, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
5
+ import { CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, RecipeError, locateRecipe, readRecipe, assertBuildable, TINI_VERSION, GH_VERSION, writeSanitizedRecipe, classifyProperties, GH_SHA256, TINI_SHA256, SANITIZED_NAME } from './chunk-4R24DSL2.js';
6
+ import { RUNNER_DIR_MODE, repoCacheDir, imagesDir, attemptStamp, runnerDir, rootfsPathFor, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
7
7
  import { withGitConfig, tokenHeader, PROXY_WARNING_FLAG } from './chunk-2K3TCQHW.js';
8
8
  import { RELAY_ID, RELAY_USER } from './chunk-JGD5TWQ2.js';
9
9
  import { mkdirSync, rmSync, existsSync, mkdtempSync, cpSync, readFileSync, writeFileSync, readdirSync, lstatSync, readlinkSync } from 'fs';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-S6AWZKJN.js';
4
- import { MIN_ENGINE_MAJOR } from './chunk-ENFBARQP.js';
5
- import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-ZGMQQWCV.js';
3
+ import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-6S3UEBLB.js';
4
+ import { MIN_ENGINE_MAJOR } from './chunk-6WZKI6LQ.js';
5
+ import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-5PMQDQFV.js';
6
6
  import { runnerCredentialProblem } from './chunk-JWRX5ZTT.js';
7
- import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
7
+ import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
8
8
  import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
9
9
  import { dirname } from 'path';
10
10
 
@@ -628,7 +628,7 @@ async function missingControlPlane(cwd, sessionId, home, env) {
628
628
  cleanupEarlierCopies(dirs);
629
629
  }
630
630
  if (!contextPossiblyGoverned(cwd, home)) return void 0;
631
- const { governanceOf } = await import('./control-plane-launch-ZFT6SI4N.js');
631
+ const { governanceOf } = await import('./control-plane-launch-FRK5IZXC.js');
632
632
  if (await governanceOf({ cwd, env, home }) !== "governed") return void 0;
633
633
  recordMissingContext(dirs, sessionId, home);
634
634
  const launcher = `${cliInvocation()} claude`;
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { autoConnect, detectActiveSession } from './chunk-3WZ5ECSM.js';
4
- import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-M4B6QKNZ.js';
3
+ import { autoConnect, detectActiveSession } from './chunk-FQCLEH34.js';
4
+ import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-GJZEUQ6D.js';
5
5
  import { resolveRepoIdentity } from './chunk-QE3UQAHK.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { removeRetiredSkills } from './chunk-MQ743JX3.js';
4
- import { defaultFetch, resolveGatewayCredentials } from './chunk-M4B6QKNZ.js';
4
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-GJZEUQ6D.js';
5
5
  import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
6
6
  import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-HBISTTG3.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';
@@ -1,30 +1,30 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, commandLogOffset, execCommandLine, startSender, startHostServices, finishJob, isContainerTracked, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, ALREADY_RELEASED, inTeardown } from './chunk-A6ORKBVJ.js';
4
- import { writePendingUpdate } from './chunk-XRYUJTAT.js';
3
+ import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, commandLogOffset, execCommandLine, startSender, startHostServices, finishJob, isContainerTracked, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, ALREADY_RELEASED, inTeardown } from './chunk-4QKHBDEN.js';
4
+ import { writePendingUpdate } from './chunk-TKL74NLB.js';
5
5
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
6
- import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-O2WYUIK7.js';
6
+ import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-6FAP657M.js';
7
7
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
8
8
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-YETTWTAY.js';
9
9
  import { RUNNER_PROTOCOL } from './chunk-TPKYTORP.js';
10
- import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-24LQ34XL.js';
11
- import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-QMQC6JCO.js';
10
+ import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-TI33WRBT.js';
11
+ import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-4IFKLYMM.js';
12
12
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
13
13
  import { RepoFilter } from './chunk-TBT347UY.js';
14
- import { LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, measureDisk, setUpRunnerCgroup, createContainerRuntime, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied } from './chunk-ENFBARQP.js';
15
- import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-5222PA6S.js';
14
+ import { LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, measureDisk, setUpRunnerCgroup, createContainerRuntime, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied } from './chunk-6WZKI6LQ.js';
15
+ import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-665QWBNW.js';
16
16
  import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
17
- import { checkFit } from './chunk-IGRRD7PX.js';
18
- import { claimPidFile, readPidFile, releasePidFile } from './chunk-DEBOL6ON.js';
17
+ import { checkFit } from './chunk-MLD2NA7N.js';
18
+ import { claimPidFile, readPidFile, releasePidFile } from './chunk-PYSKSROG.js';
19
19
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
20
- import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-N3VSI5ZI.js';
21
- import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-3FNPTQRH.js';
22
- import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-CQRIZNE6.js';
20
+ import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-7I6GZSN3.js';
21
+ import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-WVM6PM2N.js';
22
+ import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-DZUANBKP.js';
23
23
  import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-JWRX5ZTT.js';
24
24
  import { exceedsDisk } from './chunk-7RQ73DLO.js';
25
25
  import { resolveVersion } from './chunk-RA3O54FC.js';
26
- import { loadHostKey, ensureHostKey, signerFor } from './chunk-ZODVSFI4.js';
27
- import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, rootfsDir } from './chunk-ZI2ZVWKT.js';
26
+ import { loadHostKey, ensureHostKey, signerFor } from './chunk-F6DIHHBS.js';
27
+ import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, rootfsDir } from './chunk-L4CW6LZQ.js';
28
28
  import { parseClaimIdentity, parseClaimedRepositories, parseUnreachable, repositoriesOf, primaryOf, sharedUserEnvironment, JOB_MOUNT, claudeCredential } from './chunk-2K3TCQHW.js';
29
29
  import { COMMAND_LOST_REASON, CONTAINER_STOPPED_REASON } from './chunk-JGD5TWQ2.js';
30
30
  import { randomBytes } from 'crypto';
@@ -1746,7 +1746,7 @@ var CLAIM_REFUSAL_CODES = new Set(
1746
1746
  "pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected repository_not_reachable branch_claimed_elsewhere".split(" ")
1747
1747
  );
1748
1748
  async function tryClaimAndStart(state, item, queue) {
1749
- const { postJson: postJson2 } = await import('./work-cmd-6HARIBMW.js');
1749
+ const { postJson: postJson2 } = await import('./work-cmd-C3CFJZYD.js');
1750
1750
  const log = logOf(state);
1751
1751
  const hostKey = await loadHostKey(state.config.configPath);
1752
1752
  const claim = await retrySend(
@@ -2730,7 +2730,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
2730
2730
  const outcome = await onStartUnderMarker({
2731
2731
  configPath,
2732
2732
  own: ownVersionOf(deps),
2733
- check: update.check ? () => update.check(configPath) : async () => (await import('./check-C6HEFW6R.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
2733
+ check: update.check ? () => update.check(configPath) : async () => (await import('./check-FAGTKWHT.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
2734
2734
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
2735
2735
  log
2736
2736
  });
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectActiveSession, autoConnect } from './chunk-3WZ5ECSM.js';
4
- import { workPageUrl } from './chunk-SNQR2EYI.js';
3
+ import { detectActiveSession, autoConnect } from './chunk-FQCLEH34.js';
4
+ import { workPageUrl } from './chunk-G2T4HCGT.js';
5
5
  import { sanitizeTerminal } from './chunk-BUP5N3X6.js';
6
- import { resolveGatewayCredentials, unauthorizedMessage, defaultFetch } from './chunk-M4B6QKNZ.js';
6
+ import { resolveGatewayCredentials, unauthorizedMessage, defaultFetch } from './chunk-GJZEUQ6D.js';
7
7
  import { readRepoConnection } from './chunk-BJ3KTMDH.js';
8
8
  import { resolveRepoIdentity } from './chunk-QE3UQAHK.js';
9
9
  import { C } from './chunk-ANPNT6PM.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
11
11
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
12
- import { signRunnerRequest } from './chunk-ZODVSFI4.js';
12
+ import { signRunnerRequest } from './chunk-F6DIHHBS.js';
13
13
 
14
14
  createRequire(import.meta.url);
15
15
 
@@ -428,7 +428,7 @@ async function runWorkLinkSession(opts) {
428
428
  return await linkSession(opts);
429
429
  } catch (err) {
430
430
  if (opts.logFailures) {
431
- const { logHookError } = await import('./hook-fast-NEELST6G.js');
431
+ const { logHookError } = await import('./hook-fast-GD7F2EBL.js');
432
432
  const reason = err instanceof Error ? err.message : String(err);
433
433
  logHookError(opts.home ?? homeFromEnv(opts.env ?? process.env), new Error(`work link-session #${opts.number} failed: ${reason}`));
434
434
  }
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
3
+ import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
4
4
  import { generateKeyPairSync, createPrivateKey, createPublicKey, sign } from 'crypto';
5
5
  import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
6
6