@outerlayer/cli 0.34.0-next.20261028122415 → 0.34.0-next.20261028152714

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 (116) hide show
  1. package/dist/{agent-setup-LZ7PEM6A.js → agent-setup-MO7DHLV4.js} +10 -10
  2. package/dist/{artifact-link-cmd-4XQJO55P.js → artifact-link-cmd-CSVFEM5O.js} +2 -2
  3. package/dist/{build-VVZHFSZK.js → build-D5OIIY7B.js} +5 -5
  4. package/dist/{build-disk-QV4TO7HZ.js → build-disk-TEITBQKE.js} +4 -4
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-6JLFMAGJ.js → builder-S42B4STV.js} +3 -3
  7. package/dist/{check-FWRVWOVY.js → check-AMTV6RTN.js} +35 -35
  8. package/dist/{chunk-N6V4ZHI7.js → chunk-26WUFKYZ.js} +4 -4
  9. package/dist/{chunk-XFJ7YOPD.js → chunk-2EEW6FJN.js} +1 -1
  10. package/dist/{chunk-UDMFRKFJ.js → chunk-3PFR2WXH.js} +3 -3
  11. package/dist/{chunk-UKEIJKCH.js → chunk-43BV4MP5.js} +8 -8
  12. package/dist/{chunk-3EU4MWCE.js → chunk-4557WV4R.js} +2 -2
  13. package/dist/{chunk-7LKOOGSN.js → chunk-47SFTQA5.js} +1 -1
  14. package/dist/{chunk-7DHESPSV.js → chunk-4CNUGDNU.js} +12 -12
  15. package/dist/{chunk-U3O7MULV.js → chunk-4L46A2RR.js} +15 -13
  16. package/dist/{chunk-J7EJMIDR.js → chunk-54LIUIZL.js} +2 -2
  17. package/dist/{chunk-H5YUWLIY.js → chunk-6G3BG2GI.js} +3 -3
  18. package/dist/{chunk-AKQX462F.js → chunk-6MLX26T4.js} +3 -3
  19. package/dist/{chunk-ZIXLG6EQ.js → chunk-7XDF7PNF.js} +4 -4
  20. package/dist/{chunk-YGU43DH4.js → chunk-AJZWVXXA.js} +88 -21
  21. package/dist/{chunk-LYCJQOO2.js → chunk-ARL6X6Y4.js} +2 -2
  22. package/dist/{chunk-AXKSVN4U.js → chunk-BEILLR5Q.js} +5 -5
  23. package/dist/{chunk-GJHOU5V3.js → chunk-BRBZKIZG.js} +2 -2
  24. package/dist/{chunk-5VKSPEST.js → chunk-BTA5QOKD.js} +3 -3
  25. package/dist/{chunk-NWHU5G6R.js → chunk-CKDSPW35.js} +1 -1
  26. package/dist/{chunk-C2E4PWEN.js → chunk-FG564H3C.js} +5 -5
  27. package/dist/{chunk-A2KLVZBU.js → chunk-GH2HEEOH.js} +1 -1
  28. package/dist/{chunk-AVI3MGQO.js → chunk-GHQW2BBX.js} +1 -1
  29. package/dist/{chunk-2LCNMAWP.js → chunk-HA46L5FG.js} +1 -1
  30. package/dist/{chunk-OVNF4LLC.js → chunk-HH3BQG65.js} +1 -1
  31. package/dist/{chunk-SX3LYSWR.js → chunk-HUS6X5BJ.js} +2 -2
  32. package/dist/{chunk-7JBG43BX.js → chunk-I4V2YBMA.js} +30 -20
  33. package/dist/{chunk-TZMDRHWB.js → chunk-IAVT7R6O.js} +4 -4
  34. package/dist/{chunk-QXAPVAPR.js → chunk-JDYBPAPP.js} +2 -2
  35. package/dist/{chunk-AGNFPJSP.js → chunk-KY6H5L5O.js} +18 -8
  36. package/dist/{chunk-LEJWPGO7.js → chunk-LBEYOL5K.js} +3 -3
  37. package/dist/{chunk-N4KQMGEZ.js → chunk-NYMDS542.js} +2 -2
  38. package/dist/{chunk-TWFBOZQ5.js → chunk-OKJXZXYH.js} +4 -4
  39. package/dist/{chunk-EXKOPZQV.js → chunk-QELQ6Y4I.js} +6 -6
  40. package/dist/{chunk-OFKM35MX.js → chunk-RIKXE3T5.js} +5 -5
  41. package/dist/{chunk-LMYRR5MO.js → chunk-RPST2GNG.js} +2 -2
  42. package/dist/{chunk-UPA5KOOX.js → chunk-RQ3GCCHH.js} +1 -1
  43. package/dist/{chunk-5B6DLEVM.js → chunk-SH5JFBPO.js} +7 -7
  44. package/dist/{chunk-72N7GOLM.js → chunk-T664NDNT.js} +6 -6
  45. package/dist/{chunk-6CQXOTNL.js → chunk-TVDKDXW6.js} +4 -4
  46. package/dist/{chunk-S37IAT3A.js → chunk-UAINHP2C.js} +1 -1
  47. package/dist/{chunk-BEGMZKMG.js → chunk-UE2C4STC.js} +4 -4
  48. package/dist/{chunk-7XZQTJOD.js → chunk-V64BEF6E.js} +10 -4
  49. package/dist/{chunk-IXPH4EXK.js → chunk-VEVNGDTP.js} +1 -1
  50. package/dist/{chunk-D7MWJM2G.js → chunk-WHONZ53R.js} +2 -2
  51. package/dist/{chunk-QTL7VZVF.js → chunk-X2ZJL7GA.js} +3 -3
  52. package/dist/{chunk-LASKTDCR.js → chunk-ZEFNJCN3.js} +1 -1
  53. package/dist/{chunk-SODV2YMW.js → chunk-ZXQEBRCB.js} +2 -2
  54. package/dist/{claude-launcher-XX2MLBDW.js → claude-launcher-TG7CHE3N.js} +5 -5
  55. package/dist/{cli-K7AWWU6C.js → cli-DQXFGH6X.js} +112 -112
  56. package/dist/{command-GJKJ5WT4.js → command-JLHJ2TOH.js} +21 -21
  57. package/dist/{config-AB5Y73BU.js → config-2EADRNJB.js} +5 -5
  58. package/dist/{connect-cmd-FOD7PKVW.js → connect-cmd-VBEYNPAK.js} +8 -8
  59. package/dist/{container-start-XGKAKLUD.js → container-start-L5FDIAD7.js} +32 -32
  60. package/dist/{context-cleanup-VJXMM27E.js → context-cleanup-CEZSKNVL.js} +3 -3
  61. package/dist/{context-show-cmd-A226Q6K5.js → context-show-cmd-GMF7YMSN.js} +9 -9
  62. package/dist/{control-plane-launch-RJSAIFEP.js → control-plane-launch-4WRFVYNP.js} +6 -6
  63. package/dist/{demo-record-cmd-KM2UPWPL.js → demo-record-cmd-EGBXUDYP.js} +1 -1
  64. package/dist/{demo-voice-cmd-W4NYPCVL.js → demo-voice-cmd-KFNEU2GR.js} +14 -14
  65. package/dist/{dist-ZW7I72SD.js → dist-VPXROEZO.js} +2 -2
  66. package/dist/{docker-OQP6NU7P.js → docker-UP7EFFLL.js} +3 -3
  67. package/dist/{doctor-OXMOYIKK.js → doctor-UIQ22QZC.js} +22 -22
  68. package/dist/{emit-artifact-cmd-X2YWXLKQ.js → emit-artifact-cmd-NLCKM5TU.js} +13 -13
  69. package/dist/{emit-cmd-C3BUFAUR.js → emit-cmd-4G3443OJ.js} +6 -6
  70. package/dist/{emit-criteria-cmd-HYKOTFXG.js → emit-criteria-cmd-GO3TDUCG.js} +10 -10
  71. package/dist/{emit-demo-cmd-DTARV6RI.js → emit-demo-cmd-EJBQHFR2.js} +14 -14
  72. package/dist/{emit-finding-cmd-GSLYQC43.js → emit-finding-cmd-PHUHZLQ3.js} +10 -10
  73. package/dist/{emit-result-cmd-PKJH76NG.js → emit-result-cmd-UJSWTGDG.js} +12 -12
  74. package/dist/{emit-step-cmd-IW2Y4N67.js → emit-step-cmd-M2JEWJ4Q.js} +10 -10
  75. package/dist/{find-unit-2C6EK5YY.js → find-unit-H5DKNRBG.js} +7 -7
  76. package/dist/{findings-cmd-CFF2I3TU.js → findings-cmd-O3VCFA55.js} +10 -10
  77. package/dist/{fleet-readiness-ZSG4UDYR.js → fleet-readiness-SXIYBEWC.js} +8 -8
  78. package/dist/{governing-source-TUGE7QJY.js → governing-source-QEXH6MIZ.js} +13 -13
  79. package/dist/{hook-fast-5C4MQ5ZS.js → hook-fast-DPC75LFQ.js} +1 -1
  80. package/dist/{host-checks-L4GX6F3H.js → host-checks-BOLFMWX2.js} +30 -30
  81. package/dist/index.js +4 -4
  82. package/dist/{init-NSTWRPRM.js → init-7G3UO6J3.js} +21 -21
  83. package/dist/{init-WU2S3WRO.js → init-N6UZ5WCL.js} +21 -21
  84. package/dist/{init-cmd-H4HYM5V3.js → init-cmd-4LYUGPB3.js} +18 -18
  85. package/dist/{init-update-WOYX2AIO.js → init-update-4GUGHNS5.js} +17 -17
  86. package/dist/{layout-KRWLUGYZ.js → layout-7UOBWNYO.js} +4 -4
  87. package/dist/{login-browser-BAFZYJBR.js → login-browser-Q25ZNSQ3.js} +2 -2
  88. package/dist/{logs-E2O53NUI.js → logs-HUENB7U4.js} +1 -0
  89. package/dist/{loop-GQLSSBQB.js → loop-GRDMQM2J.js} +34 -34
  90. package/dist/{machine-IRBCGRUO.js → machine-QSGONNDX.js} +21 -21
  91. package/dist/{machine-skills-YVS4ZYCT.js → machine-skills-KYN7XJEJ.js} +4 -4
  92. package/dist/{runner-env-TYGE6BFU.js → runner-env-K4DOSDUV.js} +7 -7
  93. package/dist/{runner-identity-B2MZQFYN.js → runner-identity-4RVY2MHX.js} +3 -3
  94. package/dist/{runner-key-NPPEGU6H.js → runner-key-DIGTV3G5.js} +21 -21
  95. package/dist/{session-sender-ZS4OIE3M.js → session-sender-N6QHL35T.js} +13 -13
  96. package/dist/{spec-cmd-N45YF6UL.js → spec-cmd-EZGRJPUQ.js} +11 -11
  97. package/dist/{starter-pack-QWDE6FDK.js → starter-pack-KB3YH4KX.js} +5 -5
  98. package/dist/{status-EP6QSFRY.js → status-NA5DLUXD.js} +30 -30
  99. package/dist/{sync-cmd-VCB4YDCB.js → sync-cmd-NEAZMEIL.js} +12 -12
  100. package/dist/{update-steps-BJB7NL6L.js → update-steps-7HZZPWZE.js} +31 -31
  101. package/dist/{watch-XU2AUR6Z.js → watch-FOY5LSSS.js} +12 -12
  102. package/dist/{work-claim-cmd-WEP3OWAU.js → work-claim-cmd-EJT55FZY.js} +15 -15
  103. package/dist/{work-cmd-DWR27TKQ.js → work-cmd-KLPPJG4U.js} +10 -10
  104. package/dist/{work-comment-cmd-HSDVPYWM.js → work-comment-cmd-TT6TFF6Q.js} +11 -11
  105. package/dist/{work-demo-cmd-3EQYHRBP.js → work-demo-cmd-22PLEX4X.js} +10 -10
  106. package/dist/{work-logs-cmd-3YACDH7Y.js → work-logs-cmd-DWK5AYLK.js} +10 -10
  107. package/dist/{work-open-pr-cmd-MHVTTTLD.js → work-open-pr-cmd-MKHZBGA6.js} +11 -11
  108. package/dist/{work-pr-cmd-XETSFFM2.js → work-pr-cmd-P7PRHAJD.js} +10 -10
  109. package/dist/{work-proofs-cmd-RYQ7Y6KO.js → work-proofs-cmd-CNQR7RCD.js} +12 -12
  110. package/dist/{work-proofs-record-IC3RWDDQ.js → work-proofs-record-GICELEJQ.js} +26 -21
  111. package/dist/{work-stop-cmd-4BE2B7TY.js → work-stop-cmd-U42TFT7X.js} +10 -10
  112. package/package.json +1 -1
  113. package/skill-pack/maintained/outerlayer-amend/SKILL.md +2 -3
  114. package/skill-pack/maintained/outerlayer-build/SKILL.md +3 -1
  115. package/skill-pack/maintained/outerlayer-build/references/evidence.md +7 -0
  116. /package/dist/{chunk-DINRXUQA.js → chunk-IXRUVR25.js} +0 -0
@@ -1,33 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { itemsSentence, criteriaOf, hostItemsOf, loadCitationFinder, MAX_TEST_FILE_BYTES, MAX_TEST_FILES, testFileMatcher, criterionInputs, planCriteria, parseJudgeAnswer, inCriteriaOrder, oneLineReason, judgedItems } from './chunk-BEGMZKMG.js';
3
+ import { itemsSentence, criteriaOf, hostItemsOf, loadCitationFinder, MAX_TEST_FILE_BYTES, MAX_TEST_FILES, testFileMatcher, criterionInputs, planCriteria, parseJudgeAnswer, inCriteriaOrder, oneLineReason, judgedItems } from './chunk-UE2C4STC.js';
4
4
  import { readsJobState, READ_JOB_STATE_FORMATS, jobStateFormatOf } from './chunk-ZVB57WI6.js';
5
5
  import { HELPER_PATH, DOCKERD_LOG, HELPER_RECORD } from './chunk-XDCD4GD5.js';
6
6
  import { zodProblem } from './chunk-I3LTIAOR.js';
7
- import { senderPidfile } from './chunk-AKQX462F.js';
8
- import { installScrubContext } from './chunk-C2E4PWEN.js';
7
+ import { senderPidfile } from './chunk-6MLX26T4.js';
8
+ import { installScrubContext } from './chunk-FG564H3C.js';
9
9
  import { writeDockerClientConfig } from './chunk-BUVDDPOM.js';
10
- import { upgradedStarterText } from './chunk-TZMDRHWB.js';
11
- import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, firstLine, hasClaudeCredential, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, runtimeStepInput, keepRuntimeStep, createContainerRuntime, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, startHostServices, LEASE_SECONDS, managedBuildSettingsFor, stopContainer, cleanupContainer, outOfMemoryReason, closeHostBuild, dropManagedClaudeKey, dropManagedBuildSettings, startCheckContainer, ranRuntimeStep, provisionRuntimes, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, managedMachineLimits, withFactoryHosts, helperFirecrackerNote, said, managedClaudeKeyValues, managedBuildSettingValues, stopJailed, deleteBuildDisk, managedClaudeKeyFor, ROOT_DISK_ID_PREFIX, copyTranscripts, containerJudgeEnvironment, senderSignalScript, copyJudgeTree } from './chunk-7JBG43BX.js';
12
- import { fetchCommit, readBranchHead, diffBetween } from './chunk-AGNFPJSP.js';
10
+ import { upgradedStarterText } from './chunk-IAVT7R6O.js';
11
+ import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, firstLine, hasClaudeCredential, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, runtimeStepInput, keepRuntimeStep, createContainerRuntime, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, startHostServices, LEASE_SECONDS, managedBuildSettingsFor, stopContainer, cleanupContainer, recordProofsInContainer, PROOFS_LOG, outOfMemoryReason, closeHostBuild, dropManagedClaudeKey, dropManagedBuildSettings, startCheckContainer, ranRuntimeStep, provisionRuntimes, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, managedMachineLimits, withFactoryHosts, helperFirecrackerNote, said, managedClaudeKeyValues, managedBuildSettingValues, stopJailed, deleteBuildDisk, RECORD_PROOFS_ARGV, managedClaudeKeyFor, ROOT_DISK_ID_PREFIX, copyTranscripts, containerJudgeEnvironment, senderSignalScript, copyJudgeTree } from './chunk-I4V2YBMA.js';
12
+ import { fetchCommit, readBranchHead, diffBetween } from './chunk-KY6H5L5O.js';
13
13
  import { waitForAgent, vmExecArgs } from './chunk-NPTEYMBW.js';
14
14
  import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-DKIZDYUX.js';
15
- import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, keptContextTree, WORKFLOW_PERMISSION_REASON } from './chunk-SODV2YMW.js';
16
- import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, egressSummary, DEFAULT_CHECK_TIME_LIMIT_MINUTES, optionalEgress } from './chunk-QXAPVAPR.js';
17
- import { formatBytes, DEFAULT_CACHE_DISK, allocatedBytes } from './chunk-7LKOOGSN.js';
18
- import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, parseSize, identityScript, identityArgs, parseIdentity, mountableHome, homeCopyScript, homeCopyArgs, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-2LCNMAWP.js';
15
+ import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, removeKeptContext, retrySend, formatClock, keptContextTree, WORKFLOW_PERMISSION_REASON } from './chunk-ZXQEBRCB.js';
16
+ import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, egressSummary, DEFAULT_CHECK_TIME_LIMIT_MINUTES, optionalEgress } from './chunk-JDYBPAPP.js';
17
+ import { formatBytes, DEFAULT_CACHE_DISK, allocatedBytes } from './chunk-47SFTQA5.js';
18
+ import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, parseSize, identityScript, identityArgs, parseIdentity, mountableHome, homeCopyScript, homeCopyArgs, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-HA46L5FG.js';
19
19
  import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-D3CT6XQ4.js';
20
20
  import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
21
- import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-72N7GOLM.js';
22
- import { planArtifactUpload } from './chunk-IXPH4EXK.js';
21
+ import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-T664NDNT.js';
22
+ import { planArtifactUpload } from './chunk-VEVNGDTP.js';
23
23
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
24
24
  import { signerFor } from './chunk-VJQQVTCS.js';
25
- import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE, resolvePackRoot } from './chunk-OVNF4LLC.js';
26
- import { scrubText } from './chunk-A2KLVZBU.js';
25
+ import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE, resolvePackRoot } from './chunk-HH3BQG65.js';
26
+ import { scrubText } from './chunk-GH2HEEOH.js';
27
27
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
28
28
  import { resolveVersion } from './chunk-RA3O54FC.js';
29
- import { parsePolicy } from './chunk-XFJ7YOPD.js';
30
- import { CheckItemsSchema } from './chunk-DINRXUQA.js';
29
+ import { parsePolicy } from './chunk-2EEW6FJN.js';
30
+ import { CheckItemsSchema } from './chunk-IXRUVR25.js';
31
31
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
32
32
  import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath, jobConsolePath } from './chunk-2CW2QMSG.js';
33
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, withMiseVariables, fdName, BUILD_HOME, CLAUDE_CREDENTIAL_VARIABLES, currentClaudeCredential, removedClaudeCredentialValues, managedClaudeCredential, checkEnvironment, EVAL_INPUT_DIR } from './chunk-4N7BQBO4.js';
@@ -668,7 +668,7 @@ async function provisionMicroVm(input) {
668
668
  removeStagedContext: () => removeStagedContext(buildDir2),
669
669
  keepIn: jobDir,
670
670
  ...input.requireBuildSkill === true ? { requireBuildSkill: true } : {},
671
- // A repository with no devcontainer file builds on the universal image, whose runtimes the build chooses and installs.
671
+ // A build on the universal image, or on an image built from it, chooses and installs its runtimes.
672
672
  ...runtimeStepInput(report, services)
673
673
  });
674
674
  if (!steps.ok) return bail(steps.reason, steps.aborted === true);
@@ -780,9 +780,15 @@ function isRunning(runtime, state) {
780
780
  return vmAlive(runtime, state);
781
781
  }
782
782
  async function syncInMicroVm(input) {
783
+ return runCliInMicroVm(input, ["outerlayer", "sync"], "sync.log", "the microVM is gone, so its sessions cannot be read");
784
+ }
785
+ async function recordProofsInMicroVm(input) {
786
+ return runCliInMicroVm(input, [...RECORD_PROOFS_ARGV], PROOFS_LOG, "the microVM is gone, so its proofs cannot be recorded");
787
+ }
788
+ async function runCliInMicroVm(input, argv, logName, goneReason) {
783
789
  const { runtime, job } = input;
784
790
  const state = job.microvm;
785
- if (!isRunning(runtime, state)) return { ok: false, reason: "the microVM is gone, so its sessions cannot be read" };
791
+ if (!isRunning(runtime, state)) return { ok: false, reason: goneReason };
786
792
  try {
787
793
  const env = buildEnvironment({
788
794
  config: input.config,
@@ -800,12 +806,12 @@ async function syncInMicroVm(input) {
800
806
  factoryVariables: factoryVariablesOf(input.config, input.jobDir)
801
807
  });
802
808
  const result = await runtime.vm.exec(state.vsockPath, {
803
- argv: ["outerlayer", "sync"],
809
+ argv,
804
810
  user: state.agentUser ?? ADDED_USER,
805
811
  cwd: job.workdir ?? CHECKOUT_DIR,
806
812
  env: execEnvironment(state.imageEnv, env)
807
813
  });
808
- appendFileSync(join(input.jobDir, "sync.log"), result.stdout + result.stderr);
814
+ appendFileSync(join(input.jobDir, logName), result.stdout + result.stderr);
809
815
  return result.status === 0 ? { ok: true } : { ok: false, reason: `exit ${result.status}` };
810
816
  } catch (err) {
811
817
  return { ok: false, reason: describeCallFailure(err) };
@@ -2544,6 +2550,52 @@ async function runSyncViaExec(config, job, jobDirPath, spawnFn = spawn) {
2544
2550
  return { ok: false, reason: describeCallFailure(err) };
2545
2551
  }
2546
2552
  }
2553
+ function runRecordProofs(config, job, jobDirPath, spawnFn = spawn) {
2554
+ return new Promise((resolve) => {
2555
+ const env = jobEnv(config, job.item, job.itemKey, jobDirPath, process.env, job.branch, job.commitIdentity?.author);
2556
+ let fd;
2557
+ let child;
2558
+ try {
2559
+ fd = openSync(join(jobDirPath, PROOFS_LOG), "a", RUNNER_FILE_MODE);
2560
+ } catch (err) {
2561
+ resolve({ ok: false, reason: describeCallFailure(err) });
2562
+ return;
2563
+ }
2564
+ try {
2565
+ child = spawnFn(process.execPath, [process.argv[1] ?? "outerlayer", ...RECORD_PROOFS_ARGV.slice(1)], { cwd: job.workdir, env, stdio: ["ignore", fd, fd] });
2566
+ } catch (err) {
2567
+ closeSync(fd);
2568
+ resolve({ ok: false, reason: describeCallFailure(err) });
2569
+ return;
2570
+ }
2571
+ child.on("exit", (code) => {
2572
+ closeSync(fd);
2573
+ resolve(code === 0 ? { ok: true } : { ok: false, reason: `exit ${code ?? "by signal"}` });
2574
+ });
2575
+ child.on("error", (err) => {
2576
+ closeSync(fd);
2577
+ resolve({ ok: false, reason: describeCallFailure(err) });
2578
+ });
2579
+ });
2580
+ }
2581
+ async function runRecordProofsViaExec(config, job, jobDirPath, spawnFn = spawn) {
2582
+ const build = job.build;
2583
+ const env = hostCommandEnvironment(jobEnv(config, job.item, job.itemKey, jobDirPath, process.env, job.branch, job.commitIdentity?.author), build, config, job.commitIdentity?.hooksPath);
2584
+ try {
2585
+ const result = await runHook(build.exec, env, jobDirPath, join(jobDirPath, PROOFS_LOG), spawnFn, void 0, execArgv(job.workdir, [...RECORD_PROOFS_ARGV]));
2586
+ return result.code === 0 ? { ok: true } : { ok: false, reason: `exit ${result.code}` };
2587
+ } catch (err) {
2588
+ return { ok: false, reason: describeCallFailure(err) };
2589
+ }
2590
+ }
2591
+ var RECORDED_PROOFS = /* @__PURE__ */ new Set(["screenshot", "video", "report", "log", "file"]);
2592
+ async function declaresRecordedProof(config, item, fetchImpl) {
2593
+ try {
2594
+ return (criteriaOf(await readWorkItem(config, item, fetchImpl)) ?? []).some((criterion) => criterion.proof !== null && RECORDED_PROOFS.has(criterion.proof));
2595
+ } catch {
2596
+ return true;
2597
+ }
2598
+ }
2547
2599
  var MAX_NAMED_SPOOLED = 20;
2548
2600
  function spooledArtifactIds(home) {
2549
2601
  try {
@@ -2556,7 +2608,7 @@ function leaseExpiry(job, fallback) {
2556
2608
  const base = Date.parse(job.lastRenewAt ?? job.startedAt);
2557
2609
  return new Date((Number.isFinite(base) ? base : fallback.getTime()) + LEASE_SECONDS * 1e3);
2558
2610
  }
2559
- var TEARDOWN_STAGES = ["judge", "checks", "sync", "cleanup", "report"];
2611
+ var TEARDOWN_STAGES = ["proofs", "judge", "checks", "sync", "cleanup", "report"];
2560
2612
  function inTeardown(job) {
2561
2613
  return job.stage !== void 0 && TEARDOWN_STAGES.includes(job.stage);
2562
2614
  }
@@ -2694,6 +2746,21 @@ async function finishJob(job, jobDirPath, outcome, config, deps, ending) {
2694
2746
  log.error(`${tag} removing an earlier attempt's check environment failed: ${describeCallFailure(err)} \xB7 continuing`);
2695
2747
  }
2696
2748
  }
2749
+ if (outcome === "ok" && !job.cleanupRan && job.proofsRan !== true && !valuesNotHeld && job.workdir !== void 0 && job.itemKey !== void 0 && await declaresRecordedProof(config, job.item, deps.fetchImpl)) {
2750
+ setStage(job, jobDirPath, "proofs");
2751
+ job.proofsRan = true;
2752
+ writeJobFile(jobFilePath, job);
2753
+ log.line(`${tag} proofs started`);
2754
+ const startedMs = now().getTime();
2755
+ try {
2756
+ const recorded = build !== void 0 ? await recordProofsInContainer({ config, runtime: build.runtime, job, jobDir: jobDirPath, log: (line) => log.line(`${tag} ${line}`) }) : vmBuild !== void 0 ? await recordProofsInMicroVm({ config, runtime: vmBuild.runtime, job, jobDir: jobDirPath }) : job.build?.exec !== void 0 ? await runRecordProofsViaExec(config, job, jobDirPath, spawnFn) : await runRecordProofs(config, job, jobDirPath, spawnFn);
2757
+ const took = formatDuration(now().getTime() - startedMs);
2758
+ if (recorded.ok) log.line(`${tag} proofs ok (${took}) \xB7 see ${PROOFS_LOG}`);
2759
+ else log.error(`${tag} proofs not all current (${took}): ${recorded.reason ?? "no reason given"} \xB7 see ${PROOFS_LOG} \xB7 continuing`);
2760
+ } catch (err) {
2761
+ log.error(`${tag} the host's proof recording stopped: ${describeCallFailure(err)} \xB7 continuing`);
2762
+ }
2763
+ }
2697
2764
  if (valuesNotHeld && outcome === "ok" && !job.cleanupRan) log.error(`${tag} the host's judge and checks skipped: ${VALUES_NOT_HELD}`);
2698
2765
  if (outcome === "ok" && !job.cleanupRan && job.judgeRan !== true && !valuesNotHeld) {
2699
2766
  setStage(job, jobDirPath, "judge");
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE } from './chunk-OVNF4LLC.js';
4
- import { normalizePath, CONTEXT_PIN_FILENAME } from './chunk-XFJ7YOPD.js';
3
+ import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE } from './chunk-HH3BQG65.js';
4
+ import { normalizePath, CONTEXT_PIN_FILENAME } from './chunk-2EEW6FJN.js';
5
5
  import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, lstatSync, readlinkSync, symlinkSync, rmdirSync } from 'fs';
6
6
  import { relative, sep, join } from 'path';
7
7
 
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-C2E4PWEN.js';
3
+ import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-FG564H3C.js';
4
4
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
5
5
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
6
- import { autoConnect } from './chunk-GJHOU5V3.js';
6
+ import { autoConnect } from './chunk-BRBZKIZG.js';
7
7
  import { C } from './chunk-ANPNT6PM.js';
8
- import { readEffectiveArtifactSpoolState, localArtifactIds, isArtifactTombstoned, artifactBlobsDir, appendArtifactRecord, artifactsSpoolPath, findPendingArtifactRecord, sanitizeTerminal, appendArtifactTombstone } from './chunk-IXPH4EXK.js';
8
+ import { readEffectiveArtifactSpoolState, localArtifactIds, isArtifactTombstoned, artifactBlobsDir, appendArtifactRecord, artifactsSpoolPath, findPendingArtifactRecord, sanitizeTerminal, appendArtifactTombstone } from './chunk-VEVNGDTP.js';
9
9
  import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-IZKUPAXF.js';
10
- import { resolveRepoIdentity } from './chunk-A2KLVZBU.js';
10
+ import { resolveRepoIdentity } from './chunk-GH2HEEOH.js';
11
11
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
12
12
  import { cliInvocation } from './chunk-CRB3POP4.js';
13
- import { ARTIFACT_MAX_CAPTION_LENGTH, ArtifactCriterionIdSchema, ARTIFACT_MAX_BYTES, ARTIFACT_MAX_FILENAME_LENGTH, mediaTypeForArtifactPath, inferArtifactKind, ARTIFACT_MAX_REPLACES_TARGETS, parseTestSelector, parseJunit, bindTests } from './chunk-DINRXUQA.js';
13
+ import { ARTIFACT_MAX_CAPTION_LENGTH, ArtifactCriterionIdSchema, ARTIFACT_MAX_BYTES, ARTIFACT_MAX_FILENAME_LENGTH, mediaTypeForArtifactPath, inferArtifactKind, ARTIFACT_MAX_REPLACES_TARGETS, parseTestSelector, parseJunit, bindTests } from './chunk-IXRUVR25.js';
14
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
15
15
  import { createHash, randomUUID } from 'crypto';
16
16
  import { statSync, readFileSync, mkdirSync, existsSync, writeFileSync, renameSync, unlinkSync } from 'fs';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-N6V4ZHI7.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-26WUFKYZ.js';
4
4
  import { resolveGatewayCredentials } from './chunk-IZKUPAXF.js';
5
5
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
6
6
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
7
- import { resolveRepoIdentity } from './chunk-A2KLVZBU.js';
7
+ import { resolveRepoIdentity } from './chunk-GH2HEEOH.js';
8
8
  import { cliInvocation } from './chunk-CRB3POP4.js';
9
9
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
10
10
 
@@ -2,13 +2,13 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
4
4
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
5
- import { autoConnect } from './chunk-GJHOU5V3.js';
5
+ import { autoConnect } from './chunk-BRBZKIZG.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-IZKUPAXF.js';
8
- import { resolveRepoIdentity } from './chunk-A2KLVZBU.js';
8
+ import { resolveRepoIdentity } from './chunk-GH2HEEOH.js';
9
9
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
11
- import { CriteriaListSchema } from './chunk-DINRXUQA.js';
11
+ import { CriteriaListSchema } from './chunk-IXRUVR25.js';
12
12
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
13
13
  import { readFileSync } from 'fs';
14
14
 
@@ -5,7 +5,7 @@ import { C } from './chunk-ANPNT6PM.js';
5
5
  import { readCloudConfigStrict, CloudConfigError, readCloudConfig, writeCloudConfig, cloudConfigPath } from './chunk-PJDQPF5N.js';
6
6
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';
8
- import { CLI_LOGIN_MACHINE_NAME_MAX, CliLoginPollResponseSchema, CLI_LOGIN_KIND, CliLoginRefusalSchema, CliLoginStartedSchema } from './chunk-DINRXUQA.js';
8
+ import { CLI_LOGIN_MACHINE_NAME_MAX, CliLoginPollResponseSchema, CLI_LOGIN_KIND, CliLoginRefusalSchema, CliLoginStartedSchema } from './chunk-IXRUVR25.js';
9
9
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
10
10
  import { generateKeyPairSync, privateDecrypt, constants, createPrivateKey } from 'crypto';
11
11
  import { spawn } from 'child_process';
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { uploadSpooledSteps } from './chunk-ZIXLG6EQ.js';
3
+ import { uploadSpooledSteps } from './chunk-7XDF7PNF.js';
4
4
  import { LaunchFilter } from './chunk-ESVW4MJY.js';
5
5
  import { RepoFilter } from './chunk-TBT347UY.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
- import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-IXPH4EXK.js';
7
+ import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-VEVNGDTP.js';
8
8
  import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-IZKUPAXF.js';
9
9
  import { readCloudConfig, cloudConfigPath, writeCloudConfig } from './chunk-PJDQPF5N.js';
10
10
  import { signerFor, signRunnerRequest } from './chunk-VJQQVTCS.js';
11
- import { writeSyncStatus, spoolDir } from './chunk-D7MWJM2G.js';
11
+ import { writeSyncStatus, spoolDir } from './chunk-WHONZ53R.js';
12
12
  import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
13
13
  import { hookExecSpoolPath } from './chunk-2O5KA67H.js';
14
14
  import { applyReportedCost } from './chunk-BKO6JEZI.js';
15
15
  import { readRepoConnection, findGitDirs } from './chunk-BJ3KTMDH.js';
16
- import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-A2KLVZBU.js';
16
+ import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-GH2HEEOH.js';
17
17
  import { readLaunchSpoolState, launchStatusIsDecisive, launchedItemsBySession, launchesPath } from './chunk-T2Q7ISPE.js';
18
18
  import { cliInvocation } from './chunk-CRB3POP4.js';
19
19
  import { removeJournalHooks } from './chunk-TUSYOL2O.js';
20
- import { CAPTURE_TIERS, inferArtifactKind, bannedPathsForTier, downconvertSession, isHumanUserTurn, turnCountBound, EVENT_TYPES } from './chunk-DINRXUQA.js';
20
+ import { CAPTURE_TIERS, inferArtifactKind, bannedPathsForTier, downconvertSession, isHumanUserTurn, turnCountBound, EVENT_TYPES } from './chunk-IXRUVR25.js';
21
21
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
22
22
  import { SCRUB_ENV_VARIABLE } from './chunk-4N7BQBO4.js';
23
23
  import { dirname, basename, join, sep } from 'path';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { EVENT_TYPES, isHumanUserTurn, INPUT_BAND_BOUNDARIES, parseAgentSession, SCHEMA_VERSION, SPEED_MAX_LENGTH, inputBandOf, BUCKET_MODEL_MAX_LENGTH } from './chunk-DINRXUQA.js';
3
+ import { EVENT_TYPES, isHumanUserTurn, INPUT_BAND_BOUNDARIES, parseAgentSession, SCHEMA_VERSION, SPEED_MAX_LENGTH, inputBandOf, BUCKET_MODEL_MAX_LENGTH } from './chunk-IXRUVR25.js';
4
4
  import { createHash } from 'crypto';
5
5
  import { readFileSync, readdirSync, statSync, mkdirSync, copyFileSync, renameSync, unlinkSync, writeFileSync, stat as stat$1, unwatchFile, watchFile, watch as watch$1 } from 'fs';
6
6
  import { type, homedir } from 'os';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { escapeUnitPath, UNIT_MARKER, DEFAULT_UNIT_NAME } from './chunk-N4KQMGEZ.js';
3
+ import { escapeUnitPath, UNIT_MARKER, DEFAULT_UNIT_NAME } from './chunk-NYMDS542.js';
4
4
  import { inspectService, realInspectProbes } from './chunk-4N7BQBO4.js';
5
5
  import { realpathSync, readFileSync, readdirSync } from 'fs';
6
6
  import { resolve, dirname, join } from 'path';
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
3
3
  import { resolveDevcontainerCli, devcontainerBuildInvocation, universalImagePending, RecipeError } from './chunk-CM4J53WZ.js';
4
4
  import { universalImagePinned, UNIVERSAL_IMAGE, BUILDKIT_IMAGE } from './chunk-D3CT6XQ4.js';
5
5
  import { ensureHostKey } from './chunk-VJQQVTCS.js';
6
- import { compareVersions } from './chunk-A2KLVZBU.js';
6
+ import { compareVersions } from './chunk-GH2HEEOH.js';
7
7
  import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-2CW2QMSG.js';
8
8
  import { CLAUDE_PORT, BUILD_HOME, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-4N7BQBO4.js';
9
9
  import { JOIN_DIR, RELAY_ID, JOIN_SOCKET, TARGET_GATEWAY, TARGET_CLAUDE, destinationTarget, RELAY_USER } from './chunk-MESOOLF4.js';
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
4
4
  import { resolvePackageVersion } from './chunk-RA3O54FC.js';
5
- import { splitRawFile } from './chunk-XFJ7YOPD.js';
5
+ import { splitRawFile } from './chunk-2EEW6FJN.js';
6
6
  import { existsSync, readFileSync, mkdirSync, writeFileSync, readdirSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
  import { fileURLToPath } from 'url';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { stripTerminalControls } from './chunk-YGU43DH4.js';
3
+ import { stripTerminalControls } from './chunk-AJZWVXXA.js';
4
4
  import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-ORENXMHA.js';
5
5
  import { readFileSync } from 'fs';
6
6
 
@@ -55,7 +55,7 @@ function envNamesOf(row, imageEnv) {
55
55
  return [...new Set(names)].sort();
56
56
  }
57
57
  async function readOwnContainer(deps = {}) {
58
- const run = deps.run ?? (await import('./docker-OQP6NU7P.js')).spawnRun;
58
+ const run = deps.run ?? (await import('./docker-UP7EFFLL.js')).spawnRun;
59
59
  const ids = candidateIds(deps.env ?? process.env, deps.readFile ?? ((path) => readFileSync(path, "utf8")));
60
60
  if (ids.length === 0) return { ok: false, reason: "the runner cannot tell which container it runs in: HOSTNAME is empty and /proc/self/mountinfo names none" };
61
61
  let problem = "";
@@ -1,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, TAG_HOST, SHARED_OWNER, SHARED_NAME, metadataFromLabels, writeRecord } from './chunk-AGNFPJSP.js';
5
- import { FETCHED_DIR, toolsDockerfile, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_HEADLESS_SHELL, FETCHED_PLAYWRIGHT_FFMPEG, FETCHED_VOICE_DIR } from './chunk-7XZQTJOD.js';
4
+ import { readDefaultBranchHead, cloneRepository, buildRepositoryImage, prepareImageBuild, KEY_PREFIX, TAG_HOST, SHARED_OWNER, SHARED_NAME, universalBase, metadataFromLabels, writeRecord } from './chunk-KY6H5L5O.js';
5
+ import { FETCHED_DIR, toolsDockerfile, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_HEADLESS_SHELL, FETCHED_PLAYWRIGHT_FFMPEG, FETCHED_VOICE_DIR } from './chunk-V64BEF6E.js';
6
6
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
7
7
  import { runExec, execCapture, waitForAgent } from './chunk-NPTEYMBW.js';
8
8
  import { GUEST_CID, linkVsockSockets } from './chunk-DKIZDYUX.js';
9
- import { retrySend, describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-SODV2YMW.js';
9
+ import { retrySend, describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-ZXQEBRCB.js';
10
10
  import { runnerImageVersion } from './chunk-ORENXMHA.js';
11
- import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-S37IAT3A.js';
12
- import { optionalEgress, runnerCredentialProblem, builtinKind, allowHostProblem, systemClock, emptyEgressCounts, hostAllowed } from './chunk-QXAPVAPR.js';
13
- import { formatBytes, allocatedBytes } from './chunk-7LKOOGSN.js';
14
- import { NETWORK_HELPER_MEMORY, createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, networkHelperName, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, mountableHome, homeCopyRunArgs, containerExecArgs, childEnvironment, readDu, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, NETWORK_READY_FILE, spawnRun, identityRunArgs, parseIdentity, networkHelperRunArgs } from './chunk-2LCNMAWP.js';
11
+ import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-UAINHP2C.js';
12
+ import { optionalEgress, runnerCredentialProblem, builtinKind, allowHostProblem, systemClock, emptyEgressCounts, hostAllowed } from './chunk-JDYBPAPP.js';
13
+ import { formatBytes, allocatedBytes } from './chunk-47SFTQA5.js';
14
+ import { NETWORK_HELPER_MEMORY, createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, networkHelperName, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, mountableHome, homeCopyRunArgs, containerExecArgs, childEnvironment, readDu, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, NETWORK_READY_FILE, spawnRun, identityRunArgs, parseIdentity, networkHelperRunArgs } from './chunk-HA46L5FG.js';
15
15
  import { RecipeError, DOCKER_FEATURE, universalImagePending, writeSanitizedRecipe, classifyProperties } from './chunk-CM4J53WZ.js';
16
- 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, networkHelperPinned, NETWORK_HELPER_SHA256, universalImagePinned, UNIVERSAL_IMAGE, UNIVERSAL_IMAGE_DIGEST, UNIVERSAL_IMAGE_REPOSITORY, UNIVERSAL_IMAGE_SOURCE, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, HEADLESS_SHELL, HEADLESS_SHELL_BASE_URL, PLAYWRIGHT_FFMPEG, PLAYWRIGHT_FFMPEG_BASE_URL, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-D3CT6XQ4.js';
16
+ 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, networkHelperPinned, NETWORK_HELPER_SHA256, universalImagePinned, UNIVERSAL_IMAGE, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, HEADLESS_SHELL, HEADLESS_SHELL_BASE_URL, PLAYWRIGHT_FFMPEG, PLAYWRIGHT_FFMPEG_BASE_URL, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-D3CT6XQ4.js';
17
17
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
18
- import { postJson, WorkCommandError, getJson } from './chunk-72N7GOLM.js';
19
- import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
18
+ import { postJson, WorkCommandError, getJson } from './chunk-T664NDNT.js';
19
+ import { sanitizeTerminal } from './chunk-VEVNGDTP.js';
20
20
  import { signerFor } from './chunk-VJQQVTCS.js';
21
21
  import { sharedSkillNames, skillConflictMessage } from './chunk-FGF52V4V.js';
22
22
  import { versionAtLeast, MINIMUM_CLAUDE_VERSION } from './chunk-HCVLP7XA.js';
23
- import { MIN_SCRUBBED_LITERAL, setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-A2KLVZBU.js';
24
- import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-XFJ7YOPD.js';
25
- import { downconvertSession } from './chunk-DINRXUQA.js';
23
+ import { MIN_SCRUBBED_LITERAL, setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-GH2HEEOH.js';
24
+ import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-2EEW6FJN.js';
25
+ import { downconvertSession } from './chunk-IXRUVR25.js';
26
26
  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-2CW2QMSG.js';
27
27
  import { claudeCredential, parseIsolation, proxyEnvironment, withProxyWarningHidden, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, withHooksPath, startBuildServices, BUILT_IN_NAMES, checkoutPath, repositoriesOf, primaryOf, RELAY_PORT, repositoryPath, CHECKOUT_DIR, lifecycleWorkdir, buildEnvironment, checkEnvironment, withMiseVariables, AGENT_CREDENTIAL_MISSING, isMiseVariableAllowed, JOB_MOUNT, realFdStorePort } from './chunk-4N7BQBO4.js';
28
28
  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';
@@ -2392,8 +2392,7 @@ async function buildInBuilder(opts, deps, prepared) {
2392
2392
  claudeCodeVersion: prepared.claudeCodeVersion,
2393
2393
  buildId: opts.cli.buildId,
2394
2394
  guestHelper: true,
2395
- fetched: true,
2396
- ...location.kind === "default" ? { universal: true } : {}
2395
+ fetched: true
2397
2396
  })
2398
2397
  );
2399
2398
  inputs = builderInput({ checkoutDir: checkout.dir, toolsDir, toolFilesDir, recipeDir }, archive);
@@ -2415,6 +2414,7 @@ async function buildInBuilder(opts, deps, prepared) {
2415
2414
  const described = JSON.parse(result);
2416
2415
  const imageConfig = parseImageConfig(JSON.stringify(described.config));
2417
2416
  const labels = described.config.Labels ?? {};
2417
+ const base = universalBase(location, labels);
2418
2418
  mkdirSync(recordDir, { recursive: true, mode: RUNNER_DIR_MODE });
2419
2419
  const fd = openSync(partial, "w", 384);
2420
2420
  let received = 0;
@@ -2444,7 +2444,7 @@ async function buildInBuilder(opts, deps, prepared) {
2444
2444
  sourceCommit: checkout.commit,
2445
2445
  defaultBranch: checkout.defaultBranch,
2446
2446
  recipe: location.kind === "default" ? "default" : location.path,
2447
- ...location.kind === "default" ? { base: { reference: `${UNIVERSAL_IMAGE_REPOSITORY}:${UNIVERSAL_IMAGE_SOURCE}`, digest: UNIVERSAL_IMAGE_DIGEST } } : {},
2447
+ ...base === void 0 ? {} : { base },
2448
2448
  recipeKey: prepared.recipeKey,
2449
2449
  toolsKey: prepared.toolsKey,
2450
2450
  imageId: `${ROOT_DISK_ID_PREFIX}${rKey}-${tKey}`,
@@ -3527,6 +3527,10 @@ function copyJudgeTree(from, to, limits2 = { files: MAX_TREE_FILES, bytes: MAX_T
3527
3527
  walk(from, to, true);
3528
3528
  }
3529
3529
 
3530
+ // src/runner/record-proofs.ts
3531
+ var RECORD_PROOFS_ARGV = ["outerlayer", "work", "proofs", "--record", "--comment"];
3532
+ var PROOFS_LOG = "proofs.log";
3533
+
3530
3534
  // src/runner/container/agent-user.ts
3531
3535
  var ADDED_USER = "ol-agent";
3532
3536
  var RELAY_REFUSAL = `the agent's user cannot be \`${RELAY_USER}\``;
@@ -4988,7 +4992,7 @@ async function provisionContainer(input) {
4988
4992
  removeStagedContext: () => removeStagedContext(buildDir2),
4989
4993
  keepIn: jobDir,
4990
4994
  ...input.requireBuildSkill === true ? { requireBuildSkill: true } : {},
4991
- // A repository with no devcontainer file builds on the universal image, whose runtimes the build chooses and installs.
4995
+ // A build on the universal image, or on an image built from it, chooses and installs its runtimes.
4992
4996
  ...runtimeStepInput(report, services)
4993
4997
  });
4994
4998
  if (!steps.ok) return bail(steps.reason, steps.aborted === true);
@@ -5186,6 +5190,12 @@ async function deliverContainerHooks(runtime, state, jobDir) {
5186
5190
  return deliverJobFiles(runtime, state, ["git-hooks"], secretsOf(runtime, jobDir));
5187
5191
  }
5188
5192
  async function syncInContainer(input) {
5193
+ return runCliInContainer(input, ["outerlayer", "sync"], "sync.log");
5194
+ }
5195
+ async function recordProofsInContainer(input) {
5196
+ return runCliInContainer(input, [...RECORD_PROOFS_ARGV], PROOFS_LOG);
5197
+ }
5198
+ async function runCliInContainer(input, argv, logName) {
5189
5199
  const { runtime, job } = input;
5190
5200
  const state = job.container;
5191
5201
  try {
@@ -5215,8 +5225,8 @@ async function syncInContainer(input) {
5215
5225
  identity: job.commitIdentity
5216
5226
  });
5217
5227
  const result = await runtime.host.exec(
5218
- { container: state.container, user: state.agentUser ?? ADDED_USER, workdir: job.workdir ?? CHECKOUT_DIR, env, argv: ["outerlayer", "sync"] },
5219
- { logPath: join(input.jobDir, "sync.log") }
5228
+ { container: state.container, user: state.agentUser ?? ADDED_USER, workdir: job.workdir ?? CHECKOUT_DIR, env, argv },
5229
+ { logPath: join(input.jobDir, logName) }
5220
5230
  );
5221
5231
  return result.status === 0 ? { ok: true } : { ok: false, reason: `exit ${result.status}` };
5222
5232
  } catch (err) {
@@ -5595,4 +5605,4 @@ function describeMachineDocker(machine) {
5595
5605
  return `Docker Engine ${version ?? "of no known version"}, older than the ${MIN_ENGINE_MAJOR} that container builds need`;
5596
5606
  }
5597
5607
 
5598
- 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, ensureNetworkReady, ensureRootfs, ensureTunnel, execArgv, execCommandLine, fetchManagedBuildSettings, fetchManagedClaudeKey, filesAreCopied, firstLine4 as firstLine, formerSkillProblem, formerSkillQueues, ghHostsYml, gitRemoteFor, hasClaudeCredential, helperFirecrackerNote, helperSocketPath, holdManagedBuildSettings, holdManagedClaudeKey, hostCommandEnvironment, hostEnvironment, isPlaceholderCommand, keepGhConfigCurrent, keepRuntimeStep, 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, provisionRuntimes, ranRuntimeStep, reachDockerStep, readConfigObject, resolveAgentUser, resolveHostBuild, runBuildSteps, runRunnerInit, runWithSpawn, runtimeStepInput, said, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startHostServices, startJailedInto, startServicesFor, stopContainer, stopJailed, stoppedHelperReason, supportsContainerBuilds, supportsMicroVmBuilds, sweepImageBuilders, syncInContainer, withFactoryHosts, withTunnelLog, writeEvalInput, writeRunnerInit };
5608
+ 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, PROOFS_LOG, RECORD_PROOFS_ARGV, 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, ensureNetworkReady, ensureRootfs, ensureTunnel, execArgv, execCommandLine, fetchManagedBuildSettings, fetchManagedClaudeKey, filesAreCopied, firstLine4 as firstLine, formerSkillProblem, formerSkillQueues, ghHostsYml, gitRemoteFor, hasClaudeCredential, helperFirecrackerNote, helperSocketPath, holdManagedBuildSettings, holdManagedClaudeKey, hostCommandEnvironment, hostEnvironment, isPlaceholderCommand, keepGhConfigCurrent, keepRuntimeStep, 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, provisionRuntimes, ranRuntimeStep, reachDockerStep, readConfigObject, recordProofsInContainer, resolveAgentUser, resolveHostBuild, runBuildSteps, runRunnerInit, runWithSpawn, runtimeStepInput, said, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startHostServices, startJailedInto, startServicesFor, stopContainer, stopJailed, stoppedHelperReason, supportsContainerBuilds, supportsMicroVmBuilds, sweepImageBuilders, syncInContainer, withFactoryHosts, withTunnelLog, writeEvalInput, writeRunnerInit };
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { mcpTargetPath, INIT_STDIO_ENTRY, INIT_DOCS_ENTRY, DOCS_MCP_SERVER_NAME } from './chunk-KT4CN6OU.js';
4
- import { VALIDATOR_FILES, VALIDATORS_DIR, POLICY_PATH, POLICY_CONTENT } from './chunk-J7EJMIDR.js';
5
- import { skillsBaseFor } from './chunk-LYCJQOO2.js';
4
+ import { VALIDATOR_FILES, VALIDATORS_DIR, POLICY_PATH, POLICY_CONTENT } from './chunk-54LIUIZL.js';
5
+ import { skillsBaseFor } from './chunk-ARL6X6Y4.js';
6
6
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
7
- import { resolvePackRoot, AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE, restoreSkillPaths, rewriteSkillPaths, skillDir, loadTemplateFiles, TEMPLATE_SKILLS } from './chunk-OVNF4LLC.js';
7
+ import { resolvePackRoot, AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE, restoreSkillPaths, rewriteSkillPaths, skillDir, loadTemplateFiles, TEMPLATE_SKILLS } from './chunk-HH3BQG65.js';
8
8
  import { cliInvocation } from './chunk-CRB3POP4.js';
9
- import { hasSymlinkComponent } from './chunk-UPA5KOOX.js';
9
+ import { hasSymlinkComponent } from './chunk-RQ3GCCHH.js';
10
10
  import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
11
11
  import { createHash } from 'crypto';
12
12
  import { existsSync, readFileSync } from 'fs';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-7LKOOGSN.js';
4
- import { parseSize } from './chunk-2LCNMAWP.js';
3
+ import { DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-47SFTQA5.js';
4
+ import { parseSize } from './chunk-HA46L5FG.js';
5
5
  import { builderDiskPinned } from './chunk-D3CT6XQ4.js';
6
6
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
7
7
  import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-4N7BQBO4.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { toolsDockerfile } from './chunk-7XZQTJOD.js';
4
- import { runnerLabelValue } from './chunk-2LCNMAWP.js';
3
+ import { toolsDockerfile } from './chunk-V64BEF6E.js';
4
+ import { runnerLabelValue } from './chunk-HA46L5FG.js';
5
5
  import { RecipeError, locateRecipe, readRecipe, assertBuildable, writeSanitizedRecipe, classifyProperties, SANITIZED_NAME } from './chunk-CM4J53WZ.js';
6
- import { CLAUDE_CODE_VERSION, NODE_IMAGE, UNIVERSAL_IMAGE, MEDIA_PINS, TINI_VERSION, GH_VERSION, UNIVERSAL_IMAGE_DIGEST, UNIVERSAL_IMAGE_REPOSITORY, UNIVERSAL_IMAGE_SOURCE } from './chunk-D3CT6XQ4.js';
6
+ import { UNIVERSAL_IMAGE_DIGEST, UNIVERSAL_IMAGE_REPOSITORY, UNIVERSAL_IMAGE_SOURCE, CLAUDE_CODE_VERSION, NODE_IMAGE, UNIVERSAL_IMAGE, MEDIA_PINS, TINI_VERSION, GH_VERSION } from './chunk-D3CT6XQ4.js';
7
7
  import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-64LLUVJR.js';
8
8
  import { startTimeOf } from './chunk-JBJTC3UU.js';
9
9
  import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, repoCacheDir, imagesDir, imageBuildLogsDir, attemptStamp, runnerDir, rootfsPathFor } from './chunk-2CW2QMSG.js';
@@ -207,9 +207,17 @@ function selectPrunable(opts) {
207
207
 
208
208
  // src/runner/image/build.ts
209
209
  function baseLines(report) {
210
- return report.base === void 0 ? [] : [` base: ${report.base.reference}@${report.base.digest}
210
+ if (report.base === void 0) return [];
211
+ return [` base: ${report.base.reference}${report.base.digest === void 0 ? "" : `@${report.base.digest}`}
211
212
  `];
212
213
  }
214
+ var UNIVERSAL_SOURCE_LABEL = "ai.outerlayer.universal-source";
215
+ var SOURCE_TAG = /^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/;
216
+ function universalBase(location, labels) {
217
+ if (location.kind === "default") return { reference: `${UNIVERSAL_IMAGE_REPOSITORY}:${UNIVERSAL_IMAGE_SOURCE}`, digest: UNIVERSAL_IMAGE_DIGEST };
218
+ const source = labels[UNIVERSAL_SOURCE_LABEL];
219
+ return source !== void 0 && SOURCE_TAG.test(source) ? { reference: `${UNIVERSAL_IMAGE_REPOSITORY}:${source}` } : void 0;
220
+ }
213
221
  var KIND2 = "ai.outerlayer.kind";
214
222
  var RUNNER2 = "ai.outerlayer.runner";
215
223
  var REPOSITORY = "ai.outerlayer.repository";
@@ -422,8 +430,7 @@ async function buildRepositoryImage(opts, ports) {
422
430
  nodeImage,
423
431
  claudeCodeVersion,
424
432
  buildId: opts.cli.buildId,
425
- guestHelper: opts.guestHelper !== void 0,
426
- ...universal ? { universal: true } : {}
433
+ guestHelper: opts.guestHelper !== void 0
427
434
  });
428
435
  const labels = { [REPOSITORY]: imageRepository, [KIND2]: "build", [RUNNER2]: runnerLabel, [RECIPE_KEY2]: rKey, [TOOLS_KEY]: tKey };
429
436
  const status = await host.buildDockerfile({ dockerfile, context, tag: buildTag, labels, logPath, ...universal ? {} : { base: { ref: recipeTag, layout: keptLayout } } });
@@ -435,6 +442,7 @@ async function buildRepositoryImage(opts, ports) {
435
442
  if (buildImage === void 0) throw failed("finding the image after the tools build", 0);
436
443
  }
437
444
  const toolsBuilt = buildImage !== buildImageBefore;
445
+ const base = universalBase(location, buildImage.labels);
438
446
  let report = readReport(recordDir);
439
447
  if (report === null || report.imageId !== buildImage.id || report.docker === void 0) {
440
448
  report = {
@@ -442,7 +450,7 @@ async function buildRepositoryImage(opts, ports) {
442
450
  sourceCommit: checkout.commit,
443
451
  defaultBranch: checkout.defaultBranch,
444
452
  recipe: location.kind === "default" ? "default" : location.path,
445
- ...universal ? { base: { reference: `${UNIVERSAL_IMAGE_REPOSITORY}:${UNIVERSAL_IMAGE_SOURCE}`, digest: UNIVERSAL_IMAGE_DIGEST } } : {},
453
+ ...base === void 0 ? {} : { base },
446
454
  recipeKey: rKey,
447
455
  toolsKey: tKey,
448
456
  imageId: buildImage.id,
@@ -453,6 +461,8 @@ async function buildRepositoryImage(opts, ports) {
453
461
  writeRecord(recordDir, report, now().toISOString());
454
462
  } else if (universal) {
455
463
  report = { ...report, repository, sourceCommit: checkout.commit, defaultBranch: checkout.defaultBranch };
464
+ } else if (base !== void 0) {
465
+ report = { ...report, base };
456
466
  }
457
467
  const removed = [];
458
468
  if (toolsBuilt) removed.push(...await prune(host, imageRepository, repoRecords, opts.keep ?? KEEP_BUILD_IMAGES, runnerDir(opts.configPath), runnerLabel));
@@ -493,4 +503,4 @@ async function prune(host, repository, repoRecords, keep, runnerDirPath, runnerL
493
503
  return removed;
494
504
  }
495
505
 
496
- export { KEY_PREFIX, SHARED_NAME, SHARED_OWNER, SHARED_REPOSITORY, TAG_HOST, baseLines, buildRepositoryImage, cloneRepository, diffBetween, fetchCommit, metadataFromLabels, prepareImageBuild, readBranchHead, readDefaultBranchHead, writeRecord };
506
+ export { KEY_PREFIX, SHARED_NAME, SHARED_OWNER, SHARED_REPOSITORY, TAG_HOST, UNIVERSAL_SOURCE_LABEL, baseLines, buildRepositoryImage, cloneRepository, diffBetween, fetchCommit, metadataFromLabels, prepareImageBuild, readBranchHead, readDefaultBranchHead, universalBase, writeRecord };
@@ -2,15 +2,15 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
4
4
  import { detectActiveSession, transcriptPathForSession } from './chunk-IP7BIBXJ.js';
5
- import { autoConnect } from './chunk-GJHOU5V3.js';
5
+ import { autoConnect } from './chunk-BRBZKIZG.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-IZKUPAXF.js';
8
8
  import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
9
- import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-A2KLVZBU.js';
9
+ import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-GH2HEEOH.js';
10
10
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
11
11
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
12
12
  import { cliInvocation } from './chunk-CRB3POP4.js';
13
- import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-DINRXUQA.js';
13
+ import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-IXRUVR25.js';
14
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
15
15
  import { readFileSync, existsSync } from 'fs';
16
16
  import { join, dirname, basename } from 'path';