@outerlayer/cli 0.31.0-next.20261020133458 → 0.31.1-next.20261020170819

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @outerlayer/cli
2
2
 
3
+ ## 0.31.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9978d2e: Add `runner.managed`. A managed runner claims no work until its microVM builds run under the jailer, its Claude credential is an `ANTHROPIC_API_KEY`, and `runner.build.allowHosts` is set.
8
+
9
+ ### Patch Changes
10
+
11
+ - 743c2ac: `outerlayer work` commands and the runner print the gateway's explanation and the billing URL when the gateway refuses new work because the organization is read-only.
12
+ - 91a9738: A build no longer stops when the agent starts `outerlayer-build` as a skill. `outerlayer-build` leaves model invocation on, and an agent that starts it without reading the repository's `build` skill is sent to `build` first.
13
+ - c47cb0f: The runner protocol is 23. A runner can release the lease of an item that was removed from Work while it built.
14
+
3
15
  ## 0.30.1
4
16
 
5
17
  ### Patch Changes
@@ -1 +1 @@
1
- {"id":"2026-10-20T13:36:31.668Z+91a9738","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-20T17:10:30.459Z+f70c8c2","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-KQLUUTLC.js';
3
+ import { probeCredentials } from './chunk-MFAFJQUS.js';
4
4
  import './chunk-SNLMMLDD.js';
5
5
  import './chunk-3JVYMD4G.js';
6
6
  import './chunk-E7R2GIAW.js';
7
- import './chunk-6C5MZ7UG.js';
7
+ import './chunk-HZITEOLO.js';
8
8
  import './chunk-TZQIEUDE.js';
9
9
  import './chunk-ZVB57WI6.js';
10
10
  import './chunk-X7UUIHGH.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 = 24;
7
+ var RUNNER_PROTOCOL = 25;
8
8
 
9
9
  export { RUNNER_PROTOCOL };
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
3
3
  import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-SNLMMLDD.js';
4
4
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
5
5
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-E7R2GIAW.js';
6
- import { RUNNER_PROTOCOL } from './chunk-6C5MZ7UG.js';
6
+ import { RUNNER_PROTOCOL } from './chunk-HZITEOLO.js';
7
7
  import { writePendingUpdate } from './chunk-TZQIEUDE.js';
8
8
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
9
9
  import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-X7UUIHGH.js';
@@ -2926,7 +2926,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
2926
2926
  check: update.check ? () => update.check(configPath) : async () => {
2927
2927
  const held = heldClaudeCredential();
2928
2928
  const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
2929
- return (await import('./check-UUWPPYC3.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
2929
+ return (await import('./check-FUZ4OTOO.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
2930
2930
  },
2931
2931
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
2932
2932
  log
@@ -4856,7 +4856,7 @@ by a different key is refused; claiming again with the same key extends
4856
4856
  it. --host is a label only.
4857
4857
  `
4858
4858
  ).action(async (opts) => {
4859
- const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-NNLX6KLD.js');
4859
+ const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-YNTKBRNL.js');
4860
4860
  try {
4861
4861
  await runWorkClaim(opts);
4862
4862
  } catch (err) {
@@ -4876,7 +4876,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
4876
4876
  lease has expired, or a 403 if a different key holds it.
4877
4877
  `
4878
4878
  ).action(async (opts) => {
4879
- const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-NNLX6KLD.js');
4879
+ const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-YNTKBRNL.js');
4880
4880
  try {
4881
4881
  await runWorkRenew(opts);
4882
4882
  } catch (err) {
@@ -4908,7 +4908,7 @@ applies to a host's lease only. A later tool call in the session
4908
4908
  takes the lease again.
4909
4909
  `
4910
4910
  ).action(async (opts) => {
4911
- const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-NNLX6KLD.js');
4911
+ const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-YNTKBRNL.js');
4912
4912
  try {
4913
4913
  await runWorkRelease(opts);
4914
4914
  } catch (err) {
@@ -4978,7 +4978,7 @@ function registerRunnerCommands(program2) {
4978
4978
  const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
4979
4979
  runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
4980
4980
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-3JRFDYZL.js');
4981
- const { start, RunnerStartError } = await import('./loop-PJBYILSU.js');
4981
+ const { start, RunnerStartError } = await import('./loop-WMVGW3DH.js');
4982
4982
  const { RunnerAlreadyRunningError } = await import('./pidfile-BMFAUQAI.js');
4983
4983
  const configPath = opts.config ?? defaultRunnerConfigPath();
4984
4984
  try {
@@ -4998,7 +4998,7 @@ function registerRunnerCommands(program2) {
4998
4998
  ).action(async () => {
4999
4999
  const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-3JRFDYZL.js');
5000
5000
  const { containerStart } = await import('./container-start-6AZJQJCH.js');
5001
- const { start, RunnerStartError } = await import('./loop-PJBYILSU.js');
5001
+ const { start, RunnerStartError } = await import('./loop-WMVGW3DH.js');
5002
5002
  const { RunnerAlreadyRunningError } = await import('./pidfile-BMFAUQAI.js');
5003
5003
  try {
5004
5004
  const result = await containerStart({
@@ -5018,7 +5018,7 @@ function registerRunnerCommands(program2) {
5018
5018
  });
5019
5019
  runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
5020
5020
  const { defaultRunnerConfigPath } = await import('./config-3JRFDYZL.js');
5021
- const { runRunnerCheck } = await import('./check-UUWPPYC3.js');
5021
+ const { runRunnerCheck } = await import('./check-FUZ4OTOO.js');
5022
5022
  const configPath = opts.config ?? defaultRunnerConfigPath();
5023
5023
  const result = await runRunnerCheck(configPath);
5024
5024
  if (!result.ok) {
@@ -5418,7 +5418,7 @@ Next:
5418
5418
  });
5419
5419
  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) => {
5420
5420
  const { defaultRunnerConfigPath } = await import('./config-3JRFDYZL.js');
5421
- const { requestStop } = await import('./loop-PJBYILSU.js');
5421
+ const { requestStop } = await import('./loop-WMVGW3DH.js');
5422
5422
  const configPath = opts.config ?? defaultRunnerConfigPath();
5423
5423
  const { runnerImageVersion } = await import('./image-tag-OYT7UG7Y.js');
5424
5424
  await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
@@ -5426,7 +5426,7 @@ Next:
5426
5426
  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) => {
5427
5427
  const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-3JRFDYZL.js');
5428
5428
  const { jobsDir, runnerDir } = await import('./paths-OK2EZS7W.js');
5429
- const { listJobFiles, runnerProcessState } = await import('./loop-PJBYILSU.js');
5429
+ const { listJobFiles, runnerProcessState } = await import('./loop-WMVGW3DH.js');
5430
5430
  const { renderStatus } = await import('./status-C6IM56UC.js');
5431
5431
  const { readHousekeepingRecord } = await import('./record-26AH6WDB.js');
5432
5432
  const path2 = await import('path');
@@ -5487,7 +5487,7 @@ Next:
5487
5487
  });
5488
5488
  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) => {
5489
5489
  const { defaultRunnerConfigPath } = await import('./config-3JRFDYZL.js');
5490
- const { listJobFiles } = await import('./loop-PJBYILSU.js');
5490
+ const { listJobFiles } = await import('./loop-WMVGW3DH.js');
5491
5491
  const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-C3RJ3ZTC.js');
5492
5492
  const configPath = opts.config ?? defaultRunnerConfigPath();
5493
5493
  const item = parseTrackerNumber(itemArg);
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-UFHR6EKZ.js')).recordLinkExitFailure(argv);
29
- var { runCli } = await import('./cli-SOR7FKHH.js');
29
+ var { runCli } = await import('./cli-BYVJAVA7.js');
30
30
  await runCli(process.argv);
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, start, tick, watchTick } from './chunk-KQLUUTLC.js';
3
+ export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, start, tick, watchTick } from './chunk-MFAFJQUS.js';
4
4
  import './chunk-SNLMMLDD.js';
5
5
  import './chunk-3JVYMD4G.js';
6
6
  import './chunk-E7R2GIAW.js';
7
- import './chunk-6C5MZ7UG.js';
7
+ import './chunk-HZITEOLO.js';
8
8
  import './chunk-TZQIEUDE.js';
9
9
  import './chunk-ZVB57WI6.js';
10
10
  import './chunk-X7UUIHGH.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RUNNER_PROTOCOL } from './chunk-6C5MZ7UG.js';
3
+ import { RUNNER_PROTOCOL } from './chunk-HZITEOLO.js';
4
4
  import { defaultRunnerConfigPath } from './chunk-P7BEZAEU.js';
5
5
  import './chunk-UXYLWVTQ.js';
6
6
  import './chunk-YJLHUKYS.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@outerlayer/cli",
3
- "version": "0.31.0-next.20261020133458",
3
+ "version": "0.31.1-next.20261020170819",
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.",