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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/{agent-setup-UPRMGVB7.js → agent-setup-THDNZ5ME.js} +6 -6
  2. package/dist/{bridge-GVZUP3NU.js → bridge-MLB57JP6.js} +2 -2
  3. package/dist/build-25GDCEZ7.js +18 -0
  4. package/dist/{build-disk-WMIRA4RD.js → build-disk-NFMQCZM3.js} +8 -8
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-XTAHDFV5.js → builder-OWDGC3VQ.js} +7 -7
  7. package/dist/{check-FAG4QKIX.js → check-QGM2SECF.js} +39 -39
  8. package/dist/{chunk-Q3ATWA2U.js → chunk-2YPOSVC7.js} +3 -3
  9. package/dist/{chunk-M6YTST7G.js → chunk-36M4KVBT.js} +2 -2
  10. package/dist/{chunk-W5EKMK37.js → chunk-3FTIUB7I.js} +1 -1
  11. package/dist/{chunk-L4DCIEVT.js → chunk-3RRYEZAC.js} +4 -4
  12. package/dist/{chunk-I2GHZ2VA.js → chunk-3VJYDWFV.js} +1 -1
  13. package/dist/{chunk-CHDWAWQA.js → chunk-4QQJTJUN.js} +1 -1
  14. package/dist/{chunk-6SJ3DJDH.js → chunk-5ARXP3BP.js} +3 -3
  15. package/dist/{chunk-SGT7YU3X.js → chunk-5FHBVV25.js} +104 -59
  16. package/dist/{chunk-T375XV3H.js → chunk-62URQYCB.js} +1 -1
  17. package/dist/{chunk-NGZBVN6F.js → chunk-6IMQXBTZ.js} +6 -6
  18. package/dist/{chunk-66TKWWTX.js → chunk-7Q7GQELE.js} +5 -5
  19. package/dist/{chunk-B7LPFCIN.js → chunk-7SJNVGVC.js} +6 -6
  20. package/dist/{chunk-JKOONI3H.js → chunk-7TLGRE5F.js} +2 -2
  21. package/dist/{chunk-OOD5NDQA.js → chunk-A6PJSNP6.js} +349 -94
  22. package/dist/{chunk-LUYTNCMS.js → chunk-ANFNZCXZ.js} +5 -5
  23. package/dist/{chunk-LHUZVM3L.js → chunk-AV5T7HV3.js} +1 -1
  24. package/dist/{chunk-SJY6A6EH.js → chunk-BCIBSJZH.js} +35 -22
  25. package/dist/{chunk-RMJSYOSV.js → chunk-BS3OYFAD.js} +1 -1
  26. package/dist/{chunk-PBZODW5X.js → chunk-BS4CZMT6.js} +1 -1
  27. package/dist/{chunk-HO4XRLAZ.js → chunk-CFJOONWM.js} +1 -1
  28. package/dist/{chunk-LTMFHECB.js → chunk-CKVJSOY3.js} +20 -20
  29. package/dist/{chunk-UC4OSOQS.js → chunk-CMMEJJTL.js} +10 -35
  30. package/dist/{chunk-YIBHQR3B.js → chunk-EYJRVHBN.js} +3 -3
  31. package/dist/{chunk-UYWGR35C.js → chunk-FLHBUQ2W.js} +7 -6
  32. package/dist/{chunk-N752ZNZ5.js → chunk-FVVHQIZR.js} +1 -1
  33. package/dist/{chunk-Z7THNFUU.js → chunk-GMKDAF37.js} +25 -6
  34. package/dist/{chunk-XZGURZHF.js → chunk-GPO7F757.js} +1 -1
  35. package/dist/{chunk-KFXPH7SJ.js → chunk-HJCNWEQK.js} +3 -3
  36. package/dist/{chunk-ARPPH7VS.js → chunk-J3Q3QCOF.js} +243 -79
  37. package/dist/{chunk-3NMDGGZS.js → chunk-JO4SAEHH.js} +3 -3
  38. package/dist/{chunk-ZV6GOXYA.js → chunk-JVNQNKHV.js} +1 -1
  39. package/dist/{chunk-RO2NZJHZ.js → chunk-JWMJMQRF.js} +4 -4
  40. package/dist/{chunk-4IB5WUY2.js → chunk-KVGK2JL3.js} +6 -6
  41. package/dist/{chunk-TS2YACAQ.js → chunk-LYX2RRSF.js} +2 -2
  42. package/dist/{chunk-W774NREK.js → chunk-MGF346ND.js} +3 -3
  43. package/dist/{chunk-UDRBQI5J.js → chunk-N33OOF3K.js} +10 -10
  44. package/dist/{chunk-WS5E73JO.js → chunk-NEBMTP7T.js} +6 -6
  45. package/dist/{chunk-L7RPNSAA.js → chunk-NO6E72RM.js} +2 -2
  46. package/dist/{chunk-UXGWAAGQ.js → chunk-OHTMTMFX.js} +4 -4
  47. package/dist/{chunk-XSUM3E67.js → chunk-OP2L7OXA.js} +3 -3
  48. package/dist/{chunk-YGX72FUQ.js → chunk-QRIE4JZE.js} +3 -3
  49. package/dist/{chunk-XEJ5USHY.js → chunk-QWSAZGH6.js} +6 -6
  50. package/dist/{chunk-QBBZGVZJ.js → chunk-RCAMBC3H.js} +3 -3
  51. package/dist/{chunk-KDSKFXPE.js → chunk-RJZZFAXS.js} +1 -1
  52. package/dist/{chunk-QTAADTIO.js → chunk-T6ALNN3H.js} +1 -1
  53. package/dist/{chunk-DUG3JXAT.js → chunk-UZIAZXXO.js} +1 -1
  54. package/dist/{chunk-LXOBWRVC.js → chunk-W246VXU4.js} +3 -3
  55. package/dist/{chunk-J2X5CTYY.js → chunk-WR2GRWK3.js} +1 -1
  56. package/dist/{chunk-QUOITPN7.js → chunk-WX2HW2G2.js} +8 -1
  57. package/dist/{chunk-HDLON3RJ.js → chunk-X7M73LKT.js} +9 -2
  58. package/dist/{chunk-FRETDGET.js → chunk-Z4LFCJT6.js} +3 -3
  59. package/dist/{claude-launcher-SGZSOGKZ.js → claude-launcher-LYGS66AC.js} +1 -1
  60. package/dist/{cli-6QN7TH6U.js → cli-HVBFWC3J.js} +114 -113
  61. package/dist/{command-6T6RI5XY.js → command-J3CDQLWC.js} +27 -27
  62. package/dist/{config-CWYMIXTV.js → config-5NWSCHIO.js} +9 -9
  63. package/dist/{connect-cmd-MY6SR4OK.js → connect-cmd-HB3K3AHE.js} +6 -6
  64. package/dist/{container-start-FDXR4QND.js → container-start-YLKDT2JG.js} +33 -33
  65. package/dist/{context-show-cmd-WRTV3ACH.js → context-show-cmd-RJIQS2KF.js} +7 -7
  66. package/dist/{control-plane-launch-UM4IHOJQ.js → control-plane-launch-TS4DFJF4.js} +5 -5
  67. package/dist/{demo-record-cmd-XBWTORVM.js → demo-record-cmd-VVZGUCWB.js} +4 -4
  68. package/dist/{demo-voice-cmd-FLU4GDKS.js → demo-voice-cmd-3ADGIWK6.js} +13 -13
  69. package/dist/{dist-ADKRGE7I.js → dist-BUSLJNSZ.js} +1 -1
  70. package/dist/{docker-IUPWQ2RK.js → docker-5VGCFZV2.js} +7 -7
  71. package/dist/{doctor-5VNZ2BLY.js → doctor-AG73VZNG.js} +28 -28
  72. package/dist/{emit-artifact-cmd-RDXIWRFU.js → emit-artifact-cmd-WJT7AXTZ.js} +11 -11
  73. package/dist/{emit-criteria-cmd-EDJOWGKL.js → emit-criteria-cmd-45IYB535.js} +8 -8
  74. package/dist/{emit-demo-cmd-W3BXFFU3.js → emit-demo-cmd-AIIQNPXS.js} +13 -13
  75. package/dist/{emit-finding-cmd-TMZIOQIP.js → emit-finding-cmd-6YTJK2NA.js} +8 -8
  76. package/dist/{emit-result-cmd-P55JBD2W.js → emit-result-cmd-TZGFY743.js} +10 -10
  77. package/dist/{emit-step-cmd-Y7LKI7L3.js → emit-step-cmd-LGBTIAXC.js} +8 -8
  78. package/dist/{exec-client-FB3OBHOJ.js → exec-client-LR67CA24.js} +3 -3
  79. package/dist/find-unit-YGDFVHVU.js +19 -0
  80. package/dist/{findings-cmd-D64BYS7Z.js → findings-cmd-ETJXUDQI.js} +8 -8
  81. package/dist/{fleet-readiness-75KQEZ6E.js → fleet-readiness-MYIMDBF7.js} +5 -5
  82. package/dist/{governing-source-YYEU46PP.js → governing-source-GBJTVMK2.js} +10 -10
  83. package/dist/{guest-init-SGF6ZVZN.js → guest-init-GXPOW53F.js} +4 -4
  84. package/dist/{hook-fast-XX5HZOCR.js → hook-fast-5WOGLR7V.js} +1 -1
  85. package/dist/{host-checks-VKBAGGWH.js → host-checks-6G2F2HTK.js} +31 -31
  86. package/dist/{pending-GEDI4K7P.js → host-key-GAZM4EOH.js} +3 -3
  87. package/dist/{image-tag-MRWNQGXA.js → image-tag-OYHGRHVV.js} +3 -3
  88. package/dist/index.js +4 -4
  89. package/dist/{init-B5S5LMIL.js → init-7VWIU5TG.js} +24 -24
  90. package/dist/{init-BB2TLXVB.js → init-Y2OJSOAA.js} +24 -24
  91. package/dist/{init-cmd-I2Z4VZSG.js → init-cmd-77XKBRUF.js} +11 -11
  92. package/dist/{init-update-TIZILQXL.js → init-update-TXQHBY3H.js} +9 -9
  93. package/dist/{install-cmd-X4OHS36T.js → install-cmd-VZGXSS73.js} +5 -5
  94. package/dist/{logs-BPEOYWRW.js → logs-42QPBCMC.js} +2 -2
  95. package/dist/{loop-XULUT5HL.js → loop-FRT5NSFG.js} +38 -38
  96. package/dist/{machine-UYFUUSEQ.js → machine-TEG554M5.js} +24 -24
  97. package/dist/{mcp-serve-cmd-NCPWJJDZ.js → mcp-serve-cmd-LYJQO6U4.js} +4 -4
  98. package/dist/{paths-WXGOFVCF.js → paths-QLFRPIKS.js} +2 -2
  99. package/dist/{host-key-CNCHVNDC.js → pending-6DDSCXUD.js} +3 -3
  100. package/dist/{pidfile-MYLBUG2I.js → pidfile-WLZ427QQ.js} +3 -3
  101. package/dist/{record-Y2JIOP56.js → record-WGCMQLQS.js} +3 -3
  102. package/dist/{runner-env-Y2PBG7TR.js → runner-env-6FSJOSWS.js} +11 -11
  103. package/dist/{runner-identity-PL442M57.js → runner-identity-XODZ7YBP.js} +7 -7
  104. package/dist/{runner-key-L6LXC4QA.js → runner-key-T3V7N7CL.js} +24 -24
  105. package/dist/{session-sender-AXROAZSC.js → session-sender-U54EQJNR.js} +11 -11
  106. package/dist/{spec-cmd-JG4QLGGJ.js → spec-cmd-EM24GTAM.js} +9 -9
  107. package/dist/{status-VOGNQ3NG.js → status-4YO4TUEH.js} +31 -31
  108. package/dist/{sync-cmd-B3KQZJZO.js → sync-cmd-Y5RKWVF7.js} +10 -10
  109. package/dist/{update-steps-RSYFLNTL.js → update-steps-KNN4Y2ZU.js} +32 -32
  110. package/dist/{watch-IHZRBUYV.js → watch-X5VYY4LH.js} +10 -10
  111. package/dist/{work-claim-cmd-YEMHNW3H.js → work-claim-cmd-IU3YJQKR.js} +15 -15
  112. package/dist/{work-cmd-OWZS3ZXL.js → work-cmd-LUKJHAMH.js} +8 -8
  113. package/dist/{work-comment-cmd-ESBYAE4K.js → work-comment-cmd-BDNFAVKL.js} +9 -9
  114. package/dist/{work-demo-cmd-FT3FQWM7.js → work-demo-cmd-GPDJHU6F.js} +8 -8
  115. package/dist/{work-logs-cmd-K6NTURGR.js → work-logs-cmd-B6EX4RPE.js} +8 -8
  116. package/dist/{work-open-pr-cmd-NGD4Z2TO.js → work-open-pr-cmd-TRXDCMSG.js} +9 -9
  117. package/dist/{work-pr-cmd-274YUPQB.js → work-pr-cmd-5GUR5SIU.js} +8 -8
  118. package/dist/{work-proofs-cmd-JLSQHVKO.js → work-proofs-cmd-PBY7WNYI.js} +9 -9
  119. package/dist/{work-proofs-record-AYUWUFBE.js → work-proofs-record-AVKJFZOD.js} +16 -16
  120. package/dist/{work-stop-cmd-VQLLLJ3H.js → work-stop-cmd-J47GZB2N.js} +8 -8
  121. package/package.json +1 -1
  122. package/skill-pack/maintained/outerlayer-build/SKILL.md +15 -0
  123. package/dist/build-ZDYL7ZGP.js +0 -18
  124. package/dist/find-unit-R4I5GJCH.js +0 -19
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { keepHandWritten, runAgentSetup } from './chunk-N752ZNZ5.js';
3
+ export { keepHandWritten, runAgentSetup } from './chunk-FVVHQIZR.js';
4
4
  import './chunk-TWFBOZQ5.js';
5
5
  import './chunk-KT4CN6OU.js';
6
6
  import './chunk-J7EJMIDR.js';
7
7
  import './chunk-ANPNT6PM.js';
8
8
  import './chunk-LYCJQOO2.js';
9
- import './chunk-M6YTST7G.js';
9
+ import './chunk-36M4KVBT.js';
10
10
  import './chunk-LMYRR5MO.js';
11
- import './chunk-T375XV3H.js';
11
+ import './chunk-62URQYCB.js';
12
12
  import './chunk-PJDQPF5N.js';
13
- import './chunk-KDSKFXPE.js';
13
+ import './chunk-RJZZFAXS.js';
14
14
  import './chunk-ZJSNLVCE.js';
15
15
  import './chunk-BJ3KTMDH.js';
16
16
  import './chunk-OVNF4LLC.js';
@@ -24,8 +24,8 @@ import './chunk-TUSYOL2O.js';
24
24
  import './chunk-XFJ7YOPD.js';
25
25
  import './chunk-DINRXUQA.js';
26
26
  import './chunk-VNVZDWO3.js';
27
- import './chunk-I2GHZ2VA.js';
28
- import './chunk-Z7THNFUU.js';
27
+ import './chunk-3VJYDWFV.js';
28
+ import './chunk-GMKDAF37.js';
29
29
  import './chunk-MESOOLF4.js';
30
30
  import './chunk-Z5GEFMRW.js';
31
31
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { BRIDGE_ADDRESS, BRIDGE_CIDR, CONTAINER_NO_PROXY, CONTAINER_PROXY, TUNNEL_PORT, dockerClientConfig, startBridgeForward, writeDockerClientConfig } from './chunk-XZGURZHF.js';
4
- import './chunk-Z7THNFUU.js';
3
+ export { BRIDGE_ADDRESS, BRIDGE_CIDR, CONTAINER_NO_PROXY, CONTAINER_PROXY, TUNNEL_PORT, dockerClientConfig, startBridgeForward, writeDockerClientConfig } from './chunk-GPO7F757.js';
4
+ import './chunk-GMKDAF37.js';
5
5
  import './chunk-MESOOLF4.js';
6
6
  import './chunk-Z5GEFMRW.js';
7
7
 
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ export { KEY_PREFIX, SHARED_NAME, SHARED_OWNER, SHARED_REPOSITORY, TAG_HOST, baseLines, buildRepositoryImage, metadataFromLabels, prepareImageBuild, writeRecord } from './chunk-5FHBVV25.js';
4
+ import './chunk-CMMEJJTL.js';
5
+ import './chunk-FLHBUQ2W.js';
6
+ export { RecipeError } from './chunk-X7M73LKT.js';
7
+ import './chunk-WX2HW2G2.js';
8
+ import './chunk-3FTIUB7I.js';
9
+ import './chunk-JBJTC3UU.js';
10
+ import './chunk-RJZZFAXS.js';
11
+ import './chunk-A6PJSNP6.js';
12
+ import './chunk-DINRXUQA.js';
13
+ import './chunk-3VJYDWFV.js';
14
+ import './chunk-GMKDAF37.js';
15
+ import './chunk-MESOOLF4.js';
16
+ import './chunk-Z5GEFMRW.js';
17
+
18
+ createRequire(import.meta.url);
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK, DOCKER_CACHE_MS, allocatedBytes, checkDiskFit, realBuildDiskProbe, runDocker, volumeBytes } from './chunk-TS2YACAQ.js';
4
- import './chunk-UYWGR35C.js';
5
- import './chunk-HDLON3RJ.js';
6
- import './chunk-QUOITPN7.js';
7
- import './chunk-KDSKFXPE.js';
8
- import './chunk-OOD5NDQA.js';
3
+ export { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK, DOCKER_CACHE_MS, allocatedBytes, checkDiskFit, realBuildDiskProbe, runDocker, volumeBytes } from './chunk-LYX2RRSF.js';
4
+ import './chunk-FLHBUQ2W.js';
5
+ import './chunk-X7M73LKT.js';
6
+ import './chunk-WX2HW2G2.js';
7
+ import './chunk-RJZZFAXS.js';
8
+ import './chunk-A6PJSNP6.js';
9
9
  import './chunk-DINRXUQA.js';
10
- import './chunk-I2GHZ2VA.js';
11
- import './chunk-Z7THNFUU.js';
10
+ import './chunk-3VJYDWFV.js';
11
+ import './chunk-GMKDAF37.js';
12
12
  import './chunk-MESOOLF4.js';
13
13
  import './chunk-Z5GEFMRW.js';
14
14
 
@@ -1 +1 @@
1
- {"id":"2026-10-27T12:15:21.059Z+364ef72","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-27T16:28:14.920Z+d66ae09","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-UYWGR35C.js';
4
- import './chunk-HDLON3RJ.js';
5
- import './chunk-QUOITPN7.js';
6
- import './chunk-KDSKFXPE.js';
7
- import './chunk-OOD5NDQA.js';
3
+ export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-FLHBUQ2W.js';
4
+ import './chunk-X7M73LKT.js';
5
+ import './chunk-WX2HW2G2.js';
6
+ import './chunk-RJZZFAXS.js';
7
+ import './chunk-A6PJSNP6.js';
8
8
  import './chunk-DINRXUQA.js';
9
- import './chunk-I2GHZ2VA.js';
10
- import './chunk-Z7THNFUU.js';
9
+ import './chunk-3VJYDWFV.js';
10
+ import './chunk-GMKDAF37.js';
11
11
  import './chunk-MESOOLF4.js';
12
12
  import './chunk-Z5GEFMRW.js';
13
13
 
@@ -1,64 +1,64 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-LTMFHECB.js';
3
+ import { probeCredentials } from './chunk-CKVJSOY3.js';
4
4
  import './chunk-3JVYMD4G.js';
5
- import './chunk-4IB5WUY2.js';
5
+ import './chunk-KVGK2JL3.js';
6
6
  import './chunk-E7R2GIAW.js';
7
7
  import './chunk-MH6QLXUO.js';
8
- import './chunk-DUG3JXAT.js';
9
- import './chunk-W774NREK.js';
10
- import './chunk-PBZODW5X.js';
11
- import './chunk-SJY6A6EH.js';
8
+ import './chunk-UZIAZXXO.js';
9
+ import './chunk-MGF346ND.js';
10
+ import './chunk-BS4CZMT6.js';
11
+ import './chunk-BCIBSJZH.js';
12
12
  import './chunk-6CK2OC4Q.js';
13
13
  import './chunk-ZVB57WI6.js';
14
- import './chunk-6SJ3DJDH.js';
14
+ import './chunk-5ARXP3BP.js';
15
15
  import './chunk-I3LTIAOR.js';
16
- import './chunk-YGX72FUQ.js';
17
- import './chunk-B7LPFCIN.js';
18
- import './chunk-QBBZGVZJ.js';
16
+ import './chunk-QRIE4JZE.js';
17
+ import './chunk-7SJNVGVC.js';
18
+ import './chunk-RCAMBC3H.js';
19
19
  import './chunk-ESVW4MJY.js';
20
- import './chunk-XZGURZHF.js';
21
- import { managedProblems, managedFactsOf } from './chunk-XEJ5USHY.js';
22
- import './chunk-J2X5CTYY.js';
20
+ import './chunk-GPO7F757.js';
21
+ import { managedProblems, managedFactsOf } from './chunk-QWSAZGH6.js';
22
+ import './chunk-WR2GRWK3.js';
23
23
  import './chunk-TBT347UY.js';
24
- import { findServiceUnit } from './chunk-JKOONI3H.js';
24
+ import { findServiceUnit } from './chunk-7TLGRE5F.js';
25
25
  import './chunk-TZMDRHWB.js';
26
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, HELPER_ENV, helperSocketPath, probeHelper, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-ARPPH7VS.js';
26
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, HELPER_ENV, helperSocketPath, probeHelper, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-J3Q3QCOF.js';
27
27
  import './chunk-2PGI6RDE.js';
28
- import './chunk-SGT7YU3X.js';
29
- import './chunk-UC4OSOQS.js';
28
+ import './chunk-5FHBVV25.js';
29
+ import './chunk-CMMEJJTL.js';
30
30
  import './chunk-OGFGZQA3.js';
31
- import './chunk-ZV6GOXYA.js';
32
- import './chunk-RMJSYOSV.js';
33
- import './chunk-66TKWWTX.js';
34
- import './chunk-HO4XRLAZ.js';
31
+ import './chunk-JVNQNKHV.js';
32
+ import './chunk-BS3OYFAD.js';
33
+ import './chunk-7Q7GQELE.js';
34
+ import './chunk-CFJOONWM.js';
35
35
  import './chunk-TQMI335S.js';
36
- import './chunk-XSUM3E67.js';
37
- import './chunk-UXGWAAGQ.js';
38
- import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-RO2NZJHZ.js';
39
- import './chunk-TS2YACAQ.js';
40
- import './chunk-UYWGR35C.js';
41
- import './chunk-HDLON3RJ.js';
42
- import './chunk-QUOITPN7.js';
43
- import './chunk-W5EKMK37.js';
36
+ import './chunk-OP2L7OXA.js';
37
+ import './chunk-OHTMTMFX.js';
38
+ import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-JWMJMQRF.js';
39
+ import './chunk-LYX2RRSF.js';
40
+ import './chunk-FLHBUQ2W.js';
41
+ import './chunk-X7M73LKT.js';
42
+ import './chunk-WX2HW2G2.js';
43
+ import './chunk-3FTIUB7I.js';
44
44
  import './chunk-JBJTC3UU.js';
45
45
  import './chunk-KT4CN6OU.js';
46
46
  import './chunk-J7EJMIDR.js';
47
- import './chunk-NGZBVN6F.js';
47
+ import './chunk-6IMQXBTZ.js';
48
48
  import './chunk-IP7BIBXJ.js';
49
- import './chunk-YIBHQR3B.js';
50
- import './chunk-L7RPNSAA.js';
49
+ import './chunk-EYJRVHBN.js';
50
+ import './chunk-NO6E72RM.js';
51
51
  import './chunk-NWHU5G6R.js';
52
52
  import './chunk-G2JWZDFA.js';
53
53
  import './chunk-ANPNT6PM.js';
54
54
  import './chunk-IXPH4EXK.js';
55
55
  import './chunk-LYCJQOO2.js';
56
- import './chunk-M6YTST7G.js';
56
+ import './chunk-36M4KVBT.js';
57
57
  import './chunk-LMYRR5MO.js';
58
- import './chunk-T375XV3H.js';
58
+ import './chunk-62URQYCB.js';
59
59
  import './chunk-PJDQPF5N.js';
60
- import './chunk-KDSKFXPE.js';
61
- import './chunk-CHDWAWQA.js';
60
+ import './chunk-RJZZFAXS.js';
61
+ import './chunk-4QQJTJUN.js';
62
62
  import './chunk-ZJSNLVCE.js';
63
63
  import './chunk-2O5KA67H.js';
64
64
  import './chunk-BKO6JEZI.js';
@@ -66,7 +66,7 @@ import './chunk-FGF52V4V.js';
66
66
  import './chunk-HCVLP7XA.js';
67
67
  import './chunk-BJ3KTMDH.js';
68
68
  import './chunk-OVNF4LLC.js';
69
- import './chunk-OOD5NDQA.js';
69
+ import './chunk-A6PJSNP6.js';
70
70
  import './chunk-5BHIBJDA.js';
71
71
  import './chunk-CDDED64E.js';
72
72
  import './chunk-RA3O54FC.js';
@@ -80,8 +80,8 @@ import './chunk-TUSYOL2O.js';
80
80
  import './chunk-XFJ7YOPD.js';
81
81
  import './chunk-DINRXUQA.js';
82
82
  import './chunk-VNVZDWO3.js';
83
- import './chunk-I2GHZ2VA.js';
84
- import { claudeEnvPath, parseRunnerEnv } from './chunk-Z7THNFUU.js';
83
+ import './chunk-3VJYDWFV.js';
84
+ import { claudeEnvPath, parseRunnerEnv } from './chunk-GMKDAF37.js';
85
85
  import './chunk-MESOOLF4.js';
86
86
  import './chunk-Z5GEFMRW.js';
87
87
  import { readFileSync } from 'fs';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { launcherPath, pathNotes, writeLauncher, LauncherWriteError } from './chunk-LHUZVM3L.js';
4
- import { currentVersion, currentLink, versionDir, execStartLine, isInLayout, packageRootIn, switchCurrent } from './chunk-J2X5CTYY.js';
3
+ import { launcherPath, pathNotes, writeLauncher, LauncherWriteError } from './chunk-AV5T7HV3.js';
4
+ import { currentVersion, currentLink, versionDir, execStartLine, isInLayout, packageRootIn, switchCurrent } from './chunk-WR2GRWK3.js';
5
5
  import { compareVersions } from './chunk-TQMI335S.js';
6
- import { runnerDir, RUNNER_DIR_MODE } from './chunk-I2GHZ2VA.js';
6
+ import { runnerDir, RUNNER_DIR_MODE } from './chunk-3VJYDWFV.js';
7
7
  import { lchownSync, lstatSync, realpathSync, readFileSync, mkdirSync, rmSync, cpSync, existsSync, readdirSync } from 'fs';
8
8
  import { dirname, sep, join } from 'path';
9
9
  import { spawnSync } from 'child_process';
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { removeRetiredSkills } from './chunk-LMYRR5MO.js';
4
- import { defaultFetch, resolveGatewayCredentials } from './chunk-T375XV3H.js';
4
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-62URQYCB.js';
5
5
  import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
6
6
  import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-OVNF4LLC.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';
8
8
  import { writeDegraded, writeSourceCache, SOURCE_CACHE_TTL_RETRY_MS, writeContextManifest, SOURCE_CACHE_TTL_SUCCESS_MS, readSourceCache, isSourceCacheFresh, clearDegraded } from './chunk-YQR6E6OV.js';
9
9
  import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-XFJ7YOPD.js';
10
10
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
11
- import { withTokenHeader } from './chunk-Z7THNFUU.js';
11
+ import { withTokenHeader } from './chunk-GMKDAF37.js';
12
12
  import { execFileSync } from 'child_process';
13
13
  import { existsSync, mkdirSync, writeFileSync, chmodSync, lstatSync, readFileSync, copyFileSync } from 'fs';
14
14
  import { isAbsolute, join, dirname } from 'path';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { isSameProcess } from './chunk-JBJTC3UU.js';
4
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-I2GHZ2VA.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-3VJYDWFV.js';
5
5
  import { existsSync, readFileSync, mkdirSync, writeFileSync, rmSync } from 'fs';
6
6
  import { dirname } from 'path';
7
7
 
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-B7LPFCIN.js';
3
+ import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-7SJNVGVC.js';
4
4
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
5
5
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
6
- import { autoConnect } from './chunk-YIBHQR3B.js';
6
+ import { autoConnect } from './chunk-EYJRVHBN.js';
7
7
  import { C } from './chunk-ANPNT6PM.js';
8
8
  import { readEffectiveArtifactSpoolState, localArtifactIds, isArtifactTombstoned, artifactBlobsDir, appendArtifactRecord, artifactsSpoolPath, findPendingArtifactRecord, sanitizeTerminal, appendArtifactTombstone } from './chunk-IXPH4EXK.js';
9
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-T375XV3H.js';
10
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
9
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-62URQYCB.js';
10
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
11
11
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
12
12
  import { cliInvocation } from './chunk-CRB3POP4.js';
13
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';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { BUILD_HOME } from './chunk-Z7THNFUU.js';
3
+ import { BUILD_HOME } from './chunk-GMKDAF37.js';
4
4
  import { join, dirname } from 'path';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -684,7 +684,7 @@ async function missingControlPlane(cwd, sessionId, home, env) {
684
684
  cleanupEarlierCopies(dirs);
685
685
  }
686
686
  if (!contextPossiblyGoverned(cwd, home)) return void 0;
687
- const { governanceOf } = await import('./control-plane-launch-UM4IHOJQ.js');
687
+ const { governanceOf } = await import('./control-plane-launch-TS4DFJF4.js');
688
688
  if (await governanceOf({ cwd, env, home }) !== "governed") return void 0;
689
689
  recordMissingContext(dirs, sessionId, home);
690
690
  const launcher = `${cliInvocation()} claude`;
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { TUNNEL_PORT, BRIDGE_ADDRESS, BRIDGE_CIDR } from './chunk-XZGURZHF.js';
4
- import { EXEC_PORT } from './chunk-RMJSYOSV.js';
3
+ import { TUNNEL_PORT, BRIDGE_ADDRESS, BRIDGE_CIDR } from './chunk-GPO7F757.js';
4
+ import { EXEC_PORT } from './chunk-BS3OYFAD.js';
5
5
  import { startTimeOf } from './chunk-JBJTC3UU.js';
6
- import { RELAY_PORT } from './chunk-Z7THNFUU.js';
6
+ import { RELAY_PORT } from './chunk-GMKDAF37.js';
7
7
  import { spawn, spawnSync } from 'child_process';
8
8
  import { symlinkSync, lstatSync, writeFileSync, chmodSync, mkdirSync, existsSync } from 'fs';
9
9
 
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { defaultDockerfile, toolsDockerfile } from './chunk-UC4OSOQS.js';
4
- import { runnerLabelValue } from './chunk-UYWGR35C.js';
5
- import { RecipeError, locateRecipe, readRecipe, assertBuildable, writeSanitizedRecipe, classifyProperties, SANITIZED_NAME } from './chunk-HDLON3RJ.js';
6
- import { CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, MEDIA_PINS, TINI_VERSION, GH_VERSION } from './chunk-QUOITPN7.js';
7
- import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-W5EKMK37.js';
3
+ import { toolsDockerfile } from './chunk-CMMEJJTL.js';
4
+ import { runnerLabelValue } from './chunk-FLHBUQ2W.js';
5
+ import { RecipeError, locateRecipe, readRecipe, assertBuildable, writeSanitizedRecipe, classifyProperties, SANITIZED_NAME } from './chunk-X7M73LKT.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-WX2HW2G2.js';
7
+ import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-3FTIUB7I.js';
8
8
  import { startTimeOf } from './chunk-JBJTC3UU.js';
9
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, repoCacheDir, imagesDir, imageBuildLogsDir, attemptStamp, runnerDir, rootfsPathFor } from './chunk-I2GHZ2VA.js';
10
- import { withGitConfig, tokenHeader } from './chunk-Z7THNFUU.js';
9
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, repoCacheDir, imagesDir, imageBuildLogsDir, attemptStamp, runnerDir, rootfsPathFor } from './chunk-3VJYDWFV.js';
10
+ import { withGitConfig, tokenHeader } from './chunk-GMKDAF37.js';
11
11
  import { mkdirSync, rmSync, writeFileSync, existsSync, mkdtempSync, cpSync, readFileSync, readdirSync, lstatSync, readlinkSync } from 'fs';
12
12
  import { tmpdir } from 'os';
13
13
  import { dirname, join } from 'path';
@@ -167,8 +167,8 @@ function hashFile(root, rel) {
167
167
  const bytes = lstatSync(path).isSymbolicLink() ? Buffer.from(`-> ${readlinkSync(path)}`) : readFileSync(path);
168
168
  return [rel, "\0", bytes, "\0"];
169
169
  }
170
- function recipeKey(checkoutDir, location, defaultDockerfile2) {
171
- if (location.kind === "default") return sha256(defaultDockerfile2);
170
+ function recipeKey(checkoutDir, location, universalImage) {
171
+ if (location.kind === "default") return sha256("universal\0", universalImage);
172
172
  const files = [];
173
173
  if (existsSync(join(checkoutDir, ".devcontainer"))) files.push(...filesUnder(checkoutDir, ".devcontainer"));
174
174
  if (location.path === ".devcontainer.json") {
@@ -206,12 +206,20 @@ function selectPrunable(opts) {
206
206
  }
207
207
 
208
208
  // src/runner/image/build.ts
209
+ function baseLines(report) {
210
+ return report.base === void 0 ? [] : [` base: ${report.base.reference}@${report.base.digest}
211
+ `];
212
+ }
209
213
  var KIND2 = "ai.outerlayer.kind";
210
214
  var RUNNER2 = "ai.outerlayer.runner";
211
215
  var REPOSITORY = "ai.outerlayer.repository";
212
216
  var RECIPE_KEY2 = "ai.outerlayer.recipe-key";
213
217
  var TOOLS_KEY = "ai.outerlayer.tools-key";
214
218
  var KEEP_BUILD_IMAGES = 3;
219
+ var SHARED_OWNER = "_universal";
220
+ var SHARED_NAME = "image";
221
+ var SHARED_REPOSITORY = `${SHARED_OWNER}/${SHARED_NAME}`;
222
+ var SHARED_TAG_NAME = "universal";
215
223
  var TAG_HOST = "outerlayer.invalid";
216
224
  var KEY_PREFIX = 12;
217
225
  var LOCK_NAME = "build.lock";
@@ -265,7 +273,6 @@ async function prepareImageBuild(opts) {
265
273
  const now = opts.now ?? (() => /* @__PURE__ */ new Date());
266
274
  const claudeCodeVersion = opts.claudeCodeVersion ?? CLAUDE_CODE_VERSION;
267
275
  const nodeImage = opts.nodeImage ?? NODE_IMAGE;
268
- const baseImage = opts.defaultBaseImage ?? DEFAULT_BASE_IMAGE;
269
276
  const cacheDir = repoCacheDir(opts.configPath, owner, name);
270
277
  const repoRecords = join(imagesDir(opts.configPath), owner, name);
271
278
  const logPath = join(imageBuildLogsDir(opts.configPath, owner, name), `${attemptStamp(now())}.log`);
@@ -280,18 +287,54 @@ async function prepareImageBuild(opts) {
280
287
  }
281
288
  throw err;
282
289
  }
283
- const release = () => releasePidFile(lockPath, self);
290
+ let releaseShared = () => void 0;
291
+ const release = () => {
292
+ releaseShared();
293
+ releasePidFile(lockPath, self);
294
+ };
284
295
  try {
285
296
  const remote = opts.remote ?? `https://github.com/${owner}/${name}.git`;
286
297
  const checkout = opts.pinned === void 0 ? await fetchDefaultBranch({ remote, dir: cacheDir, token: opts.readToken, repository }) : await fetchPinnedCommit({ remote, dir: cacheDir, token: opts.readToken, repository, ...opts.pinned });
287
298
  const location = locateRecipe(checkout.dir);
288
299
  const recipe = readRecipe(checkout.dir, location);
289
300
  assertBuildable(checkout.dir, location, recipe);
290
- const defaultText = defaultDockerfile(baseImage, nodeImage);
291
- const rKey = recipeKey(checkout.dir, location, defaultText);
301
+ const shared = location.kind === "default";
302
+ const imageRepository = shared ? SHARED_REPOSITORY : repository;
303
+ const records = shared ? join(imagesDir(opts.configPath), SHARED_OWNER, SHARED_NAME) : repoRecords;
304
+ if (shared) {
305
+ mkdirSync(records, { recursive: true, mode: RUNNER_DIR_MODE });
306
+ const sharedLock = join(records, LOCK_NAME);
307
+ try {
308
+ claimPidFile(sharedLock, self);
309
+ } catch (err) {
310
+ if (err instanceof RunnerAlreadyRunningError) {
311
+ throw new RecipeError("build_in_progress", `an image build on the universal image is already running (pid ${err.pid})`);
312
+ }
313
+ throw err;
314
+ }
315
+ releaseShared = () => releasePidFile(sharedLock, self);
316
+ }
317
+ const rKey = recipeKey(checkout.dir, location, UNIVERSAL_IMAGE);
292
318
  const tKey = toolsKey({ buildId: opts.cli.buildId, claudeCodeVersion, nodeImage, ghVersion: GH_VERSION, tiniVersion: TINI_VERSION, guestHelperSha256: opts.guestHelper?.sha256, mediaPins: MEDIA_PINS });
293
- const recordDir = join(repoRecords, `${rKey.slice(0, KEY_PREFIX)}-${tKey.slice(0, KEY_PREFIX)}`);
294
- return { repository, owner, name, repoRecords, recordDir, checkout, location, recipe, recipeKey: rKey, toolsKey: tKey, defaultText, claudeCodeVersion, nodeImage, logPath, release };
319
+ const recordDir = join(records, `${rKey.slice(0, KEY_PREFIX)}-${tKey.slice(0, KEY_PREFIX)}`);
320
+ return {
321
+ repository,
322
+ owner,
323
+ name,
324
+ repoRecords: records,
325
+ imageRepository,
326
+ tagName: shared ? SHARED_TAG_NAME : repository,
327
+ recordDir,
328
+ checkout,
329
+ location,
330
+ recipe,
331
+ recipeKey: rKey,
332
+ toolsKey: tKey,
333
+ claudeCodeVersion,
334
+ nodeImage,
335
+ logPath,
336
+ release
337
+ };
295
338
  } catch (err) {
296
339
  release();
297
340
  throw err;
@@ -302,12 +345,13 @@ async function buildRepositoryImage(opts, ports) {
302
345
  const now = opts.now ?? (() => /* @__PURE__ */ new Date());
303
346
  const scratchRoot = opts.tmpDir ?? tmpdir();
304
347
  const prepared = await prepareImageBuild(opts);
305
- const { repository, repoRecords, checkout, location, recipe, recipeKey: rKey, toolsKey: tKey, defaultText, claudeCodeVersion, nodeImage, recordDir, logPath } = prepared;
348
+ const { repository, repoRecords, imageRepository, tagName, checkout, location, recipe, recipeKey: rKey, toolsKey: tKey, claudeCodeVersion, nodeImage, recordDir, logPath } = prepared;
349
+ const universal = location.kind === "default";
306
350
  const runnerLabel = runnerLabelValue(opts.configPath);
307
- const buildTag = `${TAG_HOST}/build/${repository}:${rKey.slice(0, KEY_PREFIX)}-${tKey.slice(0, KEY_PREFIX)}`;
308
- const recipeTag = `${TAG_HOST}/recipe/${repository}:${rKey.slice(0, KEY_PREFIX)}`;
351
+ const buildTag = `${TAG_HOST}/build/${tagName}:${rKey.slice(0, KEY_PREFIX)}-${tKey.slice(0, KEY_PREFIX)}`;
352
+ const recipeTag = `${TAG_HOST}/recipe/${tagName}:${rKey.slice(0, KEY_PREFIX)}`;
309
353
  try {
310
- const existing = await host.list(repository);
354
+ const existing = await host.list(imageRepository);
311
355
  const labelled = existing.find((i) => i.labels[KIND2] === "recipe" && i.labels[RECIPE_KEY2] === rKey);
312
356
  const recipeImageBefore = labelled !== void 0 && (await host.inspect(recipeTag))?.id === labelled.id ? labelled : void 0;
313
357
  const buildImageBefore = existing.find(
@@ -325,46 +369,36 @@ async function buildRepositoryImage(opts, ports) {
325
369
  const layoutKept = () => existsSync(join(keptLayout, "index.json"));
326
370
  let recipeImage = recipeImageBefore;
327
371
  let recipeBuilt = false;
328
- if (recipeImage === void 0 && buildImageBefore === void 0) {
372
+ if (!universal && recipeImage === void 0 && buildImageBefore === void 0) {
329
373
  await ensureBuilder();
330
374
  mkdirSync(join(repoRecords, LAYOUTS_DIR), { recursive: true, mode: RUNNER_DIR_MODE });
331
- const labels = { [REPOSITORY]: repository, [KIND2]: "recipe", [RUNNER2]: runnerLabel, [RECIPE_KEY2]: rKey };
332
- if (location.kind === "default") {
333
- const context = mkdtempSync(join(scratchRoot, "ol-image-default-"));
334
- try {
335
- const status = await host.buildDockerfile({ dockerfile: defaultText, context, tag: recipeTag, labels, logPath, layoutOut: keptLayout });
336
- if (status !== 0) throw failed("the docker build of the default image", status);
337
- } finally {
338
- rmSync(context, { recursive: true, force: true });
339
- }
340
- } else {
341
- const config = writeSanitizedRecipe(checkout.dir, location, recipe);
342
- const scratchLayouts = mkdtempSync(join(scratchRoot, "ol-image-layout-"));
343
- const scratchLayout = join(scratchLayouts, "layout");
375
+ const labels = { [REPOSITORY]: imageRepository, [KIND2]: "recipe", [RUNNER2]: runnerLabel, [RECIPE_KEY2]: rKey };
376
+ const config = writeSanitizedRecipe(checkout.dir, location, recipe);
377
+ const scratchLayouts = mkdtempSync(join(scratchRoot, "ol-image-layout-"));
378
+ const scratchLayout = join(scratchLayouts, "layout");
379
+ try {
380
+ const status = await host.devcontainerBuild({ workspace: checkout.dir, config, imageName: recipeTag, labels, logPath, layoutOut: scratchLayout });
381
+ if (status !== 0) throw failed("devcontainer build", status);
382
+ if (!existsSync(join(scratchLayout, "index.json"))) throw failed("devcontainer build, which left no image to label,", 0);
383
+ const context = mkdtempSync(join(scratchRoot, "ol-image-label-"));
344
384
  try {
345
- const status = await host.devcontainerBuild({ workspace: checkout.dir, config, imageName: recipeTag, labels, logPath, layoutOut: scratchLayout });
346
- if (status !== 0) throw failed("devcontainer build", status);
347
- if (!existsSync(join(scratchLayout, "index.json"))) throw failed("devcontainer build, which left no image to label,", 0);
348
- const context = mkdtempSync(join(scratchRoot, "ol-image-label-"));
349
- try {
350
- const relabel = await host.buildDockerfile({
351
- dockerfile: `FROM ${recipeTag}
385
+ const relabel = await host.buildDockerfile({
386
+ dockerfile: `FROM ${recipeTag}
352
387
  `,
353
- context,
354
- tag: recipeTag,
355
- labels,
356
- logPath,
357
- base: { ref: recipeTag, layout: scratchLayout },
358
- layoutOut: keptLayout
359
- });
360
- if (relabel !== 0) throw failed("labelling the recipe image", relabel);
361
- } finally {
362
- rmSync(context, { recursive: true, force: true });
363
- }
388
+ context,
389
+ tag: recipeTag,
390
+ labels,
391
+ logPath,
392
+ base: { ref: recipeTag, layout: scratchLayout },
393
+ layoutOut: keptLayout
394
+ });
395
+ if (relabel !== 0) throw failed("labelling the recipe image", relabel);
364
396
  } finally {
365
- rmSync(config, { force: true });
366
- rmSync(scratchLayouts, { recursive: true, force: true });
397
+ rmSync(context, { recursive: true, force: true });
367
398
  }
399
+ } finally {
400
+ rmSync(config, { force: true });
401
+ rmSync(scratchLayouts, { recursive: true, force: true });
368
402
  }
369
403
  recipeImage = await host.inspect(recipeTag) ?? void 0;
370
404
  if (recipeImage === void 0) throw failed("finding the recipe image after devcontainer build", 0);
@@ -373,7 +407,7 @@ async function buildRepositoryImage(opts, ports) {
373
407
  let buildImage = buildImageBefore;
374
408
  if (buildImage === void 0) {
375
409
  await ensureBuilder();
376
- if (!layoutKept()) await host.exportLayout(recipeTag, keptLayout);
410
+ if (!universal && !layoutKept()) await host.exportLayout(recipeTag, keptLayout);
377
411
  const context = mkdtempSync(join(scratchRoot, "ol-image-tools-"));
378
412
  try {
379
413
  cpSync(opts.cli.distDir, join(context, "dist"), { recursive: true });
@@ -383,9 +417,16 @@ async function buildRepositoryImage(opts, ports) {
383
417
  mkdirSync(join(context, "guest"));
384
418
  cpSync(opts.guestHelper.path, join(context, "guest", "outerlayer-guest"));
385
419
  }
386
- const dockerfile = toolsDockerfile({ recipeImage: recipeTag, nodeImage, claudeCodeVersion, buildId: opts.cli.buildId, guestHelper: opts.guestHelper !== void 0 });
387
- const labels = { [REPOSITORY]: repository, [KIND2]: "build", [RUNNER2]: runnerLabel, [RECIPE_KEY2]: rKey, [TOOLS_KEY]: tKey };
388
- const status = await host.buildDockerfile({ dockerfile, context, tag: buildTag, labels, logPath, base: { ref: recipeTag, layout: keptLayout } });
420
+ const dockerfile = toolsDockerfile({
421
+ recipeImage: universal ? UNIVERSAL_IMAGE : recipeTag,
422
+ nodeImage,
423
+ claudeCodeVersion,
424
+ buildId: opts.cli.buildId,
425
+ guestHelper: opts.guestHelper !== void 0,
426
+ ...universal ? { universal: true } : {}
427
+ });
428
+ const labels = { [REPOSITORY]: imageRepository, [KIND2]: "build", [RUNNER2]: runnerLabel, [RECIPE_KEY2]: rKey, [TOOLS_KEY]: tKey };
429
+ const status = await host.buildDockerfile({ dockerfile, context, tag: buildTag, labels, logPath, ...universal ? {} : { base: { ref: recipeTag, layout: keptLayout } } });
389
430
  if (status !== 0) throw failed("the docker build of the tools layer", status);
390
431
  } finally {
391
432
  rmSync(context, { recursive: true, force: true });
@@ -401,6 +442,7 @@ async function buildRepositoryImage(opts, ports) {
401
442
  sourceCommit: checkout.commit,
402
443
  defaultBranch: checkout.defaultBranch,
403
444
  recipe: location.kind === "default" ? "default" : location.path,
445
+ ...universal ? { base: { reference: `${UNIVERSAL_IMAGE_REPOSITORY}:${UNIVERSAL_IMAGE_SOURCE}`, digest: UNIVERSAL_IMAGE_DIGEST } } : {},
404
446
  recipeKey: rKey,
405
447
  toolsKey: tKey,
406
448
  imageId: buildImage.id,
@@ -409,9 +451,12 @@ async function buildRepositoryImage(opts, ports) {
409
451
  ...classifyProperties(recipe, metadataOf(recipeImage ?? buildImage))
410
452
  };
411
453
  writeRecord(recordDir, report, now().toISOString());
454
+ } else if (universal) {
455
+ report = { ...report, repository, sourceCommit: checkout.commit, defaultBranch: checkout.defaultBranch };
412
456
  }
413
457
  const removed = [];
414
- if (toolsBuilt) removed.push(...await prune(host, repository, repoRecords, opts.keep ?? KEEP_BUILD_IMAGES, runnerDir(opts.configPath), runnerLabel));
458
+ if (toolsBuilt) removed.push(...await prune(host, imageRepository, repoRecords, opts.keep ?? KEEP_BUILD_IMAGES, runnerDir(opts.configPath), runnerLabel));
459
+ if (universal) removed.push(...await prune(host, repository, join(imagesDir(opts.configPath), prepared.owner, prepared.name), 0, runnerDir(opts.configPath), runnerLabel));
415
460
  return {
416
461
  reused: !recipeBuilt && !toolsBuilt,
417
462
  recipeBuilt,
@@ -448,4 +493,4 @@ async function prune(host, repository, repoRecords, keep, runnerDirPath, runnerL
448
493
  return removed;
449
494
  }
450
495
 
451
- export { KEY_PREFIX, TAG_HOST, buildRepositoryImage, cloneRepository, diffBetween, fetchCommit, metadataFromLabels, prepareImageBuild, readBranchHead, readDefaultBranchHead, writeRecord };
496
+ export { KEY_PREFIX, SHARED_NAME, SHARED_OWNER, SHARED_REPOSITORY, TAG_HOST, baseLines, buildRepositoryImage, cloneRepository, diffBetween, fetchCommit, metadataFromLabels, prepareImageBuild, readBranchHead, readDefaultBranchHead, writeRecord };
@@ -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-KDSKFXPE.js';
4
+ import { signRunnerRequest, signerFor } from './chunk-RJZZFAXS.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';