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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/dist/{agent-setup-2A6P2SYL.js → agent-setup-THDNZ5ME.js} +6 -6
  2. package/dist/{bridge-F5FBQSPZ.js → bridge-MLB57JP6.js} +2 -2
  3. package/dist/build-25GDCEZ7.js +18 -0
  4. package/dist/{build-disk-RZ7AZKTY.js → build-disk-NFMQCZM3.js} +8 -8
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-MQIL24HI.js → builder-OWDGC3VQ.js} +7 -7
  7. package/dist/{check-YIUZ3UX3.js → check-QGM2SECF.js} +39 -39
  8. package/dist/{chunk-RR3VDM7M.js → chunk-2YPOSVC7.js} +3 -3
  9. package/dist/{chunk-66LH5QAV.js → chunk-36M4KVBT.js} +2 -2
  10. package/dist/{chunk-LQHCNXPK.js → chunk-3FTIUB7I.js} +1 -1
  11. package/dist/{chunk-QWXBWOVV.js → chunk-3RRYEZAC.js} +4 -4
  12. package/dist/{chunk-GJ4KBHBD.js → chunk-3VJYDWFV.js} +1 -1
  13. package/dist/{chunk-CCHSD7RS.js → chunk-4QQJTJUN.js} +1 -1
  14. package/dist/{chunk-P3NPTFLF.js → chunk-5ARXP3BP.js} +3 -3
  15. package/dist/{chunk-IYQPUGST.js → chunk-5FHBVV25.js} +104 -59
  16. package/dist/{chunk-7QAJQDHS.js → chunk-62URQYCB.js} +1 -1
  17. package/dist/{chunk-QABXXQ67.js → chunk-6IMQXBTZ.js} +6 -6
  18. package/dist/{chunk-77VBS2RT.js → chunk-7Q7GQELE.js} +5 -5
  19. package/dist/{chunk-QRJIBTNQ.js → chunk-7SJNVGVC.js} +6 -6
  20. package/dist/{chunk-FQGC22IP.js → chunk-7TLGRE5F.js} +2 -2
  21. package/dist/{chunk-OOD5NDQA.js → chunk-A6PJSNP6.js} +349 -94
  22. package/dist/{chunk-7PCA37ZS.js → chunk-ANFNZCXZ.js} +5 -5
  23. package/dist/{chunk-MN3PP45X.js → chunk-AV5T7HV3.js} +1 -1
  24. package/dist/{chunk-DX4FF5P5.js → chunk-BCIBSJZH.js} +43 -24
  25. package/dist/{chunk-6KFJIU73.js → chunk-BS3OYFAD.js} +1 -1
  26. package/dist/{chunk-TS3EFB7S.js → chunk-BS4CZMT6.js} +1 -1
  27. package/dist/{chunk-SDELQEG4.js → chunk-CFJOONWM.js} +1 -1
  28. package/dist/{chunk-UWDFA6WW.js → chunk-CKVJSOY3.js} +20 -20
  29. package/dist/{chunk-GTBY7BTI.js → chunk-CMMEJJTL.js} +10 -35
  30. package/dist/{chunk-OKGHWCSK.js → chunk-EYJRVHBN.js} +3 -3
  31. package/dist/{chunk-GR7ZVGNI.js → chunk-FLHBUQ2W.js} +7 -6
  32. package/dist/{chunk-72CJOYN6.js → chunk-FVVHQIZR.js} +1 -1
  33. package/dist/{chunk-SDAEXUIX.js → chunk-GMKDAF37.js} +26 -6
  34. package/dist/{chunk-CFFVCI2I.js → chunk-GPO7F757.js} +1 -1
  35. package/dist/{chunk-EBVK3QBO.js → chunk-HJCNWEQK.js} +3 -3
  36. package/dist/{chunk-LKTH7PUH.js → chunk-J3Q3QCOF.js} +393 -91
  37. package/dist/{chunk-MYLOOVRJ.js → chunk-JO4SAEHH.js} +3 -3
  38. package/dist/{chunk-3VZTNXK5.js → chunk-JVNQNKHV.js} +1 -1
  39. package/dist/{chunk-DEJCZ43H.js → chunk-JWMJMQRF.js} +83 -7
  40. package/dist/{chunk-JL4GSPGD.js → chunk-KVGK2JL3.js} +6 -6
  41. package/dist/{chunk-BLSEHKZ4.js → chunk-LYX2RRSF.js} +2 -2
  42. package/dist/{chunk-WPDL7MBC.js → chunk-MGF346ND.js} +3 -3
  43. package/dist/{chunk-SSRB5HEL.js → chunk-N33OOF3K.js} +11 -11
  44. package/dist/{chunk-36U7LY7C.js → chunk-NEBMTP7T.js} +6 -6
  45. package/dist/{chunk-O7QPHJWN.js → chunk-NO6E72RM.js} +2 -2
  46. package/dist/{chunk-7QF2EXAN.js → chunk-OHTMTMFX.js} +4 -4
  47. package/dist/{chunk-Q2KGDDUX.js → chunk-OP2L7OXA.js} +3 -3
  48. package/dist/{chunk-WBTPI5MP.js → chunk-QRIE4JZE.js} +3 -3
  49. package/dist/{chunk-ZK3A4W3I.js → chunk-QWSAZGH6.js} +14 -6
  50. package/dist/{chunk-7DK2FOZ4.js → chunk-RCAMBC3H.js} +3 -3
  51. package/dist/{chunk-L5VHGRQE.js → chunk-RJZZFAXS.js} +1 -1
  52. package/dist/{chunk-JA2ARVY6.js → chunk-T6ALNN3H.js} +1 -1
  53. package/dist/{chunk-HOUFCUMH.js → chunk-UZIAZXXO.js} +1 -1
  54. package/dist/{chunk-25XBOX3K.js → chunk-W246VXU4.js} +3 -3
  55. package/dist/{chunk-YL3RWW7X.js → chunk-WR2GRWK3.js} +1 -1
  56. package/dist/{chunk-QUOITPN7.js → chunk-WX2HW2G2.js} +8 -1
  57. package/dist/{chunk-HDLON3RJ.js → chunk-X7M73LKT.js} +9 -2
  58. package/dist/{chunk-WYR4INK3.js → chunk-Z4LFCJT6.js} +3 -3
  59. package/dist/{claude-launcher-EO3ALKBS.js → claude-launcher-LYGS66AC.js} +1 -1
  60. package/dist/{cli-MP5AUR36.js → cli-HVBFWC3J.js} +114 -113
  61. package/dist/{command-RGBJLW72.js → command-J3CDQLWC.js} +27 -27
  62. package/dist/{config-NGCQD6SN.js → config-5NWSCHIO.js} +9 -9
  63. package/dist/{connect-cmd-65YBQRSY.js → connect-cmd-HB3K3AHE.js} +6 -6
  64. package/dist/{container-start-KT2KKAQX.js → container-start-YLKDT2JG.js} +33 -33
  65. package/dist/{context-show-cmd-S5SEBOI2.js → context-show-cmd-RJIQS2KF.js} +7 -7
  66. package/dist/{control-plane-launch-BDSUP4DK.js → control-plane-launch-TS4DFJF4.js} +5 -5
  67. package/dist/{demo-record-cmd-BUNOOCNM.js → demo-record-cmd-VVZGUCWB.js} +4 -4
  68. package/dist/{demo-voice-cmd-RWTRJUAX.js → demo-voice-cmd-3ADGIWK6.js} +13 -13
  69. package/dist/{dist-ADKRGE7I.js → dist-BUSLJNSZ.js} +1 -1
  70. package/dist/{docker-TRGA5QRL.js → docker-5VGCFZV2.js} +7 -7
  71. package/dist/{doctor-NEO7NXJJ.js → doctor-AG73VZNG.js} +32 -30
  72. package/dist/{emit-artifact-cmd-56C6DBUP.js → emit-artifact-cmd-WJT7AXTZ.js} +11 -11
  73. package/dist/{emit-criteria-cmd-HRCWXD3W.js → emit-criteria-cmd-45IYB535.js} +8 -8
  74. package/dist/{emit-demo-cmd-QMRDQGB6.js → emit-demo-cmd-AIIQNPXS.js} +13 -13
  75. package/dist/{emit-finding-cmd-6MVFN4BO.js → emit-finding-cmd-6YTJK2NA.js} +8 -8
  76. package/dist/{emit-result-cmd-E3YYBXRY.js → emit-result-cmd-TZGFY743.js} +10 -10
  77. package/dist/{emit-step-cmd-DM4CRYYI.js → emit-step-cmd-LGBTIAXC.js} +8 -8
  78. package/dist/{exec-client-LXHTMVIB.js → exec-client-LR67CA24.js} +3 -3
  79. package/dist/find-unit-YGDFVHVU.js +19 -0
  80. package/dist/{findings-cmd-K2OYBTUH.js → findings-cmd-ETJXUDQI.js} +8 -8
  81. package/dist/{fleet-readiness-VIAVQYRP.js → fleet-readiness-MYIMDBF7.js} +5 -5
  82. package/dist/{governing-source-MQA2SDJT.js → governing-source-GBJTVMK2.js} +10 -10
  83. package/dist/{guest-init-WWL2WL7R.js → guest-init-GXPOW53F.js} +4 -4
  84. package/dist/{hook-fast-KXAQ22LZ.js → hook-fast-5WOGLR7V.js} +1 -1
  85. package/dist/{host-checks-JH2ILNZT.js → host-checks-6G2F2HTK.js} +31 -31
  86. package/dist/{pending-UWFDVFOA.js → host-key-GAZM4EOH.js} +3 -3
  87. package/dist/{image-tag-BTXKIH73.js → image-tag-OYHGRHVV.js} +3 -3
  88. package/dist/index.js +4 -4
  89. package/dist/{init-WGVNY4NP.js → init-7VWIU5TG.js} +24 -24
  90. package/dist/{init-HGJQW2NL.js → init-Y2OJSOAA.js} +24 -24
  91. package/dist/{init-cmd-L2SG2WSN.js → init-cmd-77XKBRUF.js} +11 -11
  92. package/dist/{init-update-JMVLGBDE.js → init-update-TXQHBY3H.js} +9 -9
  93. package/dist/{install-cmd-RGO7NWKP.js → install-cmd-VZGXSS73.js} +5 -5
  94. package/dist/{logs-LEVH6VAI.js → logs-42QPBCMC.js} +2 -2
  95. package/dist/{loop-F6E6PGWG.js → loop-FRT5NSFG.js} +38 -38
  96. package/dist/{machine-GYTMJSIY.js → machine-TEG554M5.js} +24 -24
  97. package/dist/{mcp-serve-cmd-4O5INM77.js → mcp-serve-cmd-LYJQO6U4.js} +4 -4
  98. package/dist/{paths-AQ47ZRHK.js → paths-QLFRPIKS.js} +2 -2
  99. package/dist/{host-key-TSOKVSZX.js → pending-6DDSCXUD.js} +3 -3
  100. package/dist/{pidfile-PCG2H5T4.js → pidfile-WLZ427QQ.js} +3 -3
  101. package/dist/{record-SVCNFCGQ.js → record-WGCMQLQS.js} +3 -3
  102. package/dist/{runner-env-DH7YA4BU.js → runner-env-6FSJOSWS.js} +11 -11
  103. package/dist/{runner-identity-GLL56XY7.js → runner-identity-XODZ7YBP.js} +7 -7
  104. package/dist/{runner-key-HMXSBRBE.js → runner-key-T3V7N7CL.js} +24 -24
  105. package/dist/{session-sender-KLOMLL7X.js → session-sender-U54EQJNR.js} +11 -11
  106. package/dist/{spec-cmd-MX5QFW32.js → spec-cmd-EM24GTAM.js} +9 -9
  107. package/dist/{status-QNKTP6OU.js → status-4YO4TUEH.js} +31 -31
  108. package/dist/{sync-cmd-CO4DFMHU.js → sync-cmd-Y5RKWVF7.js} +10 -10
  109. package/dist/{update-steps-M2UKG4QZ.js → update-steps-KNN4Y2ZU.js} +32 -32
  110. package/dist/{watch-GU62YVQY.js → watch-X5VYY4LH.js} +10 -10
  111. package/dist/{work-claim-cmd-JF5GGDFZ.js → work-claim-cmd-IU3YJQKR.js} +15 -15
  112. package/dist/{work-cmd-VR7PPSP6.js → work-cmd-LUKJHAMH.js} +8 -8
  113. package/dist/{work-comment-cmd-HVZF72B4.js → work-comment-cmd-BDNFAVKL.js} +9 -9
  114. package/dist/{work-demo-cmd-EDGNM5VJ.js → work-demo-cmd-GPDJHU6F.js} +8 -8
  115. package/dist/{work-logs-cmd-ZZVAHX36.js → work-logs-cmd-B6EX4RPE.js} +8 -8
  116. package/dist/{work-open-pr-cmd-AQWZRJHZ.js → work-open-pr-cmd-TRXDCMSG.js} +9 -9
  117. package/dist/{work-pr-cmd-UJ7VWCJN.js → work-pr-cmd-5GUR5SIU.js} +8 -8
  118. package/dist/{work-proofs-cmd-A7SZSM2A.js → work-proofs-cmd-PBY7WNYI.js} +9 -9
  119. package/dist/{work-proofs-record-YG6HD6SJ.js → work-proofs-record-AVKJFZOD.js} +16 -16
  120. package/dist/{work-stop-cmd-SAT4XVM2.js → work-stop-cmd-J47GZB2N.js} +8 -8
  121. package/package.json +1 -1
  122. package/skill-pack/maintained/outerlayer-build/SKILL.md +15 -0
  123. package/dist/build-FS7TQEJ6.js +0 -18
  124. package/dist/find-unit-IOCVYPNW.js +0 -19
@@ -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-OKGHWCSK.js';
5
+ import { autoConnect } from './chunk-EYJRVHBN.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-7QAJQDHS.js';
7
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-62URQYCB.js';
8
8
  import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
9
- import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-OOD5NDQA.js';
9
+ import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-A6PJSNP6.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,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { EXEC_PORT } from './chunk-6KFJIU73.js';
3
+ import { EXEC_PORT } from './chunk-BS3OYFAD.js';
4
4
  import { createConnection } from 'net';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -1,16 +1,64 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-BLSEHKZ4.js';
4
- import { parseSize } from './chunk-GR7ZVGNI.js';
5
- import { builderDiskPinned } from './chunk-QUOITPN7.js';
3
+ import { DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-LYX2RRSF.js';
4
+ import { parseSize } from './chunk-FLHBUQ2W.js';
5
+ import { builderDiskPinned } from './chunk-WX2HW2G2.js';
6
6
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
7
- import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-SDAEXUIX.js';
7
+ import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-GMKDAF37.js';
8
8
  import { existsSync, statSync, accessSync, constants, readFileSync } from 'fs';
9
9
  import { hostname } from 'os';
10
10
  import { join } from 'path';
11
11
 
12
12
  createRequire(import.meta.url);
13
13
 
14
+ // src/runner/container/egress.ts
15
+ var MANAGED_EGRESS = {
16
+ connectionsPerSecond: 20,
17
+ connectionBurst: 200,
18
+ openConnections: 256,
19
+ sendBytesPerSecond: 2e7,
20
+ flagHosts: 100
21
+ };
22
+ var EGRESS_SWITCHABLE_KEYS = ["connectionsPerSecond", "openConnections", "sendBytesPerSecond", "flagHosts"];
23
+ var emptyEgressCounts = () => ({
24
+ connectionsOpened: 0,
25
+ peakConnectionsPerSecond: 0,
26
+ peakOpenConnections: 0,
27
+ bytesSent: 0,
28
+ refused: { connectionRate: 0, openConnections: 0 },
29
+ hostsFlagged: false
30
+ });
31
+ var systemClock = { now: () => performance.now(), sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)) };
32
+ function resolveEgress(given, managed) {
33
+ if (!managed && given === void 0) return void 0;
34
+ const base = managed ? MANAGED_EGRESS : { connectionsPerSecond: 0, connectionBurst: MANAGED_EGRESS.connectionBurst, openConnections: 0, sendBytesPerSecond: 0, flagHosts: 0 };
35
+ return { ...base, ...given };
36
+ }
37
+ var plural = (n, one, many) => `${n} ${n === 1 ? one : many}`;
38
+ function bytesText(n) {
39
+ if (n < 1024) return `${n} B`;
40
+ const units = ["KiB", "MiB", "GiB", "TiB"];
41
+ let value = n / 1024;
42
+ let unit = 0;
43
+ while (value >= 1024 && unit < units.length - 1) {
44
+ value /= 1024;
45
+ unit++;
46
+ }
47
+ return `${value.toFixed(1)} ${units[unit]}`;
48
+ }
49
+ function egressSummary(counts) {
50
+ const parts = [
51
+ `tunnel ${plural(counts.connectionsOpened ?? 0, "connection", "connections")} opened`,
52
+ `peak ${counts.peakConnectionsPerSecond ?? 0} in one second`,
53
+ `peak ${counts.peakOpenConnections ?? 0} open`,
54
+ `${bytesText(counts.bytesSent ?? 0)} sent`,
55
+ `refused ${counts.refused?.connectionRate ?? 0} by connection-rate`,
56
+ `refused ${counts.refused?.openConnections ?? 0} by open-connections`
57
+ ];
58
+ if (counts.hostsFlagged) parts.push("flagged for reaching many remote hosts");
59
+ return parts.join(" \xB7 ");
60
+ }
61
+
14
62
  // src/runner/allow-hosts.ts
15
63
  var MAX_ALLOW_HOSTS = 500;
16
64
  var LABEL = /^(?!-)[a-z0-9-]{1,63}(?<!-)$/;
@@ -82,7 +130,8 @@ function imageBuildOf(config) {
82
130
  function keepsHostBuilder(config, builderDiskIsPinned) {
83
131
  return !(imageBuildOf(config) === "vm" && (builderDiskIsPinned ?? builderDiskPinned()));
84
132
  }
85
- var BUILD_KEYS = ["memory", "cpus", "pids", "disk", "cacheDisk", "variables", "destinations", "allowHosts", "imageBuild"];
133
+ var BUILD_KEYS = ["memory", "cpus", "pids", "disk", "cacheDisk", "variables", "destinations", "allowHosts", "imageBuild", "egress"];
134
+ var EGRESS_KEYS = ["connectionsPerSecond", "connectionBurst", "openConnections", "sendBytesPerSecond", "flagHosts"];
86
135
  var HOUSEKEEPING_KEYS = ["jobsKeepDays", "buildCacheMax", "minFreeDisk"];
87
136
  var DEFAULT_JOBS_KEEP_DAYS = 30;
88
137
  var DEFAULT_BUILD_CACHE_MAX = "20g";
@@ -446,6 +495,7 @@ function resolveBuild(configPath, block) {
446
495
  if (given.imageBuild !== void 0 && given.imageBuild !== "vm" && given.imageBuild !== "host") {
447
496
  fail(configPath, "runner.build.imageBuild", "must be vm or host");
448
497
  }
498
+ const egress = resolveEgressBlock(configPath, given.egress);
449
499
  return {
450
500
  memory: given.memory ?? DEFAULT_BUILD.memory,
451
501
  cpus: given.cpus ?? DEFAULT_BUILD.cpus,
@@ -455,8 +505,34 @@ function resolveBuild(configPath, block) {
455
505
  variables,
456
506
  ...destinations.length === 0 ? {} : { destinations },
457
507
  ...allowHosts === void 0 ? {} : { allowHosts },
458
- ...given.imageBuild === void 0 ? {} : { imageBuild: given.imageBuild }
508
+ ...given.imageBuild === void 0 ? {} : { imageBuild: given.imageBuild },
509
+ ...egress === void 0 ? {} : { egress }
459
510
  };
460
511
  }
512
+ function resolveEgressBlock(configPath, block) {
513
+ if (block === void 0) return void 0;
514
+ if (typeof block !== "object" || block === null || Array.isArray(block)) fail(configPath, "runner.build.egress", "must be an object");
515
+ const given = block;
516
+ const out = {};
517
+ for (const [key, value] of Object.entries(given)) {
518
+ if (!EGRESS_KEYS.includes(key)) {
519
+ const near = nearestKey(key, EGRESS_KEYS);
520
+ fail(configPath, `runner.build.egress.${key}`, near ? `is not a key this block accepts; did you mean ${near}?` : "is not a key this block accepts");
521
+ }
522
+ const least = key === "connectionBurst" ? 1 : 0;
523
+ if (typeof value !== "number" || !Number.isInteger(value) || value < least) {
524
+ fail(configPath, `runner.build.egress.${key}`, least === 1 ? "must be a whole number of at least 1" : "must be a whole number of 0 or more; 0 turns the limit off");
525
+ }
526
+ out[key] = value;
527
+ }
528
+ return out;
529
+ }
530
+ function optionalEgress(config) {
531
+ const egress = egressLimitsOf(config);
532
+ return egress === void 0 ? {} : { egress };
533
+ }
534
+ function egressLimitsOf(config) {
535
+ return resolveEgress(config.build?.egress, config.managed === true);
536
+ }
461
537
 
462
- export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, MAX_ALLOW_HOSTS, RunnerConfigError, allowHostProblem, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, hostAllowed, imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, keepsHostBuilder, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerCredentialProblem, runnerVmOf };
538
+ export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, EGRESS_SWITCHABLE_KEYS, MAX_ALLOW_HOSTS, RunnerConfigError, allowHostProblem, builtinKind, checkHooks, defaultRunnerConfigPath, egressSummary, emptyEgressCounts, hasRunnerBlock, hostAllowed, imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, keepsHostBuilder, loadRunnerConfig, optionalEgress, resolveBuild, resolveHousekeeping, runnerCredentialProblem, runnerVmOf, systemClock };
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { scrubReason, stripTerminalControls } from './chunk-DX4FF5P5.js';
4
- import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-7QF2EXAN.js';
5
- import { RunnerAlreadyRunningError, readPidFile } from './chunk-LQHCNXPK.js';
3
+ import { scrubReason, stripTerminalControls } from './chunk-BCIBSJZH.js';
4
+ import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-OHTMTMFX.js';
5
+ import { RunnerAlreadyRunningError, readPidFile } from './chunk-3FTIUB7I.js';
6
6
  import { isSameProcess } from './chunk-JBJTC3UU.js';
7
- import { isSignatureRefusal, postJson } from './chunk-QABXXQ67.js';
8
- import { signerFor } from './chunk-L5VHGRQE.js';
9
- import { pidFilePath } from './chunk-GJ4KBHBD.js';
7
+ import { isSignatureRefusal, postJson } from './chunk-6IMQXBTZ.js';
8
+ import { signerFor } from './chunk-RJZZFAXS.js';
9
+ import { pidFilePath } from './chunk-3VJYDWFV.js';
10
10
  import { readFileSync } from 'fs';
11
11
 
12
12
  createRequire(import.meta.url);
@@ -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-GR7ZVGNI.js';
4
- import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-GJ4KBHBD.js';
3
+ import { parseSize, BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-FLHBUQ2W.js';
4
+ import { buildsDir, rootfsDir, runnerDir, imagesDir, builderCacheDiskPath } from './chunk-3VJYDWFV.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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { stripTerminalControls } from './chunk-DX4FF5P5.js';
4
- import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-SDELQEG4.js';
3
+ import { stripTerminalControls } from './chunk-BCIBSJZH.js';
4
+ import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-CFJOONWM.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-TRGA5QRL.js')).spawnRun;
58
+ const run = deps.run ?? (await import('./docker-5VGCFZV2.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,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { checkStarterFiles, contextIsGoverned } from './chunk-TZMDRHWB.js';
4
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-QABXXQ67.js';
5
- import { isLinkedRepository } from './chunk-O7QPHJWN.js';
4
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-6IMQXBTZ.js';
5
+ import { isLinkedRepository } from './chunk-NO6E72RM.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
- import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-JA2ARVY6.js';
7
+ import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-T6ALNN3H.js';
8
8
  import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
9
9
  import { checkFormerSkillNames } from './chunk-LMYRR5MO.js';
10
- import { resolveGatewayCredentials, defaultFetch } from './chunk-7QAJQDHS.js';
11
- import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-CCHSD7RS.js';
10
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-62URQYCB.js';
11
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-4QQJTJUN.js';
12
12
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-I7RZHMXW.js';
13
13
  import { hookCommandEscapesControlPlane, CONTROL_PLANE_DIR_VARIABLE } from './chunk-HCVLP7XA.js';
14
14
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
15
- import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-OOD5NDQA.js';
15
+ import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-A6PJSNP6.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-RZ7AZKTY.js');
1199
- const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-NGCQD6SN.js');
1198
+ const { DEFAULT_BUILD_DISK, DEFAULT_CACHE_DISK } = await import('./build-disk-NFMQCZM3.js');
1199
+ const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-5NWSCHIO.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-NEO7NXJJ.js');
1220
+ const { runnerHostChecks } = await import('./doctor-AG73VZNG.js');
1221
1221
  const gateway = (() => {
1222
1222
  try {
1223
1223
  const { url, apiKey, appId } = loadRunnerConfig(configPath);
@@ -1236,7 +1236,7 @@ async function gatherDoctorChecks() {
1236
1236
  const runner = (() => {
1237
1237
  try {
1238
1238
  const { concurrency, build, housekeeping, managed } = loadRunnerConfig(configPath);
1239
- return { concurrency, buildMemory: build?.memory ?? "8g", buildDisk: build?.disk ?? DEFAULT_BUILD_DISK, cacheDisk: build?.cacheDisk ?? DEFAULT_CACHE_DISK, minFreeDisk: housekeeping?.minFreeDisk, allowHosts: build?.allowHosts, ...build?.imageBuild === void 0 ? {} : { imageBuild: build.imageBuild }, ...managed === true ? { managed } : {} };
1239
+ return { concurrency, buildMemory: build?.memory ?? "8g", buildDisk: build?.disk ?? DEFAULT_BUILD_DISK, cacheDisk: build?.cacheDisk ?? DEFAULT_CACHE_DISK, minFreeDisk: housekeeping?.minFreeDisk, allowHosts: build?.allowHosts, ...build?.egress === void 0 ? {} : { egress: build.egress }, ...build?.imageBuild === void 0 ? {} : { imageBuild: build.imageBuild }, ...managed === true ? { managed } : {} };
1240
1240
  } catch {
1241
1241
  return void 0;
1242
1242
  }
@@ -1244,7 +1244,7 @@ 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 { inspectRunnerService } = await import('./find-unit-IOCVYPNW.js');
1247
+ const { inspectRunnerService } = await import('./find-unit-YGDFVHVU.js');
1248
1248
  return inspectRunnerService(configPath);
1249
1249
  })();
1250
1250
  checks.push(...await runnerHostChecks({ configPath, hooks, gateway, repos, runner, service }));
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { criteriaOf, loadCitationFinder, hostItemsOf, MAX_TEST_FILE_BYTES, MAX_TEST_FILES, criterionInputs, NO_CITING_TEST_REASON, NO_VERDICT_REASON, planCriteria } from './chunk-6CK2OC4Q.js';
4
- import { WorkCommandError, resolveCredentials, getJson } from './chunk-QABXXQ67.js';
4
+ import { WorkCommandError, resolveCredentials, getJson } from './chunk-6IMQXBTZ.js';
5
5
  import { C } from './chunk-ANPNT6PM.js';
6
6
  import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
7
- import { defaultFetch } from './chunk-7QAJQDHS.js';
8
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
7
+ import { defaultFetch } from './chunk-62URQYCB.js';
8
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
9
9
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
11
11
  import { readDeliveryRecord } from './chunk-YQR6E6OV.js';
@@ -167,14 +167,14 @@ function governingDir(cwd) {
167
167
  async function testProofMode(cwd) {
168
168
  const dir = governingDir(cwd);
169
169
  if (dir === void 0) return "any";
170
- const { testProofIn } = await import('./host-checks-JH2ILNZT.js');
170
+ const { testProofIn } = await import('./host-checks-6G2F2HTK.js');
171
171
  return testProofIn(dir);
172
172
  }
173
173
  async function judgeCheckName(cwd) {
174
174
  const dir = governingDir(cwd);
175
175
  if (dir === void 0) return {};
176
176
  if (!existsSync(dir)) return { note: `the governed context at ${dir} is not readable` };
177
- const { checksIn, isJudgeCheck } = await import('./host-checks-JH2ILNZT.js');
177
+ const { checksIn, isJudgeCheck } = await import('./host-checks-6G2F2HTK.js');
178
178
  const quiet = { line: () => void 0, error: () => void 0 };
179
179
  const check = checksIn(dir, quiet, "").checks.find((c) => isJudgeCheck(c) && c.judge.subjects === "criteria");
180
180
  return check === void 0 ? {} : { name: check.name };
@@ -314,7 +314,7 @@ async function runWorkProofs(opts) {
314
314
  async function runWorkProofsCommand(opts) {
315
315
  try {
316
316
  if (opts.record) {
317
- const { runWorkProofsRecord } = await import('./work-proofs-record-YG6HD6SJ.js');
317
+ const { runWorkProofsRecord } = await import('./work-proofs-record-AVKJFZOD.js');
318
318
  const result2 = await runWorkProofsRecord(opts);
319
319
  process.exitCode = result2.exitCode;
320
320
  return;
@@ -3,10 +3,10 @@ import { createRequire } from 'node:module';
3
3
  import { DEFAULT_DASHBOARD } from './chunk-NWHU5G6R.js';
4
4
  import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
5
5
  import { isAgentsMdLayout } from './chunk-LYCJQOO2.js';
6
- import { cliFetch, resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
6
+ import { cliFetch, resolveGatewayCredentials } from './chunk-62URQYCB.js';
7
7
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
8
8
  import { findGitDirs, writeRepoConnection, readRepoConnection } from './chunk-BJ3KTMDH.js';
9
- import { remoteLookupFailed } from './chunk-OOD5NDQA.js';
9
+ import { remoteLookupFailed } from './chunk-A6PJSNP6.js';
10
10
  import { cliInvocation } from './chunk-CRB3POP4.js';
11
11
  import { execFileSync } from 'child_process';
12
12
  import { lstatSync } from 'fs';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { builtinKind, keepsHostBuilder } from './chunk-DEJCZ43H.js';
4
- import { parseSize } from './chunk-GR7ZVGNI.js';
5
- import { runnerDir } from './chunk-GJ4KBHBD.js';
6
- import { FD_SLOTS_PER_BUILD, FD_STORE_ENV, BUILD_SLICE_MEMORY_ENV, CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-SDAEXUIX.js';
3
+ import { builtinKind, keepsHostBuilder } from './chunk-JWMJMQRF.js';
4
+ import { parseSize } from './chunk-FLHBUQ2W.js';
5
+ import { runnerDir } from './chunk-3VJYDWFV.js';
6
+ import { FD_SLOTS_PER_BUILD, FD_STORE_ENV, BUILD_SLICE_MEMORY_ENV, CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-GMKDAF37.js';
7
7
  import { existsSync, readFileSync, writeFileSync, chmodSync, renameSync } from 'fs';
8
8
  import { dirname, join } from 'path';
9
9
  import { spawnSync } from 'child_process';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { DEFAULT_UNIT_NAME } from './chunk-7QF2EXAN.js';
4
- import { RUNNER_FILE_MODE } from './chunk-GJ4KBHBD.js';
5
- import { claudeEnvPath, withoutCredentialLines, parseRunnerEnv } from './chunk-SDAEXUIX.js';
3
+ import { DEFAULT_UNIT_NAME } from './chunk-OHTMTMFX.js';
4
+ import { RUNNER_FILE_MODE } from './chunk-3VJYDWFV.js';
5
+ import { claudeEnvPath, withoutCredentialLines, parseRunnerEnv } from './chunk-GMKDAF37.js';
6
6
  import { existsSync, readFileSync, writeFileSync, renameSync, rmSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-QRJIBTNQ.js';
4
- import { spoolDir } from './chunk-CCHSD7RS.js';
5
- import { CaptureDaemon } from './chunk-OOD5NDQA.js';
3
+ import { LiveUploader } from './chunk-7SJNVGVC.js';
4
+ import { spoolDir } from './chunk-4QQJTJUN.js';
5
+ import { CaptureDaemon } from './chunk-A6PJSNP6.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,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { placeholderQueues, placeholderProblem } from './chunk-LKTH7PUH.js';
4
- import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-7QF2EXAN.js';
5
- import { builtinKind, imageBuildOf, keepsHostBuilder } from './chunk-DEJCZ43H.js';
6
- import { realBuildDiskProbe, checkDiskFit, DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-BLSEHKZ4.js';
7
- import { builderDiskPinned } from './chunk-QUOITPN7.js';
8
- import { BUILD_SLICE_MEMORY_ENV, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, claudeCredentialVariablesSet, claudeCredential, claudeEnvPath, parseRunnerEnv } from './chunk-SDAEXUIX.js';
3
+ import { placeholderQueues, placeholderProblem } from './chunk-J3Q3QCOF.js';
4
+ import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-OHTMTMFX.js';
5
+ import { builtinKind, EGRESS_SWITCHABLE_KEYS, imageBuildOf, keepsHostBuilder } from './chunk-JWMJMQRF.js';
6
+ import { realBuildDiskProbe, checkDiskFit, DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-LYX2RRSF.js';
7
+ import { builderDiskPinned } from './chunk-WX2HW2G2.js';
8
+ import { BUILD_SLICE_MEMORY_ENV, FORWARDED_CLAUDE_CREDENTIAL_VARIABLES, claudeCredentialVariablesSet, claudeCredential, claudeEnvPath, parseRunnerEnv } from './chunk-GMKDAF37.js';
9
9
  import { closeSync, openSync, constants, readFileSync } from 'fs';
10
10
  import { join, dirname } from 'path';
11
11
  import { totalmem } from 'os';
@@ -56,6 +56,13 @@ function managedProblems(facts) {
56
56
  reason: "runner.build.allowHosts is not set, and a managed runner needs it so that a build reaches only the public hosts it lists. List the hosts your builds need; an empty list allows none"
57
57
  });
58
58
  }
59
+ const off = EGRESS_SWITCHABLE_KEYS.filter((key) => facts.egress?.[key] === 0);
60
+ if (off.length > 0) {
61
+ problems.push({
62
+ condition: "egress",
63
+ reason: `${off.map((key) => `runner.build.egress.${key}`).join(" and ")} ${off.length === 1 ? "is" : "are"} 0, which turns ${off.length === 1 ? "that limit" : "those limits"} off. A managed runner limits how fast a build opens connections and sends bytes, because every organization on the host shares one address. Remove ${off.length === 1 ? "the key" : "the keys"} to use the default, or set a value above 0`
64
+ });
65
+ }
59
66
  if (builtinKind(facts.provision) === "vm") {
60
67
  if (facts.imageBuild === "host") {
61
68
  problems.push({
@@ -92,6 +99,7 @@ function managedFactsOf(config, probes) {
92
99
  jailer: probes.jailer ?? "unknown",
93
100
  credentials: /* @__PURE__ */ new Set([...claudeCredentialVariablesSet(probes.env), ...credentialsInFiles(config.configPath)]),
94
101
  allowHosts: config.build?.allowHosts,
102
+ egress: config.build?.egress,
95
103
  imageBuild: imageBuildOf(config),
96
104
  builderDiskPinned: probes.builderDiskPinned ?? builderDiskPinned()
97
105
  };
@@ -2,11 +2,11 @@
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-OKGHWCSK.js';
5
+ import { autoConnect } from './chunk-EYJRVHBN.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { acquireSpoolLockAt } from './chunk-IXPH4EXK.js';
8
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-7QAJQDHS.js';
9
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
8
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-62URQYCB.js';
9
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
10
10
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
11
11
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
12
12
  import { StepNameSchema, StepBodySchema } from './chunk-DINRXUQA.js';
@@ -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-GJ4KBHBD.js';
3
+ import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-3VJYDWFV.js';
4
4
  import { generateKeyPairSync, createPrivateKey, createPublicKey, sign } from 'crypto';
5
5
  import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
6
6
 
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { sanitizeTerminal } from './chunk-IXPH4EXK.js';
4
4
  import { isAgentsMdLayout } from './chunk-LYCJQOO2.js';
5
- import { resolveGatewayCredentials, defaultFetch } from './chunk-7QAJQDHS.js';
5
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-62URQYCB.js';
6
6
  import { versionAtLeast } from './chunk-HCVLP7XA.js';
7
7
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
8
8
  import { machineSkillsState, staleClaudeSkills } from './chunk-LASKTDCR.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-GJ4KBHBD.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-3VJYDWFV.js';
4
4
  import { readFileSync, existsSync, rmSync, mkdirSync, writeFileSync, renameSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -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-OKGHWCSK.js';
5
+ import { autoConnect } from './chunk-EYJRVHBN.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-7QAJQDHS.js';
8
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
7
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-62URQYCB.js';
8
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
9
9
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
11
11
  import { CriteriaListSchema } from './chunk-DINRXUQA.js';
@@ -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-GJ4KBHBD.js';
3
+ import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-3VJYDWFV.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
 
@@ -127,5 +127,12 @@ var PLAYWRIGHT_FFMPEG = {
127
127
  arm64: { file: "ffmpeg-linux-arm64.zip", sha256: "457360e803a7d8d5f8f7f5ecf562b2d338f6b4f7f86339d0c31938a451e8878b" }
128
128
  };
129
129
  var MEDIA_PINS = `${VOICE_PACK_VERSION}+${FFMPEG_BUILD_TAG}+${HEADLESS_SHELL_VERSION}+${PLAYWRIGHT_FFMPEG_REVISION}`;
130
+ var UNIVERSAL_IMAGE_REPOSITORY = "ghcr.io/outerlayerai/universal";
131
+ var UNIVERSAL_IMAGE_SOURCE = "src-b56adab2806597e3723d8f85e2fef49208761343b1920e9ba58d1c753d1d6974";
132
+ var UNIVERSAL_IMAGE_DIGEST = "sha256:4bee63278f05473e840fd2f56eae0ef1048e18039e65e38b642c1933d5dcd1ea";
133
+ var UNIVERSAL_IMAGE = `${UNIVERSAL_IMAGE_REPOSITORY}:${UNIVERSAL_IMAGE_SOURCE}@${UNIVERSAL_IMAGE_DIGEST}`;
134
+ function universalImagePinned(digest = UNIVERSAL_IMAGE_DIGEST) {
135
+ return digest !== `sha256:${"0".repeat(64)}`;
136
+ }
130
137
 
131
- export { BUILDER_DISK_BASE_URL, BUILDER_DISK_SHA256, BUILDER_DISK_VERSION, BUILDKIT_IMAGE, CLAUDE_CODE_VERSION, DEFAULT_BASE_IMAGE, FFMPEG_BUILD_TAG, FFMPEG_STATIC, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GH_SHA256, GH_VERSION, GUEST_ASSETS_BASE_URL, GUEST_ASSETS_VERSION, GUEST_HELPER_SHA256, GUEST_KERNEL_SHA256, HEADLESS_SHELL, HEADLESS_SHELL_BASE_URL, HEADLESS_SHELL_REVISION, HOST_HELPER_ASSETS_VERSION, HOST_HELPER_BASE_URL, HOST_HELPER_SHA256, HOST_HELPER_SLICE_SINCE, JAILER_BINARY_SHA256, MEDIA_PINS, MICROVM_ARCHES, NODE_IMAGE, PLAYWRIGHT_FFMPEG, PLAYWRIGHT_FFMPEG_BASE_URL, PLAYWRIGHT_FFMPEG_REVISION, PLAYWRIGHT_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, builderDiskPinned, firecrackerArch, guestAssetsPinned, hostHelperPinned, hostHelperSupportsSlice };
138
+ export { BUILDER_DISK_BASE_URL, BUILDER_DISK_SHA256, BUILDER_DISK_VERSION, BUILDKIT_IMAGE, CLAUDE_CODE_VERSION, DEFAULT_BASE_IMAGE, FFMPEG_BUILD_TAG, FFMPEG_STATIC, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GH_SHA256, GH_VERSION, GUEST_ASSETS_BASE_URL, GUEST_ASSETS_VERSION, GUEST_HELPER_SHA256, GUEST_KERNEL_SHA256, HEADLESS_SHELL, HEADLESS_SHELL_BASE_URL, HEADLESS_SHELL_REVISION, HOST_HELPER_ASSETS_VERSION, HOST_HELPER_BASE_URL, HOST_HELPER_SHA256, HOST_HELPER_SLICE_SINCE, JAILER_BINARY_SHA256, MEDIA_PINS, MICROVM_ARCHES, NODE_IMAGE, PLAYWRIGHT_FFMPEG, PLAYWRIGHT_FFMPEG_BASE_URL, PLAYWRIGHT_FFMPEG_REVISION, PLAYWRIGHT_VERSION, TINI_SHA256, TINI_VERSION, UNIVERSAL_IMAGE, UNIVERSAL_IMAGE_DIGEST, UNIVERSAL_IMAGE_REPOSITORY, UNIVERSAL_IMAGE_SOURCE, VOICE_PACK_FILES, VOICE_PACK_VERSION, builderDiskPinned, firecrackerArch, guestAssetsPinned, hostHelperPinned, hostHelperSupportsSlice, universalImagePinned };
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
+ import { UNIVERSAL_IMAGE_REPOSITORY, UNIVERSAL_IMAGE_DIGEST } from './chunk-WX2HW2G2.js';
3
4
  import { existsSync, readdirSync, readFileSync, lstatSync, realpathSync, writeFileSync } from 'fs';
4
5
  import { join, resolve, relative, dirname, sep, basename } from 'path';
5
6
  import { createRequire as createRequire$1 } from 'module';
@@ -138,6 +139,12 @@ var RecipeError = class extends Error {
138
139
  this.logPath = logPath;
139
140
  }
140
141
  };
142
+ function universalImagePending() {
143
+ return new RecipeError(
144
+ "universal_image_pending",
145
+ `this CLI pins ${UNIVERSAL_IMAGE_REPOSITORY} at ${UNIVERSAL_IMAGE_DIGEST}, a digest CI has not published yet. A repository with no devcontainer file cannot be built until the pin names a published image`
146
+ );
147
+ }
141
148
  var DIR_RECIPE = ".devcontainer/devcontainer.json";
142
149
  var ROOT_RECIPE = ".devcontainer.json";
143
150
  function locateRecipe(checkoutDir) {
@@ -217,7 +224,7 @@ function assertBuildable(checkoutDir, location, recipe) {
217
224
  }
218
225
  }
219
226
  function writeSanitizedRecipe(checkoutDir, location, recipe) {
220
- if (location.kind === "default") throw new Error("the default image has no recipe to sanitize");
227
+ if (location.kind === "default") throw new Error("a build with no devcontainer file has no recipe to sanitize");
221
228
  const path = location.path === ROOT_RECIPE ? join(checkoutDir, ".outerlayer-recipe.json") : join(checkoutDir, ".devcontainer", SANITIZED_NAME);
222
229
  writeFileSync(path, `${JSON.stringify(sanitizeRecipe(recipe), null, 2)}
223
230
  `);
@@ -271,4 +278,4 @@ function devcontainerBuildInvocation(cli, req) {
271
278
  };
272
279
  }
273
280
 
274
- export { DOCKER_FEATURE, RecipeError, SANITIZED_NAME, assertBuildable, buildRootFromDist, classifyProperties, devcontainerBuildInvocation, locateRecipe, readRecipe, resolveDevcontainerCli, writeSanitizedRecipe };
281
+ export { DOCKER_FEATURE, RecipeError, SANITIZED_NAME, assertBuildable, buildRootFromDist, classifyProperties, devcontainerBuildInvocation, locateRecipe, readRecipe, resolveDevcontainerCli, universalImagePending, writeSanitizedRecipe };
@@ -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-OKGHWCSK.js';
4
+ import { autoConnect } from './chunk-EYJRVHBN.js';
5
5
  import { C } from './chunk-ANPNT6PM.js';
6
- import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-7QAJQDHS.js';
7
- import { resolveRepoIdentity } from './chunk-OOD5NDQA.js';
6
+ import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-62URQYCB.js';
7
+ import { resolveRepoIdentity } from './chunk-A6PJSNP6.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';
@@ -252,7 +252,7 @@ async function runClaudeLauncher(args, deps = {}) {
252
252
  return 1;
253
253
  }
254
254
  } else {
255
- const { resolveLaunchPlane } = await import('./control-plane-launch-BDSUP4DK.js');
255
+ const { resolveLaunchPlane } = await import('./control-plane-launch-TS4DFJF4.js');
256
256
  const plane = env[GOVERNANCE_VARIABLE] === "self" ? { kind: "none" } : await resolveLaunchPlane({ cwd, env, home, fetchImpl: deps.fetchImpl, stderr });
257
257
  if (plane.kind === "none") {
258
258
  const own2 = ownSkillsDirFor(cwd, home, [], stderr);