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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +6 -0
  2. package/dist/{agent-setup-FNDKCPUP.js → agent-setup-WOEZELVB.js} +6 -6
  3. package/dist/{bridge-YJBB4YA3.js → bridge-F5FBQSPZ.js} +2 -2
  4. package/dist/{build-ZJK6CPNH.js → build-UDOBVX5J.js} +7 -7
  5. package/dist/{build-disk-7HS4UF7O.js → build-disk-C3WIAHCL.js} +6 -6
  6. package/dist/build-info.json +1 -1
  7. package/dist/{builder-MHZKDI4H.js → builder-YNXWVH2V.js} +5 -5
  8. package/dist/{check-4W4QUBMP.js → check-ERYYVAEM.js} +37 -37
  9. package/dist/{chunk-2ILU7UAU.js → chunk-3VZTNXK5.js} +1 -1
  10. package/dist/{chunk-AE3OTPUU.js → chunk-4G4IH4A7.js} +102 -53
  11. package/dist/{chunk-4YFMNF5Y.js → chunk-4J2FF5HZ.js} +3 -3
  12. package/dist/{chunk-CAQCDYKF.js → chunk-5JGPTYLT.js} +2 -2
  13. package/dist/{chunk-OGPEHSNW.js → chunk-6KFJIU73.js} +1 -1
  14. package/dist/{chunk-3EJBI5JW.js → chunk-7FQYTM7M.js} +1 -1
  15. package/dist/{chunk-3N77LUQI.js → chunk-7QAJQDHS.js} +1 -1
  16. package/dist/{chunk-SI6WDF3U.js → chunk-CFFVCI2I.js} +1 -1
  17. package/dist/{chunk-7P3H4RY2.js → chunk-CNZRUVZ5.js} +102 -36
  18. package/dist/{chunk-PWSUNS6Y.js → chunk-E6OVLJTR.js} +98 -30
  19. package/dist/{chunk-WMNPKBX5.js → chunk-ELO5XEES.js} +4 -4
  20. package/dist/{chunk-PP6OX4OT.js → chunk-EPFFYDNX.js} +5 -5
  21. package/dist/{chunk-35JMYSUD.js → chunk-EUQZAH2W.js} +2 -2
  22. package/dist/{chunk-YZ375YBI.js → chunk-FZ4G6CMK.js} +4 -4
  23. package/dist/{chunk-WHDS6MEG.js → chunk-GHFI5GBF.js} +3 -3
  24. package/dist/{chunk-PXGU3GKY.js → chunk-GJ4KBHBD.js} +1 -1
  25. package/dist/{chunk-VVOSUGEF.js → chunk-H47VGSCW.js} +4 -4
  26. package/dist/{chunk-TFPNPS4Q.js → chunk-HOUFCUMH.js} +1 -1
  27. package/dist/{chunk-7JE2WFNK.js → chunk-HVPW272H.js} +3 -3
  28. package/dist/{chunk-M3ME6TLQ.js → chunk-HVQMIZ22.js} +4 -4
  29. package/dist/{chunk-7DXVL7TN.js → chunk-IO2BBKG4.js} +3 -3
  30. package/dist/{chunk-UONH72CJ.js → chunk-IWVGALDC.js} +2 -2
  31. package/dist/{chunk-ZP7GKJSM.js → chunk-JC6AQ6PC.js} +39 -6
  32. package/dist/{chunk-6JZXIWX7.js → chunk-JKNOJKVD.js} +34 -9
  33. package/dist/{chunk-GEQT3RPN.js → chunk-JSZRBQY3.js} +3 -3
  34. package/dist/{chunk-MOI2KDLH.js → chunk-L5VHGRQE.js} +1 -1
  35. package/dist/{chunk-SKVA4KWD.js → chunk-LD3BHLK7.js} +3 -3
  36. package/dist/{chunk-YNMVVQOQ.js → chunk-LQHCNXPK.js} +1 -1
  37. package/dist/{chunk-YHKU2NOZ.js → chunk-LTYBHCL4.js} +1 -1
  38. package/dist/{chunk-PAK5P2ND.js → chunk-MH6QLXUO.js} +1 -1
  39. package/dist/{chunk-OS7DJOQJ.js → chunk-MN3PP45X.js} +1 -1
  40. package/dist/{chunk-25GRRBTH.js → chunk-NHEU5CON.js} +1 -1
  41. package/dist/{chunk-IM6IL3F4.js → chunk-OQT7RT5I.js} +3 -3
  42. package/dist/{chunk-63IVRRIO.js → chunk-P3NPTFLF.js} +3 -3
  43. package/dist/{chunk-GC5PVMIJ.js → chunk-RR3VDM7M.js} +3 -3
  44. package/dist/{chunk-G4W4B33M.js → chunk-SDAEXUIX.js} +25 -10
  45. package/dist/{chunk-SYVRBBLW.js → chunk-SDELQEG4.js} +1 -1
  46. package/dist/{chunk-FDJPDZSR.js → chunk-TS3EFB7S.js} +1 -1
  47. package/dist/{chunk-CY5TCVBS.js → chunk-U6AWVO6L.js} +6 -6
  48. package/dist/{chunk-EMH2LNIE.js → chunk-V2VJYK46.js} +4 -4
  49. package/dist/{chunk-KAVZAB3E.js → chunk-VEJWLQ4G.js} +10 -10
  50. package/dist/{chunk-XTYYF6P7.js → chunk-VUQKGBIQ.js} +14 -7
  51. package/dist/{chunk-KRTD2F3I.js → chunk-VWZHOFBP.js} +3 -3
  52. package/dist/{chunk-3RLKILPT.js → chunk-WE4C3ODP.js} +2 -2
  53. package/dist/{chunk-QEIA5Q35.js → chunk-XL2MPORM.js} +4 -4
  54. package/dist/{chunk-VGRCZE6U.js → chunk-XSFR76J7.js} +3 -3
  55. package/dist/{chunk-UMYYYF7B.js → chunk-YL3RWW7X.js} +1 -1
  56. package/dist/{chunk-GSSVJNP2.js → chunk-Z7WMU3RA.js} +3 -2
  57. package/dist/{chunk-3EHDZTRT.js → chunk-ZIKZZ4LK.js} +3 -3
  58. package/dist/{claude-launcher-OQZNW7XJ.js → claude-launcher-6KGANL7E.js} +1 -1
  59. package/dist/{cli-PFWJD5QM.js → cli-LXKVCFD7.js} +112 -111
  60. package/dist/{command-CM22HPN5.js → command-VQPQDPCZ.js} +24 -24
  61. package/dist/{config-W2XWNR4C.js → config-WSZIWPP4.js} +7 -7
  62. package/dist/{connect-cmd-TOWE4P45.js → connect-cmd-LI34HS5Q.js} +6 -6
  63. package/dist/{container-start-D2OEPMUO.js → container-start-IL74XEC5.js} +30 -30
  64. package/dist/{context-show-cmd-5UJUWBJL.js → context-show-cmd-X27GMOT6.js} +7 -7
  65. package/dist/{control-plane-launch-XBGHM7DB.js → control-plane-launch-74EIIB5Z.js} +5 -5
  66. package/dist/dist-HVXLUMRV.js +7 -0
  67. package/dist/{docker-GA63DVME.js → docker-KZ3OQTPW.js} +5 -5
  68. package/dist/{doctor-GVWQBHBC.js → doctor-KPKLFIJH.js} +24 -24
  69. package/dist/{emit-artifact-cmd-TUOLSGHB.js → emit-artifact-cmd-BJICHW2E.js} +11 -11
  70. package/dist/{emit-criteria-cmd-VEUMA7MZ.js → emit-criteria-cmd-MUWPT25P.js} +8 -8
  71. package/dist/{emit-demo-cmd-YLEZB6FG.js → emit-demo-cmd-YQN7VKQH.js} +12 -12
  72. package/dist/{emit-finding-cmd-BX3FWGSX.js → emit-finding-cmd-NPBWVY44.js} +8 -8
  73. package/dist/{emit-result-cmd-AYXGCIPR.js → emit-result-cmd-7CJZZQGK.js} +10 -10
  74. package/dist/{emit-step-cmd-CU6GQ3WW.js → emit-step-cmd-ZPLHZAMA.js} +8 -8
  75. package/dist/{exec-client-QB4OZRGM.js → exec-client-LXHTMVIB.js} +3 -3
  76. package/dist/find-unit-UKH6JH4S.js +18 -0
  77. package/dist/{findings-cmd-G4V4M3PO.js → findings-cmd-DZ4ESTHX.js} +8 -8
  78. package/dist/{fleet-readiness-NJYTQYTA.js → fleet-readiness-YSI4NOHT.js} +5 -5
  79. package/dist/{governing-source-JQV3ZKD7.js → governing-source-JPRMOB3O.js} +10 -10
  80. package/dist/{guest-init-IF5LXGUL.js → guest-init-WWL2WL7R.js} +4 -4
  81. package/dist/{hook-fast-GPUL7T77.js → hook-fast-6EW2MGA2.js} +1 -1
  82. package/dist/{pending-ERXWVLLG.js → host-key-TSOKVSZX.js} +3 -3
  83. package/dist/{image-tag-SEMBVB5D.js → image-tag-BTXKIH73.js} +3 -3
  84. package/dist/index.js +4 -4
  85. package/dist/{init-FY3HP73H.js → init-MN3MNG7V.js} +21 -21
  86. package/dist/{init-3NT4YX2X.js → init-V6Y2VNKW.js} +21 -21
  87. package/dist/{init-cmd-RXHHEAOT.js → init-cmd-QCWLJDIF.js} +11 -11
  88. package/dist/{init-update-RHS6HWLI.js → init-update-GTFLPDEL.js} +9 -9
  89. package/dist/{install-cmd-5H6M2KJ7.js → install-cmd-RGO7NWKP.js} +5 -5
  90. package/dist/{logs-6CMB3DO6.js → logs-LEVH6VAI.js} +2 -2
  91. package/dist/{loop-V3GED2WX.js → loop-A4CB4IFF.js} +36 -36
  92. package/dist/{machine-HLZLH327.js → machine-XG54XYYZ.js} +21 -21
  93. package/dist/{mcp-serve-cmd-MWGIN6YL.js → mcp-serve-cmd-4O5INM77.js} +4 -4
  94. package/dist/{paths-T2DEBI62.js → paths-AQ47ZRHK.js} +2 -2
  95. package/dist/{host-key-5RU322O3.js → pending-UWFDVFOA.js} +3 -3
  96. package/dist/{pidfile-EAD2OEM7.js → pidfile-PCG2H5T4.js} +3 -3
  97. package/dist/{record-IMXQNHPB.js → record-SVCNFCGQ.js} +3 -3
  98. package/dist/{runner-env-V52JUOD5.js → runner-env-YPXWTNP3.js} +9 -9
  99. package/dist/{runner-identity-J4NCBSBU.js → runner-identity-XPZO3TG4.js} +5 -5
  100. package/dist/{runner-key-ZUHMQCHZ.js → runner-key-B5EJH25Z.js} +21 -21
  101. package/dist/{session-sender-XDKMK4SF.js → session-sender-XED7CKHP.js} +11 -11
  102. package/dist/{spec-cmd-XQV7EIJW.js → spec-cmd-TRXAGQYM.js} +9 -9
  103. package/dist/{status-ZJJEJ52D.js → status-6V2S63DS.js} +28 -28
  104. package/dist/{sync-cmd-BG2M536W.js → sync-cmd-UQVENF25.js} +10 -10
  105. package/dist/{update-steps-I5JLERXS.js → update-steps-CSC2QVJF.js} +29 -29
  106. package/dist/{watch-7A63565I.js → watch-EZGDDRTQ.js} +10 -10
  107. package/dist/{work-claim-cmd-OVPMBIRR.js → work-claim-cmd-YSAJ7DAK.js} +14 -14
  108. package/dist/{work-cmd-KVFRK24I.js → work-cmd-V5FHLWJM.js} +8 -8
  109. package/dist/{work-comment-cmd-GC3WAFM7.js → work-comment-cmd-KLEMDYI4.js} +9 -9
  110. package/dist/{work-demo-cmd-IOB5UDGQ.js → work-demo-cmd-XYRKFP4G.js} +8 -8
  111. package/dist/{work-logs-cmd-7II6D2JJ.js → work-logs-cmd-DOGPK7Q6.js} +8 -8
  112. package/dist/{work-open-pr-cmd-FYKRKCDL.js → work-open-pr-cmd-UAUEEP3V.js} +9 -9
  113. package/dist/{work-pr-cmd-KP3RI7TV.js → work-pr-cmd-LYWL7ZLF.js} +8 -8
  114. package/dist/{work-proofs-cmd-TVU6QFZN.js → work-proofs-cmd-YMLIJDJZ.js} +9 -9
  115. package/dist/{work-proofs-record-XANZE3K4.js → work-proofs-record-NK3ULOUQ.js} +15 -15
  116. package/dist/{work-stop-cmd-5V3DV3HJ.js → work-stop-cmd-MRLJEQRP.js} +8 -8
  117. package/package.json +1 -1
  118. package/dist/dist-IOPJIQWK.js +0 -7
  119. package/dist/find-unit-GGBRYOSO.js +0 -18
@@ -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-G4W4B33M.js';
3
+ import { RELAY_PORT, GATEWAY_SOCKET, GATEWAY_PORT, CLAUDE_SOCKET, CLAUDE_PORT, DESTINATION_BASE_PORT } from './chunk-SDAEXUIX.js';
4
4
  import { symlinkSync, unlinkSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -5,7 +5,7 @@ import { addStdioMcpEntryIfAbsent, addDocsMcpEntryIfAbsent, DOCS_MCP_SERVER_NAME
5
5
  import { installStarterPack } from './chunk-4P6QGMPN.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-NKOM4JKY.js';
8
- import { resolveGitCommonDir, defaultGitRunner } from './chunk-CAQCDYKF.js';
8
+ import { resolveGitCommonDir, defaultGitRunner } from './chunk-5JGPTYLT.js';
9
9
  import { loadTemplateFiles, loadMaintainedFiles, skillDir, AGENTS_SKILLS_BASE } from './chunk-ZQSANKS4.js';
10
10
  import { cliInvocation } from './chunk-CRB3POP4.js';
11
11
  import { linkedAgentsPath } from './chunk-DQ6YO7FH.js';
@@ -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-MOI2KDLH.js';
4
+ import { signRunnerRequest, signerFor } from './chunk-L5VHGRQE.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,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RELAY_PORT, BUILD_HOME } from './chunk-G4W4B33M.js';
3
+ import { RELAY_PORT, BUILD_HOME } from './chunk-SDAEXUIX.js';
4
4
  import { createServer, connect } from 'net';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -1,28 +1,28 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { sha256OfFile, downloadPinned, VoiceDownloadError } from './chunk-2PGI6RDE.js';
4
- import { readDefaultBranchHead, cloneRepository, buildRepositoryImage, prepareImageBuild, KEY_PREFIX, FETCHED_DIR, toolsDockerfile, TAG_HOST, metadataFromLabels, writeRecord, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_VOICE_DIR } from './chunk-VVOSUGEF.js';
4
+ import { readDefaultBranchHead, cloneRepository, buildRepositoryImage, prepareImageBuild, KEY_PREFIX, FETCHED_DIR, toolsDockerfile, TAG_HOST, metadataFromLabels, writeRecord, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_VOICE_DIR } from './chunk-H47VGSCW.js';
5
5
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
6
- import { runExec, execCapture, waitForAgent } from './chunk-2ILU7UAU.js';
7
- import { GUEST_CID, linkVsockSockets } from './chunk-OGPEHSNW.js';
8
- import { retrySend, describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-PP6OX4OT.js';
9
- import { runnerImageVersion } from './chunk-SYVRBBLW.js';
10
- import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-7JE2WFNK.js';
11
- import { runnerCredentialProblem, builtinKind, hostAllowed } from './chunk-3EHDZTRT.js';
12
- import { formatBytes, allocatedBytes } from './chunk-UONH72CJ.js';
13
- import { createDockerHost, builderSpec, RecipeError, DOCKER_FEATURE, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, readDu, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, spawnRun, writeSanitizedRecipe, classifyProperties } from './chunk-M3ME6TLQ.js';
6
+ import { runExec, execCapture, waitForAgent } from './chunk-3VZTNXK5.js';
7
+ import { GUEST_CID, linkVsockSockets } from './chunk-6KFJIU73.js';
8
+ import { retrySend, describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-EPFFYDNX.js';
9
+ import { runnerImageVersion } from './chunk-SDELQEG4.js';
10
+ import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-HVPW272H.js';
11
+ import { runnerCredentialProblem, builtinKind, allowHostProblem, hostAllowed } from './chunk-ZIKZZ4LK.js';
12
+ import { formatBytes, allocatedBytes } from './chunk-IWVGALDC.js';
13
+ import { createDockerHost, builderSpec, RecipeError, DOCKER_FEATURE, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, readDu, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, spawnRun, writeSanitizedRecipe, classifyProperties } from './chunk-HVQMIZ22.js';
14
14
  import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, hostHelperPinned, CLAUDE_CODE_VERSION, builderDiskPinned, guestAssetsPinned, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, BUILDER_DISK_VERSION, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-4UPET3R7.js';
15
15
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
16
- import { postJson, WorkCommandError, getJson } from './chunk-6JZXIWX7.js';
16
+ import { postJson, WorkCommandError, getJson } from './chunk-JKNOJKVD.js';
17
17
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
18
- import { signerFor } from './chunk-MOI2KDLH.js';
18
+ import { signerFor } from './chunk-L5VHGRQE.js';
19
19
  import { sharedSkillNames, skillConflictMessage } from './chunk-FGF52V4V.js';
20
20
  import { versionAtLeast, MINIMUM_CLAUDE_VERSION } from './chunk-HCVLP7XA.js';
21
- import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-GSSVJNP2.js';
21
+ import { MIN_SCRUBBED_LITERAL, setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-Z7WMU3RA.js';
22
22
  import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-FGXT5OXS.js';
23
23
  import { downconvertSession } from './chunk-EOTMDIYC.js';
24
- import { vmAssetsDir, RUNNER_DIR_MODE, rootfsPathFor, diskTemplatesDir, RUNNER_FILE_MODE, buildsDir, buildDir, runnerDir, deliveryDir, ghConfigDir, runnerDirOfBuild, spoolDir, mirrorDir, SHIM_DIR, vsockPath, builderCacheDiskPath, builderConsolePath } from './chunk-PXGU3GKY.js';
25
- import { claudeCredential, parseIsolation, proxyEnvironment, withProxyWarningHidden, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, withHooksPath, startBuildServices, BUILT_IN_NAMES, repositoriesOf, primaryOf, RELAY_PORT, repositoryPath, CHECKOUT_DIR, lifecycleWorkdir, buildEnvironment, writeBuildMavenSettings, checkEnvironment, AGENT_CREDENTIAL_MISSING, mavenSettingsXml, namesGlobalSettings, MAVEN_NO_PROXY_NOTE, mavenArgs, MAVEN_SPACE_NOTE, writeMavenSettings, checkoutPath, JOB_MOUNT, realFdStorePort } from './chunk-G4W4B33M.js';
24
+ import { vmAssetsDir, RUNNER_DIR_MODE, rootfsPathFor, diskTemplatesDir, RUNNER_FILE_MODE, buildsDir, buildDir, runnerDir, deliveryDir, ghConfigDir, runnerDirOfBuild, spoolDir, mirrorDir, SHIM_DIR, vsockPath, builderCacheDiskPath, builderConsolePath } from './chunk-GJ4KBHBD.js';
25
+ import { claudeCredential, parseIsolation, proxyEnvironment, withProxyWarningHidden, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, withHooksPath, startBuildServices, BUILT_IN_NAMES, repositoriesOf, primaryOf, RELAY_PORT, repositoryPath, CHECKOUT_DIR, lifecycleWorkdir, buildEnvironment, writeBuildMavenSettings, checkEnvironment, AGENT_CREDENTIAL_MISSING, mavenSettingsXml, namesGlobalSettings, MAVEN_NO_PROXY_NOTE, mavenArgs, MAVEN_SPACE_NOTE, writeMavenSettings, checkoutPath, JOB_MOUNT, realFdStorePort } from './chunk-SDAEXUIX.js';
26
26
  import { RELAY_USER, RELAY_ID, UNKNOWN_TRANSPORT_REASON, DOCKER_DESKTOP_REASON, MAX_MALFORMED_SESSIONS, MALFORMED_REASON, JOIN_WAIT_MS, MAX_OPEN_STREAMS, STREAM_RESET_RATE, STREAM_RESET_BURST, STREAM_WINDOW, SESSION_WINDOW, targetOfPath } from './chunk-MESOOLF4.js';
27
27
  import { spawn, spawnSync } from 'child_process';
28
28
  import { mkdirSync, existsSync, readFileSync, mkdtempSync, rmSync, chmodSync, truncateSync, statSync, accessSync, constants, readdirSync, writeFileSync, lstatSync, copyFileSync, renameSync, rmdirSync, unlinkSync, linkSync, openSync, closeSync, cpSync, writeSync, appendFileSync, createWriteStream, createReadStream } from 'fs';
@@ -74,6 +74,71 @@ function managedClaudeKeyValues() {
74
74
  function hasClaudeCredential(config, hostEnv, jobDir) {
75
75
  return config.managed === true ? managedClaudeKeyFor(jobDir) !== void 0 : claudeCredential(hostEnv) !== void 0;
76
76
  }
77
+
78
+ // src/runner/managed-build-settings.ts
79
+ var FETCH_RETRY_WINDOW_MS2 = 3e4;
80
+ var GIB = 1024 ** 3;
81
+ var GB = 1e9;
82
+ var VARIABLE_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,254}$/;
83
+ var MALFORMED = "the gateway's answer was not a machine, a list of hosts and a list of variables";
84
+ function parseSettings(data) {
85
+ const isPositive = (value) => typeof value === "number" && Number.isFinite(value) && value > 0;
86
+ if (typeof data !== "object" || data === null) return { problem: MALFORMED };
87
+ const { machine, allowHosts, variables } = data;
88
+ if (typeof machine !== "object" || machine === null) return { problem: MALFORMED };
89
+ const { size, vcpus, memoryGiB, diskGB } = machine;
90
+ if (size !== "small" && size !== "large" || !isPositive(vcpus) || !isPositive(memoryGiB) || !isPositive(diskGB)) return { problem: MALFORMED };
91
+ if (!Array.isArray(allowHosts) || !allowHosts.every((host) => typeof host === "string")) return { problem: MALFORMED };
92
+ if (!Array.isArray(variables)) return { problem: MALFORMED };
93
+ for (const host of allowHosts) {
94
+ const problem = allowHostProblem(host);
95
+ if (problem !== void 0) return { problem: `the factory's allowed host ${JSON.stringify(host)} ${problem}` };
96
+ }
97
+ const parsed = [];
98
+ for (const entry of variables) {
99
+ if (typeof entry !== "object" || entry === null) return { problem: MALFORMED };
100
+ const { name, value } = entry;
101
+ if (typeof name !== "string" || name === "" || typeof value !== "string") return { problem: MALFORMED };
102
+ if (!VARIABLE_NAME.test(name)) return { problem: `the factory's build variable ${JSON.stringify(name)} is not a variable name` };
103
+ if (value.trim().length < MIN_SCRUBBED_LITERAL) {
104
+ return { problem: `the value of the factory's build variable ${name} has fewer than ${MIN_SCRUBBED_LITERAL} characters, so the runner could not remove it from logs and transcripts` };
105
+ }
106
+ parsed.push({ name, value });
107
+ }
108
+ return { settings: { machine: { size, vcpus, memoryGiB, diskGB }, allowHosts: [...allowHosts], variables: parsed } };
109
+ }
110
+ async function fetchManagedBuildSettings(config, item, deps = {}) {
111
+ const fetchImpl = deps.fetchImpl ?? fetch;
112
+ const outcome = await retrySend(
113
+ async () => postJson(config.url, `/v1/work-items/${item}/claim/build-settings`, config.apiKey, config.appId, {}, fetchImpl, void 0, await signerFor(config.configPath)),
114
+ { now: deps.now, sleep: deps.sleep, windowMs: deps.windowMs ?? FETCH_RETRY_WINDOW_MS2 }
115
+ );
116
+ if (!outcome.ok) return { ok: false, code: outcome.code, reason: outcome.message ?? outcome.reason, retryable: outcome.retryable };
117
+ const parsed = parseSettings(outcome.value.data);
118
+ if ("problem" in parsed) return { ok: false, code: "malformed_settings_response", reason: parsed.problem, retryable: false };
119
+ return { ok: true, settings: parsed.settings };
120
+ }
121
+ var held2 = /* @__PURE__ */ new Map();
122
+ function holdManagedBuildSettings(jobDir, settings) {
123
+ held2.set(jobDir, settings);
124
+ }
125
+ function managedBuildSettingsFor(jobDir) {
126
+ return held2.get(jobDir);
127
+ }
128
+ function dropManagedBuildSettings(jobDir) {
129
+ held2.delete(jobDir);
130
+ }
131
+ function managedBuildSettingValues() {
132
+ return [...new Set([...held2.values()].flatMap((settings) => settings.variables.map(({ value }) => value)))];
133
+ }
134
+ function managedMachineLimits(settings) {
135
+ const { vcpus, memoryGiB, diskGB } = settings.machine;
136
+ return { cpus: vcpus, memoryBytes: Math.round(memoryGiB * GIB), diskBytes: Math.round(diskGB * GB) };
137
+ }
138
+ function withFactoryHosts(runnerHosts, settings) {
139
+ if (settings === void 0) return runnerHosts;
140
+ return [.../* @__PURE__ */ new Set([...runnerHosts ?? [], ...settings.allowHosts])];
141
+ }
77
142
  var AssetError = class extends Error {
78
143
  constructor(file, message) {
79
144
  super(message);
@@ -2505,8 +2570,8 @@ function claudeCredentialCheck(env, options = {}) {
2505
2570
  }
2506
2571
  return { name, status: "pass", detail: `${variables[0]} is set in the claude.env or runner.env of the service ${unit}` };
2507
2572
  }
2508
- const held2 = claudeCredential(env, { ignoreHeld: options.ignoreHeld === true });
2509
- if (held2 === void 0) {
2573
+ const held3 = claudeCredential(env, { ignoreHeld: options.ignoreHeld === true });
2574
+ if (held3 === void 0) {
2510
2575
  return {
2511
2576
  name,
2512
2577
  status: "fail",
@@ -2515,7 +2580,7 @@ function claudeCredentialCheck(env, options = {}) {
2515
2580
  };
2516
2581
  }
2517
2582
  const sameVariables = options.shell === true ? "; the runner must be started with the same variable" : "";
2518
- return { name, status: "pass", detail: `${held2.variable} is set${sameVariables}` };
2583
+ return { name, status: "pass", detail: `${held3.variable} is set${sameVariables}` };
2519
2584
  }
2520
2585
  function missingPermissionOf(err) {
2521
2586
  if (!(err instanceof WorkCommandError) || err.status !== 403) return void 0;
@@ -2813,10 +2878,10 @@ async function runBuildSteps(input) {
2813
2878
  if (staged.kind === "refused") return { ok: false, reason: staged.reason };
2814
2879
  let controlPlane;
2815
2880
  if (input.requireBuildSkill === true && !(staged.kind === "staged" && stagedHasBuildSkill(staged))) {
2816
- const held2 = await checkoutHasBuildSkill(input);
2817
- if (held2 !== true) {
2881
+ const held3 = await checkoutHasBuildSkill(input);
2882
+ if (held3 !== true) {
2818
2883
  if (staged.kind === "staged") input.removeStagedContext();
2819
- if (held2 !== false) return { ok: false, reason: held2.failed };
2884
+ if (held3 !== false) return { ok: false, reason: held3.failed };
2820
2885
  return { ok: false, reason: missingBuildSkillReason(staged.kind === "staged" ? { repository: staged.repository, commit: staged.sha } : void 0) };
2821
2886
  }
2822
2887
  }
@@ -3680,17 +3745,17 @@ async function drain(req) {
3680
3745
  }
3681
3746
  function readPrefix(req, gzip) {
3682
3747
  return new Promise((resolve2, reject) => {
3683
- const held2 = [];
3748
+ const held3 = [];
3684
3749
  const finish = (section) => {
3685
3750
  req.off("data", onData);
3686
3751
  req.off("end", onEnd);
3687
3752
  req.off("error", reject);
3688
3753
  req.pause();
3689
- resolve2({ held: held2, section });
3754
+ resolve2({ held: held3, section });
3690
3755
  };
3691
3756
  const onData = (chunk) => {
3692
- held2.push(chunk);
3693
- const section = readCommandSection(Buffer.concat(held2), gzip);
3757
+ held3.push(chunk);
3758
+ const section = readCommandSection(Buffer.concat(held3), gzip);
3694
3759
  if (section.kind !== "need-more") finish(section);
3695
3760
  };
3696
3761
  const onEnd = () => finish({ kind: "need-more" });
@@ -3778,7 +3843,7 @@ function createGitRemote(options) {
3778
3843
  async function push(req, res, route, target) {
3779
3844
  const encoding = req.headers["content-encoding"];
3780
3845
  const gzip = encoding === "gzip";
3781
- const { held: held2, section } = await readPrefix(req, gzip);
3846
+ const { held: held3, section } = await readPrefix(req, gzip);
3782
3847
  const refuse = async (reason) => {
3783
3848
  log(`push refused: ${reason}`);
3784
3849
  await drain(req);
@@ -3808,7 +3873,7 @@ function createGitRemote(options) {
3808
3873
  const file = createWriteStream(bodyPath);
3809
3874
  const cap = options.maxPushBytes ?? 2 * 1024 ** 3;
3810
3875
  let size = 0;
3811
- for (const chunk of held2) {
3876
+ for (const chunk of held3) {
3812
3877
  size += chunk.length;
3813
3878
  file.write(chunk);
3814
3879
  }
@@ -3854,7 +3919,7 @@ function createGitRemote(options) {
3854
3919
  createReadStream(spooled).pipe(upstream);
3855
3920
  return;
3856
3921
  }
3857
- for (const chunk of held2) upstream.write(chunk);
3922
+ for (const chunk of held3) upstream.write(chunk);
3858
3923
  req.pipe(upstream);
3859
3924
  }
3860
3925
  });
@@ -3965,27 +4030,27 @@ function usableCpus(deps = {}) {
3965
4030
  }
3966
4031
  function createCpuAllocator(cores) {
3967
4032
  const usable = [...new Set(cores)].sort((a, b) => a - b);
3968
- const held2 = /* @__PURE__ */ new Map();
4033
+ const held3 = /* @__PURE__ */ new Map();
3969
4034
  const holders = (core) => {
3970
4035
  let count = 0;
3971
- for (const set of held2.values()) if (set.includes(core)) count++;
4036
+ for (const set of held3.values()) if (set.includes(core)) count++;
3972
4037
  return count;
3973
4038
  };
3974
4039
  return {
3975
4040
  acquire(buildId, cpus) {
3976
- const existing = held2.get(buildId);
4041
+ const existing = held3.get(buildId);
3977
4042
  if (existing !== void 0) return existing;
3978
4043
  const wanted = Math.min(Math.ceil(cpus), usable.length);
3979
4044
  const ranked = usable.map((core) => ({ core, count: holders(core) })).sort((a, b) => a.count - b.count);
3980
4045
  const chosen = ranked.slice(0, wanted).map(({ core }) => core).sort((a, b) => a - b);
3981
- held2.set(buildId, chosen);
4046
+ held3.set(buildId, chosen);
3982
4047
  return chosen;
3983
4048
  },
3984
4049
  hold(buildId, set) {
3985
- held2.set(buildId, [...set]);
4050
+ held3.set(buildId, [...set]);
3986
4051
  },
3987
4052
  release(buildId) {
3988
- held2.delete(buildId);
4053
+ held3.delete(buildId);
3989
4054
  }
3990
4055
  };
3991
4056
  }
@@ -4580,14 +4645,15 @@ async function measureDisk(runtime, state) {
4580
4645
  clearTimeout(timer);
4581
4646
  }
4582
4647
  }
4583
- async function startServicesFor(runtime, config, buildDir2, jobDir, itemKey, builtIns, gitRemote, serve = "socket", lease, inherit, routeLog) {
4648
+ async function startServicesFor(runtime, config, buildDir2, jobDir, itemKey, builtIns, gitRemote, serve = "socket", lease, inherit, routeLog, settingsDir) {
4584
4649
  return startBuildServices({
4585
4650
  startTunnel: runtime.startTunnel,
4586
4651
  tunnelOptions: { ...runtime.tunnelOptions, ...gitRemote === void 0 ? {} : { gitRemote } },
4587
4652
  buildDir: buildDir2,
4588
4653
  jobDir,
4589
4654
  destinations: config.build?.destinations ?? [],
4590
- allowHosts: config.build?.allowHosts,
4655
+ // A managed build's tunnel allows the factory's hosts beside the runner's own.
4656
+ allowHosts: withFactoryHosts(config.build?.allowHosts, managedBuildSettingsFor(settingsDir ?? jobDir)),
4591
4657
  serve,
4592
4658
  ...lease === void 0 ? {} : { lease },
4593
4659
  ...inherit === void 0 ? {} : { inherit },
@@ -5016,4 +5082,4 @@ function describeMachineDocker(machine) {
5016
5082
  return `Docker Engine ${version ?? "of no known version"}, older than the ${MIN_ENGINE_MAJOR} that container builds need`;
5017
5083
  }
5018
5084
 
5019
- export { ADDED_USER, ADOPTED_FETCH_RETRY_WINDOW_MS, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HELPER_ENV, LEASE_SECONDS, MANAGED_UNJAILED_REASON, MIN_ENGINE_MAJOR, PLACEHOLDER_MARKER, ROOT_DISK_ID_PREFIX, RunnerInitError, attemptNote, claimPermissionProblem, claudeCredentialCheck, cleanupContainer, closeHostBuild, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, createLeaseChannel, currentSkillCommand, decideHostBuildSkill, deleteBuildDisk, deliverContainerHooks, deliverExecMaven, describeMachineDocker, detectMachine, dropManagedClaudeKey, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, execArgv, execCommandLine, fetchManagedClaudeKey, filesAreCopied, formerSkillProblem, formerSkillQueues, ghHostsYml, gitRemoteFor, hasClaudeCredential, helperFirecrackerNote, helperSocketPath, holdManagedClaudeKey, hostCommandEnvironment, hostEnvironment, isPlaceholderCommand, keepGhConfigCurrent, leaseExpiresAtMs, leaseTimeLeftMs, lifecycleFailureReason, lifecycleSteps, listenOnBroker, machineConfig, makeBuildsDirPrivate, managedClaudeKeyFor, managedClaudeKeyValues, measureDisk, microVmArchSupported, microVmAssetsPinned, missingPermissionFix, missingPermissionOf, needsBuildSkill, needsClaudeCredential, obtainImage, outOfMemoryReason, parseCpuList, permissionModeProblem, permissionModeProblems, placeholderProblem, placeholderQueues, prepareBranch, prepareRunnerInit, probeHelper, provisionContainer, provisionEnvironment, reachDockerStep, readConfigObject, resolveAgentUser, resolveHostBuild, runBuildSteps, runRunnerInit, runWithSpawn, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startHostServices, startJailedInto, startServicesFor, stopContainer, stopJailed, supportsContainerBuilds, supportsMicroVmBuilds, sweepImageBuilders, syncInContainer, withTunnelLog, writeEvalInput, writeRunnerInit };
5085
+ export { ADDED_USER, ADOPTED_FETCH_RETRY_WINDOW_MS, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HELPER_ENV, LEASE_SECONDS, MANAGED_UNJAILED_REASON, MIN_ENGINE_MAJOR, PLACEHOLDER_MARKER, ROOT_DISK_ID_PREFIX, RunnerInitError, attemptNote, claimPermissionProblem, claudeCredentialCheck, cleanupContainer, closeHostBuild, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, createLeaseChannel, currentSkillCommand, decideHostBuildSkill, deleteBuildDisk, deliverContainerHooks, deliverExecMaven, describeMachineDocker, detectMachine, dropManagedBuildSettings, dropManagedClaudeKey, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, execArgv, execCommandLine, fetchManagedBuildSettings, fetchManagedClaudeKey, filesAreCopied, formerSkillProblem, formerSkillQueues, ghHostsYml, gitRemoteFor, hasClaudeCredential, helperFirecrackerNote, helperSocketPath, holdManagedBuildSettings, holdManagedClaudeKey, hostCommandEnvironment, hostEnvironment, isPlaceholderCommand, keepGhConfigCurrent, leaseExpiresAtMs, leaseTimeLeftMs, lifecycleFailureReason, lifecycleSteps, listenOnBroker, machineConfig, makeBuildsDirPrivate, managedBuildSettingValues, managedBuildSettingsFor, managedClaudeKeyFor, managedClaudeKeyValues, managedMachineLimits, measureDisk, microVmArchSupported, microVmAssetsPinned, missingPermissionFix, missingPermissionOf, needsBuildSkill, needsClaudeCredential, obtainImage, outOfMemoryReason, parseCpuList, permissionModeProblem, permissionModeProblems, placeholderProblem, placeholderQueues, prepareBranch, prepareRunnerInit, probeHelper, provisionContainer, provisionEnvironment, reachDockerStep, readConfigObject, resolveAgentUser, resolveHostBuild, runBuildSteps, runRunnerInit, runWithSpawn, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startHostServices, startJailedInto, startServicesFor, stopContainer, stopJailed, supportsContainerBuilds, supportsMicroVmBuilds, sweepImageBuilders, syncInContainer, withFactoryHosts, withTunnelLog, writeEvalInput, writeRunnerInit };
@@ -1,31 +1,31 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { reportFailedStart, fitImageBuildMemory } from './chunk-CY5TCVBS.js';
4
- import { writePendingUpdate } from './chunk-TFPNPS4Q.js';
5
- import { renderUpdateSteps } from './chunk-KRTD2F3I.js';
6
- 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-AE3OTPUU.js';
3
+ import { reportFailedStart, fitImageBuildMemory } from './chunk-U6AWVO6L.js';
4
+ import { writePendingUpdate } from './chunk-HOUFCUMH.js';
5
+ import { renderUpdateSteps } from './chunk-VWZHOFBP.js';
6
+ 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-4G4IH4A7.js';
7
7
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
8
- import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-FDJPDZSR.js';
8
+ import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-TS3EFB7S.js';
9
9
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
10
10
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-E7R2GIAW.js';
11
- import { RUNNER_PROTOCOL } from './chunk-PAK5P2ND.js';
12
- import { realBlockedProbes, checkBlockedWithSlots } from './chunk-ZP7GKJSM.js';
13
- import { writeMarker, readMarker, currentVersion, removeMarker, isInLayout, startedThroughCurrent, entryIn, versionDir, switchCurrent, cleanVersions, stagingDir } from './chunk-UMYYYF7B.js';
11
+ import { RUNNER_PROTOCOL } from './chunk-MH6QLXUO.js';
12
+ import { realBlockedProbes, checkBlockedWithSlots, largeBuildMemoryBytes, LARGE_BUILD_DISK_BYTES, checkManagedRoom, sliceMemoryOf } from './chunk-JC6AQ6PC.js';
13
+ import { writeMarker, readMarker, currentVersion, removeMarker, isInLayout, startedThroughCurrent, entryIn, versionDir, switchCurrent, cleanVersions, stagingDir } from './chunk-YL3RWW7X.js';
14
14
  import { RepoFilter } from './chunk-TBT347UY.js';
15
- import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, attemptNote, fetchManagedClaudeKey, holdManagedClaudeKey, 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, ADOPTED_FETCH_RETRY_WINDOW_MS, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-7P3H4RY2.js';
16
- import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, resolveGoverningSource, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-PP6OX4OT.js';
17
- import { imageTag, writeUpdateStatus, pullInstruction, tagToPull } from './chunk-SYVRBBLW.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-CNZRUVZ5.js';
16
+ import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, resolveGoverningSource, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-EPFFYDNX.js';
17
+ import { imageTag, writeUpdateStatus, pullInstruction, tagToPull } from './chunk-SDELQEG4.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-3EHDZTRT.js';
20
- import { freeBytes, formatBytes, volumeBytes } from './chunk-UONH72CJ.js';
21
- import { writeJobFile, ensureRunnerIdentity, identityDockerFor, readJobFile, exceedsDisk, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, RUNNER_LABEL, BUILD_LABEL, readJobFileChecked } from './chunk-M3ME6TLQ.js';
22
- import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-YNMVVQOQ.js';
19
+ import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, keepsHostBuilder, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-ZIKZZ4LK.js';
20
+ import { freeBytes, formatBytes, allocatedBytes, volumeBytes } from './chunk-IWVGALDC.js';
21
+ import { writeJobFile, ensureRunnerIdentity, identityDockerFor, readJobFile, exceedsDisk, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, RUNNER_LABEL, BUILD_LABEL, readJobFileChecked } from './chunk-HVQMIZ22.js';
22
+ import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-LQHCNXPK.js';
23
23
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
24
- import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-6JZXIWX7.js';
25
- import { loadHostKey, ensureHostKey, signerFor } from './chunk-MOI2KDLH.js';
24
+ import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-JKNOJKVD.js';
25
+ import { loadHostKey, ensureHostKey, signerFor } from './chunk-L5VHGRQE.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-PXGU3GKY.js';
28
- import { parseClaimIdentity, parseClaimedRepositories, parseUnreachable, repositoriesOf, primaryOf, sharedUserEnvironment, JOB_MOUNT, takeClaudeCredential, heldClaudeCredential, currentClaudeCredential, fdName } from './chunk-G4W4B33M.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';
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';
@@ -1289,12 +1289,12 @@ async function sendTickHeartbeat(state, workRequest) {
1289
1289
  workRequest: next,
1290
1290
  lastUpdate: readLastUpdate(state.config.configPath),
1291
1291
  lowDisk: state.lowDisk,
1292
- blocked: state.blocked,
1292
+ blocked: state.blocked ?? state.noRoomEmpty,
1293
1293
  state: hostState({
1294
1294
  draining: state.draining === true,
1295
1295
  restarting: state.restarting === true,
1296
1296
  holdingForUpdate: state.holdingForUpdate === true,
1297
- blocked: state.blocked !== void 0,
1297
+ blocked: (state.blocked ?? state.noRoomEmpty) !== void 0,
1298
1298
  lowDisk: state.lowDisk !== void 0
1299
1299
  }),
1300
1300
  // Left out unless a draining runner has builds to wait on, so the gateway stores null.
@@ -1481,6 +1481,44 @@ function clearUpdateWait(state) {
1481
1481
  state.waitsLogged = void 0;
1482
1482
  recordPendingUpdate(state, void 0);
1483
1483
  }
1484
+ function holdWithoutRoomForLarge(state) {
1485
+ if (state.config.managed !== true) return false;
1486
+ const probes = {
1487
+ ...realBlockedProbes(),
1488
+ ...state.deps.container?.hostEnv === void 0 ? {} : { env: state.deps.container.hostEnv },
1489
+ ...state.deps.blocked
1490
+ };
1491
+ let runningMemoryBytes = 0;
1492
+ let runningDiskBytes = 0;
1493
+ let heldDiskBytes = 0;
1494
+ for (const active of state.jobs.values()) {
1495
+ const microvm = active.job?.microvm;
1496
+ runningMemoryBytes += microvm?.limits?.memoryBytes ?? largeBuildMemoryBytes();
1497
+ runningDiskBytes += microvm?.limits?.diskBytes ?? LARGE_BUILD_DISK_BYTES;
1498
+ if (microvm?.buildDisk !== void 0) heldDiskBytes += (state.deps.allocatedBytes ?? allocatedBytes)(microvm.buildDisk);
1499
+ }
1500
+ const room = checkManagedRoom({
1501
+ runningMemoryBytes,
1502
+ totalMemoryBytes: probes.totalMemoryBytes(),
1503
+ sliceBytes: sliceMemoryOf(probes.env),
1504
+ freeDiskBytes: (state.deps.freeBytes ?? freeBytes)(runnerDir(state.config.configPath)),
1505
+ heldDiskBytes,
1506
+ runningDiskBytes
1507
+ });
1508
+ const log = logOf(state);
1509
+ if (!room.fits) {
1510
+ if (state.noRoom !== room.resource) log.line(`holding off new work: ${room.reason} \xB7 claiming again once a build ends`);
1511
+ state.noRoom = room.resource;
1512
+ state.noRoomEmpty = state.jobs.size === 0 ? { reason: `no room for one Large build: ${room.reason}` } : void 0;
1513
+ return true;
1514
+ }
1515
+ state.noRoomEmpty = void 0;
1516
+ if (state.noRoom !== void 0) {
1517
+ state.noRoom = void 0;
1518
+ log.line("a Large build fits again \xB7 taking work");
1519
+ }
1520
+ return false;
1521
+ }
1484
1522
  function recordPendingUpdate(state, record) {
1485
1523
  const text = record === void 0 ? "none" : JSON.stringify(record);
1486
1524
  if (state.updateRecord === text) return;
@@ -1863,6 +1901,7 @@ async function runTick(state) {
1863
1901
  const jailer = state.config.managed === true && state.deps.blocked?.jailer === void 0 ? await jailerState(state) : void 0;
1864
1902
  if (holdWhenBlocked(state, jailer)) return;
1865
1903
  if (holdOffForDisk(state)) return;
1904
+ if (holdWithoutRoomForLarge(state)) return;
1866
1905
  const log = logOf(state);
1867
1906
  const repoFilter = new RepoFilter(state.config.repos);
1868
1907
  let filtered = 0;
@@ -1892,6 +1931,7 @@ async function runTick(state) {
1892
1931
  filtered++;
1893
1932
  continue;
1894
1933
  }
1934
+ if (holdWithoutRoomForLarge(state)) return;
1895
1935
  const attempt = await tryClaimAndStart(state, item, queue);
1896
1936
  if (attempt.kind === "started") {
1897
1937
  claimed = true;
@@ -1921,7 +1961,7 @@ var CLAIM_REFUSAL_CODES = new Set(
1921
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(" ")
1922
1962
  );
1923
1963
  async function tryClaimAndStart(state, item, queue) {
1924
- const { postJson: postJson2 } = await import('./work-cmd-KVFRK24I.js');
1964
+ const { postJson: postJson2 } = await import('./work-cmd-V5FHLWJM.js');
1925
1965
  const log = logOf(state);
1926
1966
  const hostKey = await loadHostKey(state.config.configPath);
1927
1967
  const claim = await retrySend(
@@ -2145,10 +2185,18 @@ async function startJob(state, item, queue, claimId, itemKey, branch, identity,
2145
2185
  const fetched = await fetchManagedClaudeKey(state.config, item.number, { fetchImpl: state.deps.fetchImpl, now: state.deps.now, sleep: state.deps.sleep });
2146
2186
  if (active.ending) return;
2147
2187
  if (!fetched.ok) {
2148
- await endOnManagedKeyRefusal(state, active, fetched);
2188
+ await endOnManagedRefusal(state, active, fetched, { what: "Anthropic key", was: "was" });
2149
2189
  return;
2150
2190
  }
2151
2191
  holdManagedClaudeKey(dirPath, fetched.apiKey);
2192
+ const settings = await fetchManagedBuildSettings(state.config, item.number, { fetchImpl: state.deps.fetchImpl, now: state.deps.now, sleep: state.deps.sleep });
2193
+ if (active.ending) return;
2194
+ if (!settings.ok) {
2195
+ await endOnManagedRefusal(state, active, settings, { what: "settings", was: "were" });
2196
+ return;
2197
+ }
2198
+ holdManagedBuildSettings(dirPath, settings.settings);
2199
+ active.job.managedVariables = settings.settings.variables.map(({ name }) => name);
2152
2200
  }
2153
2201
  }
2154
2202
  if (state.config.hooks.report) {
@@ -2476,9 +2524,9 @@ async function startJob(state, item, queue, claimId, itemKey, branch, identity,
2476
2524
  job.microvm.commandDir = MICROVM_COMMAND_DIR;
2477
2525
  job.microvm.commandLogBase = commandLogOffset(dirPath, 0);
2478
2526
  writeJobFile(jobFilePath, job);
2479
- await startMicroVmCommand({ job, cmdline, runtime, config: state.config });
2527
+ await startMicroVmCommand({ job, jobDir: dirPath, cmdline, runtime, config: state.config });
2480
2528
  } else {
2481
- const composed = microVmCommandLine({ job, cmdline, runtime, config: state.config, cli: join(runtime.cliBuild().distDir, "index.js") });
2529
+ const composed = microVmCommandLine({ job, jobDir: dirPath, cmdline, runtime, config: state.config, cli: join(runtime.cliBuild().distDir, "index.js") });
2482
2530
  running = runCommand(composed.line, { ...composed.env, OUTERLAYER_JOB_DIR: dirPath }, dirPath, join(dirPath, "command.log"), state.deps.spawnFn);
2483
2531
  }
2484
2532
  } else if (job.container !== void 0) {
@@ -2562,18 +2610,18 @@ function buildTokensFor(state, active, item) {
2562
2610
  }
2563
2611
  });
2564
2612
  }
2565
- async function endOnManagedKeyRefusal(state, active, refused) {
2613
+ async function endOnManagedRefusal(state, active, refused, subject) {
2566
2614
  const log = logOf(state);
2567
2615
  const tag = `#${active.job.item}`;
2568
2616
  const code = refused.code ?? "unavailable";
2569
2617
  if (refused.code === "claim_expired" || refused.code === "claim_not_held") {
2570
- log.error(`${tag} the build's Anthropic key was refused: ${code} \xB7 ending job as lease_lost`);
2618
+ log.error(`${tag} the build's ${subject.what} ${subject.was} refused: ${code} \xB7 ending job as lease_lost`);
2571
2619
  await endJob(state, active, "lease_lost");
2572
2620
  } else if (refused.retryable || refused.code === "managed_credential_missing" || refused.code === "managed_builds_off") {
2573
- log.error(`${tag} the build's Anthropic key could not be had (${code}) \xB7 releasing the claim to try again`);
2621
+ log.error(`${tag} the build's ${subject.what} could not be had (${code}) \xB7 releasing the claim to try again`);
2574
2622
  await endJob(state, active, void 0);
2575
2623
  } else {
2576
- log.error(`${tag} the build's Anthropic key was refused: ${code} \xB7 ending job as failed`);
2624
+ log.error(`${tag} the build's ${subject.what} ${subject.was} refused: ${code} \xB7 ending job as failed`);
2577
2625
  await endJob(state, active, "failed", { stage: "provision", reason: code });
2578
2626
  }
2579
2627
  }
@@ -3022,6 +3070,21 @@ async function rejoinMicroVmBuild(state, adopted) {
3022
3070
  return { reason: `the adopted build's Anthropic key could not be had after the runner restarted: ${cause}`, why: "the gateway did not give its Anthropic key again" };
3023
3071
  }
3024
3072
  holdManagedClaudeKey(dirPath, fetched.apiKey);
3073
+ const settings = await fetchManagedBuildSettings(config, job.item, {
3074
+ fetchImpl: state.deps.fetchImpl,
3075
+ now: state.deps.now,
3076
+ sleep: state.deps.sleep,
3077
+ windowMs: ADOPTED_FETCH_RETRY_WINDOW_MS
3078
+ });
3079
+ if (!settings.ok) {
3080
+ const code = settings.code ?? "unavailable";
3081
+ log.error(`${tag} the adopted build's settings could not be had: ${code}`);
3082
+ const cause = settings.retryable ? "the gateway could not be reached for them" : `the gateway refused them (${code})`;
3083
+ return { reason: `the adopted build's settings could not be had after the runner restarted: ${cause}`, why: "the gateway did not give its settings again" };
3084
+ }
3085
+ holdManagedBuildSettings(dirPath, settings.settings);
3086
+ job.managedVariables = [.../* @__PURE__ */ new Set([...job.managedVariables ?? [], ...settings.settings.variables.map(({ name }) => name)])];
3087
+ writeJobFile(join(dirPath, "job.json"), job);
3025
3088
  }
3026
3089
  const tokens = buildTokensFor(state, adopted, job.item);
3027
3090
  runtime.credentials.set(dirPath, tokens);
@@ -3099,6 +3162,11 @@ async function removeUnadoptedSockets(state, adopted) {
3099
3162
  }
3100
3163
  async function finishMicroVmWhileAway(state, dirPath, job, reason, why) {
3101
3164
  const log = logOf(state);
3165
+ if ((job.managedVariables?.length ?? 0) > 0 && managedBuildSettingsFor(dirPath) === void 0) {
3166
+ const settings = await fetchManagedBuildSettings(state.config, job.item, { fetchImpl: state.deps.fetchImpl, now: state.deps.now, sleep: state.deps.sleep });
3167
+ if (settings.ok) holdManagedBuildSettings(dirPath, settings.settings);
3168
+ else log.error(`#${job.item} the build's settings could not be had again: ${settings.code ?? "unavailable"}`);
3169
+ }
3102
3170
  const recorded = outcomeFromExitCode(dirPath);
3103
3171
  let outcome = "interrupted";
3104
3172
  let ending = { reason };
@@ -3211,7 +3279,7 @@ async function startRunner(configPath, deps, startup) {
3211
3279
  check: update.check ? () => update.check(configPath) : async () => {
3212
3280
  const held = heldClaudeCredential();
3213
3281
  const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
3214
- return (await import('./check-4W4QUBMP.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3282
+ return (await import('./check-ERYYVAEM.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3215
3283
  },
3216
3284
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
3217
3285
  log
@@ -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-QEIA5Q35.js';
4
+ import { runEmitArtifact } from './chunk-XL2MPORM.js';
5
5
  import { VoiceDownloadError, downloadPinned, sha256OfFile } from './chunk-2PGI6RDE.js';
6
6
  import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-4UPET3R7.js';
7
7
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
8
- import { autoConnect } from './chunk-7DXVL7TN.js';
8
+ import { autoConnect } from './chunk-IO2BBKG4.js';
9
9
  import { C } from './chunk-ANPNT6PM.js';
10
- import { defaultFetch, resolveGatewayCredentials } from './chunk-3N77LUQI.js';
11
- import { resolveRepoIdentity } from './chunk-GSSVJNP2.js';
10
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
11
+ import { resolveRepoIdentity } from './chunk-Z7WMU3RA.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, DemoManifestSchema, ARTIFACT_KINDS } from './chunk-EOTMDIYC.js';
14
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { WorkCommandError, postJson } from './chunk-6JZXIWX7.js';
4
- import { defaultGitRunner, materializeContext, fetchControlPlaneCommit, lookupGoverningSource } from './chunk-CAQCDYKF.js';
5
- import { signingFetchFor } from './chunk-3N77LUQI.js';
6
- import { signerFor } from './chunk-MOI2KDLH.js';
3
+ import { WorkCommandError, postJson } from './chunk-JKNOJKVD.js';
4
+ import { defaultGitRunner, materializeContext, fetchControlPlaneCommit, lookupGoverningSource } from './chunk-5JGPTYLT.js';
5
+ import { signingFetchFor } from './chunk-7QAJQDHS.js';
6
+ import { signerFor } from './chunk-L5VHGRQE.js';
7
7
  import { unsupportedLayout, layoutRefusalReason, composeDelivery } from './chunk-FGF52V4V.js';
8
8
  import { SHIM_SCRIPT, GOVERNANCE_VARIABLE } from './chunk-HCVLP7XA.js';
9
9
  import { readDegraded, readContextManifest, readSourceCache } from './chunk-YQR6E6OV.js';
10
- import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-PXGU3GKY.js';
10
+ import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-GJ4KBHBD.js';
11
11
  import { fstatSync, mkdirSync, writeFileSync, chmodSync, rmSync, cpSync, readFileSync, existsSync, lstatSync } from 'fs';
12
12
  import { relative, join, dirname } from 'path';
13
13
 
@@ -3,10 +3,10 @@ import { createRequire } from 'node:module';
3
3
  import { DEFAULT_DASHBOARD } from './chunk-Y5YCX6AL.js';
4
4
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
5
5
  import { isAgentsMdLayout } from './chunk-NKOM4JKY.js';
6
- import { cliFetch, resolveGatewayCredentials } from './chunk-3N77LUQI.js';
6
+ import { cliFetch, resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
7
7
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
8
8
  import { findGitDirs, writeRepoConnection, readRepoConnection } from './chunk-BJ3KTMDH.js';
9
- import { remoteLookupFailed } from './chunk-GSSVJNP2.js';
9
+ import { remoteLookupFailed } from './chunk-Z7WMU3RA.js';
10
10
  import { cliInvocation } from './chunk-CRB3POP4.js';
11
11
  import { execFileSync } from 'child_process';
12
12
  import { lstatSync } from 'fs';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { WorkCommandError, resolveCredentials, getJson } from './chunk-6JZXIWX7.js';
3
+ import { WorkCommandError, resolveCredentials, getJson } from './chunk-JKNOJKVD.js';
4
4
  import { C } from './chunk-ANPNT6PM.js';
5
5
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
6
- import { defaultFetch } from './chunk-3N77LUQI.js';
7
- import { resolveRepoIdentity } from './chunk-GSSVJNP2.js';
6
+ import { defaultFetch } from './chunk-7QAJQDHS.js';
7
+ import { resolveRepoIdentity } from './chunk-Z7WMU3RA.js';
8
8
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
9
9
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
10
10
  import { inferArtifactKind, mediaTypeForArtifactPath, WORK_ITEM_COMMENT_MAX_BODY_LENGTH } from './chunk-EOTMDIYC.js';
@@ -130,7 +130,7 @@ async function runWorkProofs(opts) {
130
130
  async function runWorkProofsCommand(opts) {
131
131
  try {
132
132
  if (opts.record) {
133
- const { runWorkProofsRecord } = await import('./work-proofs-record-XANZE3K4.js');
133
+ const { runWorkProofsRecord } = await import('./work-proofs-record-NK3ULOUQ.js');
134
134
  const result2 = await runWorkProofsRecord(opts);
135
135
  process.exitCode = result2.exitCode;
136
136
  return;