@outerlayer/cli 0.32.0-next.20261020204004 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/build-info.json +1 -1
- package/dist/{check-RGEPORAK.js → check-COMHCLXW.js} +7 -7
- package/dist/{chunk-TV7LE7TM.js → chunk-3PYMMGYO.js} +26 -6
- package/dist/{chunk-FRRJ63U2.js → chunk-5TNEVWFJ.js} +1 -1
- package/dist/{chunk-GNRCLFX7.js → chunk-7F2VPHP7.js} +1 -1
- package/dist/{chunk-VCPEUBXM.js → chunk-CVGMB4N7.js} +91 -2
- package/dist/{chunk-HIS7MJ6O.js → chunk-FKNOPMUD.js} +1 -1
- package/dist/{chunk-GHHRJWAI.js → chunk-JH2AMJ4K.js} +2 -2
- package/dist/{chunk-U2JERFV2.js → chunk-VIHQLW4L.js} +2 -0
- package/dist/{chunk-WRU3K5AN.js → chunk-YKYCE4HY.js} +1 -1
- package/dist/{cli-FSPRS432.js → cli-DLUADCTG.js} +21 -21
- package/dist/{command-ZVRG3GRH.js → command-JRWYFDNM.js} +2 -2
- package/dist/{container-start-TLDKQ5HP.js → container-start-4RJRBPVB.js} +3 -3
- package/dist/{doctor-5YQWPRTW.js → doctor-A3A4X2HJ.js} +4 -4
- package/dist/index.js +1 -1
- package/dist/{init-JWHPLUXM.js → init-CSXI3OQH.js} +3 -3
- package/dist/{init-EL6WIQX6.js → init-SYNDV44H.js} +3 -3
- package/dist/{init-cmd-TQL7Q2NZ.js → init-cmd-ALBPEG7I.js} +1 -1
- package/dist/{loop-7DALGFAY.js → loop-XDJYLT4D.js} +7 -7
- package/dist/{machine-V5NVLRVX.js → machine-GC4MZB5W.js} +2 -2
- package/dist/{runner-key-OO3PYB6C.js → runner-key-7QNJNPQ6.js} +3 -3
- package/dist/{status-OL3KQLBB.js → status-ZR2N44KU.js} +2 -2
- package/dist/{work-claim-cmd-RRRH73HD.js → work-claim-cmd-27OJUZ56.js} +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @outerlayer/cli
|
|
2
2
|
|
|
3
|
+
## 0.32.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 06478ea: A microVM build now sends the memory and CPU its guest used, measured inside the guest, when the runner releases its claim.
|
|
8
|
+
- 522c55a: The runner image reads `OUTERLAYER_BUILD_MEMORY` and `OUTERLAYER_CONCURRENCY` from its env file. On a machine too small for 8 GB builds, it fits each build's memory, down to 4 GB.
|
|
9
|
+
- 0967505: The runner image has a `latest` tag and a tag for each minor version, such as `0.31`. A first `docker run` needs no version number.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 42873e1: `init` ends with commit commands that name only the setup paths that exist and that git does not ignore. It names each path, and each file or folder inside a setup folder, that git ignores.
|
|
14
|
+
- f70c8c2: The runner protocol is now 25. The gateway documents the 429 rate-limited answer on the context source read; the answer itself is unchanged.
|
|
15
|
+
- 6adda17: The runner protocol is now 26. The gateway accepts a heartbeat from a pre-release runner build, whose version is longer than 64 characters.
|
|
16
|
+
- 6eed059: A container build reads the gateway's short answers intact. The runner's session relay lost the start of a short response, so `outerlayer findings show`, `outerlayer emit step` and `outerlayer work open-pr` failed in the build with "fetch failed".
|
|
17
|
+
|
|
18
|
+
The `build` template opens the pull request when `outerlayer findings show` fails twice, and says in the description that the covered problems were not checked. `outerlayer init --update` gives an unedited `build` the new rule.
|
|
19
|
+
|
|
20
|
+
- d39f74e: The starter `/spec` skill asks where to build: on a host, in a session you start, or not yet. A host build no longer prints the `/build` launch line, which built the item a second time. Run `outerlayer init --update` to get the new `spec` skill if you have not edited it.
|
|
21
|
+
- 8773b66: A build whose push GitHub refused for a workflow change is released `failed` with `workflow_permission_required`, not `incomplete` with "the build opened no pull request". The build skill's final report names the policy lines that allow the change.
|
|
22
|
+
|
|
3
23
|
## 0.31.0
|
|
4
24
|
|
|
5
25
|
### Minor Changes
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"2026-10-
|
|
1
|
+
{"id":"2026-10-21T10:25:56.495Z+814b9ca","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { probeCredentials } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
import { probeCredentials } from './chunk-3PYMMGYO.js';
|
|
4
|
+
import './chunk-CVGMB4N7.js';
|
|
5
5
|
import './chunk-3JVYMD4G.js';
|
|
6
6
|
import './chunk-WHSYPR3U.js';
|
|
7
7
|
import './chunk-E7R2GIAW.js';
|
|
8
|
-
import './chunk-
|
|
8
|
+
import './chunk-YKYCE4HY.js';
|
|
9
9
|
import './chunk-TZQIEUDE.js';
|
|
10
10
|
import './chunk-ZVB57WI6.js';
|
|
11
11
|
import './chunk-X7UUIHGH.js';
|
|
@@ -16,13 +16,13 @@ import './chunk-KCB6V5XH.js';
|
|
|
16
16
|
import './chunk-XKZPL3GE.js';
|
|
17
17
|
import './chunk-ESVW4MJY.js';
|
|
18
18
|
import './chunk-XTNMIV77.js';
|
|
19
|
-
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, managedProblems, managedFactsOf, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-
|
|
19
|
+
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, managedProblems, managedFactsOf, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-FKNOPMUD.js';
|
|
20
20
|
import './chunk-YYYRBYWG.js';
|
|
21
21
|
import './chunk-ZZSQYOY5.js';
|
|
22
22
|
import './chunk-TBT347UY.js';
|
|
23
|
-
import './chunk-
|
|
24
|
-
import './chunk-
|
|
25
|
-
import { probeHelper, HELPER_ENV, helperSocketPath } from './chunk-
|
|
23
|
+
import './chunk-JH2AMJ4K.js';
|
|
24
|
+
import './chunk-5TNEVWFJ.js';
|
|
25
|
+
import { probeHelper, HELPER_ENV, helperSocketPath } from './chunk-VIHQLW4L.js';
|
|
26
26
|
import './chunk-QQGZ5THT.js';
|
|
27
27
|
import './chunk-HIGJTX5U.js';
|
|
28
28
|
import './chunk-SXJVL7NS.js';
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
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-
|
|
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, 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-CVGMB4N7.js';
|
|
4
4
|
import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
|
|
5
5
|
import { fitImageBuildMemory } from './chunk-WHSYPR3U.js';
|
|
6
6
|
import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-E7R2GIAW.js';
|
|
7
|
-
import { RUNNER_PROTOCOL } from './chunk-
|
|
7
|
+
import { RUNNER_PROTOCOL } from './chunk-YKYCE4HY.js';
|
|
8
8
|
import { writePendingUpdate } from './chunk-TZQIEUDE.js';
|
|
9
9
|
import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
|
|
10
10
|
import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-X7UUIHGH.js';
|
|
11
|
-
import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-
|
|
11
|
+
import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-FKNOPMUD.js';
|
|
12
12
|
import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
|
|
13
13
|
import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-ZZSQYOY5.js';
|
|
14
14
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
15
|
-
import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-
|
|
15
|
+
import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-VIHQLW4L.js';
|
|
16
16
|
import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-SXJVL7NS.js';
|
|
17
17
|
import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-IWYS4ERC.js';
|
|
18
18
|
import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
|
|
@@ -2524,6 +2524,21 @@ async function endOrWaitForMicroVm(state, active) {
|
|
|
2524
2524
|
log.error(`${tag} the build's command could not be read from its microVM \xB7 trying again`);
|
|
2525
2525
|
}
|
|
2526
2526
|
}
|
|
2527
|
+
async function sampleUsage(state, active) {
|
|
2528
|
+
const microvm = active.job.microvm;
|
|
2529
|
+
if (microvm?.vsockPath === void 0 || active.ending || active.sampling) return;
|
|
2530
|
+
active.sampling = true;
|
|
2531
|
+
try {
|
|
2532
|
+
const sample = await sampleGuest(runtimeOf(state), microvm);
|
|
2533
|
+
if (sample === void 0 || active.ending) return;
|
|
2534
|
+
active.job.guestUsage = foldSample(active.job.guestUsage, sample);
|
|
2535
|
+
writeJobFile(join(active.dirPath, "job.json"), active.job);
|
|
2536
|
+
} catch (err) {
|
|
2537
|
+
logOf(state).error(`#${active.job.item} reading the build's guest for its usage failed: ${describeCallFailure(err)}`);
|
|
2538
|
+
} finally {
|
|
2539
|
+
active.sampling = false;
|
|
2540
|
+
}
|
|
2541
|
+
}
|
|
2527
2542
|
async function probeBuild(state, active) {
|
|
2528
2543
|
const container = active.job.container;
|
|
2529
2544
|
const tracked = container !== void 0 && isContainerTracked(active.job) ? container : isMicroVmTracked(active.job) ? active.job.microvm : void 0;
|
|
@@ -2932,7 +2947,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2932
2947
|
check: update.check ? () => update.check(configPath) : async () => {
|
|
2933
2948
|
const held = heldClaudeCredential();
|
|
2934
2949
|
const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
|
|
2935
|
-
return (await import('./check-
|
|
2950
|
+
return (await import('./check-COMHCLXW.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
|
|
2936
2951
|
},
|
|
2937
2952
|
now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
|
|
2938
2953
|
log
|
|
@@ -3064,6 +3079,9 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
3064
3079
|
const probeTimer = setInterval(() => {
|
|
3065
3080
|
for (const active of state.jobs.values()) void probeBuild(state, active);
|
|
3066
3081
|
}, deps.probeIntervalMs ?? PROBE_INTERVAL_MS);
|
|
3082
|
+
const usageTimer = setInterval(() => {
|
|
3083
|
+
for (const active of state.jobs.values()) void sampleUsage(state, active);
|
|
3084
|
+
}, deps.usageIntervalMs ?? GUEST_USAGE_INTERVAL_MS);
|
|
3067
3085
|
const onSigterm = () => {
|
|
3068
3086
|
if (deps.image !== void 0) leave();
|
|
3069
3087
|
else if (leavesBuilds && buildBlockers(runningBuilds(state)).length === 0) leave();
|
|
@@ -3102,6 +3120,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
3102
3120
|
clearInterval(pollTimer);
|
|
3103
3121
|
clearInterval(watchTimer);
|
|
3104
3122
|
clearInterval(probeTimer);
|
|
3123
|
+
clearInterval(usageTimer);
|
|
3105
3124
|
};
|
|
3106
3125
|
const finish2 = () => {
|
|
3107
3126
|
if (exited) return;
|
|
@@ -3151,6 +3170,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
3151
3170
|
clearInterval(pollTimer);
|
|
3152
3171
|
clearInterval(watchTimer);
|
|
3153
3172
|
clearInterval(probeTimer);
|
|
3173
|
+
clearInterval(usageTimer);
|
|
3154
3174
|
log.line(`stopping: ending ${state.jobs.size} running job(s) now`);
|
|
3155
3175
|
await Promise.all([...state.jobs.values()].map((active) => endJob(state, active, "stopped")));
|
|
3156
3176
|
finish2();
|
|
@@ -3249,4 +3269,4 @@ function runnerProcessState(configPath) {
|
|
|
3249
3269
|
return isSameProcess(entry.pid, entry.start) ? { state: "running", pid: entry.pid } : { state: "stale", pid: entry.pid };
|
|
3250
3270
|
}
|
|
3251
3271
|
|
|
3252
|
-
export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, start, tick, watchTick };
|
|
3272
|
+
export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, sampleUsage, start, tick, watchTick };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { MIN_ENGINE_MAJOR } from './chunk-
|
|
3
|
+
import { MIN_ENGINE_MAJOR } from './chunk-VIHQLW4L.js';
|
|
4
4
|
import { runnerImageVersion } from './chunk-IWYS4ERC.js';
|
|
5
5
|
import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-SJZL5F3F.js';
|
|
6
6
|
import { spawnSync } from 'child_process';
|
|
@@ -1211,7 +1211,7 @@ async function gatherDoctorChecks() {
|
|
|
1211
1211
|
const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
|
|
1212
1212
|
checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
|
|
1213
1213
|
} else if (hasRunnerBlock(configPath)) {
|
|
1214
|
-
const { runnerHostChecks } = await import('./doctor-
|
|
1214
|
+
const { runnerHostChecks } = await import('./doctor-A3A4X2HJ.js');
|
|
1215
1215
|
const gateway = (() => {
|
|
1216
1216
|
try {
|
|
1217
1217
|
const { url, apiKey, appId } = loadRunnerConfig(configPath);
|
|
@@ -6,7 +6,7 @@ import { zodProblem } from './chunk-I3LTIAOR.js';
|
|
|
6
6
|
import { senderPidfile } from './chunk-JFLVUA43.js';
|
|
7
7
|
import { installScrubContext } from './chunk-KCB6V5XH.js';
|
|
8
8
|
import { writeDockerClientConfig } from './chunk-XTNMIV77.js';
|
|
9
|
-
import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, helperFirecrackerNote, HelperRefusal, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-
|
|
9
|
+
import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, helperFirecrackerNote, HelperRefusal, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-VIHQLW4L.js';
|
|
10
10
|
import { waitForAgent, vmExecArgs } from './chunk-QQGZ5THT.js';
|
|
11
11
|
import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-HIGJTX5U.js';
|
|
12
12
|
import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, WORKFLOW_PERMISSION_REASON, keptContextTree } from './chunk-SXJVL7NS.js';
|
|
@@ -1145,6 +1145,82 @@ async function stopOrphanedMicroVms(input) {
|
|
|
1145
1145
|
}
|
|
1146
1146
|
return stopped;
|
|
1147
1147
|
}
|
|
1148
|
+
|
|
1149
|
+
// src/runner/microvm/guest-usage.ts
|
|
1150
|
+
var GUEST_USAGE_INTERVAL_MS = 15e3;
|
|
1151
|
+
var MS_PER_TICK = 10;
|
|
1152
|
+
function usageScript(procDir = "/proc") {
|
|
1153
|
+
return [
|
|
1154
|
+
`echo OL-USAGE-MEMINFO; cat ${procDir}/meminfo`,
|
|
1155
|
+
`echo OL-USAGE-STAT; cat ${procDir}/stat`,
|
|
1156
|
+
`if [ -r ${procDir}/pressure/memory ]; then echo OL-USAGE-PSI-MEMORY; cat ${procDir}/pressure/memory; fi`,
|
|
1157
|
+
`if [ -r ${procDir}/pressure/cpu ]; then echo OL-USAGE-PSI-CPU; cat ${procDir}/pressure/cpu; fi`
|
|
1158
|
+
].join("; ");
|
|
1159
|
+
}
|
|
1160
|
+
function section(stdout, name) {
|
|
1161
|
+
const lines = stdout.split("\n");
|
|
1162
|
+
const start = lines.indexOf(`OL-USAGE-${name}`);
|
|
1163
|
+
if (start === -1) return void 0;
|
|
1164
|
+
const end = lines.findIndex((line, index) => index > start && line.startsWith("OL-USAGE-"));
|
|
1165
|
+
return lines.slice(start + 1, end === -1 ? void 0 : end).join("\n");
|
|
1166
|
+
}
|
|
1167
|
+
function meminfoKb(text2, key) {
|
|
1168
|
+
const match = new RegExp(`^${key}:\\s+(\\d+)\\s+kB\\s*$`, "m").exec(text2);
|
|
1169
|
+
return match === null ? void 0 : Number(match[1]);
|
|
1170
|
+
}
|
|
1171
|
+
function pressureTotal(text2) {
|
|
1172
|
+
if (text2 === void 0) return void 0;
|
|
1173
|
+
const match = /^some\s.*\btotal=(\d+)\s*$/m.exec(text2);
|
|
1174
|
+
return match === null ? void 0 : Number(match[1]);
|
|
1175
|
+
}
|
|
1176
|
+
function parseGuestSample(stdout) {
|
|
1177
|
+
const meminfo = section(stdout, "MEMINFO");
|
|
1178
|
+
const stat = section(stdout, "STAT");
|
|
1179
|
+
if (meminfo === void 0 || stat === void 0) return void 0;
|
|
1180
|
+
const totalKb = meminfoKb(meminfo, "MemTotal");
|
|
1181
|
+
const availableKb = meminfoKb(meminfo, "MemAvailable");
|
|
1182
|
+
const aggregate = /^cpu\s+(\d+(?:\s+\d+){7,})\s*$/m.exec(stat);
|
|
1183
|
+
if (totalKb === void 0 || availableKb === void 0 || totalKb <= 0 || availableKb > totalKb || aggregate === null) return void 0;
|
|
1184
|
+
const [user, nice, system, , , irq, softirq, steal] = aggregate[1].split(/\s+/).map(Number);
|
|
1185
|
+
const vcpus = stat.split("\n").filter((line) => /^cpu\d+\s/.test(line)).length;
|
|
1186
|
+
if (vcpus < 1) return void 0;
|
|
1187
|
+
const memoryPressureUs = pressureTotal(section(stdout, "PSI-MEMORY"));
|
|
1188
|
+
const cpuPressureUs = pressureTotal(section(stdout, "PSI-CPU"));
|
|
1189
|
+
return {
|
|
1190
|
+
memoryBytes: totalKb * 1024,
|
|
1191
|
+
vcpus,
|
|
1192
|
+
usedBytes: (totalKb - availableKb) * 1024,
|
|
1193
|
+
cpuBusyMs: (user + nice + system + irq + softirq + steal) * MS_PER_TICK,
|
|
1194
|
+
...memoryPressureUs === void 0 ? {} : { memoryPressureUs },
|
|
1195
|
+
...cpuPressureUs === void 0 ? {} : { cpuPressureUs }
|
|
1196
|
+
};
|
|
1197
|
+
}
|
|
1198
|
+
function foldSample(usage, sample) {
|
|
1199
|
+
return { peakMemoryBytes: Math.max(usage?.peakMemoryBytes ?? 0, sample.usedBytes), last: sample };
|
|
1200
|
+
}
|
|
1201
|
+
function usageRecord(usage) {
|
|
1202
|
+
if (usage === void 0) return void 0;
|
|
1203
|
+
const { last } = usage;
|
|
1204
|
+
return {
|
|
1205
|
+
guestMemoryBytes: last.memoryBytes,
|
|
1206
|
+
guestVcpus: last.vcpus,
|
|
1207
|
+
peakMemoryBytes: usage.peakMemoryBytes,
|
|
1208
|
+
cpuBusyMs: last.cpuBusyMs,
|
|
1209
|
+
...last.memoryPressureUs === void 0 ? {} : { memoryPressureUs: last.memoryPressureUs },
|
|
1210
|
+
...last.cpuPressureUs === void 0 ? {} : { cpuPressureUs: last.cpuPressureUs }
|
|
1211
|
+
};
|
|
1212
|
+
}
|
|
1213
|
+
async function sampleGuest(runtime, state) {
|
|
1214
|
+
if (state.vsockPath === void 0) return void 0;
|
|
1215
|
+
try {
|
|
1216
|
+
const result = await withinTime(
|
|
1217
|
+
(signal) => runtime.vm.exec(state.vsockPath, { argv: ["/bin/sh", "-c", usageScript()], user: "root", cwd: "/", env: { PATH: GUEST_PATH } }, { signal })
|
|
1218
|
+
);
|
|
1219
|
+
return result.status === 0 ? parseGuestSample(result.stdout) : void 0;
|
|
1220
|
+
} catch {
|
|
1221
|
+
return void 0;
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1148
1224
|
function provisionEnvironment(base, input) {
|
|
1149
1225
|
return {
|
|
1150
1226
|
...base,
|
|
@@ -2891,6 +2967,9 @@ async function releaseLease(config, item, outcome, detail, fetchImpl) {
|
|
|
2891
2967
|
sent = "ok";
|
|
2892
2968
|
} else if (log !== void 0 && /\blog\b/.test(err.message)) {
|
|
2893
2969
|
log = void 0;
|
|
2970
|
+
} else if (environment?.guestUsage !== void 0) {
|
|
2971
|
+
const { guestUsage: _omittedUsage, ...withoutUsage } = environment;
|
|
2972
|
+
environment = withoutUsage;
|
|
2894
2973
|
} else if (environment?.controlPlane !== void 0) {
|
|
2895
2974
|
const { controlPlane: _omittedPlane, ...withoutPlane } = environment;
|
|
2896
2975
|
environment = withoutPlane;
|
|
@@ -3000,6 +3079,13 @@ async function finishJob(job, jobDirPath, outcome, config, deps, ending) {
|
|
|
3000
3079
|
const build = job.container === void 0 ? void 0 : { state: job.container, runtime: deps.container ?? createContainerRuntime() };
|
|
3001
3080
|
const vmBuild = job.microvm === void 0 ? void 0 : { state: job.microvm, runtime: deps.container ?? createContainerRuntime() };
|
|
3002
3081
|
const commandMayRun = job.pid !== void 0 && isGroupAlive(job.pid) || isContainerTracked(job) && job.exitCode === void 0;
|
|
3082
|
+
if (vmBuild !== void 0) {
|
|
3083
|
+
const sample = await sampleGuest(vmBuild.runtime, vmBuild.state);
|
|
3084
|
+
if (sample !== void 0) {
|
|
3085
|
+
job.guestUsage = foldSample(job.guestUsage, sample);
|
|
3086
|
+
writeJobFile(jobFilePath, job);
|
|
3087
|
+
}
|
|
3088
|
+
}
|
|
3003
3089
|
if (vmBuild !== void 0 && isMicroVmTracked(job) && job.exitCode === void 0) {
|
|
3004
3090
|
await endMicroVmCommand(vmBuild.runtime, vmBuild.state, jobDirPath, (line) => log.error(`${tag} ${line}`));
|
|
3005
3091
|
}
|
|
@@ -3298,6 +3384,9 @@ async function finishJob(job, jobDirPath, outcome, config, deps, ending) {
|
|
|
3298
3384
|
job.environment = base;
|
|
3299
3385
|
}
|
|
3300
3386
|
job.environment = { ...job.environment, commitIdentity: commitIdentityRecord(job.commitIdentity) };
|
|
3387
|
+
const guestUsage = job.microvm === void 0 ? void 0 : usageRecord(job.guestUsage);
|
|
3388
|
+
if (guestUsage !== void 0) job.environment = { ...job.environment, guestUsage };
|
|
3389
|
+
else delete job.environment.guestUsage;
|
|
3301
3390
|
writeJobFile(jobFilePath, job);
|
|
3302
3391
|
}
|
|
3303
3392
|
const sentAtMs = now().getTime();
|
|
@@ -3599,4 +3688,4 @@ async function stopSender(input) {
|
|
|
3599
3688
|
}
|
|
3600
3689
|
}
|
|
3601
3690
|
|
|
3602
|
-
export { ALREADY_RELEASED, AttemptLogBook, EXIT_CODE_FILE, MICROVM_COMMAND_DIR, RENEW_INTERVAL_SECONDS, appendCommandLog, commandLogOffset, deliverCommitHooks, describeHookEnd, execArgv, execCommandLine, finishJob, hookLimitsFor, hostCommandEnvironment, hostEnvironment, inTeardown, isContainerTracked, isGroupAlive, isIdle, isMicroVmTracked, isReadable, isTimedOut, isTracked, isUnfinished, jobEnv, judgeProbe, listAdoptableJobs, listTrackedJobs, listUnreadableJobs, listenOnBroker, microVmCommandLine, microVmOomKills, needsRenew, outcomeFromExitCode, probeCommand, probeMicroVmCommand, provisionEnvironment, provisionMicroVm, provisionProcess, readCpuUsec, readProvisionOut, recoverLostJobs, releaseLease, renewLease, resolveHostBuild, restartSender, retryFailedReleases, runCommand, runHook, serveLease, setStage, startHostServices, startMicroVmCommand, startSender, stopOrphanedMicroVms, unfinishedJobs, vmAlive, workdirProblem, writeGuestGhConfig };
|
|
3691
|
+
export { ALREADY_RELEASED, AttemptLogBook, EXIT_CODE_FILE, GUEST_USAGE_INTERVAL_MS, MICROVM_COMMAND_DIR, RENEW_INTERVAL_SECONDS, appendCommandLog, commandLogOffset, deliverCommitHooks, describeHookEnd, execArgv, execCommandLine, finishJob, foldSample, hookLimitsFor, hostCommandEnvironment, hostEnvironment, inTeardown, isContainerTracked, isGroupAlive, isIdle, isMicroVmTracked, isReadable, isTimedOut, isTracked, isUnfinished, jobEnv, judgeProbe, listAdoptableJobs, listTrackedJobs, listUnreadableJobs, listenOnBroker, microVmCommandLine, microVmOomKills, needsRenew, outcomeFromExitCode, probeCommand, probeMicroVmCommand, provisionEnvironment, provisionMicroVm, provisionProcess, readCpuUsec, readProvisionOut, recoverLostJobs, releaseLease, renewLease, resolveHostBuild, restartSender, retryFailedReleases, runCommand, runHook, sampleGuest, serveLease, setStage, startHostServices, startMicroVmCommand, startSender, stopOrphanedMicroVms, unfinishedJobs, vmAlive, workdirProblem, writeGuestGhConfig };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { isPlaceholderCommand } from './chunk-
|
|
3
|
+
import { isPlaceholderCommand } from './chunk-JH2AMJ4K.js';
|
|
4
4
|
import { describeCallFailure } from './chunk-SXJVL7NS.js';
|
|
5
5
|
import { checkFit } from './chunk-RQGHHEM7.js';
|
|
6
6
|
import { builtinKind } from './chunk-P7BEZAEU.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-
|
|
4
|
-
import { MIN_ENGINE_MAJOR } from './chunk-
|
|
3
|
+
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-5TNEVWFJ.js';
|
|
4
|
+
import { MIN_ENGINE_MAJOR } from './chunk-VIHQLW4L.js';
|
|
5
5
|
import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-NJS7JJYN.js';
|
|
6
6
|
import { runnerCredentialProblem } from './chunk-P7BEZAEU.js';
|
|
7
7
|
import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-KP6R7CV3.js';
|
|
@@ -883,6 +883,8 @@ function machineConfig(limits2, paths) {
|
|
|
883
883
|
"i8042.nomux",
|
|
884
884
|
"i8042.nopnp",
|
|
885
885
|
"i8042.dumbkbd",
|
|
886
|
+
// The pinned guest kernel builds pressure stall information default-disabled; the guest usage record reads it.
|
|
887
|
+
"psi=1",
|
|
886
888
|
"ro",
|
|
887
889
|
"root=/dev/vda",
|
|
888
890
|
"rootfstype=ext4",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-
|
|
3
|
+
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-7F2VPHP7.js';
|
|
4
4
|
import './chunk-BCWVTWS7.js';
|
|
5
5
|
import './chunk-4XPAQXJF.js';
|
|
6
6
|
import './chunk-KT4CN6OU.js';
|
|
@@ -3926,13 +3926,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3926
3926
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3927
3927
|
`);
|
|
3928
3928
|
}
|
|
3929
|
-
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-
|
|
3929
|
+
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-ALBPEG7I.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3930
3930
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3931
3931
|
else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
|
|
3932
3932
|
return;
|
|
3933
3933
|
}
|
|
3934
3934
|
await installMachineSkillsForSetup();
|
|
3935
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3935
|
+
const { runInitCommand } = await import('./init-cmd-ALBPEG7I.js');
|
|
3936
3936
|
const code = await runInitCommand(
|
|
3937
3937
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3938
3938
|
{
|
|
@@ -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-
|
|
4859
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-27OJUZ56.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-
|
|
4879
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-27OJUZ56.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-
|
|
4911
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-27OJUZ56.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-
|
|
4981
|
+
const { start, RunnerStartError } = await import('./loop-XDJYLT4D.js');
|
|
4982
4982
|
const { RunnerAlreadyRunningError } = await import('./pidfile-BMFAUQAI.js');
|
|
4983
4983
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4984
4984
|
try {
|
|
@@ -4997,8 +4997,8 @@ function registerRunnerCommands(program2) {
|
|
|
4997
4997
|
"\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"
|
|
4998
4998
|
).action(async () => {
|
|
4999
4999
|
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-3JRFDYZL.js');
|
|
5000
|
-
const { containerStart } = await import('./container-start-
|
|
5001
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
5000
|
+
const { containerStart } = await import('./container-start-4RJRBPVB.js');
|
|
5001
|
+
const { start, RunnerStartError } = await import('./loop-XDJYLT4D.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-
|
|
5021
|
+
const { runRunnerCheck } = await import('./check-COMHCLXW.js');
|
|
5022
5022
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5023
5023
|
const result = await runRunnerCheck(configPath);
|
|
5024
5024
|
if (!result.ok) {
|
|
@@ -5052,7 +5052,7 @@ function registerRunnerCommands(program2) {
|
|
|
5052
5052
|
}
|
|
5053
5053
|
try {
|
|
5054
5054
|
if (opts.service === true) {
|
|
5055
|
-
const { installServiceCommand } = await import('./command-
|
|
5055
|
+
const { installServiceCommand } = await import('./command-JRWYFDNM.js');
|
|
5056
5056
|
const result2 = await installServiceCommand({
|
|
5057
5057
|
configPath,
|
|
5058
5058
|
print: opts.print,
|
|
@@ -5108,7 +5108,7 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5108
5108
|
return;
|
|
5109
5109
|
}
|
|
5110
5110
|
const { defaultRunnerConfigPath } = await import('./config-3JRFDYZL.js');
|
|
5111
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5111
|
+
const { uninstallServiceCommand } = await import('./command-JRWYFDNM.js');
|
|
5112
5112
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5113
5113
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5114
5114
|
`);
|
|
@@ -5136,10 +5136,10 @@ already in claude.env is used.
|
|
|
5136
5136
|
`
|
|
5137
5137
|
).action(async (opts) => {
|
|
5138
5138
|
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-3JRFDYZL.js');
|
|
5139
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5140
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5141
|
-
const { detectMachine } = await import('./machine-
|
|
5142
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5139
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-SYNDV44H.js');
|
|
5140
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-7QNJNPQ6.js');
|
|
5141
|
+
const { detectMachine } = await import('./machine-GC4MZB5W.js');
|
|
5142
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-CSXI3OQH.js');
|
|
5143
5143
|
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-66RAFIDJ.js');
|
|
5144
5144
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5145
5145
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
@@ -5290,7 +5290,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5290
5290
|
let serviceUp = false;
|
|
5291
5291
|
let restart;
|
|
5292
5292
|
if (installedLayout) {
|
|
5293
|
-
const { installServiceCommand } = await import('./command-
|
|
5293
|
+
const { installServiceCommand } = await import('./command-JRWYFDNM.js');
|
|
5294
5294
|
const service = await installServiceCommand({
|
|
5295
5295
|
configPath,
|
|
5296
5296
|
entryPath: process.argv[1] ?? "",
|
|
@@ -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-
|
|
5421
|
+
const { requestStop } = await import('./loop-XDJYLT4D.js');
|
|
5422
5422
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5423
5423
|
const { runnerImageVersion } = await import('./image-tag-NM2YT2J2.js');
|
|
5424
5424
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
@@ -5426,8 +5426,8 @@ 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-
|
|
5430
|
-
const { renderStatus } = await import('./status-
|
|
5429
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-XDJYLT4D.js');
|
|
5430
|
+
const { renderStatus } = await import('./status-ZR2N44KU.js');
|
|
5431
5431
|
const { readHousekeepingRecord } = await import('./record-26AH6WDB.js');
|
|
5432
5432
|
const path2 = await import('path');
|
|
5433
5433
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
@@ -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-
|
|
5490
|
+
const { listJobFiles } = await import('./loop-XDJYLT4D.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);
|
|
@@ -3,8 +3,8 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import { runRunnerInstall, launcherSummary, restartNote } from './chunk-77F7NGAZ.js';
|
|
4
4
|
import './chunk-ZBN4JGTJ.js';
|
|
5
5
|
import { currentLink, execStartCommand } from './chunk-ZZSQYOY5.js';
|
|
6
|
-
import { detectMachine } from './chunk-
|
|
7
|
-
import { helperSocketPath, ensureFirecrackerAndJailer } from './chunk-
|
|
6
|
+
import { detectMachine } from './chunk-5TNEVWFJ.js';
|
|
7
|
+
import { helperSocketPath, ensureFirecrackerAndJailer } from './chunk-VIHQLW4L.js';
|
|
8
8
|
import './chunk-QQGZ5THT.js';
|
|
9
9
|
import './chunk-HIGJTX5U.js';
|
|
10
10
|
import './chunk-SXJVL7NS.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { BUILD_MEMORY_VARIABLE } from './chunk-WHSYPR3U.js';
|
|
4
|
-
import { RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-
|
|
5
|
-
import { detectMachine, supportsContainerBuilds, describeMachineDocker } from './chunk-
|
|
6
|
-
import { MIN_ENGINE_MAJOR } from './chunk-
|
|
4
|
+
import { RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-JH2AMJ4K.js';
|
|
5
|
+
import { detectMachine, supportsContainerBuilds, describeMachineDocker } from './chunk-5TNEVWFJ.js';
|
|
6
|
+
import { MIN_ENGINE_MAJOR } from './chunk-VIHQLW4L.js';
|
|
7
7
|
import './chunk-QQGZ5THT.js';
|
|
8
8
|
import './chunk-HIGJTX5U.js';
|
|
9
9
|
import './chunk-SXJVL7NS.js';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { needsClaudeCredential, claudeCredentialCheck, managedProblems, missingPermissionOf, missingPermissionFix } from './chunk-
|
|
3
|
+
import { needsClaudeCredential, claudeCredentialCheck, managedProblems, missingPermissionOf, missingPermissionFix } from './chunk-FKNOPMUD.js';
|
|
4
4
|
import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
|
|
5
5
|
import { launcherCheck } from './chunk-ZBN4JGTJ.js';
|
|
6
6
|
import './chunk-ZZSQYOY5.js';
|
|
7
7
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-
|
|
10
|
-
import { MIN_ENGINE_MAJOR, helperFirecrackerNote, probeHelper, helperSocketPath } from './chunk-
|
|
8
|
+
import './chunk-JH2AMJ4K.js';
|
|
9
|
+
import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-5TNEVWFJ.js';
|
|
10
|
+
import { MIN_ENGINE_MAJOR, helperFirecrackerNote, probeHelper, helperSocketPath } from './chunk-VIHQLW4L.js';
|
|
11
11
|
import './chunk-QQGZ5THT.js';
|
|
12
12
|
import './chunk-HIGJTX5U.js';
|
|
13
13
|
import './chunk-SXJVL7NS.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-UFHR6EKZ.js')).recordLinkExitFailure(argv);
|
|
29
|
-
var { runCli } = await import('./cli-
|
|
29
|
+
var { runCli } = await import('./cli-DLUADCTG.js');
|
|
30
30
|
await runCli(process.argv);
|
|
@@ -1,9 +1,9 @@
|
|
|
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-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import { RunnerInitError, readConfigObject } from './chunk-JH2AMJ4K.js';
|
|
5
|
+
import './chunk-5TNEVWFJ.js';
|
|
6
|
+
import './chunk-VIHQLW4L.js';
|
|
7
7
|
import './chunk-QQGZ5THT.js';
|
|
8
8
|
import './chunk-HIGJTX5U.js';
|
|
9
9
|
import './chunk-SXJVL7NS.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
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-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
3
|
+
export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, prepareRunnerInit, readConfigObject, runRunnerInit, writeRunnerInit } from './chunk-JH2AMJ4K.js';
|
|
4
|
+
import './chunk-5TNEVWFJ.js';
|
|
5
|
+
import './chunk-VIHQLW4L.js';
|
|
6
6
|
import './chunk-QQGZ5THT.js';
|
|
7
7
|
import './chunk-HIGJTX5U.js';
|
|
8
8
|
import './chunk-SXJVL7NS.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { summarizeChecks, summaryText, renderDoctorText } from './chunk-
|
|
3
|
+
import { summarizeChecks, summaryText, renderDoctorText } from './chunk-7F2VPHP7.js';
|
|
4
4
|
import './chunk-BCWVTWS7.js';
|
|
5
5
|
import { shellFunctionInstalled, removeShellFunction, installShellFunction, SHELL_FUNCTION_LINE } from './chunk-CJJDJ7AT.js';
|
|
6
6
|
import './chunk-4XPAQXJF.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
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-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { RunnerStartError, leaseTimeLeftFor, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, runtimeOf, sampleUsage, start, tick, watchTick } from './chunk-3PYMMGYO.js';
|
|
4
|
+
import './chunk-CVGMB4N7.js';
|
|
5
5
|
import './chunk-3JVYMD4G.js';
|
|
6
6
|
import './chunk-WHSYPR3U.js';
|
|
7
7
|
import './chunk-E7R2GIAW.js';
|
|
8
|
-
import './chunk-
|
|
8
|
+
import './chunk-YKYCE4HY.js';
|
|
9
9
|
import './chunk-TZQIEUDE.js';
|
|
10
10
|
import './chunk-ZVB57WI6.js';
|
|
11
11
|
import './chunk-X7UUIHGH.js';
|
|
@@ -16,13 +16,13 @@ import './chunk-KCB6V5XH.js';
|
|
|
16
16
|
import './chunk-XKZPL3GE.js';
|
|
17
17
|
import './chunk-ESVW4MJY.js';
|
|
18
18
|
import './chunk-XTNMIV77.js';
|
|
19
|
-
import './chunk-
|
|
19
|
+
import './chunk-FKNOPMUD.js';
|
|
20
20
|
import './chunk-YYYRBYWG.js';
|
|
21
21
|
import './chunk-ZZSQYOY5.js';
|
|
22
22
|
import './chunk-TBT347UY.js';
|
|
23
|
-
import './chunk-
|
|
24
|
-
import './chunk-
|
|
25
|
-
import './chunk-
|
|
23
|
+
import './chunk-JH2AMJ4K.js';
|
|
24
|
+
import './chunk-5TNEVWFJ.js';
|
|
25
|
+
import './chunk-VIHQLW4L.js';
|
|
26
26
|
import './chunk-QQGZ5THT.js';
|
|
27
27
|
import './chunk-HIGJTX5U.js';
|
|
28
28
|
import './chunk-SXJVL7NS.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { describeMachineDocker, detectMachine, microVmArchSupported, microVmAssetsPinned, reachDockerStep, supportsContainerBuilds, supportsMicroVmBuilds } from './chunk-5TNEVWFJ.js';
|
|
4
|
+
import './chunk-VIHQLW4L.js';
|
|
5
5
|
import './chunk-QQGZ5THT.js';
|
|
6
6
|
import './chunk-HIGJTX5U.js';
|
|
7
7
|
import './chunk-SXJVL7NS.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { readConfigObject, RunnerInitError } from './chunk-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
3
|
+
import { readConfigObject, RunnerInitError } from './chunk-JH2AMJ4K.js';
|
|
4
|
+
import './chunk-5TNEVWFJ.js';
|
|
5
|
+
import './chunk-VIHQLW4L.js';
|
|
6
6
|
import './chunk-QQGZ5THT.js';
|
|
7
7
|
import './chunk-HIGJTX5U.js';
|
|
8
8
|
import './chunk-SXJVL7NS.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-
|
|
3
|
+
import { isReadable, ALREADY_RELEASED, RENEW_INTERVAL_SECONDS } from './chunk-CVGMB4N7.js';
|
|
4
4
|
import { jobStateFormatOf } from './chunk-ZVB57WI6.js';
|
|
5
5
|
import './chunk-RJYKTWUP.js';
|
|
6
6
|
import './chunk-I3LTIAOR.js';
|
|
@@ -11,7 +11,7 @@ import './chunk-ESVW4MJY.js';
|
|
|
11
11
|
import './chunk-XTNMIV77.js';
|
|
12
12
|
import { formatBytes } from './chunk-YYYRBYWG.js';
|
|
13
13
|
import './chunk-TBT347UY.js';
|
|
14
|
-
import { LEASE_SECONDS } from './chunk-
|
|
14
|
+
import { LEASE_SECONDS } from './chunk-VIHQLW4L.js';
|
|
15
15
|
import './chunk-QQGZ5THT.js';
|
|
16
16
|
import './chunk-HIGJTX5U.js';
|
|
17
17
|
import { formatDuration, formatClock, relativeToRunner } from './chunk-SXJVL7NS.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { RUNNER_PROTOCOL } from './chunk-
|
|
3
|
+
import { RUNNER_PROTOCOL } from './chunk-YKYCE4HY.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.32.0
|
|
3
|
+
"version": "0.32.0",
|
|
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.",
|