@outerlayer/cli 0.34.0-next.20261025224117 → 0.34.0-next.20261026161241

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 (121) hide show
  1. package/README.md +6 -0
  2. package/dist/{agent-setup-FNDKCPUP.js → agent-setup-WOEZELVB.js} +6 -6
  3. package/dist/{bridge-YJBB4YA3.js → bridge-F5FBQSPZ.js} +2 -2
  4. package/dist/{build-B4OKU4MV.js → build-UDOBVX5J.js} +7 -7
  5. package/dist/{build-disk-ZL46AEN3.js → build-disk-C3WIAHCL.js} +6 -6
  6. package/dist/build-info.json +1 -1
  7. package/dist/{builder-XFPWE74N.js → builder-YNXWVH2V.js} +5 -5
  8. package/dist/{check-YOSEXQPQ.js → check-ERYYVAEM.js} +41 -37
  9. package/dist/{chunk-2ILU7UAU.js → chunk-3VZTNXK5.js} +1 -1
  10. package/dist/{chunk-DJO6GI7B.js → chunk-4G4IH4A7.js} +126 -61
  11. package/dist/{chunk-NW26E4YU.js → chunk-4J2FF5HZ.js} +3 -3
  12. package/dist/{chunk-CAQCDYKF.js → chunk-5JGPTYLT.js} +2 -2
  13. package/dist/{chunk-OGPEHSNW.js → chunk-6KFJIU73.js} +1 -1
  14. package/dist/{chunk-3EJBI5JW.js → chunk-7FQYTM7M.js} +1 -1
  15. package/dist/{chunk-3N77LUQI.js → chunk-7QAJQDHS.js} +1 -1
  16. package/dist/{chunk-SI6WDF3U.js → chunk-CFFVCI2I.js} +1 -1
  17. package/dist/{chunk-ZVGSCE2Q.js → chunk-CNZRUVZ5.js} +102 -36
  18. package/dist/{chunk-RLPIRL33.js → chunk-E6OVLJTR.js} +98 -30
  19. package/dist/{chunk-PFHTT4PP.js → chunk-ELO5XEES.js} +4 -4
  20. package/dist/{chunk-RFVIQLNB.js → chunk-EPFFYDNX.js} +5 -5
  21. package/dist/{chunk-FVCHHSHB.js → chunk-EUQZAH2W.js} +2 -2
  22. package/dist/{chunk-6OLVVAOK.js → chunk-FZ4G6CMK.js} +4 -4
  23. package/dist/{chunk-QQP3S5FU.js → chunk-GHFI5GBF.js} +3 -3
  24. package/dist/{chunk-PXGU3GKY.js → chunk-GJ4KBHBD.js} +1 -1
  25. package/dist/{chunk-UO4FQAOX.js → chunk-H47VGSCW.js} +4 -4
  26. package/dist/{chunk-TFPNPS4Q.js → chunk-HOUFCUMH.js} +1 -1
  27. package/dist/{chunk-OQLF3MQQ.js → chunk-HVPW272H.js} +3 -3
  28. package/dist/{chunk-5AFPP3GZ.js → chunk-HVQMIZ22.js} +4 -4
  29. package/dist/{chunk-AVPLEFQR.js → chunk-IO2BBKG4.js} +3 -3
  30. package/dist/{chunk-KM2HLQE3.js → chunk-IWVGALDC.js} +2 -2
  31. package/dist/{chunk-SMWRIAGH.js → chunk-JC6AQ6PC.js} +39 -6
  32. package/dist/{chunk-UN3SQTVL.js → chunk-JKNOJKVD.js} +34 -9
  33. package/dist/{chunk-BHSSGVOY.js → chunk-JSZRBQY3.js} +3 -3
  34. package/dist/{chunk-MOI2KDLH.js → chunk-L5VHGRQE.js} +1 -1
  35. package/dist/{chunk-JBCOUY4M.js → chunk-LD3BHLK7.js} +3 -3
  36. package/dist/{chunk-YNMVVQOQ.js → chunk-LQHCNXPK.js} +1 -1
  37. package/dist/{chunk-YHKU2NOZ.js → chunk-LTYBHCL4.js} +1 -1
  38. package/dist/{chunk-PAK5P2ND.js → chunk-MH6QLXUO.js} +1 -1
  39. package/dist/{chunk-OS7DJOQJ.js → chunk-MN3PP45X.js} +1 -1
  40. package/dist/{chunk-25GRRBTH.js → chunk-NHEU5CON.js} +1 -1
  41. package/dist/{chunk-K2UAQWYO.js → chunk-OQT7RT5I.js} +3 -3
  42. package/dist/{chunk-63IVRRIO.js → chunk-P3NPTFLF.js} +3 -3
  43. package/dist/{chunk-GC5PVMIJ.js → chunk-RR3VDM7M.js} +3 -3
  44. package/dist/{chunk-G4W4B33M.js → chunk-SDAEXUIX.js} +25 -10
  45. package/dist/{chunk-SYVRBBLW.js → chunk-SDELQEG4.js} +1 -1
  46. package/dist/{chunk-FDJPDZSR.js → chunk-TS3EFB7S.js} +1 -1
  47. package/dist/{chunk-6P4YL4CO.js → chunk-U6AWVO6L.js} +6 -6
  48. package/dist/{chunk-INOUUSYI.js → chunk-V2VJYK46.js} +4 -4
  49. package/dist/{chunk-YV7BP62T.js → chunk-VEJWLQ4G.js} +11 -11
  50. package/dist/{chunk-QANM5COC.js → chunk-VUQKGBIQ.js} +14 -7
  51. package/dist/{chunk-XJXBQQR4.js → chunk-VWZHOFBP.js} +3 -3
  52. package/dist/{chunk-SUOZYOWO.js → chunk-WE4C3ODP.js} +2 -2
  53. package/dist/{chunk-AP2K4LPI.js → chunk-XKJOIQ2Q.js} +27 -3
  54. package/dist/{chunk-TBKV4L2W.js → chunk-XL2MPORM.js} +4 -4
  55. package/dist/{chunk-EGVHFHY4.js → chunk-XSFR76J7.js} +3 -3
  56. package/dist/{chunk-UMYYYF7B.js → chunk-YL3RWW7X.js} +1 -1
  57. package/dist/{chunk-AJYZNISW.js → chunk-Z7WMU3RA.js} +8 -7
  58. package/dist/{chunk-2D6CKNR7.js → chunk-ZIKZZ4LK.js} +3 -3
  59. package/dist/{claude-launcher-OQZNW7XJ.js → claude-launcher-6KGANL7E.js} +1 -1
  60. package/dist/{cli-NKT5FAP3.js → cli-LXKVCFD7.js} +113 -112
  61. package/dist/{command-BC2NOUA5.js → command-VQPQDPCZ.js} +24 -24
  62. package/dist/{config-QASNKYM6.js → config-WSZIWPP4.js} +7 -7
  63. package/dist/{connect-cmd-MEDWMW3L.js → connect-cmd-LI34HS5Q.js} +6 -6
  64. package/dist/{container-start-3GFLLV4Q.js → container-start-IL74XEC5.js} +34 -30
  65. package/dist/{context-show-cmd-VSFCG663.js → context-show-cmd-X27GMOT6.js} +7 -7
  66. package/dist/{control-plane-launch-XBGHM7DB.js → control-plane-launch-74EIIB5Z.js} +5 -5
  67. package/dist/dist-HVXLUMRV.js +7 -0
  68. package/dist/{docker-TAC6G4VU.js → docker-KZ3OQTPW.js} +5 -5
  69. package/dist/{doctor-Z4OA5JJK.js → doctor-KPKLFIJH.js} +24 -24
  70. package/dist/{emit-artifact-cmd-L4REOPWX.js → emit-artifact-cmd-BJICHW2E.js} +11 -11
  71. package/dist/{emit-criteria-cmd-QVFOQARC.js → emit-criteria-cmd-MUWPT25P.js} +8 -8
  72. package/dist/{emit-demo-cmd-L4B6OOTV.js → emit-demo-cmd-YQN7VKQH.js} +12 -12
  73. package/dist/{emit-finding-cmd-YXFCIWMU.js → emit-finding-cmd-NPBWVY44.js} +8 -8
  74. package/dist/{emit-result-cmd-NI4LCTUM.js → emit-result-cmd-7CJZZQGK.js} +10 -10
  75. package/dist/{emit-step-cmd-HWAUCZZB.js → emit-step-cmd-ZPLHZAMA.js} +8 -8
  76. package/dist/{exec-client-QB4OZRGM.js → exec-client-LXHTMVIB.js} +3 -3
  77. package/dist/find-unit-UKH6JH4S.js +18 -0
  78. package/dist/{findings-cmd-O2IBO25E.js → findings-cmd-DZ4ESTHX.js} +8 -8
  79. package/dist/{fleet-readiness-NJYTQYTA.js → fleet-readiness-YSI4NOHT.js} +5 -5
  80. package/dist/{governing-source-JCI7VDQ6.js → governing-source-JPRMOB3O.js} +10 -10
  81. package/dist/{guest-init-IF5LXGUL.js → guest-init-WWL2WL7R.js} +4 -4
  82. package/dist/{hook-fast-GPUL7T77.js → hook-fast-6EW2MGA2.js} +1 -1
  83. package/dist/{pending-ERXWVLLG.js → host-key-TSOKVSZX.js} +3 -3
  84. package/dist/{image-tag-SEMBVB5D.js → image-tag-BTXKIH73.js} +3 -3
  85. package/dist/index.d.ts +1 -1
  86. package/dist/index.js +4 -4
  87. package/dist/{init-43LJRRQO.js → init-MN3MNG7V.js} +21 -21
  88. package/dist/{init-3KP2CDZJ.js → init-V6Y2VNKW.js} +21 -21
  89. package/dist/{init-cmd-FN7CSVLZ.js → init-cmd-QCWLJDIF.js} +12 -12
  90. package/dist/{init-update-TTMFFNMB.js → init-update-GTFLPDEL.js} +11 -10
  91. package/dist/{install-cmd-5H6M2KJ7.js → install-cmd-RGO7NWKP.js} +5 -5
  92. package/dist/{logs-6CMB3DO6.js → logs-LEVH6VAI.js} +2 -2
  93. package/dist/{loop-5MVKWHNV.js → loop-A4CB4IFF.js} +40 -36
  94. package/dist/{machine-APH6CXPC.js → machine-XG54XYYZ.js} +21 -21
  95. package/dist/{mcp-serve-cmd-MWGIN6YL.js → mcp-serve-cmd-4O5INM77.js} +4 -4
  96. package/dist/{paths-T2DEBI62.js → paths-AQ47ZRHK.js} +2 -2
  97. package/dist/{host-key-5RU322O3.js → pending-UWFDVFOA.js} +3 -3
  98. package/dist/{pidfile-EAD2OEM7.js → pidfile-PCG2H5T4.js} +3 -3
  99. package/dist/{record-IMXQNHPB.js → record-SVCNFCGQ.js} +3 -3
  100. package/dist/{runner-env-BJPUHAKZ.js → runner-env-YPXWTNP3.js} +9 -9
  101. package/dist/{runner-identity-ZCPPC2BJ.js → runner-identity-XPZO3TG4.js} +5 -5
  102. package/dist/{runner-key-WY6KFIRA.js → runner-key-B5EJH25Z.js} +21 -21
  103. package/dist/{session-sender-5T7BXPKC.js → session-sender-XED7CKHP.js} +11 -11
  104. package/dist/{spec-cmd-4ABYAFNZ.js → spec-cmd-TRXAGQYM.js} +9 -9
  105. package/dist/{status-U3Y6HJJI.js → status-6V2S63DS.js} +32 -28
  106. package/dist/{sync-cmd-34CGNA6T.js → sync-cmd-UQVENF25.js} +10 -10
  107. package/dist/{update-steps-ROLDDTPM.js → update-steps-CSC2QVJF.js} +33 -29
  108. package/dist/{watch-6HU7LCUY.js → watch-EZGDDRTQ.js} +10 -10
  109. package/dist/{work-claim-cmd-5QKLHSCR.js → work-claim-cmd-YSAJ7DAK.js} +14 -14
  110. package/dist/{work-cmd-3MKUIE2C.js → work-cmd-V5FHLWJM.js} +8 -8
  111. package/dist/{work-comment-cmd-ESC3DSHI.js → work-comment-cmd-KLEMDYI4.js} +9 -9
  112. package/dist/{work-demo-cmd-7S23DGYO.js → work-demo-cmd-XYRKFP4G.js} +8 -8
  113. package/dist/{work-logs-cmd-46UPNN7Q.js → work-logs-cmd-DOGPK7Q6.js} +8 -8
  114. package/dist/{work-open-pr-cmd-JNGTGLIP.js → work-open-pr-cmd-UAUEEP3V.js} +9 -9
  115. package/dist/{work-pr-cmd-2J2LKETD.js → work-pr-cmd-LYWL7ZLF.js} +8 -8
  116. package/dist/{work-proofs-cmd-HRWTHYSS.js → work-proofs-cmd-YMLIJDJZ.js} +9 -9
  117. package/dist/{work-proofs-record-6OKAT3IC.js → work-proofs-record-NK3ULOUQ.js} +15 -15
  118. package/dist/{work-stop-cmd-Y22XIVQ6.js → work-stop-cmd-MRLJEQRP.js} +8 -8
  119. package/package.json +2 -2
  120. package/dist/dist-QGN5R4Y2.js +0 -7
  121. package/dist/find-unit-4UR647S4.js +0 -18
@@ -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-PXGU3GKY.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.js';
4
4
  import { readFileSync, existsSync, rmSync, 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 { DEFAULT_UNIT_NAME } from './chunk-INOUUSYI.js';
4
- import { RUNNER_FILE_MODE } from './chunk-PXGU3GKY.js';
5
- import { claudeEnvPath, withoutCredentialLines, parseRunnerEnv } from './chunk-G4W4B33M.js';
3
+ import { DEFAULT_UNIT_NAME } from './chunk-V2VJYK46.js';
4
+ import { RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.js';
5
+ import { claudeEnvPath, withoutCredentialLines, parseRunnerEnv } from './chunk-SDAEXUIX.js';
6
6
  import { existsSync, readFileSync, writeFileSync, renameSync, rmSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
 
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { BUILDKIT_IMAGE } from './chunk-4UPET3R7.js';
4
- import { ensureHostKey } from './chunk-MOI2KDLH.js';
5
- import { compareVersions } from './chunk-AJYZNISW.js';
6
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-PXGU3GKY.js';
7
- import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-G4W4B33M.js';
4
+ import { ensureHostKey } from './chunk-L5VHGRQE.js';
5
+ import { compareVersions } from './chunk-Z7WMU3RA.js';
6
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-GJ4KBHBD.js';
7
+ import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-SDAEXUIX.js';
8
8
  import { JOIN_DIR, RELAY_ID, JOIN_SOCKET, TARGET_GATEWAY, TARGET_CLAUDE, destinationTarget, RELAY_USER } from './chunk-MESOOLF4.js';
9
9
  import { createHash } from 'crypto';
10
10
  import { existsSync, readdirSync, readFileSync, lstatSync, realpathSync, writeFileSync, mkdirSync, createWriteStream, rmSync, chmodSync, renameSync } from 'fs';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-FVCHHSHB.js';
4
- import { resolveGatewayCredentials } from './chunk-3N77LUQI.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-EUQZAH2W.js';
4
+ import { resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
5
5
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
6
6
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
7
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
7
+ import { resolveRepoIdentity } from './chunk-Z7WMU3RA.js';
8
8
  import { cliInvocation } from './chunk-CRB3POP4.js';
9
9
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
10
10
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { parseSize, BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-5AFPP3GZ.js';
4
- import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-PXGU3GKY.js';
3
+ import { parseSize, BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-HVQMIZ22.js';
4
+ import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-GJ4KBHBD.js';
5
5
  import { spawnSync } from 'child_process';
6
6
  import { statfsSync, statSync, existsSync, readdirSync } from 'fs';
7
7
  import { dirname, join } from 'path';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { placeholderQueues, placeholderProblem } from './chunk-ZVGSCE2Q.js';
4
- import { checkFit } from './chunk-INOUUSYI.js';
5
- import { builtinKind, imageBuildOf, keepsHostBuilder } from './chunk-2D6CKNR7.js';
6
- import { realBuildDiskProbe, checkDiskFit, DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-KM2HLQE3.js';
3
+ import { placeholderQueues, placeholderProblem } from './chunk-CNZRUVZ5.js';
4
+ import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-V2VJYK46.js';
5
+ import { builtinKind, imageBuildOf, keepsHostBuilder } from './chunk-ZIKZZ4LK.js';
6
+ import { realBuildDiskProbe, checkDiskFit, DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-IWVGALDC.js';
7
7
  import { builderDiskPinned } from './chunk-4UPET3R7.js';
8
- import { FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, claudeCredentialVariablesSet, claudeCredential, claudeEnvPath, parseRunnerEnv, BUILD_SLICE_MEMORY_ENV } from './chunk-G4W4B33M.js';
8
+ import { BUILD_SLICE_MEMORY_ENV, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, claudeCredentialVariablesSet, claudeCredential, claudeEnvPath, parseRunnerEnv } from './chunk-SDAEXUIX.js';
9
9
  import { closeSync, openSync, constants, readFileSync } from 'fs';
10
10
  import { join, dirname } from 'path';
11
11
  import { totalmem } from 'os';
@@ -156,5 +156,38 @@ function checkBlockedWithSlots(config, probes) {
156
156
  }
157
157
  return { slots };
158
158
  }
159
+ var GIB = 1024 ** 3;
160
+ function largeBuildMemoryBytes() {
161
+ return 16 * GIB;
162
+ }
163
+ var LARGE_BUILD_DISK_BYTES = 3e10;
164
+ function checkManagedRoom(input) {
165
+ const availableBytes = input.sliceBytes ?? Math.max(0, input.totalMemoryBytes - RUNNER_RESERVE_BYTES);
166
+ if (input.runningMemoryBytes + largeBuildMemoryBytes() > availableBytes) {
167
+ const where = input.sliceBytes === void 0 ? "the host's memory less the runner's reserve" : "the memory limit of the runner's build slice";
168
+ return {
169
+ fits: false,
170
+ resource: "memory",
171
+ reason: `one more Large build needs ${gib(largeBuildMemoryBytes())} of memory, and the running builds hold ${gib(input.runningMemoryBytes)} of the ${gib(availableBytes)} in ${where}`
172
+ };
173
+ }
174
+ if (input.freeDiskBytes !== void 0) {
175
+ const diskBytes = input.freeDiskBytes + input.heldDiskBytes;
176
+ if (input.runningDiskBytes + LARGE_BUILD_DISK_BYTES > diskBytes) {
177
+ return {
178
+ fits: false,
179
+ resource: "disk",
180
+ reason: `one more Large build needs a ${gb(LARGE_BUILD_DISK_BYTES)} build disk beside the ${gb(input.runningDiskBytes)} the running builds' disks may grow to, and the runner's file system has ${gb(diskBytes)} free or held by them`
181
+ };
182
+ }
183
+ }
184
+ return { fits: true };
185
+ }
186
+ function gib(bytes) {
187
+ return `${(bytes / GIB).toFixed(1)} GiB`;
188
+ }
189
+ function gb(bytes) {
190
+ return `${(bytes / 1e9).toFixed(1)} GB`;
191
+ }
159
192
 
160
- export { checkBlockedWithSlots, managedFactsOf, managedProblems, realBlockedProbes };
193
+ export { LARGE_BUILD_DISK_BYTES, checkBlockedWithSlots, checkManagedRoom, largeBuildMemoryBytes, managedFactsOf, managedProblems, realBlockedProbes, sliceMemoryOf };
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
4
- import { autoConnect } from './chunk-AVPLEFQR.js';
5
- import { workPageUrl } from './chunk-FVCHHSHB.js';
4
+ import { autoConnect } from './chunk-IO2BBKG4.js';
5
+ import { workPageUrl } from './chunk-EUQZAH2W.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
8
- import { resolveGatewayCredentials, unauthorizedMessage, defaultFetch } from './chunk-3N77LUQI.js';
9
- import { signRunnerRequest } from './chunk-MOI2KDLH.js';
8
+ import { resolveGatewayCredentials, unauthorizedMessage, defaultFetch } from './chunk-7QAJQDHS.js';
9
+ import { signRunnerRequest } from './chunk-L5VHGRQE.js';
10
10
  import { readRepoConnection } from './chunk-BJ3KTMDH.js';
11
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
11
+ import { resolveRepoIdentity } from './chunk-Z7WMU3RA.js';
12
12
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
13
13
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
14
14
 
@@ -379,6 +379,21 @@ function tokenWarning(data) {
379
379
  return `
380
380
  ${C.yellow}!${C.reset} a container host will fail this build: ${why}`;
381
381
  }
382
+ var RUNNER_KINDS = ["managed", "self-hosted"];
383
+ function isManagedRefusal(code) {
384
+ return code === "managed_builds_off" || code === "managed_credential_missing";
385
+ }
386
+ function parseRunnerKind(raw) {
387
+ if (raw === void 0) return void 0;
388
+ const kind = RUNNER_KINDS.find((k) => k === raw);
389
+ if (kind === void 0) throw new WorkCommandError(`--runner takes ${RUNNER_KINDS.join(" or ")}, not "${sanitizeTerminal(raw)}"`);
390
+ return kind;
391
+ }
392
+ function runnerLabel(data, named) {
393
+ const kind = data.runner === "managed" || data.runner === "self-hosted" ? data.runner : named;
394
+ if (kind !== "managed" && named === void 0) return "";
395
+ return ` ${C.dim}\xB7${C.reset} on a ${kind} runner`;
396
+ }
382
397
  function itemLabel(data) {
383
398
  return data.number != null ? `item #${data.number}` : `item ${sanitizeTerminal(String(data.workItemId))}`;
384
399
  }
@@ -401,6 +416,10 @@ async function runWorkBuild(opts) {
401
416
  "--instructions applies to host builds: with --local you build the item yourself, so give your instructions in your own session"
402
417
  );
403
418
  }
419
+ const runner = parseRunnerKind(opts.runner);
420
+ if (opts.local && runner !== void 0) {
421
+ throw new WorkCommandError("--runner applies to host builds: with --local you build the item yourself, so no runner takes it");
422
+ }
404
423
  await connectIfOneFits(opts);
405
424
  const { url, apiKey, appId } = resolveCredentials(opts);
406
425
  const fetchImpl = opts.fetchImpl ?? defaultFetch;
@@ -428,15 +447,21 @@ async function runWorkBuild(opts) {
428
447
  return { data: data2, output: output2 };
429
448
  }
430
449
  const instructions = opts.instructions !== void 0 ? { instructions: opts.instructions } : {};
431
- const body = itemNumber !== void 0 ? { workItemId: String(itemNumber), note: opts.note, ...instructions, ...facts } : {
450
+ const body = itemNumber !== void 0 ? { workItemId: String(itemNumber), note: opts.note, ...instructions, runner, ...facts } : {
432
451
  subject: resolveWorkSubject({ issue: opts.issue, tracker: opts.tracker, repo: opts.repo, cwd }),
433
452
  note: opts.note,
434
453
  ...instructions,
454
+ runner,
435
455
  ...facts
436
456
  };
437
- const { data } = await postJsonWithRetry(url, "/v1/work-items/build", apiKey, appId, body, fetchImpl, retries, sleep);
457
+ const { data } = await postJsonWithRetry(url, "/v1/work-items/build", apiKey, appId, body, fetchImpl, retries, sleep).catch((err) => {
458
+ if (err instanceof WorkCommandError && isManagedRefusal(err.code)) {
459
+ throw new WorkCommandError(`${err.message} (${err.code})`, false, err.status, err.code);
460
+ }
461
+ throw err;
462
+ });
438
463
  const page = itemPageUrl(home, cwd, appId, data.workItemId, data.number);
439
- const output = opts.json ? JSON.stringify(data) : `${C.green}\u2713${C.reset} build requested ${C.dim}\xB7${C.reset} ${itemLabel(data)}${"subject" in body ? ` (${issueLabel(body.subject)})` : ""} ${C.dim}\xB7${C.reset} by ${data.attestor}` + (page !== void 0 ? `
464
+ const output = opts.json ? JSON.stringify(data) : `${C.green}\u2713${C.reset} build requested ${C.dim}\xB7${C.reset} ${itemLabel(data)}${"subject" in body ? ` (${issueLabel(body.subject)})` : ""}${runnerLabel(data, runner)} ${C.dim}\xB7${C.reset} by ${data.attestor}` + (page !== void 0 ? `
440
465
  ${page}` : "") + tokenWarning(data);
441
466
  if (!opts.quiet) process.stdout.write(output + "\n");
442
467
  return { data, output };
@@ -446,7 +471,7 @@ async function runWorkLinkSession(opts) {
446
471
  return await linkSession(opts);
447
472
  } catch (err) {
448
473
  if (opts.logFailures) {
449
- const { logHookError } = await import('./hook-fast-GPUL7T77.js');
474
+ const { logHookError } = await import('./hook-fast-6EW2MGA2.js');
450
475
  const reason = err instanceof Error ? err.message : String(err);
451
476
  logHookError(opts.home ?? homeFromEnv(opts.env ?? process.env), new Error(`work link-session #${opts.number} failed: ${reason}`));
452
477
  }
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, getJson } from './chunk-UN3SQTVL.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-JKNOJKVD.js';
4
4
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
5
5
  import { C } from './chunk-ANPNT6PM.js';
6
6
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
7
- import { defaultFetch } from './chunk-3N77LUQI.js';
8
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
7
+ import { defaultFetch } from './chunk-7QAJQDHS.js';
8
+ import { resolveRepoIdentity } from './chunk-Z7WMU3RA.js';
9
9
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
10
10
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
11
11
  import { randomUUID } from 'crypto';
@@ -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-PXGU3GKY.js';
3
+ import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.js';
4
4
  import { generateKeyPairSync, createPrivateKey, createPublicKey, sign } from 'crypto';
5
5
  import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
6
6
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-QANM5COC.js';
4
- import { spoolDir } from './chunk-25GRRBTH.js';
5
- import { CaptureDaemon } from './chunk-AJYZNISW.js';
3
+ import { LiveUploader } from './chunk-VUQKGBIQ.js';
4
+ import { spoolDir } from './chunk-NHEU5CON.js';
5
+ import { CaptureDaemon } from './chunk-Z7WMU3RA.js';
6
6
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
8
8
  import { mkdirSync, writeFileSync, rmSync } from 'fs';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { isSameProcess } from './chunk-JBJTC3UU.js';
4
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-PXGU3GKY.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.js';
5
5
  import { existsSync, readFileSync, mkdirSync, writeFileSync, rmSync } from 'fs';
6
6
  import { dirname } from 'path';
7
7
 
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
4
4
  import { isAgentsMdLayout } from './chunk-NKOM4JKY.js';
5
- import { resolveGatewayCredentials, defaultFetch } from './chunk-3N77LUQI.js';
5
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-7QAJQDHS.js';
6
6
  import { versionAtLeast } from './chunk-HCVLP7XA.js';
7
7
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
8
8
  import { machineSkillsState, staleClaudeSkills } from './chunk-RCRE42V6.js';
@@ -4,6 +4,6 @@ import { createRequire } from 'node:module';
4
4
  createRequire(import.meta.url);
5
5
 
6
6
  // src/runner/protocol.ts
7
- var RUNNER_PROTOCOL = 32;
7
+ var RUNNER_PROTOCOL = 33;
8
8
 
9
9
  export { RUNNER_PROTOCOL };
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { currentLink } from './chunk-UMYYYF7B.js';
3
+ import { currentLink } from './chunk-YL3RWW7X.js';
4
4
  import { readFileSync, statSync, chmodSync, mkdirSync, writeFileSync, renameSync, rmSync, existsSync, lstatSync, accessSync, constants, realpathSync } from 'fs';
5
5
  import { randomBytes } from 'crypto';
6
6
  import { join, dirname, delimiter, resolve } from 'path';
@@ -684,7 +684,7 @@ async function missingControlPlane(cwd, sessionId, home, env) {
684
684
  cleanupEarlierCopies(dirs);
685
685
  }
686
686
  if (!contextPossiblyGoverned(cwd, home)) return void 0;
687
- const { governanceOf } = await import('./control-plane-launch-XBGHM7DB.js');
687
+ const { governanceOf } = await import('./control-plane-launch-74EIIB5Z.js');
688
688
  if (await governanceOf({ cwd, env, home }) !== "governed") return void 0;
689
689
  recordMissingContext(dirs, sessionId, home);
690
690
  const launcher = `${cliInvocation()} claude`;
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
4
- import { autoConnect } from './chunk-AVPLEFQR.js';
4
+ import { autoConnect } from './chunk-IO2BBKG4.js';
5
5
  import { C } from './chunk-ANPNT6PM.js';
6
- import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-3N77LUQI.js';
7
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
6
+ import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
7
+ import { resolveRepoIdentity } from './chunk-Z7WMU3RA.js';
8
8
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
9
9
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
10
10
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { TUNNEL_PORT, BRIDGE_ADDRESS, BRIDGE_CIDR } from './chunk-SI6WDF3U.js';
4
- import { EXEC_PORT } from './chunk-OGPEHSNW.js';
3
+ import { TUNNEL_PORT, BRIDGE_ADDRESS, BRIDGE_CIDR } from './chunk-CFFVCI2I.js';
4
+ import { EXEC_PORT } from './chunk-6KFJIU73.js';
5
5
  import { startTimeOf } from './chunk-JBJTC3UU.js';
6
- import { RELAY_PORT } from './chunk-G4W4B33M.js';
6
+ import { RELAY_PORT } from './chunk-SDAEXUIX.js';
7
7
  import { spawn, spawnSync } from 'child_process';
8
8
  import { symlinkSync, lstatSync, writeFileSync, chmodSync, mkdirSync, existsSync } from 'fs';
9
9
 
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { launcherPath, pathNotes, writeLauncher, LauncherWriteError } from './chunk-OS7DJOQJ.js';
4
- import { currentVersion, currentLink, versionDir, execStartLine, isInLayout, packageRootIn, switchCurrent } from './chunk-UMYYYF7B.js';
3
+ import { launcherPath, pathNotes, writeLauncher, LauncherWriteError } from './chunk-MN3PP45X.js';
4
+ import { currentVersion, currentLink, versionDir, execStartLine, isInLayout, packageRootIn, switchCurrent } from './chunk-YL3RWW7X.js';
5
5
  import { compareVersions } from './chunk-TQMI335S.js';
6
- import { runnerDir, RUNNER_DIR_MODE } from './chunk-PXGU3GKY.js';
6
+ import { runnerDir, RUNNER_DIR_MODE } from './chunk-GJ4KBHBD.js';
7
7
  import { lchownSync, lstatSync, realpathSync, readFileSync, mkdirSync, rmSync, cpSync, existsSync, readdirSync } from 'fs';
8
8
  import { dirname, sep, join } from 'path';
9
9
  import { spawnSync } from 'child_process';
@@ -776,6 +776,9 @@ function repositoriesOf(input) {
776
776
  function primaryOf(repositories) {
777
777
  return repositories.find((entry) => entry.primary) ?? repositories[0];
778
778
  }
779
+
780
+ // src/scrub-env.ts
781
+ var SCRUB_ENV_VARIABLE = "OUTERLAYER_SCRUB_ENV";
779
782
  var MAVEN_DIR = "maven";
780
783
  var MAVEN_SETTINGS_FILE = "settings.xml";
781
784
  var MAVEN_NO_PROXY_NOTE = "MAVEN_ARGS names its own global settings file, so the build's Maven gets no proxy from the runner";
@@ -918,6 +921,7 @@ function isReservedVariable(name) {
918
921
  function isRefusedInConfig(name) {
919
922
  return isReservedVariable(name) && !githubVariables().has(name);
920
923
  }
924
+ var NO_VARIABLES = [];
921
925
  function buildEnvironment(input) {
922
926
  const authored = authorEnvironment(input.identity?.author);
923
927
  const recipe = {};
@@ -934,16 +938,26 @@ function buildEnvironment(input) {
934
938
  };
935
939
  const variables = [];
936
940
  const skippedTokenVariables = [];
937
- for (const name of input.config.build?.variables ?? []) {
938
- if (tokenVariables().includes(name)) {
939
- skippedTokenVariables.push(name);
940
- continue;
941
+ if (input.factoryVariables !== void 0) {
942
+ for (const { name, value } of input.factoryVariables) {
943
+ if (isReservedVariable(name) || name in authored) continue;
944
+ if (builtIns && CLAUDE_CREDENTIAL_VARIABLES.includes(name)) continue;
945
+ passed[name] = value;
946
+ variables.push(name);
947
+ }
948
+ if (variables.length > 0) passed[SCRUB_ENV_VARIABLE] = variables.join(",");
949
+ } else {
950
+ for (const name of input.config.build?.variables ?? NO_VARIABLES) {
951
+ if (tokenVariables().includes(name)) {
952
+ skippedTokenVariables.push(name);
953
+ continue;
954
+ }
955
+ const value = input.hostEnv[name];
956
+ if (value === void 0 || isReservedVariable(name) || name in authored) continue;
957
+ if (builtIns && CLAUDE_CREDENTIAL_VARIABLES.includes(name)) continue;
958
+ passed[name] = value;
959
+ variables.push(name);
941
960
  }
942
- const value = input.hostEnv[name];
943
- if (value === void 0 || isReservedVariable(name) || name in authored) continue;
944
- if (builtIns && CLAUDE_CREDENTIAL_VARIABLES.includes(name)) continue;
945
- passed[name] = value;
946
- variables.push(name);
947
961
  }
948
962
  const nodeOptions = {};
949
963
  if (input.imageEnv !== void 0) {
@@ -999,6 +1013,7 @@ function checkEnvironment(input) {
999
1013
  containerEnv: input.containerEnv,
1000
1014
  builtIns: false,
1001
1015
  imageEnv: input.imageEnv,
1016
+ factoryVariables: input.factoryVariables,
1002
1017
  // A check container is given no settings file, so a `MAVEN_ARGS` naming one would break the check's Maven.
1003
1018
  mavenProxy: false
1004
1019
  });
@@ -1050,4 +1065,4 @@ function routesOf(counts) {
1050
1065
  return routes.length === 0 ? {} : { routes };
1051
1066
  }
1052
1067
 
1053
- export { AGENT_CREDENTIAL_MISSING, BUILD_HOME, BUILD_SLICE_MEMORY_ENV, BUILT_IN_NAMES, CHECKOUT_DIR, CHECK_ITEMS_FILE, CLAUDE_CREDENTIAL_ID, CLAUDE_CREDENTIAL_VARIABLES, CLAUDE_ENV_FILE, CLAUDE_PORT, CLAUDE_SOCKET, DESTINATION_BASE_PORT, EVAL_INPUT_DIR, FD_SLOTS_PER_BUILD, FD_STORE_ENV, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, GATEWAY_PORT, GATEWAY_SOCKET, JOB_MOUNT, MAVEN_NO_PROXY_NOTE, MAVEN_SETTINGS_FILE, MAVEN_SPACE_NOTE, MIN_SYSTEMD, PROXY_WARNING_FLAG, RELAY_PORT, authorEnvironment, buildEnvironment, buildMavenSettingsXml, builtInEnvironment, checkEnvironment, checkoutPath, claudeCredential, claudeCredentialVariablesSet, claudeEnvPath, commitIdentityRecord, containerLocalAddress, credentialLineIn, currentClaudeCredential, destinationEnvironment, fdName, headerVariables, heldClaudeCredential, inspectService, isRefusedInConfig, isReservedVariable, lifecycleWorkdir, managedClaudeCredential, mavenArgs, mavenSettingsXml, namesGlobalSettings, parseClaimIdentity, parseClaimedRepositories, parseIsolation, parseRunnerEnv, parseUnreachable, primaryOf, proxyEnvironment, readClaudeCredential, realFdStorePort, realInspectProbes, removedClaudeCredentialValues, repositoriesOf, repositoryPath, resolveDestinations, sharedUserEnvironment, startBuildServices, takeClaudeCredential, tokenHeader, withGitConfig, withHooksPath, withProxyWarningHidden, withTokenHeader, withTunnelRecord, withoutCredentialLines, writeBuildMavenSettings, writeMavenSettings };
1068
+ export { AGENT_CREDENTIAL_MISSING, BUILD_HOME, BUILD_SLICE_MEMORY_ENV, BUILT_IN_NAMES, CHECKOUT_DIR, CHECK_ITEMS_FILE, CLAUDE_CREDENTIAL_ID, CLAUDE_CREDENTIAL_VARIABLES, CLAUDE_ENV_FILE, CLAUDE_PORT, CLAUDE_SOCKET, DESTINATION_BASE_PORT, EVAL_INPUT_DIR, FD_SLOTS_PER_BUILD, FD_STORE_ENV, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, GATEWAY_PORT, GATEWAY_SOCKET, JOB_MOUNT, MAVEN_NO_PROXY_NOTE, MAVEN_SETTINGS_FILE, MAVEN_SPACE_NOTE, MIN_SYSTEMD, PROXY_WARNING_FLAG, RELAY_PORT, SCRUB_ENV_VARIABLE, authorEnvironment, buildEnvironment, buildMavenSettingsXml, builtInEnvironment, checkEnvironment, checkoutPath, claudeCredential, claudeCredentialVariablesSet, claudeEnvPath, commitIdentityRecord, containerLocalAddress, credentialLineIn, currentClaudeCredential, destinationEnvironment, fdName, headerVariables, heldClaudeCredential, inspectService, isRefusedInConfig, isReservedVariable, lifecycleWorkdir, managedClaudeCredential, mavenArgs, mavenSettingsXml, namesGlobalSettings, parseClaimIdentity, parseClaimedRepositories, parseIsolation, parseRunnerEnv, parseUnreachable, primaryOf, proxyEnvironment, readClaudeCredential, realFdStorePort, realInspectProbes, removedClaudeCredentialValues, repositoriesOf, repositoryPath, resolveDestinations, sharedUserEnvironment, startBuildServices, takeClaudeCredential, tokenHeader, withGitConfig, withHooksPath, withProxyWarningHidden, withTokenHeader, withTunnelRecord, withoutCredentialLines, writeBuildMavenSettings, writeMavenSettings };
@@ -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-PXGU3GKY.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.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-PXGU3GKY.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.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 { scrubReason, stripTerminalControls } from './chunk-DJO6GI7B.js';
4
- import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-INOUUSYI.js';
5
- import { RunnerAlreadyRunningError, readPidFile } from './chunk-YNMVVQOQ.js';
3
+ import { scrubReason, stripTerminalControls } from './chunk-4G4IH4A7.js';
4
+ import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-V2VJYK46.js';
5
+ import { RunnerAlreadyRunningError, readPidFile } from './chunk-LQHCNXPK.js';
6
6
  import { isSameProcess } from './chunk-JBJTC3UU.js';
7
- import { isSignatureRefusal, postJson } from './chunk-UN3SQTVL.js';
8
- import { signerFor } from './chunk-MOI2KDLH.js';
9
- import { pidFilePath } from './chunk-PXGU3GKY.js';
7
+ import { isSignatureRefusal, postJson } from './chunk-JKNOJKVD.js';
8
+ import { signerFor } from './chunk-L5VHGRQE.js';
9
+ import { pidFilePath } from './chunk-GJ4KBHBD.js';
10
10
  import { readFileSync } from 'fs';
11
11
 
12
12
  createRequire(import.meta.url);
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { builtinKind, keepsHostBuilder } from './chunk-2D6CKNR7.js';
4
- import { parseSize } from './chunk-5AFPP3GZ.js';
5
- import { runnerDir } from './chunk-PXGU3GKY.js';
6
- import { FD_SLOTS_PER_BUILD, FD_STORE_ENV, BUILD_SLICE_MEMORY_ENV, CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-G4W4B33M.js';
3
+ import { builtinKind, keepsHostBuilder } from './chunk-ZIKZZ4LK.js';
4
+ import { parseSize } from './chunk-HVQMIZ22.js';
5
+ import { runnerDir } from './chunk-GJ4KBHBD.js';
6
+ import { FD_SLOTS_PER_BUILD, FD_STORE_ENV, BUILD_SLICE_MEMORY_ENV, CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-SDAEXUIX.js';
7
7
  import { existsSync, readFileSync, writeFileSync, chmodSync, renameSync } from 'fs';
8
8
  import { dirname, join } from 'path';
9
9
  import { spawnSync } from 'child_process';
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { checkStarterFiles, contextIsGoverned } from './chunk-AP2K4LPI.js';
4
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-UN3SQTVL.js';
5
- import { isLinkedRepository } from './chunk-FVCHHSHB.js';
3
+ import { checkStarterFiles, contextIsGoverned } from './chunk-XKJOIQ2Q.js';
4
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-JKNOJKVD.js';
5
+ import { isLinkedRepository } from './chunk-EUQZAH2W.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
- import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-YHKU2NOZ.js';
7
+ import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-LTYBHCL4.js';
8
8
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
9
9
  import { checkFormerSkillNames } from './chunk-JWNH4ZTF.js';
10
- import { resolveGatewayCredentials, defaultFetch } from './chunk-3N77LUQI.js';
11
- import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-25GRRBTH.js';
10
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-7QAJQDHS.js';
11
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-NHEU5CON.js';
12
12
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-I7RZHMXW.js';
13
13
  import { hookCommandEscapesControlPlane, CONTROL_PLANE_DIR_VARIABLE } from './chunk-HCVLP7XA.js';
14
14
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
15
- import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-AJYZNISW.js';
15
+ import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-Z7WMU3RA.js';
16
16
  import { cliInvocation } from './chunk-CRB3POP4.js';
17
17
  import { readSettings, settingsPath, isOurStatuslineSlot, statuslineWrappedOriginal, REGISTERED_EVENTS, isOurHookCommand, ourCommandBins, cliBinResolvable, ourDirectScriptBins, wrappedOriginalCommand } from './chunk-URIZRCRY.js';
18
18
  import { readDeliveryRecord, readDegraded, readSourceCache } from './chunk-YQR6E6OV.js';
@@ -1195,8 +1195,8 @@ function doctorExitCode(checks) {
1195
1195
 
1196
1196
  // src/doctor-report.ts
1197
1197
  async function gatherDoctorChecks() {
1198
- const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-ZL46AEN3.js');
1199
- const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-QASNKYM6.js');
1198
+ const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-C3WIAHCL.js');
1199
+ const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-WSZIWPP4.js');
1200
1200
  const configPath = defaultRunnerConfigPath();
1201
1201
  const runnerHost = hasRunnerBlock(configPath);
1202
1202
  const hooks = (() => {
@@ -1217,7 +1217,7 @@ async function gatherDoctorChecks() {
1217
1217
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1218
1218
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1219
1219
  } else if (hasRunnerBlock(configPath)) {
1220
- const { runnerHostChecks } = await import('./doctor-Z4OA5JJK.js');
1220
+ const { runnerHostChecks } = await import('./doctor-KPKLFIJH.js');
1221
1221
  const gateway = (() => {
1222
1222
  try {
1223
1223
  const { url, apiKey, appId } = loadRunnerConfig(configPath);
@@ -1244,7 +1244,7 @@ async function gatherDoctorChecks() {
1244
1244
  const service = await (async () => {
1245
1245
  const { existsSync: existsSync3 } = await import('fs');
1246
1246
  if (process.platform !== "linux" || !existsSync3("/run/systemd/system")) return void 0;
1247
- const { inspectRunnerService } = await import('./find-unit-4UR647S4.js');
1247
+ const { inspectRunnerService } = await import('./find-unit-UKH6JH4S.js');
1248
1248
  return inspectRunnerService(configPath);
1249
1249
  })();
1250
1250
  checks.push(...await runnerHostChecks({ configPath, hooks, gateway, repos, runner, service }));
@@ -1,24 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { uploadSpooledSteps } from './chunk-EGVHFHY4.js';
3
+ import { uploadSpooledSteps } from './chunk-XSFR76J7.js';
4
4
  import { LaunchFilter } from './chunk-ESVW4MJY.js';
5
5
  import { RepoFilter } from './chunk-TBT347UY.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-MECW77XP.js';
8
- import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-3N77LUQI.js';
8
+ import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-7QAJQDHS.js';
9
9
  import { readCloudConfig, cloudConfigPath, writeCloudConfig } from './chunk-PJDQPF5N.js';
10
- import { signerFor, signRunnerRequest } from './chunk-MOI2KDLH.js';
11
- import { writeSyncStatus, spoolDir } from './chunk-25GRRBTH.js';
10
+ import { signerFor, signRunnerRequest } from './chunk-L5VHGRQE.js';
11
+ import { writeSyncStatus, spoolDir } from './chunk-NHEU5CON.js';
12
12
  import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
13
13
  import { hookExecSpoolPath } from './chunk-2O5KA67H.js';
14
14
  import { applyReportedCost } from './chunk-BKO6JEZI.js';
15
15
  import { readRepoConnection, findGitDirs } from './chunk-BJ3KTMDH.js';
16
- import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-AJYZNISW.js';
16
+ import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-Z7WMU3RA.js';
17
17
  import { readLaunchSpoolState, launchStatusIsDecisive, launchedItemsBySession, launchesPath } from './chunk-T2Q7ISPE.js';
18
18
  import { cliInvocation } from './chunk-CRB3POP4.js';
19
19
  import { removeJournalHooks } from './chunk-TUSYOL2O.js';
20
20
  import { CAPTURE_TIERS, inferArtifactKind, bannedPathsForTier, downconvertSession, isHumanUserTurn, turnCountBound, EVENT_TYPES } from './chunk-EOTMDIYC.js';
21
21
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
22
+ import { SCRUB_ENV_VARIABLE } from './chunk-SDAEXUIX.js';
22
23
  import { dirname, basename, join, sep } from 'path';
23
24
  import { statSync, readFileSync, readdirSync, mkdirSync, writeFileSync, renameSync, existsSync, rmSync } from 'fs';
24
25
  import { execFileSync } from 'child_process';
@@ -37,8 +38,14 @@ function gitGlobalConfig(key) {
37
38
  return void 0;
38
39
  }
39
40
  }
40
- function installScrubContext(home, scrub) {
41
- setCustomScrubbers(scrub);
41
+ function withNamedEnvValues(scrub, env) {
42
+ const names = (env[SCRUB_ENV_VARIABLE] ?? "").split(",");
43
+ const values = names.map((name) => env[name]).filter((value) => value !== void 0 && value !== "");
44
+ if (values.length === 0) return scrub;
45
+ return { ...scrub, literals: [...scrub?.literals ?? [], ...values] };
46
+ }
47
+ function installScrubContext(home, scrub, env = process.env) {
48
+ setCustomScrubbers(withNamedEnvValues(scrub, env));
42
49
  setLocalIdentity({
43
50
  name: gitGlobalConfig("user.name"),
44
51
  email: gitGlobalConfig("user.email"),
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { stripTerminalControls } from './chunk-DJO6GI7B.js';
4
- import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-SYVRBBLW.js';
3
+ import { stripTerminalControls } from './chunk-4G4IH4A7.js';
4
+ import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-SDELQEG4.js';
5
5
  import { readFileSync } from 'fs';
6
6
 
7
7
  createRequire(import.meta.url);
@@ -55,7 +55,7 @@ function envNamesOf(row, imageEnv) {
55
55
  return [...new Set(names)].sort();
56
56
  }
57
57
  async function readOwnContainer(deps = {}) {
58
- const run = deps.run ?? (await import('./docker-TAC6G4VU.js')).spawnRun;
58
+ const run = deps.run ?? (await import('./docker-KZ3OQTPW.js')).spawnRun;
59
59
  const ids = candidateIds(deps.env ?? process.env, deps.readFile ?? ((path) => readFileSync(path, "utf8")));
60
60
  if (ids.length === 0) return { ok: false, reason: "the runner cannot tell which container it runs in: HOSTNAME is empty and /proc/self/mountinfo names none" };
61
61
  let problem = "";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { escapeUnitPath, UNIT_MARKER, DEFAULT_UNIT_NAME } from './chunk-INOUUSYI.js';
4
- import { inspectService, realInspectProbes } from './chunk-G4W4B33M.js';
3
+ import { escapeUnitPath, UNIT_MARKER, DEFAULT_UNIT_NAME } from './chunk-V2VJYK46.js';
4
+ import { inspectService, realInspectProbes } from './chunk-SDAEXUIX.js';
5
5
  import { realpathSync, readFileSync, readdirSync } from 'fs';
6
6
  import { resolve, dirname, join } from 'path';
7
7