@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,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { checkStarterFiles, contextIsGoverned } from './chunk-AP2K4LPI.js';
4
- import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-3RAAYBSG.js';
5
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-IW6Z337K.js';
6
- import { isLinkedRepository } from './chunk-XA6PGME5.js';
7
- import { sanitizeTerminal } from './chunk-MECW77XP.js';
8
- import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-AJYZNISW.js';
4
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-UN3SQTVL.js';
5
+ import { isLinkedRepository } from './chunk-FVCHHSHB.js';
9
6
  import { C } from './chunk-ANPNT6PM.js';
7
+ import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-YHKU2NOZ.js';
8
+ import { sanitizeTerminal } from './chunk-MECW77XP.js';
10
9
  import { checkFormerSkillNames } from './chunk-JWNH4ZTF.js';
11
- import { resolveGatewayCredentials, defaultFetch } from './chunk-TVGLNHEB.js';
12
- import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-CXQCBAKO.js';
10
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-3N77LUQI.js';
11
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-25GRRBTH.js';
13
12
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-I7RZHMXW.js';
14
13
  import { hookCommandEscapesControlPlane, CONTROL_PLANE_DIR_VARIABLE } from './chunk-HCVLP7XA.js';
15
14
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
15
+ import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-AJYZNISW.js';
16
16
  import { cliInvocation } from './chunk-CRB3POP4.js';
17
17
  import { readSettings, settingsPath, isOurStatuslineSlot, statuslineWrappedOriginal, REGISTERED_EVENTS, isOurHookCommand, ourCommandBins, cliBinResolvable, ourDirectScriptBins, wrappedOriginalCommand } from './chunk-URIZRCRY.js';
18
18
  import { readDeliveryRecord, readDegraded, readSourceCache } from './chunk-YQR6E6OV.js';
@@ -1195,8 +1195,8 @@ function doctorExitCode(checks) {
1195
1195
 
1196
1196
  // src/doctor-report.ts
1197
1197
  async function gatherDoctorChecks() {
1198
- const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-5ZQHYBO3.js');
1199
- const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-UN3X6AP2.js');
1198
+ const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-ZL46AEN3.js');
1199
+ const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-QASNKYM6.js');
1200
1200
  const configPath = defaultRunnerConfigPath();
1201
1201
  const runnerHost = hasRunnerBlock(configPath);
1202
1202
  const hooks = (() => {
@@ -1217,7 +1217,7 @@ async function gatherDoctorChecks() {
1217
1217
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1218
1218
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1219
1219
  } else if (hasRunnerBlock(configPath)) {
1220
- const { runnerHostChecks } = await import('./doctor-YOAF7QPL.js');
1220
+ const { runnerHostChecks } = await import('./doctor-LK6E3XOW.js');
1221
1221
  const gateway = (() => {
1222
1222
  try {
1223
1223
  const { url, apiKey, appId } = loadRunnerConfig(configPath);
@@ -1244,10 +1244,8 @@ async function gatherDoctorChecks() {
1244
1244
  const service = await (async () => {
1245
1245
  const { existsSync: existsSync3 } = await import('fs');
1246
1246
  if (process.platform !== "linux" || !existsSync3("/run/systemd/system")) return void 0;
1247
- const { inspectService, realInspectProbes } = await import('./inspect-DNLXTXLA.js');
1248
- const { DEFAULT_UNIT_NAME } = await import('./install-QJWJFIWB.js');
1249
- const { dirname: dirname2 } = await import('path');
1250
- return inspectService(DEFAULT_UNIT_NAME, dirname2(configPath), realInspectProbes());
1247
+ const { inspectRunnerService } = await import('./find-unit-4UR647S4.js');
1248
+ return inspectRunnerService(configPath);
1251
1249
  })();
1252
1250
  checks.push(...await runnerHostChecks({ configPath, hooks, gateway, repos, runner, service }));
1253
1251
  }
@@ -1,10 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { builtinKind } from './chunk-4XYC2663.js';
4
- import { parseSize } from './chunk-MPDLZCXM.js';
5
- import { runnerDir } from './chunk-N7LAEN3T.js';
6
- import { CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-YOBQIXX6.js';
7
- import { FD_SLOTS_PER_BUILD, FD_STORE_ENV } from './chunk-HACGUL52.js';
3
+ import { builtinKind, keepsHostBuilder } from './chunk-2D6CKNR7.js';
4
+ import { parseSize } from './chunk-5AFPP3GZ.js';
5
+ import { runnerDir } from './chunk-PXGU3GKY.js';
6
+ import { FD_SLOTS_PER_BUILD, FD_STORE_ENV, BUILD_SLICE_MEMORY_ENV, CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-G4W4B33M.js';
8
7
  import { existsSync, readFileSync, writeFileSync, chmodSync, renameSync } from 'fs';
9
8
  import { dirname, join } from 'path';
10
9
  import { spawnSync } from 'child_process';
@@ -35,6 +34,7 @@ User=${unit.user}
35
34
  ExecStart=${unit.execStart}
36
35
  ${unit.helper === void 0 ? "" : `Environment=OUTERLAYER_HELPER_SOCKET=${unit.helper.socket}
37
36
  `}${unit.fdStore === void 0 ? "" : `Environment=${FD_STORE_ENV}=${unit.fdStore}
37
+ `}${unit.sliceMemoryBytes === void 0 ? "" : `Environment=${BUILD_SLICE_MEMORY_ENV}=${unit.sliceMemoryBytes}
38
38
  `}EnvironmentFile=-${escapeUnitPath(`${unit.configDir}/runner.env`)}
39
39
  ${unit.credential === "load" ? `LoadCredential=${CLAUDE_CREDENTIAL_ID}:${credentialPath(`${unit.configDir}/${CLAUDE_ENV_FILE}`)}` : `EnvironmentFile=-${escapeUnitPath(`${unit.configDir}/${CLAUDE_ENV_FILE}`)}`}
40
40
  Restart=on-failure
@@ -64,6 +64,15 @@ function checkFit(input) {
64
64
  const perBuild = parseSize(input.buildMemory);
65
65
  if (perBuild === void 0) return { fits: true };
66
66
  const neededBytes = input.concurrency * perBuild;
67
+ if (input.sliceBytes !== void 0) {
68
+ if (neededBytes <= input.sliceBytes) return { fits: true };
69
+ return {
70
+ fits: false,
71
+ neededBytes,
72
+ availableBytes: input.sliceBytes,
73
+ message: `runner.concurrency ${input.concurrency} times runner.build.memory ${input.buildMemory} needs ${gib(neededBytes)}, and the memory limit of the runner's build slice is ${gib(input.sliceBytes)}`
74
+ };
75
+ }
67
76
  const availableBytes = Math.max(0, input.usableBytes - RUNNER_RESERVE_BYTES);
68
77
  if (neededBytes <= availableBytes) return { fits: true };
69
78
  return {
@@ -173,6 +182,10 @@ function defaultRun(args) {
173
182
 
174
183
  // src/runner/service/install.ts
175
184
  var DEFAULT_UNIT_NAME = "outerlayer-runner";
185
+ function unitNameProblem(name) {
186
+ if (/^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$/.test(name) && !name.includes("..")) return void 0;
187
+ return `\u2717 --unit-name ${JSON.stringify(name)} is not a unit name. Use up to 64 letters, digits, "_", "-" and ".", with no "..", starting with a letter or digit. Nothing is set up`;
188
+ }
176
189
  var LOAD_CREDENTIAL_SINCE = 247;
177
190
  var CREDENTIAL_FILE_MODE = 384;
178
191
  function prepareCredentialFile(configDir, lines) {
@@ -235,6 +248,12 @@ function attempt(lines, step) {
235
248
  }
236
249
  }
237
250
  var OWN_HOOKS = "the hooks are the host's own executables, so the runner does not write a service for them: run `outerlayer runner install --service --print` to print the unit, and edit it for your hooks";
251
+ function needsHostDocker(request) {
252
+ const provision = builtinKind(request.hooks.provision);
253
+ const cleanup = builtinKind(request.hooks.cleanup);
254
+ if (cleanup === "vm" && !keepsHostBuilder({ hooks: request.hooks, build: { imageBuild: request.imageBuild } }, request.builderDiskPinned)) return false;
255
+ return provision === "container" || provision === "vm" || cleanup === "container" || cleanup === "vm";
256
+ }
238
257
  function installService(request, deps) {
239
258
  const unitName = request.unitName ?? DEFAULT_UNIT_NAME;
240
259
  const unitPath = unitPathFor(unitName);
@@ -251,10 +270,11 @@ function installService(request, deps) {
251
270
  credential,
252
271
  execStart: request.execStart,
253
272
  timeLimitMinutes: request.timeLimitMinutes,
254
- docker: kind === "container" || kind === "vm" || builtinKind(request.hooks.cleanup) === "container" || builtinKind(request.hooks.cleanup) === "vm",
273
+ docker: needsHostDocker(request),
255
274
  ...request.helperSocket !== void 0 && request.helperUnit !== void 0 ? { helper: { unit: request.helperUnit, socket: request.helperSocket } } : {},
256
275
  // A microVM build under the helper keeps its sockets in the descriptor store, so the runner can restart and the build goes on.
257
- ...kind === "vm" && request.helperSocket !== void 0 && request.helperUnit !== void 0 ? { fdStore: Math.max(1, request.concurrency) * FD_SLOTS_PER_BUILD } : {}
276
+ ...kind === "vm" && request.helperSocket !== void 0 && request.helperUnit !== void 0 ? { fdStore: Math.max(1, request.concurrency) * FD_SLOTS_PER_BUILD } : {},
277
+ sliceMemoryBytes: request.buildSliceMemoryBytes
258
278
  });
259
279
  if (request.print === true) return outcome(true, "printed", [], unit);
260
280
  if (own) return outcome(false, "refused", [OWN_HOOKS]);
@@ -281,7 +301,7 @@ function installService(request, deps) {
281
301
  return outcome(false, "refused", ["systemd was not found (/run/systemd/system is missing), so no service is set up. `--print` prints the unit for another service manager"]);
282
302
  }
283
303
  if (kind === "container" || kind === "vm") {
284
- const fit = checkFit({ concurrency: request.concurrency, buildMemory: request.buildMemory, usableBytes: deps.usableMemoryBytes });
304
+ const fit = checkFit({ concurrency: request.concurrency, buildMemory: request.buildMemory, usableBytes: deps.usableMemoryBytes, sliceBytes: request.buildSliceMemoryBytes });
285
305
  if (!fit.fits) return outcome(false, "refused", [`${fit.message}. Nothing is set up: lower runner.concurrency or runner.build.memory, then run this again`]);
286
306
  }
287
307
  const existing = deps.systemd.read(unitPath);
@@ -441,4 +461,4 @@ function uninstallService(request, deps) {
441
461
  return outcome(true, "removed", lines);
442
462
  }
443
463
 
444
- export { DEFAULT_UNIT_NAME, RUNNER_RESERVE_BYTES, UNIT_MARKER, VM_SERVICE_NAME, checkFit, installService, realTaskScheduler, uninstallService, unitPathFor };
464
+ export { DEFAULT_UNIT_NAME, RUNNER_RESERVE_BYTES, UNIT_MARKER, VM_SERVICE_NAME, checkFit, escapeUnitPath, installService, realTaskScheduler, uninstallService, unitNameProblem };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-WIK5KUGK.js';
3
+ import { LiveUploader } from './chunk-QANM5COC.js';
4
+ import { spoolDir } from './chunk-25GRRBTH.js';
4
5
  import { CaptureDaemon } from './chunk-AJYZNISW.js';
5
- import { spoolDir } from './chunk-CXQCBAKO.js';
6
6
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
8
8
  import { mkdirSync, writeFileSync, rmSync } from 'fs';
@@ -1,30 +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 { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-EZ7L5IZU.js';
5
- import { readDefaultBranchHead, cloneRepository, buildRepositoryImage, prepareImageBuild, KEY_PREFIX, FETCHED_DIR, toolsDockerfile, TAG_HOST, metadataFromLabels, writeRecord, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_VOICE_DIR } from './chunk-3NFZN7H6.js';
6
- import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
4
+ import { readDefaultBranchHead, cloneRepository, buildRepositoryImage, prepareImageBuild, KEY_PREFIX, FETCHED_DIR, toolsDockerfile, TAG_HOST, metadataFromLabels, writeRecord, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_VOICE_DIR } from './chunk-UO4FQAOX.js';
7
5
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
8
- import { runExec, execCapture, waitForAgent } from './chunk-IHY457PB.js';
9
- import { GUEST_CID, linkVsockSockets } from './chunk-2RBIW2PD.js';
10
- import { retrySend, describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-AVLLJW5D.js';
11
- import { runnerImageVersion } from './chunk-36T6W5RA.js';
12
- import { runnerCredentialProblem, builtinKind, hostAllowed } from './chunk-4XYC2663.js';
13
- import { formatBytes, allocatedBytes } from './chunk-UC2DKBMS.js';
14
- import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, readDu, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, spawnRun } from './chunk-MPDLZCXM.js';
15
- import { RecipeError, DOCKER_FEATURE, writeSanitizedRecipe, classifyProperties } from './chunk-3Z3MPR55.js';
16
- import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, hostHelperPinned, CLAUDE_CODE_VERSION, 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, builderDiskPinned, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-ES4ULBAL.js';
17
- import { postJson, WorkCommandError, getJson } from './chunk-IW6Z337K.js';
6
+ import { runExec, execCapture, waitForAgent } from './chunk-2ILU7UAU.js';
7
+ import { GUEST_CID, linkVsockSockets } from './chunk-OGPEHSNW.js';
8
+ import { retrySend, describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-RFVIQLNB.js';
9
+ import { runnerImageVersion } from './chunk-SYVRBBLW.js';
10
+ import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-OQLF3MQQ.js';
11
+ import { runnerCredentialProblem, builtinKind, hostAllowed } from './chunk-2D6CKNR7.js';
12
+ import { formatBytes, allocatedBytes } from './chunk-KM2HLQE3.js';
13
+ import { createDockerHost, builderSpec, RecipeError, DOCKER_FEATURE, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, readDu, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, spawnRun, writeSanitizedRecipe, classifyProperties } from './chunk-5AFPP3GZ.js';
14
+ import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, hostHelperPinned, CLAUDE_CODE_VERSION, builderDiskPinned, guestAssetsPinned, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, BUILDER_DISK_VERSION, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-4UPET3R7.js';
15
+ import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
16
+ import { postJson, WorkCommandError, getJson } from './chunk-UN3SQTVL.js';
18
17
  import { sanitizeTerminal } from './chunk-MECW77XP.js';
19
- import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-AJYZNISW.js';
20
- import { signerFor } from './chunk-XLJLR7EK.js';
21
- 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-N7LAEN3T.js';
22
- import { claudeCredential, parseIsolation, proxyEnvironment, withProxyWarningHidden, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, withHooksPath, startBuildServices, BUILT_IN_NAMES, repositoriesOf, primaryOf, RELAY_PORT, repositoryPath, CHECKOUT_DIR, lifecycleWorkdir, buildEnvironment, writeBuildMavenSettings, checkEnvironment, AGENT_CREDENTIAL_MISSING, mavenSettingsXml, namesGlobalSettings, MAVEN_NO_PROXY_NOTE, mavenArgs, MAVEN_SPACE_NOTE, writeMavenSettings, checkoutPath, JOB_MOUNT } from './chunk-YOBQIXX6.js';
18
+ import { signerFor } from './chunk-MOI2KDLH.js';
23
19
  import { sharedSkillNames, skillConflictMessage } from './chunk-FGF52V4V.js';
24
20
  import { versionAtLeast, MINIMUM_CLAUDE_VERSION } from './chunk-HCVLP7XA.js';
21
+ import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-AJYZNISW.js';
25
22
  import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-FGXT5OXS.js';
26
23
  import { downconvertSession } from './chunk-EOTMDIYC.js';
27
- import { realFdStorePort } from './chunk-HACGUL52.js';
24
+ import { vmAssetsDir, RUNNER_DIR_MODE, rootfsPathFor, diskTemplatesDir, RUNNER_FILE_MODE, buildsDir, buildDir, runnerDir, deliveryDir, ghConfigDir, runnerDirOfBuild, spoolDir, mirrorDir, SHIM_DIR, vsockPath, builderCacheDiskPath, builderConsolePath } from './chunk-PXGU3GKY.js';
25
+ import { claudeCredential, parseIsolation, proxyEnvironment, withProxyWarningHidden, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, withHooksPath, startBuildServices, BUILT_IN_NAMES, repositoriesOf, primaryOf, RELAY_PORT, repositoryPath, CHECKOUT_DIR, lifecycleWorkdir, buildEnvironment, writeBuildMavenSettings, checkEnvironment, AGENT_CREDENTIAL_MISSING, mavenSettingsXml, namesGlobalSettings, MAVEN_NO_PROXY_NOTE, mavenArgs, MAVEN_SPACE_NOTE, writeMavenSettings, checkoutPath, JOB_MOUNT, realFdStorePort } from './chunk-G4W4B33M.js';
28
26
  import { RELAY_USER, RELAY_ID, UNKNOWN_TRANSPORT_REASON, DOCKER_DESKTOP_REASON, MAX_MALFORMED_SESSIONS, MALFORMED_REASON, JOIN_WAIT_MS, MAX_OPEN_STREAMS, STREAM_RESET_RATE, STREAM_RESET_BURST, STREAM_WINDOW, SESSION_WINDOW, targetOfPath } from './chunk-MESOOLF4.js';
29
27
  import { spawn, spawnSync } from 'child_process';
30
28
  import { mkdirSync, existsSync, readFileSync, mkdtempSync, rmSync, chmodSync, truncateSync, statSync, accessSync, constants, readdirSync, writeFileSync, lstatSync, copyFileSync, renameSync, rmdirSync, unlinkSync, linkSync, openSync, closeSync, cpSync, writeSync, appendFileSync, createWriteStream, createReadStream } from 'fs';
@@ -329,14 +327,6 @@ function converterScript(workDir = "/tmp/rootfs") {
329
327
  ...workDir === "/tmp/rootfs" ? [] : ['rm -rf "$rootfs"']
330
328
  ].join("\n");
331
329
  }
332
- function templateScript() {
333
- return [
334
- "set -eu",
335
- 'truncate -s "$BYTES" "/out/$OUT_NAME"',
336
- 'mke2fs -q -F -t ext4 -m 0 -E lazy_itable_init=1,lazy_journal_init=1,nodiscard "/out/$OUT_NAME"',
337
- 'chown "$HOST_UID:$HOST_GID" "/out/$OUT_NAME"'
338
- ].join("\n");
339
- }
340
330
  var ids = () => ({ uid: String(process.getuid?.() ?? 0), gid: String(process.getgid?.() ?? 0) });
341
331
  function converterArgs(dest, memoryBytes, extra, script) {
342
332
  const { uid, gid } = ids();
@@ -405,8 +395,11 @@ function createRootfsHost() {
405
395
  await spawnRun("docker", ["rm", "--force", "--volumes", container], { env: env() });
406
396
  }
407
397
  },
408
- async makeTemplate({ bytes, dest, memoryBytes }) {
409
- const made = await spawnRun("docker", converterArgs(dest, memoryBytes, ["-e", `BYTES=${bytes}`], templateScript()), { env: env() });
398
+ async makeTemplate({ bytes, dest }) {
399
+ writeFileSync(dest, "", { mode: RUNNER_FILE_MODE });
400
+ truncateSync(dest, bytes);
401
+ const path = [process.env.PATH, "/usr/sbin", "/sbin"].filter((entry) => entry !== void 0 && entry !== "").join(":");
402
+ const made = await spawnRun("mke2fs", ["-q", "-F", "-t", "ext4", "-m", "0", "-E", "lazy_itable_init=1,lazy_journal_init=1,nodiscard", dest], { env: { ...env(), PATH: path } });
410
403
  if (made.status !== 0) throw new Error(`making the empty build disk failed: ${firstLine(made.stderr)}`);
411
404
  },
412
405
  async imageConfig(imageId) {
@@ -4964,8 +4957,9 @@ function supportsContainerBuilds(machine) {
4964
4957
  if (kind !== "engine" && !(kind === "desktop" && machine.inImage === true)) return false;
4965
4958
  return Number.parseInt(version ?? "", 10) >= MIN_ENGINE_MAJOR;
4966
4959
  }
4967
- function supportsMicroVmBuilds(machine) {
4968
- return machine.platform === "linux" && machine.kvm?.state === "usable" && supportsContainerBuilds(machine) && microVmAssetsPinned(machine);
4960
+ function supportsMicroVmBuilds(machine, imageBuild = "vm") {
4961
+ if (!(machine.platform === "linux" && machine.kvm?.state === "usable" && microVmAssetsPinned(machine))) return false;
4962
+ return supportsContainerBuilds(machine) || imageBuild === "vm" && builderDiskPinned(machine.arch);
4969
4963
  }
4970
4964
  function microVmArchSupported(machine) {
4971
4965
  return MICROVM_ARCHES.includes(machine.arch ?? "");
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
4
- import { autoConnect } from './chunk-3M6UYJSR.js';
5
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
4
+ import { autoConnect } from './chunk-AVPLEFQR.js';
6
5
  import { C } from './chunk-ANPNT6PM.js';
7
- import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-TVGLNHEB.js';
6
+ import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-3N77LUQI.js';
7
+ import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
8
8
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
9
9
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
10
10
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { parseSize, BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-MPDLZCXM.js';
4
- import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-N7LAEN3T.js';
3
+ import { parseSize, BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-5AFPP3GZ.js';
4
+ import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-PXGU3GKY.js';
5
5
  import { spawnSync } from 'child_process';
6
6
  import { statfsSync, statSync, existsSync, readdirSync } from 'fs';
7
7
  import { dirname, join } from 'path';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-N7LAEN3T.js';
3
+ import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-PXGU3GKY.js';
4
4
  import { generateKeyPairSync, createPrivateKey, createPublicKey, sign } from 'crypto';
5
5
  import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
6
6
 
@@ -2,11 +2,11 @@
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-3M6UYJSR.js';
6
- import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-AJYZNISW.js';
5
+ import { autoConnect } from './chunk-AVPLEFQR.js';
7
6
  import { C } from './chunk-ANPNT6PM.js';
8
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-TVGLNHEB.js';
7
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-3N77LUQI.js';
9
8
  import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
9
+ import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-AJYZNISW.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';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { scrubReason, stripTerminalControls } from './chunk-RNVBSRZZ.js';
4
- import { RunnerAlreadyRunningError, readPidFile } from './chunk-ENFBYN4A.js';
3
+ import { scrubReason, stripTerminalControls } from './chunk-FD5ASWTG.js';
4
+ import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-INOUUSYI.js';
5
+ import { RunnerAlreadyRunningError, readPidFile } from './chunk-YNMVVQOQ.js';
5
6
  import { isSameProcess } from './chunk-JBJTC3UU.js';
6
- import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-AABYHGVO.js';
7
- import { isSignatureRefusal, postJson } from './chunk-IW6Z337K.js';
8
- import { signerFor } from './chunk-XLJLR7EK.js';
9
- import { pidFilePath } from './chunk-N7LAEN3T.js';
7
+ import { isSignatureRefusal, postJson } from './chunk-UN3SQTVL.js';
8
+ import { signerFor } from './chunk-MOI2KDLH.js';
9
+ import { pidFilePath } from './chunk-PXGU3GKY.js';
10
10
  import { readFileSync } from 'fs';
11
11
 
12
12
  createRequire(import.meta.url);
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RELAY_PORT, GATEWAY_SOCKET, GATEWAY_PORT, CLAUDE_SOCKET, CLAUDE_PORT, DESTINATION_BASE_PORT } from './chunk-YOBQIXX6.js';
3
+ import { RELAY_PORT, GATEWAY_SOCKET, GATEWAY_PORT, CLAUDE_SOCKET, CLAUDE_PORT, DESTINATION_BASE_PORT } from './chunk-G4W4B33M.js';
4
4
  import { symlinkSync, unlinkSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -1,9 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { DEFAULT_UNIT_NAME } from './chunk-AABYHGVO.js';
4
- import { RUNNER_FILE_MODE } from './chunk-N7LAEN3T.js';
5
- import { claudeEnvPath, withoutCredentialLines } from './chunk-YOBQIXX6.js';
6
- import { parseRunnerEnv } from './chunk-HACGUL52.js';
3
+ import { DEFAULT_UNIT_NAME } from './chunk-INOUUSYI.js';
4
+ import { RUNNER_FILE_MODE } from './chunk-PXGU3GKY.js';
5
+ import { claudeEnvPath, withoutCredentialLines, parseRunnerEnv } from './chunk-G4W4B33M.js';
7
6
  import { existsSync, readFileSync, writeFileSync, renameSync, rmSync } from 'fs';
8
7
  import { join, dirname } from 'path';
9
8
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { currentLink } from './chunk-DUPM5LVJ.js';
3
+ import { currentLink } from './chunk-UMYYYF7B.js';
4
4
  import { readFileSync, statSync, chmodSync, mkdirSync, writeFileSync, renameSync, rmSync, existsSync, lstatSync, accessSync, constants, realpathSync } from 'fs';
5
5
  import { randomBytes } from 'crypto';
6
6
  import { join, dirname, delimiter, resolve } from 'path';
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readNewestDemo } from './chunk-ER6KQCVJ.js';
4
- import { runEmitArtifact } from './chunk-E34FRRSW.js';
4
+ import { runEmitArtifact } from './chunk-TBKV4L2W.js';
5
5
  import { VoiceDownloadError, downloadPinned, sha256OfFile } from './chunk-2PGI6RDE.js';
6
- import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-ES4ULBAL.js';
6
+ import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-4UPET3R7.js';
7
7
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
8
- import { autoConnect } from './chunk-3M6UYJSR.js';
9
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
8
+ import { autoConnect } from './chunk-AVPLEFQR.js';
10
9
  import { C } from './chunk-ANPNT6PM.js';
11
- import { defaultFetch, resolveGatewayCredentials } from './chunk-TVGLNHEB.js';
10
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-3N77LUQI.js';
11
+ import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
12
12
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
13
13
  import { ARTIFACT_MAX_BYTES, ARTIFACT_MAX_CAPTION_LENGTH, DEMO_RECORD_MEDIA_TYPE, ARTIFACT_MAX_REPLACES_TARGETS, DemoManifestSchema, ARTIFACT_KINDS } from './chunk-EOTMDIYC.js';
14
14
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { BUILD_HOME } from './chunk-YOBQIXX6.js';
3
+ import { BUILD_HOME } from './chunk-G4W4B33M.js';
4
4
  import { join, dirname } from 'path';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { uploadSpooledSteps } from './chunk-LMICI7AY.js';
3
+ import { uploadSpooledSteps } from './chunk-EGVHFHY4.js';
4
4
  import { LaunchFilter } from './chunk-ESVW4MJY.js';
5
5
  import { RepoFilter } from './chunk-TBT347UY.js';
6
- import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-MECW77XP.js';
7
- import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-AJYZNISW.js';
8
6
  import { C } from './chunk-ANPNT6PM.js';
9
- import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-TVGLNHEB.js';
7
+ import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-MECW77XP.js';
8
+ import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-3N77LUQI.js';
10
9
  import { readCloudConfig, cloudConfigPath, writeCloudConfig } from './chunk-PJDQPF5N.js';
11
- import { signerFor, signRunnerRequest } from './chunk-XLJLR7EK.js';
12
- import { writeSyncStatus, spoolDir } from './chunk-CXQCBAKO.js';
10
+ import { signerFor, signRunnerRequest } from './chunk-MOI2KDLH.js';
11
+ import { writeSyncStatus, spoolDir } from './chunk-25GRRBTH.js';
13
12
  import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
14
13
  import { hookExecSpoolPath } from './chunk-2O5KA67H.js';
15
14
  import { applyReportedCost } from './chunk-BKO6JEZI.js';
16
15
  import { readRepoConnection, findGitDirs } from './chunk-BJ3KTMDH.js';
16
+ import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-AJYZNISW.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';
@@ -2,10 +2,10 @@
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-3M6UYJSR.js';
6
- import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
5
+ import { autoConnect } from './chunk-AVPLEFQR.js';
7
6
  import { C } from './chunk-ANPNT6PM.js';
8
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-TVGLNHEB.js';
7
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-3N77LUQI.js';
8
+ import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
9
9
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
11
11
  import { CriteriaListSchema } from './chunk-EOTMDIYC.js';
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { WorkCommandError, postJson } from './chunk-IW6Z337K.js';
4
- import { defaultGitRunner, materializeContext, fetchControlPlaneCommit, lookupGoverningSource } from './chunk-QOUR4CQ7.js';
5
- import { signingFetchFor } from './chunk-TVGLNHEB.js';
6
- import { signerFor } from './chunk-XLJLR7EK.js';
7
- import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-N7LAEN3T.js';
3
+ import { WorkCommandError, postJson } from './chunk-UN3SQTVL.js';
4
+ import { defaultGitRunner, materializeContext, fetchControlPlaneCommit, lookupGoverningSource } from './chunk-CAQCDYKF.js';
5
+ import { signingFetchFor } from './chunk-3N77LUQI.js';
6
+ import { signerFor } from './chunk-MOI2KDLH.js';
8
7
  import { unsupportedLayout, layoutRefusalReason, composeDelivery } from './chunk-FGF52V4V.js';
9
8
  import { SHIM_SCRIPT, GOVERNANCE_VARIABLE } from './chunk-HCVLP7XA.js';
10
9
  import { readDegraded, readContextManifest, readSourceCache } from './chunk-YQR6E6OV.js';
10
+ import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-PXGU3GKY.js';
11
11
  import { fstatSync, mkdirSync, writeFileSync, chmodSync, rmSync, cpSync, readFileSync, existsSync, lstatSync } from 'fs';
12
12
  import { relative, join, dirname } from 'path';
13
13
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { stripTerminalControls } from './chunk-RNVBSRZZ.js';
4
- import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-36T6W5RA.js';
3
+ import { stripTerminalControls } from './chunk-FD5ASWTG.js';
4
+ import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-SYVRBBLW.js';
5
5
  import { readFileSync } from 'fs';
6
6
 
7
7
  createRequire(import.meta.url);
@@ -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-YZKRM7IP.js')).spawnRun;
58
+ const run = deps.run ?? (await import('./docker-TAC6G4VU.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,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RELAY_PORT, BUILD_HOME } from './chunk-YOBQIXX6.js';
3
+ import { RELAY_PORT, BUILD_HOME } from './chunk-G4W4B33M.js';
4
4
  import { createServer, connect } from 'net';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import { escapeUnitPath, UNIT_MARKER, DEFAULT_UNIT_NAME } from './chunk-INOUUSYI.js';
4
+ import { inspectService, realInspectProbes } from './chunk-G4W4B33M.js';
5
+ import { realpathSync, readFileSync, readdirSync } from 'fs';
6
+ import { resolve, dirname, join } from 'path';
7
+
8
+ createRequire(import.meta.url);
9
+ function realUnitFiles(directory = "/etc/systemd/system") {
10
+ return {
11
+ list: () => {
12
+ try {
13
+ return readdirSync(directory).filter((name) => name.endsWith(".service")).map((name) => name.slice(0, -".service".length));
14
+ } catch {
15
+ return [];
16
+ }
17
+ },
18
+ read: (name) => {
19
+ try {
20
+ return readFileSync(join(directory, `${name}.service`), "utf8");
21
+ } catch {
22
+ return void 0;
23
+ }
24
+ }
25
+ };
26
+ }
27
+ function findServiceUnit(configDir, units = realUnitFiles()) {
28
+ const absolute = resolve(configDir);
29
+ const folders = /* @__PURE__ */ new Set([absolute, resolvedOr(absolute)]);
30
+ const lines = [...folders].map((folder) => `EnvironmentFile=-${escapeUnitPath(`${folder}/runner.env`)}`);
31
+ for (const name of units.list()) {
32
+ const text = units.read(name);
33
+ if (text?.startsWith(UNIT_MARKER) !== true) continue;
34
+ const have = text.split("\n");
35
+ if (lines.some((line) => have.includes(line))) return name;
36
+ }
37
+ return DEFAULT_UNIT_NAME;
38
+ }
39
+ function resolvedOr(path) {
40
+ try {
41
+ return realpathSync(path);
42
+ } catch {
43
+ return path;
44
+ }
45
+ }
46
+ function inspectRunnerService(configPath, probes = realInspectProbes(), units = realUnitFiles()) {
47
+ const configDir = dirname(configPath);
48
+ return inspectService(findServiceUnit(configDir, units), configDir, probes);
49
+ }
50
+
51
+ export { findServiceUnit, inspectRunnerService };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { isVersion, compareVersions } from './chunk-TQMI335S.js';
4
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-N7LAEN3T.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-PXGU3GKY.js';
5
5
  import { readFileSync, mkdirSync, writeFileSync, renameSync } from 'fs';
6
6
  import { join } 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-WIK5KUGK.js';
3
+ import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-QANM5COC.js';
4
4
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
5
5
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
6
- import { autoConnect } from './chunk-3M6UYJSR.js';
6
+ import { autoConnect } from './chunk-AVPLEFQR.js';
7
+ import { C } from './chunk-ANPNT6PM.js';
7
8
  import { readEffectiveArtifactSpoolState, localArtifactIds, isArtifactTombstoned, artifactBlobsDir, appendArtifactRecord, artifactsSpoolPath, findPendingArtifactRecord, sanitizeTerminal, appendArtifactTombstone } from './chunk-MECW77XP.js';
9
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-3N77LUQI.js';
8
10
  import { resolveRepoIdentity } from './chunk-AJYZNISW.js';
9
- import { C } from './chunk-ANPNT6PM.js';
10
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-TVGLNHEB.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-EOTMDIYC.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-N7LAEN3T.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-PXGU3GKY.js';
4
4
  import { readFileSync, existsSync, rmSync, mkdirSync, writeFileSync, renameSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-N7LAEN3T.js';
3
+ import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-PXGU3GKY.js';
4
4
  import { readlinkSync, realpathSync, mkdirSync, unlinkSync, symlinkSync, renameSync, readFileSync, writeFileSync, rmSync, existsSync, readdirSync } from 'fs';
5
5
  import { join, basename, sep, resolve } from 'path';
6
6