@outerlayer/cli 0.23.0 → 0.25.0

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 (117) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +13 -0
  3. package/dist/{agent-setup-SNDCEHG2.js → agent-setup-PDIIGMKE.js} +7 -7
  4. package/dist/{bridge-QFN3KJP6.js → bridge-5KZ36YDG.js} +3 -3
  5. package/dist/build-Q2OBF77R.js +12 -0
  6. package/dist/build-info.json +1 -1
  7. package/dist/{builder-7FBQAWQZ.js → builder-PRSCX5AH.js} +7 -7
  8. package/dist/{check-3CGLWMHM.js → check-EPYRTE3R.js} +40 -37
  9. package/dist/{chunk-URWYRAIC.js → chunk-2K3TCQHW.js} +1 -3
  10. package/dist/{chunk-Z42JY3LQ.js → chunk-2N72GPS2.js} +3 -3
  11. package/dist/{chunk-WY7HFY62.js → chunk-34ANPNVB.js} +3 -3
  12. package/dist/{chunk-QSEPKZXR.js → chunk-3I44PQ26.js} +206 -57
  13. package/dist/{chunk-ZKWKQIJU.js → chunk-4S4VBDSO.js} +1 -1
  14. package/dist/chunk-5222PA6S.js +66 -0
  15. package/dist/{chunk-GXV73IIS.js → chunk-6CNHXHI2.js} +17 -5
  16. package/dist/{chunk-NYTZ7HVN.js → chunk-7OWPLRJR.js} +1 -1
  17. package/dist/{chunk-EFB3FGLC.js → chunk-ATGHVEU4.js} +1 -1
  18. package/dist/{chunk-QILR6TZP.js → chunk-AXPCGD46.js} +5 -5
  19. package/dist/{chunk-CBCKD6DO.js → chunk-D4AMAEZ7.js} +12 -11
  20. package/dist/{chunk-XACXXKQ5.js → chunk-DEBOL6ON.js} +1 -1
  21. package/dist/{chunk-XGPC3IOR.js → chunk-FXUVXSY2.js} +2 -2
  22. package/dist/{chunk-6AOZD3LY.js → chunk-HBLLZLOH.js} +3 -3
  23. package/dist/{chunk-ZLZ3XVPI.js → chunk-HWEIFHSW.js} +3 -3
  24. package/dist/{chunk-D64E222W.js → chunk-IDJIWKTY.js} +3 -3
  25. package/dist/{chunk-OBCFK4QD.js → chunk-IGRRD7PX.js} +11 -7
  26. package/dist/{chunk-GISNHSYL.js → chunk-JGD5TWQ2.js} +4 -2
  27. package/dist/{chunk-2TT7DEMZ.js → chunk-JKILLWZF.js} +11 -9
  28. package/dist/{chunk-V5CG75NX.js → chunk-JWRX5ZTT.js} +6 -2
  29. package/dist/{chunk-XOEV4FVK.js → chunk-K5WVK7IC.js} +1 -1
  30. package/dist/{chunk-TFGXOHF6.js → chunk-L2FZLBF7.js} +278 -40
  31. package/dist/{chunk-QS43O4DR.js → chunk-M4B6QKNZ.js} +1 -1
  32. package/dist/{chunk-UF5L4BAI.js → chunk-O2WYUIK7.js} +1 -1
  33. package/dist/{chunk-276D7BJ7.js → chunk-QMQC6JCO.js} +1 -1
  34. package/dist/{chunk-OGMZJWWD.js → chunk-QUGYGO6L.js} +6 -6
  35. package/dist/{chunk-JV4YGAAW.js → chunk-QXNJWSTM.js} +5 -5
  36. package/dist/{chunk-3W333NFO.js → chunk-RGW7ERF3.js} +15 -4
  37. package/dist/{chunk-I2UOAV7X.js → chunk-TQMI335S.js} +4 -1
  38. package/dist/{chunk-WXJXHZVB.js → chunk-UNF7MWEL.js} +1 -1
  39. package/dist/{chunk-FX6IHR5C.js → chunk-VMF5LK3D.js} +8 -8
  40. package/dist/{chunk-C2XZBNHY.js → chunk-VNGENFOG.js} +19 -6
  41. package/dist/{chunk-G3LHWUBK.js → chunk-VPUNOGXO.js} +6 -6
  42. package/dist/{chunk-C64D7HR3.js → chunk-X5LNCIZT.js} +19 -10
  43. package/dist/{chunk-2Q3PZ42G.js → chunk-XGJUNNXL.js} +1 -1
  44. package/dist/{chunk-BOG4ENP7.js → chunk-XHXDCYSK.js} +185 -38
  45. package/dist/{chunk-CQAEV3Z5.js → chunk-XRYUJTAT.js} +8 -1
  46. package/dist/{chunk-KGKFEONR.js → chunk-YMKQVCKC.js} +5 -5
  47. package/dist/{chunk-DJYOCD65.js → chunk-YTTHDPWF.js} +5 -5
  48. package/dist/{chunk-4AVDD7VX.js → chunk-ZGMQQWCV.js} +2 -2
  49. package/dist/{chunk-IHNQWF6F.js → chunk-ZI2ZVWKT.js} +1 -1
  50. package/dist/{chunk-OW52QLK3.js → chunk-ZODVSFI4.js} +1 -1
  51. package/dist/chunk-ZVB57WI6.js +19 -0
  52. package/dist/{claude-launcher-KEESTJHO.js → claude-launcher-WGOCLTG6.js} +1 -1
  53. package/dist/{cli-44WGGICQ.js → cli-2LGSPAYZ.js} +131 -97
  54. package/dist/command-ITLPJ5XU.js +533 -0
  55. package/dist/{config-H4QS332G.js → config-JJ3EO7SB.js} +3 -3
  56. package/dist/connect-cmd-JFDZKPND.js +25 -0
  57. package/dist/container-start-X22OXY6E.js +179 -0
  58. package/dist/{control-plane-launch-SEYCOZFH.js → control-plane-launch-ZFT6SI4N.js} +6 -6
  59. package/dist/{dist-SOH3O24Y.js → dist-2APO44JG.js} +1 -1
  60. package/dist/{docker-KMK4LOET.js → docker-PQHWAY5J.js} +7 -7
  61. package/dist/{doctor-4H77CEB7.js → doctor-73GNT4VV.js} +90 -31
  62. package/dist/{emit-artifact-cmd-XCZ3ALLV.js → emit-artifact-cmd-AIOTX6YT.js} +14 -11
  63. package/dist/{emit-criteria-cmd-JE72JHKJ.js → emit-criteria-cmd-7PJINOHA.js} +11 -8
  64. package/dist/{emit-finding-cmd-ILIDRMYN.js → emit-finding-cmd-JRDSZ4DR.js} +11 -8
  65. package/dist/{emit-result-cmd-WPKG5YAS.js → emit-result-cmd-ZGF6Q6OP.js} +14 -11
  66. package/dist/{emit-step-cmd-OVMLQSL6.js → emit-step-cmd-DUR34STQ.js} +12 -9
  67. package/dist/{exec-client-ATPF2DDB.js → exec-client-S5IA7JRG.js} +4 -4
  68. package/dist/{governing-source-EQBKPME7.js → governing-source-DKJABQAT.js} +12 -11
  69. package/dist/{guest-init-HWSE7W6L.js → guest-init-TOSKPGPF.js} +5 -5
  70. package/dist/{hook-fast-27SHD72I.js → hook-fast-NEELST6G.js} +1 -1
  71. package/dist/host-key-ICJEQBWH.js +9 -0
  72. package/dist/image-tag-6KJOGBQK.js +10 -0
  73. package/dist/index.js +4 -4
  74. package/dist/{init-HAAHIQFN.js → init-NE3VR3EY.js} +26 -23
  75. package/dist/{init-WQ62BXDN.js → init-SKOXNJND.js} +26 -23
  76. package/dist/{init-cmd-VPFIDY64.js → init-cmd-UEDOJ7LG.js} +12 -12
  77. package/dist/{init-update-UZIJ2FMU.js → init-update-VKZ4S6HH.js} +36 -10
  78. package/dist/{install-SFACZU7E.js → install-MPEJJ7X6.js} +5 -5
  79. package/dist/install-cmd-SE6NCTJK.js +12 -0
  80. package/dist/job-state-format-WJQGQB6F.js +6 -0
  81. package/dist/{logs-N3ZX7HFV.js → logs-T4ERSOQ4.js} +3 -3
  82. package/dist/loop-BPVEA5OC.js +78 -0
  83. package/dist/{machine-PGDRWPI2.js → machine-G3GICXQN.js} +22 -19
  84. package/dist/{mcp-serve-cmd-CNRC5AL5.js → mcp-serve-cmd-7M4VLNI4.js} +5 -5
  85. package/dist/{paths-AKX2OOLF.js → paths-2KGM2LZV.js} +3 -3
  86. package/dist/pending-BGLMTB5Q.js +9 -0
  87. package/dist/{pidfile-G2J5WBQS.js → pidfile-VYBH3IMN.js} +4 -4
  88. package/dist/{record-Q4IEYIVV.js → record-GNOHDJ2O.js} +4 -4
  89. package/dist/{relay-PSZ4LGMW.js → relay-GFPPD6GF.js} +1 -1
  90. package/dist/relay-protocol-HELO5SNH.js +6 -0
  91. package/dist/{runner-env-GZHXM27A.js → runner-env-GUFV544G.js} +6 -6
  92. package/dist/{runner-identity-IIZ3RK7M.js → runner-identity-J6DXJ6MF.js} +7 -7
  93. package/dist/{runner-key-BPP5XRYR.js → runner-key-L55O7Y7W.js} +26 -23
  94. package/dist/{session-sender-EKKZ5DEU.js → session-sender-LXTASWBY.js} +15 -12
  95. package/dist/{spec-cmd-JDHGNFVJ.js → spec-cmd-G2JNXKD7.js} +12 -9
  96. package/dist/{status-UCQDEMFX.js → status-U6DXOR6C.js} +43 -28
  97. package/dist/{sync-cmd-NSVXOYFJ.js → sync-cmd-VPNS5ITY.js} +14 -11
  98. package/dist/{watch-NQVZWPBJ.js → watch-ZOCYD2NE.js} +14 -11
  99. package/dist/{work-claim-cmd-FPJXQAXP.js → work-claim-cmd-BUMIPJNF.js} +15 -12
  100. package/dist/{work-cmd-FMPDXPU6.js → work-cmd-LRAXUOJV.js} +12 -9
  101. package/dist/{work-comment-cmd-ZVUE2IUN.js → work-comment-cmd-4RDIBUYO.js} +12 -9
  102. package/dist/{work-logs-cmd-CQH2SYT4.js → work-logs-cmd-YYN2CPJQ.js} +12 -9
  103. package/dist/{work-open-pr-cmd-YY2OGJOI.js → work-open-pr-cmd-3MCND2LZ.js} +13 -10
  104. package/dist/{work-pr-cmd-EHFTEVJO.js → work-pr-cmd-BODEZAXN.js} +12 -9
  105. package/dist/{work-stop-cmd-LGWSBSBT.js → work-stop-cmd-P7HXVKEG.js} +12 -9
  106. package/package.json +2 -2
  107. package/skill-pack/maintained/outerlayer-build/SKILL.md +1 -1
  108. package/skill-pack/maintained/outerlayer-build/references/agent-briefs.md +3 -2
  109. package/skill-pack/maintained/outerlayer-build/references/review-briefs.md +3 -1
  110. package/dist/build-WHHFA7KM.js +0 -12
  111. package/dist/command-4FAP2D3P.js +0 -207
  112. package/dist/connect-cmd-6DUTUK63.js +0 -22
  113. package/dist/host-key-ATB23GI3.js +0 -9
  114. package/dist/install-cmd-6HTP7I43.js +0 -12
  115. package/dist/loop-JPW2QJ64.js +0 -75
  116. package/dist/pending-7SGWZCEH.js +0 -9
  117. package/dist/relay-protocol-K7KP2SPI.js +0 -6
@@ -21971,14 +21971,14 @@ var ModelRegistryImpl = class {
21971
21971
  };
21972
21972
  var models_default = {
21973
21973
  version: "1.0.0",
21974
- generatedAt: "2026-10-14T04:11:40.017Z",
21974
+ generatedAt: "2026-10-15T03:53:58.240Z",
21975
21975
  sources: {
21976
21976
  litellm: {
21977
- fetchedAt: "2026-10-14T04:11:40.017Z",
21978
- modelCount: 1938
21977
+ fetchedAt: "2026-10-15T03:53:58.240Z",
21978
+ modelCount: 1937
21979
21979
  },
21980
21980
  openrouter: {
21981
- fetchedAt: "2026-10-14T04:11:40.017Z",
21981
+ fetchedAt: "2026-10-15T03:53:58.240Z",
21982
21982
  modelCount: 205
21983
21983
  }
21984
21984
  },
@@ -50707,7 +50707,8 @@ var models_default = {
50707
50707
  },
50708
50708
  capabilities: {
50709
50709
  vision: true
50710
- }
50710
+ },
50711
+ deprecationDate: "2025-11-14"
50711
50712
  },
50712
50713
  "gemini-2.5-flash-native-audio-latest": {
50713
50714
  provider: "google",
@@ -52816,8 +52817,8 @@ var models_default = {
52816
52817
  "max_tokens"
52817
52818
  ],
52818
52819
  pricing: {
52819
- inputCostPerToken: 2e-6,
52820
- outputCostPerToken: 1e-5
52820
+ inputCostPerToken: 4e-6,
52821
+ outputCostPerToken: 2e-5
52821
52822
  },
52822
52823
  context: {
52823
52824
  maxInputTokens: 105e4,
@@ -54011,8 +54012,8 @@ var models_default = {
54011
54012
  "max_tokens"
54012
54013
  ],
54013
54014
  pricing: {
54014
- inputCostPerToken: 1e-6,
54015
- outputCostPerToken: 5e-6
54015
+ inputCostPerToken: 2e-6,
54016
+ outputCostPerToken: 1e-5
54016
54017
  },
54017
54018
  context: {
54018
54019
  maxInputTokens: 105e4,
@@ -54033,8 +54034,8 @@ var models_default = {
54033
54034
  "max_tokens"
54034
54035
  ],
54035
54036
  pricing: {
54036
- inputCostPerToken: 1e-6,
54037
- outputCostPerToken: 5e-6
54037
+ inputCostPerToken: 2e-6,
54038
+ outputCostPerToken: 1e-5
54038
54039
  },
54039
54040
  context: {
54040
54041
  maxInputTokens: 105e4,
@@ -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-IHNQWF6F.js';
4
+ import { RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
5
5
  import { existsSync, readFileSync, rmSync, mkdirSync, writeFileSync } from 'fs';
6
6
  import { dirname } from 'path';
7
7
 
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { removeRetiredSkills } from './chunk-MQ743JX3.js';
4
- import { defaultFetch, resolveGatewayCredentials } from './chunk-QS43O4DR.js';
4
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-M4B6QKNZ.js';
5
5
  import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
6
6
  import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-HBISTTG3.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';
8
8
  import { writeDegraded, writeSourceCache, SOURCE_CACHE_TTL_RETRY_MS, writeContextManifest, SOURCE_CACHE_TTL_SUCCESS_MS, readSourceCache, isSourceCacheFresh, clearDegraded } from './chunk-YQR6E6OV.js';
9
9
  import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-RKOTJQVG.js';
10
10
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
11
- import { withTokenHeader } from './chunk-URWYRAIC.js';
11
+ import { withTokenHeader } from './chunk-2K3TCQHW.js';
12
12
  import { execFileSync } from 'child_process';
13
13
  import { existsSync, mkdirSync, writeFileSync, chmodSync, lstatSync, readFileSync, copyFileSync } from 'fs';
14
14
  import { isAbsolute, join, dirname } from 'path';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { autoConnect, detectActiveSession } from './chunk-ZLZ3XVPI.js';
4
- import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-QS43O4DR.js';
5
- import { resolveRepoIdentity } from './chunk-CBCKD6DO.js';
3
+ import { autoConnect, detectActiveSession } from './chunk-HWEIFHSW.js';
4
+ import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-M4B6QKNZ.js';
5
+ import { resolveRepoIdentity } from './chunk-D4AMAEZ7.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
8
8
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-GXV73IIS.js';
4
- import { resolveGatewayCredentials } from './chunk-QS43O4DR.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-6CNHXHI2.js';
4
+ import { resolveGatewayCredentials } from './chunk-M4B6QKNZ.js';
5
5
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
6
- import { resolveRepoIdentity } from './chunk-CBCKD6DO.js';
6
+ import { resolveRepoIdentity } from './chunk-D4AMAEZ7.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';
8
8
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
9
9
  import { openSync, fstatSync, readSync, closeSync } from 'fs';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
4
- import { autoConnect, detectActiveSession } from './chunk-ZLZ3XVPI.js';
4
+ import { autoConnect, detectActiveSession } from './chunk-HWEIFHSW.js';
5
5
  import { acquireSpoolLockAt } from './chunk-BUP5N3X6.js';
6
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-QS43O4DR.js';
7
- import { resolveRepoIdentity } from './chunk-CBCKD6DO.js';
6
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-M4B6QKNZ.js';
7
+ import { resolveRepoIdentity } from './chunk-D4AMAEZ7.js';
8
8
  import { C } from './chunk-ANPNT6PM.js';
9
9
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
10
10
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { builtinKind } from './chunk-V5CG75NX.js';
3
+ import { builtinKind } from './chunk-JWRX5ZTT.js';
4
4
  import { parseSize } from './chunk-7RQ73DLO.js';
5
- import { runnerDir } from './chunk-IHNQWF6F.js';
5
+ import { runnerDir } from './chunk-ZI2ZVWKT.js';
6
6
  import { dirname } from 'path';
7
7
  import { spawnSync } from 'child_process';
8
8
 
@@ -16,16 +16,19 @@ function escapeUnitPath(path) {
16
16
  return path.replace(/%/g, "%%").replace(/ /g, "\\x20");
17
17
  }
18
18
  function runnerUnit(unit) {
19
+ const helperService = unit.helper === void 0 ? void 0 : `${unit.helper.unit}.service`;
19
20
  return `${UNIT_MARKER}
20
21
  [Unit]
21
22
  Description=OuterLayer runner
22
- After=network-online.target${unit.docker ? " docker.service" : ""}
23
+ After=network-online.target${unit.docker ? " docker.service" : ""}${helperService === void 0 ? "" : ` ${helperService}`}
23
24
  Wants=network-online.target
24
- ${unit.docker ? "Requires=docker.service\n" : ""}
25
+ ${helperService === void 0 ? "" : `Wants=${helperService}
26
+ `}${unit.docker ? "Requires=docker.service\n" : ""}
25
27
  [Service]
26
28
  User=${unit.user}
27
29
  ExecStart=${unit.execStart}
28
- EnvironmentFile=-${escapeUnitPath(`${unit.configDir}/runner.env`)}
30
+ ${unit.helper === void 0 ? "" : `Environment=OUTERLAYER_HELPER_SOCKET=${unit.helper.socket}
31
+ `}EnvironmentFile=-${escapeUnitPath(`${unit.configDir}/runner.env`)}
29
32
  Restart=on-failure
30
33
  RestartForceExitStatus=75
31
34
  RestartSec=30
@@ -143,7 +146,8 @@ function installService(request, deps) {
143
146
  configDir: dirname(request.configPath),
144
147
  execStart: request.execStart,
145
148
  timeLimitMinutes: request.timeLimitMinutes,
146
- docker: kind === "container" || kind === "vm" || builtinKind(request.hooks.cleanup) === "container" || builtinKind(request.hooks.cleanup) === "vm"
149
+ docker: kind === "container" || kind === "vm" || builtinKind(request.hooks.cleanup) === "container" || builtinKind(request.hooks.cleanup) === "vm",
150
+ ...request.helperSocket !== void 0 && request.helperUnit !== void 0 ? { helper: { unit: request.helperUnit, socket: request.helperSocket } } : {}
147
151
  });
148
152
  if (request.print === true) return outcome(true, "printed", [], unit);
149
153
  if (own) return outcome(false, "refused", [OWN_HOOKS]);
@@ -274,4 +278,4 @@ function uninstallService(request, deps) {
274
278
  return outcome(true, "removed", lines);
275
279
  }
276
280
 
277
- export { DEFAULT_UNIT_NAME, RUNNER_RESERVE_BYTES, VM_SERVICE_NAME, checkFit, installService, realTaskScheduler, uninstallService, unitPathFor };
281
+ export { DEFAULT_UNIT_NAME, RUNNER_RESERVE_BYTES, UNIT_MARKER, VM_SERVICE_NAME, checkFit, installService, realTaskScheduler, uninstallService, unitPathFor };
@@ -30,12 +30,14 @@ var UNKNOWN_TRANSPORT_REASON = "the runner cannot tell how this build reaches it
30
30
  var COMMAND_LOST_REASON = "the build's command ended without recording an exit code";
31
31
  var CONTAINER_STOPPED_REASON = "the build's container stopped while no runner was managing it";
32
32
  var UNKNOWN_TRACKING_REASON = "the runner cannot tell how this build is tracked";
33
+ var DOCKER_DESKTOP_REASON = "Docker Desktop is accepted only for a runner in the runner image, so container builds here need Docker Engine: install it (on Windows, inside WSL2), run the runner image, or use builtin:process";
33
34
  var RUNNER_WORDED_REASONS = /* @__PURE__ */ new Set([
34
35
  MALFORMED_REASON,
35
36
  UNKNOWN_TRANSPORT_REASON,
36
37
  COMMAND_LOST_REASON,
37
38
  CONTAINER_STOPPED_REASON,
38
- UNKNOWN_TRACKING_REASON
39
+ UNKNOWN_TRACKING_REASON,
40
+ DOCKER_DESKTOP_REASON
39
41
  ]);
40
42
 
41
- export { COMMAND_LOST_REASON, CONTAINER_STOPPED_REASON, JOIN_DIR, JOIN_SOCKET, JOIN_WAIT_MS, MALFORMED_REASON, MAX_MALFORMED_SESSIONS, MAX_OPEN_STREAMS, RELAY_ID, RELAY_USER, RUNNER_WORDED_REASONS, SESSION_WINDOW, STREAM_WINDOW, TARGET_CLAUDE, TARGET_GATEWAY, TARGET_LEASE, TARGET_TUNNEL, UNKNOWN_TRACKING_REASON, UNKNOWN_TRANSPORT_REASON, destinationTarget, targetOfPath };
43
+ export { COMMAND_LOST_REASON, CONTAINER_STOPPED_REASON, DOCKER_DESKTOP_REASON, JOIN_DIR, JOIN_SOCKET, JOIN_WAIT_MS, MALFORMED_REASON, MAX_MALFORMED_SESSIONS, MAX_OPEN_STREAMS, RELAY_ID, RELAY_USER, RUNNER_WORDED_REASONS, SESSION_WINDOW, STREAM_WINDOW, TARGET_CLAUDE, TARGET_GATEWAY, TARGET_LEASE, TARGET_TUNNEL, UNKNOWN_TRACKING_REASON, UNKNOWN_TRANSPORT_REASON, destinationTarget, targetOfPath };
@@ -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-C2XZBNHY.js';
4
- import { MIN_ENGINE_MAJOR } from './chunk-BOG4ENP7.js';
5
- import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-4AVDD7VX.js';
6
- import { runnerCredentialProblem } from './chunk-V5CG75NX.js';
7
- import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-IHNQWF6F.js';
3
+ import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-VNGENFOG.js';
4
+ import { MIN_ENGINE_MAJOR } from './chunk-XHXDCYSK.js';
5
+ import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-ZGMQQWCV.js';
6
+ import { runnerCredentialProblem } from './chunk-JWRX5ZTT.js';
7
+ import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZI2ZVWKT.js';
8
8
  import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
9
9
  import { dirname } from 'path';
10
10
 
@@ -22,7 +22,7 @@ function isolationNote(machine) {
22
22
  }
23
23
  function processRefusal(machine) {
24
24
  const reach = reachDockerStep(machine);
25
- const needs = machine.platform === "darwin" ? "Isolated builds on a Mac run in a Linux VM: run this again with --vm." : reach !== void 0 ? `Isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later: ${reach}, then run this again.` : machine.platform === "windows" ? `Isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later inside WSL2: install it there, then run this again from a WSL2 shell.` : `Isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later on Linux or WSL2: install it, then run this again.`;
25
+ const needs = machine.platform === "darwin" ? "Isolated builds on a Mac run in the runner image on Docker Desktop (https://docs.outerlayer.ai/run-the-runner-in-a-container) or in a Linux VM: run this again with --vm." : reach !== void 0 ? `Isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later: ${reach}, then run this again.` : machine.platform === "windows" ? `Isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later inside WSL2: install it there, then run this again from a WSL2 shell.` : `Isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later on Linux or WSL2: install it, then run this again.`;
26
26
  return `This machine has ${describeMachineDocker(machine)}, so it cannot isolate a build. ${needs} To run builds as processes under this user instead, where a build can read this user's files and the runner's Claude credential, run this again with --allow-process-builds.`;
27
27
  }
28
28
  function isPlaceholderCommand(command) {
@@ -102,15 +102,15 @@ function prepareRunnerInit(configPath, opts = {}) {
102
102
  }
103
103
  const hooks = opts.requireContainer !== true && supportsMicroVmBuilds(machine) ? "builtin:vm" : supportsContainerBuilds(machine) ? "builtin:container" : "builtin:process";
104
104
  if (hooks === "builtin:process" && opts.allowProcess !== true) throw new RunnerInitError(processRefusal(machine));
105
- if (agent === "claude" && credential === void 0 && !hasStoredCredential(configPath)) {
105
+ if (agent === "claude" && credential === void 0 && opts.credentialInEnvironment !== true && !hasStoredCredential(configPath)) {
106
106
  throw new RunnerInitError(
107
107
  "--agent claude needs Claude's credential, and none was piped on stdin or is in the runner.env beside the config. Pipe a token from `claude setup-token`, or an Anthropic API key: printf '%s' \"$CLAUDE_CODE_OAUTH_TOKEN\" | outerlayer runner init --agent claude"
108
108
  );
109
109
  }
110
- return { configPath, config, carried, credential, agent, machine, hooks, needsKey };
110
+ return { configPath, config, carried, credential, agent, machine, hooks, needsKey, host: opts.host };
111
111
  }
112
112
  function writeRunnerInit(prepared, runnerKey) {
113
- const { configPath, config, carried, credential, agent, machine, hooks } = prepared;
113
+ const { configPath, config, carried, credential, agent, machine, hooks, host } = prepared;
114
114
  if (prepared.needsKey && runnerKey === void 0) {
115
115
  throw new RunnerInitError(`${configPath}: apiKey is missing, and no runner key was pasted.`);
116
116
  }
@@ -130,10 +130,12 @@ function writeRunnerInit(prepared, runnerKey) {
130
130
  amend: PLACEHOLDER_COMMAND
131
131
  },
132
132
  ...carried,
133
+ ...host === void 0 ? {} : { name: host },
133
134
  // The agent was named on this command line, so its commands win over any the hand-off carried.
134
135
  ...agent === void 0 ? {} : { commands: { ...AGENT_COMMANDS[agent] } },
135
136
  hooks: { provision: hooks, cleanup: hooks }
136
137
  };
138
+ if (host !== void 0) delete config.runner.host;
137
139
  mkdirSync(dirname(configPath), { recursive: true });
138
140
  const stored = credential === void 0 ? void 0 : { variable: credential.variable, path: storeClaudeCredential(configPath, credential) };
139
141
  writeFileSync(configPath, `${JSON.stringify(config, null, 2)}
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
3
3
  import { MAX_ALLOW_HOSTS, allowHostProblem } from './chunk-UXYLWVTQ.js';
4
4
  import { parseSize } from './chunk-7RQ73DLO.js';
5
5
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
6
- import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-URWYRAIC.js';
6
+ import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-2K3TCQHW.js';
7
7
  import { existsSync, statSync, accessSync, constants, readFileSync } from 'fs';
8
8
  import { hostname } from 'os';
9
9
  import { join } from 'path';
@@ -92,6 +92,7 @@ function runnerVmOf(configPath) {
92
92
  }
93
93
  }
94
94
  var RUNNER_KEYS = [
95
+ "name",
95
96
  "host",
96
97
  "queues",
97
98
  "concurrency",
@@ -212,6 +213,9 @@ function loadRunnerConfig(configPath) {
212
213
  if (runner.autoUpdate !== void 0 && typeof runner.autoUpdate !== "boolean") {
213
214
  fail(configPath, "runner.autoUpdate", "must be true or false");
214
215
  }
216
+ if (runner.name !== void 0 && runner.host !== void 0 && runner.name !== runner.host) {
217
+ fail(configPath, "runner.name", `is "${runner.name}" and runner.host is "${runner.host}"; set runner.name only, since runner.host is its earlier name`);
218
+ }
215
219
  const queues = runner.queues && runner.queues.length > 0 ? runner.queues : [...RUNNER_QUEUES];
216
220
  for (const queue of queues) {
217
221
  if (!RUNNER_QUEUES.includes(queue)) {
@@ -241,7 +245,7 @@ function loadRunnerConfig(configPath) {
241
245
  appId: config.appId,
242
246
  repos: config.repos,
243
247
  scrub: config.scrub,
244
- host: runner.host ?? hostname(),
248
+ host: runner.name ?? runner.host ?? hostname(),
245
249
  queues,
246
250
  concurrency: runner.concurrency ?? DEFAULT_CONCURRENCY,
247
251
  pollSeconds: runner.pollSeconds ?? DEFAULT_POLL_SECONDS,
@@ -628,7 +628,7 @@ async function missingControlPlane(cwd, sessionId, home, env) {
628
628
  cleanupEarlierCopies(dirs);
629
629
  }
630
630
  if (!contextPossiblyGoverned(cwd, home)) return void 0;
631
- const { governanceOf } = await import('./control-plane-launch-SEYCOZFH.js');
631
+ const { governanceOf } = await import('./control-plane-launch-ZFT6SI4N.js');
632
632
  if (await governanceOf({ cwd, env, home }) !== "governed") return void 0;
633
633
  recordMissingContext(dirs, sessionId, home);
634
634
  const launcher = `${cliInvocation()} claude`;