@outerlayer/cli 0.14.1 → 0.15.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 (28) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/build-info.json +1 -1
  3. package/dist/{check-SRGR36KI.js → check-2JSSXCKJ.js} +8 -8
  4. package/dist/{chunk-FI5UYJMQ.js → chunk-ADJRGVZC.js} +1 -1
  5. package/dist/{chunk-4OGPT6I2.js → chunk-ASOSIKA4.js} +2 -2
  6. package/dist/{chunk-SMHOCDCI.js → chunk-F7GBYX2P.js} +3 -3
  7. package/dist/{chunk-Q2UK3C4P.js → chunk-HXLMZOKU.js} +2 -2
  8. package/dist/{chunk-SWHQ4LUM.js → chunk-JR6ERP3M.js} +20 -2
  9. package/dist/{chunk-NHDVD7DU.js → chunk-NXUH742G.js} +10 -10
  10. package/dist/{chunk-HFKQIZXL.js → chunk-QLTYTPYU.js} +2 -2
  11. package/dist/{chunk-RBKIH5ST.js → chunk-UUDDPNRJ.js} +1 -1
  12. package/dist/{chunk-JYIEHQIF.js → chunk-Z3NOIFDR.js} +1 -1
  13. package/dist/{cli-UW2H3UUW.js → cli-RGGXQTWI.js} +30 -30
  14. package/dist/{command-5LD7G2QQ.js → command-ETUAEXP2.js} +3 -3
  15. package/dist/{doctor-H7REBSLQ.js → doctor-CORFPYY6.js} +5 -5
  16. package/dist/index.js +1 -1
  17. package/dist/{init-UBXK6MF7.js → init-MIC37V6J.js} +4 -4
  18. package/dist/{init-NTXA3SN7.js → init-OPB7HHXO.js} +4 -4
  19. package/dist/{init-cmd-NARDUPIG.js → init-cmd-JR3RKNFB.js} +2 -2
  20. package/dist/{loop-SW2M5VDD.js → loop-QNSM5GXS.js} +8 -8
  21. package/dist/{machine-U66FKVDP.js → machine-IT6GG7FF.js} +3 -3
  22. package/dist/{runner-key-3JSMDRJA.js → runner-key-7SSNMUBQ.js} +4 -4
  23. package/dist/{status-STZYPU3W.js → status-7ZX57OFJ.js} +3 -3
  24. package/dist/{work-claim-cmd-LY4U6QHN.js → work-claim-cmd-A6IS6CQ7.js} +3 -3
  25. package/dist/{work-cmd-RVRQ32EH.js → work-cmd-EQSW5DTD.js} +1 -1
  26. package/dist/{work-comment-cmd-FFUM4TJU.js → work-comment-cmd-7VLKI7FN.js} +1 -1
  27. package/dist/{work-open-pr-cmd-HLDWP4T2.js → work-open-pr-cmd-JEVD4HMQ.js} +1 -1
  28. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @outerlayer/cli
2
2
 
3
+ ## 0.15.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9f42028: `outerlayer work status` now shows the acceptance criteria recorded for an item, in a Criteria section marked "drafted by the build" when the build wrote them, and as `criteria` in `--json`. The `get_work_item` MCP tool returns the same field.
8
+
9
+ ### Patch Changes
10
+
11
+ - e5b5713: A runner with `runner.update.maxWaitHours` set to 0 now claims nothing while a build runs and an update is pending. A clock tick between two reads in the same pass could leave the wait looking one millisecond short and let that pass claim work.
12
+ - 8d3eacb: Update the runner protocol contract to match the gateway's repository governance answer.
13
+
3
14
  ## 0.14.1
4
15
 
5
16
  ### Patch Changes
@@ -1 +1 @@
1
- {"id":"2026-10-09T00:29:08.046Z+2d52691","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-09T12:01:54.751Z+00e38ff","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-NHDVD7DU.js';
4
- import './chunk-4OGPT6I2.js';
3
+ import { probeCredentials } from './chunk-NXUH742G.js';
4
+ import './chunk-ASOSIKA4.js';
5
5
  import './chunk-O765JR4W.js';
6
6
  import './chunk-UGP76IZ5.js';
7
7
  import './chunk-3JVYMD4G.js';
@@ -9,24 +9,24 @@ import './chunk-YETTWTAY.js';
9
9
  import './chunk-RMWLBUCJ.js';
10
10
  import './chunk-I2UOAV7X.js';
11
11
  import './chunk-HYZRY4KZ.js';
12
- import './chunk-FI5UYJMQ.js';
12
+ import './chunk-ADJRGVZC.js';
13
13
  import './chunk-KFRM23WD.js';
14
14
  import './chunk-MSASO5O4.js';
15
15
  import './chunk-HHJDN6AU.js';
16
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem } from './chunk-SMHOCDCI.js';
16
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem } from './chunk-F7GBYX2P.js';
17
17
  import './chunk-YYYRBYWG.js';
18
18
  import './chunk-TI7B7UEO.js';
19
19
  import './chunk-TBT347UY.js';
20
- import './chunk-Q2UK3C4P.js';
21
- import './chunk-JYIEHQIF.js';
22
- import './chunk-RBKIH5ST.js';
20
+ import './chunk-HXLMZOKU.js';
21
+ import './chunk-Z3NOIFDR.js';
22
+ import './chunk-UUDDPNRJ.js';
23
23
  import './chunk-KMDLFI4P.js';
24
24
  import './chunk-QKFB4K7X.js';
25
25
  import './chunk-RSNSZ2LJ.js';
26
26
  import './chunk-T5VPP6H7.js';
27
27
  import './chunk-RLYZLUQ7.js';
28
28
  import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
29
- import './chunk-SWHQ4LUM.js';
29
+ import './chunk-JR6ERP3M.js';
30
30
  import './chunk-NPQWKGUA.js';
31
31
  import './chunk-IP7BIBXJ.js';
32
32
  import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-22RMZBGW.js';
@@ -4,6 +4,6 @@ import { createRequire } from 'node:module';
4
4
  createRequire(import.meta.url);
5
5
 
6
6
  // src/runner/protocol.ts
7
- var RUNNER_PROTOCOL = 16;
7
+ var RUNNER_PROTOCOL = 17;
8
8
 
9
9
  export { RUNNER_PROTOCOL };
@@ -4,11 +4,11 @@ import { writeJobFile, readJobFile } from './chunk-RMWLBUCJ.js';
4
4
  import { DOCKERD_LOG } from './chunk-HYZRY4KZ.js';
5
5
  import { senderPidfile } from './chunk-KFRM23WD.js';
6
6
  import { installScrubContext } from './chunk-MSASO5O4.js';
7
- import { AssetError, describeCallFailure, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, refusalCode, resolveAgentUser, AgentUserError, runBuildSteps, removeStagedContext, stageGovernedContext, shellQuote, createRunnerLog, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, formatDuration, retrySend, formatClock, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript } from './chunk-RBKIH5ST.js';
7
+ import { AssetError, describeCallFailure, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, refusalCode, resolveAgentUser, AgentUserError, runBuildSteps, removeStagedContext, stageGovernedContext, shellQuote, createRunnerLog, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, formatDuration, retrySend, formatClock, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript } from './chunk-UUDDPNRJ.js';
8
8
  import { childEnvironment } from './chunk-KMDLFI4P.js';
9
9
  import { waitForAgent, vmExecArgs } from './chunk-QKFB4K7X.js';
10
10
  import { socketPathProblem, vsockLinks, linkVsockSockets } from './chunk-RSNSZ2LJ.js';
11
- import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-SWHQ4LUM.js';
11
+ import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-JR6ERP3M.js';
12
12
  import { isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-22RMZBGW.js';
13
13
  import { readBranchHead, diffBetween, fetchCommit } from './chunk-R7PF5OOU.js';
14
14
  import { isSameProcess, startTimeOf } from './chunk-N5FOE5PS.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { isPlaceholderCommand } from './chunk-Q2UK3C4P.js';
4
- import { describeCallFailure } from './chunk-RBKIH5ST.js';
5
- import { WorkCommandError, getJson } from './chunk-SWHQ4LUM.js';
3
+ import { isPlaceholderCommand } from './chunk-HXLMZOKU.js';
4
+ import { describeCallFailure } from './chunk-UUDDPNRJ.js';
5
+ import { WorkCommandError, getJson } from './chunk-JR6ERP3M.js';
6
6
  import { builtinKind } from './chunk-22RMZBGW.js';
7
7
  import { CLAUDE_CREDENTIAL_VARIABLES, claudeCredential } from './chunk-4Q7OMKAT.js';
8
8
  import { sanitizeTerminal } from './chunk-WUYTWNMA.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-JYIEHQIF.js';
4
- import { MIN_ENGINE_MAJOR } from './chunk-RBKIH5ST.js';
3
+ import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-Z3NOIFDR.js';
4
+ import { MIN_ENGINE_MAJOR } from './chunk-UUDDPNRJ.js';
5
5
  import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-T5VPP6H7.js';
6
6
  import { runnerCredentialProblem } from './chunk-22RMZBGW.js';
7
7
  import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ZM2IMMYN.js';
@@ -450,6 +450,24 @@ async function runWorkRemove(opts) {
450
450
  if (!opts.quiet) process.stdout.write(output + "\n");
451
451
  return { data, output };
452
452
  }
453
+ function statusOutput(data, json) {
454
+ if (json) return JSON.stringify(data);
455
+ const document = JSON.stringify(data, null, 2);
456
+ const criteria = data.criteria;
457
+ if (criteria === void 0) return document;
458
+ if (criteria === null || !Array.isArray(criteria.items)) return `${document}
459
+
460
+ Criteria: none recorded`;
461
+ const mark = criteria.drafted === true ? ` ${C.dim}(drafted by the build)${C.reset}` : "";
462
+ const lines = criteria.items.map((item) => {
463
+ const proof = typeof item.proof === "string" ? ` ${C.dim}[proof: ${sanitizeTerminal(item.proof)}]${C.reset}` : "";
464
+ return ` ${sanitizeTerminal(String(item.id))} ${sanitizeTerminal(String(item.text))}${proof}`;
465
+ });
466
+ return `${document}
467
+
468
+ Criteria${mark}
469
+ ${lines.join("\n")}`;
470
+ }
453
471
  async function runWorkStatus(opts) {
454
472
  const cwd = opts.cwd ?? process.cwd();
455
473
  await connectIfOneFits(opts);
@@ -463,7 +481,7 @@ async function runWorkStatus(opts) {
463
481
  creds.appId,
464
482
  opts.fetchImpl ?? defaultFetch
465
483
  );
466
- const body = opts.json ? JSON.stringify(data2) : JSON.stringify(data2, null, 2);
484
+ const body = statusOutput(data2, opts.json === true);
467
485
  if (!opts.quiet) process.stdout.write(body + "\n");
468
486
  return { data: data2, output: body };
469
487
  }
@@ -476,7 +494,7 @@ async function runWorkStatus(opts) {
476
494
  throw new WorkCommandError(`no live item for ${repository}#${number}`);
477
495
  }
478
496
  const { data } = await getJson(creds.url, `/v1/work-items/${item.id}`, creds.apiKey, creds.appId, fetchImpl);
479
- const output = opts.json ? JSON.stringify(data) : `${JSON.stringify(data, null, 2)}`;
497
+ const output = statusOutput(data, opts.json === true);
480
498
  if (!opts.quiet) process.stdout.write(output + "\n");
481
499
  return { data, output };
482
500
  }
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LEASE_SECONDS, releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, ALREADY_RELEASED } from './chunk-4OGPT6I2.js';
3
+ import { LEASE_SECONDS, releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, ALREADY_RELEASED } from './chunk-ASOSIKA4.js';
4
4
  import { writePendingUpdate } from './chunk-O765JR4W.js';
5
5
  import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-UGP76IZ5.js';
6
6
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
7
7
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-YETTWTAY.js';
8
8
  import { writeJobFile, readJobFile, readJobFileChecked } from './chunk-RMWLBUCJ.js';
9
9
  import { compareVersions, satisfiesRange } from './chunk-I2UOAV7X.js';
10
- import { RUNNER_PROTOCOL } from './chunk-FI5UYJMQ.js';
11
- import { placeholderQueues, placeholderProblem } from './chunk-SMHOCDCI.js';
10
+ import { RUNNER_PROTOCOL } from './chunk-ADJRGVZC.js';
11
+ import { placeholderQueues, placeholderProblem } from './chunk-F7GBYX2P.js';
12
12
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
13
13
  import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, cleanVersions, isInLayout, stagingDir } from './chunk-TI7B7UEO.js';
14
14
  import { RepoFilter } from './chunk-TBT347UY.js';
15
- import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, provisionContainer, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandLine, BuildTokens, classifyRefusal, refusalCode, measureDisk, createRunnerLog, setUpRunnerCgroup, parseCpuList, ensureTunnel, keepGhConfigCurrent, createContainerRuntime, formatClock } from './chunk-RBKIH5ST.js';
15
+ import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, provisionContainer, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandLine, BuildTokens, classifyRefusal, refusalCode, measureDisk, createRunnerLog, setUpRunnerCgroup, parseCpuList, ensureTunnel, keepGhConfigCurrent, createContainerRuntime, formatClock } from './chunk-UUDDPNRJ.js';
16
16
  import { spawnRun } from './chunk-KMDLFI4P.js';
17
17
  import { checkFit } from './chunk-RLYZLUQ7.js';
18
- import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-SWHQ4LUM.js';
18
+ import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-JR6ERP3M.js';
19
19
  import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-22RMZBGW.js';
20
20
  import { startTimeOf, claimPidFile, readPidFile, isSameProcess, releasePidFile } from './chunk-N5FOE5PS.js';
21
21
  import { builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, BUILD_LABEL, RUNNER_LABEL } from './chunk-4NPZVMJU.js';
@@ -958,9 +958,9 @@ function considerNamedVersion(state, named) {
958
958
  logOf(state).line(`this runner cannot update itself to ${named}: ${blocker}`);
959
959
  }
960
960
  }
961
- function adoptUpdateWait(state, version) {
961
+ function adoptUpdateWait(state, version, nowMs) {
962
962
  const previous = state.updateWait;
963
- const wait = { version, sinceMs: previous?.sinceMs ?? nowOf(state).getTime(), holdSinceMs: previous?.holdSinceMs };
963
+ const wait = { version, sinceMs: previous?.sinceMs ?? nowMs, holdSinceMs: previous?.holdSinceMs };
964
964
  state.updateWait = wait;
965
965
  return wait;
966
966
  }
@@ -1012,7 +1012,7 @@ function runningItems(state) {
1012
1012
  function holdForUpdate(state, version, mayHold = true) {
1013
1013
  const log = logOf(state);
1014
1014
  const nowMs = nowOf(state).getTime();
1015
- const wait = adoptUpdateWait(state, version);
1015
+ const wait = adoptUpdateWait(state, version, nowMs);
1016
1016
  const failed2 = readLastUpdate(state.config.configPath);
1017
1017
  const failedAtMs = failed2?.to === version && failed2.outcome === "retrying" ? new Date(failed2.at ?? Number.NaN).getTime() : Number.NaN;
1018
1018
  if (failedAtMs < wait.sinceMs) wait.sinceMs = failedAtMs;
@@ -1315,7 +1315,7 @@ var CLAIM_REFUSAL_CODES = new Set(
1315
1315
  "pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected branch_claimed_elsewhere".split(" ")
1316
1316
  );
1317
1317
  async function tryClaimAndStart(state, item, queue) {
1318
- const { postJson: postJson2 } = await import('./work-cmd-RVRQ32EH.js');
1318
+ const { postJson: postJson2 } = await import('./work-cmd-EQSW5DTD.js');
1319
1319
  const log = logOf(state);
1320
1320
  const hostKey = await loadHostKey(state.config.configPath);
1321
1321
  const claim = await retrySend(
@@ -2072,7 +2072,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
2072
2072
  const outcome = await onStartUnderMarker({
2073
2073
  configPath,
2074
2074
  own: ownVersionOf(deps),
2075
- check: update.check ? () => update.check(configPath) : async () => (await import('./check-SRGR36KI.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
2075
+ check: update.check ? () => update.check(configPath) : async () => (await import('./check-2JSSXCKJ.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
2076
2076
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
2077
2077
  log
2078
2078
  });
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { checkStarterFiles } from './chunk-MTF3PHVZ.js';
4
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-SWHQ4LUM.js';
4
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-JR6ERP3M.js';
5
5
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-F47JBIAW.js';
6
6
  import { isLinkedRepository } from './chunk-YDSMROTB.js';
7
7
  import { sanitizeTerminal } from './chunk-WUYTWNMA.js';
@@ -1095,7 +1095,7 @@ async function gatherDoctorChecks() {
1095
1095
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1096
1096
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1097
1097
  } else if (hasRunnerBlock(configPath)) {
1098
- const { runnerHostChecks } = await import('./doctor-H7REBSLQ.js');
1098
+ const { runnerHostChecks } = await import('./doctor-CORFPYY6.js');
1099
1099
  const hooks = (() => {
1100
1100
  try {
1101
1101
  return loadRunnerConfig(configPath).hooks;
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
3
3
  import { createDockerHost, childEnvironment, spawnRun } from './chunk-KMDLFI4P.js';
4
4
  import { execCapture } from './chunk-QKFB4K7X.js';
5
5
  import { GUEST_CID } from './chunk-RSNSZ2LJ.js';
6
- import { WorkCommandError, postJson } from './chunk-SWHQ4LUM.js';
6
+ import { WorkCommandError, postJson } from './chunk-JR6ERP3M.js';
7
7
  import { hostAllowed } from './chunk-UXYLWVTQ.js';
8
8
  import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-R7PF5OOU.js';
9
9
  import { RecipeError } from './chunk-QOZKPLVJ.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { MIN_ENGINE_MAJOR } from './chunk-RBKIH5ST.js';
3
+ import { MIN_ENGINE_MAJOR } from './chunk-UUDDPNRJ.js';
4
4
  import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-CX22S5BA.js';
5
5
  import { spawnSync } from 'child_process';
6
6
  import { existsSync, accessSync, constants, statSync, readFileSync } from 'fs';
@@ -1,8 +1,8 @@
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-HFKQIZXL.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-QLTYTPYU.js';
4
4
  import './chunk-MTF3PHVZ.js';
5
- import './chunk-SWHQ4LUM.js';
5
+ import './chunk-JR6ERP3M.js';
6
6
  import './chunk-NPQWKGUA.js';
7
7
  import './chunk-IP7BIBXJ.js';
8
8
  import './chunk-F47JBIAW.js';
@@ -3872,7 +3872,7 @@ function buildProgram(argv = process.argv) {
3872
3872
  else process.stdout.write(outcome.text);
3873
3873
  return;
3874
3874
  }
3875
- const { runInitCommand } = await import('./init-cmd-NARDUPIG.js');
3875
+ const { runInitCommand } = await import('./init-cmd-JR3RKNFB.js');
3876
3876
  const code = await runInitCommand(
3877
3877
  { json: opts.json, factory: opts.factory },
3878
3878
  {
@@ -4289,7 +4289,7 @@ function registerWorkCommands(program2) {
4289
4289
  "\n outerlayer work build --issue 42 # a host builds it\n outerlayer work build --item 7 # retry an item already on Work\n outerlayer work build --issue 42 --local # you build it\n outerlayer work build --issue ENG-123 --tracker linear # a Linear issue\n\nWithout --local, records a build request: a host takes the item when it\nhas a free slot. It never links the calling session and never takes a\nlease, even run from inside one.\n\nWith --local, puts the item on Work with no build request, so no host\ntakes it, and prints the line that starts your session on it. That\nsession links itself and holds the item's lease while it works.\n"
4290
4290
  ).action(async (opts) => {
4291
4291
  warnIfApiKeyFlag(opts);
4292
- const { runWorkBuild, WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4292
+ const { runWorkBuild, WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4293
4293
  try {
4294
4294
  await runWorkBuild(opts);
4295
4295
  } catch (err) {
@@ -4305,7 +4305,7 @@ function registerWorkCommands(program2) {
4305
4305
  "\n outerlayer work link-session 42\n\nNames an item that already exists on the calling session \u2014 it never\ncreates one. Create one with `outerlayer work build --local`. Linking\nthe same session to the same item twice is a no-op. Also takes or\nrenews that session's own 20-minute lease, unless --no-lease or\n--ended is given, or another worker already holds a live one.\n"
4306
4306
  ).action(async (number, opts) => {
4307
4307
  warnIfApiKeyFlag(opts);
4308
- const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4308
+ const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4309
4309
  try {
4310
4310
  await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
4311
4311
  } catch (err) {
@@ -4330,8 +4330,8 @@ most one action flag may be given.
4330
4330
  `
4331
4331
  ).action(async (opts) => {
4332
4332
  warnIfApiKeyFlag(opts);
4333
- const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-FFUM4TJU.js');
4334
- const { WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4333
+ const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-7VLKI7FN.js');
4334
+ const { WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4335
4335
  try {
4336
4336
  await runWorkComment(opts);
4337
4337
  } catch (err) {
@@ -4347,8 +4347,8 @@ most one action flag may be given.
4347
4347
  "\n outerlayer work threads --item 7\n\nPrints the item's general thread, then one thread per acceptance\ncriterion that carries proof or a comment, each with who is waiting\non whom next.\n"
4348
4348
  ).action(async (opts) => {
4349
4349
  warnIfApiKeyFlag(opts);
4350
- const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-FFUM4TJU.js');
4351
- const { WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4350
+ const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-7VLKI7FN.js');
4351
+ const { WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4352
4352
  try {
4353
4353
  await runWorkThreads(opts);
4354
4354
  } catch (err) {
@@ -4370,7 +4370,7 @@ live addition remains on it.
4370
4370
  `
4371
4371
  ).action(async (opts) => {
4372
4372
  warnIfApiKeyFlag(opts);
4373
- const { runWorkRemove, WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4373
+ const { runWorkRemove, WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4374
4374
  try {
4375
4375
  await runWorkRemove(opts);
4376
4376
  } catch (err) {
@@ -4383,7 +4383,7 @@ live addition remains on it.
4383
4383
  });
4384
4384
  workCmd.command("status").description("Show one item's stage, gate ledger, and additions").option("--item <number>", "the item's number inside this factory").option("--issue <number>", "issue number").option("--repo <owner/name>", "repository (default: the current checkout's remote)").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) => {
4385
4385
  warnIfApiKeyFlag(opts);
4386
- const { runWorkStatus, WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4386
+ const { runWorkStatus, WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4387
4387
  try {
4388
4388
  await runWorkStatus(opts);
4389
4389
  } catch (err) {
@@ -4396,7 +4396,7 @@ live addition remains on it.
4396
4396
  });
4397
4397
  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) => {
4398
4398
  warnIfApiKeyFlag(opts);
4399
- const { runWorkList, WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4399
+ const { runWorkList, WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4400
4400
  try {
4401
4401
  await runWorkList(opts);
4402
4402
  } catch (err) {
@@ -4412,7 +4412,7 @@ live addition remains on it.
4412
4412
  "\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"
4413
4413
  ).action(async (opts) => {
4414
4414
  warnIfApiKeyFlag(opts);
4415
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-LY4U6QHN.js');
4415
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-A6IS6CQ7.js');
4416
4416
  try {
4417
4417
  await runWorkClaim(opts);
4418
4418
  } catch (err) {
@@ -4428,7 +4428,7 @@ live addition remains on it.
4428
4428
  "\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"
4429
4429
  ).action(async (opts) => {
4430
4430
  warnIfApiKeyFlag(opts);
4431
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-LY4U6QHN.js');
4431
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-A6IS6CQ7.js');
4432
4432
  try {
4433
4433
  await runWorkRenew(opts);
4434
4434
  } catch (err) {
@@ -4447,7 +4447,7 @@ live addition remains on it.
4447
4447
  "\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"
4448
4448
  ).action(async (opts) => {
4449
4449
  warnIfApiKeyFlag(opts);
4450
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-LY4U6QHN.js');
4450
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-A6IS6CQ7.js');
4451
4451
  try {
4452
4452
  await runWorkRelease(opts);
4453
4453
  } catch (err) {
@@ -4479,8 +4479,8 @@ live addition remains on it.
4479
4479
  '\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'
4480
4480
  ).action(async (opts) => {
4481
4481
  warnIfApiKeyFlag(opts);
4482
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-HLDWP4T2.js');
4483
- const { WorkCommandError } = await import('./work-cmd-RVRQ32EH.js');
4482
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-JEVD4HMQ.js');
4483
+ const { WorkCommandError } = await import('./work-cmd-EQSW5DTD.js');
4484
4484
  try {
4485
4485
  await runWorkOpenPr(opts);
4486
4486
  } catch (err) {
@@ -4497,7 +4497,7 @@ function registerRunnerCommands(program2) {
4497
4497
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4498
4498
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4499
4499
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-N3C6DFQA.js');
4500
- const { start, RunnerStartError } = await import('./loop-SW2M5VDD.js');
4500
+ const { start, RunnerStartError } = await import('./loop-QNSM5GXS.js');
4501
4501
  const { RunnerAlreadyRunningError } = await import('./pidfile-UZRH774M.js');
4502
4502
  const configPath = opts.config ?? defaultRunnerConfigPath();
4503
4503
  try {
@@ -4513,7 +4513,7 @@ function registerRunnerCommands(program2) {
4513
4513
  });
4514
4514
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
4515
4515
  const { defaultRunnerConfigPath } = await import('./config-N3C6DFQA.js');
4516
- const { runRunnerCheck } = await import('./check-SRGR36KI.js');
4516
+ const { runRunnerCheck } = await import('./check-2JSSXCKJ.js');
4517
4517
  const configPath = opts.config ?? defaultRunnerConfigPath();
4518
4518
  const result = await runRunnerCheck(configPath);
4519
4519
  if (!result.ok) {
@@ -4542,7 +4542,7 @@ function registerRunnerCommands(program2) {
4542
4542
  }
4543
4543
  try {
4544
4544
  if (opts.service === true) {
4545
- const { installServiceCommand } = await import('./command-5LD7G2QQ.js');
4545
+ const { installServiceCommand } = await import('./command-ETUAEXP2.js');
4546
4546
  const result2 = await installServiceCommand({
4547
4547
  configPath,
4548
4548
  print: opts.print,
@@ -4598,7 +4598,7 @@ To keep it running, run ${C.yellow}outerlayer runner install --service${C.reset}
4598
4598
  return;
4599
4599
  }
4600
4600
  const { defaultRunnerConfigPath } = await import('./config-N3C6DFQA.js');
4601
- const { uninstallServiceCommand } = await import('./command-5LD7G2QQ.js');
4601
+ const { uninstallServiceCommand } = await import('./command-ETUAEXP2.js');
4602
4602
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
4603
4603
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
4604
4604
  `);
@@ -4609,10 +4609,10 @@ To keep it running, run ${C.yellow}outerlayer runner install --service${C.reset}
4609
4609
  "\nWith no apiKey in the config file, and a login saved by `outerlayer login`,\nrunner init creates the runner key itself, with the Runner preset, on the\nfactory --app-id names (or OUTERLAYER_APP_ID, or this repository's\nconnection). Your login needs factory_keys.insert on that factory.\n\nWith --agent claude, the queue commands start Claude Code instead of the\nplaceholder, and Claude's credential is read from stdin: a token from\n`claude setup-token` (sk-ant-oat...) or an API key (sk-ant-api...). It is\nnever printed, and is stored in the runner.env beside the config with mode\n600. Other lines in the file are kept. With nothing piped, a credential\nalready in runner.env is used.\n\n printf '%s' \"$CLAUDE_CODE_OAUTH_TOKEN\" | outerlayer runner init --agent claude\n"
4610
4610
  ).action(async (opts) => {
4611
4611
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-N3C6DFQA.js');
4612
- const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-NTXA3SN7.js');
4613
- const { createRunnerKey, runnerKeyLogin } = await import('./runner-key-3JSMDRJA.js');
4614
- const { detectMachine } = await import('./machine-U66FKVDP.js');
4615
- const { chooseVm, runVmInit, VmInitError } = await import('./init-UBXK6MF7.js');
4612
+ const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-OPB7HHXO.js');
4613
+ const { createRunnerKey, runnerKeyLogin } = await import('./runner-key-7SSNMUBQ.js');
4614
+ const { detectMachine } = await import('./machine-IT6GG7FF.js');
4615
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-MIC37V6J.js');
4616
4616
  const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-XTC53CHN.js');
4617
4617
  const configPath = opts.config ?? defaultRunnerConfigPath();
4618
4618
  if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
@@ -4762,7 +4762,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
4762
4762
  let serviceUp = false;
4763
4763
  let restart;
4764
4764
  if (installedLayout) {
4765
- const { installServiceCommand } = await import('./command-5LD7G2QQ.js');
4765
+ const { installServiceCommand } = await import('./command-ETUAEXP2.js');
4766
4766
  const service = await installServiceCommand({
4767
4767
  configPath,
4768
4768
  entryPath: process.argv[1] ?? "",
@@ -4873,15 +4873,15 @@ Next:
4873
4873
  });
4874
4874
  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) => {
4875
4875
  const { defaultRunnerConfigPath } = await import('./config-N3C6DFQA.js');
4876
- const { requestStop } = await import('./loop-SW2M5VDD.js');
4876
+ const { requestStop } = await import('./loop-QNSM5GXS.js');
4877
4877
  const configPath = opts.config ?? defaultRunnerConfigPath();
4878
4878
  await requestStop(configPath, Boolean(opts.now));
4879
4879
  });
4880
4880
  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) => {
4881
4881
  const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-N3C6DFQA.js');
4882
4882
  const { jobsDir, runnerDir } = await import('./paths-OYKMVYJP.js');
4883
- const { listJobFiles, runnerProcessState } = await import('./loop-SW2M5VDD.js');
4884
- const { renderStatus } = await import('./status-STZYPU3W.js');
4883
+ const { listJobFiles, runnerProcessState } = await import('./loop-QNSM5GXS.js');
4884
+ const { renderStatus } = await import('./status-7ZX57OFJ.js');
4885
4885
  const { readHousekeepingRecord } = await import('./record-C43U4PKS.js');
4886
4886
  const path2 = await import('path');
4887
4887
  const configPath = opts.config ?? defaultRunnerConfigPath();
@@ -4937,7 +4937,7 @@ Next:
4937
4937
  });
4938
4938
  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) => {
4939
4939
  const { defaultRunnerConfigPath } = await import('./config-N3C6DFQA.js');
4940
- const { listJobFiles } = await import('./loop-SW2M5VDD.js');
4940
+ const { listJobFiles } = await import('./loop-QNSM5GXS.js');
4941
4941
  const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-H55NWW4H.js');
4942
4942
  const configPath = opts.config ?? defaultRunnerConfigPath();
4943
4943
  const item = parseTrackerNumber(itemArg);
@@ -5,13 +5,13 @@ import { runRunnerInstall, launcherSummary, restartNote } from './chunk-ERI5GBNI
5
5
  import './chunk-I2UOAV7X.js';
6
6
  import './chunk-PTW6W5NR.js';
7
7
  import { currentLink, execStartCommand } from './chunk-TI7B7UEO.js';
8
- import { detectMachine } from './chunk-JYIEHQIF.js';
9
- import './chunk-RBKIH5ST.js';
8
+ import { detectMachine } from './chunk-Z3NOIFDR.js';
9
+ import './chunk-UUDDPNRJ.js';
10
10
  import './chunk-KMDLFI4P.js';
11
11
  import './chunk-QKFB4K7X.js';
12
12
  import './chunk-RSNSZ2LJ.js';
13
13
  import { installService, uninstallService, realTaskScheduler } from './chunk-RLYZLUQ7.js';
14
- import './chunk-SWHQ4LUM.js';
14
+ import './chunk-JR6ERP3M.js';
15
15
  import './chunk-NPQWKGUA.js';
16
16
  import './chunk-IP7BIBXJ.js';
17
17
  import { runnerVmOf, loadRunnerConfig } from './chunk-22RMZBGW.js';
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-SMHOCDCI.js';
3
+ import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-F7GBYX2P.js';
4
4
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
5
5
  import { launcherCheck } from './chunk-PTW6W5NR.js';
6
6
  import './chunk-TI7B7UEO.js';
7
7
  import { RepoFilter } from './chunk-TBT347UY.js';
8
- import './chunk-Q2UK3C4P.js';
9
- import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-JYIEHQIF.js';
10
- import { MIN_ENGINE_MAJOR } from './chunk-RBKIH5ST.js';
8
+ import './chunk-HXLMZOKU.js';
9
+ import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-Z3NOIFDR.js';
10
+ import { MIN_ENGINE_MAJOR } from './chunk-UUDDPNRJ.js';
11
11
  import { resolveDevcontainerCli, spawnRun } from './chunk-KMDLFI4P.js';
12
12
  import './chunk-QKFB4K7X.js';
13
13
  import './chunk-RSNSZ2LJ.js';
14
14
  import './chunk-T5VPP6H7.js';
15
15
  import './chunk-RLYZLUQ7.js';
16
16
  import './chunk-6MZSX4M7.js';
17
- import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-SWHQ4LUM.js';
17
+ import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-JR6ERP3M.js';
18
18
  import './chunk-NPQWKGUA.js';
19
19
  import './chunk-IP7BIBXJ.js';
20
20
  import { builtinKind } from './chunk-22RMZBGW.js';
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-WYQD6D7T.js')).recordLinkExitFailure(argv);
25
- var { runCli } = await import('./cli-UW2H3UUW.js');
25
+ var { runCli } = await import('./cli-RGGXQTWI.js');
26
26
  await runCli(process.argv);
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { npmSupportsProvenance } from './chunk-YETTWTAY.js';
4
- import { RunnerInitError, readConfigObject } from './chunk-Q2UK3C4P.js';
5
- import './chunk-JYIEHQIF.js';
6
- import './chunk-RBKIH5ST.js';
4
+ import { RunnerInitError, readConfigObject } from './chunk-HXLMZOKU.js';
5
+ import './chunk-Z3NOIFDR.js';
6
+ import './chunk-UUDDPNRJ.js';
7
7
  import './chunk-KMDLFI4P.js';
8
8
  import './chunk-QKFB4K7X.js';
9
9
  import './chunk-RSNSZ2LJ.js';
10
10
  import './chunk-T5VPP6H7.js';
11
11
  import { checkFit, VM_SERVICE_NAME, RUNNER_RESERVE_BYTES } from './chunk-RLYZLUQ7.js';
12
12
  import './chunk-6MZSX4M7.js';
13
- import './chunk-SWHQ4LUM.js';
13
+ import './chunk-JR6ERP3M.js';
14
14
  import './chunk-NPQWKGUA.js';
15
15
  import './chunk-IP7BIBXJ.js';
16
16
  import { runnerCredentialProblem, resolveBuild, resolveHousekeeping } from './chunk-22RMZBGW.js';
@@ -1,15 +1,15 @@
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-Q2UK3C4P.js';
4
- import './chunk-JYIEHQIF.js';
5
- import './chunk-RBKIH5ST.js';
3
+ export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, prepareRunnerInit, readConfigObject, runRunnerInit, writeRunnerInit } from './chunk-HXLMZOKU.js';
4
+ import './chunk-Z3NOIFDR.js';
5
+ import './chunk-UUDDPNRJ.js';
6
6
  import './chunk-KMDLFI4P.js';
7
7
  import './chunk-QKFB4K7X.js';
8
8
  import './chunk-RSNSZ2LJ.js';
9
9
  import './chunk-T5VPP6H7.js';
10
10
  import './chunk-RLYZLUQ7.js';
11
11
  import './chunk-6MZSX4M7.js';
12
- import './chunk-SWHQ4LUM.js';
12
+ import './chunk-JR6ERP3M.js';
13
13
  import './chunk-NPQWKGUA.js';
14
14
  import './chunk-IP7BIBXJ.js';
15
15
  import './chunk-22RMZBGW.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { summarizeChecks, summaryText, renderDoctorText } from './chunk-HFKQIZXL.js';
3
+ import { summarizeChecks, summaryText, renderDoctorText } from './chunk-QLTYTPYU.js';
4
4
  import './chunk-MTF3PHVZ.js';
5
- import './chunk-SWHQ4LUM.js';
5
+ import './chunk-JR6ERP3M.js';
6
6
  import './chunk-NPQWKGUA.js';
7
7
  import './chunk-IP7BIBXJ.js';
8
8
  import './chunk-F47JBIAW.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { RunnerStartError, listJobFiles, probeCredentials, requestStop, runnerProcessState, start, tick, watchTick } from './chunk-NHDVD7DU.js';
4
- import './chunk-4OGPT6I2.js';
3
+ export { RunnerStartError, listJobFiles, probeCredentials, requestStop, runnerProcessState, start, tick, watchTick } from './chunk-NXUH742G.js';
4
+ import './chunk-ASOSIKA4.js';
5
5
  import './chunk-O765JR4W.js';
6
6
  import './chunk-UGP76IZ5.js';
7
7
  import './chunk-3JVYMD4G.js';
@@ -9,24 +9,24 @@ import './chunk-YETTWTAY.js';
9
9
  import './chunk-RMWLBUCJ.js';
10
10
  import './chunk-I2UOAV7X.js';
11
11
  import './chunk-HYZRY4KZ.js';
12
- import './chunk-FI5UYJMQ.js';
12
+ import './chunk-ADJRGVZC.js';
13
13
  import './chunk-KFRM23WD.js';
14
14
  import './chunk-MSASO5O4.js';
15
15
  import './chunk-HHJDN6AU.js';
16
- import './chunk-SMHOCDCI.js';
16
+ import './chunk-F7GBYX2P.js';
17
17
  import './chunk-YYYRBYWG.js';
18
18
  import './chunk-TI7B7UEO.js';
19
19
  import './chunk-TBT347UY.js';
20
- import './chunk-Q2UK3C4P.js';
21
- import './chunk-JYIEHQIF.js';
22
- import './chunk-RBKIH5ST.js';
20
+ import './chunk-HXLMZOKU.js';
21
+ import './chunk-Z3NOIFDR.js';
22
+ import './chunk-UUDDPNRJ.js';
23
23
  import './chunk-KMDLFI4P.js';
24
24
  import './chunk-QKFB4K7X.js';
25
25
  import './chunk-RSNSZ2LJ.js';
26
26
  import './chunk-T5VPP6H7.js';
27
27
  import './chunk-RLYZLUQ7.js';
28
28
  import './chunk-6MZSX4M7.js';
29
- import './chunk-SWHQ4LUM.js';
29
+ import './chunk-JR6ERP3M.js';
30
30
  import './chunk-NPQWKGUA.js';
31
31
  import './chunk-IP7BIBXJ.js';
32
32
  import './chunk-22RMZBGW.js';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-JYIEHQIF.js';
4
- import './chunk-RBKIH5ST.js';
3
+ export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-Z3NOIFDR.js';
4
+ import './chunk-UUDDPNRJ.js';
5
5
  import './chunk-KMDLFI4P.js';
6
6
  import './chunk-QKFB4K7X.js';
7
7
  import './chunk-RSNSZ2LJ.js';
8
- import './chunk-SWHQ4LUM.js';
8
+ import './chunk-JR6ERP3M.js';
9
9
  import './chunk-NPQWKGUA.js';
10
10
  import './chunk-IP7BIBXJ.js';
11
11
  import './chunk-UXYLWVTQ.js';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { readConfigObject, RunnerInitError } from './chunk-Q2UK3C4P.js';
4
- import './chunk-JYIEHQIF.js';
5
- import './chunk-RBKIH5ST.js';
3
+ import { readConfigObject, RunnerInitError } from './chunk-HXLMZOKU.js';
4
+ import './chunk-Z3NOIFDR.js';
5
+ import './chunk-UUDDPNRJ.js';
6
6
  import './chunk-KMDLFI4P.js';
7
7
  import './chunk-QKFB4K7X.js';
8
8
  import './chunk-RSNSZ2LJ.js';
9
9
  import './chunk-T5VPP6H7.js';
10
10
  import './chunk-RLYZLUQ7.js';
11
11
  import './chunk-6MZSX4M7.js';
12
- import { postJson, WorkCommandError, getJson } from './chunk-SWHQ4LUM.js';
12
+ import { postJson, WorkCommandError, getJson } from './chunk-JR6ERP3M.js';
13
13
  import './chunk-NPQWKGUA.js';
14
14
  import './chunk-IP7BIBXJ.js';
15
15
  import { runnerCredentialProblem } from './chunk-22RMZBGW.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-4OGPT6I2.js';
3
+ import { LEASE_SECONDS, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-ASOSIKA4.js';
4
4
  import './chunk-RMWLBUCJ.js';
5
5
  import './chunk-HYZRY4KZ.js';
6
6
  import './chunk-KFRM23WD.js';
@@ -8,11 +8,11 @@ import './chunk-MSASO5O4.js';
8
8
  import './chunk-HHJDN6AU.js';
9
9
  import { formatBytes } from './chunk-YYYRBYWG.js';
10
10
  import './chunk-TBT347UY.js';
11
- import { formatDuration, formatClock, relativeToRunner } from './chunk-RBKIH5ST.js';
11
+ import { formatDuration, formatClock, relativeToRunner } from './chunk-UUDDPNRJ.js';
12
12
  import './chunk-KMDLFI4P.js';
13
13
  import './chunk-QKFB4K7X.js';
14
14
  import './chunk-RSNSZ2LJ.js';
15
- import './chunk-SWHQ4LUM.js';
15
+ import './chunk-JR6ERP3M.js';
16
16
  import './chunk-NPQWKGUA.js';
17
17
  import './chunk-IP7BIBXJ.js';
18
18
  import './chunk-22RMZBGW.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RUNNER_PROTOCOL } from './chunk-FI5UYJMQ.js';
4
- import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-SWHQ4LUM.js';
5
- export { WorkCommandError } from './chunk-SWHQ4LUM.js';
3
+ import { RUNNER_PROTOCOL } from './chunk-ADJRGVZC.js';
4
+ import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, resolveRepository, findLiveItem } from './chunk-JR6ERP3M.js';
5
+ export { WorkCommandError } from './chunk-JR6ERP3M.js';
6
6
  import './chunk-NPQWKGUA.js';
7
7
  import './chunk-IP7BIBXJ.js';
8
8
  import { defaultRunnerConfigPath } from './chunk-22RMZBGW.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-SWHQ4LUM.js';
3
+ export { WorkCommandError, environmentFacts, findLiveItem, getJson, parsePositiveInt, postJson, resolveCredentials, resolveRepository, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-JR6ERP3M.js';
4
4
  import './chunk-NPQWKGUA.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
6
  import './chunk-YDSMROTB.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, getJson } from './chunk-SWHQ4LUM.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-JR6ERP3M.js';
4
4
  import './chunk-NPQWKGUA.js';
5
5
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
6
6
  import './chunk-YDSMROTB.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { itemLabel, runWorkPr, WorkPrCommandError } from './chunk-JJEGKEFV.js';
4
- import { resolveCredentials } from './chunk-SWHQ4LUM.js';
4
+ import { resolveCredentials } from './chunk-JR6ERP3M.js';
5
5
  import './chunk-NPQWKGUA.js';
6
6
  import './chunk-IP7BIBXJ.js';
7
7
  import './chunk-YDSMROTB.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.14.1",
3
+ "version": "0.15.0",
4
4
  "description": "OuterLayer CLI — commands: init, connect, doctor, login, logout, sync, daemon (alias: watch), emit, work, runner, hooks, mcp, import, 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.",