@outerlayer/cli 0.34.0-next.20261027013606 → 0.34.0-next.20261027121359

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 (117) hide show
  1. package/dist/{agent-setup-2A6P2SYL.js → agent-setup-UPRMGVB7.js} +6 -6
  2. package/dist/{bridge-F5FBQSPZ.js → bridge-GVZUP3NU.js} +2 -2
  3. package/dist/{build-YSOVDTAN.js → build-ZDYL7ZGP.js} +7 -7
  4. package/dist/{build-disk-RZ7AZKTY.js → build-disk-WMIRA4RD.js} +5 -5
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-MQIL24HI.js → builder-XTAHDFV5.js} +4 -4
  7. package/dist/{check-JD3GVQFP.js → check-FAG4QKIX.js} +36 -36
  8. package/dist/{chunk-MYLOOVRJ.js → chunk-3NMDGGZS.js} +2 -2
  9. package/dist/{chunk-DM4EEV73.js → chunk-4IB5WUY2.js} +6 -6
  10. package/dist/{chunk-77VBS2RT.js → chunk-66TKWWTX.js} +5 -5
  11. package/dist/{chunk-P3NPTFLF.js → chunk-6SJ3DJDH.js} +3 -3
  12. package/dist/{chunk-AHAYHJNN.js → chunk-ARPPH7VS.js} +164 -26
  13. package/dist/{chunk-QRJIBTNQ.js → chunk-B7LPFCIN.js} +5 -5
  14. package/dist/{chunk-CCHSD7RS.js → chunk-CHDWAWQA.js} +1 -1
  15. package/dist/{chunk-HOUFCUMH.js → chunk-DUG3JXAT.js} +1 -1
  16. package/dist/{chunk-WYR4INK3.js → chunk-FRETDGET.js} +2 -2
  17. package/dist/{chunk-SDELQEG4.js → chunk-HO4XRLAZ.js} +1 -1
  18. package/dist/{chunk-GJ4KBHBD.js → chunk-I2GHZ2VA.js} +1 -1
  19. package/dist/{chunk-YL3RWW7X.js → chunk-J2X5CTYY.js} +1 -1
  20. package/dist/{chunk-FQGC22IP.js → chunk-JKOONI3H.js} +2 -2
  21. package/dist/{chunk-L5VHGRQE.js → chunk-KDSKFXPE.js} +1 -1
  22. package/dist/{chunk-EBVK3QBO.js → chunk-KFXPH7SJ.js} +2 -2
  23. package/dist/{chunk-QWXBWOVV.js → chunk-L4DCIEVT.js} +3 -3
  24. package/dist/{chunk-O7QPHJWN.js → chunk-L7RPNSAA.js} +1 -1
  25. package/dist/{chunk-MN3PP45X.js → chunk-LHUZVM3L.js} +1 -1
  26. package/dist/{chunk-EP3WBNMC.js → chunk-LTMFHECB.js} +20 -20
  27. package/dist/{chunk-7PCA37ZS.js → chunk-LUYTNCMS.js} +3 -3
  28. package/dist/{chunk-25XBOX3K.js → chunk-LXOBWRVC.js} +2 -2
  29. package/dist/{chunk-66LH5QAV.js → chunk-M6YTST7G.js} +2 -2
  30. package/dist/{chunk-72CJOYN6.js → chunk-N752ZNZ5.js} +1 -1
  31. package/dist/{chunk-QABXXQ67.js → chunk-NGZBVN6F.js} +5 -5
  32. package/dist/{chunk-TS3EFB7S.js → chunk-PBZODW5X.js} +1 -1
  33. package/dist/{chunk-RR3VDM7M.js → chunk-Q3ATWA2U.js} +3 -3
  34. package/dist/{chunk-7DK2FOZ4.js → chunk-QBBZGVZJ.js} +2 -2
  35. package/dist/{chunk-JA2ARVY6.js → chunk-QTAADTIO.js} +1 -1
  36. package/dist/{chunk-6KFJIU73.js → chunk-RMJSYOSV.js} +1 -1
  37. package/dist/{chunk-DEJCZ43H.js → chunk-RO2NZJHZ.js} +82 -6
  38. package/dist/{chunk-7X2G463B.js → chunk-SGT7YU3X.js} +5 -5
  39. package/dist/{chunk-FQOUIYBL.js → chunk-SJY6A6EH.js} +24 -18
  40. package/dist/{chunk-7QAJQDHS.js → chunk-T375XV3H.js} +1 -1
  41. package/dist/{chunk-BLSEHKZ4.js → chunk-TS2YACAQ.js} +2 -2
  42. package/dist/{chunk-7GY3DVIL.js → chunk-UC4OSOQS.js} +48 -2
  43. package/dist/{chunk-MPNASRYB.js → chunk-UDRBQI5J.js} +10 -10
  44. package/dist/{chunk-7QF2EXAN.js → chunk-UXGWAAGQ.js} +4 -4
  45. package/dist/{chunk-GR7ZVGNI.js → chunk-UYWGR35C.js} +3 -3
  46. package/dist/{chunk-LQHCNXPK.js → chunk-W5EKMK37.js} +1 -1
  47. package/dist/{chunk-JM3YQ4LC.js → chunk-W774NREK.js} +3 -3
  48. package/dist/{chunk-GK6OYFMU.js → chunk-WS5E73JO.js} +5 -5
  49. package/dist/{chunk-VUJURIPJ.js → chunk-XEJ5USHY.js} +13 -5
  50. package/dist/{chunk-Q2KGDDUX.js → chunk-XSUM3E67.js} +3 -3
  51. package/dist/{chunk-CFFVCI2I.js → chunk-XZGURZHF.js} +1 -1
  52. package/dist/{chunk-WBTPI5MP.js → chunk-YGX72FUQ.js} +2 -2
  53. package/dist/{chunk-OKGHWCSK.js → chunk-YIBHQR3B.js} +2 -2
  54. package/dist/{chunk-SDAEXUIX.js → chunk-Z7THNFUU.js} +1 -0
  55. package/dist/{chunk-3VZTNXK5.js → chunk-ZV6GOXYA.js} +1 -1
  56. package/dist/{claude-launcher-EO3ALKBS.js → claude-launcher-SGZSOGKZ.js} +1 -1
  57. package/dist/{cli-3BAUWQCS.js → cli-6QN7TH6U.js} +110 -110
  58. package/dist/{command-UVGNJILP.js → command-6T6RI5XY.js} +24 -24
  59. package/dist/{config-NGCQD6SN.js → config-CWYMIXTV.js} +6 -6
  60. package/dist/{connect-cmd-65YBQRSY.js → connect-cmd-MY6SR4OK.js} +5 -5
  61. package/dist/{container-start-YBENDAOQ.js → container-start-FDXR4QND.js} +30 -30
  62. package/dist/{context-show-cmd-S5SEBOI2.js → context-show-cmd-WRTV3ACH.js} +6 -6
  63. package/dist/{control-plane-launch-BDSUP4DK.js → control-plane-launch-UM4IHOJQ.js} +5 -5
  64. package/dist/{demo-record-cmd-C2C4P2EQ.js → demo-record-cmd-XBWTORVM.js} +2 -2
  65. package/dist/{demo-voice-cmd-RWTRJUAX.js → demo-voice-cmd-FLU4GDKS.js} +11 -11
  66. package/dist/{docker-TRGA5QRL.js → docker-IUPWQ2RK.js} +4 -4
  67. package/dist/{doctor-QENPDYBD.js → doctor-5VNZ2BLY.js} +28 -26
  68. package/dist/{emit-artifact-cmd-56C6DBUP.js → emit-artifact-cmd-RDXIWRFU.js} +10 -10
  69. package/dist/{emit-criteria-cmd-HRCWXD3W.js → emit-criteria-cmd-EDJOWGKL.js} +7 -7
  70. package/dist/{emit-demo-cmd-QMRDQGB6.js → emit-demo-cmd-W3BXFFU3.js} +11 -11
  71. package/dist/{emit-finding-cmd-6MVFN4BO.js → emit-finding-cmd-TMZIOQIP.js} +7 -7
  72. package/dist/{emit-result-cmd-E3YYBXRY.js → emit-result-cmd-P55JBD2W.js} +9 -9
  73. package/dist/{emit-step-cmd-DM4CRYYI.js → emit-step-cmd-Y7LKI7L3.js} +7 -7
  74. package/dist/{exec-client-LXHTMVIB.js → exec-client-FB3OBHOJ.js} +3 -3
  75. package/dist/{find-unit-IOCVYPNW.js → find-unit-R4I5GJCH.js} +8 -8
  76. package/dist/{findings-cmd-K2OYBTUH.js → findings-cmd-D64BYS7Z.js} +7 -7
  77. package/dist/{fleet-readiness-VIAVQYRP.js → fleet-readiness-75KQEZ6E.js} +5 -5
  78. package/dist/{governing-source-MQA2SDJT.js → governing-source-YYEU46PP.js} +9 -9
  79. package/dist/{guest-init-WWL2WL7R.js → guest-init-SGF6ZVZN.js} +4 -4
  80. package/dist/{hook-fast-KXAQ22LZ.js → hook-fast-XX5HZOCR.js} +1 -1
  81. package/dist/{host-checks-UNEQTQ6L.js → host-checks-VKBAGGWH.js} +28 -28
  82. package/dist/{pending-UWFDVFOA.js → host-key-CNCHVNDC.js} +3 -3
  83. package/dist/{image-tag-BTXKIH73.js → image-tag-MRWNQGXA.js} +3 -3
  84. package/dist/index.js +4 -4
  85. package/dist/{init-6UEOOD2J.js → init-B5S5LMIL.js} +21 -21
  86. package/dist/{init-JR62PVKC.js → init-BB2TLXVB.js} +21 -21
  87. package/dist/{init-cmd-34YWWGQZ.js → init-cmd-I2Z4VZSG.js} +10 -10
  88. package/dist/{init-update-JMVLGBDE.js → init-update-TIZILQXL.js} +8 -8
  89. package/dist/{install-cmd-RGO7NWKP.js → install-cmd-X4OHS36T.js} +5 -5
  90. package/dist/{logs-LEVH6VAI.js → logs-BPEOYWRW.js} +2 -2
  91. package/dist/{loop-WHK6EVUE.js → loop-XULUT5HL.js} +35 -35
  92. package/dist/{machine-ZZOQ7LLV.js → machine-UYFUUSEQ.js} +21 -21
  93. package/dist/{mcp-serve-cmd-4O5INM77.js → mcp-serve-cmd-NCPWJJDZ.js} +4 -4
  94. package/dist/{paths-AQ47ZRHK.js → paths-WXGOFVCF.js} +2 -2
  95. package/dist/{host-key-TSOKVSZX.js → pending-GEDI4K7P.js} +3 -3
  96. package/dist/{pidfile-PCG2H5T4.js → pidfile-MYLBUG2I.js} +3 -3
  97. package/dist/{record-SVCNFCGQ.js → record-Y2JIOP56.js} +3 -3
  98. package/dist/{runner-env-DH7YA4BU.js → runner-env-Y2PBG7TR.js} +8 -8
  99. package/dist/{runner-identity-GLL56XY7.js → runner-identity-PL442M57.js} +4 -4
  100. package/dist/{runner-key-4ASVLQGM.js → runner-key-L6LXC4QA.js} +21 -21
  101. package/dist/{session-sender-KLOMLL7X.js → session-sender-AXROAZSC.js} +10 -10
  102. package/dist/{spec-cmd-MX5QFW32.js → spec-cmd-JG4QLGGJ.js} +8 -8
  103. package/dist/{status-7YP2C2QK.js → status-VOGNQ3NG.js} +28 -28
  104. package/dist/{sync-cmd-CO4DFMHU.js → sync-cmd-B3KQZJZO.js} +9 -9
  105. package/dist/{update-steps-J54P3SBL.js → update-steps-RSYFLNTL.js} +29 -29
  106. package/dist/{watch-GU62YVQY.js → watch-IHZRBUYV.js} +9 -9
  107. package/dist/{work-claim-cmd-JF5GGDFZ.js → work-claim-cmd-YEMHNW3H.js} +12 -12
  108. package/dist/{work-cmd-VR7PPSP6.js → work-cmd-OWZS3ZXL.js} +7 -7
  109. package/dist/{work-comment-cmd-HVZF72B4.js → work-comment-cmd-ESBYAE4K.js} +8 -8
  110. package/dist/{work-demo-cmd-EDGNM5VJ.js → work-demo-cmd-FT3FQWM7.js} +7 -7
  111. package/dist/{work-logs-cmd-ZZVAHX36.js → work-logs-cmd-K6NTURGR.js} +7 -7
  112. package/dist/{work-open-pr-cmd-AQWZRJHZ.js → work-open-pr-cmd-NGD4Z2TO.js} +8 -8
  113. package/dist/{work-pr-cmd-UJ7VWCJN.js → work-pr-cmd-274YUPQB.js} +7 -7
  114. package/dist/{work-proofs-cmd-DTFQ3FSB.js → work-proofs-cmd-JLSQHVKO.js} +8 -8
  115. package/dist/{work-proofs-record-XG544MGV.js → work-proofs-record-AYUWUFBE.js} +14 -14
  116. package/dist/{work-stop-cmd-SAT4XVM2.js → work-stop-cmd-VQLLLJ3H.js} +7 -7
  117. package/package.json +1 -1
@@ -2,26 +2,26 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { itemsSentence, criteriaOf, hostItemsOf, loadCitationFinder, MAX_TEST_FILE_BYTES, MAX_TEST_FILES, criterionInputs, planCriteria, parseJudgeAnswer, inCriteriaOrder, oneLineReason, judgedItems } from './chunk-6CK2OC4Q.js';
4
4
  import { readsJobState, READ_JOB_STATE_FORMATS, jobStateFormatOf } from './chunk-ZVB57WI6.js';
5
- import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-P3NPTFLF.js';
5
+ import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-6SJ3DJDH.js';
6
6
  import { zodProblem } from './chunk-I3LTIAOR.js';
7
- import { senderPidfile } from './chunk-WBTPI5MP.js';
8
- import { installScrubContext } from './chunk-QRJIBTNQ.js';
9
- import { writeDockerClientConfig } from './chunk-CFFVCI2I.js';
7
+ import { senderPidfile } from './chunk-YGX72FUQ.js';
8
+ import { installScrubContext } from './chunk-B7LPFCIN.js';
9
+ import { writeDockerClientConfig } from './chunk-XZGURZHF.js';
10
10
  import { upgradedStarterText } from './chunk-TZMDRHWB.js';
11
- import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, hasClaudeCredential, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, createContainerRuntime, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, startHostServices, LEASE_SECONDS, managedBuildSettingsFor, stopContainer, cleanupContainer, outOfMemoryReason, closeHostBuild, dropManagedClaudeKey, dropManagedBuildSettings, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, managedMachineLimits, withFactoryHosts, helperFirecrackerNote, managedClaudeKeyValues, managedBuildSettingValues, stopJailed, deleteBuildDisk, managedClaudeKeyFor, ROOT_DISK_ID_PREFIX, copyTranscripts, containerJudgeEnvironment, senderSignalScript, copyJudgeTree } from './chunk-AHAYHJNN.js';
12
- import { fetchCommit, readBranchHead, diffBetween } from './chunk-7X2G463B.js';
13
- import { waitForAgent, vmExecArgs } from './chunk-3VZTNXK5.js';
14
- import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-6KFJIU73.js';
15
- import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, keptContextTree, WORKFLOW_PERMISSION_REASON } from './chunk-77VBS2RT.js';
16
- import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-DEJCZ43H.js';
17
- import { formatBytes, DEFAULT_CACHE_DISK, allocatedBytes } from './chunk-BLSEHKZ4.js';
18
- import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, parseSize, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-GR7ZVGNI.js';
11
+ import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, hasClaudeCredential, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, createContainerRuntime, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, startHostServices, LEASE_SECONDS, managedBuildSettingsFor, stopContainer, cleanupContainer, outOfMemoryReason, closeHostBuild, dropManagedClaudeKey, dropManagedBuildSettings, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, managedMachineLimits, withFactoryHosts, helperFirecrackerNote, managedClaudeKeyValues, managedBuildSettingValues, stopJailed, deleteBuildDisk, managedClaudeKeyFor, ROOT_DISK_ID_PREFIX, copyTranscripts, containerJudgeEnvironment, senderSignalScript, copyJudgeTree } from './chunk-ARPPH7VS.js';
12
+ import { fetchCommit, readBranchHead, diffBetween } from './chunk-SGT7YU3X.js';
13
+ import { waitForAgent, vmExecArgs } from './chunk-ZV6GOXYA.js';
14
+ import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-RMJSYOSV.js';
15
+ import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, keptContextTree, WORKFLOW_PERMISSION_REASON } from './chunk-66TKWWTX.js';
16
+ import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, egressSummary, DEFAULT_CHECK_TIME_LIMIT_MINUTES, optionalEgress } from './chunk-RO2NZJHZ.js';
17
+ import { formatBytes, DEFAULT_CACHE_DISK, allocatedBytes } from './chunk-TS2YACAQ.js';
18
+ import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, parseSize, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-UYWGR35C.js';
19
19
  import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-QUOITPN7.js';
20
20
  import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
21
- import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-QABXXQ67.js';
21
+ import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-NGZBVN6F.js';
22
22
  import { planArtifactUpload } from './chunk-IXPH4EXK.js';
23
23
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
24
- import { signerFor } from './chunk-L5VHGRQE.js';
24
+ import { signerFor } from './chunk-KDSKFXPE.js';
25
25
  import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE, resolvePackRoot } from './chunk-OVNF4LLC.js';
26
26
  import { scrubText } from './chunk-OOD5NDQA.js';
27
27
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
@@ -29,8 +29,8 @@ import { resolveVersion } from './chunk-RA3O54FC.js';
29
29
  import { parsePolicy } from './chunk-XFJ7YOPD.js';
30
30
  import { CheckItemsSchema } from './chunk-DINRXUQA.js';
31
31
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
32
- import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath, jobConsolePath } from './chunk-GJ4KBHBD.js';
33
- import { JOB_MOUNT, repositoriesOf, primaryOf, buildEnvironment, CHECKOUT_DIR, claudeCredential, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, authorEnvironment, withTunnelRecord, commitIdentityRecord, RELAY_PORT, repositoryPath, lifecycleWorkdir, CHECK_ITEMS_FILE, fdName, buildMavenSettingsXml, CLAUDE_CREDENTIAL_VARIABLES, currentClaudeCredential, removedClaudeCredentialValues, managedClaudeCredential, checkEnvironment, MAVEN_SETTINGS_FILE, EVAL_INPUT_DIR } from './chunk-SDAEXUIX.js';
32
+ import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath, jobConsolePath } from './chunk-I2GHZ2VA.js';
33
+ import { JOB_MOUNT, repositoriesOf, primaryOf, buildEnvironment, CHECKOUT_DIR, claudeCredential, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, authorEnvironment, withTunnelRecord, commitIdentityRecord, RELAY_PORT, repositoryPath, lifecycleWorkdir, CHECK_ITEMS_FILE, fdName, buildMavenSettingsXml, CLAUDE_CREDENTIAL_VARIABLES, currentClaudeCredential, removedClaudeCredentialValues, managedClaudeCredential, checkEnvironment, MAVEN_SETTINGS_FILE, EVAL_INPUT_DIR } from './chunk-Z7THNFUU.js';
34
34
  import { RUNNER_WORDED_REASONS, UNKNOWN_TRACKING_REASON } from './chunk-MESOOLF4.js';
35
35
  import { randomBytes, createHash } from 'crypto';
36
36
  import { rmSync, existsSync, statSync, appendFileSync, mkdirSync, chmodSync, writeFileSync, openSync, closeSync, readFileSync, readdirSync, lstatSync, realpathSync, fstatSync, readSync } from 'fs';
@@ -217,6 +217,7 @@ function builderMachineFor(config, jobDir, assets, limits) {
217
217
  limits: { ...limits, cacheDiskBytes: parseSize(config.build?.cacheDisk ?? DEFAULT_CACHE_DISK) ?? parseSize(DEFAULT_CACHE_DISK) },
218
218
  memory: memoryTextOf(config, jobDir, limits),
219
219
  allowHosts: withFactoryHosts(config.build?.allowHosts, managedBuildSettingsFor(jobDir)),
220
+ ...optionalEgress(config),
220
221
  managed: config.managed === true,
221
222
  timeLimitMinutes: config.timeLimitMinutes
222
223
  };
@@ -2297,6 +2298,7 @@ function scrubTunnelRecord(record, config) {
2297
2298
  refusalsMore: record.refusalsMore,
2298
2299
  refusals: record.refusals.map((r) => ({ ...r, host: scrubText(r.host) })),
2299
2300
  destinations: (record.destinations ?? []).map((name) => scrubText(name)),
2301
+ ...record.egress === void 0 ? {} : { egress: record.egress },
2300
2302
  ...record.routes === void 0 ? {} : { routes: Object.fromEntries(Object.entries(record.routes).map(([name, counts]) => [scrubText(name), counts])) }
2301
2303
  };
2302
2304
  }
@@ -2909,15 +2911,19 @@ async function finishJob(job, jobDirPath, outcome, config, deps, ending) {
2909
2911
  );
2910
2912
  } else if (release.ok) {
2911
2913
  log.line(
2912
- outcome === void 0 ? `${tag} released \xB7 not attempted (provision exit 75) \xB7 ${total}` : `${tag} released \xB7 outcome ${outcome} \xB7 ${total}`
2914
+ outcome === void 0 ? `${tag} released \xB7 not attempted (provision exit 75) \xB7 ${total}` : `${tag} released \xB7 outcome ${outcome} \xB7 ${total}${egressText(tunnelRecord)}`
2913
2915
  );
2914
2916
  } else {
2915
2917
  log.error(
2916
- `${tag} release failed after ${release.attempts} attempt(s): ${release.reason}; the lease expires at ${formatClock(leaseExpiry(job, endedAt), endedAt)}`
2918
+ `${tag} release failed after ${release.attempts} attempt(s): ${release.reason}; the lease expires at ${formatClock(leaseExpiry(job, endedAt), endedAt)}${egressText(tunnelRecord)}`
2917
2919
  );
2918
2920
  }
2919
2921
  return job;
2920
2922
  }
2923
+ function egressText(record) {
2924
+ if (record === void 0) return "";
2925
+ return record.egress === void 0 ? " \xB7 tunnel counts not recorded" : ` \xB7 ${egressSummary(record.egress)}`;
2926
+ }
2921
2927
  function readLogState(logPath) {
2922
2928
  try {
2923
2929
  const stats = statSync(logPath);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readCloudConfigStrict, readCloudConfig, cloudConfigPath } from './chunk-PJDQPF5N.js';
4
- import { signRunnerRequest, signerFor } from './chunk-L5VHGRQE.js';
4
+ import { signRunnerRequest, signerFor } from './chunk-KDSKFXPE.js';
5
5
  import { readRepoConnection, findGitDirs } from './chunk-BJ3KTMDH.js';
6
6
  import { PLAIN_VERSION, recordCliVersion, removeRecordedVersion } from './chunk-5BHIBJDA.js';
7
7
  import { resolvePackageVersion } from './chunk-RA3O54FC.js';
@@ -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-GR7ZVGNI.js';
4
- import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-GJ4KBHBD.js';
3
+ import { parseSize, BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-UYWGR35C.js';
4
+ import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-I2GHZ2VA.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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { GH_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, TINI_SHA256, TINI_VERSION, HEADLESS_SHELL_REVISION, HEADLESS_SHELL_BASE_URL, PLAYWRIGHT_FFMPEG_BASE_URL, PLAYWRIGHT_FFMPEG_REVISION, HEADLESS_SHELL, PLAYWRIGHT_FFMPEG, PLAYWRIGHT_VERSION } from './chunk-QUOITPN7.js';
4
- import { PROXY_WARNING_FLAG } from './chunk-SDAEXUIX.js';
4
+ import { PROXY_WARNING_FLAG } from './chunk-Z7THNFUU.js';
5
5
  import { RELAY_ID, RELAY_USER } from './chunk-MESOOLF4.js';
6
6
 
7
7
  createRequire(import.meta.url);
@@ -19,6 +19,13 @@ var IMAGE_BROWSER = {
19
19
  playwright: "/opt/outerlayer/browser/playwright",
20
20
  fontConfig: "/opt/outerlayer/browser/fonts.conf"
21
21
  };
22
+ var FALLBACK_BIN = "/opt/outerlayer/fallback/bin";
23
+ var IMAGE_GIT = "/opt/outerlayer/git";
24
+ var CA_BUNDLE = "/opt/outerlayer/certs/ca-certificates.crt";
25
+ function findCaBundle() {
26
+ const bundles = ["/etc/ssl/certs/ca-certificates.crt", "/etc/pki/tls/certs/ca-bundle.crt", "/etc/ssl/ca-bundle.pem", "/etc/ssl/cert.pem", CA_BUNDLE];
27
+ return `for ca in ${bundles.join(" ")}; do [ -f "$ca" ] && break; done`;
28
+ }
22
29
  function plain(name, value, allowed) {
23
30
  if (!allowed.test(value)) throw new Error(`${name} holds a character a Dockerfile line cannot carry safely: ${JSON.stringify(value)}`);
24
31
  return value;
@@ -106,6 +113,7 @@ function toolsDockerfile(parts) {
106
113
  " && chmod 0755 /out/usr/local/bin/espeak-ng \\",
107
114
  " && chmod -R a+rX /out",
108
115
  ...browserStage({ nodeImage, fetched, download, stream }),
116
+ ...gitStage(nodeImage),
109
117
  `FROM ${recipeImage} AS recipe`,
110
118
  `FROM ${nodeImage} AS stage`,
111
119
  "ARG TARGETARCH",
@@ -148,7 +156,10 @@ function toolsDockerfile(parts) {
148
156
  ...fetched ? [] : [` && ${download} https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_$TARGETARCH.tar.gz /tmp/gh.tgz \\`],
149
157
  ' && echo "$gh_sha /tmp/gh.tgz" | sha256sum -c - \\',
150
158
  " && tar -xzf /tmp/gh.tgz -C /tmp \\",
151
- ` && install -m 0755 /tmp/gh_${GH_VERSION}_linux_$TARGETARCH/bin/gh /out/usr/local/bin/gh`,
159
+ ` && install -D -m 0755 /tmp/gh_${GH_VERSION}_linux_$TARGETARCH/bin/gh /out/opt/outerlayer/gh/gh \\`,
160
+ // gh checks GitHub's certificate against the system's CA certificates, which a slim recipe image does not have.
161
+ ` && printf '%s\\n' '#!/bin/sh' '${findCaBundle()}' 'SSL_CERT_FILE="\${SSL_CERT_FILE:-$ca}"' 'export SSL_CERT_FILE' 'exec /opt/outerlayer/gh/gh "$@"' > /out/usr/local/bin/gh \\`,
162
+ " && chmod 0755 /out/usr/local/bin/gh",
152
163
  "COPY --from=recipe /etc/passwd /tmp/recipe-passwd",
153
164
  "COPY --from=recipe /etc/group /tmp/recipe-group",
154
165
  `RUN uid=$(awk -F: 'BEGIN{m=1499} $3>=1500 && $3<60000 && $3>m{m=$3} END{print m+1}' /tmp/recipe-passwd) \\`,
@@ -169,17 +180,52 @@ function toolsDockerfile(parts) {
169
180
  "COPY --from=voice /out/ /",
170
181
  "COPY --from=media /out/ /",
171
182
  "COPY --from=browser /out/ /",
183
+ "COPY --from=git /out/ /",
172
184
  "ENV DISABLE_AUTOUPDATER=1",
185
+ // Last, so a recipe's own git comes first. A recipe image that sets no PATH gets the one Docker gives a container.
186
+ `ENV PATH=\${PATH:-/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin}:${FALLBACK_BIN}`,
173
187
  // espeak-ng's audio library makes a private pulse-* folder for the user who runs it, in the temp folder unless XDG_RUNTIME_DIR names another.
174
188
  // Made here, as root, it would ship in the image where the build user cannot read it, and the runner's disk check fails on it.
175
189
  "RUN check=$(mktemp -d /tmp/ol-check.XXXXXX) \\",
176
190
  " && outerlayer --version && claude --version && gh --version && ffmpeg -version && ffprobe -version \\",
177
191
  ' && XDG_RUNTIME_DIR="$check" espeak-ng --version \\',
192
+ ` && git --version && ${FALLBACK_BIN}/git --version \\`,
178
193
  ` && ${IMAGE_BROWSER.playwright}/chromium_headless_shell-${HEADLESS_SHELL_REVISION}/chrome-headless-shell-linux*/chrome-headless-shell --version \\`,
179
194
  ' && rm -rf "$check"',
180
195
  ""
181
196
  ].join("\n");
182
197
  }
198
+ function gitStage(nodeImage) {
199
+ const lib = `${IMAGE_GIT}/lib`;
200
+ const wrapper = [
201
+ "#!/bin/sh",
202
+ findCaBundle(),
203
+ 'GIT_SSL_CAINFO="${GIT_SSL_CAINFO:-$ca}"',
204
+ `GIT_EXEC_PATH=${IMAGE_GIT}/git-core`,
205
+ `GIT_TEMPLATE_DIR="\${GIT_TEMPLATE_DIR:-${IMAGE_GIT}/templates}"`,
206
+ "export GIT_SSL_CAINFO GIT_EXEC_PATH GIT_TEMPLATE_DIR",
207
+ `exec ${IMAGE_GIT}/git-core/git "$@"`
208
+ ];
209
+ return [
210
+ `FROM ${nodeImage} AS git`,
211
+ "RUN apt-get update \\",
212
+ " && apt-get install -y --no-install-recommends git ca-certificates patchelf \\",
213
+ " && rm -rf /var/lib/apt/lists/*",
214
+ "RUN set -eu \\",
215
+ ` && mkdir -p /out${lib} /out/opt/outerlayer/certs /out${FALLBACK_BIN} \\`,
216
+ ` && cp -a /usr/lib/git-core /out${IMAGE_GIT}/git-core \\`,
217
+ ` && cp -a /usr/share/git-core/templates /out${IMAGE_GIT}/templates \\`,
218
+ ` && programs=$(find /out${IMAGE_GIT}/git-core -type f -exec sh -c 'head -c 4 "$1" | grep -q ELF' _ {} \\; -print) \\`,
219
+ ` && if ldd $programs | grep 'not found'; then echo "git needs a library this stage does not install" >&2; exit 1; fi \\`,
220
+ ` && cp -L $(for file in $programs; do ldd "$file" | awk '$3 ~ /^\\// {print $3}'; done | sort -u) /out${lib}/ \\`,
221
+ ` && cp -L $(ldd /usr/lib/git-core/git | awk '$1 ~ /ld-linux/ {print $1}') /out${lib}/ld.so \\`,
222
+ ` && for file in $programs; do patchelf --set-interpreter ${lib}/ld.so --force-rpath --set-rpath ${lib} "$file"; done \\`,
223
+ ` && cp -L /etc/ssl/certs/ca-certificates.crt /out${CA_BUNDLE} \\`,
224
+ ` && printf '%s\\n' ${wrapper.map((line) => `'${line}'`).join(" ")} > /out${FALLBACK_BIN}/git \\`,
225
+ ` && chmod 0755 /out${FALLBACK_BIN}/git \\`,
226
+ " && chmod -R a+rX /out"
227
+ ];
228
+ }
183
229
  function browserStage(parts) {
184
230
  const { fetched } = parts;
185
231
  const libraries = [
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { checkStarterFiles, contextIsGoverned } from './chunk-TZMDRHWB.js';
4
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-QABXXQ67.js';
5
- import { isLinkedRepository } from './chunk-O7QPHJWN.js';
4
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-NGZBVN6F.js';
5
+ import { isLinkedRepository } from './chunk-L7RPNSAA.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
- import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-JA2ARVY6.js';
7
+ import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-QTAADTIO.js';
8
8
  import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
9
9
  import { checkFormerSkillNames } from './chunk-LMYRR5MO.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-CCHSD7RS.js';
10
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-T375XV3H.js';
11
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-CHDWAWQA.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';
@@ -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-RZ7AZKTY.js');
1199
- const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-NGCQD6SN.js');
1198
+ const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-WMIRA4RD.js');
1199
+ const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-CWYMIXTV.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-QENPDYBD.js');
1220
+ const { runnerHostChecks } = await import('./doctor-5VNZ2BLY.js');
1221
1221
  const gateway = (() => {
1222
1222
  try {
1223
1223
  const { url, apiKey, appId } = loadRunnerConfig(configPath);
@@ -1236,7 +1236,7 @@ async function gatherDoctorChecks() {
1236
1236
  const runner = (() => {
1237
1237
  try {
1238
1238
  const { concurrency, build, housekeeping, managed } = loadRunnerConfig(configPath);
1239
- return { concurrency, buildMemory: build?.memory ?? "8g", buildDisk: build?.disk ?? DEFAULT_BUILD_DISK, cacheDisk: build?.cacheDisk ?? DEFAULT_CACHE_DISK, minFreeDisk: housekeeping?.minFreeDisk, allowHosts: build?.allowHosts, ...build?.imageBuild === void 0 ? {} : { imageBuild: build.imageBuild }, ...managed === true ? { managed } : {} };
1239
+ return { concurrency, buildMemory: build?.memory ?? "8g", buildDisk: build?.disk ?? DEFAULT_BUILD_DISK, cacheDisk: build?.cacheDisk ?? DEFAULT_CACHE_DISK, minFreeDisk: housekeeping?.minFreeDisk, allowHosts: build?.allowHosts, ...build?.egress === void 0 ? {} : { egress: build.egress }, ...build?.imageBuild === void 0 ? {} : { imageBuild: build.imageBuild }, ...managed === true ? { managed } : {} };
1240
1240
  } catch {
1241
1241
  return void 0;
1242
1242
  }
@@ -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-IOCVYPNW.js');
1247
+ const { inspectRunnerService } = await import('./find-unit-R4I5GJCH.js');
1248
1248
  return inspectRunnerService(configPath);
1249
1249
  })();
1250
1250
  checks.push(...await runnerHostChecks({ configPath, hooks, gateway, repos, runner, service }));
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { builtinKind, keepsHostBuilder } from './chunk-DEJCZ43H.js';
4
- import { parseSize } from './chunk-GR7ZVGNI.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';
3
+ import { builtinKind, keepsHostBuilder } from './chunk-RO2NZJHZ.js';
4
+ import { parseSize } from './chunk-UYWGR35C.js';
5
+ import { runnerDir } from './chunk-I2GHZ2VA.js';
6
+ import { FD_SLOTS_PER_BUILD, FD_STORE_ENV, BUILD_SLICE_MEMORY_ENV, CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-Z7THNFUU.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';
@@ -2,10 +2,10 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { resolveDevcontainerCli, devcontainerBuildInvocation, RecipeError } from './chunk-HDLON3RJ.js';
4
4
  import { BUILDKIT_IMAGE } from './chunk-QUOITPN7.js';
5
- import { ensureHostKey } from './chunk-L5VHGRQE.js';
5
+ import { ensureHostKey } from './chunk-KDSKFXPE.js';
6
6
  import { compareVersions } from './chunk-OOD5NDQA.js';
7
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-GJ4KBHBD.js';
8
- import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-SDAEXUIX.js';
7
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-I2GHZ2VA.js';
8
+ import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-Z7THNFUU.js';
9
9
  import { JOIN_DIR, RELAY_ID, JOIN_SOCKET, TARGET_GATEWAY, TARGET_CLAUDE, destinationTarget, RELAY_USER } from './chunk-MESOOLF4.js';
10
10
  import { createHash } from 'crypto';
11
11
  import { mkdirSync, createWriteStream, rmSync, existsSync, readFileSync, chmodSync, writeFileSync, realpathSync, readdirSync, renameSync } 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-GJ4KBHBD.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-I2GHZ2VA.js';
5
5
  import { existsSync, readFileSync, mkdirSync, writeFileSync, rmSync } from 'fs';
6
6
  import { dirname } from 'path';
7
7
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { stripTerminalControls } from './chunk-FQOUIYBL.js';
4
- import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-SDELQEG4.js';
3
+ import { stripTerminalControls } from './chunk-SJY6A6EH.js';
4
+ import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-HO4XRLAZ.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-TRGA5QRL.js')).spawnRun;
58
+ const run = deps.run ?? (await import('./docker-IUPWQ2RK.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,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { criteriaOf, loadCitationFinder, hostItemsOf, MAX_TEST_FILE_BYTES, MAX_TEST_FILES, criterionInputs, NO_CITING_TEST_REASON, NO_VERDICT_REASON, planCriteria } from './chunk-6CK2OC4Q.js';
4
- import { WorkCommandError, resolveCredentials, getJson } from './chunk-QABXXQ67.js';
4
+ import { WorkCommandError, resolveCredentials, getJson } from './chunk-NGZBVN6F.js';
5
5
  import { C } from './chunk-ANPNT6PM.js';
6
6
  import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
7
- import { defaultFetch } from './chunk-7QAJQDHS.js';
7
+ import { defaultFetch } from './chunk-T375XV3H.js';
8
8
  import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
9
9
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
@@ -167,14 +167,14 @@ function governingDir(cwd) {
167
167
  async function testProofMode(cwd) {
168
168
  const dir = governingDir(cwd);
169
169
  if (dir === void 0) return "any";
170
- const { testProofIn } = await import('./host-checks-UNEQTQ6L.js');
170
+ const { testProofIn } = await import('./host-checks-VKBAGGWH.js');
171
171
  return testProofIn(dir);
172
172
  }
173
173
  async function judgeCheckName(cwd) {
174
174
  const dir = governingDir(cwd);
175
175
  if (dir === void 0) return {};
176
176
  if (!existsSync(dir)) return { note: `the governed context at ${dir} is not readable` };
177
- const { checksIn, isJudgeCheck } = await import('./host-checks-UNEQTQ6L.js');
177
+ const { checksIn, isJudgeCheck } = await import('./host-checks-VKBAGGWH.js');
178
178
  const quiet = { line: () => void 0, error: () => void 0 };
179
179
  const check = checksIn(dir, quiet, "").checks.find((c) => isJudgeCheck(c) && c.judge.subjects === "criteria");
180
180
  return check === void 0 ? {} : { name: check.name };
@@ -314,7 +314,7 @@ async function runWorkProofs(opts) {
314
314
  async function runWorkProofsCommand(opts) {
315
315
  try {
316
316
  if (opts.record) {
317
- const { runWorkProofsRecord } = await import('./work-proofs-record-XG544MGV.js');
317
+ const { runWorkProofsRecord } = await import('./work-proofs-record-AYUWUFBE.js');
318
318
  const result2 = await runWorkProofsRecord(opts);
319
319
  process.exitCode = result2.exitCode;
320
320
  return;
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { placeholderQueues, placeholderProblem } from './chunk-AHAYHJNN.js';
4
- import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-7QF2EXAN.js';
5
- import { builtinKind, imageBuildOf, keepsHostBuilder } from './chunk-DEJCZ43H.js';
6
- import { realBuildDiskProbe, checkDiskFit, DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-BLSEHKZ4.js';
3
+ import { placeholderQueues, placeholderProblem } from './chunk-ARPPH7VS.js';
4
+ import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-UXGWAAGQ.js';
5
+ import { builtinKind, EGRESS_SWITCHABLE_KEYS, imageBuildOf, keepsHostBuilder } from './chunk-RO2NZJHZ.js';
6
+ import { realBuildDiskProbe, checkDiskFit, DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-TS2YACAQ.js';
7
7
  import { builderDiskPinned } from './chunk-QUOITPN7.js';
8
- import { BUILD_SLICE_MEMORY_ENV, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, claudeCredentialVariablesSet, claudeCredential, claudeEnvPath, parseRunnerEnv } from './chunk-SDAEXUIX.js';
8
+ import { BUILD_SLICE_MEMORY_ENV, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, claudeCredentialVariablesSet, claudeCredential, claudeEnvPath, parseRunnerEnv } from './chunk-Z7THNFUU.js';
9
9
  import { closeSync, openSync, constants, readFileSync } from 'fs';
10
10
  import { join, dirname } from 'path';
11
11
  import { totalmem } from 'os';
@@ -56,6 +56,13 @@ function managedProblems(facts) {
56
56
  reason: "runner.build.allowHosts is not set, and a managed runner needs it so that a build reaches only the public hosts it lists. List the hosts your builds need; an empty list allows none"
57
57
  });
58
58
  }
59
+ const off = EGRESS_SWITCHABLE_KEYS.filter((key) => facts.egress?.[key] === 0);
60
+ if (off.length > 0) {
61
+ problems.push({
62
+ condition: "egress",
63
+ reason: `${off.map((key) => `runner.build.egress.${key}`).join(" and ")} ${off.length === 1 ? "is" : "are"} 0, which turns ${off.length === 1 ? "that limit" : "those limits"} off. A managed runner limits how fast a build opens connections and sends bytes, because every organization on the host shares one address. Remove ${off.length === 1 ? "the key" : "the keys"} to use the default, or set a value above 0`
64
+ });
65
+ }
59
66
  if (builtinKind(facts.provision) === "vm") {
60
67
  if (facts.imageBuild === "host") {
61
68
  problems.push({
@@ -92,6 +99,7 @@ function managedFactsOf(config, probes) {
92
99
  jailer: probes.jailer ?? "unknown",
93
100
  credentials: /* @__PURE__ */ new Set([...claudeCredentialVariablesSet(probes.env), ...credentialsInFiles(config.configPath)]),
94
101
  allowHosts: config.build?.allowHosts,
102
+ egress: config.build?.egress,
95
103
  imageBuild: imageBuildOf(config),
96
104
  builderDiskPinned: probes.builderDiskPinned ?? builderDiskPinned()
97
105
  };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { DEFAULT_UNIT_NAME } from './chunk-7QF2EXAN.js';
4
- import { RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.js';
5
- import { claudeEnvPath, withoutCredentialLines, parseRunnerEnv } from './chunk-SDAEXUIX.js';
3
+ import { DEFAULT_UNIT_NAME } from './chunk-UXGWAAGQ.js';
4
+ import { RUNNER_FILE_MODE } from './chunk-I2GHZ2VA.js';
5
+ import { claudeEnvPath, withoutCredentialLines, parseRunnerEnv } from './chunk-Z7THNFUU.js';
6
6
  import { existsSync, readFileSync, writeFileSync, renameSync, rmSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RELAY_PORT, BUILD_HOME } from './chunk-SDAEXUIX.js';
3
+ import { RELAY_PORT, BUILD_HOME } from './chunk-Z7THNFUU.js';
4
4
  import { createServer, connect } from 'net';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-QRJIBTNQ.js';
4
- import { spoolDir } from './chunk-CCHSD7RS.js';
3
+ import { LiveUploader } from './chunk-B7LPFCIN.js';
4
+ import { spoolDir } from './chunk-CHDWAWQA.js';
5
5
  import { CaptureDaemon } from './chunk-OOD5NDQA.js';
6
6
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-O7QPHJWN.js';
4
- import { resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-L7RPNSAA.js';
4
+ import { resolveGatewayCredentials } from './chunk-T375XV3H.js';
5
5
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
6
6
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
7
7
  import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
@@ -618,6 +618,7 @@ async function startBuildServices(input) {
618
618
  ...streamed ? { socket: false } : {},
619
619
  ...streamed ? {} : listenOnFor("tunnel.sock"),
620
620
  ...input.allowHosts === void 0 ? {} : { allowHosts: input.allowHosts },
621
+ ...input.egress === void 0 ? {} : { egress: input.egress },
621
622
  recordPath: join(input.jobDir, "tunnel.json")
622
623
  });
623
624
  const servers = [];
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { EXEC_PORT } from './chunk-6KFJIU73.js';
3
+ import { EXEC_PORT } from './chunk-RMJSYOSV.js';
4
4
  import { createConnection } from 'net';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -252,7 +252,7 @@ async function runClaudeLauncher(args, deps = {}) {
252
252
  return 1;
253
253
  }
254
254
  } else {
255
- const { resolveLaunchPlane } = await import('./control-plane-launch-BDSUP4DK.js');
255
+ const { resolveLaunchPlane } = await import('./control-plane-launch-UM4IHOJQ.js');
256
256
  const plane = env[GOVERNANCE_VARIABLE] === "self" ? { kind: "none" } : await resolveLaunchPlane({ cwd, env, home, fetchImpl: deps.fetchImpl, stderr });
257
257
  if (plane.kind === "none") {
258
258
  const own2 = ownSkillsDirFor(cwd, home, [], stderr);