@outerlayer/cli 0.33.0-next.20261023122246 → 0.33.0-next.20261023151440

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 (34) hide show
  1. package/dist/build-info.json +1 -1
  2. package/dist/{check-YCFZ3H35.js → check-XPMN4GHD.js} +8 -8
  3. package/dist/{chunk-RAMTJ2XP.js → chunk-2LFWCIIE.js} +3 -3
  4. package/dist/{chunk-IUPY54BZ.js → chunk-4YLL2E7Y.js} +2 -2
  5. package/dist/{chunk-2JLM4GUF.js → chunk-BLHUFOOB.js} +2 -2
  6. package/dist/{chunk-TRP3KPGK.js → chunk-DA3PLB5N.js} +1 -1
  7. package/dist/{chunk-ZUVERBFB.js → chunk-RZOO7X4G.js} +2 -2
  8. package/dist/{chunk-SQQD5MST.js → chunk-VMIOUVJF.js} +1 -1
  9. package/dist/{chunk-YXMGHGHR.js → chunk-VSLJ6PPG.js} +6 -2
  10. package/dist/{chunk-Y6KIGWFO.js → chunk-YY3OQJ4X.js} +47 -12
  11. package/dist/{chunk-XCRET2GZ.js → chunk-Z57X4KNC.js} +4 -3
  12. package/dist/{cli-WFLOFK42.js → cli-65ZQJ622.js} +43 -43
  13. package/dist/{command-SQ4466SL.js → command-QENZQGZL.js} +3 -3
  14. package/dist/{container-start-C4XCYPUA.js → container-start-RVH5743X.js} +5 -5
  15. package/dist/{doctor-4YZOP343.js → doctor-MFLM7DMY.js} +4 -4
  16. package/dist/{governing-source-IRRP7G5G.js → governing-source-INEXO2CK.js} +2 -2
  17. package/dist/index.js +1 -1
  18. package/dist/{init-63X6ECKF.js → init-VWJIINBC.js} +3 -3
  19. package/dist/{init-T64C4MID.js → init-WIHSXL74.js} +3 -3
  20. package/dist/{init-cmd-7CGCDLBZ.js → init-cmd-3VWJUWXA.js} +2 -2
  21. package/dist/{loop-KRGNTFZ2.js → loop-5QV4VZOF.js} +8 -8
  22. package/dist/{machine-VBITNWTR.js → machine-XTSUAX3K.js} +3 -3
  23. package/dist/{runner-key-5SGBLTDJ.js → runner-key-N4IIFMUX.js} +3 -3
  24. package/dist/{spec-cmd-E6SINBX6.js → spec-cmd-7W4ERDL7.js} +1 -1
  25. package/dist/{status-YVJQWWDP.js → status-VBUCLDN5.js} +4 -4
  26. package/dist/{work-claim-cmd-GBU2ACRF.js → work-claim-cmd-G3DC5LJK.js} +7 -5
  27. package/dist/{work-cmd-OO6K6ELP.js → work-cmd-J2LJ3V4A.js} +1 -1
  28. package/dist/{work-comment-cmd-SY7NY2CR.js → work-comment-cmd-QEZHRXC5.js} +1 -1
  29. package/dist/{work-demo-cmd-Y7EU335L.js → work-demo-cmd-A7XE4NKA.js} +1 -1
  30. package/dist/{work-logs-cmd-PWOFLTGD.js → work-logs-cmd-UA5PAXRP.js} +1 -1
  31. package/dist/{work-open-pr-cmd-AJUTKYWN.js → work-open-pr-cmd-ZYKNAJJM.js} +1 -1
  32. package/dist/{work-proofs-cmd-6W6DDAP6.js → work-proofs-cmd-XBESDEPM.js} +1 -1
  33. package/dist/{work-stop-cmd-WZHBEKE4.js → work-stop-cmd-ZDIW3MVX.js} +1 -1
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"id":"2026-10-23T12:24:08.386Z+0c94177","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-23T15:16:37.060Z+5648b3a","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-Y6KIGWFO.js';
3
+ import { probeCredentials } from './chunk-YY3OQJ4X.js';
4
4
  import './chunk-GH246BGV.js';
5
5
  import './chunk-57L2YAJA.js';
6
6
  import './chunk-3JVYMD4G.js';
7
7
  import './chunk-E7R2GIAW.js';
8
- import './chunk-ZUVERBFB.js';
9
- import './chunk-RAMTJ2XP.js';
8
+ import './chunk-RZOO7X4G.js';
9
+ import './chunk-2LFWCIIE.js';
10
10
  import './chunk-ZVB57WI6.js';
11
- import './chunk-TRP3KPGK.js';
11
+ import './chunk-DA3PLB5N.js';
12
12
  import './chunk-HVRQQOMH.js';
13
13
  import './chunk-6LBSAW6I.js';
14
14
  import './chunk-I3LTIAOR.js';
@@ -16,10 +16,10 @@ import './chunk-7IFYI7XF.js';
16
16
  import './chunk-D3EDZPJR.js';
17
17
  import './chunk-7UPMYRPS.js';
18
18
  import './chunk-ESVW4MJY.js';
19
- import { managedProblems, managedFactsOf } from './chunk-SQQD5MST.js';
19
+ import { managedProblems, managedFactsOf } from './chunk-VMIOUVJF.js';
20
20
  import './chunk-NBZ7XBT6.js';
21
21
  import './chunk-TBT347UY.js';
22
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, probeHelper, HELPER_ENV, helperSocketPath, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-IUPY54BZ.js';
22
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, probeHelper, HELPER_ENV, helperSocketPath, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-4YLL2E7Y.js';
23
23
  import './chunk-2PGI6RDE.js';
24
24
  import './chunk-EXZACZ2P.js';
25
25
  import './chunk-YXHKCHWG.js';
@@ -28,7 +28,7 @@ import './chunk-JBJTC3UU.js';
28
28
  import './chunk-OGFGZQA3.js';
29
29
  import './chunk-5THSC6BD.js';
30
30
  import './chunk-L26V6ILJ.js';
31
- import './chunk-XCRET2GZ.js';
31
+ import './chunk-Z57X4KNC.js';
32
32
  import './chunk-MZBQTVFG.js';
33
33
  import './chunk-TQMI335S.js';
34
34
  import { DEFAULT_UNIT_NAME } from './chunk-EHOFFTVX.js';
@@ -37,7 +37,7 @@ import './chunk-X4JEBMYN.js';
37
37
  import './chunk-OGMXVPCS.js';
38
38
  import './chunk-3Z3MPR55.js';
39
39
  import './chunk-NE63JADS.js';
40
- import './chunk-YXMGHGHR.js';
40
+ import './chunk-VSLJ6PPG.js';
41
41
  import './chunk-IP7BIBXJ.js';
42
42
  import './chunk-HLZMAJJD.js';
43
43
  import './chunk-S5CNYXUA.js';
@@ -6,17 +6,17 @@ import { writeDockerClientConfig } from './chunk-6LBSAW6I.js';
6
6
  import { zodProblem } from './chunk-I3LTIAOR.js';
7
7
  import { senderPidfile } from './chunk-7IFYI7XF.js';
8
8
  import { installScrubContext } from './chunk-D3EDZPJR.js';
9
- import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, startHostServices, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, closeHostBuild, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, helperFirecrackerNote, stopJailed, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, ROOT_DISK_ID_PREFIX, copyJudgeTree } from './chunk-IUPY54BZ.js';
9
+ import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, startHostServices, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, closeHostBuild, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, helperFirecrackerNote, stopJailed, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, ROOT_DISK_ID_PREFIX, copyJudgeTree } from './chunk-4YLL2E7Y.js';
10
10
  import { readBranchHead, fetchCommit, diffBetween } from './chunk-YXHKCHWG.js';
11
11
  import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
12
12
  import { waitForAgent, vmExecArgs } from './chunk-5THSC6BD.js';
13
13
  import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-L26V6ILJ.js';
14
- import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, WORKFLOW_PERMISSION_REASON, keptContextTree } from './chunk-XCRET2GZ.js';
14
+ import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, WORKFLOW_PERMISSION_REASON, keptContextTree } from './chunk-Z57X4KNC.js';
15
15
  import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-VWQCYOBS.js';
16
16
  import { DEFAULT_CACHE_DISK, formatBytes, allocatedBytes } from './chunk-X4JEBMYN.js';
17
17
  import { parseSize, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-OGMXVPCS.js';
18
18
  import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-NE63JADS.js';
19
- import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-YXMGHGHR.js';
19
+ import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-VSLJ6PPG.js';
20
20
  import { planArtifactUpload } from './chunk-MPC2UAW2.js';
21
21
  import { scrubText } from './chunk-NIY2UBT6.js';
22
22
  import { readCloudConfig } from './chunk-PJDQPF5N.js';
@@ -7,14 +7,14 @@ import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
7
7
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
8
8
  import { runExec, execCapture, waitForAgent } from './chunk-5THSC6BD.js';
9
9
  import { GUEST_CID, linkVsockSockets } from './chunk-L26V6ILJ.js';
10
- import { describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-XCRET2GZ.js';
10
+ import { describeCallFailure, keepStagedContext, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, prefetchGovernedContext, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript, WORKFLOW_PERMISSION_REASON } from './chunk-Z57X4KNC.js';
11
11
  import { runnerImageVersion } from './chunk-MZBQTVFG.js';
12
12
  import { runnerCredentialProblem, builtinKind, hostAllowed } from './chunk-VWQCYOBS.js';
13
13
  import { formatBytes, allocatedBytes } from './chunk-X4JEBMYN.js';
14
14
  import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, readDu, JUDGE_DIR, MAX_ITEMS_BYTES, JUDGE_ITEMS, MAX_REPORT_BYTES, JUDGE_REPORT, spawnRun } from './chunk-OGMXVPCS.js';
15
15
  import { RecipeError, DOCKER_FEATURE, writeSanitizedRecipe, classifyProperties } from './chunk-3Z3MPR55.js';
16
16
  import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, hostHelperPinned, CLAUDE_CODE_VERSION, guestAssetsPinned, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, BUILDER_DISK_VERSION, builderDiskPinned, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, GH_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, BUILDER_DISK_SHA256, BUILDER_DISK_BASE_URL, DEFAULT_BASE_IMAGE } from './chunk-NE63JADS.js';
17
- import { WorkCommandError, getJson } from './chunk-YXMGHGHR.js';
17
+ import { WorkCommandError, getJson } from './chunk-VSLJ6PPG.js';
18
18
  import { sanitizeTerminal } from './chunk-MPC2UAW2.js';
19
19
  import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-NIY2UBT6.js';
20
20
  import { signerFor } from './chunk-SOI6K5DY.js';
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { checkStarterFiles, contextIsGoverned } from './chunk-DKFUXYGD.js';
4
4
  import { fleetCheck, checkBuildSkill, checkMachineSkills, checkCommittedMaintainedSkills, checkMaintainedReferences, checkIgnoredSkillFolders } from './chunk-EJL6CWSP.js';
5
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-YXMGHGHR.js';
5
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-VSLJ6PPG.js';
6
6
  import { isLinkedRepository } from './chunk-S5CNYXUA.js';
7
7
  import { sanitizeTerminal } from './chunk-MPC2UAW2.js';
8
8
  import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-NIY2UBT6.js';
@@ -1217,7 +1217,7 @@ async function gatherDoctorChecks() {
1217
1217
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1218
1218
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1219
1219
  } else if (hasRunnerBlock(configPath)) {
1220
- const { runnerHostChecks } = await import('./doctor-4YZOP343.js');
1220
+ const { runnerHostChecks } = await import('./doctor-MFLM7DMY.js');
1221
1221
  const gateway = (() => {
1222
1222
  try {
1223
1223
  const { url, apiKey, appId } = loadRunnerConfig(configPath);
@@ -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 = 29;
7
+ var RUNNER_PROTOCOL = 31;
8
8
 
9
9
  export { RUNNER_PROTOCOL };
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { scrubReason, stripTerminalControls } from './chunk-RAMTJ2XP.js';
3
+ import { scrubReason, stripTerminalControls } from './chunk-2LFWCIIE.js';
4
4
  import { RunnerAlreadyRunningError, readPidFile } from './chunk-F5UL23I2.js';
5
5
  import { isSameProcess } from './chunk-JBJTC3UU.js';
6
6
  import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-EHOFFTVX.js';
7
- import { isSignatureRefusal, postJson } from './chunk-YXMGHGHR.js';
7
+ import { isSignatureRefusal, postJson } from './chunk-VSLJ6PPG.js';
8
8
  import { signerFor } from './chunk-SOI6K5DY.js';
9
9
  import { pidFilePath } from './chunk-PA6CK6WQ.js';
10
10
  import { readFileSync } from 'fs';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { placeholderQueues, placeholderProblem } from './chunk-IUPY54BZ.js';
3
+ import { placeholderQueues, placeholderProblem } from './chunk-4YLL2E7Y.js';
4
4
  import { checkFit } from './chunk-EHOFFTVX.js';
5
5
  import { builtinKind, imageBuildOf } from './chunk-VWQCYOBS.js';
6
6
  import { realBuildDiskProbe, checkDiskFit, DEFAULT_CACHE_DISK, DEFAULT_BUILD_DISK } from './chunk-X4JEBMYN.js';
@@ -115,13 +115,14 @@ var WorkCommandError = class extends Error {
115
115
  * reached a response. A caller that has to tell one refusal from another —
116
116
  * a claim lost to another host from a key that no longer works — reads it
117
117
  * rather than matching on the message. */
118
- constructor(message, retryable = false, status, code, reason, billingUrl) {
118
+ constructor(message, retryable = false, status, code, reason, billingUrl, lowestVersion) {
119
119
  super(message);
120
120
  this.retryable = retryable;
121
121
  this.status = status;
122
122
  this.code = code;
123
123
  this.reason = reason;
124
124
  this.billingUrl = billingUrl;
125
+ this.lowestVersion = lowestVersion;
125
126
  }
126
127
  };
127
128
  var WORK_LINK_RETRY_DELAYS_MS = [1e3, 5e3, 15e3, 6e4];
@@ -247,7 +248,10 @@ async function sendJsonBefore(method, url, path, apiKey, appId, body, fetchImpl,
247
248
  json.error?.message ?? `request failed (${response.status})`,
248
249
  response.status >= 500 || response.status === 429,
249
250
  response.status,
250
- json.error?.code
251
+ json.error?.code,
252
+ void 0,
253
+ void 0,
254
+ typeof json.error?.lowestVersion === "string" ? json.error.lowestVersion : void 0
251
255
  );
252
256
  }
253
257
  return { status: response.status, data: json.data ?? json };
@@ -4,23 +4,23 @@ import { writePendingUpdate } from './chunk-GH246BGV.js';
4
4
  import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-57L2YAJA.js';
5
5
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
6
6
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-E7R2GIAW.js';
7
- import { reportFailedStart, fitImageBuildMemory } from './chunk-ZUVERBFB.js';
8
- import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, readProvisionOut, workdirProblem, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, startSender, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-RAMTJ2XP.js';
7
+ import { reportFailedStart, fitImageBuildMemory } from './chunk-RZOO7X4G.js';
8
+ import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, readProvisionOut, workdirProblem, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, startSender, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-2LFWCIIE.js';
9
9
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
10
- import { RUNNER_PROTOCOL } from './chunk-TRP3KPGK.js';
11
- import { realBlockedProbes, checkBlockedWithSlots, keepsHostBuilder } from './chunk-SQQD5MST.js';
12
- import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-NBZ7XBT6.js';
10
+ import { RUNNER_PROTOCOL } from './chunk-DA3PLB5N.js';
11
+ import { realBlockedProbes, checkBlockedWithSlots, keepsHostBuilder } from './chunk-VMIOUVJF.js';
12
+ import { writeMarker, readMarker, currentVersion, removeMarker, isInLayout, startedThroughCurrent, entryIn, versionDir, switchCurrent, cleanVersions, stagingDir } from './chunk-NBZ7XBT6.js';
13
13
  import { RepoFilter } from './chunk-TBT347UY.js';
14
- import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, attemptNote, needsBuildSkill, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, provisionEnvironment, resolveHostBuild, listenOnBroker, hostEnvironment, deliverExecMaven, runWithSpawn, hostCommandEnvironment, lifecycleSteps, execArgv, lifecycleFailureReason, decideHostBuildSkill, prepareBranch, currentSkillCommand, formerSkillProblem, containerCommandExec, execCommandLine, startHostServices, setUpRunnerCgroup, sweepImageBuilders, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-IUPY54BZ.js';
14
+ import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, attemptNote, needsBuildSkill, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, provisionEnvironment, resolveHostBuild, listenOnBroker, hostEnvironment, deliverExecMaven, runWithSpawn, hostCommandEnvironment, lifecycleSteps, execArgv, lifecycleFailureReason, decideHostBuildSkill, prepareBranch, currentSkillCommand, formerSkillProblem, containerCommandExec, execCommandLine, startHostServices, setUpRunnerCgroup, sweepImageBuilders, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-4YLL2E7Y.js';
15
15
  import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-F5UL23I2.js';
16
16
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
17
- import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, resolveGoverningSource, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-XCRET2GZ.js';
17
+ import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, resolveGoverningSource, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-Z57X4KNC.js';
18
18
  import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-MZBQTVFG.js';
19
19
  import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
20
20
  import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-VWQCYOBS.js';
21
21
  import { freeBytes, formatBytes, volumeBytes } from './chunk-X4JEBMYN.js';
22
22
  import { writeJobFile, ensureRunnerIdentity, readJobFile, exceedsDisk, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-OGMXVPCS.js';
23
- import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-YXMGHGHR.js';
23
+ import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-VSLJ6PPG.js';
24
24
  import { loadHostKey, ensureHostKey, signerFor } from './chunk-SOI6K5DY.js';
25
25
  import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, imagesDir, rootfsDir, builderCacheDiskPath } from './chunk-PA6CK6WQ.js';
26
26
  import { parseClaimIdentity, parseClaimedRepositories, parseUnreachable, repositoriesOf, primaryOf, sharedUserEnvironment, JOB_MOUNT, takeClaudeCredential, heldClaudeCredential, currentClaudeCredential } from './chunk-BALIE3BA.js';
@@ -121,7 +121,8 @@ async function sendHeartbeat(args, fetchImpl) {
121
121
  blocked: args.blocked === void 0 ? void 0 : { reason: cutForGateway(args.blocked.reason, BLOCKED_REASON_MAX) },
122
122
  state: args.state,
123
123
  waitingItems: args.waitingItems === void 0 ? void 0 : args.waitingItems.slice(0, WAITING_ITEMS_MAX),
124
- takes: args.takes === void 0 ? void 0 : takesBody(args.takes)
124
+ takes: args.takes === void 0 ? void 0 : takesBody(args.takes),
125
+ selfUpdate: args.selfUpdate
125
126
  };
126
127
  try {
127
128
  const response = await postJson(
@@ -1284,10 +1285,12 @@ async function sendTickHeartbeat(state, workRequest) {
1284
1285
  }),
1285
1286
  // Left out unless a draining runner has builds to wait on, so the gateway stores null.
1286
1287
  waitingItems: waitingItems.length > 0 ? waitingItems : void 0,
1287
- takes: { queues: state.config.queues, repos: { include: state.config.repos?.include, exclude: state.config.repos?.exclude } }
1288
+ takes: { queues: state.config.queues, repos: { include: state.config.repos?.include, exclude: state.config.repos?.exclude } },
1289
+ selfUpdate: selfUpdateReport(state)
1288
1290
  },
1289
1291
  state.deps.fetchImpl
1290
1292
  );
1293
+ if (result.ok) state.heartbeatSent = true;
1291
1294
  reportRepeating(state, "the heartbeat", result.ok ? void 0 : `heartbeat failed: ${result.reason}`);
1292
1295
  if (result.ok) {
1293
1296
  considerNamedVersion(state, result.runnerVersion);
@@ -1335,7 +1338,18 @@ function selfUpdateBlocker(configPath, entryPath, own) {
1335
1338
  if (current !== own) return `\`current\` names ${current ?? "nothing"}, not the running ${own} \xB7 restart the runner`;
1336
1339
  return void 0;
1337
1340
  }
1341
+ function selfUpdateReport(state) {
1342
+ if (state.deps.image !== void 0) return { enabled: false, reason: "runner-image" };
1343
+ const update = state.deps.update;
1344
+ const configPath = state.config.configPath;
1345
+ if (update === void 0 || !isInLayout(configPath, update.entryPath) || !startedThroughCurrent(configPath, update.entryPath)) {
1346
+ return { enabled: false, reason: "outside-install-layout" };
1347
+ }
1348
+ if (!state.config.autoUpdate) return { enabled: false, reason: "auto-update-off" };
1349
+ return { enabled: true };
1350
+ }
1338
1351
  function considerNamedVersion(state, named) {
1352
+ if (named !== void 0 && isVersion(named)) state.namedVersion = named;
1339
1353
  if (state.deps.image !== void 0) {
1340
1354
  considerNamedImage(state, named);
1341
1355
  return;
@@ -1371,6 +1385,14 @@ function considerNamedImage(state, named) {
1371
1385
  state.imageLogged = named;
1372
1386
  logOf(state).line(`the factory names ${named}, newer than the ${own} this image runs \xB7 ${pullInstruction(imageTag(named))}`);
1373
1387
  }
1388
+ function upgradeStepFor(state, floor) {
1389
+ const named = state.namedVersion ?? floor;
1390
+ const target = named !== void 0 && isVersion(named) ? named : void 0;
1391
+ if (state.deps.image !== void 0) return pullInstruction(tagToPull(target));
1392
+ const npm = `npm install -g @outerlayer/cli@${target ?? "latest"}, then "$(npm prefix -g)/bin/outerlayer" runner install`;
1393
+ if (state.deps.update?.underService !== true) return `${npm}, then start the runner again`;
1394
+ return builtinKind(state.config.hooks.provision) === "own" ? npm : `${npm} --service`;
1395
+ }
1374
1396
  function recordImageStatus(state) {
1375
1397
  if (state.deps.image === void 0) return;
1376
1398
  const named = state.imageNamed;
@@ -1864,7 +1886,7 @@ var CLAIM_REFUSAL_CODES = new Set(
1864
1886
  "pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected repository_not_reachable branch_claimed_elsewhere".split(" ")
1865
1887
  );
1866
1888
  async function tryClaimAndStart(state, item, queue) {
1867
- const { postJson: postJson2 } = await import('./work-cmd-OO6K6ELP.js');
1889
+ const { postJson: postJson2 } = await import('./work-cmd-J2LJ3V4A.js');
1868
1890
  const log = logOf(state);
1869
1891
  const hostKey = await loadHostKey(state.config.configPath);
1870
1892
  const claim = await retrySend(
@@ -1878,6 +1900,7 @@ async function tryClaimAndStart(state, item, queue) {
1878
1900
  kind: queue,
1879
1901
  seconds: LEASE_SECONDS,
1880
1902
  runnerProtocol: RUNNER_PROTOCOL,
1903
+ cliVersion: state.deps.cliVersion ?? resolveVersion(),
1881
1904
  ...hostKey === void 0 ? {} : { hostKey: hostKey.hostKey }
1882
1905
  },
1883
1906
  state.deps.fetchImpl,
@@ -1904,6 +1927,17 @@ async function tryClaimAndStart(state, item, queue) {
1904
1927
  reportRepeating(state, "the organization's billing", claim.message ?? claim.reason);
1905
1928
  return { kind: "read_only" };
1906
1929
  }
1930
+ if (claim.code === "runner_version_unsupported") {
1931
+ if (state.heartbeatSent !== true) return { kind: "outdated" };
1932
+ const floor = claim.lowestVersion ?? "the minimum version";
1933
+ if (state.versionRefusalLogged !== floor) {
1934
+ state.versionRefusalLogged = floor;
1935
+ logOf(state).error(`the gateway refuses work from this runner: it runs ${ownVersionOf(state.deps)}, below ${floor} \xB7 ${upgradeStepFor(state, claim.lowestVersion)}`);
1936
+ }
1937
+ state.upgradeRefused = true;
1938
+ recordImageStatus(state);
1939
+ return { kind: "outdated" };
1940
+ }
1907
1941
  if (claim.code === "runner_upgrade_required") {
1908
1942
  const tag = tagToPull(state.imageNamed);
1909
1943
  reportRepeating(
@@ -1920,6 +1954,7 @@ async function tryClaimAndStart(state, item, queue) {
1920
1954
  reportRepeating(state, "the organization's billing", void 0);
1921
1955
  reportRepeating(state, "the runner protocol", void 0);
1922
1956
  state.upgradeRefused = false;
1957
+ state.versionRefusalLogged = void 0;
1923
1958
  recordImageStatus(state);
1924
1959
  reportRepeating(state, "the request signature", void 0);
1925
1960
  const { data } = claim.value;
@@ -3095,7 +3130,7 @@ async function startRunner(configPath, deps, startup) {
3095
3130
  check: update.check ? () => update.check(configPath) : async () => {
3096
3131
  const held = heldClaudeCredential();
3097
3132
  const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
3098
- return (await import('./check-YCFZ3H35.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3133
+ return (await import('./check-XPMN4GHD.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
3099
3134
  },
3100
3135
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
3101
3136
  log
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { WorkCommandError, postJson } from './chunk-YXMGHGHR.js';
3
+ import { WorkCommandError, postJson } from './chunk-VSLJ6PPG.js';
4
4
  import { defaultGitRunner, materializeContext, fetchControlPlaneCommit, lookupGoverningSource } from './chunk-AKZRGFGT.js';
5
5
  import { signingFetchFor } from './chunk-6RKD7YZ6.js';
6
6
  import { signerFor } from './chunk-SOI6K5DY.js';
@@ -92,9 +92,10 @@ async function retrySend(send, deps = {}) {
92
92
  const code = err instanceof WorkCommandError ? err.code : void 0;
93
93
  const status = err instanceof WorkCommandError ? err.status : void 0;
94
94
  const message = err instanceof WorkCommandError ? err.message : void 0;
95
- if (!isRetryable(err)) return { ok: false, attempts, reason, retryable: false, code, status, message };
95
+ const lowestVersion = err instanceof WorkCommandError ? err.lowestVersion : void 0;
96
+ if (!isRetryable(err)) return { ok: false, attempts, reason, retryable: false, code, status, message, lowestVersion };
96
97
  const elapsedMs = now().getTime() - startedMs;
97
- if (elapsedMs + backoffMs >= windowMs) return { ok: false, attempts, reason, retryable: true, code, status, message };
98
+ if (elapsedMs + backoffMs >= windowMs) return { ok: false, attempts, reason, retryable: true, code, status, message, lowestVersion };
98
99
  await sleep(backoffMs);
99
100
  backoffMs = Math.min(backoffMs * 2, MAX_BACKOFF_MS);
100
101
  }
@@ -1,11 +1,11 @@
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-2JLM4GUF.js';
3
+ import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-BLHUFOOB.js';
4
4
  import './chunk-DKFUXYGD.js';
5
5
  import './chunk-EJL6CWSP.js';
6
6
  import './chunk-KT4CN6OU.js';
7
7
  import './chunk-KUE4V2SK.js';
8
- import { verifiedTrackerNames, TRACKERS } from './chunk-YXMGHGHR.js';
8
+ import { verifiedTrackerNames, TRACKERS } from './chunk-VSLJ6PPG.js';
9
9
  import './chunk-IP7BIBXJ.js';
10
10
  import './chunk-HLZMAJJD.js';
11
11
  import './chunk-S5CNYXUA.js';
@@ -3927,13 +3927,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
3927
3927
  if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
3928
3928
  `);
3929
3929
  }
3930
- const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-7CGCDLBZ.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3930
+ const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-3VWJUWXA.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
3931
3931
  if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
3932
3932
  else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
3933
3933
  return;
3934
3934
  }
3935
3935
  await installMachineSkillsForSetup();
3936
- const { runInitCommand } = await import('./init-cmd-7CGCDLBZ.js');
3936
+ const { runInitCommand } = await import('./init-cmd-3VWJUWXA.js');
3937
3937
  const code = await runInitCommand(
3938
3938
  { json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
3939
3939
  {
@@ -4634,9 +4634,9 @@ function registerSpecCommands(program2) {
4634
4634
  const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
4635
4635
  const credentialOptions = (command) => command.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)");
4636
4636
  const run = async (action) => {
4637
- const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4637
+ const { WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4638
4638
  try {
4639
- await action(await import('./spec-cmd-E6SINBX6.js'));
4639
+ await action(await import('./spec-cmd-7W4ERDL7.js'));
4640
4640
  } catch (err) {
4641
4641
  if (err instanceof WorkCommandError) {
4642
4642
  fail(err.message);
@@ -4740,7 +4740,7 @@ takes it, and prints the line that starts your session on it. That
4740
4740
  session links itself and holds the item's lease while it works.
4741
4741
  `
4742
4742
  ).action(async (opts) => {
4743
- const { runWorkBuild, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4743
+ const { runWorkBuild, WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4744
4744
  try {
4745
4745
  await runWorkBuild(opts);
4746
4746
  } catch (err) {
@@ -4763,7 +4763,7 @@ renews that session's own 20-minute lease, unless --no-lease or
4763
4763
  --ended is given, or another worker already holds a live one.
4764
4764
  `
4765
4765
  ).action(async (number, opts) => {
4766
- const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4766
+ const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4767
4767
  try {
4768
4768
  await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
4769
4769
  } catch (err) {
@@ -4787,8 +4787,8 @@ criterion's new proof; --ready hands the thread back to a person. At
4787
4787
  most one action flag may be given.
4788
4788
  `
4789
4789
  ).action(async (opts) => {
4790
- const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-SY7NY2CR.js');
4791
- const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4790
+ const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-QEZHRXC5.js');
4791
+ const { WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4792
4792
  try {
4793
4793
  await runWorkComment(opts);
4794
4794
  } catch (err) {
@@ -4809,8 +4809,8 @@ criterion that carries proof or a comment, each with who is waiting
4809
4809
  on whom next.
4810
4810
  `
4811
4811
  ).action(async (opts) => {
4812
- const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-SY7NY2CR.js');
4813
- const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4812
+ const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-QEZHRXC5.js');
4813
+ const { WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4814
4814
  try {
4815
4815
  await runWorkThreads(opts);
4816
4816
  } catch (err) {
@@ -4834,8 +4834,8 @@ still running, or that an older runner released, has no log and the
4834
4834
  command exits 1.
4835
4835
  `
4836
4836
  ).action(async (opts) => {
4837
- const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-PWOFLTGD.js');
4838
- const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4837
+ const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-UA5PAXRP.js');
4838
+ const { WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4839
4839
  try {
4840
4840
  await runWorkLogs(opts);
4841
4841
  } catch (err) {
@@ -4858,8 +4858,8 @@ item is not built again until a new build request. Exits 1 when no host
4858
4858
  build is running for the item.
4859
4859
  `
4860
4860
  ).action(async (opts) => {
4861
- const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-WZHBEKE4.js');
4862
- const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4861
+ const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-ZDIW3MVX.js');
4862
+ const { WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4863
4863
  try {
4864
4864
  await runWorkStop(opts);
4865
4865
  } catch (err) {
@@ -4880,8 +4880,8 @@ Prints the item's newest live demo record: its artifact id, the commit it was re
4880
4880
  test file that recorded it. With --json, prints { "demo": null } for an item with no demo.
4881
4881
  `
4882
4882
  ).action(async (opts) => {
4883
- const { runWorkDemo, WorkDemoCommandError } = await import('./work-demo-cmd-Y7EU335L.js');
4884
- const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4883
+ const { runWorkDemo, WorkDemoCommandError } = await import('./work-demo-cmd-A7XE4NKA.js');
4884
+ const { WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4885
4885
  try {
4886
4886
  await runWorkDemo(opts);
4887
4887
  } catch (err) {
@@ -4902,7 +4902,7 @@ deletes anything \u2014 the item is removed from Work only once no
4902
4902
  live addition remains on it.
4903
4903
  `
4904
4904
  ).action(async (opts) => {
4905
- const { runWorkRemove, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4905
+ const { runWorkRemove, WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4906
4906
  try {
4907
4907
  await runWorkRemove(opts);
4908
4908
  } catch (err) {
@@ -4914,7 +4914,7 @@ live addition remains on it.
4914
4914
  }
4915
4915
  });
4916
4916
  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, or a Linear/Jira key like ENG-123").option(TRACKER_OPTION_FLAG, "tracker for a keyed --issue, when both hold the key").option("--repo <owner/name>", "repository for an issue number (default: the 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) => {
4917
- const { runWorkStatus, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4917
+ const { runWorkStatus, WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4918
4918
  try {
4919
4919
  await runWorkStatus(opts);
4920
4920
  } catch (err) {
@@ -4938,11 +4938,11 @@ Exits 0 when every listed proof is current, 1 when any is out of date or missing
4938
4938
  and 2 when it cannot tell.
4939
4939
  `
4940
4940
  ).action(async (opts) => {
4941
- const { runWorkProofsCommand } = await import('./work-proofs-cmd-6W6DDAP6.js');
4941
+ const { runWorkProofsCommand } = await import('./work-proofs-cmd-XBESDEPM.js');
4942
4942
  await runWorkProofsCommand(opts);
4943
4943
  });
4944
4944
  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) => {
4945
- const { runWorkList, WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
4945
+ const { runWorkList, WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
4946
4946
  try {
4947
4947
  await runWorkList(opts);
4948
4948
  } catch (err) {
@@ -4963,7 +4963,7 @@ by a different key is refused; claiming again with the same key extends
4963
4963
  it. --host is a label only.
4964
4964
  `
4965
4965
  ).action(async (opts) => {
4966
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-GBU2ACRF.js');
4966
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-G3DC5LJK.js');
4967
4967
  try {
4968
4968
  await runWorkClaim(opts);
4969
4969
  } catch (err) {
@@ -4983,7 +4983,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
4983
4983
  lease has expired, or a 403 if a different key holds it.
4984
4984
  `
4985
4985
  ).action(async (opts) => {
4986
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-GBU2ACRF.js');
4986
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-G3DC5LJK.js');
4987
4987
  try {
4988
4988
  await runWorkRenew(opts);
4989
4989
  } catch (err) {
@@ -5015,7 +5015,7 @@ applies to a host's lease only. A later tool call in the session
5015
5015
  takes the lease again.
5016
5016
  `
5017
5017
  ).action(async (opts) => {
5018
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-GBU2ACRF.js');
5018
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-G3DC5LJK.js');
5019
5019
  try {
5020
5020
  await runWorkRelease(opts);
5021
5021
  } catch (err) {
@@ -5067,8 +5067,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
5067
5067
  Run it again after a change to the title or description.
5068
5068
  `
5069
5069
  ).action(async (opts) => {
5070
- const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-AJUTKYWN.js');
5071
- const { WorkCommandError } = await import('./work-cmd-OO6K6ELP.js');
5070
+ const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-ZYKNAJJM.js');
5071
+ const { WorkCommandError } = await import('./work-cmd-J2LJ3V4A.js');
5072
5072
  try {
5073
5073
  await runWorkOpenPr(opts);
5074
5074
  } catch (err) {
@@ -5085,7 +5085,7 @@ function registerRunnerCommands(program2) {
5085
5085
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
5086
5086
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
5087
5087
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MVA7YTFW.js');
5088
- const { start, RunnerStartError } = await import('./loop-KRGNTFZ2.js');
5088
+ const { start, RunnerStartError } = await import('./loop-5QV4VZOF.js');
5089
5089
  const { RunnerAlreadyRunningError } = await import('./pidfile-5UDLYPMC.js');
5090
5090
  const configPath = opts.config ?? defaultRunnerConfigPath();
5091
5091
  try {
@@ -5104,8 +5104,8 @@ function registerRunnerCommands(program2) {
5104
5104
  "\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
5105
5105
  ).action(async () => {
5106
5106
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MVA7YTFW.js');
5107
- const { containerStart } = await import('./container-start-C4XCYPUA.js');
5108
- const { start, RunnerStartError } = await import('./loop-KRGNTFZ2.js');
5107
+ const { containerStart } = await import('./container-start-RVH5743X.js');
5108
+ const { start, RunnerStartError } = await import('./loop-5QV4VZOF.js');
5109
5109
  const { RunnerAlreadyRunningError } = await import('./pidfile-5UDLYPMC.js');
5110
5110
  try {
5111
5111
  const result = await containerStart({
@@ -5125,7 +5125,7 @@ function registerRunnerCommands(program2) {
5125
5125
  });
5126
5126
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
5127
5127
  const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
5128
- const { runRunnerCheck } = await import('./check-YCFZ3H35.js');
5128
+ const { runRunnerCheck } = await import('./check-XPMN4GHD.js');
5129
5129
  const configPath = opts.config ?? defaultRunnerConfigPath();
5130
5130
  const result = await runRunnerCheck(configPath);
5131
5131
  if (!result.ok) {
@@ -5159,7 +5159,7 @@ function registerRunnerCommands(program2) {
5159
5159
  }
5160
5160
  try {
5161
5161
  if (opts.service === true) {
5162
- const { installServiceCommand } = await import('./command-SQ4466SL.js');
5162
+ const { installServiceCommand } = await import('./command-QENZQGZL.js');
5163
5163
  const result2 = await installServiceCommand({
5164
5164
  configPath,
5165
5165
  print: opts.print,
@@ -5215,7 +5215,7 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
5215
5215
  return;
5216
5216
  }
5217
5217
  const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
5218
- const { uninstallServiceCommand } = await import('./command-SQ4466SL.js');
5218
+ const { uninstallServiceCommand } = await import('./command-QENZQGZL.js');
5219
5219
  const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
5220
5220
  if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
5221
5221
  `);
@@ -5243,10 +5243,10 @@ already in claude.env is used.
5243
5243
  `
5244
5244
  ).action(async (opts) => {
5245
5245
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-MVA7YTFW.js');
5246
- const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-T64C4MID.js');
5247
- const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-5SGBLTDJ.js');
5248
- const { detectMachine } = await import('./machine-VBITNWTR.js');
5249
- const { chooseVm, runVmInit, VmInitError } = await import('./init-63X6ECKF.js');
5246
+ const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-WIHSXL74.js');
5247
+ const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-N4IIFMUX.js');
5248
+ const { detectMachine } = await import('./machine-XTSUAX3K.js');
5249
+ const { chooseVm, runVmInit, VmInitError } = await import('./init-VWJIINBC.js');
5250
5250
  const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-ILP6BAC2.js');
5251
5251
  const configPath = opts.config ?? defaultRunnerConfigPath();
5252
5252
  if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
@@ -5397,7 +5397,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
5397
5397
  let serviceUp = false;
5398
5398
  let restart;
5399
5399
  if (installedLayout) {
5400
- const { installServiceCommand } = await import('./command-SQ4466SL.js');
5400
+ const { installServiceCommand } = await import('./command-QENZQGZL.js');
5401
5401
  const service = await installServiceCommand({
5402
5402
  configPath,
5403
5403
  entryPath: process.argv[1] ?? "",
@@ -5461,7 +5461,7 @@ Next:
5461
5461
  await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
5462
5462
  console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
5463
5463
  });
5464
- const { imageTargetFor } = await import('./governing-source-IRRP7G5G.js');
5464
+ const { imageTargetFor } = await import('./governing-source-INEXO2CK.js');
5465
5465
  const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
5466
5466
  if (!target.ok) {
5467
5467
  if (opts.json) {
@@ -5525,7 +5525,7 @@ Next:
5525
5525
  });
5526
5526
  runnerCmd.command("stop").description("Take no more work; finish running jobs, then exit").option("--config <path>", "the cloud config file naming the runner to stop").option("--now", "end running jobs immediately, with outcome stopped").action(async (opts) => {
5527
5527
  const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
5528
- const { requestStop } = await import('./loop-KRGNTFZ2.js');
5528
+ const { requestStop } = await import('./loop-5QV4VZOF.js');
5529
5529
  const configPath = opts.config ?? defaultRunnerConfigPath();
5530
5530
  const { runnerImageVersion } = await import('./image-tag-ADSLWXBA.js');
5531
5531
  await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
@@ -5533,8 +5533,8 @@ Next:
5533
5533
  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) => {
5534
5534
  const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-MVA7YTFW.js');
5535
5535
  const { jobsDir, runnerDir } = await import('./paths-7HVTDE6J.js');
5536
- const { listJobFiles, runnerProcessState } = await import('./loop-KRGNTFZ2.js');
5537
- const { renderStatus } = await import('./status-YVJQWWDP.js');
5536
+ const { listJobFiles, runnerProcessState } = await import('./loop-5QV4VZOF.js');
5537
+ const { renderStatus } = await import('./status-VBUCLDN5.js');
5538
5538
  const { readHousekeepingRecord } = await import('./record-PPZEXAVA.js');
5539
5539
  const path2 = await import('path');
5540
5540
  const configPath = opts.config ?? defaultRunnerConfigPath();
@@ -5594,7 +5594,7 @@ Next:
5594
5594
  });
5595
5595
  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) => {
5596
5596
  const { defaultRunnerConfigPath } = await import('./config-MVA7YTFW.js');
5597
- const { listJobFiles } = await import('./loop-KRGNTFZ2.js');
5597
+ const { listJobFiles } = await import('./loop-5QV4VZOF.js');
5598
5598
  const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-HI46FO6Z.js');
5599
5599
  const configPath = opts.config ?? defaultRunnerConfigPath();
5600
5600
  const item = parseTrackerNumber(itemArg);
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
3
3
  import { runRunnerInstall, launcherSummary, restartNote } from './chunk-DXJTBU7A.js';
4
4
  import './chunk-Z5IW4DHH.js';
5
5
  import { currentLink, execStartCommand } from './chunk-NBZ7XBT6.js';
6
- import { detectMachine, helperSocketPath, ensureFirecrackerAndJailer } from './chunk-IUPY54BZ.js';
6
+ import { detectMachine, helperSocketPath, ensureFirecrackerAndJailer } from './chunk-4YLL2E7Y.js';
7
7
  import './chunk-2PGI6RDE.js';
8
8
  import './chunk-EXZACZ2P.js';
9
9
  import './chunk-YXHKCHWG.js';
@@ -12,7 +12,7 @@ import './chunk-JBJTC3UU.js';
12
12
  import './chunk-OGFGZQA3.js';
13
13
  import './chunk-5THSC6BD.js';
14
14
  import './chunk-L26V6ILJ.js';
15
- import './chunk-XCRET2GZ.js';
15
+ import './chunk-Z57X4KNC.js';
16
16
  import './chunk-MZBQTVFG.js';
17
17
  import './chunk-TQMI335S.js';
18
18
  import { DEFAULT_UNIT_NAME, installService, uninstallService, realTaskScheduler, UNIT_MARKER } from './chunk-EHOFFTVX.js';
@@ -23,7 +23,7 @@ import './chunk-3Z3MPR55.js';
23
23
  import { firecrackerArch, MICROVM_ARCHES, FIRECRACKER_VERSION, FIRECRACKER_BINARY_SHA256, JAILER_BINARY_SHA256, HOST_HELPER_SHA256, HOST_HELPER_BASE_URL, HOST_HELPER_ASSETS_VERSION, hostHelperPinned } from './chunk-NE63JADS.js';
24
24
  import { realLima } from './chunk-77MM5RYD.js';
25
25
  import { writeLaunchAgent, launchAgentPath } from './chunk-LF6MLJCY.js';
26
- import './chunk-YXMGHGHR.js';
26
+ import './chunk-VSLJ6PPG.js';
27
27
  import './chunk-IP7BIBXJ.js';
28
28
  import './chunk-HLZMAJJD.js';
29
29
  import './chunk-S5CNYXUA.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { reportFailedStart, BUILD_MEMORY_VARIABLE } from './chunk-ZUVERBFB.js';
4
- import './chunk-RAMTJ2XP.js';
3
+ import { reportFailedStart, BUILD_MEMORY_VARIABLE } from './chunk-RZOO7X4G.js';
4
+ import './chunk-2LFWCIIE.js';
5
5
  import './chunk-ZVB57WI6.js';
6
6
  import './chunk-HVRQQOMH.js';
7
7
  import './chunk-6LBSAW6I.js';
@@ -11,7 +11,7 @@ import './chunk-D3EDZPJR.js';
11
11
  import './chunk-7UPMYRPS.js';
12
12
  import './chunk-ESVW4MJY.js';
13
13
  import './chunk-TBT347UY.js';
14
- import { detectMachine, supportsContainerBuilds, MIN_ENGINE_MAJOR, describeMachineDocker, RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-IUPY54BZ.js';
14
+ import { detectMachine, supportsContainerBuilds, MIN_ENGINE_MAJOR, describeMachineDocker, RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-4YLL2E7Y.js';
15
15
  import './chunk-2PGI6RDE.js';
16
16
  import { isAgentName, AGENT_COMMANDS } from './chunk-EXZACZ2P.js';
17
17
  import './chunk-YXHKCHWG.js';
@@ -20,7 +20,7 @@ import './chunk-JBJTC3UU.js';
20
20
  import './chunk-OGFGZQA3.js';
21
21
  import './chunk-5THSC6BD.js';
22
22
  import './chunk-L26V6ILJ.js';
23
- import './chunk-XCRET2GZ.js';
23
+ import './chunk-Z57X4KNC.js';
24
24
  import { runnerImageVersion, IMAGE_VERSION_VARIABLE } from './chunk-MZBQTVFG.js';
25
25
  import './chunk-TQMI335S.js';
26
26
  import './chunk-EHOFFTVX.js';
@@ -29,7 +29,7 @@ import './chunk-X4JEBMYN.js';
29
29
  import { parseSize } from './chunk-OGMXVPCS.js';
30
30
  import './chunk-3Z3MPR55.js';
31
31
  import './chunk-NE63JADS.js';
32
- import './chunk-YXMGHGHR.js';
32
+ import './chunk-VSLJ6PPG.js';
33
33
  import './chunk-IP7BIBXJ.js';
34
34
  import './chunk-HLZMAJJD.js';
35
35
  import './chunk-S5CNYXUA.js';
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { launcherCheck } from './chunk-Z5IW4DHH.js';
4
- import { keepsHostBuilder, managedProblems } from './chunk-SQQD5MST.js';
4
+ import { keepsHostBuilder, managedProblems } from './chunk-VMIOUVJF.js';
5
5
  import './chunk-NBZ7XBT6.js';
6
6
  import { RepoFilter } from './chunk-TBT347UY.js';
7
- import { needsClaudeCredential, claudeCredentialCheck, detectMachine, supportsContainerBuilds, describeMachineDocker, MIN_ENGINE_MAJOR, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned, helperFirecrackerNote, probeHelper, helperSocketPath, missingPermissionOf, missingPermissionFix } from './chunk-IUPY54BZ.js';
7
+ import { needsClaudeCredential, claudeCredentialCheck, detectMachine, supportsContainerBuilds, describeMachineDocker, MIN_ENGINE_MAJOR, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned, helperFirecrackerNote, probeHelper, helperSocketPath, missingPermissionOf, missingPermissionFix } from './chunk-4YLL2E7Y.js';
8
8
  import './chunk-2PGI6RDE.js';
9
9
  import './chunk-EXZACZ2P.js';
10
10
  import './chunk-YXHKCHWG.js';
@@ -13,7 +13,7 @@ import './chunk-JBJTC3UU.js';
13
13
  import './chunk-OGFGZQA3.js';
14
14
  import './chunk-5THSC6BD.js';
15
15
  import './chunk-L26V6ILJ.js';
16
- import './chunk-XCRET2GZ.js';
16
+ import './chunk-Z57X4KNC.js';
17
17
  import { runnerImageVersion, imageAdvice, readUpdateStatus, imageTag, pullInstruction } from './chunk-MZBQTVFG.js';
18
18
  import './chunk-TQMI335S.js';
19
19
  import './chunk-EHOFFTVX.js';
@@ -22,7 +22,7 @@ import { realBuildDiskProbe, DEFAULT_BUILD_DISK, freeBytes, checkDiskFit, format
22
22
  import { resolveDevcontainerCli, buildxState, spawnRun, parseSize } from './chunk-OGMXVPCS.js';
23
23
  import { locateRecipe, assertBuildable, readRecipe, RecipeError } from './chunk-3Z3MPR55.js';
24
24
  import { FIRECRACKER_VERSION, builderDiskPinned, CLAUDE_CODE_VERSION } from './chunk-NE63JADS.js';
25
- import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-YXMGHGHR.js';
25
+ import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-VSLJ6PPG.js';
26
26
  import './chunk-IP7BIBXJ.js';
27
27
  import './chunk-HLZMAJJD.js';
28
28
  import './chunk-S5CNYXUA.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { imageTargetFor, pinnedSourceOf, resolveGoverningSource } from './chunk-XCRET2GZ.js';
4
- import './chunk-YXMGHGHR.js';
3
+ export { imageTargetFor, pinnedSourceOf, resolveGoverningSource } from './chunk-Z57X4KNC.js';
4
+ import './chunk-VSLJ6PPG.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
6
  import './chunk-HLZMAJJD.js';
7
7
  import './chunk-S5CNYXUA.js';
package/dist/index.js CHANGED
@@ -26,5 +26,5 @@ if (argv[0] === "claude") {
26
26
  process.exit(await runClaudeLauncher(argv.slice(1)));
27
27
  }
28
28
  (await import('./hook-fast-3IYSWDL4.js')).recordLinkExitFailure(argv);
29
- var { runCli } = await import('./cli-WFLOFK42.js');
29
+ var { runCli } = await import('./cli-65ZQJ622.js');
30
30
  await runCli(process.argv);
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { npmSupportsProvenance } from './chunk-E7R2GIAW.js';
4
- import { RunnerInitError, readConfigObject } from './chunk-IUPY54BZ.js';
4
+ import { RunnerInitError, readConfigObject } from './chunk-4YLL2E7Y.js';
5
5
  import './chunk-2PGI6RDE.js';
6
6
  import './chunk-EXZACZ2P.js';
7
7
  import './chunk-YXHKCHWG.js';
@@ -10,7 +10,7 @@ import './chunk-JBJTC3UU.js';
10
10
  import './chunk-OGFGZQA3.js';
11
11
  import './chunk-5THSC6BD.js';
12
12
  import './chunk-L26V6ILJ.js';
13
- import './chunk-XCRET2GZ.js';
13
+ import './chunk-Z57X4KNC.js';
14
14
  import './chunk-MZBQTVFG.js';
15
15
  import './chunk-TQMI335S.js';
16
16
  import { checkFit, VM_SERVICE_NAME, RUNNER_RESERVE_BYTES } from './chunk-EHOFFTVX.js';
@@ -20,7 +20,7 @@ import { parseSize } from './chunk-OGMXVPCS.js';
20
20
  import './chunk-3Z3MPR55.js';
21
21
  import './chunk-NE63JADS.js';
22
22
  import { writeLaunchAgent } from './chunk-LF6MLJCY.js';
23
- import './chunk-YXMGHGHR.js';
23
+ import './chunk-VSLJ6PPG.js';
24
24
  import './chunk-IP7BIBXJ.js';
25
25
  import './chunk-HLZMAJJD.js';
26
26
  import './chunk-S5CNYXUA.js';
@@ -1,6 +1,6 @@
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-IUPY54BZ.js';
3
+ export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, prepareRunnerInit, readConfigObject, runRunnerInit, writeRunnerInit } from './chunk-4YLL2E7Y.js';
4
4
  import './chunk-2PGI6RDE.js';
5
5
  import './chunk-EXZACZ2P.js';
6
6
  import './chunk-YXHKCHWG.js';
@@ -9,7 +9,7 @@ import './chunk-JBJTC3UU.js';
9
9
  import './chunk-OGFGZQA3.js';
10
10
  import './chunk-5THSC6BD.js';
11
11
  import './chunk-L26V6ILJ.js';
12
- import './chunk-XCRET2GZ.js';
12
+ import './chunk-Z57X4KNC.js';
13
13
  import './chunk-MZBQTVFG.js';
14
14
  import './chunk-TQMI335S.js';
15
15
  import './chunk-EHOFFTVX.js';
@@ -18,7 +18,7 @@ import './chunk-X4JEBMYN.js';
18
18
  import './chunk-OGMXVPCS.js';
19
19
  import './chunk-3Z3MPR55.js';
20
20
  import './chunk-NE63JADS.js';
21
- import './chunk-YXMGHGHR.js';
21
+ import './chunk-VSLJ6PPG.js';
22
22
  import './chunk-IP7BIBXJ.js';
23
23
  import './chunk-HLZMAJJD.js';
24
24
  import './chunk-S5CNYXUA.js';
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { summarizeChecks, summaryText, renderDoctorText } from './chunk-2JLM4GUF.js';
3
+ import { summarizeChecks, summaryText, renderDoctorText } from './chunk-BLHUFOOB.js';
4
4
  import './chunk-DKFUXYGD.js';
5
5
  import { shellFunctionInstalled, removeShellFunction, installShellFunction, SHELL_FUNCTION_LINE } from './chunk-CJJDJ7AT.js';
6
6
  import './chunk-EJL6CWSP.js';
7
7
  import './chunk-KT4CN6OU.js';
8
8
  import './chunk-KUE4V2SK.js';
9
- import './chunk-YXMGHGHR.js';
9
+ import './chunk-VSLJ6PPG.js';
10
10
  import './chunk-IP7BIBXJ.js';
11
11
  import './chunk-HLZMAJJD.js';
12
12
  import { runConnect, hasUncommittedPolicy, commitCommandsFor } from './chunk-S5CNYXUA.js';
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, sampleUsage, start, tick, watchTick } from './chunk-Y6KIGWFO.js';
3
+ export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, sampleUsage, start, tick, watchTick } from './chunk-YY3OQJ4X.js';
4
4
  import './chunk-GH246BGV.js';
5
5
  import './chunk-57L2YAJA.js';
6
6
  import './chunk-3JVYMD4G.js';
7
7
  import './chunk-E7R2GIAW.js';
8
- import './chunk-ZUVERBFB.js';
9
- import './chunk-RAMTJ2XP.js';
8
+ import './chunk-RZOO7X4G.js';
9
+ import './chunk-2LFWCIIE.js';
10
10
  import './chunk-ZVB57WI6.js';
11
- import './chunk-TRP3KPGK.js';
11
+ import './chunk-DA3PLB5N.js';
12
12
  import './chunk-HVRQQOMH.js';
13
13
  import './chunk-6LBSAW6I.js';
14
14
  import './chunk-I3LTIAOR.js';
@@ -16,10 +16,10 @@ import './chunk-7IFYI7XF.js';
16
16
  import './chunk-D3EDZPJR.js';
17
17
  import './chunk-7UPMYRPS.js';
18
18
  import './chunk-ESVW4MJY.js';
19
- import './chunk-SQQD5MST.js';
19
+ import './chunk-VMIOUVJF.js';
20
20
  import './chunk-NBZ7XBT6.js';
21
21
  import './chunk-TBT347UY.js';
22
- import './chunk-IUPY54BZ.js';
22
+ import './chunk-4YLL2E7Y.js';
23
23
  import './chunk-2PGI6RDE.js';
24
24
  import './chunk-EXZACZ2P.js';
25
25
  import './chunk-YXHKCHWG.js';
@@ -28,7 +28,7 @@ import './chunk-JBJTC3UU.js';
28
28
  import './chunk-OGFGZQA3.js';
29
29
  import './chunk-5THSC6BD.js';
30
30
  import './chunk-L26V6ILJ.js';
31
- import './chunk-XCRET2GZ.js';
31
+ import './chunk-Z57X4KNC.js';
32
32
  import './chunk-MZBQTVFG.js';
33
33
  import './chunk-TQMI335S.js';
34
34
  import './chunk-EHOFFTVX.js';
@@ -37,7 +37,7 @@ import './chunk-X4JEBMYN.js';
37
37
  import './chunk-OGMXVPCS.js';
38
38
  import './chunk-3Z3MPR55.js';
39
39
  import './chunk-NE63JADS.js';
40
- import './chunk-YXMGHGHR.js';
40
+ import './chunk-VSLJ6PPG.js';
41
41
  import './chunk-IP7BIBXJ.js';
42
42
  import './chunk-HLZMAJJD.js';
43
43
  import './chunk-S5CNYXUA.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-IUPY54BZ.js';
3
+ export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-4YLL2E7Y.js';
4
4
  import './chunk-2PGI6RDE.js';
5
5
  import './chunk-EXZACZ2P.js';
6
6
  import './chunk-YXHKCHWG.js';
@@ -9,7 +9,7 @@ import './chunk-JBJTC3UU.js';
9
9
  import './chunk-OGFGZQA3.js';
10
10
  import './chunk-5THSC6BD.js';
11
11
  import './chunk-L26V6ILJ.js';
12
- import './chunk-XCRET2GZ.js';
12
+ import './chunk-Z57X4KNC.js';
13
13
  import './chunk-MZBQTVFG.js';
14
14
  import './chunk-TQMI335S.js';
15
15
  import './chunk-EHOFFTVX.js';
@@ -18,7 +18,7 @@ import './chunk-X4JEBMYN.js';
18
18
  import './chunk-OGMXVPCS.js';
19
19
  import './chunk-3Z3MPR55.js';
20
20
  import './chunk-NE63JADS.js';
21
- import './chunk-YXMGHGHR.js';
21
+ import './chunk-VSLJ6PPG.js';
22
22
  import './chunk-IP7BIBXJ.js';
23
23
  import './chunk-HLZMAJJD.js';
24
24
  import './chunk-S5CNYXUA.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { readConfigObject, RunnerInitError } from './chunk-IUPY54BZ.js';
3
+ import { readConfigObject, RunnerInitError } from './chunk-4YLL2E7Y.js';
4
4
  import './chunk-2PGI6RDE.js';
5
5
  import './chunk-EXZACZ2P.js';
6
6
  import './chunk-YXHKCHWG.js';
@@ -9,7 +9,7 @@ import './chunk-JBJTC3UU.js';
9
9
  import './chunk-OGFGZQA3.js';
10
10
  import './chunk-5THSC6BD.js';
11
11
  import './chunk-L26V6ILJ.js';
12
- import './chunk-XCRET2GZ.js';
12
+ import './chunk-Z57X4KNC.js';
13
13
  import './chunk-MZBQTVFG.js';
14
14
  import './chunk-TQMI335S.js';
15
15
  import './chunk-EHOFFTVX.js';
@@ -18,7 +18,7 @@ import './chunk-X4JEBMYN.js';
18
18
  import './chunk-OGMXVPCS.js';
19
19
  import './chunk-3Z3MPR55.js';
20
20
  import './chunk-NE63JADS.js';
21
- import { getJson } from './chunk-YXMGHGHR.js';
21
+ import { getJson } from './chunk-VSLJ6PPG.js';
22
22
  import './chunk-IP7BIBXJ.js';
23
23
  import './chunk-HLZMAJJD.js';
24
24
  import { fetchFactories, slug, dashboardBase, listText } from './chunk-S5CNYXUA.js';
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { criteriaFromAcceptanceFile, runEmitCriteria } from './chunk-GO2DUPQS.js';
4
4
  import './chunk-ESVW4MJY.js';
5
- import { getJson, postJson, patchJson, WorkCommandError, resolveCredentials } from './chunk-YXMGHGHR.js';
5
+ import { getJson, postJson, patchJson, WorkCommandError, resolveCredentials } from './chunk-VSLJ6PPG.js';
6
6
  import './chunk-IP7BIBXJ.js';
7
7
  import { autoConnect } from './chunk-HLZMAJJD.js';
8
8
  import './chunk-S5CNYXUA.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { isReadable, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-RAMTJ2XP.js';
3
+ import { isReadable, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-2LFWCIIE.js';
4
4
  import { jobStateFormatOf } from './chunk-ZVB57WI6.js';
5
5
  import './chunk-HVRQQOMH.js';
6
6
  import './chunk-6LBSAW6I.js';
@@ -10,7 +10,7 @@ import './chunk-D3EDZPJR.js';
10
10
  import './chunk-7UPMYRPS.js';
11
11
  import './chunk-ESVW4MJY.js';
12
12
  import './chunk-TBT347UY.js';
13
- import { LEASE_SECONDS } from './chunk-IUPY54BZ.js';
13
+ import { LEASE_SECONDS } from './chunk-4YLL2E7Y.js';
14
14
  import './chunk-2PGI6RDE.js';
15
15
  import './chunk-EXZACZ2P.js';
16
16
  import './chunk-YXHKCHWG.js';
@@ -19,7 +19,7 @@ import './chunk-JBJTC3UU.js';
19
19
  import './chunk-OGFGZQA3.js';
20
20
  import './chunk-5THSC6BD.js';
21
21
  import './chunk-L26V6ILJ.js';
22
- import { formatDuration, formatClock, relativeToRunner } from './chunk-XCRET2GZ.js';
22
+ import { formatDuration, formatClock, relativeToRunner } from './chunk-Z57X4KNC.js';
23
23
  import { pullInstruction } from './chunk-MZBQTVFG.js';
24
24
  import './chunk-TQMI335S.js';
25
25
  import './chunk-EHOFFTVX.js';
@@ -28,7 +28,7 @@ import { formatBytes } from './chunk-X4JEBMYN.js';
28
28
  import './chunk-OGMXVPCS.js';
29
29
  import './chunk-3Z3MPR55.js';
30
30
  import './chunk-NE63JADS.js';
31
- import './chunk-YXMGHGHR.js';
31
+ import './chunk-VSLJ6PPG.js';
32
32
  import './chunk-IP7BIBXJ.js';
33
33
  import './chunk-HLZMAJJD.js';
34
34
  import './chunk-S5CNYXUA.js';
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RUNNER_PROTOCOL } from './chunk-TRP3KPGK.js';
3
+ import { RUNNER_PROTOCOL } from './chunk-DA3PLB5N.js';
4
4
  import { defaultRunnerConfigPath } from './chunk-VWQCYOBS.js';
5
5
  import './chunk-X4JEBMYN.js';
6
6
  import './chunk-OGMXVPCS.js';
7
7
  import './chunk-3Z3MPR55.js';
8
8
  import './chunk-NE63JADS.js';
9
- import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, findLiveItemForIssue } from './chunk-YXMGHGHR.js';
10
- export { WorkCommandError } from './chunk-YXMGHGHR.js';
9
+ import { resolveCredentials, WorkCommandError, parsePositiveInt, postJson, environmentFacts, findLiveItemForIssue } from './chunk-VSLJ6PPG.js';
10
+ export { WorkCommandError } from './chunk-VSLJ6PPG.js';
11
11
  import './chunk-IP7BIBXJ.js';
12
12
  import './chunk-HLZMAJJD.js';
13
13
  import './chunk-S5CNYXUA.js';
@@ -26,7 +26,7 @@ import './chunk-BJ3KTMDH.js';
26
26
  import './chunk-44V5SD4G.js';
27
27
  import './chunk-5BHIBJDA.js';
28
28
  import './chunk-CDDED64E.js';
29
- import './chunk-RA3O54FC.js';
29
+ import { resolveVersion } from './chunk-RA3O54FC.js';
30
30
  import './chunk-WZBHBH3J.js';
31
31
  import './chunk-CRB3POP4.js';
32
32
  import './chunk-6CXNWKWD.js';
@@ -71,7 +71,9 @@ async function runWorkClaim(opts) {
71
71
  `/v1/work-items/${itemId}/claim`,
72
72
  creds.apiKey,
73
73
  creds.appId,
74
- { host, kind: opts.kind, seconds, runnerProtocol: RUNNER_PROTOCOL, hostKey: hostKey.hostKey },
74
+ // The CLI's own version, so the gateway judges this claim on it and not on a runner that once
75
+ // heartbeated under the same host name.
76
+ { host, kind: opts.kind, seconds, runnerProtocol: RUNNER_PROTOCOL, cliVersion: resolveVersion(), hostKey: hostKey.hostKey },
75
77
  fetchImpl,
76
78
  void 0,
77
79
  hostKey.signer
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { WorkCommandError, environmentFacts, findLiveItemForIssue, getJson, parsePositiveInt, patchJson, postJson, resolveCredentials, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-YXMGHGHR.js';
3
+ export { WorkCommandError, environmentFacts, findLiveItemForIssue, getJson, parsePositiveInt, patchJson, postJson, resolveCredentials, runWorkBuild, runWorkLinkSession, runWorkList, runWorkRemove, runWorkStatus } from './chunk-VSLJ6PPG.js';
4
4
  import './chunk-IP7BIBXJ.js';
5
5
  import './chunk-HLZMAJJD.js';
6
6
  import './chunk-S5CNYXUA.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-YXMGHGHR.js';
3
+ import { resolveCredentials, postJson, getJson } from './chunk-VSLJ6PPG.js';
4
4
  import { detectActiveSession } from './chunk-IP7BIBXJ.js';
5
5
  import './chunk-HLZMAJJD.js';
6
6
  import './chunk-S5CNYXUA.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readNewestDemo } from './chunk-ER6KQCVJ.js';
4
- import { resolveCredentials, WorkCommandError } from './chunk-YXMGHGHR.js';
4
+ import { resolveCredentials, WorkCommandError } from './chunk-VSLJ6PPG.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
6
  import './chunk-HLZMAJJD.js';
7
7
  import './chunk-S5CNYXUA.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, getJson } from './chunk-YXMGHGHR.js';
3
+ import { resolveCredentials, getJson } from './chunk-VSLJ6PPG.js';
4
4
  import './chunk-IP7BIBXJ.js';
5
5
  import './chunk-HLZMAJJD.js';
6
6
  import './chunk-S5CNYXUA.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-5M2J7B5N.js';
4
- import { resolveCredentials } from './chunk-YXMGHGHR.js';
4
+ import { resolveCredentials } from './chunk-VSLJ6PPG.js';
5
5
  import './chunk-IP7BIBXJ.js';
6
6
  import './chunk-HLZMAJJD.js';
7
7
  import './chunk-S5CNYXUA.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { WorkCommandError, resolveCredentials, getJson } from './chunk-YXMGHGHR.js';
3
+ import { WorkCommandError, resolveCredentials, getJson } from './chunk-VSLJ6PPG.js';
4
4
  import './chunk-IP7BIBXJ.js';
5
5
  import './chunk-HLZMAJJD.js';
6
6
  import './chunk-S5CNYXUA.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { resolveCredentials, postJson, WorkCommandError } from './chunk-YXMGHGHR.js';
3
+ import { resolveCredentials, postJson, WorkCommandError } from './chunk-VSLJ6PPG.js';
4
4
  import './chunk-IP7BIBXJ.js';
5
5
  import './chunk-HLZMAJJD.js';
6
6
  import './chunk-S5CNYXUA.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.33.0-next.20261023122246",
3
+ "version": "0.33.0-next.20261023151440",
4
4
  "description": "OuterLayer CLI — commands: init, claude, connect, doctor, login, logout, sync, daemon (alias: watch), emit, findings, work, spec, runner, hooks, mcp, context. Capture and sync coding-agent sessions, and record proof of factory work.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Magu Studios, Inc.",