@outerlayer/cli 0.33.0-next.20261022180022 → 0.33.0-next.20261022182214

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 (38) hide show
  1. package/README.md +4 -1
  2. package/dist/{build-2ONBPS3M.js → build-RBLDHQTY.js} +2 -2
  3. package/dist/{build-disk-PCDS676T.js → build-disk-4EEKP23Z.js} +3 -3
  4. package/dist/build-info.json +1 -1
  5. package/dist/{builder-AIKWGJHP.js → builder-V3KALVKL.js} +2 -2
  6. package/dist/{check-LGZOJYLS.js → check-LDDMISY6.js} +11 -11
  7. package/dist/{chunk-M7IA4JOX.js → chunk-33SMNWZX.js} +2 -2
  8. package/dist/{chunk-JFRBPBD5.js → chunk-3BGCXC3O.js} +1 -1
  9. package/dist/{chunk-GDI6QGRH.js → chunk-4AHKR3K5.js} +2 -2
  10. package/dist/{chunk-LG2IQRTO.js → chunk-5CZV4FZ5.js} +1 -1
  11. package/dist/{chunk-HAD7LYDL.js → chunk-COLOLDY3.js} +33 -6
  12. package/dist/{chunk-6KVKEZTH.js → chunk-F5HZT672.js} +2 -2
  13. package/dist/{chunk-VGIS2D3U.js → chunk-IQFX5GQH.js} +5 -5
  14. package/dist/{chunk-OKTLQTWH.js → chunk-JDKLORO3.js} +3 -3
  15. package/dist/{chunk-R6QCSHKC.js → chunk-KFA762LZ.js} +2 -2
  16. package/dist/{chunk-J5VNSW4W.js → chunk-MCIPCQP3.js} +5 -5
  17. package/dist/{chunk-7HMF7I3D.js → chunk-MWAA3A5T.js} +1 -1
  18. package/dist/{chunk-7SCEDWQP.js → chunk-PAFSFC6Q.js} +3 -3
  19. package/dist/{cli-2LCCZQA6.js → cli-QUV5HTDW.js} +24 -24
  20. package/dist/{command-2EJ76XJH.js → command-LEE7TFQE.js} +5 -5
  21. package/dist/{container-start-RWOEQUCC.js → container-start-SL63GFLG.js} +6 -6
  22. package/dist/{docker-NDEA46KV.js → docker-WVTQTRSC.js} +2 -2
  23. package/dist/{doctor-C3JKNKEJ.js → doctor-KT4HGALK.js} +8 -8
  24. package/dist/{emit-demo-cmd-AKRXCWLK.js → emit-demo-cmd-Q6W74DCY.js} +1 -1
  25. package/dist/{guest-init-KDK4DQFK.js → guest-init-TGECSRKO.js} +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/{init-2LWFZK45.js → init-7P6JHB6Z.js} +6 -6
  28. package/dist/{init-ZCZVN3AI.js → init-BMTDKZU6.js} +6 -6
  29. package/dist/{init-cmd-3YBDLWPR.js → init-cmd-E7DMPT6E.js} +1 -1
  30. package/dist/{loop-3YF4S4CA.js → loop-7MFQISEV.js} +11 -11
  31. package/dist/{machine-X3EYEXEM.js → machine-4QGWUII5.js} +5 -5
  32. package/dist/{runner-identity-77KVP24W.js → runner-identity-X3UP5IQ4.js} +2 -2
  33. package/dist/{runner-key-CBL5552Z.js → runner-key-3STHCRT5.js} +6 -6
  34. package/dist/{status-TGQTGC7B.js → status-WS2REEFU.js} +6 -6
  35. package/package.json +1 -1
  36. package/skill-pack/maintained/outerlayer-build/references/agent-briefs.md +9 -3
  37. package/skill-pack/maintained/outerlayer-build/references/evidence.md +4 -3
  38. package/skill-pack/maintained/outerlayer-evidence/SKILL.md +8 -7
package/README.md CHANGED
@@ -223,7 +223,10 @@ content:
223
223
  build uses the host's network: the build's tunnel does not carry it, and
224
224
  `runner.build.allowHosts` does not limit it.
225
225
  - **`outerlayer runner start` with `builtin:vm` hooks** runs each build in its
226
- own Firecracker microVM, which has no network device. The first microVM
226
+ own Firecracker microVM, which has no network card. Every TCP connection
227
+ of every program in it goes through the runner's tunnel, whether or not the
228
+ program reads the proxy variables, and `runner.build.allowHosts` narrows what
229
+ it reaches. No DNS query or UDP packet leaves the microVM. The first microVM
227
230
  build downloads a pinned Firecracker release from github.com. It also
228
231
  downloads a guest kernel and a guest helper from the releases of the public
229
232
  repository `outerlayerai/guest-assets` on github.com. The runner checks each
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { KEY_PREFIX, TAG_HOST, buildRepositoryImage, metadataFromLabels, prepareImageBuild, writeRecord } from './chunk-7HMF7I3D.js';
3
+ export { KEY_PREFIX, TAG_HOST, buildRepositoryImage, metadataFromLabels, prepareImageBuild, writeRecord } from './chunk-MWAA3A5T.js';
4
4
  import './chunk-ZFJAQS3A.js';
5
5
  import './chunk-JBJTC3UU.js';
6
6
  export { RecipeError } from './chunk-3Z3MPR55.js';
7
- import './chunk-R6QCSHKC.js';
7
+ import './chunk-KFA762LZ.js';
8
8
  import './chunk-MBGS33SL.js';
9
9
  import './chunk-D5ZGMXUL.js';
10
10
  import './chunk-HACGUL52.js';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { DEFAULT_BUILD_DISK, DOCKER_CACHE_MS, checkDiskFit, realBuildDiskProbe, runDocker, volumeBytes } from './chunk-JFRBPBD5.js';
3
+ export { DEFAULT_BUILD_DISK, DOCKER_CACHE_MS, checkDiskFit, realBuildDiskProbe, runDocker, volumeBytes } from './chunk-3BGCXC3O.js';
4
4
  import './chunk-YYYRBYWG.js';
5
- import './chunk-LG2IQRTO.js';
5
+ import './chunk-5CZV4FZ5.js';
6
6
  import './chunk-3Z3MPR55.js';
7
- import './chunk-R6QCSHKC.js';
7
+ import './chunk-KFA762LZ.js';
8
8
  import './chunk-YJLHUKYS.js';
9
9
  import './chunk-5DNCFOXA.js';
10
10
  import './chunk-634F6J3Q.js';
@@ -1 +1 @@
1
- {"id":"2026-10-22T18:03:01.584Z+80747d3","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-22T18:25:50.694Z+4fc4b3d","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-LG2IQRTO.js';
3
+ export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-5CZV4FZ5.js';
4
4
  import './chunk-3Z3MPR55.js';
5
- import './chunk-R6QCSHKC.js';
5
+ import './chunk-KFA762LZ.js';
6
6
  import './chunk-YJLHUKYS.js';
7
7
  import './chunk-5DNCFOXA.js';
8
8
  import './chunk-634F6J3Q.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-J5VNSW4W.js';
4
- import './chunk-VGIS2D3U.js';
3
+ import { probeCredentials } from './chunk-MCIPCQP3.js';
4
+ import './chunk-IQFX5GQH.js';
5
5
  import './chunk-ZVB57WI6.js';
6
6
  import './chunk-QPAPHQZ7.js';
7
7
  import './chunk-3JVYMD4G.js';
@@ -9,22 +9,22 @@ import './chunk-E7R2GIAW.js';
9
9
  import './chunk-W4UFGYKQ.js';
10
10
  import './chunk-YKYCE4HY.js';
11
11
  import './chunk-5KO3TN2F.js';
12
- import './chunk-HAD7LYDL.js';
12
+ import './chunk-COLOLDY3.js';
13
13
  import './chunk-TTACRX4N.js';
14
14
  import './chunk-I3LTIAOR.js';
15
15
  import './chunk-JUVUVXQZ.js';
16
16
  import './chunk-J6LFFZOY.js';
17
17
  import './chunk-EBX2DU2M.js';
18
18
  import './chunk-ESVW4MJY.js';
19
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, managedProblems, managedFactsOf, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-7SCEDWQP.js';
19
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, managedProblems, managedFactsOf, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-PAFSFC6Q.js';
20
20
  import './chunk-O7MSQBTH.js';
21
21
  import './chunk-TBT347UY.js';
22
- import './chunk-M7IA4JOX.js';
22
+ import './chunk-33SMNWZX.js';
23
23
  import './chunk-HDD3BKAE.js';
24
- import './chunk-6KVKEZTH.js';
25
- import { probeHelper, HELPER_ENV, helperSocketPath } from './chunk-OKTLQTWH.js';
24
+ import './chunk-F5HZT672.js';
25
+ import { probeHelper, HELPER_ENV, helperSocketPath } from './chunk-JDKLORO3.js';
26
26
  import './chunk-2PGI6RDE.js';
27
- import './chunk-7HMF7I3D.js';
27
+ import './chunk-MWAA3A5T.js';
28
28
  import './chunk-ZFJAQS3A.js';
29
29
  import './chunk-JBJTC3UU.js';
30
30
  import './chunk-OGFGZQA3.js';
@@ -34,11 +34,11 @@ import './chunk-JKPJQNJF.js';
34
34
  import './chunk-PWB7EK4Z.js';
35
35
  import './chunk-TQMI335S.js';
36
36
  import { DEFAULT_UNIT_NAME } from './chunk-A6MLCH76.js';
37
- import './chunk-JFRBPBD5.js';
37
+ import './chunk-3BGCXC3O.js';
38
38
  import './chunk-YYYRBYWG.js';
39
- import './chunk-LG2IQRTO.js';
39
+ import './chunk-5CZV4FZ5.js';
40
40
  import './chunk-3Z3MPR55.js';
41
- import './chunk-R6QCSHKC.js';
41
+ import './chunk-KFA762LZ.js';
42
42
  import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-ZQ7VRXYM.js';
43
43
  import './chunk-UXYLWVTQ.js';
44
44
  import './chunk-YJLHUKYS.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-HDD3BKAE.js';
4
- import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-6KVKEZTH.js';
5
- import { MIN_ENGINE_MAJOR } from './chunk-OKTLQTWH.js';
4
+ import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-F5HZT672.js';
5
+ import { MIN_ENGINE_MAJOR } from './chunk-JDKLORO3.js';
6
6
  import { runnerCredentialProblem } from './chunk-ZQ7VRXYM.js';
7
7
  import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-MBGS33SL.js';
8
8
  import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { formatBytes, freeBytes } from './chunk-YYYRBYWG.js';
4
- import { BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-LG2IQRTO.js';
4
+ import { BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-5CZV4FZ5.js';
5
5
  import { parseSize } from './chunk-YJLHUKYS.js';
6
6
  import { buildsDir, rootfsDir, runnerDir } from './chunk-MBGS33SL.js';
7
7
  import { spawnSync } from 'child_process';
@@ -1190,7 +1190,7 @@ function doctorExitCode(checks) {
1190
1190
 
1191
1191
  // src/doctor-report.ts
1192
1192
  async function gatherDoctorChecks() {
1193
- const { DEFAULT_BUILD_DISK } = await import('./build-disk-PCDS676T.js');
1193
+ const { DEFAULT_BUILD_DISK } = await import('./build-disk-4EEKP23Z.js');
1194
1194
  const { defaultRunnerConfigPath, hasRunnerBlock, loadRunnerConfig, runnerVmOf } = await import('./config-WAIYUZUG.js');
1195
1195
  const configPath = defaultRunnerConfigPath();
1196
1196
  const runnerHost = hasRunnerBlock(configPath);
@@ -1212,7 +1212,7 @@ async function gatherDoctorChecks() {
1212
1212
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1213
1213
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1214
1214
  } else if (hasRunnerBlock(configPath)) {
1215
- const { runnerHostChecks } = await import('./doctor-C3JKNKEJ.js');
1215
+ const { runnerHostChecks } = await import('./doctor-KT4HGALK.js');
1216
1216
  const gateway = (() => {
1217
1217
  try {
1218
1218
  const { url, apiKey, appId } = loadRunnerConfig(configPath);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { RecipeError } from './chunk-3Z3MPR55.js';
4
- import { BUILDKIT_IMAGE } from './chunk-R6QCSHKC.js';
4
+ import { BUILDKIT_IMAGE } from './chunk-KFA762LZ.js';
5
5
  import { parseSize } from './chunk-YJLHUKYS.js';
6
6
  import { compareVersions } from './chunk-5DNCFOXA.js';
7
7
  import { ensureHostKey } from './chunk-634F6J3Q.js';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { BRIDGE_ADDRESS, TUNNEL_PORT, BRIDGE_CIDR } from './chunk-TTACRX4N.js';
3
+ import { TUNNEL_PORT, BRIDGE_ADDRESS, BRIDGE_CIDR } from './chunk-TTACRX4N.js';
4
4
  import { startTimeOf } from './chunk-JBJTC3UU.js';
5
5
  import { EXEC_PORT } from './chunk-O5F376JJ.js';
6
6
  import { RELAY_PORT } from './chunk-D5ZGMXUL.js';
7
7
  import { spawn, spawnSync } from 'child_process';
8
- import { symlinkSync, lstatSync, writeFileSync, chmodSync, mkdirSync } from 'fs';
8
+ import { symlinkSync, lstatSync, writeFileSync, chmodSync, mkdirSync, existsSync } from 'fs';
9
9
 
10
10
  createRequire(import.meta.url);
11
11
  var HELPER_PATH = "/opt/outerlayer/bin/outerlayer-guest";
@@ -19,9 +19,17 @@ var DOCKER_DATA_ROOT = "/build/docker";
19
19
  var BUILD_DISK = "/dev/vdb";
20
20
  var HOSTNAME = "outerlayer-build";
21
21
  var HOSTS = "127.0.0.1 localhost\n::1 localhost ip6-localhost ip6-loopback\n";
22
- var RESOLV_CONF = "# This microVM has no network device. Names are resolved by the runner's proxy.\n";
22
+ var NAME_SERVER = "127.0.0.53";
23
+ var RESOLV_CONF = `# The guest helper answers every lookup. The runner's tunnel resolves a name when a program connects to it.
24
+ nameserver ${NAME_SERVER}
25
+ `;
26
+ var NSSWITCH_CONF = "hosts: files dns\n";
27
+ var NSSWITCH_PATH = "/etc/nsswitch.conf";
28
+ var NET_READY = "/run/outerlayer-net.ready";
29
+ var TUN_DEVICE = "tun0";
23
30
  var BUILD_DIRECTORIES = ["/build/tmp", "/build/home", "/build/work"];
24
31
  var WORLD_WRITABLE = 1023;
32
+ var NET_READY_TIMEOUT_MS = 3e4;
25
33
  function relayPortsFrom(cmdline) {
26
34
  const value = new RegExp(`(?:^|\\s)${KERNEL_FLAG.replace(".", "\\.")}=(\\S*)`).exec(cmdline)?.[1];
27
35
  if (value === void 0 || value === "") return [];
@@ -89,6 +97,7 @@ function runGuestInit(host, cmdline) {
89
97
  `],
90
98
  ["resolv.conf", RESOLV_CONF]
91
99
  ];
100
+ if (!host.exists(NSSWITCH_PATH)) files.push(["nsswitch.conf", NSSWITCH_CONF]);
92
101
  for (const [name, text] of files) {
93
102
  host.writeFile(`/run/${name}`, text);
94
103
  host.mount({ source: `/run/${name}`, target: `/etc/${name}`, bind: true });
@@ -96,15 +105,32 @@ function runGuestInit(host, cmdline) {
96
105
  host.writeFile("/proc/sys/kernel/hostname", HOSTNAME);
97
106
  host.mount({ source: "tmpfs", target: "/outerlayer/job", type: "tmpfs", options: "mode=0755" });
98
107
  const relay = host.spawnDetached([HELPER_PATH, "relay", ...ports.flatMap((port) => ["--forward", String(port)])]);
108
+ const net = host.spawnDetached([HELPER_PATH, "net", "--tun", TUN_DEVICE, "--dns", `${NAME_SERVER}:53`, "--tunnel-port", String(TUNNEL_PORT)]);
109
+ host.waitForFile(NET_READY);
99
110
  if (dockerRequestedBy(cmdline)) {
100
111
  startBridgeForwarder(host);
101
112
  startDocker(host);
102
113
  }
103
114
  const agent = host.spawnDetached([HELPER_PATH, "exec-agent", "--port", String(EXEC_PORT)]);
104
- host.writeFile(HELPER_RECORD, [relay, agent].map((started) => `${started.pid} ${started.start}
115
+ host.writeFile(HELPER_RECORD, [relay, net, agent].map((started) => `${started.pid} ${started.start}
105
116
  `).join(""));
106
117
  }
107
- function realGuestHost() {
118
+ var PAUSE_MS = 20;
119
+ function realProbe() {
120
+ return {
121
+ now: () => Date.now(),
122
+ exists: (path) => existsSync(path),
123
+ sleep: (ms) => void Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms)
124
+ };
125
+ }
126
+ function waitForPath(path, timeoutMs, probe = realProbe()) {
127
+ const deadline = probe.now() + timeoutMs;
128
+ while (!probe.exists(path)) {
129
+ if (probe.now() > deadline) throw new Error(`${path} did not appear within ${timeoutMs / 1e3} seconds; the guest helper's network stack did not start`);
130
+ probe.sleep(PAUSE_MS);
131
+ }
132
+ }
133
+ function realGuestHost(netReadyTimeoutMs = NET_READY_TIMEOUT_MS) {
108
134
  return {
109
135
  mount(args) {
110
136
  const argv = ["mount", "--target", args.target];
@@ -127,6 +153,7 @@ function realGuestHost() {
127
153
  }
128
154
  },
129
155
  symlink: (target, path) => symlinkSync(target, path),
156
+ waitForFile: (path) => waitForPath(path, netReadyTimeoutMs),
130
157
  warn: (text) => void process.stderr.write(`${text}
131
158
  `),
132
159
  spawnDetached(argv) {
@@ -141,4 +168,4 @@ function realGuestHost() {
141
168
  };
142
169
  }
143
170
 
144
- export { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD, realGuestHost, relayPortsFrom, runGuestInit };
171
+ export { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD, realGuestHost, relayPortsFrom, runGuestInit, waitForPath };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { MIN_ENGINE_MAJOR } from './chunk-OKTLQTWH.js';
3
+ import { MIN_ENGINE_MAJOR } from './chunk-JDKLORO3.js';
4
4
  import { runnerImageVersion } from './chunk-PWB7EK4Z.js';
5
- import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-R6QCSHKC.js';
5
+ import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-KFA762LZ.js';
6
6
  import { spawnSync } from 'child_process';
7
7
  import { existsSync, accessSync, constants, statSync, readFileSync } from 'fs';
8
8
 
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readsJobState, READ_JOB_STATE_FORMATS, jobStateFormatOf } from './chunk-ZVB57WI6.js';
4
- import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-HAD7LYDL.js';
4
+ import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-COLOLDY3.js';
5
5
  import { writeDockerClientConfig } from './chunk-TTACRX4N.js';
6
6
  import { zodProblem } from './chunk-I3LTIAOR.js';
7
7
  import { senderPidfile } from './chunk-JUVUVXQZ.js';
8
8
  import { installScrubContext } from './chunk-J6LFFZOY.js';
9
- import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, helperFirecrackerNote, isLiteralAddress, stopJailed, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, ROOT_DISK_ID_PREFIX, copyJudgeTree } from './chunk-OKTLQTWH.js';
10
- import { readBranchHead, fetchCommit, diffBetween } from './chunk-7HMF7I3D.js';
9
+ import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, helperFirecrackerNote, isLiteralAddress, stopJailed, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, ROOT_DISK_ID_PREFIX, copyJudgeTree } from './chunk-JDKLORO3.js';
10
+ import { readBranchHead, fetchCommit, diffBetween } from './chunk-MWAA3A5T.js';
11
11
  import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
12
12
  import { waitForAgent, vmExecArgs } from './chunk-XXVYHC6D.js';
13
13
  import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-O5F376JJ.js';
14
14
  import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, WORKFLOW_PERMISSION_REASON, keptContextTree } from './chunk-JKPJQNJF.js';
15
- import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-LG2IQRTO.js';
16
- import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-R6QCSHKC.js';
15
+ import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-5CZV4FZ5.js';
16
+ import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-KFA762LZ.js';
17
17
  import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-ZQ7VRXYM.js';
18
18
  import { parseSize } from './chunk-YJLHUKYS.js';
19
19
  import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-KQFWTTG7.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { sha256OfFile, downloadPinned, VoiceDownloadError } from './chunk-2PGI6RDE.js';
4
- import { readDefaultBranchHead, cloneRepository, buildRepositoryImage, prepareImageBuild, KEY_PREFIX, FETCHED_DIR, toolsDockerfile, TAG_HOST, metadataFromLabels, writeRecord, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_VOICE_DIR } from './chunk-7HMF7I3D.js';
4
+ import { readDefaultBranchHead, cloneRepository, buildRepositoryImage, prepareImageBuild, KEY_PREFIX, FETCHED_DIR, toolsDockerfile, TAG_HOST, metadataFromLabels, writeRecord, FETCHED_FFMPEG, FETCHED_GH, FETCHED_TINI, FETCHED_VOICE_DIR } from './chunk-MWAA3A5T.js';
5
5
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
6
6
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
7
7
  import { runExec, execCapture, waitForAgent } from './chunk-XXVYHC6D.js';
@@ -9,9 +9,9 @@ import { GUEST_CID, linkVsockSockets } from './chunk-O5F376JJ.js';
9
9
  import { describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-JKPJQNJF.js';
10
10
  import { runnerImageVersion } from './chunk-PWB7EK4Z.js';
11
11
  import { formatBytes } from './chunk-YYYRBYWG.js';
12
- import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, spawnRun } from './chunk-LG2IQRTO.js';
12
+ import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, spawnRun } from './chunk-5CZV4FZ5.js';
13
13
  import { RecipeError, DOCKER_FEATURE, writeSanitizedRecipe, classifyProperties } from './chunk-3Z3MPR55.js';
14
- import { FIRECRACKER_VERSION, hostHelperPinned, firecrackerArch, MICROVM_ARCHES, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, BUILDER_DISK_VERSION, builderDiskPinned, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-R6QCSHKC.js';
14
+ import { FIRECRACKER_VERSION, hostHelperPinned, firecrackerArch, MICROVM_ARCHES, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, BUILDER_DISK_VERSION, builderDiskPinned, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-KFA762LZ.js';
15
15
  import { hostAllowed } from './chunk-UXYLWVTQ.js';
16
16
  import { readDu } from './chunk-YJLHUKYS.js';
17
17
  import { WorkCommandError } from './chunk-KQFWTTG7.js';
@@ -29,13 +29,13 @@ var FIRECRACKER_SHA256 = {
29
29
  var FIRECRACKER_BINARY_SHA256 = {
30
30
  x86_64: "99ad0f5cd0514a88aad0e9ae8cfdb3cc3b4ab9d190e1194602406c786b5de7a5"
31
31
  };
32
- var GUEST_ASSETS_VERSION = "7";
32
+ var GUEST_ASSETS_VERSION = "11";
33
33
  var GUEST_ASSETS_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/guest-${GUEST_ASSETS_VERSION}`;
34
34
  var GUEST_KERNEL_SHA256 = {
35
35
  x86_64: "8552fad4bdea1d49f3e7d2aa500ce3f8918fcd2fc66779fd83235949688a39bb"
36
36
  };
37
37
  var GUEST_HELPER_SHA256 = {
38
- x86_64: "0ae934d3ad3f2a94abffcc3f044ba633b1a523dc17ff0c2bc322ed7d7fc505ea"
38
+ x86_64: "e373f0fdb192e9930d19dd39cf75ff1c6cf08fdf5a0f041f12c1f999919fc05a"
39
39
  };
40
40
  function guestAssetsPinned(arch) {
41
41
  const zero = "0".repeat(64);
@@ -1,6 +1,6 @@
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-VGIS2D3U.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-IQFX5GQH.js';
4
4
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
5
5
  import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-QPAPHQZ7.js';
6
6
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
@@ -8,17 +8,17 @@ import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest
8
8
  import { fitImageBuildMemory } from './chunk-W4UFGYKQ.js';
9
9
  import { RUNNER_PROTOCOL } from './chunk-YKYCE4HY.js';
10
10
  import { writePendingUpdate } from './chunk-5KO3TN2F.js';
11
- import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-7SCEDWQP.js';
11
+ import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-PAFSFC6Q.js';
12
12
  import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-O7MSQBTH.js';
13
13
  import { RepoFilter } from './chunk-TBT347UY.js';
14
- import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, sweepImageBuilders, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-OKTLQTWH.js';
14
+ import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, sweepImageBuilders, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-JDKLORO3.js';
15
15
  import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-ZFJAQS3A.js';
16
16
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
17
17
  import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-JKPJQNJF.js';
18
18
  import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-PWB7EK4Z.js';
19
19
  import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
20
20
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
21
- import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-LG2IQRTO.js';
21
+ import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-5CZV4FZ5.js';
22
22
  import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-ZQ7VRXYM.js';
23
23
  import { exceedsDisk } from './chunk-YJLHUKYS.js';
24
24
  import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-KQFWTTG7.js';
@@ -3033,7 +3033,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
3033
3033
  check: update.check ? () => update.check(configPath) : async () => {
3034
3034
  const held = heldClaudeCredential();
3035
3035
  const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
3036
- return (await import('./check-LGZOJYLS.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3036
+ return (await import('./check-LDDMISY6.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3037
3037
  },
3038
3038
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
3039
3039
  log
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
3
3
  import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-ZFJAQS3A.js';
4
4
  import { startTimeOf } from './chunk-JBJTC3UU.js';
5
5
  import { RecipeError, locateRecipe, readRecipe, assertBuildable, writeSanitizedRecipe, classifyProperties, SANITIZED_NAME } from './chunk-3Z3MPR55.js';
6
- import { GH_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, TINI_SHA256, TINI_VERSION, CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, MEDIA_PINS, PLAYWRIGHT_VERSION } from './chunk-R6QCSHKC.js';
6
+ import { GH_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, TINI_SHA256, TINI_VERSION, CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, MEDIA_PINS, PLAYWRIGHT_VERSION } from './chunk-KFA762LZ.js';
7
7
  import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, repoCacheDir, imagesDir, imageBuildLogsDir, attemptStamp, runnerDir, rootfsPathFor } from './chunk-MBGS33SL.js';
8
8
  import { PROXY_WARNING_FLAG, withGitConfig, tokenHeader } from './chunk-D5ZGMXUL.js';
9
9
  import { RELAY_ID, RELAY_USER } from './chunk-MESOOLF4.js';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { isPlaceholderCommand } from './chunk-M7IA4JOX.js';
3
+ import { isPlaceholderCommand } from './chunk-33SMNWZX.js';
4
4
  import { describeCallFailure } from './chunk-JKPJQNJF.js';
5
5
  import { checkFit } from './chunk-A6MLCH76.js';
6
- import { realBuildDiskProbe, checkDiskFit, DEFAULT_BUILD_DISK } from './chunk-JFRBPBD5.js';
7
- import { builderDiskPinned } from './chunk-R6QCSHKC.js';
6
+ import { realBuildDiskProbe, checkDiskFit, DEFAULT_BUILD_DISK } from './chunk-3BGCXC3O.js';
7
+ import { builderDiskPinned } from './chunk-KFA762LZ.js';
8
8
  import { builtinKind, imageBuildOf } from './chunk-ZQ7VRXYM.js';
9
9
  import { WorkCommandError, getJson } from './chunk-KQFWTTG7.js';
10
10
  import { sanitizeTerminal } from './chunk-EWVYQLD3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-GDI6QGRH.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-4AHKR3K5.js';
4
4
  import './chunk-BJQ25STI.js';
5
5
  import './chunk-LOYLFW4I.js';
6
6
  import './chunk-KT4CN6OU.js';
@@ -3926,13 +3926,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3926
3926
  if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
3927
3927
  `);
3928
3928
  }
3929
- const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-3YBDLWPR.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3929
+ const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-E7DMPT6E.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3930
3930
  if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
3931
3931
  else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
3932
3932
  return;
3933
3933
  }
3934
3934
  await installMachineSkillsForSetup();
3935
- const { runInitCommand } = await import('./init-cmd-3YBDLWPR.js');
3935
+ const { runInitCommand } = await import('./init-cmd-E7DMPT6E.js');
3936
3936
  const code = await runInitCommand(
3937
3937
  { json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
3938
3938
  {
@@ -4199,7 +4199,7 @@ code is 1: revoke the token on /profile/security.
4199
4199
  }
4200
4200
  });
4201
4201
  program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
4202
- const { realGuestHost, runGuestInit } = await import('./guest-init-KDK4DQFK.js');
4202
+ const { realGuestHost, runGuestInit } = await import('./guest-init-TGECSRKO.js');
4203
4203
  const { readFileSync: readFileSync3 } = await import('fs');
4204
4204
  try {
4205
4205
  runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
@@ -4387,7 +4387,7 @@ check. A chapter reads yes when every still matches and no when one differs; the
4387
4387
  the region. One run, or a chapter with no stills, reads not checked. Comparing never changes which clips bind.
4388
4388
  `
4389
4389
  ).action(async (manifest, opts) => {
4390
- const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-AKRXCWLK.js');
4390
+ const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-Q6W74DCY.js');
4391
4391
  let item;
4392
4392
  if (opts.item !== void 0) {
4393
4393
  item = parseTrackerNumber(opts.item);
@@ -5038,7 +5038,7 @@ function registerRunnerCommands(program2) {
5038
5038
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
5039
5039
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
5040
5040
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-WAIYUZUG.js');
5041
- const { start, RunnerStartError } = await import('./loop-3YF4S4CA.js');
5041
+ const { start, RunnerStartError } = await import('./loop-7MFQISEV.js');
5042
5042
  const { RunnerAlreadyRunningError } = await import('./pidfile-ZWJLQIJV.js');
5043
5043
  const configPath = opts.config ?? defaultRunnerConfigPath();
5044
5044
  try {
@@ -5057,8 +5057,8 @@ function registerRunnerCommands(program2) {
5057
5057
  "\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
5058
5058
  ).action(async () => {
5059
5059
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-WAIYUZUG.js');
5060
- const { containerStart } = await import('./container-start-RWOEQUCC.js');
5061
- const { start, RunnerStartError } = await import('./loop-3YF4S4CA.js');
5060
+ const { containerStart } = await import('./container-start-SL63GFLG.js');
5061
+ const { start, RunnerStartError } = await import('./loop-7MFQISEV.js');
5062
5062
  const { RunnerAlreadyRunningError } = await import('./pidfile-ZWJLQIJV.js');
5063
5063
  try {
5064
5064
  const result = await containerStart({
@@ -5078,7 +5078,7 @@ function registerRunnerCommands(program2) {
5078
5078
  });
5079
5079
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
5080
5080
  const { defaultRunnerConfigPath } = await import('./config-WAIYUZUG.js');
5081
- const { runRunnerCheck } = await import('./check-LGZOJYLS.js');
5081
+ const { runRunnerCheck } = await import('./check-LDDMISY6.js');
5082
5082
  const configPath = opts.config ?? defaultRunnerConfigPath();
5083
5083
  const result = await runRunnerCheck(configPath);
5084
5084
  if (!result.ok) {
@@ -5112,7 +5112,7 @@ function registerRunnerCommands(program2) {
5112
5112
  }
5113
5113
  try {
5114
5114
  if (opts.service === true) {
5115
- const { installServiceCommand } = await import('./command-2EJ76XJH.js');
5115
+ const { installServiceCommand } = await import('./command-LEE7TFQE.js');
5116
5116
  const result2 = await installServiceCommand({
5117
5117
  configPath,
5118
5118
  print: opts.print,
@@ -5168,7 +5168,7 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
5168
5168
  return;
5169
5169
  }
5170
5170
  const { defaultRunnerConfigPath } = await import('./config-WAIYUZUG.js');
5171
- const { uninstallServiceCommand } = await import('./command-2EJ76XJH.js');
5171
+ const { uninstallServiceCommand } = await import('./command-LEE7TFQE.js');
5172
5172
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
5173
5173
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
5174
5174
  `);
@@ -5196,10 +5196,10 @@ already in claude.env is used.
5196
5196
  `
5197
5197
  ).action(async (opts) => {
5198
5198
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-WAIYUZUG.js');
5199
- const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-ZCZVN3AI.js');
5200
- const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-CBL5552Z.js');
5201
- const { detectMachine } = await import('./machine-X3EYEXEM.js');
5202
- const { chooseVm, runVmInit, VmInitError } = await import('./init-2LWFZK45.js');
5199
+ const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-BMTDKZU6.js');
5200
+ const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-3STHCRT5.js');
5201
+ const { detectMachine } = await import('./machine-4QGWUII5.js');
5202
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-7P6JHB6Z.js');
5203
5203
  const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-V37JMYNW.js');
5204
5204
  const configPath = opts.config ?? defaultRunnerConfigPath();
5205
5205
  if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
@@ -5350,7 +5350,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
5350
5350
  let serviceUp = false;
5351
5351
  let restart;
5352
5352
  if (installedLayout) {
5353
- const { installServiceCommand } = await import('./command-2EJ76XJH.js');
5353
+ const { installServiceCommand } = await import('./command-LEE7TFQE.js');
5354
5354
  const service = await installServiceCommand({
5355
5355
  configPath,
5356
5356
  entryPath: process.argv[1] ?? "",
@@ -5395,10 +5395,10 @@ Next:
5395
5395
  "\nA repository governed by a control plane builds the control plane's image, at the commit\nthe gateway has stored for it. A repository that governs itself fetches the head of its\ndefault branch into the runner's cache. Either way it reads .devcontainer/devcontainer.json\nand builds the image with the devcontainer CLI. Settings\nthat reach the host or widen the container's privileges are ignored and listed. The\nimage holds this CLI and a pinned Claude Code. Nothing runs inside the image.\n"
5396
5396
  ).action(async (opts) => {
5397
5397
  const { defaultRunnerConfigPath } = await import('./config-WAIYUZUG.js');
5398
- const { buildRepositoryImage, RecipeError } = await import('./build-2ONBPS3M.js');
5398
+ const { buildRepositoryImage, RecipeError } = await import('./build-RBLDHQTY.js');
5399
5399
  const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
5400
- const { createDockerHost } = await import('./docker-NDEA46KV.js');
5401
- const { builderSpec } = await import('./builder-AIKWGJHP.js');
5400
+ const { createDockerHost } = await import('./docker-WVTQTRSC.js');
5401
+ const { builderSpec } = await import('./builder-V3KALVKL.js');
5402
5402
  const { loadRunnerConfig } = await import('./config-WAIYUZUG.js');
5403
5403
  const configPath = opts.config ?? defaultRunnerConfigPath();
5404
5404
  const loaded = (() => {
@@ -5410,7 +5410,7 @@ Next:
5410
5410
  })();
5411
5411
  const memory = loaded?.build?.memory ?? "8g";
5412
5412
  try {
5413
- const { ensureRunnerIdentity } = await import('./runner-identity-77KVP24W.js');
5413
+ const { ensureRunnerIdentity } = await import('./runner-identity-X3UP5IQ4.js');
5414
5414
  await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
5415
5415
  console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
5416
5416
  });
@@ -5478,7 +5478,7 @@ Next:
5478
5478
  });
5479
5479
  runnerCmd.command("stop").description("Take no more work; finish running jobs, then exit").option("--config <path>", "the cloud config file naming the runner to stop").option("--now", "end running jobs immediately, with outcome stopped").action(async (opts) => {
5480
5480
  const { defaultRunnerConfigPath } = await import('./config-WAIYUZUG.js');
5481
- const { requestStop } = await import('./loop-3YF4S4CA.js');
5481
+ const { requestStop } = await import('./loop-7MFQISEV.js');
5482
5482
  const configPath = opts.config ?? defaultRunnerConfigPath();
5483
5483
  const { runnerImageVersion } = await import('./image-tag-6U7UYPIT.js');
5484
5484
  await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
@@ -5486,8 +5486,8 @@ Next:
5486
5486
  runnerCmd.command("status").description("List running jobs; with --recent, finished ones too").option("--config <path>", "the cloud config file naming the runner to inspect").option("--recent", "also list finished jobs, newest first, capped at 20").option("--json", "machine-readable JSON output").action(async (opts) => {
5487
5487
  const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-WAIYUZUG.js');
5488
5488
  const { jobsDir, runnerDir } = await import('./paths-FE7TXSTA.js');
5489
- const { listJobFiles, runnerProcessState } = await import('./loop-3YF4S4CA.js');
5490
- const { renderStatus } = await import('./status-TGQTGC7B.js');
5489
+ const { listJobFiles, runnerProcessState } = await import('./loop-7MFQISEV.js');
5490
+ const { renderStatus } = await import('./status-WS2REEFU.js');
5491
5491
  const { readHousekeepingRecord } = await import('./record-JGQ3CCKH.js');
5492
5492
  const path2 = await import('path');
5493
5493
  const configPath = opts.config ?? defaultRunnerConfigPath();
@@ -5547,7 +5547,7 @@ Next:
5547
5547
  });
5548
5548
  runnerCmd.command("logs").argument("<item>", "the work item's number in the factory").description("Print the newest attempt's log for one item").option("--config <path>", "the cloud config file naming the runner to inspect").option("-f, --follow", "keep printing as the log grows").action(async (itemArg, opts) => {
5549
5549
  const { defaultRunnerConfigPath } = await import('./config-WAIYUZUG.js');
5550
- const { listJobFiles } = await import('./loop-3YF4S4CA.js');
5550
+ const { listJobFiles } = await import('./loop-7MFQISEV.js');
5551
5551
  const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-2XVSZODP.js');
5552
5552
  const configPath = opts.config ?? defaultRunnerConfigPath();
5553
5553
  const item = parseTrackerNumber(itemArg);
@@ -3,10 +3,10 @@ import { createRequire } from 'node:module';
3
3
  import { runRunnerInstall, launcherSummary, restartNote } from './chunk-DZGLRVS3.js';
4
4
  import './chunk-Y53T3QZM.js';
5
5
  import { currentLink, execStartCommand } from './chunk-O7MSQBTH.js';
6
- import { detectMachine } from './chunk-6KVKEZTH.js';
7
- import { helperSocketPath, ensureFirecrackerAndJailer } from './chunk-OKTLQTWH.js';
6
+ import { detectMachine } from './chunk-F5HZT672.js';
7
+ import { helperSocketPath, ensureFirecrackerAndJailer } from './chunk-JDKLORO3.js';
8
8
  import './chunk-2PGI6RDE.js';
9
- import './chunk-7HMF7I3D.js';
9
+ import './chunk-MWAA3A5T.js';
10
10
  import './chunk-ZFJAQS3A.js';
11
11
  import './chunk-JBJTC3UU.js';
12
12
  import './chunk-OGFGZQA3.js';
@@ -17,9 +17,9 @@ import './chunk-PWB7EK4Z.js';
17
17
  import './chunk-TQMI335S.js';
18
18
  import { DEFAULT_UNIT_NAME, installService, uninstallService, realTaskScheduler, UNIT_MARKER } from './chunk-A6MLCH76.js';
19
19
  import './chunk-YYYRBYWG.js';
20
- import { readJobFile } from './chunk-LG2IQRTO.js';
20
+ import { readJobFile } from './chunk-5CZV4FZ5.js';
21
21
  import './chunk-3Z3MPR55.js';
22
- import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, FIRECRACKER_BINARY_SHA256, JAILER_BINARY_SHA256, HOST_HELPER_SHA256, HOST_HELPER_BASE_URL, HOST_HELPER_ASSETS_VERSION, hostHelperPinned } from './chunk-R6QCSHKC.js';
22
+ import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, FIRECRACKER_BINARY_SHA256, JAILER_BINARY_SHA256, HOST_HELPER_SHA256, HOST_HELPER_BASE_URL, HOST_HELPER_ASSETS_VERSION, hostHelperPinned } from './chunk-KFA762LZ.js';
23
23
  import { runnerVmOf, loadRunnerConfig, builtinKind } from './chunk-ZQ7VRXYM.js';
24
24
  import './chunk-UXYLWVTQ.js';
25
25
  import './chunk-YJLHUKYS.js';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { BUILD_MEMORY_VARIABLE } from './chunk-W4UFGYKQ.js';
4
- import { RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-M7IA4JOX.js';
4
+ import { RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-33SMNWZX.js';
5
5
  import { isAgentName, AGENT_COMMANDS } from './chunk-HDD3BKAE.js';
6
- import { detectMachine, supportsContainerBuilds, describeMachineDocker } from './chunk-6KVKEZTH.js';
7
- import { MIN_ENGINE_MAJOR } from './chunk-OKTLQTWH.js';
6
+ import { detectMachine, supportsContainerBuilds, describeMachineDocker } from './chunk-F5HZT672.js';
7
+ import { MIN_ENGINE_MAJOR } from './chunk-JDKLORO3.js';
8
8
  import './chunk-2PGI6RDE.js';
9
- import './chunk-7HMF7I3D.js';
9
+ import './chunk-MWAA3A5T.js';
10
10
  import './chunk-ZFJAQS3A.js';
11
11
  import './chunk-JBJTC3UU.js';
12
12
  import './chunk-OGFGZQA3.js';
@@ -17,9 +17,9 @@ import { runnerImageVersion, IMAGE_VERSION_VARIABLE } from './chunk-PWB7EK4Z.js'
17
17
  import './chunk-TQMI335S.js';
18
18
  import './chunk-A6MLCH76.js';
19
19
  import './chunk-YYYRBYWG.js';
20
- import './chunk-LG2IQRTO.js';
20
+ import './chunk-5CZV4FZ5.js';
21
21
  import './chunk-3Z3MPR55.js';
22
- import './chunk-R6QCSHKC.js';
22
+ import './chunk-KFA762LZ.js';
23
23
  import './chunk-ZQ7VRXYM.js';
24
24
  import './chunk-UXYLWVTQ.js';
25
25
  import { parseSize } from './chunk-YJLHUKYS.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { childEnvironment, createDockerHost, spawnRun } from './chunk-LG2IQRTO.js';
3
+ export { childEnvironment, createDockerHost, spawnRun } from './chunk-5CZV4FZ5.js';
4
4
  import './chunk-3Z3MPR55.js';
5
- import './chunk-R6QCSHKC.js';
5
+ import './chunk-KFA762LZ.js';
6
6
  import './chunk-YJLHUKYS.js';
7
7
  import './chunk-5DNCFOXA.js';
8
8
  import './chunk-634F6J3Q.js';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { needsClaudeCredential, claudeCredentialCheck, managedProblems, missingPermissionOf, missingPermissionFix } from './chunk-7SCEDWQP.js';
3
+ import { needsClaudeCredential, claudeCredentialCheck, managedProblems, missingPermissionOf, missingPermissionFix } from './chunk-PAFSFC6Q.js';
4
4
  import { launcherCheck } from './chunk-Y53T3QZM.js';
5
5
  import './chunk-O7MSQBTH.js';
6
6
  import { RepoFilter } from './chunk-TBT347UY.js';
7
- import './chunk-M7IA4JOX.js';
7
+ import './chunk-33SMNWZX.js';
8
8
  import './chunk-HDD3BKAE.js';
9
- import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-6KVKEZTH.js';
10
- import { MIN_ENGINE_MAJOR, helperFirecrackerNote, probeHelper, helperSocketPath } from './chunk-OKTLQTWH.js';
9
+ import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-F5HZT672.js';
10
+ import { MIN_ENGINE_MAJOR, helperFirecrackerNote, probeHelper, helperSocketPath } from './chunk-JDKLORO3.js';
11
11
  import './chunk-2PGI6RDE.js';
12
- import './chunk-7HMF7I3D.js';
12
+ import './chunk-MWAA3A5T.js';
13
13
  import './chunk-ZFJAQS3A.js';
14
14
  import './chunk-JBJTC3UU.js';
15
15
  import './chunk-OGFGZQA3.js';
@@ -19,11 +19,11 @@ import './chunk-JKPJQNJF.js';
19
19
  import { runnerImageVersion, imageAdvice, readUpdateStatus, imageTag, pullInstruction } from './chunk-PWB7EK4Z.js';
20
20
  import './chunk-TQMI335S.js';
21
21
  import './chunk-A6MLCH76.js';
22
- import { realBuildDiskProbe, DEFAULT_BUILD_DISK, checkDiskFit } from './chunk-JFRBPBD5.js';
22
+ import { realBuildDiskProbe, DEFAULT_BUILD_DISK, checkDiskFit } from './chunk-3BGCXC3O.js';
23
23
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
24
- import { resolveDevcontainerCli, buildxState, spawnRun } from './chunk-LG2IQRTO.js';
24
+ import { resolveDevcontainerCli, buildxState, spawnRun } from './chunk-5CZV4FZ5.js';
25
25
  import { locateRecipe, assertBuildable, readRecipe, RecipeError } from './chunk-3Z3MPR55.js';
26
- import { FIRECRACKER_VERSION, builderDiskPinned, CLAUDE_CODE_VERSION } from './chunk-R6QCSHKC.js';
26
+ import { FIRECRACKER_VERSION, builderDiskPinned, CLAUDE_CODE_VERSION } from './chunk-KFA762LZ.js';
27
27
  import { builtinKind } from './chunk-ZQ7VRXYM.js';
28
28
  import { allowHostProblem, MAX_ALLOW_HOSTS } from './chunk-UXYLWVTQ.js';
29
29
  import { parseSize } from './chunk-YJLHUKYS.js';
@@ -6,7 +6,7 @@ import './chunk-EBX2DU2M.js';
6
6
  import './chunk-ESVW4MJY.js';
7
7
  import './chunk-TBT347UY.js';
8
8
  import { VoiceDownloadError, downloadPinned, sha256OfFile } from './chunk-2PGI6RDE.js';
9
- import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-R6QCSHKC.js';
9
+ import { VOICE_PACK_FILES, VOICE_PACK_VERSION } from './chunk-KFA762LZ.js';
10
10
  import { detectActiveSession, autoConnect } from './chunk-RLGSBR56.js';
11
11
  import './chunk-CMNAAKFD.js';
12
12
  import './chunk-EWVYQLD3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD, realGuestHost, relayPortsFrom, runGuestInit } from './chunk-HAD7LYDL.js';
3
+ export { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD, realGuestHost, relayPortsFrom, runGuestInit, waitForPath } from './chunk-COLOLDY3.js';
4
4
  import './chunk-TTACRX4N.js';
5
5
  import './chunk-JBJTC3UU.js';
6
6
  import './chunk-O5F376JJ.js';
package/dist/index.js CHANGED
@@ -26,5 +26,5 @@ if (argv[0] === "claude") {
26
26
  process.exit(await runClaudeLauncher(argv.slice(1)));
27
27
  }
28
28
  (await import('./hook-fast-PXSDGAUP.js')).recordLinkExitFailure(argv);
29
- var { runCli } = await import('./cli-2LCCZQA6.js');
29
+ var { runCli } = await import('./cli-QUV5HTDW.js');
30
30
  await runCli(process.argv);
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { npmSupportsProvenance } from './chunk-E7R2GIAW.js';
4
- import { RunnerInitError, readConfigObject } from './chunk-M7IA4JOX.js';
4
+ import { RunnerInitError, readConfigObject } from './chunk-33SMNWZX.js';
5
5
  import './chunk-HDD3BKAE.js';
6
- import './chunk-6KVKEZTH.js';
7
- import './chunk-OKTLQTWH.js';
6
+ import './chunk-F5HZT672.js';
7
+ import './chunk-JDKLORO3.js';
8
8
  import './chunk-2PGI6RDE.js';
9
- import './chunk-7HMF7I3D.js';
9
+ import './chunk-MWAA3A5T.js';
10
10
  import './chunk-ZFJAQS3A.js';
11
11
  import './chunk-JBJTC3UU.js';
12
12
  import './chunk-OGFGZQA3.js';
@@ -17,9 +17,9 @@ import './chunk-PWB7EK4Z.js';
17
17
  import './chunk-TQMI335S.js';
18
18
  import { checkFit, VM_SERVICE_NAME, RUNNER_RESERVE_BYTES } from './chunk-A6MLCH76.js';
19
19
  import './chunk-YYYRBYWG.js';
20
- import './chunk-LG2IQRTO.js';
20
+ import './chunk-5CZV4FZ5.js';
21
21
  import './chunk-3Z3MPR55.js';
22
- import './chunk-R6QCSHKC.js';
22
+ import './chunk-KFA762LZ.js';
23
23
  import { runnerCredentialProblem, resolveBuild, resolveHousekeeping } from './chunk-ZQ7VRXYM.js';
24
24
  import './chunk-UXYLWVTQ.js';
25
25
  import { parseSize } from './chunk-YJLHUKYS.js';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, prepareRunnerInit, readConfigObject, runRunnerInit, writeRunnerInit } from './chunk-M7IA4JOX.js';
3
+ export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, prepareRunnerInit, readConfigObject, runRunnerInit, writeRunnerInit } from './chunk-33SMNWZX.js';
4
4
  import './chunk-HDD3BKAE.js';
5
- import './chunk-6KVKEZTH.js';
6
- import './chunk-OKTLQTWH.js';
5
+ import './chunk-F5HZT672.js';
6
+ import './chunk-JDKLORO3.js';
7
7
  import './chunk-2PGI6RDE.js';
8
- import './chunk-7HMF7I3D.js';
8
+ import './chunk-MWAA3A5T.js';
9
9
  import './chunk-ZFJAQS3A.js';
10
10
  import './chunk-JBJTC3UU.js';
11
11
  import './chunk-OGFGZQA3.js';
@@ -16,9 +16,9 @@ import './chunk-PWB7EK4Z.js';
16
16
  import './chunk-TQMI335S.js';
17
17
  import './chunk-A6MLCH76.js';
18
18
  import './chunk-YYYRBYWG.js';
19
- import './chunk-LG2IQRTO.js';
19
+ import './chunk-5CZV4FZ5.js';
20
20
  import './chunk-3Z3MPR55.js';
21
- import './chunk-R6QCSHKC.js';
21
+ import './chunk-KFA762LZ.js';
22
22
  import './chunk-ZQ7VRXYM.js';
23
23
  import './chunk-UXYLWVTQ.js';
24
24
  import './chunk-YJLHUKYS.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { summarizeChecks, summaryText, renderDoctorText } from './chunk-GDI6QGRH.js';
3
+ import { summarizeChecks, summaryText, renderDoctorText } from './chunk-4AHKR3K5.js';
4
4
  import './chunk-BJQ25STI.js';
5
5
  import { shellFunctionInstalled, removeShellFunction, installShellFunction, SHELL_FUNCTION_LINE } from './chunk-CJJDJ7AT.js';
6
6
  import './chunk-LOYLFW4I.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, sampleUsage, start, tick, watchTick } from './chunk-J5VNSW4W.js';
4
- import './chunk-VGIS2D3U.js';
3
+ export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, sampleUsage, start, tick, watchTick } from './chunk-MCIPCQP3.js';
4
+ import './chunk-IQFX5GQH.js';
5
5
  import './chunk-ZVB57WI6.js';
6
6
  import './chunk-QPAPHQZ7.js';
7
7
  import './chunk-3JVYMD4G.js';
@@ -9,22 +9,22 @@ import './chunk-E7R2GIAW.js';
9
9
  import './chunk-W4UFGYKQ.js';
10
10
  import './chunk-YKYCE4HY.js';
11
11
  import './chunk-5KO3TN2F.js';
12
- import './chunk-HAD7LYDL.js';
12
+ import './chunk-COLOLDY3.js';
13
13
  import './chunk-TTACRX4N.js';
14
14
  import './chunk-I3LTIAOR.js';
15
15
  import './chunk-JUVUVXQZ.js';
16
16
  import './chunk-J6LFFZOY.js';
17
17
  import './chunk-EBX2DU2M.js';
18
18
  import './chunk-ESVW4MJY.js';
19
- import './chunk-7SCEDWQP.js';
19
+ import './chunk-PAFSFC6Q.js';
20
20
  import './chunk-O7MSQBTH.js';
21
21
  import './chunk-TBT347UY.js';
22
- import './chunk-M7IA4JOX.js';
22
+ import './chunk-33SMNWZX.js';
23
23
  import './chunk-HDD3BKAE.js';
24
- import './chunk-6KVKEZTH.js';
25
- import './chunk-OKTLQTWH.js';
24
+ import './chunk-F5HZT672.js';
25
+ import './chunk-JDKLORO3.js';
26
26
  import './chunk-2PGI6RDE.js';
27
- import './chunk-7HMF7I3D.js';
27
+ import './chunk-MWAA3A5T.js';
28
28
  import './chunk-ZFJAQS3A.js';
29
29
  import './chunk-JBJTC3UU.js';
30
30
  import './chunk-OGFGZQA3.js';
@@ -34,11 +34,11 @@ import './chunk-JKPJQNJF.js';
34
34
  import './chunk-PWB7EK4Z.js';
35
35
  import './chunk-TQMI335S.js';
36
36
  import './chunk-A6MLCH76.js';
37
- import './chunk-JFRBPBD5.js';
37
+ import './chunk-3BGCXC3O.js';
38
38
  import './chunk-YYYRBYWG.js';
39
- import './chunk-LG2IQRTO.js';
39
+ import './chunk-5CZV4FZ5.js';
40
40
  import './chunk-3Z3MPR55.js';
41
- import './chunk-R6QCSHKC.js';
41
+ import './chunk-KFA762LZ.js';
42
42
  import './chunk-ZQ7VRXYM.js';
43
43
  import './chunk-UXYLWVTQ.js';
44
44
  import './chunk-YJLHUKYS.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-6KVKEZTH.js';
4
- import './chunk-OKTLQTWH.js';
3
+ export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-F5HZT672.js';
4
+ import './chunk-JDKLORO3.js';
5
5
  import './chunk-2PGI6RDE.js';
6
- import './chunk-7HMF7I3D.js';
6
+ import './chunk-MWAA3A5T.js';
7
7
  import './chunk-ZFJAQS3A.js';
8
8
  import './chunk-JBJTC3UU.js';
9
9
  import './chunk-OGFGZQA3.js';
@@ -13,9 +13,9 @@ import './chunk-JKPJQNJF.js';
13
13
  import './chunk-PWB7EK4Z.js';
14
14
  import './chunk-TQMI335S.js';
15
15
  import './chunk-YYYRBYWG.js';
16
- import './chunk-LG2IQRTO.js';
16
+ import './chunk-5CZV4FZ5.js';
17
17
  import './chunk-3Z3MPR55.js';
18
- import './chunk-R6QCSHKC.js';
18
+ import './chunk-KFA762LZ.js';
19
19
  import './chunk-UXYLWVTQ.js';
20
20
  import './chunk-YJLHUKYS.js';
21
21
  import './chunk-KQFWTTG7.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { RUNNER_LABEL, builderNameFor, dockerIdentity, ensureRunnerIdentity, pathLabelValue, readRunnerIdentity } from './chunk-LG2IQRTO.js';
3
+ export { RUNNER_LABEL, builderNameFor, dockerIdentity, ensureRunnerIdentity, pathLabelValue, readRunnerIdentity } from './chunk-5CZV4FZ5.js';
4
4
  import './chunk-3Z3MPR55.js';
5
- import './chunk-R6QCSHKC.js';
5
+ import './chunk-KFA762LZ.js';
6
6
  import './chunk-YJLHUKYS.js';
7
7
  import './chunk-5DNCFOXA.js';
8
8
  import './chunk-634F6J3Q.js';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { readConfigObject, RunnerInitError } from './chunk-M7IA4JOX.js';
3
+ import { readConfigObject, RunnerInitError } from './chunk-33SMNWZX.js';
4
4
  import './chunk-HDD3BKAE.js';
5
- import './chunk-6KVKEZTH.js';
6
- import './chunk-OKTLQTWH.js';
5
+ import './chunk-F5HZT672.js';
6
+ import './chunk-JDKLORO3.js';
7
7
  import './chunk-2PGI6RDE.js';
8
- import './chunk-7HMF7I3D.js';
8
+ import './chunk-MWAA3A5T.js';
9
9
  import './chunk-ZFJAQS3A.js';
10
10
  import './chunk-JBJTC3UU.js';
11
11
  import './chunk-OGFGZQA3.js';
@@ -16,9 +16,9 @@ import './chunk-PWB7EK4Z.js';
16
16
  import './chunk-TQMI335S.js';
17
17
  import './chunk-A6MLCH76.js';
18
18
  import './chunk-YYYRBYWG.js';
19
- import './chunk-LG2IQRTO.js';
19
+ import './chunk-5CZV4FZ5.js';
20
20
  import './chunk-3Z3MPR55.js';
21
- import './chunk-R6QCSHKC.js';
21
+ import './chunk-KFA762LZ.js';
22
22
  import { runnerCredentialProblem } from './chunk-ZQ7VRXYM.js';
23
23
  import './chunk-UXYLWVTQ.js';
24
24
  import './chunk-YJLHUKYS.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { isReadable, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-VGIS2D3U.js';
3
+ import { isReadable, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-IQFX5GQH.js';
4
4
  import { jobStateFormatOf } from './chunk-ZVB57WI6.js';
5
- import './chunk-HAD7LYDL.js';
5
+ import './chunk-COLOLDY3.js';
6
6
  import './chunk-TTACRX4N.js';
7
7
  import './chunk-I3LTIAOR.js';
8
8
  import './chunk-JUVUVXQZ.js';
@@ -10,9 +10,9 @@ import './chunk-J6LFFZOY.js';
10
10
  import './chunk-EBX2DU2M.js';
11
11
  import './chunk-ESVW4MJY.js';
12
12
  import './chunk-TBT347UY.js';
13
- import { LEASE_SECONDS } from './chunk-OKTLQTWH.js';
13
+ import { LEASE_SECONDS } from './chunk-JDKLORO3.js';
14
14
  import './chunk-2PGI6RDE.js';
15
- import './chunk-7HMF7I3D.js';
15
+ import './chunk-MWAA3A5T.js';
16
16
  import './chunk-ZFJAQS3A.js';
17
17
  import './chunk-JBJTC3UU.js';
18
18
  import './chunk-OGFGZQA3.js';
@@ -22,9 +22,9 @@ import { formatDuration, formatClock, relativeToRunner } from './chunk-JKPJQNJF.
22
22
  import { pullInstruction } from './chunk-PWB7EK4Z.js';
23
23
  import './chunk-TQMI335S.js';
24
24
  import { formatBytes } from './chunk-YYYRBYWG.js';
25
- import './chunk-LG2IQRTO.js';
25
+ import './chunk-5CZV4FZ5.js';
26
26
  import './chunk-3Z3MPR55.js';
27
- import './chunk-R6QCSHKC.js';
27
+ import './chunk-KFA762LZ.js';
28
28
  import './chunk-ZQ7VRXYM.js';
29
29
  import './chunk-UXYLWVTQ.js';
30
30
  import './chunk-YJLHUKYS.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.33.0-next.20261022180022",
3
+ "version": "0.33.0-next.20261022182214",
4
4
  "description": "OuterLayer CLI — commands: init, claude, connect, doctor, login, logout, sync, daemon (alias: watch), emit, findings, work, spec, runner, hooks, mcp, context. Capture and sync coding-agent sessions, and record proof of factory work.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Magu Studios, Inc.",
@@ -258,9 +258,15 @@ For each criterion, put the capture in a script under
258
258
  you captured, and regenerating it must be one command. The scripts go when the
259
259
  run's report directory goes. The emitted artifacts outlive the run.
260
260
 
261
- Emit each artifact with `outerlayer emit artifact ... --for <criterion id>
262
- --pr <number>`. Always pass `--pr`. Regenerate with `--replaces` any evidence
263
- the tree has since invalidated. Then run `outerlayer sync`.
261
+ Record the criteria that declare `proof: video` as one demo, as the
262
+ outerlayer-evidence skill's "Record a demo" says. Write one Playwright test with
263
+ `@outerlayer/playwright` and one chapter for each of those criteria, in the
264
+ criteria's order. Run it, then run `outerlayer emit demo <manifest> --item
265
+ "$OUTERLAYER_WORK" --pr <number>`. Emit each other artifact with `outerlayer
266
+ emit artifact ... --for <criterion id> --pr <number>`. Always pass `--pr`.
267
+ When the tree invalidates a video, record and emit the whole demo again: the
268
+ newer demo replaces the older one. Regenerate any other invalidated evidence
269
+ with `--replaces`. Then run `outerlayer sync`.
264
270
 
265
271
  Write `build-reports/evidence.md` naming every criterion with its artifact, or
266
272
  with the reason none could be produced. A criterion you could not evidence is
@@ -15,8 +15,8 @@ the issue, the pull request number, the criteria that declare a proof form, the
15
15
  instructions-file pointer and the outerlayer-evidence skill.
16
16
 
17
17
  A criterion that declares `proof: screenshot` needs a screenshot bound to its
18
- id. One that declares `proof: video` needs a video. A screenshot never
19
- satisfies `proof: video`. A criterion with no proof form is proven by its
18
+ id. One that declares `proof: video` needs a video: its chapter of the
19
+ item's one demo. A screenshot never satisfies `proof: video`. A criterion with no proof form is proven by its
20
20
  test, and needs no artifact.
21
21
 
22
22
  When a commit lands on the branch after the evidence agent captured, decide for
@@ -25,7 +25,8 @@ a file the capture's subject runs through: the feature's own files, the shared
25
25
  code they import, a migration or schema behind them, or a test the capture is a
26
26
  log of. A sync that brings in only files the feature never reaches leaves the
27
27
  capture valid. Spawn the evidence agent again with the stale list. It reruns
28
- their scripts and emits each with `--replaces`. The final report names the
28
+ their scripts and emits each with `--replaces`. A stale video means the whole
29
+ demo is recorded and emitted again. The final report names the
29
30
  commit and every capture with its call, kept or regenerated. A commit that
30
31
  lands after this call reopens it. Never drive the browser yourself.
31
32
 
@@ -29,9 +29,9 @@ artifact shares one upload cap of 8 MiB, whatever its kind:
29
29
  - **screenshot** (`.png`, `.jpg`) — one focused window or region showing the
30
30
  proven state. Crop noise; keep enough chrome (URL bar, test summary line)
31
31
  to show it is real.
32
- - **video** (`.webm`, `.mp4`) — a short recording of the flow, start to
33
- outcome. Video is the kind most likely to hit the 8 MiB cap: trim dead
34
- time, prefer webm.
32
+ - **video** (`.webm`, `.mp4`) — a recording of the flow, start to outcome.
33
+ Record it as a demo chapter (see "Record a demo"). Video is the kind most
34
+ likely to hit the 8 MiB cap: trim dead time.
35
35
  - **report** (`.html`, `.pdf`) — generated reports: coverage, benchmark,
36
36
  audit output. Emit the file the tool produced, unedited.
37
37
  - **log** (`.txt`, `.log`) — command output proving a run happened: test
@@ -80,10 +80,11 @@ the recorded list does not hold gets no row.
80
80
 
81
81
  ## Record a demo
82
82
 
83
- For a criterion whose behavior shows on screen, record a demo instead of a
84
- lone screenshot. A demo has one chapter for each criterion. Each chapter is
85
- that criterion's video proof, with a spoken line that says what happens and
86
- a list of the checks that ran.
83
+ Record every video proof as a chapter of the item's one demo. A demo has
84
+ one chapter for each criterion that declares a video, in the criteria's
85
+ order. Each chapter is that criterion's video proof, with a spoken line that
86
+ says what happens and a list of the checks that ran. Emit a video with
87
+ `emit artifact` only when Playwright cannot drive the flow.
87
88
 
88
89
  Write a Playwright test with `@outerlayer/playwright`, one `demo.chapter`
89
90
  for each criterion: