@outerlayer/cli 0.10.1 → 0.11.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 (50) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/{agent-setup-ODTDC3US.js → agent-setup-YEFN74Y4.js} +6 -3
  3. package/dist/build-info.json +1 -1
  4. package/dist/{builder-EVO6F2NO.js → builder-PP436VGZ.js} +2 -2
  5. package/dist/{check-RBRRI77E.js → check-YDXOLVJ5.js} +17 -16
  6. package/dist/{chunk-VVIRHTH4.js → chunk-2GBCTEN4.js} +1 -1
  7. package/dist/{chunk-4AVAETSU.js → chunk-3YFCWYBU.js} +140 -40
  8. package/dist/{chunk-M6G7TJVF.js → chunk-4Q7OMKAT.js} +44 -4
  9. package/dist/{chunk-MC6J453K.js → chunk-7C4T5BGN.js} +2 -2
  10. package/dist/{chunk-47RS42OZ.js → chunk-A56PYPDF.js} +11 -4
  11. package/dist/{chunk-472KC6JV.js → chunk-BEZSECPA.js} +1 -1
  12. package/dist/{chunk-KZ5M4QOB.js → chunk-BHOBM3IZ.js} +32 -14
  13. package/dist/{chunk-JSUUXA5W.js → chunk-CJGQQZWB.js} +1 -1
  14. package/dist/{chunk-BREEX2Z7.js → chunk-E5DC4VZL.js} +115 -58
  15. package/dist/{chunk-R2UYH4QV.js → chunk-EOWWTFUU.js} +3 -3
  16. package/dist/{chunk-PDTSUOVT.js → chunk-FI5UYJMQ.js} +1 -1
  17. package/dist/{chunk-V42JY4F6.js → chunk-HYZRY4KZ.js} +2 -2
  18. package/dist/chunk-O765JR4W.js +35 -0
  19. package/dist/{chunk-6CXYORUS.js → chunk-QKFB4K7X.js} +1 -1
  20. package/dist/{chunk-ESZJ5QIC.js → chunk-R7BJYFD2.js} +4 -4
  21. package/dist/{chunk-S6IUUNCD.js → chunk-RSNSZ2LJ.js} +1 -1
  22. package/dist/{chunk-NTLGWCWK.js → chunk-TFIOXPZT.js} +1 -1
  23. package/dist/{chunk-M2PBLRB7.js → chunk-XR3BJN33.js} +23 -3
  24. package/dist/{chunk-ABIWDUMS.js → chunk-YETTWTAY.js} +4 -4
  25. package/dist/{cli-G6TH4YMK.js → cli-RQZXTOEI.js} +44 -40
  26. package/dist/{command-LNEFKIVC.js → command-U6UGIBVT.js} +9 -9
  27. package/dist/config-MKBX2ZQD.js +11 -0
  28. package/dist/{docker-GM526LGX.js → docker-WVRRMK6R.js} +3 -3
  29. package/dist/{doctor-QSV4DYT2.js → doctor-ZF4PYWVN.js} +10 -10
  30. package/dist/{exec-client-QTUO6TZT.js → exec-client-CQV746UF.js} +3 -3
  31. package/dist/{guest-init-4UW4HM6N.js → guest-init-LJP5GPZF.js} +3 -3
  32. package/dist/index.js +1 -1
  33. package/dist/{init-ORDCPTFD.js → init-M5IBAGVE.js} +10 -10
  34. package/dist/{init-OKCDXEOG.js → init-PUY2BUHH.js} +8 -8
  35. package/dist/{init-cmd-5TEM2QNH.js → init-cmd-NPNR23UL.js} +1 -1
  36. package/dist/{install-PYNCWSTV.js → install-HKOVISUP.js} +3 -3
  37. package/dist/{loop-ZNUQT736.js → loop-3FNROLW7.js} +17 -16
  38. package/dist/{machine-TBJKZ6TN.js → machine-RWDDJRWB.js} +7 -7
  39. package/dist/mcp-install-cmd-XZARXNYT.js +9 -0
  40. package/dist/pending-MXLSRYMO.js +7 -0
  41. package/dist/{real-deps-LS64D3M6.js → real-deps-KNNBQC75.js} +1 -1
  42. package/dist/{status-KPDVZMJ6.js → status-2OW5AKWL.js} +17 -9
  43. package/dist/{work-claim-cmd-DYD6II56.js → work-claim-cmd-LXXSNEGF.js} +3 -3
  44. package/dist/{work-open-pr-cmd-N2RBDKZ4.js → work-open-pr-cmd-YZAENDP6.js} +5 -4
  45. package/package.json +1 -1
  46. package/skill-pack/maintained/amend/SKILL.md +10 -1
  47. package/skill-pack/maintained/outerlayer/SKILL.md +19 -3
  48. package/skill-pack/maintained/outerlayer/references/open-pull-request.md +11 -0
  49. package/dist/config-X45X7AS4.js +0 -11
  50. package/dist/mcp-install-cmd-4AQMSIGY.js +0 -9
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { MAX_ALLOW_HOSTS, allowHostProblem } from './chunk-UXYLWVTQ.js';
4
4
  import { parseSize } from './chunk-7RQ73DLO.js';
5
- import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-M6G7TJVF.js';
5
+ import { isRefusedInConfig, resolveDestinations, isReservedVariable } from './chunk-4Q7OMKAT.js';
6
6
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
7
7
  import { existsSync, statSync, accessSync, constants, readFileSync } from 'fs';
8
8
  import { hostname } from 'os';
@@ -86,8 +86,11 @@ var RUNNER_KEYS = [
86
86
  "build",
87
87
  "housekeeping",
88
88
  "checks",
89
- "autoUpdate"
89
+ "autoUpdate",
90
+ "update"
90
91
  ];
92
+ var UPDATE_KEYS = ["maxWaitHours"];
93
+ var DEFAULT_UPDATE_MAX_WAIT_HOURS = 6;
91
94
  function runnerNumbers() {
92
95
  return [
93
96
  { key: "concurrency", min: 1 },
@@ -205,6 +208,7 @@ function loadRunnerConfig(configPath) {
205
208
  const build = resolveBuild(configPath, runner.build);
206
209
  const housekeeping = resolveHousekeeping(configPath, runner.housekeeping, build.disk);
207
210
  const checks = resolveChecks(configPath, runner.checks);
211
+ const update = resolveUpdate(configPath, runner.update);
208
212
  if (config.scrub?.literals !== void 0 && !Array.isArray(config.scrub.literals)) {
209
213
  fail(configPath, "scrub.literals", "must be a list of strings");
210
214
  }
@@ -233,6 +237,7 @@ function loadRunnerConfig(configPath) {
233
237
  build,
234
238
  housekeeping,
235
239
  checks,
240
+ update,
236
241
  // A host with executables of its own for provision and cleanup chose
237
242
  // its own environment, and an update could change what its hooks run
238
243
  // under; it opts in. The built-in hooks are the runner's own. Provision
@@ -300,6 +305,21 @@ function resolveChecks(configPath, block) {
300
305
  }
301
306
  return { timeLimitMinutes: limit };
302
307
  }
308
+ function resolveUpdate(configPath, block) {
309
+ const given = block ?? {};
310
+ if (typeof given !== "object" || Array.isArray(given)) fail(configPath, "runner.update", "must be an object");
311
+ const keys = given;
312
+ for (const key of Object.keys(keys)) {
313
+ if (UPDATE_KEYS.includes(key)) continue;
314
+ const near = nearestKey(key, UPDATE_KEYS);
315
+ fail(configPath, `runner.update.${key}`, near ? `is not a key this block accepts; did you mean ${near}?` : "is not a key this block accepts");
316
+ }
317
+ const hours = keys.maxWaitHours === void 0 ? DEFAULT_UPDATE_MAX_WAIT_HOURS : keys.maxWaitHours;
318
+ if (typeof hours !== "number" || !Number.isFinite(hours) || hours < 0) {
319
+ fail(configPath, "runner.update.maxWaitHours", "must be a number of hours, 0 or more");
320
+ }
321
+ return { maxWaitHours: hours };
322
+ }
303
323
  function wholeBytes(bytes) {
304
324
  if (bytes === void 0) return void 0;
305
325
  const whole = Math.floor(bytes);
@@ -359,4 +379,4 @@ function resolveBuild(configPath, block) {
359
379
  };
360
380
  }
361
381
 
362
- export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, RunnerConfigError, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerVmOf };
382
+ export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, RunnerConfigError, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerVmOf };
@@ -34,17 +34,17 @@ async function fetchTarballDigest(url, fetchImpl) {
34
34
  }
35
35
  async function fetchProvenance(version, fetchImpl) {
36
36
  const response = await get(`${REGISTRY_URL}/-/npm/v1/attestations/${PACKAGE_PATH}@${encodeURIComponent(version)}`, fetchImpl);
37
- if (response.status === 404) return void 0;
37
+ if (response.status === 404) return { kind: "absent" };
38
38
  if (!response.ok) throw new Error(`the registry answered HTTP ${response.status} for the attestations of ${PACKAGE_NAME}@${version}`);
39
39
  const body = await response.json();
40
40
  const slsa = (body.attestations ?? []).find((a) => a.predicateType === SLSA_PREDICATE);
41
41
  const payload = slsa?.bundle?.dsseEnvelope?.payload;
42
- if (typeof payload !== "string") return void 0;
42
+ if (typeof payload !== "string") return { kind: "unreadable" };
43
43
  const statement = JSON.parse(Buffer.from(payload, "base64").toString("utf8"));
44
44
  const workflow = statement.predicate?.buildDefinition?.externalParameters?.workflow;
45
45
  const subjectSha512 = statement.subject?.[0]?.digest?.sha512;
46
- if (typeof workflow?.repository !== "string" || typeof workflow.path !== "string" || typeof subjectSha512 !== "string") return void 0;
47
- return { repository: workflow.repository, workflowPath: workflow.path, subjectSha512 };
46
+ if (typeof workflow?.repository !== "string" || typeof workflow.path !== "string" || typeof subjectSha512 !== "string") return { kind: "unreadable" };
47
+ return { kind: "found", repository: workflow.repository, workflowPath: workflow.path, subjectSha512 };
48
48
  }
49
49
 
50
50
  // src/runner/update/npm.ts
@@ -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-R2UYH4QV.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-EOWWTFUU.js';
4
4
  import './chunk-F47JBIAW.js';
5
5
  import './chunk-BKO6JEZI.js';
6
6
  import './chunk-DTDZXDQ3.js';
@@ -3820,7 +3820,7 @@ function buildProgram(argv = process.argv) {
3820
3820
  program2.name("outerlayer").description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).option(NO_COLOR_FLAG, "disable color (NO_COLOR=1 does the same)").addHelpText("after", SUPPORT_TEXT);
3821
3821
  program2.command("init").description("Connect this repository, install hooks and agent skills, run doctor").option("--user", "install into user settings [default]").option("--project", "install into project settings (./.claude/settings.json)").option("--org", "print a managed-settings.json snippet for MDM/GPO rollout").option("--remove", "uninstall OuterLayer hooks").option("--local", "install the hooks only: no connect step and no network call").option("--factory <org/factory>", "the factory to connect this repository to (see `outerlayer connect`)").option("--gitignore", "also add .outerlayer/ to .gitignore (project scope)").option("--template <name>", "install the starter skills and a policy file (only: default)").option("--no-wrap-hooks", "leave PreToolUse/PostToolUse hooks unwrapped").option("--statusline", "install the status-line segment [default]").option("--no-statusline", "leave the statusLine slot untouched").option("--json", "machine-readable JSON output").addHelpText(
3822
3822
  "after",
3823
- "\nIn a repository, init runs four steps: connect the repository to a\nfactory (`outerlayer connect`), install the hooks, set up the coding agent,\nand run `outerlayer doctor`. It never signs in and asks nothing. With no\nlogin it skips the connect step and says to run `outerlayer login`. With\n--json it prints one document naming the outcome of each step: done,\nskipped or failed. The exit code is 1 when a step failed.\n\nThe agent setup step installs the starter skills and the `outerlayer` skill\ninto .outerlayer/skills/, writes .outerlayer/config.json for Claude Code when\nthere is none, runs `outerlayer context emit` so the skills appear in\n.claude/skills/, and adds the OuterLayer MCP server to .mcp.json. Nothing you\nwrote is changed: an existing config, policy, edited skill, MCP entry or root\nCLAUDE.md and AGENTS.md is left as it is, and a hand-written file the emit\nwould replace is kept and listed. The files are left uncommitted.\nThe step is skipped outside a git repository and in a repository whose\ncontext comes from a control plane, where it arrives at session start.\n\n--local installs only the hooks: no connect step, no agent setup and no\nnetwork call. Add `--template default` to also write the starter skills and\na policy file into .outerlayer/ without compiling them; `outerlayer context\nemit` does that.\n\nIdempotent: settings are backed up before any write, and a second run\nchanges nothing. Wrapping adds one spawn per hook firing; undo it with\n`outerlayer hooks unwrap`. An occupied status-line slot is wrapped, never\nreplaced.\n\nThree of the starter skills are copied once and are yours to edit. The\nothers are rewritten from this CLI on every `context emit`.\n"
3823
+ "\nIn a repository, init runs four steps: connect the repository to a\nfactory (`outerlayer connect`), install the hooks, set up the coding agent,\nand run `outerlayer doctor`. It never signs in and asks nothing. With no\nlogin it skips the connect step and says to run `outerlayer login`. With\n--json it prints one document naming the outcome of each step: done,\nskipped or failed. The exit code is 1 when a step failed.\n\nThe agent setup step installs the starter skills and the `outerlayer` skill\ninto .outerlayer/skills/, writes .outerlayer/config.json for Claude Code when\nthere is none, runs `outerlayer context emit` so the skills appear in\n.claude/skills/, and adds the outerlayer and outerlayer-docs MCP servers to\n.mcp.json. Nothing you wrote is changed: an existing config, policy, edited\nskill, MCP entry or root CLAUDE.md and AGENTS.md is left as it is, and a\nhand-written file the emit would replace is kept and listed. The files are\nleft uncommitted.\nThe step is skipped outside a git repository and in a repository whose\ncontext comes from a control plane, where it arrives at session start.\n\n--local installs only the hooks: no connect step, no agent setup and no\nnetwork call. Add `--template default` to also write the starter skills and\na policy file into .outerlayer/ without compiling them; `outerlayer context\nemit` does that.\n\nIdempotent: settings are backed up before any write, and a second run\nchanges nothing. Wrapping adds one spawn per hook firing; undo it with\n`outerlayer hooks unwrap`. An occupied status-line slot is wrapped, never\nreplaced.\n\nThree of the starter skills are copied once and are yours to edit. The\nothers are rewritten from this CLI on every `context emit`.\n"
3824
3824
  ).action(async (opts) => {
3825
3825
  let starterTemplate;
3826
3826
  if (opts.template !== void 0) {
@@ -3855,7 +3855,7 @@ function buildProgram(argv = process.argv) {
3855
3855
  else process.stdout.write(outcome.text);
3856
3856
  return;
3857
3857
  }
3858
- const { runInitCommand } = await import('./init-cmd-5TEM2QNH.js');
3858
+ const { runInitCommand } = await import('./init-cmd-NPNR23UL.js');
3859
3859
  const code = await runInitCommand(
3860
3860
  { json: opts.json, factory: opts.factory },
3861
3861
  {
@@ -3867,7 +3867,7 @@ function buildProgram(argv = process.argv) {
3867
3867
  return { ok, text, detail };
3868
3868
  },
3869
3869
  runAgentSetup: async () => {
3870
- const { runAgentSetup } = await import('./agent-setup-ODTDC3US.js');
3870
+ const { runAgentSetup } = await import('./agent-setup-YEFN74Y4.js');
3871
3871
  return runAgentSetup({ cwd: process.cwd() });
3872
3872
  },
3873
3873
  runDoctorChecks: gatherDoctorChecks
@@ -3985,7 +3985,7 @@ function buildProgram(argv = process.argv) {
3985
3985
  await startRelay({ port, socketPath: opts.socket, forwards });
3986
3986
  });
3987
3987
  program2.command("vm-exec", { hidden: true }).description("run a command in a microVM build's guest through its exec agent").requiredOption("--socket <path>", "the Unix socket Firecracker serves the build's vsock device on").option("--user <user>", "the user to run as", "").option("--cwd <dir>", "the working directory", "/").option("--env <NAME=value>", "an environment value the command line carries; repeatable", (value, previous) => [...previous, value], []).option("--pass <NAME>", "an environment variable whose value is read from this process; repeatable", (value, previous) => [...previous, value], []).argument("<argv...>", "the command and its arguments").action(async (argv2, opts) => {
3988
- const { runVmExec } = await import('./exec-client-QTUO6TZT.js');
3988
+ const { runVmExec } = await import('./exec-client-CQV746UF.js');
3989
3989
  const env = {};
3990
3990
  for (const entry of opts.env) {
3991
3991
  const eq = entry.indexOf("=");
@@ -4018,7 +4018,7 @@ function buildProgram(argv = process.argv) {
4018
4018
  }
4019
4019
  });
4020
4020
  program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
4021
- const { realGuestHost, runGuestInit } = await import('./guest-init-4UW4HM6N.js');
4021
+ const { realGuestHost, runGuestInit } = await import('./guest-init-LJP5GPZF.js');
4022
4022
  const { readFileSync: readFileSync3 } = await import('fs');
4023
4023
  try {
4024
4024
  runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
@@ -4349,7 +4349,7 @@ live addition remains on it.
4349
4349
  throw err;
4350
4350
  }
4351
4351
  });
4352
- workCmd.command("list").description("List live work items for this factory").option("--stage <spec|build|review>", "filter by stage").option("--section <attention|waiting|flowing>", "filter by Queue section").option("--repo <owner/name>", "repository (default: the current checkout's remote)").option("--unclaimed", "only items with no live lease").option("--claimed", "only items with a live lease, held by a host or a local session").option("--startable", "only items with an unused build request and no live lease").option("--needs <amend>", "only items with a thread waiting on an agent").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
4352
+ workCmd.command("list").description("List live work items for this factory").option("--stage <spec|build|review>", "filter by stage").option("--section <attention|waiting|flowing>", "filter by Queue section").option("--repo <owner/name>", "repository (default: the current checkout's remote)").option("--unclaimed", "only items with no live lease").option("--claimed", "only items with a live lease, held by a host or a local session").option("--startable", "only items a host can start: a build request, no open PR, no live lease").option("--needs <amend>", "only items with a thread waiting on an agent").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
4353
4353
  warnIfApiKeyFlag(opts);
4354
4354
  const { runWorkList, WorkCommandError } = await import('./work-cmd-ZJY3NA2G.js');
4355
4355
  try {
@@ -4367,7 +4367,7 @@ live addition remains on it.
4367
4367
  "\n outerlayer work claim --item 42 --kind implement\n\nRecords a lease held by the API key that sends it. A live lease held\nby a different key is refused; claiming again with the same key extends\nit. --host is a label only.\n"
4368
4368
  ).action(async (opts) => {
4369
4369
  warnIfApiKeyFlag(opts);
4370
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-DYD6II56.js');
4370
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-LXXSNEGF.js');
4371
4371
  try {
4372
4372
  await runWorkClaim(opts);
4373
4373
  } catch (err) {
@@ -4383,7 +4383,7 @@ live addition remains on it.
4383
4383
  "\n outerlayer work renew --item 42\n\nExtends the live lease this API key holds. Refused with a 410 if the\nlease has expired, or a 403 if a different key holds it.\n"
4384
4384
  ).action(async (opts) => {
4385
4385
  warnIfApiKeyFlag(opts);
4386
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-DYD6II56.js');
4386
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-LXXSNEGF.js');
4387
4387
  try {
4388
4388
  await runWorkRenew(opts);
4389
4389
  } catch (err) {
@@ -4402,7 +4402,7 @@ live addition remains on it.
4402
4402
  "\n outerlayer work release --item 42 --outcome ok\n outerlayer work release --item 42\n\nMarks the lease this API key holds released, optionally with an\noutcome. A lease held by a different key is refused. Releasing an\nalready-released lease is a no-op that returns the recorded release\ntime and outcome.\n\nRun inside a session with no --host, it releases that session's own\nlease instead, so the item's review opens without ending the\nsession. It never releases another session's lease. --outcome\napplies to a host's lease only. A later tool call in the session\ntakes the lease again.\n"
4403
4403
  ).action(async (opts) => {
4404
4404
  warnIfApiKeyFlag(opts);
4405
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-DYD6II56.js');
4405
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-LXXSNEGF.js');
4406
4406
  try {
4407
4407
  await runWorkRelease(opts);
4408
4408
  } catch (err) {
@@ -4429,12 +4429,12 @@ live addition remains on it.
4429
4429
  throw err;
4430
4430
  }
4431
4431
  });
4432
- workCmd.command("open-pr").description("Open, or edit, the pull request for the work item this session is on").requiredOption("--title <title>", "the pull request's title").requiredOption("--body-file <path>", "a file holding the pull request's description").option("--repo <owner/name>", "repository, on the gh path (default: the current checkout's remote)").option("--session-id <id>", "session id to record as-is, on the gh path, skipping detection").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").addHelpText(
4432
+ workCmd.command("open-pr").description("Open, or edit, the pull request for the work item this session is on").requiredOption("--title <title>", "the pull request's title").requiredOption("--body-file <path>", "a file holding the pull request's description").option("--repository <owner/name>", "repository to open the pull request in (default: the primary)").option("--repo <owner/name>", "same as --repository, on the gh path").option("--session-id <id>", "session id to record as-is, on the gh path, skipping detection").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").addHelpText(
4433
4433
  "after",
4434
- '\n outerlayer work open-pr --title "Add the thing" --body-file pr.md\n\nIn a host build, which holds an item key, the gateway opens the pull\nrequest as the factory\'s GitHub App, from the branch the claim named,\nor edits the one already open on that branch. No gh command runs.\nIn your own session it runs `gh pr create` (or `gh pr edit`) under your\nlogin, then declares the pull request on the item, as `work pr` does.\nRun it again after a change to the title or description.\n'
4434
+ '\n outerlayer work open-pr --title "Add the thing" --body-file pr.md\n outerlayer work open-pr --repository acme/web --title "Add the thing" --body-file pr.md\n\nIn a host build, which holds an item key, the gateway opens the pull\nrequest as the factory\'s GitHub App, from the branch the claim named,\nor edits the one already open on that branch. No gh command runs.\nIn your own session it runs `gh pr create` (or `gh pr edit`) under your\nlogin, then declares the pull request on the item, as `work pr` does.\nRun it again after a change to the title or description.\n'
4435
4435
  ).action(async (opts) => {
4436
4436
  warnIfApiKeyFlag(opts);
4437
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-N2RBDKZ4.js');
4437
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-YZAENDP6.js');
4438
4438
  const { WorkCommandError } = await import('./work-cmd-ZJY3NA2G.js');
4439
4439
  try {
4440
4440
  await runWorkOpenPr(opts);
@@ -4451,12 +4451,12 @@ function registerRunnerCommands(program2) {
4451
4451
  const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
4452
4452
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4453
4453
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4454
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-X45X7AS4.js');
4455
- const { start, RunnerStartError } = await import('./loop-ZNUQT736.js');
4454
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MKBX2ZQD.js');
4455
+ const { start, RunnerStartError } = await import('./loop-3FNROLW7.js');
4456
4456
  const { RunnerAlreadyRunningError } = await import('./pidfile-UZRH774M.js');
4457
4457
  const configPath = opts.config ?? defaultRunnerConfigPath();
4458
4458
  try {
4459
- const { realUpdateDeps } = await import('./real-deps-LS64D3M6.js');
4459
+ const { realUpdateDeps } = await import('./real-deps-KNNBQC75.js');
4460
4460
  await start(configPath, { update: realUpdateDeps(), fetchImpl: fetch });
4461
4461
  } catch (err) {
4462
4462
  if (err instanceof RunnerConfigError || err instanceof RunnerAlreadyRunningError || err instanceof RunnerStartError) {
@@ -4467,8 +4467,8 @@ function registerRunnerCommands(program2) {
4467
4467
  }
4468
4468
  });
4469
4469
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
4470
- const { defaultRunnerConfigPath } = await import('./config-X45X7AS4.js');
4471
- const { runRunnerCheck } = await import('./check-RBRRI77E.js');
4470
+ const { defaultRunnerConfigPath } = await import('./config-MKBX2ZQD.js');
4471
+ const { runRunnerCheck } = await import('./check-YDXOLVJ5.js');
4472
4472
  const configPath = opts.config ?? defaultRunnerConfigPath();
4473
4473
  const result = await runRunnerCheck(configPath);
4474
4474
  if (!result.ok) {
@@ -4484,7 +4484,7 @@ function registerRunnerCommands(program2) {
4484
4484
  `);
4485
4485
  });
4486
4486
  runnerCmd.command("install").description("Put this CLI in the runner's install layout; --service adds its service").option("--config <path>", configOption).option("--service", "set up the service that keeps the runner running").option("--print", "with --service, print the unit and set up nothing").option("--user <account>", "with --service, the account the service runs as").option("--replace", "replace a unit or launcher file this command did not write").option("--allow-downgrade", "install this CLI even when it is older than the version the runner runs").option("--unit-name <name>", "with --service, the unit's name, to run a second runner beside the first").action(async (opts) => {
4487
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-X45X7AS4.js');
4487
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MKBX2ZQD.js');
4488
4488
  const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-5HYMXLEW.js');
4489
4489
  const configPath = opts.config ?? defaultRunnerConfigPath();
4490
4490
  if (opts.service !== true) {
@@ -4497,7 +4497,7 @@ function registerRunnerCommands(program2) {
4497
4497
  }
4498
4498
  try {
4499
4499
  if (opts.service === true) {
4500
- const { installServiceCommand } = await import('./command-LNEFKIVC.js');
4500
+ const { installServiceCommand } = await import('./command-U6UGIBVT.js');
4501
4501
  const result2 = await installServiceCommand({
4502
4502
  configPath,
4503
4503
  print: opts.print,
@@ -4552,18 +4552,18 @@ To keep it running, run ${C.yellow}outerlayer runner install --service${C.reset}
4552
4552
  fail("pass --service: `outerlayer runner uninstall --service` removes the runner's service.");
4553
4553
  return;
4554
4554
  }
4555
- const { defaultRunnerConfigPath } = await import('./config-X45X7AS4.js');
4556
- const { uninstallServiceCommand } = await import('./command-LNEFKIVC.js');
4555
+ const { defaultRunnerConfigPath } = await import('./config-MKBX2ZQD.js');
4556
+ const { uninstallServiceCommand } = await import('./command-U6UGIBVT.js');
4557
4557
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
4558
4558
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
4559
4559
  `);
4560
4560
  else fail(result.lines.length > 0 ? result.lines.join("\n ") : "the service was not removed");
4561
4561
  });
4562
4562
  runnerCmd.command("init").description("Write a runner block that fits this machine; on macOS, offers a Linux VM").option("--config <path>", configOption).option("--vm", "on macOS, run the runner in a Linux VM (Lima), with container builds").option("--no-vm", "on macOS, skip the VM and run builds as unisolated processes").option("--allow-process-builds", "where builds cannot be isolated, run them as processes anyway").addOption(new Option("--config-stdin", "the VM-side hand-off: read the whole config as JSON on stdin").hideHelp()).option("--vm-cli-package <path>", "with --vm, install this packed CLI tarball in the VM").option("--unit-name <name>", "the service unit's name, to run a second runner beside the first").action(async (opts) => {
4563
- const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-X45X7AS4.js');
4564
- const { runRunnerInit, RunnerInitError } = await import('./init-OKCDXEOG.js');
4565
- const { detectMachine } = await import('./machine-TBJKZ6TN.js');
4566
- const { chooseVm, runVmInit, VmInitError } = await import('./init-ORDCPTFD.js');
4563
+ const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MKBX2ZQD.js');
4564
+ const { runRunnerInit, RunnerInitError } = await import('./init-PUY2BUHH.js');
4565
+ const { detectMachine } = await import('./machine-RWDDJRWB.js');
4566
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-M5IBAGVE.js');
4567
4567
  const configPath = opts.config ?? defaultRunnerConfigPath();
4568
4568
  try {
4569
4569
  const machine = detectMachine();
@@ -4663,7 +4663,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
4663
4663
  }
4664
4664
  let serviceUp = false;
4665
4665
  if (installedLayout) {
4666
- const { installServiceCommand } = await import('./command-LNEFKIVC.js');
4666
+ const { installServiceCommand } = await import('./command-U6UGIBVT.js');
4667
4667
  const service = await installServiceCommand({
4668
4668
  configPath,
4669
4669
  entryPath: process.argv[1] ?? "",
@@ -4701,12 +4701,12 @@ Next:
4701
4701
  "after",
4702
4702
  "\nFetches the head of the default branch into the runner's cache, reads its\n.devcontainer/devcontainer.json, and 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"
4703
4703
  ).action(async (opts) => {
4704
- const { defaultRunnerConfigPath } = await import('./config-X45X7AS4.js');
4704
+ const { defaultRunnerConfigPath } = await import('./config-MKBX2ZQD.js');
4705
4705
  const { buildRepositoryImage, RecipeError } = await import('./build-LELVCWHV.js');
4706
4706
  const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
4707
- const { createDockerHost } = await import('./docker-GM526LGX.js');
4708
- const { builderSpec } = await import('./builder-EVO6F2NO.js');
4709
- const { loadRunnerConfig } = await import('./config-X45X7AS4.js');
4707
+ const { createDockerHost } = await import('./docker-WVRRMK6R.js');
4708
+ const { builderSpec } = await import('./builder-PP436VGZ.js');
4709
+ const { loadRunnerConfig } = await import('./config-MKBX2ZQD.js');
4710
4710
  const configPath = opts.config ?? defaultRunnerConfigPath();
4711
4711
  const memory = (() => {
4712
4712
  try {
@@ -4767,21 +4767,23 @@ Next:
4767
4767
  }
4768
4768
  });
4769
4769
  runnerCmd.command("stop").description("Take no more work; wait for running jobs to finish, 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) => {
4770
- const { defaultRunnerConfigPath } = await import('./config-X45X7AS4.js');
4771
- const { requestStop } = await import('./loop-ZNUQT736.js');
4770
+ const { defaultRunnerConfigPath } = await import('./config-MKBX2ZQD.js');
4771
+ const { requestStop } = await import('./loop-3FNROLW7.js');
4772
4772
  const configPath = opts.config ?? defaultRunnerConfigPath();
4773
4773
  await requestStop(configPath, Boolean(opts.now));
4774
4774
  });
4775
4775
  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) => {
4776
- const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-X45X7AS4.js');
4776
+ const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-MKBX2ZQD.js');
4777
4777
  const { jobsDir, runnerDir } = await import('./paths-OYKMVYJP.js');
4778
- const { listJobFiles, runnerProcessState } = await import('./loop-ZNUQT736.js');
4779
- const { renderStatus } = await import('./status-KPDVZMJ6.js');
4778
+ const { listJobFiles, runnerProcessState } = await import('./loop-3FNROLW7.js');
4779
+ const { renderStatus } = await import('./status-2OW5AKWL.js');
4780
4780
  const { readHousekeepingRecord } = await import('./record-C43U4PKS.js');
4781
4781
  const path2 = await import('path');
4782
4782
  const configPath = opts.config ?? defaultRunnerConfigPath();
4783
4783
  const all = listJobFiles(configPath);
4784
4784
  const housekeeping = readHousekeepingRecord(runnerDir(configPath));
4785
+ const { readPendingUpdate } = await import('./pending-MXLSRYMO.js');
4786
+ const pendingUpdate = readPendingUpdate(runnerDir(configPath));
4785
4787
  let host = "unknown";
4786
4788
  let concurrency = 1;
4787
4789
  try {
@@ -4794,7 +4796,7 @@ Next:
4794
4796
  const service = await (async () => {
4795
4797
  if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
4796
4798
  const { inspectService, realInspectProbes } = await import('./inspect-6UYAAXH7.js');
4797
- const { DEFAULT_UNIT_NAME } = await import('./install-PYNCWSTV.js');
4799
+ const { DEFAULT_UNIT_NAME } = await import('./install-HKOVISUP.js');
4798
4800
  const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
4799
4801
  return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
4800
4802
  })();
@@ -4807,6 +4809,7 @@ Next:
4807
4809
  concurrency,
4808
4810
  // A hold is only true of a runner that is running.
4809
4811
  housekeeping: processState.state === "running" ? housekeeping : { ...housekeeping, holding: void 0 },
4812
+ pendingUpdate: processState.state === "running" ? pendingUpdate : void 0,
4810
4813
  jobs: all.map(({ dirName, job }) => ({ ...withoutItemKey(job), jobDir: path2.join(jobsDir(configPath), dirName) }))
4811
4814
  });
4812
4815
  return;
@@ -4821,14 +4824,15 @@ Next:
4821
4824
  now: /* @__PURE__ */ new Date(),
4822
4825
  recent: Boolean(opts.recent),
4823
4826
  housekeeping,
4827
+ pendingUpdate,
4824
4828
  service
4825
4829
  })}
4826
4830
  `
4827
4831
  );
4828
4832
  });
4829
4833
  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) => {
4830
- const { defaultRunnerConfigPath } = await import('./config-X45X7AS4.js');
4831
- const { listJobFiles } = await import('./loop-ZNUQT736.js');
4834
+ const { defaultRunnerConfigPath } = await import('./config-MKBX2ZQD.js');
4835
+ const { listJobFiles } = await import('./loop-3FNROLW7.js');
4832
4836
  const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-H55NWW4H.js');
4833
4837
  const configPath = opts.config ?? defaultRunnerConfigPath();
4834
4838
  const item = parseTrackerNumber(itemArg);
@@ -5052,7 +5056,7 @@ function registerMcpCommands(program2) {
5052
5056
  "after",
5053
5057
  "\nThe API key is never a flag and never written to .mcp.json as a literal value.\n stdio (default): the client spawns `outerlayer mcp serve`, which reads the key\n from ~/.outerlayer/config.json (or OUTERLAYER_API_KEY) on every connect, so a\n rotated key is picked up without rewriting the entry.\n http: the entry carries the ${OUTERLAYER_API_KEY} placeholder, which the client\n resolves from the environment it was launched with.\n\n--command: use an absolute or ${HOME}-relative path when the CLI is not on PATH.\n--url: with stdio the endpoint resolves from OUTERLAYER_URL / the config file at\nconnect time; for self-host pass your gateway-node origin + /v1/mcp.\nSelf-host deployments also need --app-id: without a key service to resolve the\ncaller from the bearer token, the gateway answers 401 without that header.\n"
5054
5058
  ).action(async (opts) => {
5055
- const { runMcpInstall, handleMcpInstallError, McpInstallError } = await import('./mcp-install-cmd-4AQMSIGY.js');
5059
+ const { runMcpInstall, handleMcpInstallError, McpInstallError } = await import('./mcp-install-cmd-XZARXNYT.js');
5056
5060
  try {
5057
5061
  if (opts.transport !== void 0 && opts.transport !== "stdio" && opts.transport !== "http") {
5058
5062
  throw new McpInstallError(`--transport must be "stdio" or "http", got "${opts.transport}"`);
@@ -5,9 +5,9 @@ import './chunk-I2UOAV7X.js';
5
5
  import { readJobFile } from './chunk-T6OIJQRT.js';
6
6
  import './chunk-PTW6W5NR.js';
7
7
  import { currentLink, execStartCommand } from './chunk-TI7B7UEO.js';
8
- import { detectMachine } from './chunk-472KC6JV.js';
9
- import './chunk-BREEX2Z7.js';
10
- import { installService, uninstallService, realTaskScheduler } from './chunk-NTLGWCWK.js';
8
+ import { detectMachine } from './chunk-BEZSECPA.js';
9
+ import './chunk-E5DC4VZL.js';
10
+ import { installService, uninstallService, realTaskScheduler } from './chunk-TFIOXPZT.js';
11
11
  import './chunk-FBTE2A2X.js';
12
12
  import './chunk-JKIWMRFH.js';
13
13
  import { realLima } from './chunk-77MM5RYD.js';
@@ -15,12 +15,12 @@ import { writeLaunchAgent, launchAgentPath } from './chunk-LF6MLJCY.js';
15
15
  import './chunk-3FMPZPJQ.js';
16
16
  import './chunk-N5FOE5PS.js';
17
17
  import './chunk-OGFGZQA3.js';
18
- import './chunk-VVIRHTH4.js';
18
+ import './chunk-2GBCTEN4.js';
19
19
  import './chunk-QOZKPLVJ.js';
20
- import './chunk-JSUUXA5W.js';
20
+ import './chunk-CJGQQZWB.js';
21
21
  import './chunk-CX22S5BA.js';
22
- import './chunk-6CXYORUS.js';
23
- import './chunk-S6IUUNCD.js';
22
+ import './chunk-QKFB4K7X.js';
23
+ import './chunk-RSNSZ2LJ.js';
24
24
  import './chunk-DTDZXDQ3.js';
25
25
  import './chunk-ZQ5JGHUO.js';
26
26
  import './chunk-BFESLKPP.js';
@@ -30,10 +30,10 @@ import './chunk-IU4NZROR.js';
30
30
  import './chunk-USO2DKBD.js';
31
31
  import './chunk-N6LURUEF.js';
32
32
  import './chunk-YRYMNBGQ.js';
33
- import { runnerVmOf, loadRunnerConfig } from './chunk-M2PBLRB7.js';
33
+ import { runnerVmOf, loadRunnerConfig } from './chunk-XR3BJN33.js';
34
34
  import './chunk-UXYLWVTQ.js';
35
35
  import './chunk-7RQ73DLO.js';
36
- import './chunk-M6G7TJVF.js';
36
+ import './chunk-4Q7OMKAT.js';
37
37
  import './chunk-WZBHBH3J.js';
38
38
  import './chunk-RWQWPZB4.js';
39
39
  import './chunk-ZJSNLVCE.js';
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ export { DEFAULT_CHECK_TIME_LIMIT_MINUTES, DEFAULT_UPDATE_MAX_WAIT_HOURS, RunnerConfigError, builtinKind, checkHooks, defaultRunnerConfigPath, hasRunnerBlock, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, loadRunnerConfig, resolveBuild, resolveHousekeeping, runnerVmOf } from './chunk-XR3BJN33.js';
4
+ import './chunk-UXYLWVTQ.js';
5
+ import './chunk-7RQ73DLO.js';
6
+ import './chunk-4Q7OMKAT.js';
7
+ import './chunk-BYT5O5RV.js';
8
+ import './chunk-VNVZDWO3.js';
9
+ import './chunk-Z5GEFMRW.js';
10
+
11
+ createRequire(import.meta.url);
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { childEnvironment, createDockerHost, spawnRun } from './chunk-VVIRHTH4.js';
3
+ export { childEnvironment, createDockerHost, spawnRun } from './chunk-2GBCTEN4.js';
4
4
  import './chunk-QOZKPLVJ.js';
5
- import './chunk-JSUUXA5W.js';
5
+ import './chunk-CJGQQZWB.js';
6
6
  import './chunk-CX22S5BA.js';
7
7
  import './chunk-IU4NZROR.js';
8
8
  import './chunk-7RQ73DLO.js';
9
- import './chunk-M6G7TJVF.js';
9
+ import './chunk-4Q7OMKAT.js';
10
10
  import './chunk-YT35WGIP.js';
11
11
  import './chunk-BYT5O5RV.js';
12
12
  import './chunk-ZM2IMMYN.js';
@@ -1,22 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-ESZJ5QIC.js';
3
+ import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-R7BJYFD2.js';
4
4
  import { launcherCheck } from './chunk-PTW6W5NR.js';
5
5
  import './chunk-TI7B7UEO.js';
6
6
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
7
7
  import { RepoFilter } from './chunk-TBT347UY.js';
8
- import './chunk-MC6J453K.js';
9
- import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-472KC6JV.js';
10
- import { MIN_ENGINE_MAJOR } from './chunk-BREEX2Z7.js';
8
+ import './chunk-7C4T5BGN.js';
9
+ import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-BEZSECPA.js';
10
+ import { MIN_ENGINE_MAJOR } from './chunk-E5DC4VZL.js';
11
11
  import './chunk-3FMPZPJQ.js';
12
12
  import './chunk-N5FOE5PS.js';
13
13
  import './chunk-OGFGZQA3.js';
14
- import { resolveDevcontainerCli, spawnRun } from './chunk-VVIRHTH4.js';
14
+ import { resolveDevcontainerCli, spawnRun } from './chunk-2GBCTEN4.js';
15
15
  import { locateRecipe, assertBuildable, readRecipe, RecipeError } from './chunk-QOZKPLVJ.js';
16
- import { buildxState } from './chunk-JSUUXA5W.js';
16
+ import { buildxState } from './chunk-CJGQQZWB.js';
17
17
  import { CLAUDE_CODE_VERSION } from './chunk-CX22S5BA.js';
18
- import './chunk-6CXYORUS.js';
19
- import './chunk-S6IUUNCD.js';
18
+ import './chunk-QKFB4K7X.js';
19
+ import './chunk-RSNSZ2LJ.js';
20
20
  import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-DTDZXDQ3.js';
21
21
  import './chunk-ZQ5JGHUO.js';
22
22
  import './chunk-BFESLKPP.js';
@@ -26,10 +26,10 @@ import { compareVersions } from './chunk-IU4NZROR.js';
26
26
  import './chunk-USO2DKBD.js';
27
27
  import './chunk-N6LURUEF.js';
28
28
  import './chunk-YRYMNBGQ.js';
29
- import { builtinKind } from './chunk-M2PBLRB7.js';
29
+ import { builtinKind } from './chunk-XR3BJN33.js';
30
30
  import { allowHostProblem, MAX_ALLOW_HOSTS } from './chunk-UXYLWVTQ.js';
31
31
  import { parseSize } from './chunk-7RQ73DLO.js';
32
- import './chunk-M6G7TJVF.js';
32
+ import './chunk-4Q7OMKAT.js';
33
33
  import './chunk-WZBHBH3J.js';
34
34
  import { defaultGitRunner } from './chunk-RWQWPZB4.js';
35
35
  import './chunk-ZJSNLVCE.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { CAPTURE_LIMIT_BYTES, ExecConnectionError, HANDSHAKE_TIMEOUT_MS, execCapture, runExec, runVmExec, vmExecArgs, waitForAgent } from './chunk-6CXYORUS.js';
4
- import './chunk-S6IUUNCD.js';
5
- import './chunk-M6G7TJVF.js';
3
+ export { CAPTURE_LIMIT_BYTES, ExecConnectionError, HANDSHAKE_TIMEOUT_MS, execCapture, runExec, runVmExec, vmExecArgs, waitForAgent } from './chunk-QKFB4K7X.js';
4
+ import './chunk-RSNSZ2LJ.js';
5
+ import './chunk-4Q7OMKAT.js';
6
6
  import './chunk-BYT5O5RV.js';
7
7
  import './chunk-Z5GEFMRW.js';
8
8
 
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { DOCKERD_LOG, HELPER_PATH, realGuestHost, relayPortsFrom, runGuestInit } from './chunk-V42JY4F6.js';
4
- import './chunk-S6IUUNCD.js';
5
- import './chunk-M6G7TJVF.js';
3
+ export { DOCKERD_LOG, HELPER_PATH, realGuestHost, relayPortsFrom, runGuestInit } from './chunk-HYZRY4KZ.js';
4
+ import './chunk-RSNSZ2LJ.js';
5
+ import './chunk-4Q7OMKAT.js';
6
6
  import './chunk-BYT5O5RV.js';
7
7
  import './chunk-Z5GEFMRW.js';
8
8
 
package/dist/index.js CHANGED
@@ -22,5 +22,5 @@ if (argv[0] === "statusline") {
22
22
  process.exit(0);
23
23
  }
24
24
  (await import('./hook-fast-AQCAQIA6.js')).recordLinkExitFailure(argv);
25
- var { runCli } = await import('./cli-G6TH4YMK.js');
25
+ var { runCli } = await import('./cli-RQZXTOEI.js');
26
26
  await runCli(process.argv);
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { npmSupportsProvenance } from './chunk-ABIWDUMS.js';
4
- import { readConfigObject, RunnerInitError } from './chunk-MC6J453K.js';
5
- import './chunk-472KC6JV.js';
6
- import './chunk-BREEX2Z7.js';
3
+ import { npmSupportsProvenance } from './chunk-YETTWTAY.js';
4
+ import { readConfigObject, RunnerInitError } from './chunk-7C4T5BGN.js';
5
+ import './chunk-BEZSECPA.js';
6
+ import './chunk-E5DC4VZL.js';
7
7
  import { VM_SERVICE_NAME } from './chunk-FBTE2A2X.js';
8
8
  import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-JKIWMRFH.js';
9
9
  import { writeLaunchAgent } from './chunk-LF6MLJCY.js';
10
10
  import './chunk-3FMPZPJQ.js';
11
11
  import './chunk-N5FOE5PS.js';
12
12
  import './chunk-OGFGZQA3.js';
13
- import './chunk-VVIRHTH4.js';
13
+ import './chunk-2GBCTEN4.js';
14
14
  import './chunk-QOZKPLVJ.js';
15
- import './chunk-JSUUXA5W.js';
15
+ import './chunk-CJGQQZWB.js';
16
16
  import './chunk-CX22S5BA.js';
17
- import './chunk-6CXYORUS.js';
18
- import './chunk-S6IUUNCD.js';
17
+ import './chunk-QKFB4K7X.js';
18
+ import './chunk-RSNSZ2LJ.js';
19
19
  import './chunk-DTDZXDQ3.js';
20
20
  import './chunk-ZQ5JGHUO.js';
21
21
  import './chunk-BFESLKPP.js';
@@ -25,10 +25,10 @@ import './chunk-IU4NZROR.js';
25
25
  import './chunk-USO2DKBD.js';
26
26
  import './chunk-N6LURUEF.js';
27
27
  import './chunk-YRYMNBGQ.js';
28
- import { resolveBuild, resolveHousekeeping } from './chunk-M2PBLRB7.js';
28
+ import { resolveBuild, resolveHousekeeping } from './chunk-XR3BJN33.js';
29
29
  import './chunk-UXYLWVTQ.js';
30
30
  import { parseSize } from './chunk-7RQ73DLO.js';
31
- import './chunk-M6G7TJVF.js';
31
+ import './chunk-4Q7OMKAT.js';
32
32
  import './chunk-WZBHBH3J.js';
33
33
  import './chunk-RWQWPZB4.js';
34
34
  import './chunk-ZJSNLVCE.js';
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, readConfigObject, runRunnerInit } from './chunk-MC6J453K.js';
4
- import './chunk-472KC6JV.js';
5
- import './chunk-BREEX2Z7.js';
3
+ export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, readConfigObject, runRunnerInit } from './chunk-7C4T5BGN.js';
4
+ import './chunk-BEZSECPA.js';
5
+ import './chunk-E5DC4VZL.js';
6
6
  import './chunk-3FMPZPJQ.js';
7
7
  import './chunk-N5FOE5PS.js';
8
8
  import './chunk-OGFGZQA3.js';
9
- import './chunk-VVIRHTH4.js';
9
+ import './chunk-2GBCTEN4.js';
10
10
  import './chunk-QOZKPLVJ.js';
11
- import './chunk-JSUUXA5W.js';
11
+ import './chunk-CJGQQZWB.js';
12
12
  import './chunk-CX22S5BA.js';
13
- import './chunk-6CXYORUS.js';
14
- import './chunk-S6IUUNCD.js';
13
+ import './chunk-QKFB4K7X.js';
14
+ import './chunk-RSNSZ2LJ.js';
15
15
  import './chunk-DTDZXDQ3.js';
16
16
  import './chunk-ZQ5JGHUO.js';
17
17
  import './chunk-BFESLKPP.js';
@@ -23,7 +23,7 @@ import './chunk-N6LURUEF.js';
23
23
  import './chunk-YRYMNBGQ.js';
24
24
  import './chunk-UXYLWVTQ.js';
25
25
  import './chunk-7RQ73DLO.js';
26
- import './chunk-M6G7TJVF.js';
26
+ import './chunk-4Q7OMKAT.js';
27
27
  import './chunk-WZBHBH3J.js';
28
28
  import './chunk-RWQWPZB4.js';
29
29
  import './chunk-ZJSNLVCE.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-R2UYH4QV.js';
3
+ import { summarizeChecks, summaryText, renderDoctorText } from './chunk-EOWWTFUU.js';
4
4
  import './chunk-F47JBIAW.js';
5
5
  import './chunk-BKO6JEZI.js';
6
6
  import './chunk-DTDZXDQ3.js';