@outerlayer/cli 0.33.0-next.20261021171625 → 0.33.0-next.20261021223634

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 (121) hide show
  1. package/README.md +6 -2
  2. package/dist/{agent-setup-NSUX64RU.js → agent-setup-UY5NBT7C.js} +13 -13
  3. package/dist/{artifact-link-cmd-IGVFGHC2.js → artifact-link-cmd-2MBHG3PO.js} +2 -2
  4. package/dist/{build-HU24C46Z.js → build-SK5BYBER.js} +4 -4
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-QECLC243.js → builder-K2XIVSSZ.js} +6 -6
  7. package/dist/{check-4BL6XRWJ.js → check-AXDPZJU4.js} +39 -39
  8. package/dist/chunk-2PGI6RDE.js +90 -0
  9. package/dist/{chunk-ZZSQYOY5.js → chunk-3VGDZ23W.js} +1 -1
  10. package/dist/{chunk-ZAJKEHIE.js → chunk-4IG6EZHU.js} +2 -2
  11. package/dist/{chunk-NJS7JJYN.js → chunk-52C3SSNF.js} +2 -2
  12. package/dist/{chunk-IWYS4ERC.js → chunk-533QGXGZ.js} +1 -1
  13. package/dist/{chunk-LESWVXRE.js → chunk-5RUH3PCG.js} +5 -5
  14. package/dist/{chunk-X2Y3B4JH.js → chunk-6TFTRVOA.js} +3 -3
  15. package/dist/{chunk-YGXKXL4Q.js → chunk-72YES3RL.js} +61 -93
  16. package/dist/{chunk-ZBN4JGTJ.js → chunk-A3H27SYX.js} +1 -1
  17. package/dist/{chunk-3WW2TL7V.js → chunk-AKHGQKNR.js} +64 -4
  18. package/dist/{chunk-XT5SOJRC.js → chunk-AKR32WHV.js} +1 -1
  19. package/dist/{chunk-P7BEZAEU.js → chunk-ALSE7YKX.js} +11 -3
  20. package/dist/{chunk-5T2VOSIL.js → chunk-CHXYLCMA.js} +4 -4
  21. package/dist/{chunk-GXKWPOK6.js → chunk-CMU6QJHE.js} +3 -3
  22. package/dist/{chunk-TZQIEUDE.js → chunk-CNRMP6EN.js} +1 -1
  23. package/dist/{chunk-UJIG5BU7.js → chunk-CV2S5L4J.js} +42 -18
  24. package/dist/{chunk-OF4TFWKR.js → chunk-DE7YSNDX.js} +3 -3
  25. package/dist/{chunk-3H7NZPYG.js → chunk-DM4EGXDO.js} +1 -1
  26. package/dist/{chunk-H6Y5D6J7.js → chunk-EG7KPSSP.js} +7 -7
  27. package/dist/{chunk-KP6R7CV3.js → chunk-ESP5VZBD.js} +4 -1
  28. package/dist/{chunk-RQGHHEM7.js → chunk-HBBCQ5NE.js} +2 -2
  29. package/dist/{chunk-NHXJU7CM.js → chunk-HT7LVCTX.js} +2 -2
  30. package/dist/{chunk-T5TBGOT6.js → chunk-IPJ6HR7E.js} +1 -1
  31. package/dist/{chunk-APSYTJ6I.js → chunk-JT3YO5MH.js} +1 -1
  32. package/dist/{chunk-QNVIGO5X.js → chunk-KDM77TVX.js} +5 -5
  33. package/dist/{chunk-YW4PEGLN.js → chunk-KUTZ6XLS.js} +1 -1
  34. package/dist/{chunk-RHBFNZ7J.js → chunk-LBPK2TPR.js} +24 -8
  35. package/dist/{chunk-X7UUIHGH.js → chunk-LH3KULPL.js} +1 -1
  36. package/dist/{chunk-LK2S5XZH.js → chunk-LHYO4RDP.js} +9 -1
  37. package/dist/{chunk-WXEPMPHK.js → chunk-LN4WDONI.js} +1 -1
  38. package/dist/{chunk-FE3RTGJN.js → chunk-M5OBRUQE.js} +2 -2
  39. package/dist/{chunk-WHSYPR3U.js → chunk-M5ZXOQYS.js} +1 -1
  40. package/dist/{chunk-OX7CHZTJ.js → chunk-N3KK5BKF.js} +7 -7
  41. package/dist/{chunk-4LU7MFJO.js → chunk-NOXK3QW6.js} +4 -4
  42. package/dist/{chunk-2FPEB36J.js → chunk-O6NG67Y7.js} +5 -5
  43. package/dist/{chunk-JUXATN46.js → chunk-OGCG5LOX.js} +1 -1
  44. package/dist/{chunk-XRQ7DABQ.js → chunk-Q2D4M3GC.js} +1 -1
  45. package/dist/{chunk-3RS3RNGH.js → chunk-Q4YVHYHT.js} +3 -3
  46. package/dist/{chunk-INCKTGMM.js → chunk-RQKQTRXM.js} +5 -5
  47. package/dist/{chunk-D73OLAYE.js → chunk-RVWADVBN.js} +4 -4
  48. package/dist/{chunk-6C3ZVE62.js → chunk-RW52CUFX.js} +1 -1
  49. package/dist/{chunk-XFS2TMOB.js → chunk-SFJD4MRY.js} +7 -7
  50. package/dist/{chunk-77F7NGAZ.js → chunk-TA6TFYAN.js} +3 -3
  51. package/dist/{chunk-GI6LOIHS.js → chunk-TNJXCNQ6.js} +4 -4
  52. package/dist/{chunk-BSHUTMXV.js → chunk-TPGHCH2H.js} +45 -19
  53. package/dist/{chunk-X7ML37UF.js → chunk-UIBTEDLA.js} +7 -7
  54. package/dist/{chunk-QCDVKCHA.js → chunk-UWEJ6HGB.js} +2 -2
  55. package/dist/{chunk-F3EF56LQ.js → chunk-VQ2JGZSC.js} +1 -1
  56. package/dist/{chunk-MV52FCSG.js → chunk-X5LFLYSD.js} +1258 -591
  57. package/dist/{chunk-KURUM765.js → chunk-Y3LIJIRH.js} +4 -4
  58. package/dist/{chunk-LRBOBYQI.js → chunk-YH2632RT.js} +6 -6
  59. package/dist/{chunk-JJ4W5LVF.js → chunk-ZRTMS4C7.js} +13 -13
  60. package/dist/{claude-launcher-RNMUZZ3Y.js → claude-launcher-STSKZNW3.js} +5 -5
  61. package/dist/{cli-PNQX4HRX.js → cli-LYJEJTQG.js} +124 -119
  62. package/dist/{command-LA7T5YFX.js → command-2JEY6X6U.js} +29 -28
  63. package/dist/{config-3JRFDYZL.js → config-CUJ3Q4L2.js} +1 -1
  64. package/dist/{connect-cmd-2AXEPDT2.js → connect-cmd-WFHAPGCZ.js} +11 -11
  65. package/dist/{container-start-4LIRN2LX.js → container-start-TTEHOSJK.js} +29 -28
  66. package/dist/{context-cleanup-VSDT77BZ.js → context-cleanup-UBOJHGQM.js} +3 -3
  67. package/dist/{control-plane-launch-DHMD5WBU.js → control-plane-launch-R4X63DYW.js} +9 -9
  68. package/dist/{dist-DY2ZNEBS.js → dist-ADFLG3AY.js} +2 -2
  69. package/dist/{docker-EOP32YLH.js → docker-UYS5N5B7.js} +6 -6
  70. package/dist/{doctor-FDXHHPDJ.js → doctor-3XPT5F2Y.js} +38 -35
  71. package/dist/{emit-artifact-cmd-JY5V6WQI.js → emit-artifact-cmd-FR5PUUJR.js} +16 -16
  72. package/dist/{emit-cmd-T7NIBSF3.js → emit-cmd-JOO6ZTEI.js} +6 -6
  73. package/dist/{emit-criteria-cmd-XRFBNFN7.js → emit-criteria-cmd-DKPZJTIN.js} +12 -12
  74. package/dist/emit-demo-cmd-IVLL6OWZ.js +3027 -0
  75. package/dist/{emit-finding-cmd-5RHKQHE6.js → emit-finding-cmd-VM4KIVEM.js} +13 -13
  76. package/dist/{emit-result-cmd-65KJQ2UM.js → emit-result-cmd-SEKL6HUU.js} +15 -15
  77. package/dist/{emit-step-cmd-YZIN6B6P.js → emit-step-cmd-4YAWK4VE.js} +13 -13
  78. package/dist/{findings-cmd-Z6CKWAG4.js → findings-cmd-RXYIWXY4.js} +13 -13
  79. package/dist/{fleet-readiness-7ROJ54ZF.js → fleet-readiness-VIX76RNL.js} +11 -11
  80. package/dist/{governing-source-NMGGSA6Q.js → governing-source-APGCKDTS.js} +16 -16
  81. package/dist/{hook-fast-WQQYEXO5.js → hook-fast-NVBMSE3N.js} +1 -1
  82. package/dist/{host-key-KAYMYRO3.js → host-key-UEWE4PXB.js} +2 -2
  83. package/dist/{image-tag-NM2YT2J2.js → image-tag-V2LXTKK7.js} +2 -2
  84. package/dist/index.js +4 -4
  85. package/dist/{init-UBDZRWNE.js → init-BR4Z4T2Q.js} +28 -27
  86. package/dist/{init-OV6IOD2G.js → init-XWQJEW6H.js} +28 -27
  87. package/dist/{init-cmd-YP4TVN2S.js → init-cmd-IEMYX6KA.js} +21 -21
  88. package/dist/{init-update-24K7ZZWX.js → init-update-HOTJISWA.js} +20 -20
  89. package/dist/{install-OIRIEOS7.js → install-3DBYJITP.js} +3 -3
  90. package/dist/{install-cmd-IYWVR6WX.js → install-cmd-EELSKBSZ.js} +4 -4
  91. package/dist/{layout-OQ7EJUMH.js → layout-ZI4RJ6MT.js} +4 -4
  92. package/dist/{login-browser-KP7YVYTN.js → login-browser-WUSIVD5E.js} +2 -2
  93. package/dist/{logs-C3RJ3ZTC.js → logs-ET75ZUCN.js} +1 -1
  94. package/dist/{loop-4FEA6E2S.js → loop-3NRAMJA4.js} +39 -39
  95. package/dist/{machine-3BMBF33L.js → machine-LUXL7SFT.js} +24 -23
  96. package/dist/{machine-skills-XWWYFNOZ.js → machine-skills-REHDWINX.js} +4 -4
  97. package/dist/{mcp-serve-cmd-PB4UOTGL.js → mcp-serve-cmd-WYUP263T.js} +3 -3
  98. package/dist/paths-BN7X2YPM.js +9 -0
  99. package/dist/{pending-RKVRYOTF.js → pending-ROAIK5WO.js} +2 -2
  100. package/dist/{pidfile-BMFAUQAI.js → pidfile-52TGLGQH.js} +2 -2
  101. package/dist/{record-26AH6WDB.js → record-BSY4BKJ5.js} +2 -2
  102. package/dist/{runner-env-66RAFIDJ.js → runner-env-H6XLACTG.js} +4 -4
  103. package/dist/{runner-identity-HTQNM5AG.js → runner-identity-DR5I3NBT.js} +6 -6
  104. package/dist/{runner-key-7I5FDQKR.js → runner-key-OLMCAOTD.js} +28 -27
  105. package/dist/{session-sender-MKDKMZJD.js → session-sender-PLQ5NOEW.js} +16 -16
  106. package/dist/{spec-cmd-V7W3UV6X.js → spec-cmd-NIAQWMLE.js} +13 -13
  107. package/dist/{starter-pack-6O7F6P7C.js → starter-pack-OESK7UX2.js} +5 -5
  108. package/dist/{status-TJDVDR4H.js → status-4HNX45UZ.js} +29 -29
  109. package/dist/{sync-cmd-AI4KTJ56.js → sync-cmd-UTESQMDU.js} +15 -15
  110. package/dist/{watch-C7IS6VNS.js → watch-4UC4FGI5.js} +15 -15
  111. package/dist/{work-claim-cmd-GFXIZWMU.js → work-claim-cmd-ODYRE44S.js} +16 -16
  112. package/dist/{work-cmd-UTD4Y7W3.js → work-cmd-QQDUI3YX.js} +13 -13
  113. package/dist/{work-comment-cmd-J3SRBK6A.js → work-comment-cmd-FIOMDPIZ.js} +13 -13
  114. package/dist/{work-logs-cmd-SH7MQPA3.js → work-logs-cmd-DA6MPQ6O.js} +13 -13
  115. package/dist/{work-open-pr-cmd-FIX5QLK7.js → work-open-pr-cmd-QG2FT7OW.js} +14 -14
  116. package/dist/{work-pr-cmd-S4IBR7DE.js → work-pr-cmd-XNXWWLS5.js} +13 -13
  117. package/dist/{work-stop-cmd-NECXJEJN.js → work-stop-cmd-2KLZ2UH2.js} +13 -13
  118. package/package.json +3 -1
  119. package/dist/chunk-YYYRBYWG.js +0 -32
  120. package/dist/emit-demo-cmd-JOVCVXIS.js +0 -888
  121. package/dist/paths-OK2EZS7W.js +0 -9
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { currentLink } from './chunk-ZZSQYOY5.js';
3
+ import { currentLink } from './chunk-3VGDZ23W.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';
@@ -22661,12 +22661,47 @@ var DemoChapterSchema = external_exports.strictObject(chapterFields).refine((cha
22661
22661
  message: "a chapter must end after it starts",
22662
22662
  path: ["end"]
22663
22663
  });
22664
- var DemoManifestSchema = external_exports.strictObject({
22665
- schemaVersion: external_exports.literal(1),
22664
+ var DemoStillSchema = external_exports.strictObject({
22665
+ /** The index, in the chapter's checks, of the check the still follows. */
22666
+ check: external_exports.number().int().min(0),
22667
+ /** The PNG file, as a path relative to the manifest's folder. */
22668
+ file: external_exports.string().min(1).max(500),
22669
+ /** SHA-256 of the PNG file's bytes, in lower-case hex. */
22670
+ sha256: external_exports.string().regex(/^[0-9a-f]{64}$/)
22671
+ });
22672
+ var chapterWithStillsFields = {
22673
+ ...chapterFields,
22674
+ stills: external_exports.array(DemoStillSchema).max(DEMO_CHECKS_MAX)
22675
+ };
22676
+ function stillsFollowPassedChecks(chapter, context) {
22677
+ let previous = -1;
22678
+ for (const [index, still] of chapter.stills.entries()) {
22679
+ const check2 = chapter.checks[still.check];
22680
+ if (check2 === void 0 || !check2.passed) {
22681
+ context.addIssue({ code: "custom", path: ["stills", index, "check"], message: "a still must follow a check that passed" });
22682
+ } else if (still.check <= previous) {
22683
+ context.addIssue({ code: "custom", path: ["stills", index, "check"], message: "stills must follow distinct checks, in order" });
22684
+ }
22685
+ previous = still.check;
22686
+ }
22687
+ }
22688
+ var endsAfterStart = (chapter) => chapter.end > chapter.start;
22689
+ var DemoChapterV2Schema = external_exports.strictObject(chapterWithStillsFields).refine(endsAfterStart, { message: "a chapter must end after it starts", path: ["end"] }).superRefine(stillsFollowPassedChecks);
22690
+ var manifestFields = {
22666
22691
  /** The recorded video, as a path relative to the manifest's folder. */
22667
- video: external_exports.string().min(1).max(500),
22692
+ video: external_exports.string().min(1).max(500)
22693
+ };
22694
+ var DemoManifestV1Schema = external_exports.strictObject({
22695
+ schemaVersion: external_exports.literal(1),
22696
+ ...manifestFields,
22668
22697
  chapters: external_exports.array(DemoChapterSchema).min(1).max(DEMO_CHAPTERS_MAX)
22669
22698
  });
22699
+ var DemoManifestV2Schema = external_exports.strictObject({
22700
+ schemaVersion: external_exports.literal(2),
22701
+ ...manifestFields,
22702
+ chapters: external_exports.array(DemoChapterV2Schema).min(1).max(DEMO_CHAPTERS_MAX)
22703
+ });
22704
+ var DemoManifestSchema = external_exports.discriminatedUnion("schemaVersion", [DemoManifestV1Schema, DemoManifestV2Schema]);
22670
22705
  var DemoRecordChapterSchema = external_exports.strictObject({
22671
22706
  ...chapterFields,
22672
22707
  /** The `clientArtifactId` of the chapter's clip. */
@@ -22674,10 +22709,35 @@ var DemoRecordChapterSchema = external_exports.strictObject({
22674
22709
  /** True when the clip was bound to the chapter's criterion: every check passed. */
22675
22710
  bound: external_exports.boolean()
22676
22711
  });
22677
- external_exports.strictObject({
22712
+ var DemoComparableSchema = external_exports.enum(["yes", "no", "not checked"]);
22713
+ var DemoRegionSchema = external_exports.strictObject({
22714
+ x: external_exports.number().int().min(0),
22715
+ y: external_exports.number().int().min(0),
22716
+ width: external_exports.number().int().positive(),
22717
+ height: external_exports.number().int().positive()
22718
+ });
22719
+ var DemoRecordChapterV2Schema = external_exports.strictObject({
22720
+ ...chapterFields,
22721
+ clipArtifactId: external_exports.string().min(1).max(64),
22722
+ bound: external_exports.boolean(),
22723
+ comparable: DemoComparableSchema,
22724
+ /** The first run's stills: the check each follows and the SHA-256 of its file. */
22725
+ stills: external_exports.array(DemoStillSchema.pick({ check: true, sha256: true })).max(DEMO_CHECKS_MAX),
22726
+ /** The first still that differs between the runs. Present exactly when `comparable` is `no`. */
22727
+ difference: external_exports.strictObject({ check: external_exports.number().int().min(0), region: DemoRegionSchema }).optional()
22728
+ }).refine((chapter) => chapter.end > chapter.start, { message: "a chapter must end after it starts", path: ["end"] }).refine((chapter) => chapter.comparable === "no" === (chapter.difference !== void 0), {
22729
+ message: "a chapter has a difference exactly when it is not comparable",
22730
+ path: ["difference"]
22731
+ });
22732
+ var DemoRecordV1Schema = external_exports.strictObject({
22678
22733
  schemaVersion: external_exports.literal(1),
22679
22734
  chapters: external_exports.array(DemoRecordChapterSchema).min(1).max(DEMO_CHAPTERS_MAX)
22680
22735
  });
22736
+ var DemoRecordV2Schema = external_exports.strictObject({
22737
+ schemaVersion: external_exports.literal(2),
22738
+ chapters: external_exports.array(DemoRecordChapterV2Schema).min(1).max(DEMO_CHAPTERS_MAX)
22739
+ });
22740
+ external_exports.discriminatedUnion("schemaVersion", [DemoRecordV1Schema, DemoRecordV2Schema]);
22681
22741
  /*! Bundled license information:
22682
22742
 
22683
22743
  xmlchars/xml/1.0/ed5.js:
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { EVENT_TYPES, isHumanUserTurn, INPUT_BAND_BOUNDARIES, parseAgentSession, SCHEMA_VERSION, SPEED_MAX_LENGTH, inputBandOf, BUCKET_MODEL_MAX_LENGTH } from './chunk-3WW2TL7V.js';
3
+ import { EVENT_TYPES, isHumanUserTurn, INPUT_BAND_BOUNDARIES, parseAgentSession, SCHEMA_VERSION, SPEED_MAX_LENGTH, inputBandOf, BUCKET_MODEL_MAX_LENGTH } from './chunk-AKHGQKNR.js';
4
4
  import { createHash } from 'crypto';
5
5
  import { readFileSync, readdirSync, statSync, mkdirSync, copyFileSync, renameSync, unlinkSync, writeFileSync, stat as stat$1, unwatchFile, watchFile, watch as watch$1 } from 'fs';
6
6
  import { type, homedir } from 'os';
@@ -35,7 +35,11 @@ var DEFAULT_CHECK_TIME_LIMIT_MINUTES = 10;
35
35
  var CHECKS_KEYS = ["timeLimitMinutes"];
36
36
  var MAX_CHECK_TIME_LIMIT_MINUTES = 240;
37
37
  var DEFAULT_BUILD = { memory: "8g", cpus: 4, pids: 4096, disk: "40g", variables: [] };
38
- var BUILD_KEYS = ["memory", "cpus", "pids", "disk", "variables", "destinations", "allowHosts"];
38
+ function imageBuildOf(config) {
39
+ if (builtinKind(config.hooks.provision) !== "vm") return "host";
40
+ return config.build?.imageBuild ?? "vm";
41
+ }
42
+ var BUILD_KEYS = ["memory", "cpus", "pids", "disk", "variables", "destinations", "allowHosts", "imageBuild"];
39
43
  var HOUSEKEEPING_KEYS = ["jobsKeepDays", "buildCacheMax", "minFreeDisk"];
40
44
  var DEFAULT_JOBS_KEEP_DAYS = 30;
41
45
  var DEFAULT_BUILD_CACHE_MAX = "20g";
@@ -396,6 +400,9 @@ function resolveBuild(configPath, block) {
396
400
  if (!allowHosts.includes(host)) allowHosts.push(host);
397
401
  }
398
402
  }
403
+ if (given.imageBuild !== void 0 && given.imageBuild !== "vm" && given.imageBuild !== "host") {
404
+ fail(configPath, "runner.build.imageBuild", "must be vm or host");
405
+ }
399
406
  return {
400
407
  memory: given.memory ?? DEFAULT_BUILD.memory,
401
408
  cpus: given.cpus ?? DEFAULT_BUILD.cpus,
@@ -403,8 +410,9 @@ function resolveBuild(configPath, block) {
403
410
  disk: given.disk ?? DEFAULT_BUILD.disk,
404
411
  variables,
405
412
  ...destinations.length === 0 ? {} : { destinations },
406
- ...allowHosts === void 0 ? {} : { allowHosts }
413
+ ...allowHosts === void 0 ? {} : { allowHosts },
414
+ ...given.imageBuild === void 0 ? {} : { imageBuild: given.imageBuild }
407
415
  };
408
416
  }
409
417
 
410
- export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, RunnerConfigError, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerCredentialProblem, runnerVmOf };
418
+ export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, RunnerConfigError, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerCredentialProblem, runnerVmOf };
@@ -2,10 +2,10 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { parseSize } from './chunk-YJLHUKYS.js';
4
4
  import { RecipeError } from './chunk-3Z3MPR55.js';
5
- import { BUILDKIT_IMAGE } from './chunk-LK2S5XZH.js';
6
- import { compareVersions } from './chunk-XT5SOJRC.js';
7
- import { ensureHostKey } from './chunk-APSYTJ6I.js';
8
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-KP6R7CV3.js';
5
+ import { BUILDKIT_IMAGE } from './chunk-LHYO4RDP.js';
6
+ import { compareVersions } from './chunk-AKR32WHV.js';
7
+ import { ensureHostKey } from './chunk-JT3YO5MH.js';
8
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, runnerDir, jobsDir } from './chunk-ESP5VZBD.js';
9
9
  import { CLAUDE_PORT, JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-HDSDUTX4.js';
10
10
  import { JOIN_DIR, RELAY_ID, JOIN_SOCKET, TARGET_GATEWAY, TARGET_CLAUDE, destinationTarget, RELAY_USER } from './chunk-MESOOLF4.js';
11
11
  import { StringDecoder } from 'string_decoder';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { MIN_ENGINE_MAJOR } from './chunk-MV52FCSG.js';
4
- import { runnerImageVersion } from './chunk-IWYS4ERC.js';
5
- import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-LK2S5XZH.js';
3
+ import { MIN_ENGINE_MAJOR } from './chunk-X5LFLYSD.js';
4
+ import { runnerImageVersion } from './chunk-533QGXGZ.js';
5
+ import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-LHYO4RDP.js';
6
6
  import { spawnSync } from 'child_process';
7
7
  import { existsSync, accessSync, constants, statSync, readFileSync } from 'fs';
8
8
 
@@ -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-KP6R7CV3.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ESP5VZBD.js';
4
4
  import { readFileSync, existsSync, rmSync, mkdirSync, writeFileSync, renameSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -1,29 +1,28 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-YGXKXL4Q.js';
4
- import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-X7UUIHGH.js';
3
+ import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-72YES3RL.js';
4
+ import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-LH3KULPL.js';
5
5
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
6
6
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-E7R2GIAW.js';
7
- import { fitImageBuildMemory } from './chunk-WHSYPR3U.js';
7
+ import { fitImageBuildMemory } from './chunk-M5ZXOQYS.js';
8
8
  import { RUNNER_PROTOCOL } from './chunk-YKYCE4HY.js';
9
- import { writePendingUpdate } from './chunk-TZQIEUDE.js';
9
+ import { writePendingUpdate } from './chunk-CNRMP6EN.js';
10
10
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
11
- import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-RHBFNZ7J.js';
12
- import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
13
- import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-ZZSQYOY5.js';
11
+ import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-LBPK2TPR.js';
12
+ import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-3VGDZ23W.js';
14
13
  import { RepoFilter } from './chunk-TBT347UY.js';
15
- import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-MV52FCSG.js';
16
- import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-QNVIGO5X.js';
17
- import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-IWYS4ERC.js';
14
+ import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, sweepImageBuilders, freeBytes, formatBytes, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-X5LFLYSD.js';
15
+ import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-KDM77TVX.js';
16
+ import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-533QGXGZ.js';
18
17
  import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
19
- import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-P7BEZAEU.js';
20
- import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-T5TBGOT6.js';
18
+ import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-ALSE7YKX.js';
19
+ import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-IPJ6HR7E.js';
21
20
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
22
- import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-5T2VOSIL.js';
21
+ import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-CHXYLCMA.js';
23
22
  import { exceedsDisk } from './chunk-YJLHUKYS.js';
24
- import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-X7ML37UF.js';
25
- import { loadHostKey, ensureHostKey, signerFor } from './chunk-APSYTJ6I.js';
26
- import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, rootfsDir } from './chunk-KP6R7CV3.js';
23
+ import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-UIBTEDLA.js';
24
+ import { loadHostKey, ensureHostKey, signerFor } from './chunk-JT3YO5MH.js';
25
+ import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, rootfsDir, imagesDir, builderCacheDiskPath } from './chunk-ESP5VZBD.js';
27
26
  import { parseClaimIdentity, parseClaimedRepositories, parseUnreachable, repositoriesOf, primaryOf, sharedUserEnvironment, JOB_MOUNT, takeClaudeCredential, heldClaudeCredential, currentClaudeCredential } from './chunk-HDSDUTX4.js';
28
27
  import { resolveVersion } from './chunk-RA3O54FC.js';
29
28
  import { fdName } from './chunk-XD4ZCMA4.js';
@@ -817,6 +816,7 @@ async function runHousekeeping(options) {
817
816
  }
818
817
  }
819
818
  }
819
+ freed += removeStaleBuilderCaches(options, nowMs);
820
820
  const spoolPath = spoolDir(root);
821
821
  const spoolFiles = listDir(spoolPath).flatMap((name) => {
822
822
  const mtimeMs = mtimeOf(join(spoolPath, name));
@@ -857,6 +857,25 @@ async function removeStaleRootDisks(root, unfinished, options) {
857
857
  }
858
858
  return freed;
859
859
  }
860
+ function removeStaleBuilderCaches(options, nowMs) {
861
+ let freed = 0;
862
+ for (const owner of listDir(imagesDir(options.configPath))) {
863
+ for (const name of listDir(join(imagesDir(options.configPath), owner))) {
864
+ const path = builderCacheDiskPath(options.configPath, owner, name);
865
+ const mtimeMs = mtimeOf(path);
866
+ if (mtimeMs === void 0 || nowMs - mtimeMs < options.keepDays * 864e5) continue;
867
+ const size = sizeOf(path);
868
+ try {
869
+ rmSync(path, { force: true });
870
+ freed += size;
871
+ options.log.line(`housekeeping: removed the builder cache disk of ${owner}/${name} (${formatBytes(size)}), last used ${formatDuration(nowMs - mtimeMs)} ago`);
872
+ } catch (err) {
873
+ options.log.error(`housekeeping: could not remove the builder cache disk of ${owner}/${name}: ${describeCallFailure(err)}`);
874
+ }
875
+ }
876
+ }
877
+ return freed;
878
+ }
860
879
  var HOOKS_DIR_NAME = "git-hooks";
861
880
  var CO_AUTHOR_FILE = "co-author";
862
881
  var HOOKS = [
@@ -1751,7 +1770,7 @@ var CLAIM_REFUSAL_CODES = new Set(
1751
1770
  "pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected repository_not_reachable branch_claimed_elsewhere".split(" ")
1752
1771
  );
1753
1772
  async function tryClaimAndStart(state, item, queue) {
1754
- const { postJson: postJson2 } = await import('./work-cmd-UTD4Y7W3.js');
1773
+ const { postJson: postJson2 } = await import('./work-cmd-QQDUI3YX.js');
1755
1774
  const log = logOf(state);
1756
1775
  const hostKey = await loadHostKey(state.config.configPath);
1757
1776
  const claim = await retrySend(
@@ -2947,7 +2966,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
2947
2966
  check: update.check ? () => update.check(configPath) : async () => {
2948
2967
  const held = heldClaudeCredential();
2949
2968
  const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
2950
- return (await import('./check-4BL6XRWJ.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
2969
+ return (await import('./check-AXDPZJU4.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
2951
2970
  },
2952
2971
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
2953
2972
  log
@@ -3015,6 +3034,11 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
3015
3034
  return [];
3016
3035
  });
3017
3036
  for (const buildId of runningMicroVms) log.line(`stopped microVM build ${buildId}, left running by an earlier runner`);
3037
+ const sweptBuilders = await sweepImageBuilders(configPath, runtimeOf(state).vm, (line) => log.error(line)).catch((err) => {
3038
+ log.error(`a builder microVM an earlier runner left could not be removed: ${describeCallFailure(err)}`);
3039
+ return [];
3040
+ });
3041
+ for (const buildId of sweptBuilders) log.line(`removed builder microVM ${buildId}, left by an earlier runner`);
3018
3042
  const attemptLogs = attemptLogsOf(state);
3019
3043
  for (const { job, format } of listUnreadableJobs(jobsDir(configPath))) {
3020
3044
  log.error(`leaving job ${job.queue} #${job.item} alone: its job-state format ${format} is not one this version reads`);
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { autoConnect, detectActiveSession } from './chunk-X2Y3B4JH.js';
4
- import { resolveRepoIdentity } from './chunk-XT5SOJRC.js';
3
+ import { autoConnect, detectActiveSession } from './chunk-6TFTRVOA.js';
4
+ import { resolveRepoIdentity } from './chunk-AKR32WHV.js';
5
5
  import { C } from './chunk-ANPNT6PM.js';
6
- import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-F3EF56LQ.js';
6
+ import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-VQ2JGZSC.js';
7
7
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
8
8
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
9
9
  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 { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-3WW2TL7V.js';
3
+ import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-AKHGQKNR.js';
4
4
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
5
5
  import { mkdirSync, appendFileSync, writeFileSync, renameSync, unlinkSync, existsSync, readdirSync, readFileSync, statSync } from 'fs';
6
6
  import { join, dirname } from 'path';
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { sanitizeTerminal } from './chunk-3H7NZPYG.js';
4
- import { isAgentsMdLayout } from './chunk-ZAJKEHIE.js';
5
- import { resolveGatewayCredentials, defaultFetch } from './chunk-F3EF56LQ.js';
3
+ import { sanitizeTerminal } from './chunk-DM4EGXDO.js';
4
+ import { isAgentsMdLayout } from './chunk-4IG6EZHU.js';
5
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-VQ2JGZSC.js';
6
6
  import { versionAtLeast } from './chunk-HCVLP7XA.js';
7
7
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
8
- import { machineSkillsState, staleClaudeSkills } from './chunk-XRQ7DABQ.js';
9
- import { AGENTS_SKILLS_BASE, skillDir, namesCore, MACHINE_SKILL_PATH, isMaintainedCopy, loadTemplateFiles } from './chunk-YW4PEGLN.js';
8
+ import { machineSkillsState, staleClaudeSkills } from './chunk-Q2D4M3GC.js';
9
+ import { AGENTS_SKILLS_BASE, skillDir, namesCore, MACHINE_SKILL_PATH, isMaintainedCopy, loadTemplateFiles } from './chunk-KUTZ6XLS.js';
10
10
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
11
11
  import { cliInvocation } from './chunk-CRB3POP4.js';
12
- import { hasSymlinkComponent } from './chunk-WXEPMPHK.js';
13
- import { emitTree, ALL_TARGET_IDS, classifyTree, splitRawFile } from './chunk-JUXATN46.js';
12
+ import { hasSymlinkComponent } from './chunk-LN4WDONI.js';
13
+ import { emitTree, ALL_TARGET_IDS, classifyTree, splitRawFile } from './chunk-OGCG5LOX.js';
14
14
  import { existsSync, readFileSync, writeFileSync, realpathSync, readdirSync } from 'fs';
15
15
  import { join, dirname, posix } from 'path';
16
16
 
@@ -31,6 +31,9 @@ function imagesDir(configPath) {
31
31
  function repoCacheDir(configPath, owner, name) {
32
32
  return join(runnerDir(configPath), "repos", owner, name);
33
33
  }
34
+ function builderCacheDiskPath(configPath, owner, name) {
35
+ return join(imagesDir(configPath), owner, name, "builder-cache.ext4");
36
+ }
34
37
  function buildsDir(configPath) {
35
38
  return join(runnerDir(configPath), "builds");
36
39
  }
@@ -84,4 +87,4 @@ function deliveryDir(repository, sha) {
84
87
  return `${BUILD_HOME}/.outerlayer/context/${repository}/${sha}`;
85
88
  }
86
89
 
87
- export { RUNNER_DIR_MODE, RUNNER_FILE_MODE, SHIM_DIR, attemptStamp, buildDir, buildsDir, contextHomeDir, deliveryDir, diskTemplatesDir, ghConfigDir, hostKeyPath, imagesDir, jobDir, jobsDir, keptContextDir, mirrorDir, pidFilePath, repoCacheDir, rootfsDir, rootfsPathFor, runnerDir, runnerDirOfBuild, spoolDir, stagedContextDir, vmAssetsDir, vsockPath };
90
+ export { RUNNER_DIR_MODE, RUNNER_FILE_MODE, SHIM_DIR, attemptStamp, buildDir, builderCacheDiskPath, buildsDir, contextHomeDir, deliveryDir, diskTemplatesDir, ghConfigDir, hostKeyPath, imagesDir, jobDir, jobsDir, keptContextDir, mirrorDir, pidFilePath, repoCacheDir, rootfsDir, rootfsPathFor, runnerDir, runnerDirOfBuild, spoolDir, stagedContextDir, vmAssetsDir, vsockPath };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { builtinKind } from './chunk-P7BEZAEU.js';
3
+ import { builtinKind } from './chunk-ALSE7YKX.js';
4
4
  import { parseSize } from './chunk-YJLHUKYS.js';
5
- import { runnerDir } from './chunk-KP6R7CV3.js';
5
+ import { runnerDir } from './chunk-ESP5VZBD.js';
6
6
  import { CLAUDE_CREDENTIAL_ID, CLAUDE_ENV_FILE, credentialLineIn, withoutCredentialLines } from './chunk-HDSDUTX4.js';
7
7
  import { FD_SLOTS_PER_BUILD, FD_STORE_ENV } from './chunk-XD4ZCMA4.js';
8
8
  import { existsSync, readFileSync, writeFileSync, chmodSync, renameSync } from 'fs';
@@ -680,11 +680,11 @@ async function missingControlPlane(cwd, sessionId, home, env) {
680
680
  const dirs = findGitDirs(cwd);
681
681
  if (dirs === void 0) return void 0;
682
682
  if (existsSync(join(dirs.gitCommonDir, "outerlayer", "materialized.json")) || hasExcludeBlock(dirs.gitCommonDir)) {
683
- const { cleanupEarlierCopies } = await import('./context-cleanup-VSDT77BZ.js');
683
+ const { cleanupEarlierCopies } = await import('./context-cleanup-UBOJHGQM.js');
684
684
  cleanupEarlierCopies(dirs);
685
685
  }
686
686
  if (!contextPossiblyGoverned(cwd, home)) return void 0;
687
- const { governanceOf } = await import('./control-plane-launch-DHMD5WBU.js');
687
+ const { governanceOf } = await import('./control-plane-launch-R4X63DYW.js');
688
688
  if (await governanceOf({ cwd, env, home }) !== "governed") return void 0;
689
689
  recordMissingContext(dirs, sessionId, home);
690
690
  const launcher = `${cliInvocation()} claude`;
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { isSameProcess } from './chunk-JBJTC3UU.js';
4
- import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-KP6R7CV3.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ESP5VZBD.js';
5
5
  import { existsSync, readFileSync, mkdirSync, writeFileSync, rmSync } from 'fs';
6
6
  import { dirname } from 'path';
7
7
 
@@ -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-KP6R7CV3.js';
3
+ import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ESP5VZBD.js';
4
4
  import { generateKeyPairSync, createPrivateKey, createPublicKey, sign } from 'crypto';
5
5
  import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
6
6
 
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { WorkCommandError, postJson } from './chunk-X7ML37UF.js';
4
- import { defaultGitRunner, materializeContext, isStagingWriteFault, lookupGoverningSource } from './chunk-D73OLAYE.js';
5
- import { signingFetchFor } from './chunk-F3EF56LQ.js';
6
- import { signerFor } from './chunk-APSYTJ6I.js';
7
- import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-KP6R7CV3.js';
3
+ import { WorkCommandError, postJson } from './chunk-UIBTEDLA.js';
4
+ import { defaultGitRunner, materializeContext, isStagingWriteFault, lookupGoverningSource } from './chunk-RVWADVBN.js';
5
+ import { signingFetchFor } from './chunk-VQ2JGZSC.js';
6
+ import { signerFor } from './chunk-JT3YO5MH.js';
7
+ import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-ESP5VZBD.js';
8
8
  import { unsupportedLayout, layoutRefusalReason, composeDelivery } from './chunk-FGF52V4V.js';
9
9
  import { SHIM_SCRIPT, GOVERNANCE_VARIABLE } from './chunk-HCVLP7XA.js';
10
10
  import { readDegraded, readContextManifest, readSourceCache } from './chunk-YQR6E6OV.js';
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
4
4
  import { resolvePackageVersion } from './chunk-RA3O54FC.js';
5
- import { splitRawFile } from './chunk-JUXATN46.js';
5
+ import { splitRawFile } from './chunk-OGCG5LOX.js';
6
6
  import { existsSync, readFileSync, mkdirSync, writeFileSync, readdirSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
  import { fileURLToPath } from 'url';
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { isPlaceholderCommand } from './chunk-2FPEB36J.js';
4
- import { describeCallFailure } from './chunk-QNVIGO5X.js';
5
- import { checkFit } from './chunk-RQGHHEM7.js';
6
- import { builtinKind } from './chunk-P7BEZAEU.js';
7
- import { WorkCommandError, getJson } from './chunk-X7ML37UF.js';
8
- import { sanitizeTerminal } from './chunk-3H7NZPYG.js';
9
- import { signerFor } from './chunk-APSYTJ6I.js';
3
+ import { isPlaceholderCommand } from './chunk-O6NG67Y7.js';
4
+ import { describeCallFailure } from './chunk-KDM77TVX.js';
5
+ import { checkFit } from './chunk-HBBCQ5NE.js';
6
+ import { builtinKind, imageBuildOf } from './chunk-ALSE7YKX.js';
7
+ import { builderDiskPinned } from './chunk-LHYO4RDP.js';
8
+ import { WorkCommandError, getJson } from './chunk-UIBTEDLA.js';
9
+ import { sanitizeTerminal } from './chunk-DM4EGXDO.js';
10
+ import { signerFor } from './chunk-JT3YO5MH.js';
10
11
  import { CLAUDE_CREDENTIAL_VARIABLES, claudeCredential, claudeCredentialVariablesSet } from './chunk-HDSDUTX4.js';
11
12
  import { closeSync, openSync, constants } from 'fs';
12
13
  import { totalmem } from 'os';
@@ -158,6 +159,19 @@ function managedProblems(facts) {
158
159
  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"
159
160
  });
160
161
  }
162
+ if (builtinKind(facts.provision) === "vm") {
163
+ if (facts.imageBuild === "host") {
164
+ problems.push({
165
+ condition: "imageBuild",
166
+ reason: "runner.build.imageBuild is host, and a managed runner builds its images in a builder microVM, because a recipe step on the host could reach the host's own services and network. Remove runner.build.imageBuild or set it to vm"
167
+ });
168
+ } else if (!facts.builderDiskPinned) {
169
+ problems.push({
170
+ condition: "imageBuild",
171
+ reason: "this release of the CLI pins no builder root disk, so it cannot build images in a builder microVM, which a managed runner needs for runner.build.imageBuild. Update the CLI to a release that pins one"
172
+ });
173
+ }
174
+ }
161
175
  return problems;
162
176
  }
163
177
  function managedFactsOf(config, probes) {
@@ -165,7 +179,9 @@ function managedFactsOf(config, probes) {
165
179
  provision: config.hooks.provision,
166
180
  jailer: probes.jailer ?? "unknown",
167
181
  credentials: claudeCredentialVariablesSet(probes.env),
168
- allowHosts: config.build?.allowHosts
182
+ allowHosts: config.build?.allowHosts,
183
+ imageBuild: imageBuildOf(config),
184
+ builderDiskPinned: probes.builderDiskPinned ?? builderDiskPinned()
169
185
  };
170
186
  }
171
187
  function checkBlocked(config, probes) {
@@ -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-KP6R7CV3.js';
3
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ESP5VZBD.js';
4
4
  import { readFileSync, mkdirSync, writeFileSync, renameSync } from 'fs';
5
5
  import { join } from 'path';
6
6
 
@@ -52,6 +52,14 @@ var HOST_HELPER_SHA256 = {
52
52
  function hostHelperPinned(arch = "x86_64", hashes = HOST_HELPER_SHA256) {
53
53
  return hashes[arch] !== "0".repeat(64);
54
54
  }
55
+ var BUILDER_DISK_VERSION = "1";
56
+ var BUILDER_DISK_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/builder-${BUILDER_DISK_VERSION}`;
57
+ var BUILDER_DISK_SHA256 = {
58
+ x86_64: "fb581f3cc5a7329b2f65b5d62e42be8a53cf845596a76d7ad938ba4c2598dc37"
59
+ };
60
+ function builderDiskPinned(arch = "x86_64", hashes = BUILDER_DISK_SHA256) {
61
+ return hashes[arch] !== "0".repeat(64);
62
+ }
55
63
  var VOICE_PACK_VERSION = "kokoro-82m-v1.0-ort-1.21.0";
56
64
  var KOKORO_REVISION = "1939ad2a8e416c0acfeecc08a694d14ef25f2231";
57
65
  var KOKORO_BASE_URL = `https://huggingface.co/onnx-community/Kokoro-82M-v1.0-ONNX/resolve/${KOKORO_REVISION}`;
@@ -96,4 +104,4 @@ var FFMPEG_STATIC = {
96
104
  };
97
105
  var MEDIA_PINS = `${VOICE_PACK_VERSION}+${FFMPEG_BUILD_TAG}`;
98
106
 
99
- export { 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, HOST_HELPER_ASSETS_VERSION, HOST_HELPER_BASE_URL, HOST_HELPER_SHA256, JAILER_BINARY_SHA256, MEDIA_PINS, MICROVM_ARCHES, NODE_IMAGE, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, firecrackerArch, guestAssetsPinned, hostHelperPinned };
107
+ 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, HOST_HELPER_ASSETS_VERSION, HOST_HELPER_BASE_URL, HOST_HELPER_SHA256, JAILER_BINARY_SHA256, MEDIA_PINS, MICROVM_ARCHES, NODE_IMAGE, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, builderDiskPinned, firecrackerArch, guestAssetsPinned, hostHelperPinned };
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { readContextManifest, removeContextManifest } from './chunk-YQR6E6OV.js';
4
4
  import { removePreCommitGuardHook } from './chunk-TUSYOL2O.js';
5
- import { CONTEXT_PIN_FILENAME } from './chunk-JUXATN46.js';
5
+ import { CONTEXT_PIN_FILENAME } from './chunk-OGCG5LOX.js';
6
6
  import { execFileSync } from 'child_process';
7
7
  import { lstatSync, existsSync, unlinkSync, readdirSync, rmdirSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
8
8
  import { join, dirname, isAbsolute } from 'path';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { skillDir, FORMER_MAINTAINED_NAMES, isMaintainedCopy } from './chunk-YW4PEGLN.js';
3
+ import { skillDir, FORMER_MAINTAINED_NAMES, isMaintainedCopy } from './chunk-KUTZ6XLS.js';
4
4
  import { cliInvocation } from './chunk-CRB3POP4.js';
5
- import { emitTree, ALL_TARGET_IDS, classifyTree } from './chunk-JUXATN46.js';
5
+ import { emitTree, ALL_TARGET_IDS, classifyTree } from './chunk-OGCG5LOX.js';
6
6
  import { readFileSync, existsSync, unlinkSync, rmdirSync, readdirSync } from 'fs';
7
7
  import { join, dirname, relative, sep } from 'path';
8
8
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-RQGHHEM7.js';
3
+ import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-HBBCQ5NE.js';
4
4
  import { readFileSync } from 'fs';
5
5
 
6
6
  createRequire(import.meta.url);
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { runEmit } from './chunk-GI6LOIHS.js';
3
+ import { runEmit } from './chunk-TNJXCNQ6.js';
4
4
  import { addStdioMcpEntryIfAbsent, addDocsMcpEntryIfAbsent, DOCS_MCP_SERVER_NAME } from './chunk-KT4CN6OU.js';
5
- import { installStarterPack } from './chunk-QCDVKCHA.js';
6
- import { AGENTS_MD_LAYOUT, declareAgentsMdLayout, linkClaudeSkills, SKILLS_LINK_PATH, describeSkillsLink, isAgentsMdLayout, holdsTodaysLayoutSources, discoverOuterlayerPaths } from './chunk-ZAJKEHIE.js';
5
+ import { installStarterPack } from './chunk-UWEJ6HGB.js';
6
+ import { AGENTS_MD_LAYOUT, declareAgentsMdLayout, linkClaudeSkills, SKILLS_LINK_PATH, describeSkillsLink, isAgentsMdLayout, holdsTodaysLayoutSources, discoverOuterlayerPaths } from './chunk-4IG6EZHU.js';
7
7
  import { C } from './chunk-ANPNT6PM.js';
8
- import { resolveGitCommonDir, defaultGitRunner } from './chunk-D73OLAYE.js';
9
- import { loadTemplateFiles, loadMaintainedFiles, skillDir, AGENTS_SKILLS_BASE } from './chunk-YW4PEGLN.js';
8
+ import { resolveGitCommonDir, defaultGitRunner } from './chunk-RVWADVBN.js';
9
+ import { loadTemplateFiles, loadMaintainedFiles, skillDir, AGENTS_SKILLS_BASE } from './chunk-KUTZ6XLS.js';
10
10
  import { cliInvocation } from './chunk-CRB3POP4.js';
11
- import { linkedAgentsPath } from './chunk-WXEPMPHK.js';
11
+ import { linkedAgentsPath } from './chunk-LN4WDONI.js';
12
12
  import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
13
- import { generatedHeaderSource } from './chunk-JUXATN46.js';
13
+ import { generatedHeaderSource } from './chunk-OGCG5LOX.js';
14
14
  import { execFileSync } from 'child_process';
15
15
  import { existsSync, mkdirSync, writeFileSync } from 'fs';
16
16
  import { join, dirname } from 'path';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
4
- import { detectActiveSession, autoConnect, transcriptPathForSession } from './chunk-X2Y3B4JH.js';
5
- import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-XT5SOJRC.js';
4
+ import { detectActiveSession, autoConnect, transcriptPathForSession } from './chunk-6TFTRVOA.js';
5
+ import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-AKR32WHV.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-F3EF56LQ.js';
7
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-VQ2JGZSC.js';
8
8
  import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
9
9
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
11
11
  import { cliInvocation } from './chunk-CRB3POP4.js';
12
- import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-3WW2TL7V.js';
12
+ import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-AKHGQKNR.js';
13
13
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
14
14
  import { readFileSync, existsSync } from 'fs';
15
15
  import { join, dirname, basename } from 'path';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-GXKWPOK6.js';
4
- import { MIN_ENGINE_MAJOR } from './chunk-MV52FCSG.js';
5
- import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-NJS7JJYN.js';
6
- import { runnerCredentialProblem } from './chunk-P7BEZAEU.js';
7
- import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-KP6R7CV3.js';
3
+ import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-CMU6QJHE.js';
4
+ import { MIN_ENGINE_MAJOR } from './chunk-X5LFLYSD.js';
5
+ import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-52C3SSNF.js';
6
+ import { runnerCredentialProblem } from './chunk-ALSE7YKX.js';
7
+ import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ESP5VZBD.js';
8
8
  import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
9
9
  import { dirname } from 'path';
10
10