@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
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import { RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-JKILLWZF.js';
4
+ import { detectMachine, supportsContainerBuilds, describeMachineDocker } from './chunk-VNGENFOG.js';
5
+ import { MIN_ENGINE_MAJOR } from './chunk-XHXDCYSK.js';
6
+ import { runnerImageVersion, IMAGE_VERSION_VARIABLE } from './chunk-5222PA6S.js';
7
+ import './chunk-TQMI335S.js';
8
+ import { isAgentName, AGENT_COMMANDS } from './chunk-ZGMQQWCV.js';
9
+ import './chunk-IGRRD7PX.js';
10
+ import './chunk-6MZSX4M7.js';
11
+ import './chunk-AXPCGD46.js';
12
+ import './chunk-DEBOL6ON.js';
13
+ import './chunk-JBJTC3UU.js';
14
+ import './chunk-OGFGZQA3.js';
15
+ import './chunk-QUGYGO6L.js';
16
+ import './chunk-RGW7ERF3.js';
17
+ import './chunk-7OWPLRJR.js';
18
+ import './chunk-XGJUNNXL.js';
19
+ import './chunk-YMKQVCKC.js';
20
+ import './chunk-X5LNCIZT.js';
21
+ import './chunk-HWEIFHSW.js';
22
+ import './chunk-6CNHXHI2.js';
23
+ import './chunk-BUP5N3X6.js';
24
+ import './chunk-XSPA5ODY.js';
25
+ import './chunk-GOSFARMS.js';
26
+ import './chunk-JWRX5ZTT.js';
27
+ import './chunk-UXYLWVTQ.js';
28
+ import './chunk-7RQ73DLO.js';
29
+ import './chunk-FXUVXSY2.js';
30
+ import './chunk-MQ743JX3.js';
31
+ import './chunk-M4B6QKNZ.js';
32
+ import './chunk-ZJSNLVCE.js';
33
+ import './chunk-VPEGE3QZ.js';
34
+ import './chunk-HCVLP7XA.js';
35
+ import './chunk-BJ3KTMDH.js';
36
+ import './chunk-D4AMAEZ7.js';
37
+ import './chunk-ANPNT6PM.js';
38
+ import './chunk-EABW6AJQ.js';
39
+ import './chunk-JKNYTNYD.js';
40
+ import './chunk-HBISTTG3.js';
41
+ import './chunk-WZBHBH3J.js';
42
+ import './chunk-CRB3POP4.js';
43
+ import './chunk-YQR6E6OV.js';
44
+ import './chunk-RKOTJQVG.js';
45
+ import './chunk-QZBXLLTV.js';
46
+ import './chunk-VNVZDWO3.js';
47
+ import './chunk-RA3O54FC.js';
48
+ import './chunk-ZODVSFI4.js';
49
+ import './chunk-ZI2ZVWKT.js';
50
+ import { CLAUDE_CREDENTIAL_VARIABLES } from './chunk-2K3TCQHW.js';
51
+ import './chunk-JGD5TWQ2.js';
52
+ import './chunk-Z5GEFMRW.js';
53
+ import { existsSync, readFileSync } from 'fs';
54
+
55
+ createRequire(import.meta.url);
56
+ var DOCKER_SOCKET = "/var/run/docker.sock";
57
+ var REQUIRED = [
58
+ ["OUTERLAYER_URL", "the factory's gateway address"],
59
+ ["OUTERLAYER_APP_ID", "the factory's id"],
60
+ ["OUTERLAYER_API_KEY", "a runner key"]
61
+ ];
62
+ var NAME_VARIABLE = "OUTERLAYER_RUNNER_NAME";
63
+ var OLD_NAME_VARIABLE = "OUTERLAYER_HOST";
64
+ function runnerName(env) {
65
+ const name = set(env, NAME_VARIABLE);
66
+ const old = set(env, OLD_NAME_VARIABLE);
67
+ if (name !== void 0 && old !== void 0 && name !== old) {
68
+ return { name: void 0, conflict: `${NAME_VARIABLE} is ${name} and ${OLD_NAME_VARIABLE} is ${old}; set ${NAME_VARIABLE} only, since ${OLD_NAME_VARIABLE} is its earlier name` };
69
+ }
70
+ return { name: name ?? old };
71
+ }
72
+ var KEY_MIN_SHOWN = 16;
73
+ var refuse = (message) => ({ ok: false, message });
74
+ var set = (env, name) => {
75
+ const value = env[name]?.trim();
76
+ return value === void 0 || value === "" ? void 0 : value;
77
+ };
78
+ var keyHint = (key) => {
79
+ if (key === "") return "none";
80
+ return key.length < KEY_MIN_SHOWN ? `a ${key.length}-character key` : `\u2026${key.slice(-4)}`;
81
+ };
82
+ var withoutSlash = (url) => url.replace(/\/+$/, "");
83
+ function disagreements(config, env) {
84
+ const lines = [];
85
+ const url = set(env, "OUTERLAYER_URL");
86
+ const appId = set(env, "OUTERLAYER_APP_ID");
87
+ const stored = { url: String(config.url ?? ""), appId: String(config.appId ?? "") };
88
+ if (withoutSlash(stored.url) !== withoutSlash(url) || stored.appId !== appId) {
89
+ lines.push(`factory: the volume has ${stored.url} (app ${stored.appId}); the variables name ${url} (app ${appId})`);
90
+ }
91
+ const key = set(env, "OUTERLAYER_API_KEY");
92
+ if (String(config.apiKey ?? "") !== key) {
93
+ lines.push(`runner key: the volume has ${keyHint(String(config.apiKey ?? ""))}; the variables have ${keyHint(key)}`);
94
+ }
95
+ const host = runnerName(env).name;
96
+ const runner = config.runner;
97
+ const storedHost = runner?.name ?? runner?.host;
98
+ if (runner !== void 0 && storedHost !== host) {
99
+ lines.push(`runner name: the volume has ${typeof storedHost === "string" ? storedHost : "none"}; the variables name ${host}`);
100
+ }
101
+ return lines;
102
+ }
103
+ function readConfig(configPath) {
104
+ try {
105
+ return JSON.parse(readFileSync(configPath, "utf8"));
106
+ } catch (err) {
107
+ return new RunnerInitError(`${configPath}: not valid JSON (${err instanceof Error ? err.message : String(err)})`);
108
+ }
109
+ }
110
+ async function containerStart(deps) {
111
+ const { env, configPath } = deps;
112
+ const version = runnerImageVersion(env);
113
+ if (version === void 0) {
114
+ return refuse(`${IMAGE_VERSION_VARIABLE} is not set. This command is the runner container image's entrypoint; to run a runner on a machine, use \`outerlayer runner start\`.`);
115
+ }
116
+ const named = runnerName(env);
117
+ if (named.conflict !== void 0) return refuse(named.conflict);
118
+ const missing = REQUIRED.filter(([name]) => set(env, name) === void 0).map(([name, what]) => `${name} (${what})`);
119
+ if (named.name === void 0) missing.push(`${NAME_VARIABLE} (the runner's name, which the factory shows)`);
120
+ const agent = set(env, "OUTERLAYER_AGENT") ?? "claude";
121
+ if (!isAgentName(agent)) {
122
+ return refuse(`OUTERLAYER_AGENT is ${agent}, and the image writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")} only. Leave it unset to use claude.`);
123
+ }
124
+ if (!CLAUDE_CREDENTIAL_VARIABLES.some((name) => set(env, name) !== void 0)) {
125
+ missing.push(`one Claude credential: ${CLAUDE_CREDENTIAL_VARIABLES.join(", ")}`);
126
+ }
127
+ if (missing.length > 0) {
128
+ return refuse(`the container needs these variables, and they are not set: ${missing.join("; ")}. Put them in the file you pass to docker run with --env-file.`);
129
+ }
130
+ const socketPresent = deps.socketPresent ?? existsSync;
131
+ if (!socketPresent(DOCKER_SOCKET)) {
132
+ return refuse(
133
+ `${DOCKER_SOCKET} is not in the container. The runner starts each build as a container on the host's Docker, so start this container with -v ${DOCKER_SOCKET}:${DOCKER_SOCKET}.`
134
+ );
135
+ }
136
+ const machine = { ...(deps.machine ?? (() => detectMachine()))(), inImage: true };
137
+ if (!supportsContainerBuilds(machine)) {
138
+ return refuse(
139
+ `The container reaches ${describeMachineDocker(machine)} through ${DOCKER_SOCKET}, and builds need Docker Engine in a version that isolates a build (${MIN_ENGINE_MAJOR} or later), on Docker Engine or Docker Desktop. Check that the socket is the host's Docker and that it is running.`
140
+ );
141
+ }
142
+ const url = set(env, "OUTERLAYER_URL");
143
+ const appId = set(env, "OUTERLAYER_APP_ID");
144
+ const apiKey = set(env, "OUTERLAYER_API_KEY");
145
+ const host = named.name;
146
+ if (existsSync(configPath)) {
147
+ const stored = readConfig(configPath);
148
+ if (stored instanceof RunnerInitError) return refuse(stored.message);
149
+ const different = disagreements(stored, env);
150
+ if (different.length > 0) {
151
+ return refuse(
152
+ `the config in the volume and the container's variables disagree, so the runner does not start:
153
+ ${different.join("\n ")}
154
+ Change the variables to match the volume, or use a new volume to make a new runner.`
155
+ );
156
+ }
157
+ if (stored.runner === void 0) {
158
+ try {
159
+ const prepared = prepareRunnerInit(configPath, { machine, requireContainer: true, agent, credentialInEnvironment: true, host });
160
+ writeRunnerInit(prepared);
161
+ } catch (err) {
162
+ if (err instanceof RunnerInitError) return refuse(err.message);
163
+ throw err;
164
+ }
165
+ }
166
+ } else {
167
+ try {
168
+ const prepared = prepareRunnerInit(configPath, { machine, requireContainer: true, agent, credentialInEnvironment: true, host, keyFromLogin: true });
169
+ writeRunnerInit(prepared, { url, apiKey, appId });
170
+ } catch (err) {
171
+ if (err instanceof RunnerInitError) return refuse(err.message);
172
+ throw err;
173
+ }
174
+ }
175
+ await deps.start(configPath, { fetchImpl: deps.fetchImpl ?? fetch, image: { version, ...deps.exit === void 0 ? {} : { exit: deps.exit } } });
176
+ return { ok: true };
177
+ }
178
+
179
+ export { containerStart };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { parseOwnerRepo, lookupGoverningSource, defaultGitRunner, materializeContext } from './chunk-XGPC3IOR.js';
3
+ import { parseOwnerRepo, lookupGoverningSource, defaultGitRunner, materializeContext } from './chunk-FXUVXSY2.js';
4
4
  import './chunk-MQ743JX3.js';
5
- import { resolveGatewayCredentials, defaultFetch } from './chunk-QS43O4DR.js';
5
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-M4B6QKNZ.js';
6
6
  import './chunk-ZJSNLVCE.js';
7
7
  import { layoutRefusalMessage, unsupportedLayout, sharedSkillNames, skillConflictMessage, composeDelivery } from './chunk-VPEGE3QZ.js';
8
8
  import './chunk-HCVLP7XA.js';
@@ -17,10 +17,10 @@ import './chunk-RKOTJQVG.js';
17
17
  import './chunk-QZBXLLTV.js';
18
18
  import './chunk-VNVZDWO3.js';
19
19
  import './chunk-RA3O54FC.js';
20
- import './chunk-OW52QLK3.js';
21
- import './chunk-IHNQWF6F.js';
22
- import './chunk-URWYRAIC.js';
23
- import './chunk-GISNHSYL.js';
20
+ import './chunk-ZODVSFI4.js';
21
+ import './chunk-ZI2ZVWKT.js';
22
+ import './chunk-2K3TCQHW.js';
23
+ import './chunk-JGD5TWQ2.js';
24
24
  import './chunk-Z5GEFMRW.js';
25
25
  import { execFileSync } from 'child_process';
26
26
  import { existsSync, readFileSync, mkdirSync, mkdtempSync, cpSync, renameSync, writeFileSync, rmSync, readdirSync } from 'fs';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { CaptureDaemon, PRICE_TABLE_SOURCE, SECRET_PATTERNS, SOURCE_ADAPTERS, SUPPORTED_VERSIONS, StatuslineAggregator, WARNING_CODES, claudeCodeAdapter, codexAdapter, codexSessionIdFromPath, compareVersions, completePrefix, computeStatuslineState, costOfUsage, cursorAdapter, cursorChatIdFromPath, defaultCodexSessionsDir, defaultCursorChatsDir, defaultCursorProjectsDir, defaultProjectsDir, defaultRawDir, enrichSessionRepo, findCodexRollouts, findCursorChats, findTranscripts, isNewerThanSupported, isPriceKnown, normalizeErrorSignature, normalizeRemote, parseCodexRollout, parseCursorChat, parseTranscript, readStatuslineState, readSyncWatermarkMs, remoteLookupFailed, resolvePrice, resolveRepoIdentity, rootChildIds, scanAll, scrubDeep, scrubText, sessionIdFromPath, setCustomScrubbers, setLocalIdentity, setRepoRoot, statuslineStatePath, tailTranscript, workspacesByHash, writeStatuslineState } from './chunk-CBCKD6DO.js';
3
+ export { CaptureDaemon, PRICE_TABLE_SOURCE, SECRET_PATTERNS, SOURCE_ADAPTERS, SUPPORTED_VERSIONS, StatuslineAggregator, WARNING_CODES, claudeCodeAdapter, codexAdapter, codexSessionIdFromPath, compareVersions, completePrefix, computeStatuslineState, costOfUsage, cursorAdapter, cursorChatIdFromPath, defaultCodexSessionsDir, defaultCursorChatsDir, defaultCursorProjectsDir, defaultProjectsDir, defaultRawDir, enrichSessionRepo, findCodexRollouts, findCursorChats, findTranscripts, isNewerThanSupported, isPriceKnown, normalizeErrorSignature, normalizeRemote, parseCodexRollout, parseCursorChat, parseTranscript, readStatuslineState, readSyncWatermarkMs, remoteLookupFailed, resolvePrice, resolveRepoIdentity, rootChildIds, scanAll, scrubDeep, scrubText, sessionIdFromPath, setCustomScrubbers, setLocalIdentity, setRepoRoot, statuslineStatePath, tailTranscript, workspacesByHash, writeStatuslineState } from './chunk-D4AMAEZ7.js';
4
4
  import './chunk-QZBXLLTV.js';
5
5
  import './chunk-Z5GEFMRW.js';
6
6
 
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { childEnvironment, createDockerHost, spawnRun } from './chunk-OGMZJWWD.js';
4
- import './chunk-3W333NFO.js';
3
+ export { childEnvironment, createDockerHost, spawnRun } from './chunk-QUGYGO6L.js';
4
+ import './chunk-RGW7ERF3.js';
5
5
  import './chunk-7RQ73DLO.js';
6
- import './chunk-CBCKD6DO.js';
6
+ import './chunk-D4AMAEZ7.js';
7
7
  import './chunk-QZBXLLTV.js';
8
- import './chunk-OW52QLK3.js';
9
- import './chunk-IHNQWF6F.js';
10
- import './chunk-URWYRAIC.js';
11
- import './chunk-GISNHSYL.js';
8
+ import './chunk-ZODVSFI4.js';
9
+ import './chunk-ZI2ZVWKT.js';
10
+ import './chunk-2K3TCQHW.js';
11
+ import './chunk-JGD5TWQ2.js';
12
12
  import './chunk-Z5GEFMRW.js';
13
13
 
14
14
  createRequire(import.meta.url);
@@ -1,44 +1,47 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-G3LHWUBK.js';
3
+ import { launcherCheck } from './chunk-ATGHVEU4.js';
4
+ import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-VPUNOGXO.js';
5
+ import './chunk-QMQC6JCO.js';
4
6
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
5
- import { launcherCheck } from './chunk-EFB3FGLC.js';
6
- import './chunk-276D7BJ7.js';
7
7
  import { RepoFilter } from './chunk-TBT347UY.js';
8
- import './chunk-2TT7DEMZ.js';
9
- import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-C2XZBNHY.js';
10
- import { MIN_ENGINE_MAJOR } from './chunk-BOG4ENP7.js';
11
- import './chunk-4AVDD7VX.js';
12
- import './chunk-OBCFK4QD.js';
8
+ import './chunk-JKILLWZF.js';
9
+ import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-VNGENFOG.js';
10
+ import { MIN_ENGINE_MAJOR, probeHelper, helperSocketPath } from './chunk-XHXDCYSK.js';
11
+ import { runnerImageVersion, imageAdvice, readUpdateStatus, imageTag, pullInstruction } from './chunk-5222PA6S.js';
12
+ import './chunk-TQMI335S.js';
13
+ import './chunk-ZGMQQWCV.js';
14
+ import './chunk-IGRRD7PX.js';
13
15
  import './chunk-6MZSX4M7.js';
14
- import './chunk-QILR6TZP.js';
15
- import './chunk-XACXXKQ5.js';
16
+ import './chunk-AXPCGD46.js';
17
+ import './chunk-DEBOL6ON.js';
16
18
  import './chunk-JBJTC3UU.js';
17
19
  import './chunk-OGFGZQA3.js';
18
- import { resolveDevcontainerCli, buildxState, spawnRun } from './chunk-OGMZJWWD.js';
19
- import { locateRecipe, assertBuildable, readRecipe, RecipeError, CLAUDE_CODE_VERSION } from './chunk-3W333NFO.js';
20
- import './chunk-NYTZ7HVN.js';
21
- import './chunk-2Q3PZ42G.js';
22
- import './chunk-KGKFEONR.js';
23
- import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-C64D7HR3.js';
24
- import './chunk-ZLZ3XVPI.js';
25
- import './chunk-GXV73IIS.js';
20
+ import { resolveDevcontainerCli, buildxState, spawnRun } from './chunk-QUGYGO6L.js';
21
+ import { locateRecipe, assertBuildable, readRecipe, RecipeError, CLAUDE_CODE_VERSION } from './chunk-RGW7ERF3.js';
22
+ import './chunk-7OWPLRJR.js';
23
+ import './chunk-XGJUNNXL.js';
24
+ import './chunk-YMKQVCKC.js';
25
+ import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-X5LNCIZT.js';
26
+ import './chunk-HWEIFHSW.js';
27
+ import './chunk-6CNHXHI2.js';
26
28
  import './chunk-BUP5N3X6.js';
27
29
  import './chunk-XSPA5ODY.js';
28
30
  import './chunk-GOSFARMS.js';
29
- import { builtinKind } from './chunk-V5CG75NX.js';
31
+ import { builtinKind } from './chunk-JWRX5ZTT.js';
30
32
  import { allowHostProblem, MAX_ALLOW_HOSTS } from './chunk-UXYLWVTQ.js';
31
33
  import { parseSize } from './chunk-7RQ73DLO.js';
32
- import { defaultGitRunner } from './chunk-XGPC3IOR.js';
34
+ import { defaultGitRunner } from './chunk-FXUVXSY2.js';
33
35
  import './chunk-MQ743JX3.js';
34
- import { defaultFetch } from './chunk-QS43O4DR.js';
36
+ import { defaultFetch } from './chunk-M4B6QKNZ.js';
35
37
  import './chunk-ZJSNLVCE.js';
36
38
  import './chunk-VPEGE3QZ.js';
37
39
  import './chunk-HCVLP7XA.js';
38
40
  import './chunk-BJ3KTMDH.js';
39
- import { compareVersions } from './chunk-CBCKD6DO.js';
41
+ import { compareVersions } from './chunk-D4AMAEZ7.js';
40
42
  import './chunk-ANPNT6PM.js';
41
43
  import './chunk-EABW6AJQ.js';
44
+ import './chunk-JKNYTNYD.js';
42
45
  import './chunk-HBISTTG3.js';
43
46
  import './chunk-WZBHBH3J.js';
44
47
  import './chunk-CRB3POP4.js';
@@ -47,10 +50,10 @@ import './chunk-RKOTJQVG.js';
47
50
  import './chunk-QZBXLLTV.js';
48
51
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
49
52
  import './chunk-RA3O54FC.js';
50
- import { loadHostKey } from './chunk-OW52QLK3.js';
51
- import { runnerDir, hostKeyPath, jobsDir } from './chunk-IHNQWF6F.js';
52
- import './chunk-URWYRAIC.js';
53
- import './chunk-GISNHSYL.js';
53
+ import { loadHostKey } from './chunk-ZODVSFI4.js';
54
+ import { runnerDir, hostKeyPath, jobsDir } from './chunk-ZI2ZVWKT.js';
55
+ import './chunk-2K3TCQHW.js';
56
+ import './chunk-JGD5TWQ2.js';
54
57
  import './chunk-Z5GEFMRW.js';
55
58
  import { spawnSync } from 'child_process';
56
59
  import { existsSync, readdirSync, statSync, readFileSync } from 'fs';
@@ -123,6 +126,27 @@ function delegationCheck(service) {
123
126
  fix: "run `outerlayer runner install --service --replace` to write the unit this CLI generates, which sets Delegate=yes"
124
127
  };
125
128
  }
129
+ var REINSTALL = "run `outerlayer runner install --service --replace` to install the root helper that starts each microVM build under Firecracker's jailer";
130
+ function helperCheck(facts) {
131
+ const name = "MicroVM jailer";
132
+ if (facts.present) {
133
+ return {
134
+ name,
135
+ status: "pass",
136
+ detail: `each microVM build runs under Firecracker's jailer (Firecracker ${facts.firecracker}), as a user of its own with no credentials, no shared group and no network, so a build that escaped its microVM would reach none of the runner's credentials`
137
+ };
138
+ }
139
+ const reaches = "a build that escaped its microVM would run as the runner's account and reach what that account holds: the Claude credential, the runner key, the host key, the host's `gh` login and its membership of the `docker` group";
140
+ if (facts.reason === "unpinned") {
141
+ return { name, status: "warn", detail: `this release of the CLI pins no root helper, so Firecracker runs as the runner's account: ${reaches}` };
142
+ }
143
+ return {
144
+ name,
145
+ status: "warn",
146
+ detail: `no usable root helper runs for this runner, so Firecracker runs as the runner's account: ${reaches} (${facts.detail})`,
147
+ fix: REINSTALL
148
+ };
149
+ }
126
150
 
127
151
  // src/runner/image/doctor.ts
128
152
  var LATEST_URL = "https://registry.npmjs.org/@anthropic-ai/claude-code/latest";
@@ -202,6 +226,7 @@ async function pinCheck(fetchImpl) {
202
226
  }
203
227
  return { name, status: "pass", detail: `images pin Claude Code ${CLAUDE_CODE_VERSION}; latest is ${latest}` };
204
228
  }
229
+ var RUNNER_IMAGE_GUIDE = "https://docs.outerlayer.ai/run-the-runner-in-a-container";
205
230
  function isolationCheck(machine, hooks) {
206
231
  const name = "Build isolation";
207
232
  const kind = builtinKind(hooks.provision);
@@ -210,7 +235,8 @@ function isolationCheck(machine, hooks) {
210
235
  if (kind === "container") {
211
236
  if (can) {
212
237
  const where = machine.platform === "wsl2" ? " inside WSL2" : "";
213
- return { name, status: "pass", detail: `builtin:container: builds run in containers (isolation: container) on Docker Engine ${machine.docker.version}${where}` };
238
+ const docker = machine.docker.kind === "desktop" ? "Docker Desktop with engine" : "Docker Engine";
239
+ return { name, status: "pass", detail: `builtin:container: builds run in containers (isolation: container) on ${docker} ${machine.docker.version}${where}` };
214
240
  }
215
241
  return {
216
242
  name,
@@ -244,7 +270,7 @@ function isolationCheck(machine, hooks) {
244
270
  name,
245
271
  status: "warn",
246
272
  detail: "builtin:process: builds are not isolated: they run as processes under this user (isolation: shared-user), and macOS cannot run container builds itself",
247
- fix: "run outerlayer runner init --vm to run the runner in a Linux VM, where builds run in containers (isolation: container)"
273
+ fix: `run the runner image on Docker Desktop (${RUNNER_IMAGE_GUIDE}), or run outerlayer runner init --vm to run the runner in a Linux VM; either way builds run in containers (isolation: container)`
248
274
  };
249
275
  }
250
276
  if (can) {
@@ -256,7 +282,7 @@ function isolationCheck(machine, hooks) {
256
282
  };
257
283
  }
258
284
  const reach = reachDockerStep(machine);
259
- const fix = reach !== void 0 ? `isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later: ${reach}, then set both hooks to builtin:container` : machine.platform === "windows" ? `install Docker Engine inside WSL2 (version ${MIN_ENGINE_MAJOR} or later), run the runner from a WSL2 shell, and set both hooks to builtin:container; Docker Desktop cannot isolate builds` : machine.docker.kind === "desktop" ? `isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later, not Docker Desktop: install it and set both hooks to builtin:container` : `isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later on Linux or WSL2: install it and set both hooks to builtin:container`;
285
+ const fix = reach !== void 0 ? `isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later: ${reach}, then set both hooks to builtin:container` : machine.platform === "windows" ? `install Docker Engine inside WSL2 (version ${MIN_ENGINE_MAJOR} or later), run the runner from a WSL2 shell, and set both hooks to builtin:container; or run the runner image on Docker Desktop (${RUNNER_IMAGE_GUIDE})` : machine.docker.kind === "desktop" ? `isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later: install it and set both hooks to builtin:container, or run the runner image on Docker Desktop (${RUNNER_IMAGE_GUIDE})` : `isolated builds need Docker Engine ${MIN_ENGINE_MAJOR} or later on Linux or WSL2: install it and set both hooks to builtin:container`;
260
286
  return {
261
287
  name,
262
288
  status: "warn",
@@ -499,9 +525,36 @@ function allowHostsCheck(configPath, allowHosts) {
499
525
  fix: reached.length === 0 ? "list the public hosts your builds need in runner.build.allowHosts; once a few builds have run, doctor lists the hosts they reached" : `review the hosts past builds reached and set runner.build.allowHosts to the ones they need: ${JSON.stringify(reached)}`
500
526
  };
501
527
  }
528
+ function runnerNameCheck(configPath) {
529
+ let runner;
530
+ try {
531
+ runner = JSON.parse(readFileSync(configPath, "utf8")).runner;
532
+ } catch {
533
+ return void 0;
534
+ }
535
+ if (runner?.host === void 0 || runner.name !== void 0) return void 0;
536
+ return {
537
+ name: "Runner name",
538
+ status: "warn",
539
+ detail: "the config names this runner with runner.host, the earlier name of runner.name; it still works",
540
+ fix: "rename runner.host to runner.name in the config file"
541
+ };
542
+ }
502
543
  function launcherCheckOf(env) {
503
544
  return launcherCheck({ home: env.home ?? homeFromEnv(), PATH: env.PATH ?? process.env.PATH });
504
545
  }
546
+ function runnerImageCheck(env) {
547
+ const version = runnerImageVersion(env.env ?? process.env);
548
+ if (version === void 0) return void 0;
549
+ const name = "Runner image";
550
+ const advice = imageAdvice(version, readUpdateStatus(runnerDir(env.configPath)));
551
+ if (advice === void 0) return { name, status: "pass", detail: `runs ${imageTag(version)}` };
552
+ return advice.reason === "refused" ? { name, status: "fail", detail: `the factory refuses this runner as too old, so it claims nothing (image ${version})`, fix: pullInstruction(advice.tag) } : { name, status: "warn", detail: `the factory names a newer version than the ${version} this image runs`, fix: pullInstruction(advice.tag) };
553
+ }
554
+ async function helperFactsOf(env) {
555
+ const probe = await (env.helper ?? (() => probeHelper(env.service === void 0 ? void 0 : helperSocketPath(env.service.unit))))();
556
+ return probe.ok ? { present: true, firecracker: probe.firecracker } : { present: false, reason: probe.reason, detail: probe.detail };
557
+ }
505
558
  async function runnerHostChecks(env) {
506
559
  const dockerAvailable = env.dockerAvailable ?? (() => spawnSync("docker", ["info"], { stdio: "ignore" }).status === 0);
507
560
  const devcontainerRunnable = env.devcontainerRunnable ?? (() => devcontainerCliRunnable());
@@ -510,17 +563,23 @@ async function runnerHostChecks(env) {
510
563
  const recipes = existsSync(reposDir) ? directories(reposDir).flatMap(
511
564
  (owner) => directories(join(reposDir, owner)).filter((name) => existsSync(join(reposDir, owner, name, ".git"))).map((name) => recipeCheck(reposDir, owner, name))
512
565
  ) : [];
566
+ const imageCheck = runnerImageCheck(env);
567
+ const nameCheck = runnerNameCheck(env.configPath);
568
+ const machine = () => env.machine ?? detectMachine({ env: env.env });
513
569
  return [
570
+ ...imageCheck === void 0 ? [] : [imageCheck],
571
+ ...nameCheck === void 0 ? [] : [nameCheck],
514
572
  dockerAvailable() ? { name: "Docker Engine", status: "pass", detail: "reachable" } : {
515
573
  name: "Docker Engine",
516
574
  status: "warn",
517
575
  detail: "docker info failed, so `outerlayer runner image` cannot build",
518
576
  fix: "start Docker, or give this user access to its socket"
519
577
  },
520
- ...env.hooks === void 0 ? [] : [isolationCheck(env.machine ?? detectMachine(), env.hooks)],
578
+ ...env.hooks === void 0 ? [] : [isolationCheck(machine(), env.hooks)],
521
579
  ...env.hooks !== void 0 && builtinKind(env.hooks.provision) === "vm" ? [
522
- kvmCheck(env.machine ?? detectMachine(), env.service),
580
+ kvmCheck(machine(), env.service),
523
581
  ...env.service === void 0 ? [] : [delegationCheck(env.service)],
582
+ helperCheck(await helperFactsOf(env)),
524
583
  ...env.runner === void 0 ? [] : [memoryCheck({ concurrency: env.runner.concurrency, buildMemory: env.runner.buildMemory, hostMemory: env.hostMemory ?? totalmem() })]
525
584
  ] : [],
526
585
  ...env.hooks !== void 0 && ["container", "vm"].includes(builtinKind(env.hooks.provision)) ? [imageBuildLimitCheck(await (env.buildx ?? (() => buildxState(spawnRun)))(), env.runner?.buildMemory)] : [],
@@ -1,36 +1,39 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-DJYOCD65.js';
4
- import './chunk-D64E222W.js';
3
+ import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-YTTHDPWF.js';
4
+ import './chunk-IDJIWKTY.js';
5
5
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
6
6
  import './chunk-TBT347UY.js';
7
- import { detectActiveSession, autoConnect } from './chunk-ZLZ3XVPI.js';
8
- import './chunk-GXV73IIS.js';
7
+ import { detectActiveSession, autoConnect } from './chunk-HWEIFHSW.js';
8
+ import './chunk-6CNHXHI2.js';
9
9
  import { readEffectiveArtifactSpoolState, localArtifactIds, isArtifactTombstoned, artifactBlobsDir, appendArtifactRecord, artifactsSpoolPath, findPendingArtifactRecord, sanitizeTerminal, appendArtifactTombstone } from './chunk-BUP5N3X6.js';
10
10
  import './chunk-XSPA5ODY.js';
11
11
  import './chunk-GOSFARMS.js';
12
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-QS43O4DR.js';
13
- import './chunk-XOEV4FVK.js';
12
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-M4B6QKNZ.js';
13
+ import './chunk-K5WVK7IC.js';
14
14
  import './chunk-ZJSNLVCE.js';
15
15
  import './chunk-DYEFPYME.js';
16
16
  import './chunk-BKO6JEZI.js';
17
17
  import './chunk-HCVLP7XA.js';
18
18
  import './chunk-BJ3KTMDH.js';
19
- import { resolveRepoIdentity } from './chunk-CBCKD6DO.js';
19
+ import { resolveRepoIdentity } from './chunk-D4AMAEZ7.js';
20
20
  import { C } from './chunk-ANPNT6PM.js';
21
21
  import './chunk-EABW6AJQ.js';
22
+ import './chunk-JKNYTNYD.js';
23
+ import './chunk-HBISTTG3.js';
22
24
  import './chunk-T2Q7ISPE.js';
23
25
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
24
26
  import { cliInvocation } from './chunk-CRB3POP4.js';
25
27
  import './chunk-GNPTU4BM.js';
26
28
  import './chunk-TUSYOL2O.js';
29
+ import './chunk-RKOTJQVG.js';
27
30
  import { ARTIFACT_MAX_CAPTION_LENGTH, ArtifactCriterionIdSchema, ARTIFACT_MAX_FILENAME_LENGTH, mediaTypeForArtifactPath, inferArtifactKind, ARTIFACT_MAX_REPLACES_TARGETS, parseTestSelector, parseJunit, bindTests } from './chunk-QZBXLLTV.js';
28
31
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
29
32
  import './chunk-RA3O54FC.js';
30
- import './chunk-OW52QLK3.js';
31
- import './chunk-IHNQWF6F.js';
32
- import './chunk-URWYRAIC.js';
33
- import './chunk-GISNHSYL.js';
33
+ import './chunk-ZODVSFI4.js';
34
+ import './chunk-ZI2ZVWKT.js';
35
+ import './chunk-2K3TCQHW.js';
36
+ import './chunk-JGD5TWQ2.js';
34
37
  import './chunk-Z5GEFMRW.js';
35
38
  import { createHash, randomUUID } from 'crypto';
36
39
  import { statSync, readFileSync, mkdirSync, existsSync, writeFileSync, renameSync, unlinkSync } from 'fs';
@@ -1,26 +1,29 @@
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 } from './chunk-ZLZ3XVPI.js';
5
- import './chunk-GXV73IIS.js';
4
+ import { detectActiveSession, autoConnect } from './chunk-HWEIFHSW.js';
5
+ import './chunk-6CNHXHI2.js';
6
6
  import './chunk-BUP5N3X6.js';
7
7
  import './chunk-XSPA5ODY.js';
8
8
  import './chunk-GOSFARMS.js';
9
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-QS43O4DR.js';
9
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-M4B6QKNZ.js';
10
10
  import './chunk-BJ3KTMDH.js';
11
- import { resolveRepoIdentity } from './chunk-CBCKD6DO.js';
11
+ import { resolveRepoIdentity } from './chunk-D4AMAEZ7.js';
12
12
  import { C } from './chunk-ANPNT6PM.js';
13
13
  import './chunk-EABW6AJQ.js';
14
+ import './chunk-JKNYTNYD.js';
15
+ import './chunk-HBISTTG3.js';
14
16
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
15
17
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
16
18
  import './chunk-CRB3POP4.js';
19
+ import './chunk-RKOTJQVG.js';
17
20
  import { CriteriaListSchema } from './chunk-QZBXLLTV.js';
18
21
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
19
22
  import './chunk-RA3O54FC.js';
20
- import './chunk-OW52QLK3.js';
21
- import './chunk-IHNQWF6F.js';
22
- import './chunk-URWYRAIC.js';
23
- import './chunk-GISNHSYL.js';
23
+ import './chunk-ZODVSFI4.js';
24
+ import './chunk-ZI2ZVWKT.js';
25
+ import './chunk-2K3TCQHW.js';
26
+ import './chunk-JGD5TWQ2.js';
24
27
  import './chunk-Z5GEFMRW.js';
25
28
  import { readFileSync } from 'fs';
26
29
 
@@ -1,27 +1,30 @@
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-ZLZ3XVPI.js';
5
- import './chunk-GXV73IIS.js';
4
+ import { detectActiveSession, autoConnect, transcriptPathForSession } from './chunk-HWEIFHSW.js';
5
+ import './chunk-6CNHXHI2.js';
6
6
  import './chunk-BUP5N3X6.js';
7
7
  import './chunk-XSPA5ODY.js';
8
8
  import './chunk-GOSFARMS.js';
9
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-QS43O4DR.js';
9
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-M4B6QKNZ.js';
10
10
  import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
11
11
  import './chunk-BJ3KTMDH.js';
12
- import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-CBCKD6DO.js';
12
+ import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-D4AMAEZ7.js';
13
13
  import { C } from './chunk-ANPNT6PM.js';
14
14
  import './chunk-EABW6AJQ.js';
15
+ import './chunk-JKNYTNYD.js';
16
+ import './chunk-HBISTTG3.js';
15
17
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
16
18
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
17
19
  import { cliInvocation } from './chunk-CRB3POP4.js';
20
+ import './chunk-RKOTJQVG.js';
18
21
  import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-QZBXLLTV.js';
19
22
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
20
23
  import './chunk-RA3O54FC.js';
21
- import './chunk-OW52QLK3.js';
22
- import './chunk-IHNQWF6F.js';
23
- import './chunk-URWYRAIC.js';
24
- import './chunk-GISNHSYL.js';
24
+ import './chunk-ZODVSFI4.js';
25
+ import './chunk-ZI2ZVWKT.js';
26
+ import './chunk-2K3TCQHW.js';
27
+ import './chunk-JGD5TWQ2.js';
25
28
  import './chunk-Z5GEFMRW.js';
26
29
  import { readFileSync, existsSync } from 'fs';
27
30
  import { join, dirname, basename } from 'path';
@@ -1,36 +1,39 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectCi } from './chunk-DJYOCD65.js';
4
- import './chunk-D64E222W.js';
3
+ import { detectCi } from './chunk-YTTHDPWF.js';
4
+ import './chunk-IDJIWKTY.js';
5
5
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
6
6
  import './chunk-TBT347UY.js';
7
- import { detectActiveSession, autoConnect } from './chunk-ZLZ3XVPI.js';
8
- import './chunk-GXV73IIS.js';
7
+ import { detectActiveSession, autoConnect } from './chunk-HWEIFHSW.js';
8
+ import './chunk-6CNHXHI2.js';
9
9
  import './chunk-BUP5N3X6.js';
10
10
  import './chunk-XSPA5ODY.js';
11
11
  import './chunk-GOSFARMS.js';
12
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-QS43O4DR.js';
13
- import './chunk-XOEV4FVK.js';
12
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-M4B6QKNZ.js';
13
+ import './chunk-K5WVK7IC.js';
14
14
  import './chunk-ZJSNLVCE.js';
15
15
  import './chunk-DYEFPYME.js';
16
16
  import './chunk-BKO6JEZI.js';
17
17
  import './chunk-HCVLP7XA.js';
18
18
  import './chunk-BJ3KTMDH.js';
19
- import { resolveRepoIdentity } from './chunk-CBCKD6DO.js';
19
+ import { resolveRepoIdentity } from './chunk-D4AMAEZ7.js';
20
20
  import { C } from './chunk-ANPNT6PM.js';
21
21
  import './chunk-EABW6AJQ.js';
22
+ import './chunk-JKNYTNYD.js';
23
+ import './chunk-HBISTTG3.js';
22
24
  import './chunk-T2Q7ISPE.js';
23
25
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
24
26
  import './chunk-CRB3POP4.js';
25
27
  import './chunk-GNPTU4BM.js';
26
28
  import './chunk-TUSYOL2O.js';
29
+ import './chunk-RKOTJQVG.js';
27
30
  import { EmittedNameSchema, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, EMITTED_RESULT_MAX_BODY_LENGTH } from './chunk-QZBXLLTV.js';
28
31
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
29
32
  import './chunk-RA3O54FC.js';
30
- import './chunk-OW52QLK3.js';
31
- import './chunk-IHNQWF6F.js';
32
- import './chunk-URWYRAIC.js';
33
- import './chunk-GISNHSYL.js';
33
+ import './chunk-ZODVSFI4.js';
34
+ import './chunk-ZI2ZVWKT.js';
35
+ import './chunk-2K3TCQHW.js';
36
+ import './chunk-JGD5TWQ2.js';
34
37
  import './chunk-Z5GEFMRW.js';
35
38
  import { randomUUID } from 'crypto';
36
39
  import { readFileSync } from 'fs';