@outerlayer/cli 0.34.0-next.20261025133402 → 0.34.0-next.20261025210240

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 (123) hide show
  1. package/dist/{agent-setup-UXUWLV7O.js → agent-setup-FNDKCPUP.js} +8 -9
  2. package/dist/{bridge-OWCSVCXL.js → bridge-YJBB4YA3.js} +2 -3
  3. package/dist/build-B4OKU4MV.js +16 -0
  4. package/dist/{build-disk-5ZQHYBO3.js → build-disk-ZL46AEN3.js} +6 -8
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-54GLXGFV.js → builder-XFPWE74N.js} +5 -7
  7. package/dist/{check-4TQZZOIQ.js → check-QULEN437.js} +43 -43
  8. package/dist/{chunk-CXQCBAKO.js → chunk-25GRRBTH.js} +1 -1
  9. package/dist/{chunk-4XYC2663.js → chunk-2D6CKNR7.js} +8 -4
  10. package/dist/{chunk-IHY457PB.js → chunk-2ILU7UAU.js} +1 -1
  11. package/dist/{chunk-JEOPIRUR.js → chunk-3EJBI5JW.js} +3 -3
  12. package/dist/{chunk-TVGLNHEB.js → chunk-3N77LUQI.js} +1 -1
  13. package/dist/{chunk-ES4ULBAL.js → chunk-4UPET3R7.js} +7 -3
  14. package/dist/{chunk-MPDLZCXM.js → chunk-5AFPP3GZ.js} +238 -14
  15. package/dist/{chunk-HAEDLXHA.js → chunk-63IVRRIO.js} +3 -3
  16. package/dist/{chunk-BTG5NZHN.js → chunk-6OLVVAOK.js} +4 -4
  17. package/dist/{chunk-3M6UYJSR.js → chunk-AVPLEFQR.js} +3 -3
  18. package/dist/{chunk-TVOZOOIW.js → chunk-BHSSGVOY.js} +3 -3
  19. package/dist/{chunk-QOUR4CQ7.js → chunk-CAQCDYKF.js} +2 -2
  20. package/dist/{chunk-SMMNU65K.js → chunk-DNZYXEMY.js} +13 -12
  21. package/dist/{chunk-LMICI7AY.js → chunk-EGVHFHY4.js} +3 -3
  22. package/dist/{chunk-RNVBSRZZ.js → chunk-FD5ASWTG.js} +18 -19
  23. package/dist/{chunk-NW5PDZYA.js → chunk-FDJPDZSR.js} +1 -1
  24. package/dist/{chunk-XA6PGME5.js → chunk-FVCHHSHB.js} +3 -3
  25. package/dist/{chunk-YOBQIXX6.js → chunk-G4W4B33M.js} +182 -3
  26. package/dist/{chunk-T7N3BAOO.js → chunk-GC5PVMIJ.js} +85 -17
  27. package/dist/{chunk-CCISO7EQ.js → chunk-HHFZXOBC.js} +12 -14
  28. package/dist/{chunk-AABYHGVO.js → chunk-INOUUSYI.js} +29 -9
  29. package/dist/{chunk-KDLQGTN6.js → chunk-JBCOUY4M.js} +2 -2
  30. package/dist/{chunk-POGPX7LI.js → chunk-JQSZTQSK.js} +24 -30
  31. package/dist/{chunk-JZD2NTRH.js → chunk-K2UAQWYO.js} +3 -3
  32. package/dist/{chunk-UC2DKBMS.js → chunk-KM2HLQE3.js} +2 -2
  33. package/dist/{chunk-XLJLR7EK.js → chunk-MOI2KDLH.js} +1 -1
  34. package/dist/{chunk-BUF6DSSM.js → chunk-NW26E4YU.js} +3 -3
  35. package/dist/{chunk-ZV2JJPDS.js → chunk-O4Z2MNNL.js} +6 -6
  36. package/dist/{chunk-2RBIW2PD.js → chunk-OGPEHSNW.js} +1 -1
  37. package/dist/{chunk-EZ7L5IZU.js → chunk-OQLF3MQQ.js} +3 -4
  38. package/dist/{chunk-J246WRLZ.js → chunk-OS7DJOQJ.js} +1 -1
  39. package/dist/{chunk-O5G6VQGZ.js → chunk-PFHTT4PP.js} +5 -5
  40. package/dist/{chunk-N7LAEN3T.js → chunk-PXGU3GKY.js} +1 -1
  41. package/dist/{chunk-WIK5KUGK.js → chunk-QANM5COC.js} +6 -6
  42. package/dist/{chunk-PSXVAOEB.js → chunk-QQP3S5FU.js} +3 -3
  43. package/dist/{chunk-AVLLJW5D.js → chunk-RFVIQLNB.js} +5 -5
  44. package/dist/{chunk-Z76GVJGQ.js → chunk-RHV5SRI2.js} +3 -3
  45. package/dist/{chunk-75KZUBHD.js → chunk-SI6WDF3U.js} +1 -1
  46. package/dist/chunk-SUOZYOWO.js +51 -0
  47. package/dist/{chunk-36T6W5RA.js → chunk-SYVRBBLW.js} +1 -1
  48. package/dist/{chunk-E34FRRSW.js → chunk-TBKV4L2W.js} +4 -4
  49. package/dist/{chunk-56ZHWIR2.js → chunk-TFPNPS4Q.js} +1 -1
  50. package/dist/{chunk-DUPM5LVJ.js → chunk-UMYYYF7B.js} +1 -1
  51. package/dist/{chunk-IW6Z337K.js → chunk-UN3SQTVL.js} +7 -7
  52. package/dist/{chunk-3NFZN7H6.js → chunk-UO4FQAOX.js} +16 -12
  53. package/dist/{chunk-ZWLEUSJW.js → chunk-VJ34F55N.js} +55 -39
  54. package/dist/{chunk-3RAAYBSG.js → chunk-YHKU2NOZ.js} +1 -1
  55. package/dist/{chunk-ENFBYN4A.js → chunk-YNMVVQOQ.js} +1 -1
  56. package/dist/{claude-launcher-JEB5BN7Q.js → claude-launcher-OQZNW7XJ.js} +1 -1
  57. package/dist/{cli-DY3EGPUB.js → cli-VHQPX2B7.js} +123 -117
  58. package/dist/{command-ZAXYAZCI.js → command-KFYK3WEF.js} +196 -60
  59. package/dist/{config-UN3X6AP2.js → config-QASNKYM6.js} +7 -9
  60. package/dist/{connect-cmd-TWM4FEKD.js → connect-cmd-MEDWMW3L.js} +8 -9
  61. package/dist/{container-start-JUNBJ7MU.js → container-start-2DHCWV73.js} +34 -36
  62. package/dist/{context-show-cmd-K5LRMDEO.js → context-show-cmd-VSFCG663.js} +9 -10
  63. package/dist/{control-plane-launch-LHOV2FPA.js → control-plane-launch-XBGHM7DB.js} +5 -6
  64. package/dist/{docker-YZKRM7IP.js → docker-TAC6G4VU.js} +5 -7
  65. package/dist/{doctor-YOAF7QPL.js → doctor-LK6E3XOW.js} +66 -41
  66. package/dist/{emit-artifact-cmd-SCF2FKKS.js → emit-artifact-cmd-L4REOPWX.js} +13 -14
  67. package/dist/{emit-cmd-7NMNKDK7.js → emit-cmd-7TU3JBJ2.js} +2 -2
  68. package/dist/{emit-criteria-cmd-B6CKUWTW.js → emit-criteria-cmd-QVFOQARC.js} +10 -11
  69. package/dist/{emit-demo-cmd-BNWRETMJ.js → emit-demo-cmd-L4B6OOTV.js} +15 -16
  70. package/dist/{emit-finding-cmd-TPSHNZNE.js → emit-finding-cmd-YXFCIWMU.js} +10 -11
  71. package/dist/{emit-result-cmd-J5DXIC2Q.js → emit-result-cmd-NI4LCTUM.js} +12 -13
  72. package/dist/{emit-step-cmd-NPH46KAO.js → emit-step-cmd-HWAUCZZB.js} +10 -11
  73. package/dist/{exec-client-ANW4KGMN.js → exec-client-QB4OZRGM.js} +3 -4
  74. package/dist/find-unit-4UR647S4.js +18 -0
  75. package/dist/{findings-cmd-4FJDCFL3.js → findings-cmd-O2IBO25E.js} +10 -11
  76. package/dist/{fleet-readiness-OK6534T6.js → fleet-readiness-NJYTQYTA.js} +5 -6
  77. package/dist/{governing-source-GNKTNM32.js → governing-source-JCI7VDQ6.js} +12 -13
  78. package/dist/{guest-init-C6M7YT3U.js → guest-init-IF5LXGUL.js} +4 -5
  79. package/dist/{hook-fast-LVTJWAG3.js → hook-fast-GPUL7T77.js} +1 -1
  80. package/dist/host-key-5RU322O3.js +9 -0
  81. package/dist/{image-tag-53DJPMSZ.js → image-tag-SEMBVB5D.js} +3 -4
  82. package/dist/index.js +4 -4
  83. package/dist/{init-RAJKTSPJ.js → init-2CEULE3F.js} +25 -27
  84. package/dist/{init-JGYMAOD5.js → init-FAIF7KOK.js} +25 -27
  85. package/dist/{init-cmd-IB3KTYCV.js → init-cmd-HZUUMO45.js} +13 -14
  86. package/dist/{init-update-VPWSWDY7.js → init-update-TTMFFNMB.js} +12 -13
  87. package/dist/{install-cmd-NP7GULCD.js → install-cmd-5H6M2KJ7.js} +5 -6
  88. package/dist/{logs-V6AES5FE.js → logs-6CMB3DO6.js} +2 -3
  89. package/dist/{loop-ZGDZMVFN.js → loop-7U7MVICV.js} +40 -42
  90. package/dist/{machine-LJ3VMGS3.js → machine-S3JHOX4V.js} +25 -27
  91. package/dist/{mcp-serve-cmd-DHGCAMJS.js → mcp-serve-cmd-MWGIN6YL.js} +4 -5
  92. package/dist/{paths-DMKAJVA5.js → paths-T2DEBI62.js} +2 -3
  93. package/dist/pending-ERXWVLLG.js +9 -0
  94. package/dist/{pidfile-XCTXBGA3.js → pidfile-EAD2OEM7.js} +3 -4
  95. package/dist/{record-RQLGRYWG.js → record-IMXQNHPB.js} +3 -4
  96. package/dist/{runner-env-AUG2OIP4.js → runner-env-BJPUHAKZ.js} +9 -11
  97. package/dist/{runner-identity-BQA4SBU6.js → runner-identity-ZCPPC2BJ.js} +5 -7
  98. package/dist/{runner-key-ZIF7M7YN.js → runner-key-CYSUYKSX.js} +25 -27
  99. package/dist/{session-sender-VQ4LHJ5K.js → session-sender-5T7BXPKC.js} +13 -14
  100. package/dist/{spec-cmd-PXM4FJ2O.js → spec-cmd-4ABYAFNZ.js} +11 -12
  101. package/dist/{status-27EFD2WE.js → status-2AP7J2L7.js} +32 -34
  102. package/dist/{sync-cmd-VAV7TR2A.js → sync-cmd-34CGNA6T.js} +12 -13
  103. package/dist/{update-steps-7YLAFW3E.js → update-steps-JQOCCDWO.js} +33 -35
  104. package/dist/{watch-42XJSTTB.js → watch-6HU7LCUY.js} +12 -13
  105. package/dist/{work-claim-cmd-HSG4OHFI.js → work-claim-cmd-5QKLHSCR.js} +16 -18
  106. package/dist/{work-cmd-KCBU3RSD.js → work-cmd-3MKUIE2C.js} +10 -11
  107. package/dist/{work-comment-cmd-QIP2OUJC.js → work-comment-cmd-ESC3DSHI.js} +11 -12
  108. package/dist/{work-demo-cmd-6IKAG6ES.js → work-demo-cmd-7S23DGYO.js} +10 -11
  109. package/dist/{work-logs-cmd-RMKJA4AI.js → work-logs-cmd-46UPNN7Q.js} +10 -11
  110. package/dist/{work-open-pr-cmd-IAVLUUWW.js → work-open-pr-cmd-JNGTGLIP.js} +11 -12
  111. package/dist/{work-pr-cmd-3U7SVQII.js → work-pr-cmd-2J2LKETD.js} +10 -11
  112. package/dist/{work-proofs-cmd-6ZY6ZNNE.js → work-proofs-cmd-HRWTHYSS.js} +11 -12
  113. package/dist/{work-proofs-record-54GBEUJP.js → work-proofs-record-6OKAT3IC.js} +18 -19
  114. package/dist/{work-stop-cmd-LH5XY4YL.js → work-stop-cmd-Y22XIVQ6.js} +10 -11
  115. package/package.json +1 -1
  116. package/dist/build-4HFDZTUX.js +0 -14
  117. package/dist/chunk-3Z3MPR55.js +0 -226
  118. package/dist/chunk-HACGUL52.js +0 -183
  119. package/dist/host-key-DUGGHAGR.js +0 -10
  120. package/dist/inspect-DNLXTXLA.js +0 -6
  121. package/dist/install-QJWJFIWB.js +0 -19
  122. package/dist/pending-B55JZFOV.js +0 -10
  123. package/dist/{chunk-2AIOOU3A.js → chunk-KPHRRCUY.js} +1 -1
@@ -1,50 +1,47 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { runRunnerInstall, launcherSummary, restartNote } from './chunk-T7N3BAOO.js';
4
- import './chunk-J246WRLZ.js';
5
- import { currentLink, execStartCommand } from './chunk-DUPM5LVJ.js';
6
- import { detectMachine, helperSocketPath, ensureFirecrackerAndJailer } from './chunk-POGPX7LI.js';
3
+ import { realOwnership, accountNamed, handOver, runRunnerInstall, launcherSummary, restartNote, accountIdentity } from './chunk-GC5PVMIJ.js';
4
+ import './chunk-OS7DJOQJ.js';
5
+ import { currentLink, execStartCommand } from './chunk-UMYYYF7B.js';
6
+ import { detectMachine, helperSocketPath, ensureFirecrackerAndJailer } from './chunk-JQSZTQSK.js';
7
7
  import './chunk-2PGI6RDE.js';
8
- import './chunk-EZ7L5IZU.js';
9
- import './chunk-3NFZN7H6.js';
10
- import './chunk-ENFBYN4A.js';
11
- import './chunk-JBJTC3UU.js';
8
+ import './chunk-UO4FQAOX.js';
12
9
  import './chunk-OGFGZQA3.js';
13
- import './chunk-IHY457PB.js';
14
- import './chunk-2RBIW2PD.js';
15
- import './chunk-AVLLJW5D.js';
16
- import './chunk-36T6W5RA.js';
10
+ import './chunk-2ILU7UAU.js';
11
+ import './chunk-OGPEHSNW.js';
12
+ import './chunk-RFVIQLNB.js';
13
+ import './chunk-SYVRBBLW.js';
17
14
  import './chunk-TQMI335S.js';
18
- import { DEFAULT_UNIT_NAME, installService, uninstallService, realTaskScheduler, UNIT_MARKER } from './chunk-AABYHGVO.js';
19
- import { runnerVmOf, loadRunnerConfig, builtinKind } from './chunk-4XYC2663.js';
20
- import './chunk-UC2DKBMS.js';
21
- import { readJobFile } from './chunk-MPDLZCXM.js';
22
- import './chunk-3Z3MPR55.js';
23
- import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, FIRECRACKER_BINARY_SHA256, JAILER_BINARY_SHA256, HOST_HELPER_SHA256, HOST_HELPER_BASE_URL, HOST_HELPER_ASSETS_VERSION, hostHelperPinned } from './chunk-ES4ULBAL.js';
15
+ import './chunk-OQLF3MQQ.js';
16
+ import { unitNameProblem, DEFAULT_UNIT_NAME, checkFit, installService, uninstallService, realTaskScheduler, UNIT_MARKER } from './chunk-INOUUSYI.js';
17
+ import { runnerVmOf, loadRunnerConfig, builtinKind } from './chunk-2D6CKNR7.js';
18
+ import './chunk-KM2HLQE3.js';
19
+ import { parseSize, readJobFile } from './chunk-5AFPP3GZ.js';
20
+ import { HOST_HELPER_ASSETS_VERSION, builderDiskPinned, hostHelperSupportsSlice, HOST_HELPER_SLICE_SINCE, firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, FIRECRACKER_BINARY_SHA256, JAILER_BINARY_SHA256, HOST_HELPER_SHA256, HOST_HELPER_BASE_URL, hostHelperPinned } from './chunk-4UPET3R7.js';
24
21
  import { realLima } from './chunk-77MM5RYD.js';
25
22
  import { writeLaunchAgent, launchAgentPath } from './chunk-LF6MLJCY.js';
26
- import './chunk-IW6Z337K.js';
23
+ import './chunk-YNMVVQOQ.js';
24
+ import './chunk-JBJTC3UU.js';
25
+ import './chunk-UN3SQTVL.js';
27
26
  import './chunk-IP7BIBXJ.js';
28
- import './chunk-3M6UYJSR.js';
29
- import './chunk-XA6PGME5.js';
30
- import './chunk-MECW77XP.js';
31
- import './chunk-AJYZNISW.js';
32
- import './chunk-NKOM4JKY.js';
27
+ import './chunk-AVPLEFQR.js';
28
+ import './chunk-FVCHHSHB.js';
33
29
  import './chunk-Y5YCX6AL.js';
34
30
  import './chunk-G2JWZDFA.js';
35
31
  import './chunk-ANPNT6PM.js';
36
- import './chunk-QOUR4CQ7.js';
32
+ import './chunk-MECW77XP.js';
33
+ import './chunk-NKOM4JKY.js';
34
+ import './chunk-CAQCDYKF.js';
37
35
  import './chunk-JWNH4ZTF.js';
38
- import './chunk-TVGLNHEB.js';
36
+ import './chunk-3N77LUQI.js';
39
37
  import './chunk-PJDQPF5N.js';
40
- import './chunk-XLJLR7EK.js';
41
- import { runnerDir } from './chunk-N7LAEN3T.js';
42
- import './chunk-YOBQIXX6.js';
38
+ import './chunk-MOI2KDLH.js';
43
39
  import './chunk-ZJSNLVCE.js';
44
40
  import './chunk-FGF52V4V.js';
45
41
  import './chunk-HCVLP7XA.js';
46
42
  import './chunk-BJ3KTMDH.js';
47
43
  import './chunk-ZQSANKS4.js';
44
+ import './chunk-AJYZNISW.js';
48
45
  import './chunk-5BHIBJDA.js';
49
46
  import './chunk-CDDED64E.js';
50
47
  import './chunk-RA3O54FC.js';
@@ -54,11 +51,12 @@ import './chunk-YQR6E6OV.js';
54
51
  import './chunk-FGXT5OXS.js';
55
52
  import './chunk-EOTMDIYC.js';
56
53
  import './chunk-VNVZDWO3.js';
57
- import './chunk-HACGUL52.js';
54
+ import { runnerDir, vmAssetsDir } from './chunk-PXGU3GKY.js';
55
+ import { CLAUDE_ENV_FILE } from './chunk-G4W4B33M.js';
58
56
  import './chunk-MESOOLF4.js';
59
57
  import './chunk-Z5GEFMRW.js';
60
58
  import { userInfo, totalmem, tmpdir } from 'os';
61
- import { join, dirname } from 'path';
59
+ import { dirname, join } from 'path';
62
60
  import { createHash } from 'crypto';
63
61
  import { rmSync, existsSync, readdirSync, mkdtempSync, writeFileSync, readFileSync, statSync, lstatSync } from 'fs';
64
62
  import { spawnSync } from 'child_process';
@@ -69,6 +67,7 @@ var ETC = "/etc/outerlayer";
69
67
  var UID_BASE = 2e9;
70
68
  var UID_COUNT = 256;
71
69
  var UID_ATTEMPTS = 8;
70
+ var UID_STEP = 65536;
72
71
  function helperUnitFor(unitName) {
73
72
  return `${unitName}-helper`;
74
73
  }
@@ -84,6 +83,23 @@ function helperConfigPathFor(unitName) {
84
83
  function helperUnitPathFor(unitName) {
85
84
  return `/etc/systemd/system/${helperUnitFor(unitName)}.service`;
86
85
  }
86
+ function sliceFor(unitName) {
87
+ return `${unitName}-builds.slice`;
88
+ }
89
+ function slicePathFor(unitName) {
90
+ return `/etc/systemd/system/${sliceFor(unitName)}`;
91
+ }
92
+ function sliceUnitText(unitName, limits) {
93
+ return `${UNIT_MARKER}
94
+ [Unit]
95
+ Description=OuterLayer builds of ${unitName}
96
+
97
+ [Slice]
98
+ ${limits.memoryMaxBytes === void 0 ? "" : `MemoryMax=${limits.memoryMaxBytes}
99
+ MemorySwapMax=0
100
+ `}${limits.cpus === void 0 ? "" : `CPUQuota=${Math.round(limits.cpus * 100)}%
101
+ `}`;
102
+ }
87
103
  function sha256Of(bytes) {
88
104
  return createHash("sha256").update(bytes).digest("hex");
89
105
  }
@@ -119,6 +135,7 @@ function helperConfigText(input) {
119
135
  socket: helperSocketFor(input.unitName),
120
136
  uidBase: input.uidBase,
121
137
  uidCount: UID_COUNT,
138
+ ...input.slice ? { slice: sliceFor(input.unitName) } : {},
122
139
  jailer: { path: `${dir}/jailer`, sha256: input.pins.jailer },
123
140
  firecracker: { path: `${dir}/firecracker`, sha256: input.pins.firecracker },
124
141
  firecrackerVersion: input.pins.firecrackerVersion
@@ -153,9 +170,28 @@ async function installHelper(request, deps) {
153
170
  `no directory that only root can write, below only such directories, is on the same file system as ${buildsRoot}, so the root helper was not installed: it links each build's files into its jail, and a link cannot cross file systems. ${without}`
154
171
  ]);
155
172
  }
156
- let uidBase = UID_BASE;
157
- for (let attempt = 0; attempt < UID_ATTEMPTS && !helper.uidRangeFree(uidBase, UID_COUNT); attempt++) uidBase += 65536;
158
- if (!helper.uidRangeFree(uidBase, UID_COUNT)) return notInstalled(true, [`every range of ${UID_COUNT} user ids that was tried is used by an account or a group, so the root helper was not installed: ${without}`]);
173
+ const others = helper.helperRanges().filter((range) => range.helper !== unit);
174
+ const own = helper.helperRanges().find((range) => range.helper === unit);
175
+ const takerOf = (base) => {
176
+ const account = helper.uidRangeTaker(base, UID_COUNT);
177
+ if (account !== void 0) return account;
178
+ const rival = others.find((range) => base < range.uidBase + range.uidCount && range.uidBase < base + UID_COUNT);
179
+ return rival === void 0 ? void 0 : `the root helper ${rival.helper}`;
180
+ };
181
+ const tried = [];
182
+ let uidBase;
183
+ const candidates = own === void 0 ? Array.from({ length: UID_ATTEMPTS + 1 }, (_, i) => UID_BASE + i * UID_STEP) : [own.uidBase, ...Array.from({ length: UID_ATTEMPTS + 1 }, (_, i) => UID_BASE + i * UID_STEP)];
184
+ for (const base of candidates) {
185
+ const taker = takerOf(base);
186
+ if (taker === void 0) {
187
+ uidBase = base;
188
+ break;
189
+ }
190
+ tried.push(`${base} to ${base + UID_COUNT - 1} is used by ${taker}`);
191
+ }
192
+ if (uidBase === void 0) {
193
+ return notInstalled(false, [`every range of ${UID_COUNT} user ids that was tried is taken (${tried.join("; ")}), so the root helper was not installed`]);
194
+ }
159
195
  let assets;
160
196
  let helperBytes;
161
197
  try {
@@ -167,7 +203,7 @@ async function installHelper(request, deps) {
167
203
  if (sha256Of(helperBytes) !== helper.pins.helper) {
168
204
  return notInstalled(false, [`the root helper that was downloaded has sha256 ${sha256Of(helperBytes)}, not the ${helper.pins.helper} this release pins, so it was not installed`]);
169
205
  }
170
- const config = helperConfigText({ unitName: request.unitName, uid: identity.uid, gid: identity.gid, buildsRoot, jailBase, uidBase, pins: helper.pins });
206
+ const config = helperConfigText({ unitName: request.unitName, uid: identity.uid, gid: identity.gid, buildsRoot, jailBase, uidBase, slice: request.slice !== void 0, pins: helper.pins });
171
207
  const unitPath = helperUnitPathFor(request.unitName);
172
208
  const existed = deps.systemd.read(unitPath) !== void 0;
173
209
  const staged = helper.stage({ "outerlayer-host-helper": helperBytes, "helper.json": config });
@@ -193,6 +229,9 @@ async function installHelper(request, deps) {
193
229
  }
194
230
  removeFiles();
195
231
  };
232
+ const removeNewSlice = () => {
233
+ if (deps.systemd.read(slicePathFor(request.unitName)) !== void 0) deps.systemd.remove(slicePathFor(request.unitName));
234
+ };
196
235
  try {
197
236
  const copies = [
198
237
  { from: join(staged.dir, "outerlayer-host-helper"), to: `${dir}/outerlayer-host-helper`, pin: helper.pins.helper, what: "helper" },
@@ -224,15 +263,29 @@ async function installHelper(request, deps) {
224
263
  } finally {
225
264
  staged.remove();
226
265
  }
227
- say(`sudo tee ${unitPath}`);
266
+ const slicePath = slicePathFor(request.unitName);
228
267
  try {
268
+ if (request.slice !== void 0) {
269
+ say(`sudo tee ${slicePath}`);
270
+ deps.systemd.write(slicePath, sliceUnitText(request.unitName, request.slice));
271
+ } else if (deps.systemd.read(slicePath)?.startsWith(UNIT_MARKER) === true) {
272
+ say(`sudo rm ${slicePath}`);
273
+ deps.systemd.remove(slicePath);
274
+ }
275
+ say(`sudo tee ${unitPath}`);
229
276
  deps.systemd.write(unitPath, helperUnitText(request.unitName));
230
277
  } catch (err) {
231
- if (!existed) removeFiles();
278
+ if (!existed) {
279
+ removeFiles();
280
+ removeNewSlice();
281
+ }
232
282
  return notInstalled(false, [...lines, err instanceof Error ? err.message : String(err)]);
233
283
  }
234
284
  if (!systemctl(["daemon-reload"]) || !systemctl(["enable", "--now", unit]) || existed && !systemctl(["restart", unit])) {
235
- if (!existed) discard();
285
+ if (!existed) {
286
+ discard();
287
+ removeNewSlice();
288
+ }
236
289
  lines.push(`the unit ${unit} did not start, so the root helper is not running: ${without}`);
237
290
  return notInstalled(false, lines);
238
291
  }
@@ -272,6 +325,12 @@ function uninstallHelper(request, deps) {
272
325
  }
273
326
  root(["rm", "-rf", dir]);
274
327
  root(["rm", "-f", configFile]);
328
+ const slicePath = slicePathFor(request.unitName);
329
+ if (deps.systemd.read(slicePath)?.startsWith(UNIT_MARKER) === true) {
330
+ say(`sudo rm ${slicePath}`);
331
+ deps.systemd.remove(slicePath);
332
+ systemctl(["daemon-reload"]);
333
+ }
275
334
  if (jailBase !== void 0) root(["rmdir", `${jailBase}/firecracker`, jailBase]);
276
335
  lines.push(`removed the root helper ${unit}`);
277
336
  return { ok: true, installed: false, lines };
@@ -387,28 +446,44 @@ function findJailBase(buildsDir, unitName) {
387
446
  function overlaps(start, length, base, count) {
388
447
  return length > 0 && start < base + count && start + length > base;
389
448
  }
390
- function idRangeFree(base, count) {
449
+ function idRangeTaker(base, count) {
391
450
  for (const file of ["/etc/passwd", "/etc/group"]) {
392
451
  const text = readText(file);
393
- if (text === void 0) return false;
452
+ if (text === void 0) return `${file}, which could not be read`;
394
453
  for (const line of text.split("\n")) {
395
454
  const fields = line.split(":");
396
- if (overlaps(Number(fields[2]), 1, base, count)) return false;
397
- if (file === "/etc/passwd" && overlaps(Number(fields[3]), 1, base, count)) return false;
455
+ if (overlaps(Number(fields[2]), 1, base, count)) return `${file === "/etc/passwd" ? "the account" : "the group"} ${fields[0]}`;
456
+ if (file === "/etc/passwd" && overlaps(Number(fields[3]), 1, base, count)) return `the primary group of the account ${fields[0]}`;
398
457
  }
399
458
  }
400
459
  for (const file of ["/etc/subuid", "/etc/subgid"]) {
401
460
  for (const line of (readText(file) ?? "").split("\n")) {
402
461
  const fields = line.split(":");
403
- if (overlaps(Number(fields[1]), Number(fields[2]), base, count)) return false;
462
+ if (overlaps(Number(fields[1]), Number(fields[2]), base, count)) return `the grant to ${fields[0]} in ${file}`;
404
463
  }
405
464
  }
406
- return true;
465
+ return void 0;
407
466
  }
408
- function idOf(flag, account) {
409
- const result = spawnSync("id", [flag, account], { encoding: "utf8" });
410
- const id = Number(result.stdout);
411
- return result.status === 0 && Number.isInteger(id) ? id : void 0;
467
+ var HELPER_CONFIG_DIR = "/etc/outerlayer";
468
+ function readHelperRanges(dir = HELPER_CONFIG_DIR) {
469
+ let names;
470
+ try {
471
+ names = readdirSync(dir);
472
+ } catch {
473
+ return [];
474
+ }
475
+ const ranges = [];
476
+ for (const name of names) {
477
+ if (!name.endsWith("-helper.json")) continue;
478
+ const text = readText(join(dir, name));
479
+ if (text === void 0) continue;
480
+ try {
481
+ const config = JSON.parse(text);
482
+ if (typeof config.uidBase === "number" && typeof config.uidCount === "number") ranges.push({ helper: name.slice(0, -".json".length), uidBase: config.uidBase, uidCount: config.uidCount });
483
+ } catch {
484
+ }
485
+ }
486
+ return ranges;
412
487
  }
413
488
  function realHelperDeps() {
414
489
  const arch = firecrackerArch(process.arch);
@@ -438,13 +513,10 @@ function realHelperDeps() {
438
513
  return void 0;
439
514
  }
440
515
  },
441
- identity: (account) => {
442
- const uid = account === userInfo().username ? userInfo().uid : idOf("-u", account);
443
- const gid = account === userInfo().username ? userInfo().gid : idOf("-g", account);
444
- return uid === void 0 || gid === void 0 || uid < 0 || gid < 0 ? void 0 : { uid, gid };
445
- },
516
+ identity: accountIdentity,
446
517
  jailBase: findJailBase,
447
- uidRangeFree: idRangeFree,
518
+ uidRangeTaker: idRangeTaker,
519
+ helperRanges: () => readHelperRanges(),
448
520
  stage: (files) => {
449
521
  const dir = mkdtempSync(join(tmpdir(), "outerlayer-helper-"));
450
522
  for (const [name, content] of Object.entries(files)) writeFileSync(join(dir, name), content, { mode: 493 });
@@ -479,9 +551,57 @@ function accountCannotStart(account, nodePath, entry, can) {
479
551
  return void 0;
480
552
  }
481
553
  function vmArgs(input) {
482
- return [...input.print === true ? ["--print"] : [], ...input.replace === true ? ["--replace"] : [], ...input.allowDowngrade === true ? ["--allow-downgrade"] : [], ...input.user === void 0 ? [] : ["--user", input.user], ...input.unitName === void 0 ? [] : ["--unit-name", input.unitName]];
554
+ return [
555
+ ...input.buildMemoryMax === void 0 ? [] : ["--build-memory-max", input.buildMemoryMax],
556
+ ...input.buildCpusMax === void 0 ? [] : ["--build-cpus-max", String(input.buildCpusMax)],
557
+ ...input.print === true ? ["--print"] : [],
558
+ ...input.replace === true ? ["--replace"] : [],
559
+ ...input.allowDowngrade === true ? ["--allow-downgrade"] : [],
560
+ ...input.user === void 0 ? [] : ["--user", input.user],
561
+ ...input.unitName === void 0 ? [] : ["--unit-name", input.unitName]
562
+ ];
563
+ }
564
+ var MAX_BUILD_CPUS = 1024;
565
+ function cpusAreValid(cpus) {
566
+ return Number.isFinite(cpus) && Math.round(cpus * 100) >= 1 && cpus <= MAX_BUILD_CPUS;
567
+ }
568
+ function sliceOf(input, usesVm, helperVersion) {
569
+ if (input.buildMemoryMax === void 0 && input.buildCpusMax === void 0) return {};
570
+ if (!usesVm) return { refusal: "\u2717 --build-memory-max and --build-cpus-max limit microVM builds, and this runner's hooks are not builtin:vm. Nothing is set up" };
571
+ if (!hostHelperSupportsSlice(helperVersion)) {
572
+ return { refusal: `\u2717 the root helper this release pins (guest-${helperVersion}) cannot start builds in a slice, so the limits would not apply. Nothing is set up: update the CLI to a release that pins guest-${HOST_HELPER_SLICE_SINCE} or later, or install without --build-memory-max and --build-cpus-max` };
573
+ }
574
+ const parsedBytes = input.buildMemoryMax === void 0 ? void 0 : parseSize(input.buildMemoryMax);
575
+ const memoryMaxBytes = parsedBytes === void 0 ? void 0 : Math.floor(parsedBytes);
576
+ if (input.buildMemoryMax !== void 0 && (memoryMaxBytes === void 0 || !Number.isSafeInteger(memoryMaxBytes) || memoryMaxBytes <= 0)) return { refusal: `\u2717 --build-memory-max ${input.buildMemoryMax} is not a size such as 16g. Nothing is set up` };
577
+ if (input.buildCpusMax !== void 0 && !cpusAreValid(input.buildCpusMax)) return { refusal: `\u2717 --build-cpus-max ${input.buildCpusMax} is not a number of CPUs from 0.01 to 1024. Nothing is set up` };
578
+ return { limits: { memoryMaxBytes, cpus: input.buildCpusMax } };
483
579
  }
484
580
  async function installServiceCommand(input, deps = {}) {
581
+ if (input.print === true) return installServiceSteps(input, deps);
582
+ const ownership = deps.ownership ?? realOwnership();
583
+ const account = accountNamed(serviceAccount(input), ownership);
584
+ let result;
585
+ try {
586
+ result = await installServiceSteps(input, deps);
587
+ } finally {
588
+ const configDir = dirname(input.configPath);
589
+ const runner = runnerDir(input.configPath);
590
+ const problem = handOver(
591
+ account,
592
+ [{ path: join(configDir, CLAUDE_ENV_FILE) }, { path: join(configDir, "runner.env") }, { path: runner }, { path: dirname(vmAssetsDir(runner)) }, { path: vmAssetsDir(runner), tree: true }],
593
+ ownership
594
+ );
595
+ if (problem !== void 0 && result !== void 0) result = { ...result, ok: false, state: "refused", lines: [...result.lines, problem] };
596
+ }
597
+ return result;
598
+ }
599
+ function serviceAccount(input) {
600
+ return input.user ?? userInfo().username;
601
+ }
602
+ async function installServiceSteps(input, deps) {
603
+ const nameProblem = input.unitName === void 0 ? void 0 : unitNameProblem(input.unitName);
604
+ if (nameProblem !== void 0) return { ok: false, state: "refused", lines: [nameProblem] };
485
605
  const vm = runnerVmOf(input.configPath);
486
606
  if (vm !== void 0) {
487
607
  const result = await serviceInVm((deps.lima ?? realLima)(), vm.instance, "install", { home: input.home, extraArgs: vmArgs(input) });
@@ -500,13 +620,15 @@ async function installServiceCommand(input, deps = {}) {
500
620
  PATH: process.env.PATH,
501
621
  replace: input.replace,
502
622
  allowDowngrade: input.allowDowngrade,
503
- command: "runner install --service"
623
+ command: "runner install --service",
624
+ account: serviceAccount(input),
625
+ ownership: deps.ownership
504
626
  });
505
627
  launcherLines = [launcherSummary(installed.launcher)].filter((line) => line !== void 0);
506
628
  launcherNotes = installed.launcher.notes;
507
629
  restartLine = restartNote(installed);
508
630
  }
509
- const account = input.user ?? userInfo().username;
631
+ const account = serviceAccount(input);
510
632
  const serviceDeps = (deps.service ?? realServiceDeps)();
511
633
  if (input.print !== true && account !== userInfo().username && serviceDeps.accountCan !== void 0) {
512
634
  const entry = join(currentLink(input.configPath), "node_modules", "@outerlayer", "cli", "dist", "index.js");
@@ -515,8 +637,17 @@ async function installServiceCommand(input, deps = {}) {
515
637
  }
516
638
  const unitName = input.unitName ?? DEFAULT_UNIT_NAME;
517
639
  const usesVm = builtinKind(config.hooks.provision) === "vm";
518
- const helper = input.print !== true && usesVm && serviceDeps.helper !== void 0 && serviceDeps.systemd.running() ? await installHelper({ configPath: input.configPath, unitName, user: account }, { ...serviceDeps, helper: serviceDeps.helper }) : void 0;
640
+ const slice = sliceOf(input, usesVm, deps.helperAssetsVersion ?? HOST_HELPER_ASSETS_VERSION);
641
+ if (slice.refusal !== void 0) return { ok: false, state: "refused", lines: [slice.refusal] };
642
+ if (slice.limits?.memoryMaxBytes !== void 0 && input.print !== true) {
643
+ const fit = checkFit({ concurrency: config.concurrency, buildMemory: config.build?.memory ?? "8g", usableBytes: 0, sliceBytes: slice.limits.memoryMaxBytes });
644
+ if (!fit.fits) return { ok: false, state: "refused", lines: [`${fit.message}. Nothing is set up: lower runner.concurrency or runner.build.memory, then run this again`] };
645
+ }
646
+ const helper = input.print !== true && usesVm && serviceDeps.helper !== void 0 && serviceDeps.systemd.running() ? await installHelper({ configPath: input.configPath, unitName, user: account, ...slice.limits === void 0 ? {} : { slice: slice.limits } }, { ...serviceDeps, helper: serviceDeps.helper }) : void 0;
519
647
  if (helper !== void 0 && !helper.ok) return { ok: false, state: "refused", lines: helper.lines };
648
+ if (slice.limits !== void 0 && input.print !== true && helper?.installed !== true) {
649
+ return { ok: false, state: "refused", lines: [...helper?.lines ?? [], "\u2717 --build-memory-max and --build-cpus-max need the root helper, and it is not installed, so the limits would not apply. Nothing else is set up"] };
650
+ }
520
651
  const outcome = installService(
521
652
  {
522
653
  configPath: input.configPath,
@@ -530,7 +661,10 @@ async function installServiceCommand(input, deps = {}) {
530
661
  print: input.print,
531
662
  replace: input.replace,
532
663
  restart: input.restart,
533
- ...helper?.installed === true ? { helperSocket: helperSocketFor(unitName), helperUnit: helperUnitFor(unitName) } : {}
664
+ imageBuild: config.build?.imageBuild,
665
+ builderDiskPinned: builderDiskPinned(),
666
+ ...helper?.installed === true ? { helperSocket: helperSocketFor(unitName), helperUnit: helperUnitFor(unitName) } : {},
667
+ ...helper?.installed === true && slice.limits?.memoryMaxBytes !== void 0 ? { buildSliceMemoryBytes: slice.limits.memoryMaxBytes } : {}
534
668
  },
535
669
  serviceDeps
536
670
  );
@@ -538,6 +672,8 @@ async function installServiceCommand(input, deps = {}) {
538
672
  return { ok: outcome.ok, state: outcome.state, lines: [...helper?.lines ?? [], ...outcome.lines, ...outcome.ok ? [...restartLines, ...launcherLines] : []], unit: outcome.unit, ...launcherNotes.length > 0 ? { notes: launcherNotes } : {} };
539
673
  }
540
674
  async function uninstallServiceCommand(input, deps = {}) {
675
+ const nameProblem = input.unitName === void 0 ? void 0 : unitNameProblem(input.unitName);
676
+ if (nameProblem !== void 0) return { ok: false, state: "refused", lines: [nameProblem] };
541
677
  const vm = runnerVmOf(input.configPath);
542
678
  if (vm !== void 0) {
543
679
  const result = await serviceInVm((deps.lima ?? realLima)(), vm.instance, "uninstall", { home: input.home, extraArgs: input.unitName === void 0 ? [] : ["--unit-name", input.unitName] });
@@ -549,4 +685,4 @@ async function uninstallServiceCommand(input, deps = {}) {
549
685
  return { ok: outcome.ok, state: outcome.state, lines: [...outcome.lines, ...helper?.lines ?? []] };
550
686
  }
551
687
 
552
- export { installServiceCommand, uninstallServiceCommand };
688
+ export { cpusAreValid, installServiceCommand, uninstallServiceCommand };
@@ -1,17 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, RunnerConfigError, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerCredentialProblem, runnerVmOf } from './chunk-4XYC2663.js';
4
- import './chunk-UC2DKBMS.js';
5
- import './chunk-MPDLZCXM.js';
6
- import './chunk-3Z3MPR55.js';
7
- import './chunk-ES4ULBAL.js';
3
+ export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, RunnerConfigError, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, keepsHostBuilder, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerCredentialProblem, runnerVmOf } from './chunk-2D6CKNR7.js';
4
+ import './chunk-KM2HLQE3.js';
5
+ import './chunk-5AFPP3GZ.js';
6
+ import './chunk-4UPET3R7.js';
7
+ import './chunk-MOI2KDLH.js';
8
8
  import './chunk-AJYZNISW.js';
9
- import './chunk-XLJLR7EK.js';
10
- import './chunk-N7LAEN3T.js';
11
- import './chunk-YOBQIXX6.js';
12
9
  import './chunk-EOTMDIYC.js';
13
10
  import './chunk-VNVZDWO3.js';
14
- import './chunk-HACGUL52.js';
11
+ import './chunk-PXGU3GKY.js';
12
+ import './chunk-G4W4B33M.js';
15
13
  import './chunk-MESOOLF4.js';
16
14
  import './chunk-Z5GEFMRW.js';
17
15
 
@@ -1,19 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { AGENTS_LAYOUT_COMMIT_LINE, COMMIT_LINE, autoConnectedLine, commitCommandsFor, commitLineFor, listText as factoryListText, slug as factorySlug, fetchFactories, hasUncommittedPolicy, promptOnTerminal, realConnectDeps, runConnect, runConnectCommand, saveFactoryConnection, selectFactory } from './chunk-XA6PGME5.js';
4
- import './chunk-MECW77XP.js';
5
- import './chunk-AJYZNISW.js';
6
- import './chunk-NKOM4JKY.js';
3
+ export { AGENTS_LAYOUT_COMMIT_LINE, COMMIT_LINE, autoConnectedLine, commitCommandsFor, commitLineFor, listText as factoryListText, slug as factorySlug, fetchFactories, hasUncommittedPolicy, promptOnTerminal, realConnectDeps, runConnect, runConnectCommand, saveFactoryConnection, selectFactory } from './chunk-FVCHHSHB.js';
7
4
  import './chunk-Y5YCX6AL.js';
8
5
  import './chunk-G2JWZDFA.js';
9
6
  import './chunk-ANPNT6PM.js';
10
- import './chunk-TVGLNHEB.js';
7
+ import './chunk-MECW77XP.js';
8
+ import './chunk-NKOM4JKY.js';
9
+ import './chunk-3N77LUQI.js';
11
10
  import './chunk-PJDQPF5N.js';
12
- import './chunk-XLJLR7EK.js';
13
- import './chunk-N7LAEN3T.js';
14
- import './chunk-YOBQIXX6.js';
11
+ import './chunk-MOI2KDLH.js';
15
12
  import './chunk-BJ3KTMDH.js';
16
13
  import './chunk-ZQSANKS4.js';
14
+ import './chunk-AJYZNISW.js';
17
15
  import './chunk-5BHIBJDA.js';
18
16
  import './chunk-CDDED64E.js';
19
17
  import './chunk-RA3O54FC.js';
@@ -21,7 +19,8 @@ import './chunk-CRB3POP4.js';
21
19
  import './chunk-FGXT5OXS.js';
22
20
  import './chunk-EOTMDIYC.js';
23
21
  import './chunk-VNVZDWO3.js';
24
- import './chunk-HACGUL52.js';
22
+ import './chunk-PXGU3GKY.js';
23
+ import './chunk-G4W4B33M.js';
25
24
  import './chunk-MESOOLF4.js';
26
25
  import './chunk-Z5GEFMRW.js';
27
26
 
@@ -1,53 +1,49 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { reportFailedStart, BUILD_MEMORY_VARIABLE } from './chunk-ZV2JJPDS.js';
4
- import { readOwnContainer } from './chunk-Z76GVJGQ.js';
5
- import './chunk-RNVBSRZZ.js';
3
+ import { reportFailedStart, BUILD_MEMORY_VARIABLE } from './chunk-O4Z2MNNL.js';
4
+ import { readOwnContainer } from './chunk-RHV5SRI2.js';
5
+ import './chunk-FD5ASWTG.js';
6
6
  import './chunk-ZVB57WI6.js';
7
- import './chunk-HAEDLXHA.js';
8
- import './chunk-75KZUBHD.js';
7
+ import './chunk-63IVRRIO.js';
9
8
  import './chunk-I3LTIAOR.js';
10
- import './chunk-KDLQGTN6.js';
11
- import './chunk-WIK5KUGK.js';
12
- import './chunk-LMICI7AY.js';
9
+ import './chunk-JBCOUY4M.js';
10
+ import './chunk-QANM5COC.js';
11
+ import './chunk-EGVHFHY4.js';
13
12
  import './chunk-ESVW4MJY.js';
13
+ import './chunk-SI6WDF3U.js';
14
14
  import './chunk-TBT347UY.js';
15
- import { detectMachine, supportsContainerBuilds, MIN_ENGINE_MAJOR, describeMachineDocker, RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-POGPX7LI.js';
15
+ import { detectMachine, supportsContainerBuilds, MIN_ENGINE_MAJOR, describeMachineDocker, RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-JQSZTQSK.js';
16
16
  import './chunk-2PGI6RDE.js';
17
- import { isAgentName, AGENT_COMMANDS } from './chunk-EZ7L5IZU.js';
18
- import './chunk-3NFZN7H6.js';
19
- import './chunk-ENFBYN4A.js';
20
- import './chunk-JBJTC3UU.js';
17
+ import './chunk-UO4FQAOX.js';
21
18
  import './chunk-OGFGZQA3.js';
22
- import './chunk-IHY457PB.js';
23
- import './chunk-2RBIW2PD.js';
24
- import './chunk-AVLLJW5D.js';
25
- import { runnerImageVersion, IMAGE_VERSION_VARIABLE } from './chunk-36T6W5RA.js';
19
+ import './chunk-2ILU7UAU.js';
20
+ import './chunk-OGPEHSNW.js';
21
+ import './chunk-RFVIQLNB.js';
22
+ import { runnerImageVersion, IMAGE_VERSION_VARIABLE } from './chunk-SYVRBBLW.js';
26
23
  import './chunk-TQMI335S.js';
27
- import './chunk-AABYHGVO.js';
28
- import './chunk-4XYC2663.js';
29
- import './chunk-UC2DKBMS.js';
30
- import { parseSize } from './chunk-MPDLZCXM.js';
31
- import './chunk-3Z3MPR55.js';
32
- import './chunk-ES4ULBAL.js';
33
- import './chunk-IW6Z337K.js';
24
+ import { isAgentName, AGENT_COMMANDS } from './chunk-OQLF3MQQ.js';
25
+ import './chunk-INOUUSYI.js';
26
+ import './chunk-2D6CKNR7.js';
27
+ import './chunk-KM2HLQE3.js';
28
+ import { parseSize } from './chunk-5AFPP3GZ.js';
29
+ import './chunk-4UPET3R7.js';
30
+ import './chunk-YNMVVQOQ.js';
31
+ import './chunk-JBJTC3UU.js';
32
+ import './chunk-UN3SQTVL.js';
34
33
  import './chunk-IP7BIBXJ.js';
35
- import './chunk-3M6UYJSR.js';
36
- import './chunk-XA6PGME5.js';
37
- import './chunk-MECW77XP.js';
38
- import './chunk-AJYZNISW.js';
39
- import './chunk-NKOM4JKY.js';
34
+ import './chunk-AVPLEFQR.js';
35
+ import './chunk-FVCHHSHB.js';
40
36
  import './chunk-Y5YCX6AL.js';
41
37
  import './chunk-G2JWZDFA.js';
42
38
  import './chunk-ANPNT6PM.js';
43
- import './chunk-QOUR4CQ7.js';
39
+ import './chunk-MECW77XP.js';
40
+ import './chunk-NKOM4JKY.js';
41
+ import './chunk-CAQCDYKF.js';
44
42
  import './chunk-JWNH4ZTF.js';
45
- import './chunk-TVGLNHEB.js';
43
+ import './chunk-3N77LUQI.js';
46
44
  import './chunk-PJDQPF5N.js';
47
- import './chunk-XLJLR7EK.js';
48
- import './chunk-N7LAEN3T.js';
49
- import { readClaudeCredential, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES } from './chunk-YOBQIXX6.js';
50
- import './chunk-CXQCBAKO.js';
45
+ import './chunk-MOI2KDLH.js';
46
+ import './chunk-25GRRBTH.js';
51
47
  import './chunk-ZJSNLVCE.js';
52
48
  import './chunk-2O5KA67H.js';
53
49
  import './chunk-BKO6JEZI.js';
@@ -55,6 +51,7 @@ import './chunk-FGF52V4V.js';
55
51
  import './chunk-HCVLP7XA.js';
56
52
  import './chunk-BJ3KTMDH.js';
57
53
  import './chunk-ZQSANKS4.js';
54
+ import './chunk-AJYZNISW.js';
58
55
  import './chunk-5BHIBJDA.js';
59
56
  import './chunk-CDDED64E.js';
60
57
  import { resolveVersion } from './chunk-RA3O54FC.js';
@@ -67,7 +64,8 @@ import './chunk-TUSYOL2O.js';
67
64
  import './chunk-FGXT5OXS.js';
68
65
  import './chunk-EOTMDIYC.js';
69
66
  import './chunk-VNVZDWO3.js';
70
- import './chunk-HACGUL52.js';
67
+ import './chunk-PXGU3GKY.js';
68
+ import { readClaudeCredential, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES } from './chunk-G4W4B33M.js';
71
69
  import './chunk-MESOOLF4.js';
72
70
  import './chunk-Z5GEFMRW.js';
73
71
  import { existsSync, readFileSync, writeFileSync } from 'fs';
@@ -1,20 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { autoConnect } from './chunk-3M6UYJSR.js';
4
- import './chunk-XA6PGME5.js';
5
- import './chunk-MECW77XP.js';
6
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
7
- import './chunk-NKOM4JKY.js';
3
+ import { autoConnect } from './chunk-AVPLEFQR.js';
4
+ import './chunk-FVCHHSHB.js';
8
5
  import './chunk-Y5YCX6AL.js';
9
6
  import './chunk-G2JWZDFA.js';
10
7
  import './chunk-ANPNT6PM.js';
11
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-TVGLNHEB.js';
8
+ import './chunk-MECW77XP.js';
9
+ import './chunk-NKOM4JKY.js';
10
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-3N77LUQI.js';
12
11
  import './chunk-PJDQPF5N.js';
13
- import './chunk-XLJLR7EK.js';
14
- import './chunk-N7LAEN3T.js';
15
- import './chunk-YOBQIXX6.js';
12
+ import './chunk-MOI2KDLH.js';
16
13
  import './chunk-BJ3KTMDH.js';
17
14
  import './chunk-ZQSANKS4.js';
15
+ import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
18
16
  import './chunk-5BHIBJDA.js';
19
17
  import './chunk-CDDED64E.js';
20
18
  import './chunk-RA3O54FC.js';
@@ -22,7 +20,8 @@ import { cliInvocation } from './chunk-CRB3POP4.js';
22
20
  import './chunk-FGXT5OXS.js';
23
21
  import './chunk-EOTMDIYC.js';
24
22
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
25
- import './chunk-HACGUL52.js';
23
+ import './chunk-PXGU3GKY.js';
24
+ import './chunk-G4W4B33M.js';
26
25
  import './chunk-MESOOLF4.js';
27
26
  import './chunk-Z5GEFMRW.js';
28
27
 
@@ -1,12 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { parseOwnerRepo, lookupGoverningSource, defaultGitRunner, materializeContext } from './chunk-QOUR4CQ7.js';
3
+ import { parseOwnerRepo, lookupGoverningSource, defaultGitRunner, materializeContext } from './chunk-CAQCDYKF.js';
4
4
  import './chunk-JWNH4ZTF.js';
5
- import { resolveGatewayCredentials, defaultFetch } from './chunk-TVGLNHEB.js';
5
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-3N77LUQI.js';
6
6
  import './chunk-PJDQPF5N.js';
7
- import './chunk-XLJLR7EK.js';
8
- import './chunk-N7LAEN3T.js';
9
- import './chunk-YOBQIXX6.js';
7
+ import './chunk-MOI2KDLH.js';
10
8
  import './chunk-ZJSNLVCE.js';
11
9
  import { layoutRefusalMessage, unsupportedLayout, sharedSkillNames, skillConflictMessage, composeDelivery } from './chunk-FGF52V4V.js';
12
10
  import './chunk-HCVLP7XA.js';
@@ -22,7 +20,8 @@ import './chunk-TUSYOL2O.js';
22
20
  import './chunk-FGXT5OXS.js';
23
21
  import './chunk-EOTMDIYC.js';
24
22
  import './chunk-VNVZDWO3.js';
25
- import './chunk-HACGUL52.js';
23
+ import './chunk-PXGU3GKY.js';
24
+ import './chunk-G4W4B33M.js';
26
25
  import './chunk-MESOOLF4.js';
27
26
  import './chunk-Z5GEFMRW.js';
28
27
  import { execFileSync } from 'child_process';