@outerlayer/cli 0.34.0-next.20261027023105 → 0.34.0-next.20261027162612

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 (124) hide show
  1. package/dist/{agent-setup-2A6P2SYL.js → agent-setup-THDNZ5ME.js} +6 -6
  2. package/dist/{bridge-F5FBQSPZ.js → bridge-MLB57JP6.js} +2 -2
  3. package/dist/build-25GDCEZ7.js +18 -0
  4. package/dist/{build-disk-RZ7AZKTY.js → build-disk-NFMQCZM3.js} +8 -8
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-MQIL24HI.js → builder-OWDGC3VQ.js} +7 -7
  7. package/dist/{check-YIUZ3UX3.js → check-QGM2SECF.js} +39 -39
  8. package/dist/{chunk-RR3VDM7M.js → chunk-2YPOSVC7.js} +3 -3
  9. package/dist/{chunk-66LH5QAV.js → chunk-36M4KVBT.js} +2 -2
  10. package/dist/{chunk-LQHCNXPK.js → chunk-3FTIUB7I.js} +1 -1
  11. package/dist/{chunk-QWXBWOVV.js → chunk-3RRYEZAC.js} +4 -4
  12. package/dist/{chunk-GJ4KBHBD.js → chunk-3VJYDWFV.js} +1 -1
  13. package/dist/{chunk-CCHSD7RS.js → chunk-4QQJTJUN.js} +1 -1
  14. package/dist/{chunk-P3NPTFLF.js → chunk-5ARXP3BP.js} +3 -3
  15. package/dist/{chunk-IYQPUGST.js → chunk-5FHBVV25.js} +104 -59
  16. package/dist/{chunk-7QAJQDHS.js → chunk-62URQYCB.js} +1 -1
  17. package/dist/{chunk-QABXXQ67.js → chunk-6IMQXBTZ.js} +6 -6
  18. package/dist/{chunk-77VBS2RT.js → chunk-7Q7GQELE.js} +5 -5
  19. package/dist/{chunk-QRJIBTNQ.js → chunk-7SJNVGVC.js} +6 -6
  20. package/dist/{chunk-FQGC22IP.js → chunk-7TLGRE5F.js} +2 -2
  21. package/dist/{chunk-OOD5NDQA.js → chunk-A6PJSNP6.js} +349 -94
  22. package/dist/{chunk-7PCA37ZS.js → chunk-ANFNZCXZ.js} +5 -5
  23. package/dist/{chunk-MN3PP45X.js → chunk-AV5T7HV3.js} +1 -1
  24. package/dist/{chunk-DX4FF5P5.js → chunk-BCIBSJZH.js} +43 -24
  25. package/dist/{chunk-6KFJIU73.js → chunk-BS3OYFAD.js} +1 -1
  26. package/dist/{chunk-TS3EFB7S.js → chunk-BS4CZMT6.js} +1 -1
  27. package/dist/{chunk-SDELQEG4.js → chunk-CFJOONWM.js} +1 -1
  28. package/dist/{chunk-UWDFA6WW.js → chunk-CKVJSOY3.js} +20 -20
  29. package/dist/{chunk-GTBY7BTI.js → chunk-CMMEJJTL.js} +10 -35
  30. package/dist/{chunk-OKGHWCSK.js → chunk-EYJRVHBN.js} +3 -3
  31. package/dist/{chunk-GR7ZVGNI.js → chunk-FLHBUQ2W.js} +7 -6
  32. package/dist/{chunk-72CJOYN6.js → chunk-FVVHQIZR.js} +1 -1
  33. package/dist/{chunk-SDAEXUIX.js → chunk-GMKDAF37.js} +26 -6
  34. package/dist/{chunk-CFFVCI2I.js → chunk-GPO7F757.js} +1 -1
  35. package/dist/{chunk-EBVK3QBO.js → chunk-HJCNWEQK.js} +3 -3
  36. package/dist/{chunk-LKTH7PUH.js → chunk-J3Q3QCOF.js} +393 -91
  37. package/dist/{chunk-MYLOOVRJ.js → chunk-JO4SAEHH.js} +3 -3
  38. package/dist/{chunk-3VZTNXK5.js → chunk-JVNQNKHV.js} +1 -1
  39. package/dist/{chunk-DEJCZ43H.js → chunk-JWMJMQRF.js} +83 -7
  40. package/dist/{chunk-JL4GSPGD.js → chunk-KVGK2JL3.js} +6 -6
  41. package/dist/{chunk-BLSEHKZ4.js → chunk-LYX2RRSF.js} +2 -2
  42. package/dist/{chunk-WPDL7MBC.js → chunk-MGF346ND.js} +3 -3
  43. package/dist/{chunk-SSRB5HEL.js → chunk-N33OOF3K.js} +11 -11
  44. package/dist/{chunk-36U7LY7C.js → chunk-NEBMTP7T.js} +6 -6
  45. package/dist/{chunk-O7QPHJWN.js → chunk-NO6E72RM.js} +2 -2
  46. package/dist/{chunk-7QF2EXAN.js → chunk-OHTMTMFX.js} +4 -4
  47. package/dist/{chunk-Q2KGDDUX.js → chunk-OP2L7OXA.js} +3 -3
  48. package/dist/{chunk-WBTPI5MP.js → chunk-QRIE4JZE.js} +3 -3
  49. package/dist/{chunk-ZK3A4W3I.js → chunk-QWSAZGH6.js} +14 -6
  50. package/dist/{chunk-7DK2FOZ4.js → chunk-RCAMBC3H.js} +3 -3
  51. package/dist/{chunk-L5VHGRQE.js → chunk-RJZZFAXS.js} +1 -1
  52. package/dist/{chunk-JA2ARVY6.js → chunk-T6ALNN3H.js} +1 -1
  53. package/dist/{chunk-HOUFCUMH.js → chunk-UZIAZXXO.js} +1 -1
  54. package/dist/{chunk-25XBOX3K.js → chunk-W246VXU4.js} +3 -3
  55. package/dist/{chunk-YL3RWW7X.js → chunk-WR2GRWK3.js} +1 -1
  56. package/dist/{chunk-QUOITPN7.js → chunk-WX2HW2G2.js} +8 -1
  57. package/dist/{chunk-HDLON3RJ.js → chunk-X7M73LKT.js} +9 -2
  58. package/dist/{chunk-WYR4INK3.js → chunk-Z4LFCJT6.js} +3 -3
  59. package/dist/{claude-launcher-EO3ALKBS.js → claude-launcher-LYGS66AC.js} +1 -1
  60. package/dist/{cli-MP5AUR36.js → cli-HVBFWC3J.js} +114 -113
  61. package/dist/{command-RGBJLW72.js → command-J3CDQLWC.js} +27 -27
  62. package/dist/{config-NGCQD6SN.js → config-5NWSCHIO.js} +9 -9
  63. package/dist/{connect-cmd-65YBQRSY.js → connect-cmd-HB3K3AHE.js} +6 -6
  64. package/dist/{container-start-KT2KKAQX.js → container-start-YLKDT2JG.js} +33 -33
  65. package/dist/{context-show-cmd-S5SEBOI2.js → context-show-cmd-RJIQS2KF.js} +7 -7
  66. package/dist/{control-plane-launch-BDSUP4DK.js → control-plane-launch-TS4DFJF4.js} +5 -5
  67. package/dist/{demo-record-cmd-BUNOOCNM.js → demo-record-cmd-VVZGUCWB.js} +4 -4
  68. package/dist/{demo-voice-cmd-RWTRJUAX.js → demo-voice-cmd-3ADGIWK6.js} +13 -13
  69. package/dist/{dist-ADKRGE7I.js → dist-BUSLJNSZ.js} +1 -1
  70. package/dist/{docker-TRGA5QRL.js → docker-5VGCFZV2.js} +7 -7
  71. package/dist/{doctor-NEO7NXJJ.js → doctor-AG73VZNG.js} +32 -30
  72. package/dist/{emit-artifact-cmd-56C6DBUP.js → emit-artifact-cmd-WJT7AXTZ.js} +11 -11
  73. package/dist/{emit-criteria-cmd-HRCWXD3W.js → emit-criteria-cmd-45IYB535.js} +8 -8
  74. package/dist/{emit-demo-cmd-QMRDQGB6.js → emit-demo-cmd-AIIQNPXS.js} +13 -13
  75. package/dist/{emit-finding-cmd-6MVFN4BO.js → emit-finding-cmd-6YTJK2NA.js} +8 -8
  76. package/dist/{emit-result-cmd-E3YYBXRY.js → emit-result-cmd-TZGFY743.js} +10 -10
  77. package/dist/{emit-step-cmd-DM4CRYYI.js → emit-step-cmd-LGBTIAXC.js} +8 -8
  78. package/dist/{exec-client-LXHTMVIB.js → exec-client-LR67CA24.js} +3 -3
  79. package/dist/find-unit-YGDFVHVU.js +19 -0
  80. package/dist/{findings-cmd-K2OYBTUH.js → findings-cmd-ETJXUDQI.js} +8 -8
  81. package/dist/{fleet-readiness-VIAVQYRP.js → fleet-readiness-MYIMDBF7.js} +5 -5
  82. package/dist/{governing-source-MQA2SDJT.js → governing-source-GBJTVMK2.js} +10 -10
  83. package/dist/{guest-init-WWL2WL7R.js → guest-init-GXPOW53F.js} +4 -4
  84. package/dist/{hook-fast-KXAQ22LZ.js → hook-fast-5WOGLR7V.js} +1 -1
  85. package/dist/{host-checks-JH2ILNZT.js → host-checks-6G2F2HTK.js} +31 -31
  86. package/dist/{pending-UWFDVFOA.js → host-key-GAZM4EOH.js} +3 -3
  87. package/dist/{image-tag-BTXKIH73.js → image-tag-OYHGRHVV.js} +3 -3
  88. package/dist/index.js +4 -4
  89. package/dist/{init-WGVNY4NP.js → init-7VWIU5TG.js} +24 -24
  90. package/dist/{init-HGJQW2NL.js → init-Y2OJSOAA.js} +24 -24
  91. package/dist/{init-cmd-L2SG2WSN.js → init-cmd-77XKBRUF.js} +11 -11
  92. package/dist/{init-update-JMVLGBDE.js → init-update-TXQHBY3H.js} +9 -9
  93. package/dist/{install-cmd-RGO7NWKP.js → install-cmd-VZGXSS73.js} +5 -5
  94. package/dist/{logs-LEVH6VAI.js → logs-42QPBCMC.js} +2 -2
  95. package/dist/{loop-F6E6PGWG.js → loop-FRT5NSFG.js} +38 -38
  96. package/dist/{machine-GYTMJSIY.js → machine-TEG554M5.js} +24 -24
  97. package/dist/{mcp-serve-cmd-4O5INM77.js → mcp-serve-cmd-LYJQO6U4.js} +4 -4
  98. package/dist/{paths-AQ47ZRHK.js → paths-QLFRPIKS.js} +2 -2
  99. package/dist/{host-key-TSOKVSZX.js → pending-6DDSCXUD.js} +3 -3
  100. package/dist/{pidfile-PCG2H5T4.js → pidfile-WLZ427QQ.js} +3 -3
  101. package/dist/{record-SVCNFCGQ.js → record-WGCMQLQS.js} +3 -3
  102. package/dist/{runner-env-DH7YA4BU.js → runner-env-6FSJOSWS.js} +11 -11
  103. package/dist/{runner-identity-GLL56XY7.js → runner-identity-XODZ7YBP.js} +7 -7
  104. package/dist/{runner-key-HMXSBRBE.js → runner-key-T3V7N7CL.js} +24 -24
  105. package/dist/{session-sender-KLOMLL7X.js → session-sender-U54EQJNR.js} +11 -11
  106. package/dist/{spec-cmd-MX5QFW32.js → spec-cmd-EM24GTAM.js} +9 -9
  107. package/dist/{status-QNKTP6OU.js → status-4YO4TUEH.js} +31 -31
  108. package/dist/{sync-cmd-CO4DFMHU.js → sync-cmd-Y5RKWVF7.js} +10 -10
  109. package/dist/{update-steps-M2UKG4QZ.js → update-steps-KNN4Y2ZU.js} +32 -32
  110. package/dist/{watch-GU62YVQY.js → watch-X5VYY4LH.js} +10 -10
  111. package/dist/{work-claim-cmd-JF5GGDFZ.js → work-claim-cmd-IU3YJQKR.js} +15 -15
  112. package/dist/{work-cmd-VR7PPSP6.js → work-cmd-LUKJHAMH.js} +8 -8
  113. package/dist/{work-comment-cmd-HVZF72B4.js → work-comment-cmd-BDNFAVKL.js} +9 -9
  114. package/dist/{work-demo-cmd-EDGNM5VJ.js → work-demo-cmd-GPDJHU6F.js} +8 -8
  115. package/dist/{work-logs-cmd-ZZVAHX36.js → work-logs-cmd-B6EX4RPE.js} +8 -8
  116. package/dist/{work-open-pr-cmd-AQWZRJHZ.js → work-open-pr-cmd-TRXDCMSG.js} +9 -9
  117. package/dist/{work-pr-cmd-UJ7VWCJN.js → work-pr-cmd-5GUR5SIU.js} +8 -8
  118. package/dist/{work-proofs-cmd-A7SZSM2A.js → work-proofs-cmd-PBY7WNYI.js} +9 -9
  119. package/dist/{work-proofs-record-YG6HD6SJ.js → work-proofs-record-AVKJFZOD.js} +16 -16
  120. package/dist/{work-stop-cmd-SAT4XVM2.js → work-stop-cmd-J47GZB2N.js} +8 -8
  121. package/package.json +1 -1
  122. package/skill-pack/maintained/outerlayer-build/SKILL.md +15 -0
  123. package/dist/build-FS7TQEJ6.js +0 -18
  124. package/dist/find-unit-IOCVYPNW.js +0 -19
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readNewestDemo } from './chunk-ER6KQCVJ.js';
4
- import { runEmitArtifact } from './chunk-QWXBWOVV.js';
4
+ import { runEmitArtifact } from './chunk-3RRYEZAC.js';
5
5
  import { VoiceDownloadError, downloadPinned, sha256OfFile } from './chunk-2PGI6RDE.js';
6
- import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-QUOITPN7.js';
6
+ import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-WX2HW2G2.js';
7
7
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
8
- import { autoConnect } from './chunk-OKGHWCSK.js';
8
+ import { autoConnect } from './chunk-EYJRVHBN.js';
9
9
  import { C } from './chunk-ANPNT6PM.js';
10
- import { defaultFetch, resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
11
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
10
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-62URQYCB.js';
11
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
12
12
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
13
13
  import { ARTIFACT_MAX_BYTES, ARTIFACT_MAX_CAPTION_LENGTH, DEMO_RECORD_MEDIA_TYPE, ARTIFACT_MAX_REPLACES_TARGETS, DEMO_MANIFEST_LATEST_VERSION, DemoManifestSchema, ARTIFACT_KINDS } from './chunk-DINRXUQA.js';
14
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { currentLink } from './chunk-YL3RWW7X.js';
3
+ import { currentLink } from './chunk-WR2GRWK3.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';
@@ -2,35 +2,35 @@
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-5ARXP3BP.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-QRIE4JZE.js';
8
+ import { installScrubContext } from './chunk-7SJNVGVC.js';
9
+ import { writeDockerClientConfig } from './chunk-GPO7F757.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-LKTH7PUH.js';
12
- import { fetchCommit, readBranchHead, diffBetween } from './chunk-IYQPUGST.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';
19
- import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-QUOITPN7.js';
11
+ import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, hasClaudeCredential, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, runtimeStepInput, keepUnpinnedRuntimes, 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-J3Q3QCOF.js';
12
+ import { fetchCommit, readBranchHead, diffBetween } from './chunk-5FHBVV25.js';
13
+ import { waitForAgent, vmExecArgs } from './chunk-JVNQNKHV.js';
14
+ import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-BS3OYFAD.js';
15
+ import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, keptContextTree, WORKFLOW_PERMISSION_REASON } from './chunk-7Q7GQELE.js';
16
+ import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, egressSummary, DEFAULT_CHECK_TIME_LIMIT_MINUTES, optionalEgress } from './chunk-JWMJMQRF.js';
17
+ import { formatBytes, DEFAULT_CACHE_DISK, allocatedBytes } from './chunk-LYX2RRSF.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-FLHBUQ2W.js';
19
+ import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-WX2HW2G2.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-6IMQXBTZ.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-RJZZFAXS.js';
25
25
  import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE, resolvePackRoot } from './chunk-OVNF4LLC.js';
26
- import { scrubText } from './chunk-OOD5NDQA.js';
26
+ import { scrubText } from './chunk-A6PJSNP6.js';
27
27
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
28
28
  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-3VJYDWFV.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-GMKDAF37.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
  };
@@ -609,9 +610,10 @@ async function provisionMicroVm(input) {
609
610
  } catch (err) {
610
611
  return bail(`the build's Maven settings could not be delivered: ${describeCallFailure(err)}`);
611
612
  }
612
- const execEnv = buildEnvironment({ ...envInput, imageEnv: state.imageEnv });
613
+ let execEnv = buildEnvironment({ ...envInput, imageEnv: state.imageEnv });
613
614
  for (const notice of execEnv.notices) log.line(`${tag} ${notice}`);
614
- const request = (argv, workdir) => ({ argv, user: agentUser, cwd: workdir, env: execEnvironment(state.imageEnv, execEnv) });
615
+ const plainEnv = buildEnvironment({ ...envInput, imageEnv: state.imageEnv, proxyWarning: false });
616
+ const request = (argv, workdir, plain = false) => ({ argv, user: agentUser, cwd: workdir, env: execEnvironment(state.imageEnv, plain ? plainEnv : execEnv) });
615
617
  const steps = await runBuildSteps({
616
618
  repository,
617
619
  branch: primary.branch,
@@ -620,7 +622,7 @@ async function provisionMicroVm(input) {
620
622
  agentVersion,
621
623
  lifecycle: report.apply.lifecycle,
622
624
  exec: async (argv, workdir, opts) => {
623
- const ran = await vm.exec(state.vsockPath, request(argv, workdir));
625
+ const ran = await vm.exec(state.vsockPath, request(argv, workdir, opts?.withoutProxyWarning === true));
624
626
  if (opts?.quiet !== true) appendFileSync(logPath, ran.stdout + ran.stderr);
625
627
  return ran;
626
628
  },
@@ -650,10 +652,16 @@ async function provisionMicroVm(input) {
650
652
  },
651
653
  removeStagedContext: () => removeStagedContext(buildDir2),
652
654
  keepIn: jobDir,
653
- ...input.requireBuildSkill === true ? { requireBuildSkill: true } : {}
655
+ ...input.requireBuildSkill === true ? { requireBuildSkill: true } : {},
656
+ // A repository with no devcontainer file builds on the universal image, whose runtimes the build chooses and installs.
657
+ ...runtimeStepInput(report, services, () => {
658
+ state.proxyWarningDropped = true;
659
+ execEnv = plainEnv;
660
+ })
654
661
  });
655
662
  if (!steps.ok) return bail(steps.reason, steps.aborted === true);
656
663
  state.startCommit = steps.startCommit;
664
+ keepUnpinnedRuntimes(state, steps);
657
665
  if (steps.controlPlane !== void 0) environment.controlPlane = steps.controlPlane;
658
666
  return { ok: true, workdir: CHECKOUT_DIR, state, environment };
659
667
  }
@@ -698,9 +706,11 @@ function vmExecFor(input, argv) {
698
706
  repositories: input.job.repositories,
699
707
  hostEnv: input.runtime.hostEnv,
700
708
  containerEnv: state.containerEnv ?? {},
709
+ unpinnedRuntimes: state.unpinnedRuntimes,
701
710
  builtIns: state.builtIns === true,
702
711
  identity: input.job.commitIdentity,
703
712
  imageEnv: state.imageEnv,
713
+ proxyWarning: state.proxyWarningDropped !== true,
704
714
  factoryVariables: factoryVariablesOf(input.config, input.jobDir)
705
715
  });
706
716
  const options = {
@@ -728,9 +738,11 @@ async function startMicroVmCommand(input) {
728
738
  repositories: input.job.repositories,
729
739
  hostEnv: input.runtime.hostEnv,
730
740
  containerEnv: state.containerEnv ?? {},
741
+ unpinnedRuntimes: state.unpinnedRuntimes,
731
742
  builtIns: state.builtIns === true,
732
743
  identity: input.job.commitIdentity,
733
744
  imageEnv: state.imageEnv,
745
+ proxyWarning: state.proxyWarningDropped !== true,
734
746
  factoryVariables: factoryVariablesOf(input.config, input.jobDir)
735
747
  });
736
748
  const started = await input.runtime.vm.exec(state.vsockPath, {
@@ -771,9 +783,11 @@ async function syncInMicroVm(input) {
771
783
  repositories: job.repositories,
772
784
  hostEnv: runtime.hostEnv,
773
785
  containerEnv: state.containerEnv ?? {},
786
+ unpinnedRuntimes: state.unpinnedRuntimes,
774
787
  builtIns: state.builtIns === true,
775
788
  identity: job.commitIdentity,
776
789
  imageEnv: state.imageEnv,
790
+ proxyWarning: state.proxyWarningDropped !== true,
777
791
  factoryVariables: factoryVariablesOf(input.config, input.jobDir)
778
792
  });
779
793
  const result = await runtime.vm.exec(state.vsockPath, {
@@ -2297,6 +2311,7 @@ function scrubTunnelRecord(record, config) {
2297
2311
  refusalsMore: record.refusalsMore,
2298
2312
  refusals: record.refusals.map((r) => ({ ...r, host: scrubText(r.host) })),
2299
2313
  destinations: (record.destinations ?? []).map((name) => scrubText(name)),
2314
+ ...record.egress === void 0 ? {} : { egress: record.egress },
2300
2315
  ...record.routes === void 0 ? {} : { routes: Object.fromEntries(Object.entries(record.routes).map(([name, counts]) => [scrubText(name), counts])) }
2301
2316
  };
2302
2317
  }
@@ -2909,15 +2924,19 @@ async function finishJob(job, jobDirPath, outcome, config, deps, ending) {
2909
2924
  );
2910
2925
  } else if (release.ok) {
2911
2926
  log.line(
2912
- outcome === void 0 ? `${tag} released \xB7 not attempted (provision exit 75) \xB7 ${total}` : `${tag} released \xB7 outcome ${outcome} \xB7 ${total}`
2927
+ outcome === void 0 ? `${tag} released \xB7 not attempted (provision exit 75) \xB7 ${total}` : `${tag} released \xB7 outcome ${outcome} \xB7 ${total}${egressText(tunnelRecord)}`
2913
2928
  );
2914
2929
  } else {
2915
2930
  log.error(
2916
- `${tag} release failed after ${release.attempts} attempt(s): ${release.reason}; the lease expires at ${formatClock(leaseExpiry(job, endedAt), endedAt)}`
2931
+ `${tag} release failed after ${release.attempts} attempt(s): ${release.reason}; the lease expires at ${formatClock(leaseExpiry(job, endedAt), endedAt)}${egressText(tunnelRecord)}`
2917
2932
  );
2918
2933
  }
2919
2934
  return job;
2920
2935
  }
2936
+ function egressText(record) {
2937
+ if (record === void 0) return "";
2938
+ return record.egress === void 0 ? " \xB7 tunnel counts not recorded" : ` \xB7 ${egressSummary(record.egress)}`;
2939
+ }
2921
2940
  function readLogState(logPath) {
2922
2941
  try {
2923
2942
  const stats = statSync(logPath);
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RELAY_PORT, GATEWAY_SOCKET, GATEWAY_PORT, CLAUDE_SOCKET, CLAUDE_PORT, DESTINATION_BASE_PORT } from './chunk-SDAEXUIX.js';
3
+ import { RELAY_PORT, GATEWAY_SOCKET, GATEWAY_PORT, CLAUDE_SOCKET, CLAUDE_PORT, DESTINATION_BASE_PORT } from './chunk-GMKDAF37.js';
4
4
  import { symlinkSync, unlinkSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -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-GJ4KBHBD.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-3VJYDWFV.js';
4
4
  import { readFileSync, mkdirSync, writeFileSync, renameSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -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-GJ4KBHBD.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-3VJYDWFV.js';
5
5
  import { readFileSync, mkdirSync, writeFileSync, renameSync } from 'fs';
6
6
  import { join } from 'path';
7
7
 
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
4
- import { reportFailedStart, fitImageBuildMemory } from './chunk-JL4GSPGD.js';
4
+ import { reportFailedStart, fitImageBuildMemory } from './chunk-KVGK2JL3.js';
5
5
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-E7R2GIAW.js';
6
6
  import { RUNNER_PROTOCOL } from './chunk-MH6QLXUO.js';
7
- import { writePendingUpdate } from './chunk-HOUFCUMH.js';
8
- import { renderUpdateSteps } from './chunk-WPDL7MBC.js';
9
- import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-TS3EFB7S.js';
10
- import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, readProvisionOut, workdirProblem, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, startSender, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-DX4FF5P5.js';
7
+ import { writePendingUpdate } from './chunk-UZIAZXXO.js';
8
+ import { renderUpdateSteps } from './chunk-MGF346ND.js';
9
+ import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-BS4CZMT6.js';
10
+ import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, readProvisionOut, workdirProblem, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, startSender, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-BCIBSJZH.js';
11
11
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
12
- import { realBlockedProbes, checkBlockedWithSlots, largeBuildMemoryBytes, LARGE_BUILD_DISK_BYTES, checkManagedRoom, sliceMemoryOf } from './chunk-ZK3A4W3I.js';
13
- import { writeMarker, readMarker, currentVersion, removeMarker, isInLayout, startedThroughCurrent, entryIn, versionDir, switchCurrent, cleanVersions, stagingDir } from './chunk-YL3RWW7X.js';
12
+ import { realBlockedProbes, checkBlockedWithSlots, largeBuildMemoryBytes, LARGE_BUILD_DISK_BYTES, checkManagedRoom, sliceMemoryOf } from './chunk-QWSAZGH6.js';
13
+ import { writeMarker, readMarker, currentVersion, removeMarker, isInLayout, startedThroughCurrent, entryIn, versionDir, switchCurrent, cleanVersions, stagingDir } from './chunk-WR2GRWK3.js';
14
14
  import { RepoFilter } from './chunk-TBT347UY.js';
15
- import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, attemptNote, fetchManagedClaudeKey, holdManagedClaudeKey, fetchManagedBuildSettings, holdManagedBuildSettings, needsBuildSkill, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, provisionEnvironment, resolveHostBuild, listenOnBroker, hostEnvironment, deliverExecMaven, runWithSpawn, hostCommandEnvironment, lifecycleSteps, execArgv, lifecycleFailureReason, decideHostBuildSkill, prepareBranch, currentSkillCommand, formerSkillProblem, containerCommandExec, execCommandLine, startHostServices, setUpRunnerCgroup, sweepImageBuilders, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, managedBuildSettingsFor, ADOPTED_FETCH_RETRY_WINDOW_MS, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-LKTH7PUH.js';
16
- import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, resolveGoverningSource, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-77VBS2RT.js';
17
- import { imageTag, writeUpdateStatus, pullInstruction, tagToPull } from './chunk-SDELQEG4.js';
15
+ import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, attemptNote, fetchManagedClaudeKey, holdManagedClaudeKey, fetchManagedBuildSettings, holdManagedBuildSettings, needsBuildSkill, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, provisionEnvironment, resolveHostBuild, listenOnBroker, hostEnvironment, deliverExecMaven, runWithSpawn, hostCommandEnvironment, lifecycleSteps, execArgv, lifecycleFailureReason, decideHostBuildSkill, prepareBranch, currentSkillCommand, formerSkillProblem, containerCommandExec, execCommandLine, startHostServices, setUpRunnerCgroup, sweepImageBuilders, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, managedBuildSettingsFor, ADOPTED_FETCH_RETRY_WINDOW_MS, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-J3Q3QCOF.js';
16
+ import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, resolveGoverningSource, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-7Q7GQELE.js';
17
+ import { imageTag, writeUpdateStatus, pullInstruction, tagToPull } from './chunk-CFJOONWM.js';
18
18
  import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
19
- import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, keepsHostBuilder, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-DEJCZ43H.js';
20
- import { freeBytes, formatBytes, allocatedBytes, volumeBytes } from './chunk-BLSEHKZ4.js';
21
- import { writeJobFile, ensureRunnerIdentity, identityDockerFor, readJobFile, exceedsDisk, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, RUNNER_LABEL, BUILD_LABEL, readJobFileChecked } from './chunk-GR7ZVGNI.js';
22
- import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-LQHCNXPK.js';
19
+ import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, keepsHostBuilder, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-JWMJMQRF.js';
20
+ import { freeBytes, formatBytes, allocatedBytes, volumeBytes } from './chunk-LYX2RRSF.js';
21
+ import { writeJobFile, ensureRunnerIdentity, identityDockerFor, readJobFile, exceedsDisk, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, RUNNER_LABEL, BUILD_LABEL, readJobFileChecked } from './chunk-FLHBUQ2W.js';
22
+ import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-3FTIUB7I.js';
23
23
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
24
- import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-QABXXQ67.js';
25
- import { loadHostKey, ensureHostKey, signerFor } from './chunk-L5VHGRQE.js';
24
+ import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-6IMQXBTZ.js';
25
+ import { loadHostKey, ensureHostKey, signerFor } from './chunk-RJZZFAXS.js';
26
26
  import { resolveVersion } from './chunk-RA3O54FC.js';
27
- import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, imagesDir, rootfsDir, builderCacheDiskPath } from './chunk-GJ4KBHBD.js';
28
- import { parseClaimIdentity, parseClaimedRepositories, parseUnreachable, repositoriesOf, primaryOf, sharedUserEnvironment, JOB_MOUNT, takeClaudeCredential, heldClaudeCredential, currentClaudeCredential, fdName } from './chunk-SDAEXUIX.js';
27
+ import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, imagesDir, rootfsDir, builderCacheDiskPath } from './chunk-3VJYDWFV.js';
28
+ import { parseClaimIdentity, parseClaimedRepositories, parseUnreachable, repositoriesOf, primaryOf, sharedUserEnvironment, JOB_MOUNT, takeClaudeCredential, heldClaudeCredential, currentClaudeCredential, fdName } from './chunk-GMKDAF37.js';
29
29
  import { COMMAND_LOST_REASON, CONTAINER_STOPPED_REASON } from './chunk-MESOOLF4.js';
30
30
  import { randomBytes } from 'crypto';
31
31
  import { mkdirSync, existsSync, chmodSync, writeFileSync, renameSync, statSync, readdirSync, readFileSync, closeSync, rmSync, lstatSync } from 'fs';
@@ -1961,7 +1961,7 @@ var CLAIM_REFUSAL_CODES = new Set(
1961
1961
  "pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected repository_not_reachable branch_claimed_elsewhere".split(" ")
1962
1962
  );
1963
1963
  async function tryClaimAndStart(state, item, queue) {
1964
- const { postJson: postJson2 } = await import('./work-cmd-VR7PPSP6.js');
1964
+ const { postJson: postJson2 } = await import('./work-cmd-LUKJHAMH.js');
1965
1965
  const log = logOf(state);
1966
1966
  const hostKey = await loadHostKey(state.config.configPath);
1967
1967
  const claim = await retrySend(
@@ -3279,7 +3279,7 @@ async function startRunner(configPath, deps, startup) {
3279
3279
  check: update.check ? () => update.check(configPath) : async () => {
3280
3280
  const held = heldClaudeCredential();
3281
3281
  const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
3282
- return (await import('./check-YIUZ3UX3.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3282
+ return (await import('./check-QGM2SECF.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3283
3283
  },
3284
3284
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
3285
3285
  log
@@ -1,11 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
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';
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-WX2HW2G2.js';
4
+ import { PROXY_WARNING_FLAG } from './chunk-GMKDAF37.js';
5
5
  import { RELAY_ID, RELAY_USER } from './chunk-MESOOLF4.js';
6
6
 
7
7
  createRequire(import.meta.url);
8
8
 
9
+ // src/runner/image/claude-wrapper.ts
10
+ function claudeWrapperScript(opts) {
11
+ const path = opts.universal ? 'PATH="$PATH:/opt/outerlayer/bin"' : "PATH=/opt/outerlayer/bin:$PATH";
12
+ return ["#!/bin/sh", path, "export PATH", 'exec /opt/outerlayer/claude/bin/claude "$@"', ""].join("\n");
13
+ }
14
+
9
15
  // src/runner/image/dockerfiles.ts
10
16
  var FETCHED_DIR = "fetched";
11
17
  var FETCHED_VOICE_DIR = "voice";
@@ -30,37 +36,6 @@ function plain(name, value, allowed) {
30
36
  if (!allowed.test(value)) throw new Error(`${name} holds a character a Dockerfile line cannot carry safely: ${JSON.stringify(value)}`);
31
37
  return value;
32
38
  }
33
- var DEFAULT_PACKAGES = ["git", "ca-certificates", "curl", "build-essential", "python3", "python3-pip", "python3-venv", "unzip", "jq"];
34
- function defaultDockerfile(baseImage, nodeImage) {
35
- return [
36
- ubuntuWithNode(baseImage, nodeImage, DEFAULT_PACKAGES),
37
- // The browsers live in one shared folder so any user finds them. A build container's root filesystem is
38
- // read-only, so the build user cannot add to this folder: a repository that needs another Playwright version
39
- // installs that version's Chromium into a writable folder by setting PLAYWRIGHT_BROWSERS_PATH.
40
- // `install --with-deps` runs apt-get as root and works on amd64 and arm64.
41
- "ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright",
42
- "RUN mkdir -p /ms-playwright \\",
43
- ` && npx -y playwright@${plain("the Playwright version", PLAYWRIGHT_VERSION, /^[0-9.]+$/)} install --with-deps chromium \\`,
44
- " && chmod -R a+rX /ms-playwright \\",
45
- " && rm -rf /var/lib/apt/lists/* /root/.npm",
46
- ""
47
- ].join("\n");
48
- }
49
- function ubuntuWithNode(baseImage, nodeImage, packages) {
50
- return [
51
- `FROM ${baseImage}`,
52
- "ENV DEBIAN_FRONTEND=noninteractive",
53
- "RUN apt-get update \\",
54
- ` && apt-get install -y --no-install-recommends ${packages.join(" ")} \\`,
55
- " && rm -rf /var/lib/apt/lists/*",
56
- `COPY --from=${nodeImage} /usr/local/bin/node /usr/local/bin/node`,
57
- `COPY --from=${nodeImage} /usr/local/lib/node_modules /usr/local/lib/node_modules`,
58
- "RUN ln -s ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \\",
59
- " && ln -s ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \\",
60
- " && ln -s ../lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack",
61
- ""
62
- ].join("\n");
63
- }
64
39
  function toolsDockerfile(parts) {
65
40
  const recipeImage = plain("the recipe image", parts.recipeImage, /^[A-Za-z0-9_.:@/-]+$/);
66
41
  const nodeImage = plain("the Node image", parts.nodeImage, /^[A-Za-z0-9_.:@/-]+$/);
@@ -131,7 +106,7 @@ function toolsDockerfile(parts) {
131
106
  "RUN mkdir -p /out/opt/outerlayer/bin /out/usr/local/bin /out/etc/claude-code /out/build \\",
132
107
  " && cp /usr/local/bin/node /out/opt/outerlayer/bin/node \\",
133
108
  ` && printf '%s\\n' '#!/bin/sh' 'exec /opt/outerlayer/bin/node /opt/outerlayer/cli/dist/index.js "$@"' > /out/usr/local/bin/outerlayer \\`,
134
- ` && printf '%s\\n' '#!/bin/sh' 'PATH=/opt/outerlayer/bin:$PATH' 'export PATH' 'exec /opt/outerlayer/claude/bin/claude "$@"' > /out/usr/local/bin/claude \\`,
109
+ ` && printf '%s\\n' ${claudeWrapperScript({ universal: parts.universal === true }).trimEnd().split("\n").map((line) => `'${line}'`).join(" ")} > /out/usr/local/bin/claude \\`,
135
110
  ` && printf '%s\\n' '${tools}' > /out/opt/outerlayer/tools.json \\`,
136
111
  ` && printf '%s\\n' '${managedSettings}' > /out/etc/claude-code/managed-settings.json \\`,
137
112
  " && chmod 0755 /out/usr/local/bin/outerlayer /out/usr/local/bin/claude \\",
@@ -298,4 +273,4 @@ function browserStage(parts) {
298
273
  ];
299
274
  }
300
275
 
301
- export { FETCHED_DIR, FETCHED_FFMPEG, FETCHED_GH, FETCHED_HEADLESS_SHELL, FETCHED_PLAYWRIGHT_FFMPEG, FETCHED_TINI, FETCHED_VOICE_DIR, IMAGE_BROWSER, defaultDockerfile, toolsDockerfile };
276
+ export { FETCHED_DIR, FETCHED_FFMPEG, FETCHED_GH, FETCHED_HEADLESS_SHELL, FETCHED_PLAYWRIGHT_FFMPEG, FETCHED_TINI, FETCHED_VOICE_DIR, IMAGE_BROWSER, toolsDockerfile };
@@ -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-O7QPHJWN.js';
4
- import { resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-NO6E72RM.js';
4
+ import { resolveGatewayCredentials } from './chunk-62URQYCB.js';
5
5
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
6
6
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
7
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
7
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
8
8
  import { cliInvocation } from './chunk-CRB3POP4.js';
9
9
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
10
10
 
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveDevcontainerCli, devcontainerBuildInvocation, RecipeError } from './chunk-HDLON3RJ.js';
4
- import { BUILDKIT_IMAGE } from './chunk-QUOITPN7.js';
5
- import { ensureHostKey } from './chunk-L5VHGRQE.js';
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';
3
+ import { resolveDevcontainerCli, devcontainerBuildInvocation, universalImagePending, RecipeError } from './chunk-X7M73LKT.js';
4
+ import { universalImagePinned, UNIVERSAL_IMAGE, BUILDKIT_IMAGE } from './chunk-WX2HW2G2.js';
5
+ import { ensureHostKey } from './chunk-RJZZFAXS.js';
6
+ import { compareVersions } from './chunk-A6PJSNP6.js';
7
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-3VJYDWFV.js';
8
+ import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-GMKDAF37.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';
@@ -207,6 +207,7 @@ function createDockerHost(deps = {}) {
207
207
  },
208
208
  async buildDockerfile(req) {
209
209
  const builder = builderFor();
210
+ if (!universalImagePinned() && req.dockerfile.includes(UNIVERSAL_IMAGE)) throw universalImagePending();
210
211
  if (req.layoutOut !== void 0) {
211
212
  rmSync(req.layoutOut, { recursive: true, force: true });
212
213
  }
@@ -5,7 +5,7 @@ import { addStdioMcpEntryIfAbsent, addDocsMcpEntryIfAbsent, DOCS_MCP_SERVER_NAME
5
5
  import { installStarterPack } from './chunk-J7EJMIDR.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { AGENTS_MD_LAYOUT, declareAgentsMdLayout, linkClaudeSkills, SKILLS_LINK_PATH, describeSkillsLink, isAgentsMdLayout, holdsTodaysLayoutSources, discoverOuterlayerPaths } from './chunk-LYCJQOO2.js';
8
- import { resolveGitCommonDir, defaultGitRunner } from './chunk-66LH5QAV.js';
8
+ import { resolveGitCommonDir, defaultGitRunner } from './chunk-36M4KVBT.js';
9
9
  import { loadTemplateFiles, loadMaintainedFiles, skillDir, AGENTS_SKILLS_BASE } from './chunk-OVNF4LLC.js';
10
10
  import { cliInvocation } from './chunk-CRB3POP4.js';
11
11
  import { linkedAgentsPath } from './chunk-UPA5KOOX.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 = [];
@@ -886,7 +887,19 @@ function withProxyWarningHidden(options) {
886
887
  if (given.split(/\s+/).includes(PROXY_WARNING_FLAG)) return given;
887
888
  return given === "" ? PROXY_WARNING_FLAG : `${given} ${PROXY_WARNING_FLAG}`;
888
889
  }
889
- function runnerLiterals(repository, repositories = []) {
890
+ function withoutProxyWarningFlag(options) {
891
+ return options.split(/\s+/).filter((option) => option !== "" && option !== PROXY_WARNING_FLAG).join(" ");
892
+ }
893
+ function nodeAcceptsProxyWarningFlag(version) {
894
+ const match = /^v?(\d+)\.(\d+)/.exec(version.trim());
895
+ if (match === null) return true;
896
+ const major = Number(match[1]);
897
+ const minor = Number(match[2]);
898
+ if (major === 20) return minor >= 11;
899
+ if (major === 21) return minor >= 3;
900
+ return major >= 22;
901
+ }
902
+ function runnerLiterals(repository, repositories = [], unpinnedRuntimes) {
890
903
  return {
891
904
  OUTERLAYER_JOB_DIR: JOB_MOUNT,
892
905
  HOME: BUILD_HOME,
@@ -901,7 +914,9 @@ function runnerLiterals(repository, repositories = []) {
901
914
  OUTERLAYER_REPOSITORIES: JSON.stringify(
902
915
  repositories.map((entry) => ({ repository: entry.repository, path: checkoutPath(entry), branch: entry.branch, primary: entry.primary }))
903
916
  )
904
- }
917
+ },
918
+ // What the build's command reads to find the runtimes each repository uses but does not pin, on the universal image.
919
+ ...unpinnedRuntimes === void 0 ? {} : { OUTERLAYER_UNPINNED_RUNTIMES: JSON.stringify(unpinnedRuntimes) }
905
920
  };
906
921
  }
907
922
  function containerBuiltInAddress(name) {
@@ -961,8 +976,13 @@ function buildEnvironment(input) {
961
976
  }
962
977
  const nodeOptions = {};
963
978
  if (input.imageEnv !== void 0) {
964
- if (passed.NODE_OPTIONS !== void 0) passed.NODE_OPTIONS = withProxyWarningHidden(passed.NODE_OPTIONS);
965
- else nodeOptions.NODE_OPTIONS = withProxyWarningHidden(recipe.NODE_OPTIONS ?? input.imageEnv.NODE_OPTIONS);
979
+ const hide = input.proxyWarning !== false;
980
+ const apply = (value) => hide ? withProxyWarningHidden(value) : value === void 0 ? void 0 : withoutProxyWarningFlag(value);
981
+ if (passed.NODE_OPTIONS !== void 0) passed.NODE_OPTIONS = apply(passed.NODE_OPTIONS);
982
+ else {
983
+ const value = apply(recipe.NODE_OPTIONS ?? input.imageEnv.NODE_OPTIONS);
984
+ if (value !== void 0) nodeOptions.NODE_OPTIONS = value;
985
+ }
966
986
  }
967
987
  const mavenLiterals = {};
968
988
  const notices = [];
@@ -992,7 +1012,7 @@ function buildEnvironment(input) {
992
1012
  ...nodeOptions,
993
1013
  ...mavenLiterals,
994
1014
  ...destinations,
995
- ...runnerLiterals(input.repository, repositoriesOf({ repositories: input.repositories, repository: input.repository, branch: input.branch })),
1015
+ ...runnerLiterals(input.repository, repositoriesOf({ repositories: input.repositories, repository: input.repository, branch: input.branch }), input.unpinnedRuntimes),
996
1016
  ...builtInLiterals,
997
1017
  ...authored,
998
1018
  ...hooks
@@ -1065,4 +1085,4 @@ function routesOf(counts) {
1065
1085
  return routes.length === 0 ? {} : { routes };
1066
1086
  }
1067
1087
 
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 };
1088
+ 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, nodeAcceptsProxyWarningFlag, 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,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-GMKDAF37.js';
4
4
  import { createServer, connect } from 'net';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, getJson } from './chunk-QABXXQ67.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-6IMQXBTZ.js';
4
4
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
5
5
  import { C } from './chunk-ANPNT6PM.js';
6
6
  import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
7
- import { defaultFetch } from './chunk-7QAJQDHS.js';
8
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
7
+ import { defaultFetch } from './chunk-62URQYCB.js';
8
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
9
9
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
10
10
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
11
11
  import { randomUUID } from 'crypto';