@outerlayer/cli 0.27.1 → 0.28.2

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 (129) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +6 -0
  3. package/dist/{agent-setup-UW36TAQM.js → agent-setup-YVR5RO56.js} +17 -14
  4. package/dist/{bridge-B5VJVECY.js → bridge-WW2V7DTB.js} +3 -2
  5. package/dist/build-5FRC3RKM.js +13 -0
  6. package/dist/build-info.json +1 -1
  7. package/dist/{builder-6Y6ZWGNH.js → builder-4F2XNSFC.js} +7 -6
  8. package/dist/{check-YTXFVWK7.js → check-YEI6TCUH.js} +70 -61
  9. package/dist/{chunk-LPFOWUHG.js → chunk-25X2PJDI.js} +20 -13
  10. package/dist/{chunk-BPKO76QR.js → chunk-4XN5FRRJ.js} +4 -4
  11. package/dist/{chunk-EPPIISRD.js → chunk-55XLX5PA.js} +1 -1
  12. package/dist/{chunk-LOKSLO25.js → chunk-5B7BEQPR.js} +1 -1
  13. package/dist/chunk-5BHIBJDA.js +93 -0
  14. package/dist/{chunk-RHAGBUL5.js → chunk-5K3KB4YR.js} +1 -1
  15. package/dist/{chunk-ABXQBEYK.js → chunk-66T6XJAB.js} +1 -1
  16. package/dist/{chunk-ZFBJUOYT.js → chunk-6S4V4UIC.js} +10 -10
  17. package/dist/{chunk-BWH36FOC.js → chunk-7CK2TJFB.js} +20 -4
  18. package/dist/{chunk-QKIQ2R7F.js → chunk-ATJOFXTE.js} +3 -3
  19. package/dist/chunk-CDDED64E.js +13 -0
  20. package/dist/{chunk-QHH4OSD4.js → chunk-CTYSTE5C.js} +1 -1
  21. package/dist/{chunk-DJHNEGNM.js → chunk-DKWQMPSL.js} +18 -2
  22. package/dist/{chunk-IMOB4IOI.js → chunk-DQYMQ47E.js} +3 -2
  23. package/dist/{chunk-YETTWTAY.js → chunk-E7R2GIAW.js} +4 -4
  24. package/dist/{chunk-GFUE5TKO.js → chunk-F4FA3ZUT.js} +24 -14
  25. package/dist/{chunk-6TRNCUM4.js → chunk-FGF52V4V.js} +1 -1
  26. package/dist/{chunk-R7SGBXUD.js → chunk-GLL4TN2M.js} +226 -72
  27. package/dist/{chunk-MATUHHN4.js → chunk-GUXWQIEY.js} +1 -1
  28. package/dist/{chunk-B7DJVG25.js → chunk-HOB7Z4JQ.js} +3 -3
  29. package/dist/{chunk-2I3LIRZP.js → chunk-HXAEQPZR.js} +101 -10
  30. package/dist/{chunk-P33PZIWS.js → chunk-ITAIEJ2T.js} +7 -142
  31. package/dist/{chunk-RHGF73IU.js → chunk-IVX3U7KV.js} +1 -1
  32. package/dist/{chunk-7OUOLGUV.js → chunk-JGML2VUN.js} +3 -7
  33. package/dist/{chunk-6VFH52MP.js → chunk-KU7QL4XW.js} +24 -22
  34. package/dist/{chunk-2F762IXY.js → chunk-LNIFYSNK.js} +3 -3
  35. package/dist/{chunk-XBPUTQ7E.js → chunk-MHAR6S7B.js} +1 -1
  36. package/dist/{chunk-VS27BP3E.js → chunk-MKIC65SD.js} +52 -9
  37. package/dist/{chunk-64GMBWAK.js → chunk-MNHMUZGC.js} +6 -6
  38. package/dist/{chunk-7AQ5AM7U.js → chunk-MQHTM4YJ.js} +177 -21
  39. package/dist/{chunk-6KKM7VGZ.js → chunk-N7WAEEIU.js} +3 -3
  40. package/dist/{chunk-D7ECMB7B.js → chunk-NUHZV3A4.js} +1 -1
  41. package/dist/{chunk-5VMDGJGH.js → chunk-O65LES4V.js} +39 -25
  42. package/dist/{chunk-MHX7YX7Y.js → chunk-P2RWZCV7.js} +1 -1
  43. package/dist/chunk-QBQHQEUG.js +300 -0
  44. package/dist/{chunk-FP23SVDD.js → chunk-QJFDAKRF.js} +5 -5
  45. package/dist/{chunk-WUL2OP5A.js → chunk-QKXF7CLR.js} +3 -3
  46. package/dist/{chunk-XZ6Q6ZNR.js → chunk-SATUCMAJ.js} +3 -2
  47. package/dist/{chunk-Y7ZCHBYB.js → chunk-SFJXGISY.js} +3 -3
  48. package/dist/{chunk-2BTFKNTR.js → chunk-SJZL5F3F.js} +2 -2
  49. package/dist/{chunk-HWDYLXHH.js → chunk-T2QSWFSU.js} +4 -4
  50. package/dist/{chunk-E5IJ5533.js → chunk-TF7G2PR6.js} +3 -3
  51. package/dist/{chunk-O2IJTY7L.js → chunk-TVZAC2NP.js} +3 -3
  52. package/dist/{chunk-QE3UQAHK.js → chunk-UHU7H57K.js} +26 -7
  53. package/dist/{chunk-WSYXLLA5.js → chunk-USJZ2LDK.js} +6 -6
  54. package/dist/{chunk-EX5MQYEF.js → chunk-VC5J7QPV.js} +5 -5
  55. package/dist/{chunk-N4D5TMVU.js → chunk-VU7ZJPIR.js} +5 -5
  56. package/dist/{chunk-GLUKDQS4.js → chunk-WWQVKFN6.js} +1 -1
  57. package/dist/{chunk-55GNQPO6.js → chunk-X52PMPOM.js} +7 -7
  58. package/dist/{chunk-YB3CSYXX.js → chunk-XD4ZCMA4.js} +81 -2
  59. package/dist/{chunk-Y4OKEFAX.js → chunk-YL2VDSNF.js} +1 -1
  60. package/dist/{chunk-M3MHHIUW.js → chunk-Z3ASAXVU.js} +1 -1
  61. package/dist/{chunk-XS3FDWSZ.js → chunk-ZTY7HHYB.js} +1 -1
  62. package/dist/{claude-launcher-NQSZBTQ5.js → claude-launcher-7RGVOYCD.js} +6 -5
  63. package/dist/{cli-GHEOBXC7.js → cli-SCTKM2Y5.js} +151 -130
  64. package/dist/cli-update-notice-4DLZ3655.js +9 -0
  65. package/dist/{command-V7B7GTPZ.js → command-PY3C2E4B.js} +53 -37
  66. package/dist/{config-TWS5VZEN.js → config-5QYIKYUP.js} +3 -2
  67. package/dist/{connect-cmd-HGS7YPA2.js → connect-cmd-5TYAOK5M.js} +14 -11
  68. package/dist/{container-start-FHB2VDC4.js → container-start-7WLZMPEI.js} +37 -36
  69. package/dist/{control-plane-launch-DBQA3KLJ.js → control-plane-launch-FZMD4MXX.js} +13 -10
  70. package/dist/{dist-QPHZE47F.js → dist-JFVKLUHL.js} +1 -1
  71. package/dist/{docker-YT6Z3LXI.js → docker-ZTC4EIU4.js} +7 -6
  72. package/dist/{doctor-Y4NCNSJM.js → doctor-DQWRUAEB.js} +159 -41
  73. package/dist/{emit-artifact-cmd-ALDK55Y2.js → emit-artifact-cmd-SOXLBPQB.js} +19 -16
  74. package/dist/{emit-cmd-VAQHRWJR.js → emit-cmd-QUABLVO6.js} +6 -5
  75. package/dist/{emit-criteria-cmd-Q7SM6VP2.js → emit-criteria-cmd-JDO2VUG5.js} +15 -12
  76. package/dist/{emit-finding-cmd-2NBAPDSV.js → emit-finding-cmd-VCQPCLI2.js} +16 -13
  77. package/dist/{emit-result-cmd-KUSL56RI.js → emit-result-cmd-TKA3GAN7.js} +19 -16
  78. package/dist/{emit-step-cmd-KD4AKEAT.js → emit-step-cmd-XN44BXYU.js} +16 -13
  79. package/dist/{exec-client-6WVS7DRZ.js → exec-client-VKT2XNB3.js} +4 -3
  80. package/dist/fleet-readiness-G5X3MKP2.js +29 -0
  81. package/dist/{governing-source-VVUA5TKB.js → governing-source-B3M2U4BC.js} +21 -18
  82. package/dist/{guest-init-H5K2RW3P.js → guest-init-QW2DPX7H.js} +5 -4
  83. package/dist/{hook-fast-3SUJM765.js → hook-fast-EFC44SXV.js} +4 -1
  84. package/dist/{host-key-XNKZCWTS.js → host-key-AC6LTZDS.js} +4 -3
  85. package/dist/{image-tag-R34J4O3F.js → image-tag-SS7YKJHN.js} +4 -3
  86. package/dist/index.js +4 -4
  87. package/dist/init-5LHTF72R.js +56 -0
  88. package/dist/{init-3DAGX7UY.js → init-BTH5YPBC.js} +38 -37
  89. package/dist/{init-cmd-RIDBVSE4.js → init-cmd-L4VW3ZCT.js} +25 -21
  90. package/dist/{init-update-ECWNG47R.js → init-update-RWTQSTPE.js} +51 -35
  91. package/dist/{inspect-IPFA7AAT.js → inspect-L7JIBK3Y.js} +1 -1
  92. package/dist/{install-6OIY3KHZ.js → install-35SAMY75.js} +5 -5
  93. package/dist/{install-cmd-JMT67P35.js → install-cmd-GFY4QF72.js} +6 -5
  94. package/dist/{layout-XNFDTOET.js → layout-BBTQPS6V.js} +4 -3
  95. package/dist/{login-browser-EWXSGHM7.js → login-browser-WSOSQH2T.js} +2 -2
  96. package/dist/{logs-XHAS6LMZ.js → logs-X2IRDP5T.js} +3 -2
  97. package/dist/loop-QDV7T65M.js +80 -0
  98. package/dist/{machine-OOQ2NXC3.js → machine-PLNSGKNF.js} +32 -30
  99. package/dist/{machine-skills-FLIRJYP7.js → machine-skills-O7W6NMWB.js} +4 -3
  100. package/dist/{mcp-serve-cmd-LY5A3CE7.js → mcp-serve-cmd-IITCPAAR.js} +9 -6
  101. package/dist/{paths-LHSPNORF.js → paths-32DWGK35.js} +3 -2
  102. package/dist/pending-CSIY4Y2I.js +10 -0
  103. package/dist/{pidfile-DKMYYXLH.js → pidfile-CYCTH6NQ.js} +4 -3
  104. package/dist/{real-deps-KNNBQC75.js → real-deps-QX5YH7FG.js} +1 -1
  105. package/dist/{record-3LPTY3G5.js → record-N4WPZCGK.js} +4 -3
  106. package/dist/{relay-GFPPD6GF.js → relay-FJ5K37Z5.js} +8 -4
  107. package/dist/{runner-env-YRRNRKF4.js → runner-env-EIB6WFPG.js} +6 -7
  108. package/dist/{runner-identity-YS2BZXZV.js → runner-identity-S3V6I4I3.js} +7 -6
  109. package/dist/{runner-key-EFNTZWNX.js → runner-key-M4N2BY5A.js} +36 -35
  110. package/dist/{session-sender-SC5PSU2G.js → session-sender-UQ3VF732.js} +20 -17
  111. package/dist/{spec-cmd-JGYHHJ4P.js → spec-cmd-Z6MGATWC.js} +16 -13
  112. package/dist/{starter-pack-GPU4X6B7.js → starter-pack-5SOT5V4I.js} +4 -3
  113. package/dist/{status-7WM7S7JX.js → status-PWMPP4ES.js} +39 -37
  114. package/dist/{sync-cmd-ATXJVS7S.js → sync-cmd-N4R7ST6X.js} +19 -16
  115. package/dist/{watch-M7NR3DOW.js → watch-L5MSAWEO.js} +19 -16
  116. package/dist/{work-claim-cmd-DNUDZKJA.js → work-claim-cmd-CXALMILD.js} +21 -18
  117. package/dist/{work-cmd-VECTYST6.js → work-cmd-COESFSHE.js} +16 -13
  118. package/dist/{work-comment-cmd-F3NRWKPZ.js → work-comment-cmd-A4ZUVCSA.js} +16 -13
  119. package/dist/{work-logs-cmd-QF6P32FE.js → work-logs-cmd-CTF43MBE.js} +16 -13
  120. package/dist/{work-open-pr-cmd-XE23JA3R.js → work-open-pr-cmd-EMGYJXVD.js} +17 -14
  121. package/dist/{work-pr-cmd-BH56GUKN.js → work-pr-cmd-FEXMS6RH.js} +16 -13
  122. package/dist/{work-stop-cmd-C3F5HNUO.js → work-stop-cmd-NIHAN45R.js} +16 -13
  123. package/package.json +1 -1
  124. package/dist/build-HRLACBOZ.js +0 -12
  125. package/dist/chunk-STSLH5EJ.js +0 -71
  126. package/dist/init-SWKYV6CL.js +0 -55
  127. package/dist/loop-AIJZVUNA.js +0 -79
  128. package/dist/pending-3YZCSKON.js +0 -9
  129. package/dist/{chunk-6BLXUD56.js → chunk-HOU33DW5.js} +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # @outerlayer/cli
2
2
 
3
+ ## 0.28.2
4
+
5
+ ### Patch Changes
6
+
7
+ - b61b6ba: `outerlayer sync` uploads a helper agent as finished once its parent session was told it stopped, even while the parent still runs. Before, each `sync` uploaded every helper of a running session as open, so finished helpers read as running until the whole session ended.
8
+ - fc2ba91: A container build's downloads arrive whole, so package installs no longer fail with aborted requests. A burst of connections no longer drops the build's link to the runner.
9
+
10
+ ## 0.28.1
11
+
12
+ ### Patch Changes
13
+
14
+ - 69efa74: With built-in hooks, no process the runner starts holds Claude's credential in its environment, Firecracker included. The runner keeps the credential in memory and loads it from `claude.env` with systemd's `LoadCredential=` on systemd 247 or later. The credential file stays readable by the runner's account, so a process that runs as that account and opens files can still read it. Run `outerlayer runner install --service --replace` to move an existing host.
15
+ - 69efa74: On Windows, `outerlayer runner install --service` turns off WSL2 interop, the Windows `PATH` and drive automount in the runner's distribution. They apply when the distribution restarts. When `schtasks.exe` cannot start, setup and uninstall print the `schtasks` command to run from Windows.
16
+
17
+ ## 0.28.0
18
+
19
+ ### Minor Changes
20
+
21
+ - 1c544ef: MicroVM builds on one host share its disk by weight, and `outerlayer doctor` says when the disk ignores that weight. A microVM that the runner starts itself keeps at most 8 MiB of console output.
22
+
23
+ Run `outerlayer runner install --service --replace` on a host with the root helper. It installs the helper that sets this weight.
24
+
25
+ ### Patch Changes
26
+
27
+ - 8196214: `outerlayer doctor` warns on its `MicroVM jailer` line when microVM builds cannot survive a runner restart for two more reasons. One is that the running runner started before its unit was replaced, so it cannot keep a build's sockets in the descriptor store; the fix is one `sudo systemctl restart outerlayer-runner` while no build runs. The other is a systemd older than 254. In both cases every build ends with its runner, and an update waits for every build.
28
+
29
+ ## 0.27.3
30
+
31
+ ### Patch Changes
32
+
33
+ - 0335339: `outerlayer init --update` changes each path to a removed maintained skill folder to `~/.agents/skills/`. It does this in `AGENTS.md`, `CLAUDE.md` and the Markdown files of the repository's skills. Before, it changed only the pointer to the core in an edited `build`, so a link anywhere else pointed at nothing. Validator and policy files are not changed. When it removes the maintained skills, it also asks the gateway for the factory's runner hosts. It names each host on a CLI older than 0.27.0, so you know whether the removal is safe to commit. `outerlayer doctor` reports the same two things.
34
+
35
+ ## 0.27.2
36
+
37
+ ### Patch Changes
38
+
39
+ - df7c184: The CLI tells you when a newer CLI version is available. It prints one line after a command in a terminal and adds one line to the agent's context at session start. It reads the version from the `OuterLayer-CLI-Version` header of gateway answers it already receives, so it sends no extra request. At session start it also tells you when the maintained skills in `~/.agents/skills/` come from another CLI version. `OUTERLAYER_NO_UPDATE_NOTICE` turns off the notices of a newer CLI version.
40
+ - 3992a42: The page on running the runner in a container states the memory, disk and CPUs that Docker Desktop must give the runner. A container build's CPU limit never exceeds the number of CPUs the runner can use.
41
+
3
42
  ## 0.27.1
4
43
 
5
44
  ### Patch Changes
package/README.md CHANGED
@@ -336,6 +336,12 @@ content:
336
336
  GitHub App permissions each connected repository's installation has not
337
337
  accepted, and whether each default branch requires a pull request. The
338
338
  request carries nothing about the host, and the gateway stores nothing.
339
+ - **`outerlayer init --update`**, when it removes the maintained skills a
340
+ repository commits, and **`outerlayer doctor`**, in a repository that still
341
+ commits them, ask your gateway (`GET /v1/hosts`, with the saved login or
342
+ key) for the factory's runner hosts and the CLI version each one reported.
343
+ The request carries nothing about this machine, and the gateway stores
344
+ nothing.
339
345
  - **`outerlayer runner check`** also asks your gateway (`GET /v1/runner/host-key`,
340
346
  with the runner key, signed with the host key) whether the key holds
341
347
  `work.claim`, so a key that cannot claim is named before the host takes work.
@@ -1,18 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { keepHandWritten, runAgentSetup } from './chunk-FP23SVDD.js';
4
- import './chunk-WUL2OP5A.js';
5
- import './chunk-XZ6Q6ZNR.js';
6
- import './chunk-LOKSLO25.js';
7
- import './chunk-BPKO76QR.js';
8
- import './chunk-MHX7YX7Y.js';
9
- import './chunk-BWH36FOC.js';
10
- import './chunk-ZJSNLVCE.js';
11
- import './chunk-BJ3KTMDH.js';
12
- import './chunk-7OUOLGUV.js';
3
+ export { keepHandWritten, runAgentSetup } from './chunk-QJFDAKRF.js';
4
+ import './chunk-QKXF7CLR.js';
13
5
  import './chunk-KT4CN6OU.js';
6
+ import './chunk-SATUCMAJ.js';
7
+ import './chunk-5B7BEQPR.js';
14
8
  import './chunk-ANPNT6PM.js';
9
+ import './chunk-4XN5FRRJ.js';
10
+ import './chunk-P2RWZCV7.js';
11
+ import './chunk-7CK2TJFB.js';
15
12
  import './chunk-PJDQPF5N.js';
13
+ import './chunk-YL2VDSNF.js';
14
+ import './chunk-5K3KB4YR.js';
15
+ import './chunk-HXAEQPZR.js';
16
+ import './chunk-ZJSNLVCE.js';
17
+ import './chunk-BJ3KTMDH.js';
18
+ import './chunk-JGML2VUN.js';
19
+ import './chunk-5BHIBJDA.js';
20
+ import './chunk-CDDED64E.js';
21
+ import './chunk-RA3O54FC.js';
16
22
  import './chunk-CRB3POP4.js';
17
23
  import './chunk-VWFOKRYS.js';
18
24
  import './chunk-YQR6E6OV.js';
@@ -20,10 +26,7 @@ import './chunk-TUSYOL2O.js';
20
26
  import './chunk-RKOTJQVG.js';
21
27
  import './chunk-QZBXLLTV.js';
22
28
  import './chunk-VNVZDWO3.js';
23
- import './chunk-RA3O54FC.js';
24
- import './chunk-Y4OKEFAX.js';
25
- import './chunk-RHAGBUL5.js';
26
- import './chunk-2I3LIRZP.js';
29
+ import './chunk-XD4ZCMA4.js';
27
30
  import './chunk-JGD5TWQ2.js';
28
31
  import './chunk-Z5GEFMRW.js';
29
32
 
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { BRIDGE_ADDRESS, BRIDGE_CIDR, CONTAINER_NO_PROXY, CONTAINER_PROXY, TUNNEL_PORT, dockerClientConfig, startBridgeForward, writeDockerClientConfig } from './chunk-XS3FDWSZ.js';
4
- import './chunk-2I3LIRZP.js';
3
+ export { BRIDGE_ADDRESS, BRIDGE_CIDR, CONTAINER_NO_PROXY, CONTAINER_PROXY, TUNNEL_PORT, dockerClientConfig, startBridgeForward, writeDockerClientConfig } from './chunk-ZTY7HHYB.js';
4
+ import './chunk-HXAEQPZR.js';
5
+ import './chunk-XD4ZCMA4.js';
5
6
  import './chunk-JGD5TWQ2.js';
6
7
  import './chunk-Z5GEFMRW.js';
7
8
 
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ export { buildRepositoryImage } from './chunk-T2QSWFSU.js';
4
+ import './chunk-NUHZV3A4.js';
5
+ import './chunk-JBJTC3UU.js';
6
+ export { RecipeError } from './chunk-SJZL5F3F.js';
7
+ import './chunk-5K3KB4YR.js';
8
+ import './chunk-HXAEQPZR.js';
9
+ import './chunk-XD4ZCMA4.js';
10
+ import './chunk-JGD5TWQ2.js';
11
+ import './chunk-Z5GEFMRW.js';
12
+
13
+ createRequire(import.meta.url);
@@ -1 +1 @@
1
- {"id":"2026-10-17T02:13:52.216Z+7e5bff4","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-17T15:23:11.099Z+00ea5d3","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,13 +1,14 @@
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-EX5MQYEF.js';
4
- import './chunk-2BTFKNTR.js';
3
+ export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-VC5J7QPV.js';
5
4
  import './chunk-YJLHUKYS.js';
6
- import './chunk-QE3UQAHK.js';
5
+ import './chunk-SJZL5F3F.js';
6
+ import './chunk-UHU7H57K.js';
7
+ import './chunk-YL2VDSNF.js';
8
+ import './chunk-5K3KB4YR.js';
9
+ import './chunk-HXAEQPZR.js';
7
10
  import './chunk-QZBXLLTV.js';
8
- import './chunk-Y4OKEFAX.js';
9
- import './chunk-RHAGBUL5.js';
10
- import './chunk-2I3LIRZP.js';
11
+ import './chunk-XD4ZCMA4.js';
11
12
  import './chunk-JGD5TWQ2.js';
12
13
  import './chunk-Z5GEFMRW.js';
13
14
 
@@ -1,65 +1,69 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-5VMDGJGH.js';
4
- import './chunk-6VFH52MP.js';
5
- import './chunk-RHGF73IU.js';
6
- import './chunk-ZVB57WI6.js';
7
- import './chunk-ABXQBEYK.js';
3
+ import { probeCredentials } from './chunk-O65LES4V.js';
4
+ import './chunk-KU7QL4XW.js';
8
5
  import './chunk-3JVYMD4G.js';
9
- import './chunk-YETTWTAY.js';
6
+ import './chunk-E7R2GIAW.js';
10
7
  import './chunk-TPKYTORP.js';
11
- import './chunk-Y7ZCHBYB.js';
12
- import './chunk-6KKM7VGZ.js';
13
- import './chunk-XS3FDWSZ.js';
14
- import './chunk-VS27BP3E.js';
15
- import './chunk-O2IJTY7L.js';
8
+ import './chunk-IVX3U7KV.js';
9
+ import './chunk-ZVB57WI6.js';
10
+ import './chunk-66T6XJAB.js';
11
+ import './chunk-N7WAEEIU.js';
12
+ import './chunk-SFJXGISY.js';
13
+ import './chunk-MKIC65SD.js';
14
+ import './chunk-TVZAC2NP.js';
16
15
  import './chunk-ESVW4MJY.js';
17
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-ZFBJUOYT.js';
18
- import './chunk-MATUHHN4.js';
16
+ import './chunk-ZTY7HHYB.js';
17
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-6S4V4UIC.js';
19
18
  import './chunk-YYYRBYWG.js';
19
+ import './chunk-GUXWQIEY.js';
20
20
  import './chunk-TBT347UY.js';
21
- import './chunk-64GMBWAK.js';
22
- import './chunk-B7DJVG25.js';
23
- import './chunk-R7SGBXUD.js';
24
- import './chunk-WSYXLLA5.js';
25
- import './chunk-M3MHHIUW.js';
21
+ import './chunk-MNHMUZGC.js';
22
+ import './chunk-HOB7Z4JQ.js';
23
+ import './chunk-GLL4TN2M.js';
24
+ import './chunk-MHAR6S7B.js';
25
+ import './chunk-WWQVKFN6.js';
26
+ import './chunk-USJZ2LDK.js';
27
+ import './chunk-Z3ASAXVU.js';
26
28
  import './chunk-TQMI335S.js';
27
- import './chunk-GFUE5TKO.js';
28
- import './chunk-7AQ5AM7U.js';
29
- import './chunk-YB3CSYXX.js';
30
- import { parseRunnerEnv } from './chunk-STSLH5EJ.js';
31
- import './chunk-HWDYLXHH.js';
32
- import './chunk-D7ECMB7B.js';
29
+ import './chunk-F4FA3ZUT.js';
30
+ import './chunk-MQHTM4YJ.js';
31
+ import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-55XLX5PA.js';
32
+ import './chunk-UXYLWVTQ.js';
33
+ import './chunk-T2QSWFSU.js';
34
+ import './chunk-NUHZV3A4.js';
33
35
  import './chunk-JBJTC3UU.js';
34
36
  import './chunk-OGFGZQA3.js';
35
- import './chunk-EX5MQYEF.js';
36
- import './chunk-2BTFKNTR.js';
37
- import './chunk-XBPUTQ7E.js';
38
- import './chunk-GLUKDQS4.js';
39
- import './chunk-55GNQPO6.js';
40
- import './chunk-2F762IXY.js';
41
- import './chunk-N4D5TMVU.js';
37
+ import './chunk-VC5J7QPV.js';
38
+ import './chunk-YJLHUKYS.js';
39
+ import './chunk-SJZL5F3F.js';
40
+ import './chunk-X52PMPOM.js';
41
+ import './chunk-LNIFYSNK.js';
42
+ import './chunk-VU7ZJPIR.js';
42
43
  import './chunk-BUP5N3X6.js';
43
- import './chunk-LOKSLO25.js';
44
- import './chunk-6BLXUD56.js';
44
+ import './chunk-UHU7H57K.js';
45
+ import './chunk-5B7BEQPR.js';
46
+ import './chunk-HOU33DW5.js';
45
47
  import './chunk-G2JWZDFA.js';
46
- import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-EPPIISRD.js';
47
- import './chunk-UXYLWVTQ.js';
48
- import './chunk-YJLHUKYS.js';
49
- import './chunk-BPKO76QR.js';
50
- import './chunk-MHX7YX7Y.js';
51
- import './chunk-BWH36FOC.js';
52
- import './chunk-DJHNEGNM.js';
48
+ import './chunk-ANPNT6PM.js';
49
+ import './chunk-4XN5FRRJ.js';
50
+ import './chunk-P2RWZCV7.js';
51
+ import './chunk-7CK2TJFB.js';
52
+ import './chunk-PJDQPF5N.js';
53
+ import './chunk-YL2VDSNF.js';
54
+ import './chunk-5K3KB4YR.js';
55
+ import { claudeEnvPath } from './chunk-HXAEQPZR.js';
56
+ import './chunk-DKWQMPSL.js';
53
57
  import './chunk-ZJSNLVCE.js';
54
58
  import './chunk-2O5KA67H.js';
55
59
  import './chunk-BKO6JEZI.js';
56
- import './chunk-6TRNCUM4.js';
60
+ import './chunk-FGF52V4V.js';
57
61
  import './chunk-HCVLP7XA.js';
58
62
  import './chunk-BJ3KTMDH.js';
59
- import './chunk-7OUOLGUV.js';
60
- import './chunk-QE3UQAHK.js';
61
- import './chunk-ANPNT6PM.js';
62
- import './chunk-PJDQPF5N.js';
63
+ import './chunk-JGML2VUN.js';
64
+ import './chunk-5BHIBJDA.js';
65
+ import './chunk-CDDED64E.js';
66
+ import './chunk-RA3O54FC.js';
63
67
  import './chunk-T2Q7ISPE.js';
64
68
  import './chunk-WZBHBH3J.js';
65
69
  import './chunk-CRB3POP4.js';
@@ -69,10 +73,7 @@ import './chunk-TUSYOL2O.js';
69
73
  import './chunk-RKOTJQVG.js';
70
74
  import './chunk-QZBXLLTV.js';
71
75
  import './chunk-VNVZDWO3.js';
72
- import './chunk-RA3O54FC.js';
73
- import './chunk-Y4OKEFAX.js';
74
- import './chunk-RHAGBUL5.js';
75
- import './chunk-2I3LIRZP.js';
76
+ import { parseRunnerEnv } from './chunk-XD4ZCMA4.js';
76
77
  import './chunk-JGD5TWQ2.js';
77
78
  import './chunk-Z5GEFMRW.js';
78
79
  import { readFileSync } from 'fs';
@@ -107,28 +108,36 @@ async function runRunnerCheck(configPath, deps = {}) {
107
108
  let credentialLine;
108
109
  if (needsClaudeCredential(config.hooks)) {
109
110
  const env = deps.env ?? process.env;
110
- const runnerEnvPath = join(dirname(configPath), "runner.env");
111
- const inShell = claudeCredentialCheck(env);
111
+ const files = [claudeEnvPath(configPath), join(dirname(configPath), "runner.env")];
112
+ const inShell = claudeCredentialCheck(env, { ignoreHeld: true });
112
113
  let credential = inShell;
114
+ let foundIn;
113
115
  if (inShell.status !== "pass") {
114
- const fromFile = readRunnerEnv(runnerEnvPath);
115
- if ("error" in fromFile) {
116
- return {
117
- ok: false,
118
- check: "claude credential",
119
- message: `the Claude credential is not in this shell, and ${runnerEnvPath} could not be read to look for it: ${fromFile.error}`
120
- };
116
+ for (const path of files) {
117
+ const fromFile = readRunnerEnv(path);
118
+ if ("error" in fromFile) {
119
+ return {
120
+ ok: false,
121
+ check: "claude credential",
122
+ message: `the Claude credential is not in this shell, and ${path} could not be read to look for it: ${fromFile.error}`
123
+ };
124
+ }
125
+ const found = claudeCredentialCheck(fromFile.env, { ignoreHeld: true });
126
+ if (found.status === "pass") {
127
+ credential = found;
128
+ foundIn = path;
129
+ break;
130
+ }
121
131
  }
122
- credential = claudeCredentialCheck(fromFile.env);
123
132
  }
124
133
  if (credential.status === "fail") {
125
134
  return {
126
135
  ok: false,
127
136
  check: "claude credential",
128
- message: `${credential.detail}, in this shell or in ${runnerEnvPath}. ${credential.fix}`
137
+ message: `${credential.detail}, in this shell or in ${files.join(" or ")}. ${credential.fix}`
129
138
  };
130
139
  }
131
- credentialLine = `claude credential ${credential.detail}${inShell.status === "pass" ? "" : ` (read from ${runnerEnvPath})`}`;
140
+ credentialLine = `claude credential ${credential.detail}${foundIn === void 0 ? "" : ` (read from ${foundIn})`}`;
132
141
  }
133
142
  const probe = await probeCredentials(config, deps.fetchImpl);
134
143
  if (!probe.ok && probe.fatal) return { ok: false, check: "credentials", message: probe.reason };
@@ -1,17 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { checkStarterFiles, contextIsGoverned, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills } from './chunk-P33PZIWS.js';
4
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-55GNQPO6.js';
5
- import { isLinkedRepository } from './chunk-N4D5TMVU.js';
3
+ import { checkStarterFiles, contextIsGoverned } from './chunk-ITAIEJ2T.js';
4
+ import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences } from './chunk-QBQHQEUG.js';
5
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-X52PMPOM.js';
6
+ import { isLinkedRepository } from './chunk-VU7ZJPIR.js';
6
7
  import { sanitizeTerminal } from './chunk-BUP5N3X6.js';
7
- import { checkFormerSkillNames } from './chunk-MHX7YX7Y.js';
8
- import { resolveGatewayCredentials, defaultFetch } from './chunk-BWH36FOC.js';
9
- import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-DJHNEGNM.js';
8
+ import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-UHU7H57K.js';
9
+ import { C } from './chunk-ANPNT6PM.js';
10
+ import { checkFormerSkillNames } from './chunk-P2RWZCV7.js';
11
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-7CK2TJFB.js';
12
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-DKWQMPSL.js';
10
13
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-I7RZHMXW.js';
11
14
  import { hookCommandEscapesControlPlane, CONTROL_PLANE_DIR_VARIABLE } from './chunk-HCVLP7XA.js';
12
15
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
13
- import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-QE3UQAHK.js';
14
- import { C } from './chunk-ANPNT6PM.js';
15
16
  import { cliInvocation } from './chunk-CRB3POP4.js';
16
17
  import { readSettings, settingsPath, isOurStatuslineSlot, statuslineWrappedOriginal, REGISTERED_EVENTS, isOurHookCommand, ourCommandBins, cliBinResolvable, ourDirectScriptBins, wrappedOriginalCommand } from './chunk-URIZRCRY.js';
17
18
  import { readDeliveryRecord, readDegraded, readSourceCache } from './chunk-YQR6E6OV.js';
@@ -207,7 +208,12 @@ function checkRenamedSkills(cwd) {
207
208
  function checkBuildSkillState(cwd, home) {
208
209
  const dirs = findGitDirs(cwd ?? process.cwd());
209
210
  if (dirs === void 0 || contextIsGoverned(dirs.gitCommonDir)) return [];
210
- return [...checkBuildSkill(dirs.repoRoot), ...checkMachineSkills({ repoRoot: dirs.repoRoot, home }), ...checkCommittedMaintainedSkills(dirs.repoRoot)];
211
+ return [
212
+ ...checkBuildSkill(dirs.repoRoot),
213
+ ...checkMachineSkills({ repoRoot: dirs.repoRoot, home }),
214
+ ...checkCommittedMaintainedSkills(dirs.repoRoot),
215
+ ...checkMaintainedReferences(dirs.repoRoot)
216
+ ];
211
217
  }
212
218
  function checkInstalledCli(home, cwd) {
213
219
  const name = "Installed CLI";
@@ -1174,19 +1180,20 @@ function doctorExitCode(checks) {
1174
1180
 
1175
1181
  // src/doctor-report.ts
1176
1182
  async function gatherDoctorChecks() {
1177
- const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-TWS5VZEN.js');
1183
+ const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-5QYIKYUP.js');
1178
1184
  const configPath = defaultRunnerConfigPath();
1179
1185
  const checks = runDoctor({ runnerHost: hasRunnerBlock(configPath) });
1180
1186
  const credential = await credentialChecks();
1181
1187
  checks.push(...credential);
1182
1188
  if (credential[0]?.status === "pass") checks.push(...await githubAppChecks(), ...await governanceChecks());
1189
+ if (credential[0]?.status === "pass") checks.push(...await fleetCheck());
1183
1190
  const runnerVm = runnerVmOf(configPath);
1184
1191
  if (runnerVm !== void 0) {
1185
1192
  const { realLima } = await import('./lima-7NPCNGWT.js');
1186
1193
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1187
1194
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1188
1195
  } else if (hasRunnerBlock(configPath)) {
1189
- const { runnerHostChecks } = await import('./doctor-Y4NCNSJM.js');
1196
+ const { runnerHostChecks } = await import('./doctor-DQWRUAEB.js');
1190
1197
  const hooks = (() => {
1191
1198
  try {
1192
1199
  return loadRunnerConfig(configPath).hooks;
@@ -1220,8 +1227,8 @@ async function gatherDoctorChecks() {
1220
1227
  const service = await (async () => {
1221
1228
  const { existsSync: existsSync3 } = await import('fs');
1222
1229
  if (process.platform !== "linux" || !existsSync3("/run/systemd/system")) return void 0;
1223
- const { inspectService, realInspectProbes } = await import('./inspect-IPFA7AAT.js');
1224
- const { DEFAULT_UNIT_NAME } = await import('./install-6OIY3KHZ.js');
1230
+ const { inspectService, realInspectProbes } = await import('./inspect-L7JIBK3Y.js');
1231
+ const { DEFAULT_UNIT_NAME } = await import('./install-35SAMY75.js');
1225
1232
  const { dirname: dirname2 } = await import('path');
1226
1233
  return inspectService(DEFAULT_UNIT_NAME, dirname2(configPath), realInspectProbes());
1227
1234
  })();
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { removeRetiredSkills } from './chunk-MHX7YX7Y.js';
4
- import { defaultFetch, resolveGatewayCredentials } from './chunk-BWH36FOC.js';
3
+ import { removeRetiredSkills } from './chunk-P2RWZCV7.js';
4
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-7CK2TJFB.js';
5
+ import { withTokenHeader } from './chunk-HXAEQPZR.js';
5
6
  import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
6
- import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-7OUOLGUV.js';
7
+ import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-JGML2VUN.js';
7
8
  import { cliInvocation } from './chunk-CRB3POP4.js';
8
9
  import { writeDegraded, writeSourceCache, SOURCE_CACHE_TTL_RETRY_MS, writeContextManifest, SOURCE_CACHE_TTL_SUCCESS_MS, readSourceCache, isSourceCacheFresh, clearDegraded } from './chunk-YQR6E6OV.js';
9
10
  import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-RKOTJQVG.js';
10
11
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
11
- import { withTokenHeader } from './chunk-2I3LIRZP.js';
12
12
  import { execFileSync } from 'child_process';
13
13
  import { existsSync, mkdirSync, writeFileSync, chmodSync, lstatSync, readFileSync, copyFileSync } from 'fs';
14
14
  import { isAbsolute, join, dirname } from 'path';
@@ -2,8 +2,8 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { MAX_ALLOW_HOSTS, allowHostProblem } from './chunk-UXYLWVTQ.js';
4
4
  import { parseSize } from './chunk-YJLHUKYS.js';
5
+ import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-HXAEQPZR.js';
5
6
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
6
- import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-2I3LIRZP.js';
7
7
  import { existsSync, statSync, accessSync, constants, readFileSync } from 'fs';
8
8
  import { hostname } from 'os';
9
9
  import { join } from 'path';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE } from './chunk-7OUOLGUV.js';
3
+ import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE } from './chunk-JGML2VUN.js';
4
4
  import { normalizePath, CONTEXT_PIN_FILENAME } from './chunk-RKOTJQVG.js';
5
5
  import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, lstatSync, readlinkSync, symlinkSync, rmdirSync } from 'fs';
6
6
  import { relative, sep, join } from 'path';
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import { MAINTAINED_SKILLS, maintainedLineVersion } from './chunk-CDDED64E.js';
4
+ import { cliInvocation } from './chunk-CRB3POP4.js';
5
+ import { mkdirSync, writeFileSync, renameSync, rmSync, readFileSync } from 'fs';
6
+ import { dirname, join } from 'path';
7
+
8
+ createRequire(import.meta.url);
9
+ var PLAIN_VERSION = /^[0-9]+\.[0-9]+\.[0-9]+$/;
10
+ var NO_UPDATE_NOTICE_VARIABLE = "OUTERLAYER_NO_UPDATE_NOTICE";
11
+ function cliVersionRecordPath(home) {
12
+ return join(home, ".outerlayer", "cli-version.json");
13
+ }
14
+ function readRecordedVersion(home) {
15
+ try {
16
+ const parsed = JSON.parse(readFileSync(cliVersionRecordPath(home), "utf8"));
17
+ return typeof parsed.version === "string" && PLAIN_VERSION.test(parsed.version) ? parsed.version : void 0;
18
+ } catch {
19
+ return void 0;
20
+ }
21
+ }
22
+ function recordCliVersion(home, version) {
23
+ try {
24
+ if (!PLAIN_VERSION.test(version) || readRecordedVersion(home) === version) return;
25
+ const file = cliVersionRecordPath(home);
26
+ mkdirSync(dirname(file), { recursive: true });
27
+ const temporary = `${file}.${process.pid}.tmp`;
28
+ writeFileSync(temporary, `${JSON.stringify({ version })}
29
+ `);
30
+ renameSync(temporary, file);
31
+ } catch {
32
+ }
33
+ }
34
+ function removeRecordedVersion(home) {
35
+ try {
36
+ rmSync(cliVersionRecordPath(home));
37
+ } catch {
38
+ }
39
+ }
40
+ function comparePlainVersions(a, b) {
41
+ const parts = (version) => version.split(/[-+]/)[0].split(".").map(Number);
42
+ const pa = parts(a);
43
+ const pb = parts(b);
44
+ for (const i of [0, 1, 2]) {
45
+ const diff = (pa[i] ?? 0) - (pb[i] ?? 0);
46
+ if (diff !== 0) return diff;
47
+ }
48
+ return 0;
49
+ }
50
+ function newerRecordedVersion(home, running) {
51
+ const recorded = readRecordedVersion(home);
52
+ return recorded !== void 0 && comparePlainVersions(recorded, running) > 0 ? recorded : void 0;
53
+ }
54
+ function updateNoticeSkipped(top, hidden, argv) {
55
+ if (top === "daemon" || top === "watch" || top === "runner") return true;
56
+ if (hidden || argv.includes("--log-failures")) return true;
57
+ return top === "sync" && argv.includes("--quiet");
58
+ }
59
+ function isSet(env, name) {
60
+ return env[name] !== void 0 && env[name] !== "";
61
+ }
62
+ function updateNoticeSuppressed(env) {
63
+ return isSet(env, NO_UPDATE_NOTICE_VARIABLE);
64
+ }
65
+ function updateNoticeLine(recorded, running) {
66
+ return `Update available: OuterLayer CLI ${running} \u2192 ${recorded}. Run: npm install -g @outerlayer/cli@${recorded}`;
67
+ }
68
+ function isCommandInTerminal(input) {
69
+ return input.isTTY && !input.json && !isSet(input.env, "CI");
70
+ }
71
+ function updateNoticeContext(home, ownVersion, env) {
72
+ if (updateNoticeSuppressed(env)) return null;
73
+ const recorded = newerRecordedVersion(home, ownVersion);
74
+ if (recorded === void 0) return null;
75
+ return `A newer OuterLayer CLI is available: this machine runs ${ownVersion}, and the factory uses ${recorded}. Tell the person both versions, and ask them to run \`npm install -g @outerlayer/cli@${recorded}\`.`;
76
+ }
77
+ function staleMachineCopiesContext(home, ownVersion) {
78
+ for (const name of MAINTAINED_SKILLS) {
79
+ let text;
80
+ try {
81
+ text = readFileSync(join(home, ".agents", "skills", name, "SKILL.md"), "utf8");
82
+ } catch {
83
+ continue;
84
+ }
85
+ const version = maintainedLineVersion(text);
86
+ if (version === void 0 || version === ownVersion) continue;
87
+ const source = PLAIN_VERSION.test(version) ? `OuterLayer CLI ${version}` : "another OuterLayer CLI version";
88
+ return `The maintained skills in ~/.agents/skills/ come from ${source}, and this session runs ${ownVersion}. Tell the person that the maintained skills on this machine come from another CLI version, and ask them to run \`${cliInvocation()} init --local\`.`;
89
+ }
90
+ return null;
91
+ }
92
+
93
+ export { PLAIN_VERSION, isCommandInTerminal, newerRecordedVersion, recordCliVersion, removeRecordedVersion, staleMachineCopiesContext, updateNoticeContext, updateNoticeLine, updateNoticeSkipped, updateNoticeSuppressed };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { BUILD_HOME } from './chunk-2I3LIRZP.js';
3
+ import { BUILD_HOME } from './chunk-HXAEQPZR.js';
4
4
  import { join, dirname } from 'path';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -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-RHAGBUL5.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-5K3KB4YR.js';
4
4
  import { readFileSync, mkdirSync, writeFileSync, renameSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { isPlaceholderCommand } from './chunk-64GMBWAK.js';
4
- import { describeCallFailure } from './chunk-WSYXLLA5.js';
5
- import { WorkCommandError, getJson } from './chunk-55GNQPO6.js';
3
+ import { isPlaceholderCommand } from './chunk-MNHMUZGC.js';
4
+ import { describeCallFailure } from './chunk-USJZ2LDK.js';
5
+ import { builtinKind } from './chunk-55XLX5PA.js';
6
+ import { WorkCommandError, getJson } from './chunk-X52PMPOM.js';
6
7
  import { sanitizeTerminal } from './chunk-BUP5N3X6.js';
7
- import { builtinKind } from './chunk-EPPIISRD.js';
8
- import { signerFor } from './chunk-Y4OKEFAX.js';
9
- import { CLAUDE_CREDENTIAL_VARIABLES, claudeCredential } from './chunk-2I3LIRZP.js';
8
+ import { signerFor } from './chunk-YL2VDSNF.js';
9
+ import { CLAUDE_CREDENTIAL_VARIABLES, claudeCredential } from './chunk-HXAEQPZR.js';
10
10
 
11
11
  createRequire(import.meta.url);
12
12
 
@@ -57,7 +57,7 @@ function formerSkillProblem(queues) {
57
57
  function needsClaudeCredential(hooks) {
58
58
  return builtinKind(hooks.provision) !== "own";
59
59
  }
60
- var CREDENTIAL_FIX = "Run `claude setup-token`, then start the runner with CLAUDE_CODE_OAUTH_TOKEN set to the token it prints (or ANTHROPIC_API_KEY set to an API key), for example with EnvironmentFile= in the runner's systemd unit";
60
+ var CREDENTIAL_FIX = "Run `claude setup-token`, then pipe the token it prints (or an Anthropic API key) to `outerlayer runner init --agent claude`, which stores it in the claude.env beside the config. Or start the runner with CLAUDE_CODE_OAUTH_TOKEN (or ANTHROPIC_API_KEY) set";
61
61
  function claudeCredentialCheck(env, options = {}) {
62
62
  const name = "Claude credential";
63
63
  if (options.service !== void 0) {
@@ -66,13 +66,13 @@ function claudeCredentialCheck(env, options = {}) {
66
66
  return {
67
67
  name,
68
68
  status: "fail",
69
- detail: `the service ${unit} has no Claude credential: neither ${CLAUDE_CREDENTIAL_VARIABLES.slice(0, 2).join(" nor ")} is set in its runner.env, so every build fails at provision as agent_credential_missing`,
69
+ detail: `the service ${unit} has no Claude credential: neither ${CLAUDE_CREDENTIAL_VARIABLES.slice(0, 2).join(" nor ")} is set in its claude.env or runner.env, so every build fails at provision as agent_credential_missing`,
70
70
  fix: `${CREDENTIAL_FIX}, then restart the service: sudo systemctl restart ${unit}.`
71
71
  };
72
72
  }
73
- return { name, status: "pass", detail: `${variables[0]} is set in the runner.env of the service ${unit}` };
73
+ return { name, status: "pass", detail: `${variables[0]} is set in the claude.env or runner.env of the service ${unit}` };
74
74
  }
75
- const held = claudeCredential(env);
75
+ const held = claudeCredential(env, { ignoreHeld: options.ignoreHeld === true });
76
76
  if (held === void 0) {
77
77
  return {
78
78
  name,