@outerlayer/cli 0.8.4 → 0.8.5
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 +6 -0
- package/dist/build-info.json +1 -1
- package/dist/{check-NJX52PBN.js → check-HWYLSMEL.js} +1 -1
- package/dist/{chunk-LUY6I65J.js → chunk-ZMKXBWIK.js} +13 -9
- package/dist/{cli-JXPTHJHQ.js → cli-5QAP7N4A.js} +5 -5
- package/dist/index.js +1 -1
- package/dist/{loop-C34EVXAP.js → loop-FN67ZHLO.js} +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @outerlayer/cli
|
|
2
2
|
|
|
3
|
+
## 0.8.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 32bd8fd: A runner its service started through `current` no longer says it cannot update itself while it is already draining to restart onto a version `runner install` put in place. That line told the operator to restart the runner, but the restart was already scheduled. The runner now logs only that it is taking no new work and will restart once its builds finish. A runner started by hand, or one whose service starts a version directory, still gets the line, because nothing restarts it for them.
|
|
8
|
+
|
|
3
9
|
## 0.8.4
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"2026-10-
|
|
1
|
+
{"id":"2026-10-05T22:28:11.797Z+f8373f9","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { probeCredentials } from './chunk-
|
|
3
|
+
import { probeCredentials } from './chunk-ZMKXBWIK.js';
|
|
4
4
|
import './chunk-IS4DIGBQ.js';
|
|
5
5
|
import './chunk-I2UOAV7X.js';
|
|
6
6
|
import './chunk-4KPMIGBQ.js';
|
|
@@ -7,7 +7,7 @@ import { writeJobFile, readJobFile, readJobFileChecked } from './chunk-T6OIJQRT.
|
|
|
7
7
|
import { RUNNER_PROTOCOL } from './chunk-AIW6GLET.js';
|
|
8
8
|
import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-UGP76IZ5.js';
|
|
9
9
|
import { placeholderQueues, placeholderProblem } from './chunk-SWGQAURM.js';
|
|
10
|
-
import {
|
|
10
|
+
import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, cleanVersions, isInLayout, stagingDir } from './chunk-TI7B7UEO.js';
|
|
11
11
|
import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
|
|
12
12
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
13
13
|
import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, provisionContainer, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandLine, BuildTokens, classifyRefusal, refusalCode, measureDisk, createRunnerLog, setUpRunnerCgroup, parseCpuList, ensureTunnel, keepGhConfigCurrent, createContainerRuntime, formatClock } from './chunk-GJ3OWUFO.js';
|
|
@@ -949,7 +949,7 @@ function considerNamedVersion(state, named) {
|
|
|
949
949
|
const updating = decision === "update" && !retryHeld(state, named);
|
|
950
950
|
state.pendingUpdate = updating ? named : void 0;
|
|
951
951
|
if (!updating || state.preflightedUpdate !== named) state.preflightedUpdate = void 0;
|
|
952
|
-
if (decision === "cannot_self_update" && !state.cannotSelfUpdateLogged) {
|
|
952
|
+
if (decision === "cannot_self_update" && !state.cannotSelfUpdateLogged && installedSwitchOf(state, update).kind !== "restart") {
|
|
953
953
|
state.cannotSelfUpdateLogged = true;
|
|
954
954
|
logOf(state).line(`this runner cannot update itself to ${named}: ${blocker}`);
|
|
955
955
|
}
|
|
@@ -980,19 +980,23 @@ function reportUpdateResult(state, version, result) {
|
|
|
980
980
|
const retryAt = new Date(result.retryAtMs).toISOString().slice(11, 16);
|
|
981
981
|
logOf(state).error(`could not update to ${version}: ${result.detail} \xB7 attempt ${result.attempts}, trying again after ${retryAt} UTC`);
|
|
982
982
|
}
|
|
983
|
-
function
|
|
984
|
-
const update = state.deps.update;
|
|
985
|
-
if (update === void 0) return false;
|
|
983
|
+
function installedSwitchOf(state, update) {
|
|
986
984
|
const configPath = state.config.configPath;
|
|
987
|
-
const own = ownVersionOf(state.deps);
|
|
988
985
|
const current = currentVersion(configPath);
|
|
989
|
-
|
|
990
|
-
own,
|
|
986
|
+
return decideInstalledSwitch({
|
|
987
|
+
own: ownVersionOf(state.deps),
|
|
991
988
|
current,
|
|
992
989
|
fromCurrent: startedThroughCurrent(configPath, update.entryPath),
|
|
993
990
|
underService: update.underService === true,
|
|
994
991
|
installed: current !== void 0 && existsSync(entryIn(versionDir(configPath, current)))
|
|
995
992
|
});
|
|
993
|
+
}
|
|
994
|
+
function restartOntoInstalled(state) {
|
|
995
|
+
const update = state.deps.update;
|
|
996
|
+
if (update === void 0) return false;
|
|
997
|
+
const configPath = state.config.configPath;
|
|
998
|
+
const own = ownVersionOf(state.deps);
|
|
999
|
+
const decision = installedSwitchOf(state, update);
|
|
996
1000
|
if (decision.kind === "none") {
|
|
997
1001
|
state.installedSwitch = void 0;
|
|
998
1002
|
return false;
|
|
@@ -1956,7 +1960,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
1956
1960
|
const outcome = await onStartUnderMarker({
|
|
1957
1961
|
configPath,
|
|
1958
1962
|
own: ownVersionOf(deps),
|
|
1959
|
-
check: update.check ? () => update.check(configPath) : async () => (await import('./check-
|
|
1963
|
+
check: update.check ? () => update.check(configPath) : async () => (await import('./check-HWYLSMEL.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
|
|
1960
1964
|
now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
|
|
1961
1965
|
log
|
|
1962
1966
|
});
|
|
@@ -4452,7 +4452,7 @@ function registerRunnerCommands(program2) {
|
|
|
4452
4452
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
4453
4453
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
4454
4454
|
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-OOBPCY7Q.js');
|
|
4455
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4455
|
+
const { start, RunnerStartError } = await import('./loop-FN67ZHLO.js');
|
|
4456
4456
|
const { RunnerAlreadyRunningError } = await import('./pidfile-UZRH774M.js');
|
|
4457
4457
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4458
4458
|
try {
|
|
@@ -4468,7 +4468,7 @@ function registerRunnerCommands(program2) {
|
|
|
4468
4468
|
});
|
|
4469
4469
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
4470
4470
|
const { defaultRunnerConfigPath } = await import('./config-OOBPCY7Q.js');
|
|
4471
|
-
const { runRunnerCheck } = await import('./check-
|
|
4471
|
+
const { runRunnerCheck } = await import('./check-HWYLSMEL.js');
|
|
4472
4472
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4473
4473
|
const result = await runRunnerCheck(configPath);
|
|
4474
4474
|
if (!result.ok) {
|
|
@@ -4768,14 +4768,14 @@ Next:
|
|
|
4768
4768
|
});
|
|
4769
4769
|
runnerCmd.command("stop").description("Take no more work; wait for running jobs to finish, then exit").option("--config <path>", "the cloud config file naming the runner to stop").option("--now", "end running jobs immediately, with outcome stopped").action(async (opts) => {
|
|
4770
4770
|
const { defaultRunnerConfigPath } = await import('./config-OOBPCY7Q.js');
|
|
4771
|
-
const { requestStop } = await import('./loop-
|
|
4771
|
+
const { requestStop } = await import('./loop-FN67ZHLO.js');
|
|
4772
4772
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4773
4773
|
await requestStop(configPath, Boolean(opts.now));
|
|
4774
4774
|
});
|
|
4775
4775
|
runnerCmd.command("status").description("List running jobs; with --recent, finished ones too").option("--config <path>", "the cloud config file naming the runner to inspect").option("--recent", "also list finished jobs, newest first, capped at 20").option("--json", "machine-readable JSON output").action(async (opts) => {
|
|
4776
4776
|
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-OOBPCY7Q.js');
|
|
4777
4777
|
const { jobsDir, runnerDir } = await import('./paths-OYKMVYJP.js');
|
|
4778
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
4778
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-FN67ZHLO.js');
|
|
4779
4779
|
const { renderStatus } = await import('./status-7RNWHYG6.js');
|
|
4780
4780
|
const { readHousekeepingRecord } = await import('./record-C43U4PKS.js');
|
|
4781
4781
|
const path2 = await import('path');
|
|
@@ -4828,7 +4828,7 @@ Next:
|
|
|
4828
4828
|
});
|
|
4829
4829
|
runnerCmd.command("logs").argument("<item>", "the work item's number in the factory").description("Print the newest attempt's log for one item").option("--config <path>", "the cloud config file naming the runner to inspect").option("-f, --follow", "keep printing as the log grows").action(async (itemArg, opts) => {
|
|
4830
4830
|
const { defaultRunnerConfigPath } = await import('./config-OOBPCY7Q.js');
|
|
4831
|
-
const { listJobFiles } = await import('./loop-
|
|
4831
|
+
const { listJobFiles } = await import('./loop-FN67ZHLO.js');
|
|
4832
4832
|
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-H55NWW4H.js');
|
|
4833
4833
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4834
4834
|
const item = parseTrackerNumber(itemArg);
|
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-CFLLVMSV.js')).recordLinkExitFailure(argv);
|
|
25
|
-
var { runCli } = await import('./cli-
|
|
25
|
+
var { runCli } = await import('./cli-5QAP7N4A.js');
|
|
26
26
|
await runCli(process.argv);
|
|
@@ -1,6 +1,6 @@
|
|
|
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-
|
|
3
|
+
export { RunnerStartError, listJobFiles, probeCredentials, requestStop, runnerProcessState, start, tick, watchTick } from './chunk-ZMKXBWIK.js';
|
|
4
4
|
import './chunk-IS4DIGBQ.js';
|
|
5
5
|
import './chunk-I2UOAV7X.js';
|
|
6
6
|
import './chunk-4KPMIGBQ.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@outerlayer/cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.5",
|
|
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.",
|