@outerlayer/cli 0.25.2 → 0.26.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 +11 -0
- package/README.md +0 -1
- package/dist/{build-ONH22PN5.js → build-JK2DLT6X.js} +2 -2
- package/dist/build-info.json +1 -1
- package/dist/{builder-WPULEVMY.js → builder-TMA25KRR.js} +2 -2
- package/dist/{check-SSEVZJN5.js → check-FAGTKWHT.js} +9 -9
- package/dist/{chunk-CP24ZXXR.js → chunk-4QKHBDEN.js} +8 -5
- package/dist/{chunk-APBTVIM4.js → chunk-4R24DSL2.js} +4 -4
- package/dist/{chunk-PCADYUQT.js → chunk-6S3UEBLB.js} +2 -2
- package/dist/{chunk-Z6SWQV77.js → chunk-6WZKI6LQ.js} +14 -7
- package/dist/{chunk-F4267APM.js → chunk-7I6GZSN3.js} +1 -1
- package/dist/{chunk-3RBQSPW5.js → chunk-AINUN2TT.js} +1 -1
- package/dist/{chunk-QBENN6GA.js → chunk-ARMZI56S.js} +2 -2
- package/dist/{chunk-WMEADVIX.js → chunk-DVAAATJP.js} +5 -5
- package/dist/{chunk-Z453MOUL.js → chunk-TI33WRBT.js} +1 -1
- package/dist/{chunk-WXKAHUGA.js → chunk-XK7FRM5J.js} +1 -1
- package/dist/{cli-ZBZFCRTK.js → cli-CD4UNXBY.js} +22 -71
- package/dist/{command-A2XBWQGB.js → command-A54TSZWD.js} +5 -5
- package/dist/{container-start-L6LCWH6Z.js → container-start-NRPEMKKE.js} +6 -6
- package/dist/{docker-FATVQG5M.js → docker-4X2A5HDY.js} +2 -2
- package/dist/{doctor-EI22PDR5.js → doctor-AXJQQBKY.js} +10 -7
- package/dist/index.js +1 -1
- package/dist/{init-MRREKVT5.js → init-5WVPLO3G.js} +6 -6
- package/dist/{init-ZN47OUB3.js → init-IFQCZKY6.js} +6 -6
- package/dist/{init-cmd-ZGQ6HMZD.js → init-cmd-KNYXSA6O.js} +1 -1
- package/dist/{loop-JTKSTVDV.js → loop-HTWKPG3J.js} +9 -9
- package/dist/{machine-RCIMAKOA.js → machine-AYYL2WXW.js} +5 -5
- package/dist/{runner-identity-C2O6Q3RR.js → runner-identity-NH6RLVMI.js} +2 -2
- package/dist/{runner-key-ENQLA4Q6.js → runner-key-3HAVHQZI.js} +6 -6
- package/dist/{status-OTZ3VX47.js → status-IAXWRX7B.js} +5 -5
- package/package.json +2 -2
- package/dist/import-capture-cmd-TCOKNVBM.js +0 -73
- package/dist/import-ruler-cmd-VJOHOJQ7.js +0 -173
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @outerlayer/cli
|
|
2
2
|
|
|
3
|
+
## 0.26.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9dab934: Remove `outerlayer import capture`, `outerlayer import ruler` and `outerlayer hooks install-git`. `outerlayer init` installs the maintained skills, and `outerlayer init --update` refreshes them. `outerlayer init` and `outerlayer sync` remove the git hooks that an earlier version installed.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 847b8eb: MicroVM builds use Firecracker 1.17.0. On a host with the root helper, run `outerlayer runner install --service --replace` so its builds use it too. Until then, `outerlayer doctor` and each build's log say the helper runs an older Firecracker.
|
|
12
|
+
- 0405fed: MicroVM builds no longer stop after a CLI update that pins a new Firecracker, guest kernel or guest helper. The runner keeps each file under its pinned hash and downloads the new one.
|
|
13
|
+
|
|
3
14
|
## 0.25.2
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -437,7 +437,6 @@ before it gives up.
|
|
|
437
437
|
| `outerlayer daemon` | Run the copy-out daemon in the foreground (`--once` for a single sweep, which uploads nothing). Once cloud credentials exist, it also streams a launched session's new turns as they land — see Privacy, above. `outerlayer watch` is the former name and still works, with a warning. |
|
|
438
438
|
| `outerlayer doctor` | Check the installation: hooks, status-line freshness, sync health and, with a factory key, the GitHub App access builds need. `--json` prints the checks and a summary for scripts. |
|
|
439
439
|
| `outerlayer context emit [--check]` | Compile `.outerlayer/` into each configured target tool's native files (targets come from `.outerlayer/config.json`). `--check` computes outputs and diffs against disk without writing (CI mode). Bare `outerlayer emit` with no name still compiles, with a deprecation warning. |
|
|
440
|
-
| `outerlayer import ruler` | Port a `.ruler/` tree ([Ruler](https://github.com/intellectronica/ruler)) into the equivalent `.outerlayer/` tree — mostly a rename; never overwrites an existing `.outerlayer/`. |
|
|
441
440
|
| `outerlayer hooks wrap` / `outerlayer hooks unwrap` | Auto-wrap (or undo wrapping) `PreToolUse`/`PostToolUse` hooks for execution evidence — one spawn per firing. |
|
|
442
441
|
| `outerlayer emit artifact <file> --caption <text> [--for <criterion-id>] [--pr <n>]` | Upload a proof artifact — screenshot, recording, report, or log — with its caption. Inside a recorded session it spools locally and ships on the next `sync`; otherwise it uploads immediately, anchored to a pull request or the current checkout. `--replaces` retires artifacts an earlier run uploaded. A JUnit XML file bound with `--for` proves a criterion that declares `test` proof; `--test <name[=path:line]>` binds only the named tests. |
|
|
443
442
|
| `outerlayer emit <name> --result <pass\|fail> [--link <url>] [--body <text>\|--body-file <path>] --item <number>` | Record one named check's outcome on a work item. A check that ran carries the run URL as its proof (`--link`); a judgment you are making yourself carries one sentence (`--body`, or `--body-file` to read it from a file — `-` reads standard input). A `fail` needs at least one of the two; a `pass` needs neither. `--item` names the work item by the number printed when the item was created — always required, in or out of a recorded session; a session records checks on its own item like any other, stored as the session's, but cannot clear a person's fail. Prints the recorded check's id. Who recorded it comes from your API key, never from what you send. |
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { buildRepositoryImage } from './chunk-
|
|
3
|
+
export { buildRepositoryImage } from './chunk-AINUN2TT.js';
|
|
4
4
|
import './chunk-PYSKSROG.js';
|
|
5
5
|
import './chunk-JBJTC3UU.js';
|
|
6
|
-
export { RecipeError } from './chunk-
|
|
6
|
+
export { RecipeError } from './chunk-4R24DSL2.js';
|
|
7
7
|
import './chunk-L4CW6LZQ.js';
|
|
8
8
|
import './chunk-2K3TCQHW.js';
|
|
9
9
|
import './chunk-JGD5TWQ2.js';
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"2026-10-
|
|
1
|
+
{"id":"2026-10-16T14:55:16.789Z+b8b6796","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-7I6GZSN3.js';
|
|
4
|
+
import './chunk-4R24DSL2.js';
|
|
5
5
|
import './chunk-7RQ73DLO.js';
|
|
6
6
|
import './chunk-QE3UQAHK.js';
|
|
7
7
|
import './chunk-QZBXLLTV.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
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-DVAAATJP.js';
|
|
4
|
+
import './chunk-4QKHBDEN.js';
|
|
5
5
|
import './chunk-TKL74NLB.js';
|
|
6
6
|
import './chunk-ZVB57WI6.js';
|
|
7
7
|
import './chunk-6FAP657M.js';
|
|
@@ -14,24 +14,24 @@ import './chunk-UNF7MWEL.js';
|
|
|
14
14
|
import './chunk-ITP76BST.js';
|
|
15
15
|
import './chunk-P7UQZFNY.js';
|
|
16
16
|
import './chunk-ESVW4MJY.js';
|
|
17
|
-
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-
|
|
17
|
+
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-TI33WRBT.js';
|
|
18
18
|
import './chunk-4IFKLYMM.js';
|
|
19
19
|
import './chunk-YYYRBYWG.js';
|
|
20
20
|
import './chunk-TBT347UY.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
21
|
+
import './chunk-ARMZI56S.js';
|
|
22
|
+
import './chunk-6S3UEBLB.js';
|
|
23
|
+
import './chunk-6WZKI6LQ.js';
|
|
24
24
|
import './chunk-665QWBNW.js';
|
|
25
25
|
import './chunk-TQMI335S.js';
|
|
26
26
|
import './chunk-5PMQDQFV.js';
|
|
27
27
|
import './chunk-MLD2NA7N.js';
|
|
28
28
|
import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
|
|
29
|
-
import './chunk-
|
|
29
|
+
import './chunk-AINUN2TT.js';
|
|
30
30
|
import './chunk-PYSKSROG.js';
|
|
31
31
|
import './chunk-JBJTC3UU.js';
|
|
32
32
|
import './chunk-OGFGZQA3.js';
|
|
33
|
-
import './chunk-
|
|
34
|
-
import './chunk-
|
|
33
|
+
import './chunk-7I6GZSN3.js';
|
|
34
|
+
import './chunk-4R24DSL2.js';
|
|
35
35
|
import './chunk-HPOEVC2V.js';
|
|
36
36
|
import './chunk-XGJUNNXL.js';
|
|
37
37
|
import './chunk-WVM6PM2N.js';
|
|
@@ -5,11 +5,11 @@ import { senderPidfile } from './chunk-XBCJI6SV.js';
|
|
|
5
5
|
import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-2N72GPS2.js';
|
|
6
6
|
import { writeDockerClientConfig } from './chunk-UNF7MWEL.js';
|
|
7
7
|
import { installScrubContext } from './chunk-ITP76BST.js';
|
|
8
|
-
import { ADDED_USER, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, HelperRefusal, GH_CONFIG_YML, ghHostsYml, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-
|
|
9
|
-
import { readBranchHead, fetchCommit, diffBetween } from './chunk-
|
|
8
|
+
import { ADDED_USER, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, helperFirecrackerNote, HelperRefusal, GH_CONFIG_YML, ghHostsYml, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-6WZKI6LQ.js';
|
|
9
|
+
import { readBranchHead, fetchCommit, diffBetween } from './chunk-AINUN2TT.js';
|
|
10
10
|
import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
|
|
11
|
-
import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, COMMAND_DIR, childEnvironment, judgeCommand, JUDGE_MAX_TURNS, MAX_REPORT_BYTES, JUDGE_DIR } from './chunk-
|
|
12
|
-
import { CLAUDE_CODE_VERSION } from './chunk-
|
|
11
|
+
import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, COMMAND_DIR, childEnvironment, judgeCommand, JUDGE_MAX_TURNS, MAX_REPORT_BYTES, JUDGE_DIR } from './chunk-7I6GZSN3.js';
|
|
12
|
+
import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-4R24DSL2.js';
|
|
13
13
|
import { waitForAgent, vmExecArgs } from './chunk-HPOEVC2V.js';
|
|
14
14
|
import { socketPathProblem, vsockLinks, linkVsockSockets } from './chunk-XGJUNNXL.js';
|
|
15
15
|
import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, retrySend, formatClock } from './chunk-WVM6PM2N.js';
|
|
@@ -214,7 +214,10 @@ function makeBuildsDirPrivate(buildDir2) {
|
|
|
214
214
|
}
|
|
215
215
|
async function helperFor(runtime, log) {
|
|
216
216
|
const probe = await runtime.vm.helper.probe();
|
|
217
|
-
if (probe.ok)
|
|
217
|
+
if (probe.ok) {
|
|
218
|
+
if (probe.firecracker !== FIRECRACKER_VERSION) log(`${helperFirecrackerNote(probe.firecracker)}; run \`outerlayer runner install --service --replace\` to update it`);
|
|
219
|
+
return probe.client;
|
|
220
|
+
}
|
|
218
221
|
if (probe.reason === "unsupported") log(probe.detail);
|
|
219
222
|
else if (probe.unreachable === true) log(`${probe.detail}, so this build runs without the jailer`);
|
|
220
223
|
return void 0;
|
|
@@ -242,12 +242,12 @@ var MICROVM_ARCHES = ["x86_64"];
|
|
|
242
242
|
function firecrackerArch(nodeArch) {
|
|
243
243
|
return nodeArch === "x64" ? "x86_64" : nodeArch === "arm64" ? "aarch64" : nodeArch;
|
|
244
244
|
}
|
|
245
|
-
var FIRECRACKER_VERSION = "1.
|
|
245
|
+
var FIRECRACKER_VERSION = "1.17.0";
|
|
246
246
|
var FIRECRACKER_SHA256 = {
|
|
247
|
-
x86_64: "
|
|
247
|
+
x86_64: "06094a1108ae9e82aa4c23a775aa92758f53f1175d422270d9d6162cb9ade558"
|
|
248
248
|
};
|
|
249
249
|
var FIRECRACKER_BINARY_SHA256 = {
|
|
250
|
-
x86_64: "
|
|
250
|
+
x86_64: "99ad0f5cd0514a88aad0e9ae8cfdb3cc3b4ab9d190e1194602406c786b5de7a5"
|
|
251
251
|
};
|
|
252
252
|
var GUEST_ASSETS_VERSION = "1";
|
|
253
253
|
var GUEST_ASSETS_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/guest-${GUEST_ASSETS_VERSION}`;
|
|
@@ -262,7 +262,7 @@ function guestAssetsPinned(arch) {
|
|
|
262
262
|
return GUEST_KERNEL_SHA256[arch] !== zero && GUEST_HELPER_SHA256[arch] !== zero;
|
|
263
263
|
}
|
|
264
264
|
var JAILER_BINARY_SHA256 = {
|
|
265
|
-
x86_64: "
|
|
265
|
+
x86_64: "65ef226e96f0ceda55ba643f445801ef2cc0ea667ef67cad8ac4f406c9c8434f"
|
|
266
266
|
};
|
|
267
267
|
var HOST_HELPER_ASSETS_VERSION = "4";
|
|
268
268
|
var HOST_HELPER_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/guest-${HOST_HELPER_ASSETS_VERSION}`;
|
|
@@ -1,8 +1,8 @@
|
|
|
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-6WZKI6LQ.js';
|
|
4
4
|
import { runnerImageVersion } from './chunk-665QWBNW.js';
|
|
5
|
-
import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-
|
|
5
|
+
import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-4R24DSL2.js';
|
|
6
6
|
import { spawnSync } from 'child_process';
|
|
7
7
|
import { existsSync, accessSync, constants, statSync, readFileSync } from 'fs';
|
|
8
8
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { runnerImageVersion } from './chunk-665QWBNW.js';
|
|
4
|
-
import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-
|
|
4
|
+
import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-AINUN2TT.js';
|
|
5
5
|
import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
|
|
6
6
|
import { currentCliBuild } from './chunk-OGFGZQA3.js';
|
|
7
|
-
import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, JUDGE_REPORT, MAX_REPORT_BYTES, spawnRun } from './chunk-
|
|
8
|
-
import { hostHelperPinned, firecrackerArch, MICROVM_ARCHES, RecipeError, DOCKER_FEATURE, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256,
|
|
7
|
+
import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, JUDGE_REPORT, MAX_REPORT_BYTES, spawnRun } from './chunk-7I6GZSN3.js';
|
|
8
|
+
import { FIRECRACKER_VERSION, hostHelperPinned, firecrackerArch, MICROVM_ARCHES, RecipeError, DOCKER_FEATURE, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, DEFAULT_BASE_IMAGE } from './chunk-4R24DSL2.js';
|
|
9
9
|
import { execCapture } from './chunk-HPOEVC2V.js';
|
|
10
10
|
import { GUEST_CID } from './chunk-XGJUNNXL.js';
|
|
11
11
|
import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-WVM6PM2N.js';
|
|
@@ -213,6 +213,9 @@ function helperClient(socketPath, options = {}) {
|
|
|
213
213
|
}
|
|
214
214
|
};
|
|
215
215
|
}
|
|
216
|
+
function helperFirecrackerNote(helperFirecracker) {
|
|
217
|
+
return `the root helper runs Firecracker ${helperFirecracker}, not the ${FIRECRACKER_VERSION} this release pins, so microVM builds run under the jailer with Firecracker ${helperFirecracker}`;
|
|
218
|
+
}
|
|
216
219
|
function reinstallMessage(protocol) {
|
|
217
220
|
const spoken = protocol === void 0 ? "a protocol it does not name" : `protocol ${protocol}`;
|
|
218
221
|
return `the root helper speaks ${spoken}, which this runner does not support, so microVM builds run without the jailer; run \`outerlayer runner install --service --replace\` to install the helper that goes with this release`;
|
|
@@ -476,8 +479,12 @@ async function download(file, url, fetchImpl) {
|
|
|
476
479
|
if (!response.ok) throw new AssetError(file, `${file} could not be downloaded from ${url}: the server answered ${response.status}`);
|
|
477
480
|
return Buffer.from(await response.arrayBuffer());
|
|
478
481
|
}
|
|
482
|
+
function keptPath(dir, sha256, name) {
|
|
483
|
+
mkdirSync(join(dir, sha256), { recursive: true, mode: RUNNER_DIR_MODE });
|
|
484
|
+
return join(dir, sha256, name);
|
|
485
|
+
}
|
|
479
486
|
async function ensureFile(dir, file, pin, fetchImpl, mode) {
|
|
480
|
-
const path =
|
|
487
|
+
const path = keptPath(dir, pin.sha256, file);
|
|
481
488
|
if (existsSync(path)) {
|
|
482
489
|
const actual2 = sha256Of(readFileSync(path));
|
|
483
490
|
if (actual2 !== pin.sha256) throw pinProblem(file, pin.sha256, actual2, `at ${path}`);
|
|
@@ -499,7 +506,7 @@ function extractWithTar(arch, program = "firecracker") {
|
|
|
499
506
|
}
|
|
500
507
|
async function ensureFirecracker(input) {
|
|
501
508
|
const { dir, arch, pins, fetchImpl } = input;
|
|
502
|
-
const firecracker =
|
|
509
|
+
const firecracker = keptPath(dir, pins.firecracker.binarySha256, "firecracker");
|
|
503
510
|
if (existsSync(firecracker)) {
|
|
504
511
|
const actual = sha256Of(readFileSync(firecracker));
|
|
505
512
|
if (actual !== pins.firecracker.binarySha256) throw pinProblem("firecracker", pins.firecracker.binarySha256, actual, `at ${firecracker}`);
|
|
@@ -549,7 +556,7 @@ async function ensureJailer(options) {
|
|
|
549
556
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
550
557
|
const dir = vmAssetsDir(options.runnerDir);
|
|
551
558
|
mkdirSync(dir, { recursive: true, mode: RUNNER_DIR_MODE });
|
|
552
|
-
const jailer =
|
|
559
|
+
const jailer = keptPath(dir, expected, "jailer");
|
|
553
560
|
if (existsSync(jailer)) {
|
|
554
561
|
const actual = sha256Of(readFileSync(jailer));
|
|
555
562
|
if (actual !== expected) throw pinProblem("jailer", expected, actual, `at ${jailer}`);
|
|
@@ -3304,4 +3311,4 @@ async function startCheckContainer(input) {
|
|
|
3304
3311
|
};
|
|
3305
3312
|
}
|
|
3306
3313
|
|
|
3307
|
-
export { ADDED_USER, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HelperRefusal, LEASE_SECONDS, MIN_ENGINE_MAJOR, cleanupContainer, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, deleteBuildDisk, deliverContainerHooks, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, filesAreCopied, ghHostsYml, gitRemoteFor, helperSocketPath, isLiteralAddress, keepGhConfigCurrent, leaseExpiresAtMs, lifecycleFailureReason, lifecycleSteps, machineConfig, measureDisk, obtainImage, outOfMemoryReason, parseCpuList, prepareBranch, probeHelper, provisionContainer, resolveAgentUser, runBuildSteps, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startServicesFor, stopContainer, syncInContainer, writeEvalInput };
|
|
3314
|
+
export { ADDED_USER, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HelperRefusal, LEASE_SECONDS, MIN_ENGINE_MAJOR, cleanupContainer, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, deleteBuildDisk, deliverContainerHooks, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, filesAreCopied, ghHostsYml, gitRemoteFor, helperFirecrackerNote, helperSocketPath, isLiteralAddress, keepGhConfigCurrent, leaseExpiresAtMs, lifecycleFailureReason, lifecycleSteps, machineConfig, measureDisk, obtainImage, outOfMemoryReason, parseCpuList, prepareBranch, probeHelper, provisionContainer, resolveAgentUser, runBuildSteps, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startServicesFor, stopContainer, syncInContainer, writeEvalInput };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { RecipeError, BUILDKIT_IMAGE } from './chunk-
|
|
3
|
+
import { RecipeError, BUILDKIT_IMAGE } from './chunk-4R24DSL2.js';
|
|
4
4
|
import { parseSize } from './chunk-7RQ73DLO.js';
|
|
5
5
|
import { compareVersions } from './chunk-QE3UQAHK.js';
|
|
6
6
|
import { ensureHostKey } from './chunk-F6DIHHBS.js';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-PYSKSROG.js';
|
|
4
4
|
import { startTimeOf } from './chunk-JBJTC3UU.js';
|
|
5
|
-
import { CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, RecipeError, locateRecipe, readRecipe, assertBuildable, TINI_VERSION, GH_VERSION, writeSanitizedRecipe, classifyProperties, GH_SHA256, TINI_SHA256, SANITIZED_NAME } from './chunk-
|
|
5
|
+
import { CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, RecipeError, locateRecipe, readRecipe, assertBuildable, TINI_VERSION, GH_VERSION, writeSanitizedRecipe, classifyProperties, GH_SHA256, TINI_SHA256, SANITIZED_NAME } from './chunk-4R24DSL2.js';
|
|
6
6
|
import { RUNNER_DIR_MODE, repoCacheDir, imagesDir, attemptStamp, runnerDir, rootfsPathFor, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
|
|
7
7
|
import { withGitConfig, tokenHeader, PROXY_WARNING_FLAG } from './chunk-2K3TCQHW.js';
|
|
8
8
|
import { RELAY_ID, RELAY_USER } from './chunk-JGD5TWQ2.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-6S3UEBLB.js';
|
|
4
|
+
import { MIN_ENGINE_MAJOR } from './chunk-6WZKI6LQ.js';
|
|
5
5
|
import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-5PMQDQFV.js';
|
|
6
6
|
import { runnerCredentialProblem } from './chunk-JWRX5ZTT.js';
|
|
7
7
|
import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
|
|
@@ -1,23 +1,23 @@
|
|
|
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, microVmCommandLine, runCommand, commandLogOffset, execCommandLine, startSender, startHostServices, finishJob, isContainerTracked, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, ALREADY_RELEASED, inTeardown } from './chunk-
|
|
3
|
+
import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, commandLogOffset, execCommandLine, startSender, startHostServices, finishJob, isContainerTracked, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, ALREADY_RELEASED, inTeardown } from './chunk-4QKHBDEN.js';
|
|
4
4
|
import { writePendingUpdate } from './chunk-TKL74NLB.js';
|
|
5
5
|
import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
|
|
6
6
|
import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-6FAP657M.js';
|
|
7
7
|
import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
|
|
8
8
|
import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-YETTWTAY.js';
|
|
9
9
|
import { RUNNER_PROTOCOL } from './chunk-TPKYTORP.js';
|
|
10
|
-
import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-
|
|
10
|
+
import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-TI33WRBT.js';
|
|
11
11
|
import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-4IFKLYMM.js';
|
|
12
12
|
import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
|
|
13
13
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
14
|
-
import { LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, measureDisk, setUpRunnerCgroup, createContainerRuntime, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied } from './chunk-
|
|
14
|
+
import { LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, measureDisk, setUpRunnerCgroup, createContainerRuntime, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied } from './chunk-6WZKI6LQ.js';
|
|
15
15
|
import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-665QWBNW.js';
|
|
16
16
|
import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
|
|
17
17
|
import { checkFit } from './chunk-MLD2NA7N.js';
|
|
18
18
|
import { claimPidFile, readPidFile, releasePidFile } from './chunk-PYSKSROG.js';
|
|
19
19
|
import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
|
|
20
|
-
import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-
|
|
20
|
+
import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-7I6GZSN3.js';
|
|
21
21
|
import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-WVM6PM2N.js';
|
|
22
22
|
import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-DZUANBKP.js';
|
|
23
23
|
import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-JWRX5ZTT.js';
|
|
@@ -2730,7 +2730,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2730
2730
|
const outcome = await onStartUnderMarker({
|
|
2731
2731
|
configPath,
|
|
2732
2732
|
own: ownVersionOf(deps),
|
|
2733
|
-
check: update.check ? () => update.check(configPath) : async () => (await import('./check-
|
|
2733
|
+
check: update.check ? () => update.check(configPath) : async () => (await import('./check-FAGTKWHT.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
|
|
2734
2734
|
now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
|
|
2735
2735
|
log
|
|
2736
2736
|
});
|
|
@@ -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-ARMZI56S.js';
|
|
4
4
|
import { describeCallFailure } from './chunk-WVM6PM2N.js';
|
|
5
5
|
import { WorkCommandError, getJson } from './chunk-DZUANBKP.js';
|
|
6
6
|
import { sanitizeTerminal } from './chunk-BUP5N3X6.js';
|
|
@@ -1186,7 +1186,7 @@ async function gatherDoctorChecks() {
|
|
|
1186
1186
|
const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
|
|
1187
1187
|
checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
|
|
1188
1188
|
} else if (hasRunnerBlock(configPath)) {
|
|
1189
|
-
const { runnerHostChecks } = await import('./doctor-
|
|
1189
|
+
const { runnerHostChecks } = await import('./doctor-AXJQQBKY.js');
|
|
1190
1190
|
const hooks = (() => {
|
|
1191
1191
|
try {
|
|
1192
1192
|
return loadRunnerConfig(configPath).hooks;
|
|
@@ -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-XK7FRM5J.js';
|
|
4
4
|
import './chunk-XFGL53GU.js';
|
|
5
5
|
import './chunk-VJBFQP3H.js';
|
|
6
6
|
import { verifiedTrackerNames, TRACKERS } from './chunk-DZUANBKP.js';
|
|
@@ -3898,12 +3898,12 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3898
3898
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3899
3899
|
`);
|
|
3900
3900
|
}
|
|
3901
|
-
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-
|
|
3901
|
+
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-KNYXSA6O.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3902
3902
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3903
3903
|
else process.stdout.write(outcome.text + (shell?.text ?? ""));
|
|
3904
3904
|
return;
|
|
3905
3905
|
}
|
|
3906
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3906
|
+
const { runInitCommand } = await import('./init-cmd-KNYXSA6O.js');
|
|
3907
3907
|
const code = await runInitCommand(
|
|
3908
3908
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3909
3909
|
{
|
|
@@ -4187,7 +4187,6 @@ code is 1: revoke the token on /profile/security.
|
|
|
4187
4187
|
}
|
|
4188
4188
|
});
|
|
4189
4189
|
registerEmitCommands(program2);
|
|
4190
|
-
registerImportCommands(program2);
|
|
4191
4190
|
registerHooksCommands(program2);
|
|
4192
4191
|
registerMcpCommands(program2);
|
|
4193
4192
|
registerContextCommands(program2);
|
|
@@ -4882,7 +4881,7 @@ function registerRunnerCommands(program2) {
|
|
|
4882
4881
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
4883
4882
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
4884
4883
|
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
|
|
4885
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4884
|
+
const { start, RunnerStartError } = await import('./loop-HTWKPG3J.js');
|
|
4886
4885
|
const { RunnerAlreadyRunningError } = await import('./pidfile-BY5Z6YH7.js');
|
|
4887
4886
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4888
4887
|
try {
|
|
@@ -4901,8 +4900,8 @@ function registerRunnerCommands(program2) {
|
|
|
4901
4900
|
"\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN) 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"
|
|
4902
4901
|
).action(async () => {
|
|
4903
4902
|
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
|
|
4904
|
-
const { containerStart } = await import('./container-start-
|
|
4905
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4903
|
+
const { containerStart } = await import('./container-start-NRPEMKKE.js');
|
|
4904
|
+
const { start, RunnerStartError } = await import('./loop-HTWKPG3J.js');
|
|
4906
4905
|
const { RunnerAlreadyRunningError } = await import('./pidfile-BY5Z6YH7.js');
|
|
4907
4906
|
try {
|
|
4908
4907
|
const result = await containerStart({
|
|
@@ -4922,7 +4921,7 @@ function registerRunnerCommands(program2) {
|
|
|
4922
4921
|
});
|
|
4923
4922
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
4924
4923
|
const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
|
|
4925
|
-
const { runRunnerCheck } = await import('./check-
|
|
4924
|
+
const { runRunnerCheck } = await import('./check-FAGTKWHT.js');
|
|
4926
4925
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4927
4926
|
const result = await runRunnerCheck(configPath);
|
|
4928
4927
|
if (!result.ok) {
|
|
@@ -4956,7 +4955,7 @@ function registerRunnerCommands(program2) {
|
|
|
4956
4955
|
}
|
|
4957
4956
|
try {
|
|
4958
4957
|
if (opts.service === true) {
|
|
4959
|
-
const { installServiceCommand } = await import('./command-
|
|
4958
|
+
const { installServiceCommand } = await import('./command-A54TSZWD.js');
|
|
4960
4959
|
const result2 = await installServiceCommand({
|
|
4961
4960
|
configPath,
|
|
4962
4961
|
print: opts.print,
|
|
@@ -5012,7 +5011,7 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5012
5011
|
return;
|
|
5013
5012
|
}
|
|
5014
5013
|
const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
|
|
5015
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5014
|
+
const { uninstallServiceCommand } = await import('./command-A54TSZWD.js');
|
|
5016
5015
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5017
5016
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5018
5017
|
`);
|
|
@@ -5040,10 +5039,10 @@ already in runner.env is used.
|
|
|
5040
5039
|
`
|
|
5041
5040
|
).action(async (opts) => {
|
|
5042
5041
|
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-JJ3EO7SB.js');
|
|
5043
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5044
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5045
|
-
const { detectMachine } = await import('./machine-
|
|
5046
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5042
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-IFQCZKY6.js');
|
|
5043
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-3HAVHQZI.js');
|
|
5044
|
+
const { detectMachine } = await import('./machine-AYYL2WXW.js');
|
|
5045
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-5WVPLO3G.js');
|
|
5047
5046
|
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-2D7MPOIJ.js');
|
|
5048
5047
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5049
5048
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
@@ -5194,7 +5193,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5194
5193
|
let serviceUp = false;
|
|
5195
5194
|
let restart;
|
|
5196
5195
|
if (installedLayout) {
|
|
5197
|
-
const { installServiceCommand } = await import('./command-
|
|
5196
|
+
const { installServiceCommand } = await import('./command-A54TSZWD.js');
|
|
5198
5197
|
const service = await installServiceCommand({
|
|
5199
5198
|
configPath,
|
|
5200
5199
|
entryPath: process.argv[1] ?? "",
|
|
@@ -5239,10 +5238,10 @@ Next:
|
|
|
5239
5238
|
"\nA repository governed by a control plane builds the control plane's image, at the commit\nthe gateway has stored for it. A repository that governs itself fetches the head of its\ndefault branch into the runner's cache. Either way it reads .devcontainer/devcontainer.json\nand builds the image with the devcontainer CLI. Settings\nthat reach the host or widen the container's privileges are ignored and listed. The\nimage holds this CLI and a pinned Claude Code. Nothing runs inside the image.\n"
|
|
5240
5239
|
).action(async (opts) => {
|
|
5241
5240
|
const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
|
|
5242
|
-
const { buildRepositoryImage, RecipeError } = await import('./build-
|
|
5241
|
+
const { buildRepositoryImage, RecipeError } = await import('./build-JK2DLT6X.js');
|
|
5243
5242
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
5244
|
-
const { createDockerHost } = await import('./docker-
|
|
5245
|
-
const { builderSpec } = await import('./builder-
|
|
5243
|
+
const { createDockerHost } = await import('./docker-4X2A5HDY.js');
|
|
5244
|
+
const { builderSpec } = await import('./builder-TMA25KRR.js');
|
|
5246
5245
|
const { loadRunnerConfig } = await import('./config-JJ3EO7SB.js');
|
|
5247
5246
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5248
5247
|
const loaded = (() => {
|
|
@@ -5254,7 +5253,7 @@ Next:
|
|
|
5254
5253
|
})();
|
|
5255
5254
|
const memory = loaded?.build?.memory ?? "8g";
|
|
5256
5255
|
try {
|
|
5257
|
-
const { ensureRunnerIdentity } = await import('./runner-identity-
|
|
5256
|
+
const { ensureRunnerIdentity } = await import('./runner-identity-NH6RLVMI.js');
|
|
5258
5257
|
await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
|
|
5259
5258
|
console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
|
|
5260
5259
|
});
|
|
@@ -5322,7 +5321,7 @@ Next:
|
|
|
5322
5321
|
});
|
|
5323
5322
|
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) => {
|
|
5324
5323
|
const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
|
|
5325
|
-
const { requestStop } = await import('./loop-
|
|
5324
|
+
const { requestStop } = await import('./loop-HTWKPG3J.js');
|
|
5326
5325
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5327
5326
|
const { runnerImageVersion } = await import('./image-tag-5SJ6ZKT7.js');
|
|
5328
5327
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
@@ -5330,8 +5329,8 @@ Next:
|
|
|
5330
5329
|
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) => {
|
|
5331
5330
|
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-JJ3EO7SB.js');
|
|
5332
5331
|
const { jobsDir, runnerDir } = await import('./paths-ZC6BMWMT.js');
|
|
5333
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
5334
|
-
const { renderStatus } = await import('./status-
|
|
5332
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-HTWKPG3J.js');
|
|
5333
|
+
const { renderStatus } = await import('./status-IAXWRX7B.js');
|
|
5335
5334
|
const { readHousekeepingRecord } = await import('./record-K23IN6QN.js');
|
|
5336
5335
|
const path2 = await import('path');
|
|
5337
5336
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
@@ -5391,7 +5390,7 @@ Next:
|
|
|
5391
5390
|
});
|
|
5392
5391
|
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) => {
|
|
5393
5392
|
const { defaultRunnerConfigPath } = await import('./config-JJ3EO7SB.js');
|
|
5394
|
-
const { listJobFiles } = await import('./loop-
|
|
5393
|
+
const { listJobFiles } = await import('./loop-HTWKPG3J.js');
|
|
5395
5394
|
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-VN2HKDSH.js');
|
|
5396
5395
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5397
5396
|
const item = parseTrackerNumber(itemArg);
|
|
@@ -5426,23 +5425,6 @@ function registerHooksCommands(program2) {
|
|
|
5426
5425
|
"after",
|
|
5427
5426
|
"\n`init` auto-wraps PreToolUse/PostToolUse hooks; these subcommands cover the\nrest: manual re-scans, other events, and undo.\n"
|
|
5428
5427
|
);
|
|
5429
|
-
hooksCmd.command("install-git").description("Remove the git hooks an earlier version installed in this repo").addHelpText(
|
|
5430
|
-
"after",
|
|
5431
|
-
"\nEarlier versions installed a pre-commit guard and commit journal hooks. This removes\nthe ones OuterLayer wrote and leaves any hook it did not write untouched.\n"
|
|
5432
|
-
).action(() => {
|
|
5433
|
-
const removal = removeJournalHooks(process.cwd());
|
|
5434
|
-
if (removal.removed) {
|
|
5435
|
-
process.stdout.write(`${C.green}\u2713${C.reset} removed the commit journal hooks an earlier version installed \u2192 ${removal.path}
|
|
5436
|
-
`);
|
|
5437
|
-
}
|
|
5438
|
-
const guard = removePreCommitGuardHook(process.cwd());
|
|
5439
|
-
if (guard.removed) {
|
|
5440
|
-
process.stdout.write(`${C.green}\u2713${C.reset} removed the pre-commit guard an earlier version installed \u2192 ${guard.path}
|
|
5441
|
-
`);
|
|
5442
|
-
}
|
|
5443
|
-
if (!removal.removed && !guard.removed) process.stdout.write(`${C.dim}No git hooks from an earlier version were found.${C.reset}
|
|
5444
|
-
`);
|
|
5445
|
-
});
|
|
5446
5428
|
hooksCmd.command("status").description("List hook entries in user and project settings, marking the wrapped ones").option("--json", "machine-readable JSON output").action((opts) => {
|
|
5447
5429
|
const report = [];
|
|
5448
5430
|
for (const scope of ["user", "project"]) {
|
|
@@ -5648,37 +5630,6 @@ caller from the bearer token, the gateway answers 401 without that header.
|
|
|
5648
5630
|
}
|
|
5649
5631
|
});
|
|
5650
5632
|
}
|
|
5651
|
-
function registerImportCommands(program2) {
|
|
5652
|
-
const importCmd = program2.command("import").description("Import an existing config format into .outerlayer/");
|
|
5653
|
-
importCmd.command("ruler").description("Port a .ruler/ tree into the equivalent .outerlayer/ tree").option("--dir <path>", "repo root to read from (default: cwd)").option("--json", "machine-readable JSON output").addHelpText("after", "\nRuler: https://github.com/intellectronica/ruler. Mostly a rename.\n").action(async (opts) => {
|
|
5654
|
-
const { runImportRuler, ImportRulerError } = await import('./import-ruler-cmd-VJOHOJQ7.js');
|
|
5655
|
-
try {
|
|
5656
|
-
const result = runImportRuler({ cwd: opts.dir, json: opts.json });
|
|
5657
|
-
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
5658
|
-
} catch (err) {
|
|
5659
|
-
if (err instanceof ImportRulerError) {
|
|
5660
|
-
fail(err.message);
|
|
5661
|
-
return;
|
|
5662
|
-
}
|
|
5663
|
-
throw err;
|
|
5664
|
-
}
|
|
5665
|
-
});
|
|
5666
|
-
importCmd.command("capture").description("Install the maintained skills into .outerlayer/").option("--dir <path>", "repo root to write into (default: cwd)").option("--json", "machine-readable JSON output").addHelpText(
|
|
5667
|
-
"after",
|
|
5668
|
-
"\nInstalls the five maintained skills (outerlayer-evidence, outerlayer-amend,\nouterlayer-findings, outerlayer-cli, outerlayer-build) and an AGENTS.md snippet teaching agents to run\n`emit artifact`. A skill that differs from this CLI's bundle is rewritten to it, and the output says so.\n"
|
|
5669
|
-
).action(async (opts) => {
|
|
5670
|
-
const { runImportCapture, ImportCaptureError } = await import('./import-capture-cmd-TCOKNVBM.js');
|
|
5671
|
-
try {
|
|
5672
|
-
runImportCapture({ cwd: opts.dir, json: opts.json });
|
|
5673
|
-
} catch (err) {
|
|
5674
|
-
if (err instanceof ImportCaptureError) {
|
|
5675
|
-
fail(err.message);
|
|
5676
|
-
return;
|
|
5677
|
-
}
|
|
5678
|
-
throw err;
|
|
5679
|
-
}
|
|
5680
|
-
});
|
|
5681
|
-
}
|
|
5682
5633
|
function registerContextCommands(program2) {
|
|
5683
5634
|
const contextCmd = program2.command("context").description("Compile agent context");
|
|
5684
5635
|
contextCmd.command("emit").description("Compile .outerlayer/ into each configured target tool's native files").option("--check", "compare against disk, write nothing, exit 1 on drift (CI mode)").option("--dir <path>", "repo root to read from (default: cwd)").option("--json", "machine-readable JSON output").addHelpText(
|
|
@@ -3,17 +3,17 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import { runRunnerInstall, launcherSummary, restartNote } from './chunk-JF572PM5.js';
|
|
4
4
|
import './chunk-KDDFI5MR.js';
|
|
5
5
|
import { currentLink, execStartCommand } from './chunk-4IFKLYMM.js';
|
|
6
|
-
import { detectMachine } from './chunk-
|
|
7
|
-
import { helperSocketPath, ensureFirecrackerAndJailer } from './chunk-
|
|
6
|
+
import { detectMachine } from './chunk-6S3UEBLB.js';
|
|
7
|
+
import { helperSocketPath, ensureFirecrackerAndJailer } from './chunk-6WZKI6LQ.js';
|
|
8
8
|
import './chunk-665QWBNW.js';
|
|
9
9
|
import './chunk-TQMI335S.js';
|
|
10
10
|
import { DEFAULT_UNIT_NAME, installService, uninstallService, realTaskScheduler, UNIT_MARKER } from './chunk-MLD2NA7N.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-AINUN2TT.js';
|
|
12
12
|
import './chunk-PYSKSROG.js';
|
|
13
13
|
import './chunk-JBJTC3UU.js';
|
|
14
14
|
import './chunk-OGFGZQA3.js';
|
|
15
|
-
import { readJobFile } from './chunk-
|
|
16
|
-
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-
|
|
15
|
+
import { readJobFile } from './chunk-7I6GZSN3.js';
|
|
16
|
+
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-4R24DSL2.js';
|
|
17
17
|
import './chunk-HPOEVC2V.js';
|
|
18
18
|
import './chunk-XGJUNNXL.js';
|
|
19
19
|
import './chunk-WVM6PM2N.js';
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-
|
|
4
|
-
import { detectMachine, supportsContainerBuilds, describeMachineDocker } from './chunk-
|
|
5
|
-
import { MIN_ENGINE_MAJOR } from './chunk-
|
|
3
|
+
import { RunnerInitError, prepareRunnerInit, writeRunnerInit } from './chunk-ARMZI56S.js';
|
|
4
|
+
import { detectMachine, supportsContainerBuilds, describeMachineDocker } from './chunk-6S3UEBLB.js';
|
|
5
|
+
import { MIN_ENGINE_MAJOR } from './chunk-6WZKI6LQ.js';
|
|
6
6
|
import { runnerImageVersion, IMAGE_VERSION_VARIABLE } from './chunk-665QWBNW.js';
|
|
7
7
|
import './chunk-TQMI335S.js';
|
|
8
8
|
import { isAgentName, AGENT_COMMANDS } from './chunk-5PMQDQFV.js';
|
|
9
9
|
import './chunk-MLD2NA7N.js';
|
|
10
10
|
import './chunk-6MZSX4M7.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-AINUN2TT.js';
|
|
12
12
|
import './chunk-PYSKSROG.js';
|
|
13
13
|
import './chunk-JBJTC3UU.js';
|
|
14
14
|
import './chunk-OGFGZQA3.js';
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
15
|
+
import './chunk-7I6GZSN3.js';
|
|
16
|
+
import './chunk-4R24DSL2.js';
|
|
17
17
|
import './chunk-HPOEVC2V.js';
|
|
18
18
|
import './chunk-XGJUNNXL.js';
|
|
19
19
|
import './chunk-WVM6PM2N.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { childEnvironment, createDockerHost, spawnRun } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { childEnvironment, createDockerHost, spawnRun } from './chunk-7I6GZSN3.js';
|
|
4
|
+
import './chunk-4R24DSL2.js';
|
|
5
5
|
import './chunk-7RQ73DLO.js';
|
|
6
6
|
import './chunk-QE3UQAHK.js';
|
|
7
7
|
import './chunk-QZBXLLTV.js';
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { launcherCheck } from './chunk-KDDFI5MR.js';
|
|
4
|
-
import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-
|
|
4
|
+
import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-TI33WRBT.js';
|
|
5
5
|
import './chunk-4IFKLYMM.js';
|
|
6
6
|
import { freeBytes, formatBytes } from './chunk-YYYRBYWG.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, probeHelper, helperSocketPath } from './chunk-
|
|
8
|
+
import './chunk-ARMZI56S.js';
|
|
9
|
+
import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-6S3UEBLB.js';
|
|
10
|
+
import { MIN_ENGINE_MAJOR, helperFirecrackerNote, probeHelper, helperSocketPath } from './chunk-6WZKI6LQ.js';
|
|
11
11
|
import { runnerImageVersion, imageAdvice, readUpdateStatus, imageTag, pullInstruction } from './chunk-665QWBNW.js';
|
|
12
12
|
import './chunk-TQMI335S.js';
|
|
13
13
|
import './chunk-5PMQDQFV.js';
|
|
14
14
|
import './chunk-MLD2NA7N.js';
|
|
15
15
|
import './chunk-6MZSX4M7.js';
|
|
16
|
-
import './chunk-
|
|
16
|
+
import './chunk-AINUN2TT.js';
|
|
17
17
|
import './chunk-PYSKSROG.js';
|
|
18
18
|
import './chunk-JBJTC3UU.js';
|
|
19
19
|
import './chunk-OGFGZQA3.js';
|
|
20
|
-
import { resolveDevcontainerCli, buildxState, spawnRun } from './chunk-
|
|
21
|
-
import { locateRecipe, assertBuildable, readRecipe, RecipeError, CLAUDE_CODE_VERSION } from './chunk-
|
|
20
|
+
import { resolveDevcontainerCli, buildxState, spawnRun } from './chunk-7I6GZSN3.js';
|
|
21
|
+
import { locateRecipe, assertBuildable, readRecipe, RecipeError, FIRECRACKER_VERSION, CLAUDE_CODE_VERSION } from './chunk-4R24DSL2.js';
|
|
22
22
|
import './chunk-HPOEVC2V.js';
|
|
23
23
|
import './chunk-XGJUNNXL.js';
|
|
24
24
|
import './chunk-WVM6PM2N.js';
|
|
@@ -137,6 +137,9 @@ function helperCheck(facts) {
|
|
|
137
137
|
fix: `run \`chmod 700 ${facts.writableBuildsDir}\``
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
|
+
if (facts.present && facts.firecracker !== FIRECRACKER_VERSION) {
|
|
141
|
+
return { name, status: "warn", detail: helperFirecrackerNote(facts.firecracker), fix: REINSTALL };
|
|
142
|
+
}
|
|
140
143
|
if (facts.present) {
|
|
141
144
|
return {
|
|
142
145
|
name,
|
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-GD7F2EBL.js')).recordLinkExitFailure(argv);
|
|
29
|
-
var { runCli } = await import('./cli-
|
|
29
|
+
var { runCli } = await import('./cli-CD4UNXBY.js');
|
|
30
30
|
await runCli(process.argv);
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { npmSupportsProvenance } from './chunk-YETTWTAY.js';
|
|
4
|
-
import { RunnerInitError, readConfigObject } from './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import { RunnerInitError, readConfigObject } from './chunk-ARMZI56S.js';
|
|
5
|
+
import './chunk-6S3UEBLB.js';
|
|
6
|
+
import './chunk-6WZKI6LQ.js';
|
|
7
7
|
import './chunk-665QWBNW.js';
|
|
8
8
|
import './chunk-TQMI335S.js';
|
|
9
9
|
import './chunk-5PMQDQFV.js';
|
|
10
10
|
import { checkFit, VM_SERVICE_NAME, RUNNER_RESERVE_BYTES } from './chunk-MLD2NA7N.js';
|
|
11
11
|
import './chunk-6MZSX4M7.js';
|
|
12
|
-
import './chunk-
|
|
12
|
+
import './chunk-AINUN2TT.js';
|
|
13
13
|
import './chunk-PYSKSROG.js';
|
|
14
14
|
import './chunk-JBJTC3UU.js';
|
|
15
15
|
import './chunk-OGFGZQA3.js';
|
|
16
|
-
import './chunk-
|
|
17
|
-
import './chunk-
|
|
16
|
+
import './chunk-7I6GZSN3.js';
|
|
17
|
+
import './chunk-4R24DSL2.js';
|
|
18
18
|
import './chunk-HPOEVC2V.js';
|
|
19
19
|
import './chunk-XGJUNNXL.js';
|
|
20
20
|
import './chunk-WVM6PM2N.js';
|
|
@@ -1,19 +1,19 @@
|
|
|
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-ARMZI56S.js';
|
|
4
|
+
import './chunk-6S3UEBLB.js';
|
|
5
|
+
import './chunk-6WZKI6LQ.js';
|
|
6
6
|
import './chunk-665QWBNW.js';
|
|
7
7
|
import './chunk-TQMI335S.js';
|
|
8
8
|
import './chunk-5PMQDQFV.js';
|
|
9
9
|
import './chunk-MLD2NA7N.js';
|
|
10
10
|
import './chunk-6MZSX4M7.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-AINUN2TT.js';
|
|
12
12
|
import './chunk-PYSKSROG.js';
|
|
13
13
|
import './chunk-JBJTC3UU.js';
|
|
14
14
|
import './chunk-OGFGZQA3.js';
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
15
|
+
import './chunk-7I6GZSN3.js';
|
|
16
|
+
import './chunk-4R24DSL2.js';
|
|
17
17
|
import './chunk-HPOEVC2V.js';
|
|
18
18
|
import './chunk-XGJUNNXL.js';
|
|
19
19
|
import './chunk-WVM6PM2N.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-XK7FRM5J.js';
|
|
4
4
|
import './chunk-XFGL53GU.js';
|
|
5
5
|
import { shellFunctionInstalled, removeShellFunction, installShellFunction, SHELL_FUNCTION_LINE } from './chunk-CJJDJ7AT.js';
|
|
6
6
|
import './chunk-VJBFQP3H.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { RunnerStartError, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, start, tick, watchTick } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { RunnerStartError, listJobFiles, logUnusableHelper, probeBuild, probeCredentials, requestStop, runnerProcessState, start, tick, watchTick } from './chunk-DVAAATJP.js';
|
|
4
|
+
import './chunk-4QKHBDEN.js';
|
|
5
5
|
import './chunk-TKL74NLB.js';
|
|
6
6
|
import './chunk-ZVB57WI6.js';
|
|
7
7
|
import './chunk-6FAP657M.js';
|
|
@@ -14,24 +14,24 @@ import './chunk-UNF7MWEL.js';
|
|
|
14
14
|
import './chunk-ITP76BST.js';
|
|
15
15
|
import './chunk-P7UQZFNY.js';
|
|
16
16
|
import './chunk-ESVW4MJY.js';
|
|
17
|
-
import './chunk-
|
|
17
|
+
import './chunk-TI33WRBT.js';
|
|
18
18
|
import './chunk-4IFKLYMM.js';
|
|
19
19
|
import './chunk-YYYRBYWG.js';
|
|
20
20
|
import './chunk-TBT347UY.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
21
|
+
import './chunk-ARMZI56S.js';
|
|
22
|
+
import './chunk-6S3UEBLB.js';
|
|
23
|
+
import './chunk-6WZKI6LQ.js';
|
|
24
24
|
import './chunk-665QWBNW.js';
|
|
25
25
|
import './chunk-TQMI335S.js';
|
|
26
26
|
import './chunk-5PMQDQFV.js';
|
|
27
27
|
import './chunk-MLD2NA7N.js';
|
|
28
28
|
import './chunk-6MZSX4M7.js';
|
|
29
|
-
import './chunk-
|
|
29
|
+
import './chunk-AINUN2TT.js';
|
|
30
30
|
import './chunk-PYSKSROG.js';
|
|
31
31
|
import './chunk-JBJTC3UU.js';
|
|
32
32
|
import './chunk-OGFGZQA3.js';
|
|
33
|
-
import './chunk-
|
|
34
|
-
import './chunk-
|
|
33
|
+
import './chunk-7I6GZSN3.js';
|
|
34
|
+
import './chunk-4R24DSL2.js';
|
|
35
35
|
import './chunk-HPOEVC2V.js';
|
|
36
36
|
import './chunk-XGJUNNXL.js';
|
|
37
37
|
import './chunk-WVM6PM2N.js';
|
|
@@ -1,15 +1,15 @@
|
|
|
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-6S3UEBLB.js';
|
|
4
|
+
import './chunk-6WZKI6LQ.js';
|
|
5
5
|
import './chunk-665QWBNW.js';
|
|
6
6
|
import './chunk-TQMI335S.js';
|
|
7
|
-
import './chunk-
|
|
7
|
+
import './chunk-AINUN2TT.js';
|
|
8
8
|
import './chunk-PYSKSROG.js';
|
|
9
9
|
import './chunk-JBJTC3UU.js';
|
|
10
10
|
import './chunk-OGFGZQA3.js';
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
11
|
+
import './chunk-7I6GZSN3.js';
|
|
12
|
+
import './chunk-4R24DSL2.js';
|
|
13
13
|
import './chunk-HPOEVC2V.js';
|
|
14
14
|
import './chunk-XGJUNNXL.js';
|
|
15
15
|
import './chunk-WVM6PM2N.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { RUNNER_LABEL, builderNameFor, dockerIdentity, ensureRunnerIdentity, pathLabelValue, readRunnerIdentity } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { RUNNER_LABEL, builderNameFor, dockerIdentity, ensureRunnerIdentity, pathLabelValue, readRunnerIdentity } from './chunk-7I6GZSN3.js';
|
|
4
|
+
import './chunk-4R24DSL2.js';
|
|
5
5
|
import './chunk-7RQ73DLO.js';
|
|
6
6
|
import './chunk-QE3UQAHK.js';
|
|
7
7
|
import './chunk-QZBXLLTV.js';
|
|
@@ -1,19 +1,19 @@
|
|
|
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-ARMZI56S.js';
|
|
4
|
+
import './chunk-6S3UEBLB.js';
|
|
5
|
+
import './chunk-6WZKI6LQ.js';
|
|
6
6
|
import './chunk-665QWBNW.js';
|
|
7
7
|
import './chunk-TQMI335S.js';
|
|
8
8
|
import './chunk-5PMQDQFV.js';
|
|
9
9
|
import './chunk-MLD2NA7N.js';
|
|
10
10
|
import './chunk-6MZSX4M7.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-AINUN2TT.js';
|
|
12
12
|
import './chunk-PYSKSROG.js';
|
|
13
13
|
import './chunk-JBJTC3UU.js';
|
|
14
14
|
import './chunk-OGFGZQA3.js';
|
|
15
|
-
import './chunk-
|
|
16
|
-
import './chunk-
|
|
15
|
+
import './chunk-7I6GZSN3.js';
|
|
16
|
+
import './chunk-4R24DSL2.js';
|
|
17
17
|
import './chunk-HPOEVC2V.js';
|
|
18
18
|
import './chunk-XGJUNNXL.js';
|
|
19
19
|
import './chunk-WVM6PM2N.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-4QKHBDEN.js';
|
|
4
4
|
import { jobStateFormatOf } from './chunk-ZVB57WI6.js';
|
|
5
5
|
import './chunk-XBCJI6SV.js';
|
|
6
6
|
import './chunk-2N72GPS2.js';
|
|
@@ -10,15 +10,15 @@ import './chunk-P7UQZFNY.js';
|
|
|
10
10
|
import './chunk-ESVW4MJY.js';
|
|
11
11
|
import { formatBytes } from './chunk-YYYRBYWG.js';
|
|
12
12
|
import './chunk-TBT347UY.js';
|
|
13
|
-
import { LEASE_SECONDS } from './chunk-
|
|
13
|
+
import { LEASE_SECONDS } from './chunk-6WZKI6LQ.js';
|
|
14
14
|
import { pullInstruction } from './chunk-665QWBNW.js';
|
|
15
15
|
import './chunk-TQMI335S.js';
|
|
16
|
-
import './chunk-
|
|
16
|
+
import './chunk-AINUN2TT.js';
|
|
17
17
|
import './chunk-PYSKSROG.js';
|
|
18
18
|
import './chunk-JBJTC3UU.js';
|
|
19
19
|
import './chunk-OGFGZQA3.js';
|
|
20
|
-
import './chunk-
|
|
21
|
-
import './chunk-
|
|
20
|
+
import './chunk-7I6GZSN3.js';
|
|
21
|
+
import './chunk-4R24DSL2.js';
|
|
22
22
|
import './chunk-HPOEVC2V.js';
|
|
23
23
|
import './chunk-XGJUNNXL.js';
|
|
24
24
|
import { formatDuration, formatClock, relativeToRunner } from './chunk-WVM6PM2N.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@outerlayer/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "OuterLayer CLI — commands: init, claude, connect, doctor, login, logout, sync, daemon (alias: watch), emit, work, spec, runner, hooks, mcp,
|
|
3
|
+
"version": "0.26.0",
|
|
4
|
+
"description": "OuterLayer CLI — commands: init, claude, connect, doctor, login, logout, sync, daemon (alias: watch), emit, 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.",
|
|
7
7
|
"repository": {
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
import { C } from './chunk-ANPNT6PM.js';
|
|
4
|
-
import { skillsBaseFor, isAgentsMdLayout } from './chunk-JKNYTNYD.js';
|
|
5
|
-
import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-HBISTTG3.js';
|
|
6
|
-
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
7
|
-
import './chunk-RKOTJQVG.js';
|
|
8
|
-
import './chunk-QZBXLLTV.js';
|
|
9
|
-
import './chunk-VNVZDWO3.js';
|
|
10
|
-
import './chunk-RA3O54FC.js';
|
|
11
|
-
import './chunk-Z5GEFMRW.js';
|
|
12
|
-
import { statSync, existsSync, readFileSync, writeFileSync } from 'fs';
|
|
13
|
-
import { join } from 'path';
|
|
14
|
-
|
|
15
|
-
createRequire(import.meta.url);
|
|
16
|
-
var ImportCaptureError = class extends Error {
|
|
17
|
-
};
|
|
18
|
-
var SNIPPET_FILE = "outerlayer-evidence/references/agents-snippet.md";
|
|
19
|
-
var AGENTS_MD_MARKER = "<!-- outerlayer:capture-pack -->";
|
|
20
|
-
function runImportCapture(opts = {}) {
|
|
21
|
-
const cwd = opts.cwd ?? process.cwd();
|
|
22
|
-
let cwdStat;
|
|
23
|
-
try {
|
|
24
|
-
cwdStat = statSync(cwd);
|
|
25
|
-
} catch {
|
|
26
|
-
throw new ImportCaptureError(`no such directory: ${cwd}`);
|
|
27
|
-
}
|
|
28
|
-
if (!cwdStat.isDirectory()) throw new ImportCaptureError(`not a directory: ${cwd}`);
|
|
29
|
-
const base = skillsBaseFor(cwd);
|
|
30
|
-
const SNIPPET_PATH = `${base}/${SNIPPET_FILE}`;
|
|
31
|
-
const AGENTS_MD_PATH = isAgentsMdLayout(cwd) ? "AGENTS.md" : ".outerlayer/AGENTS.md";
|
|
32
|
-
const bundle = loadMaintainedFiles(void 0, void 0, base);
|
|
33
|
-
const { created: files, rewritten } = writeMaintainedFiles(cwd, bundle);
|
|
34
|
-
const snippet = bundle.find((f) => f.path === SNIPPET_PATH)?.content ?? "";
|
|
35
|
-
let appendedAgentsMd = false;
|
|
36
|
-
const agentsMdAbs = join(cwd, AGENTS_MD_PATH);
|
|
37
|
-
if (existsSync(agentsMdAbs)) {
|
|
38
|
-
const existing = readFileSync(agentsMdAbs, "utf8");
|
|
39
|
-
if (!existing.includes(AGENTS_MD_MARKER)) {
|
|
40
|
-
writeFileSync(agentsMdAbs, existing + "\n" + snippet);
|
|
41
|
-
appendedAgentsMd = true;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
let output;
|
|
45
|
-
if (opts.json) {
|
|
46
|
-
output = JSON.stringify({ files, rewritten, appendedAgentsMd });
|
|
47
|
-
} else {
|
|
48
|
-
const lines = [
|
|
49
|
-
...files.map((f) => `${C.green}\u2713${C.reset} wrote ${f}`),
|
|
50
|
-
...rewritten.map((f) => `${C.yellow}!${C.reset} rewrote ${f} to match this CLI's bundle (local edits were overwritten)`)
|
|
51
|
-
];
|
|
52
|
-
if (appendedAgentsMd) lines.push(`${C.green}\u2713${C.reset} appended the evidence snippet to ${AGENTS_MD_PATH}`);
|
|
53
|
-
if (files.length === 0 && rewritten.length === 0 && !appendedAgentsMd) {
|
|
54
|
-
lines.push(`${C.dim}capture pack already installed \u2014 nothing to write${C.reset}`);
|
|
55
|
-
}
|
|
56
|
-
if (!isAgentsMdLayout(cwd)) {
|
|
57
|
-
lines.push(`Run ${C.yellow}\`${cliInvocation()} context emit\`${C.reset} to compile the pack into your agent's native files.`);
|
|
58
|
-
}
|
|
59
|
-
output = lines.join("\n");
|
|
60
|
-
}
|
|
61
|
-
if (!opts.quiet) {
|
|
62
|
-
process.stdout.write(output + "\n");
|
|
63
|
-
if (!opts.json && !appendedAgentsMd && !existsSync(agentsMdAbs)) {
|
|
64
|
-
process.stdout.write(
|
|
65
|
-
`${C.dim} no ${AGENTS_MD_PATH} to append to \u2014 paste ${SNIPPET_PATH} into your instructions file if your harness reads no skills${C.reset}
|
|
66
|
-
`
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return { files, rewritten, appendedAgentsMd, output };
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export { ImportCaptureError, runImportCapture };
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
import { C } from './chunk-ANPNT6PM.js';
|
|
4
|
-
import './chunk-CRB3POP4.js';
|
|
5
|
-
import { normalizePath } from './chunk-RKOTJQVG.js';
|
|
6
|
-
import './chunk-QZBXLLTV.js';
|
|
7
|
-
import './chunk-VNVZDWO3.js';
|
|
8
|
-
import './chunk-Z5GEFMRW.js';
|
|
9
|
-
import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
10
|
-
import { join, dirname } from 'path';
|
|
11
|
-
|
|
12
|
-
createRequire(import.meta.url);
|
|
13
|
-
var SKIP_DIRS = /* @__PURE__ */ new Set(["node_modules", ".git"]);
|
|
14
|
-
var ImportRulerError = class extends Error {
|
|
15
|
-
};
|
|
16
|
-
function toRepoRelative(base, name) {
|
|
17
|
-
return normalizePath(`${base}/${name}`);
|
|
18
|
-
}
|
|
19
|
-
function discoverRulerDirs(repoRoot) {
|
|
20
|
-
const out = [];
|
|
21
|
-
walk(repoRoot, repoRoot, "", out);
|
|
22
|
-
return out.sort();
|
|
23
|
-
}
|
|
24
|
-
function walk(dirAbs, repoRoot, dirRel, out) {
|
|
25
|
-
let entries;
|
|
26
|
-
try {
|
|
27
|
-
entries = readdirSync(dirAbs, { withFileTypes: true });
|
|
28
|
-
} catch {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
for (const entry of entries) {
|
|
32
|
-
if (entry.isSymbolicLink() || !entry.isDirectory()) continue;
|
|
33
|
-
if (SKIP_DIRS.has(entry.name)) continue;
|
|
34
|
-
const childRel = dirRel === "" ? entry.name : toRepoRelative(dirRel, entry.name);
|
|
35
|
-
if (entry.name === ".ruler") {
|
|
36
|
-
out.push(childRel);
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
walk(join(dirAbs, entry.name), repoRoot, childRel, out);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function collectFilesRecursively(dirAbs, dirRel) {
|
|
43
|
-
const out = [];
|
|
44
|
-
let entries;
|
|
45
|
-
try {
|
|
46
|
-
entries = readdirSync(dirAbs, { withFileTypes: true });
|
|
47
|
-
} catch {
|
|
48
|
-
return out;
|
|
49
|
-
}
|
|
50
|
-
for (const entry of entries) {
|
|
51
|
-
if (entry.isSymbolicLink()) continue;
|
|
52
|
-
const childRel = toRepoRelative(dirRel, entry.name);
|
|
53
|
-
const childAbs = join(dirAbs, entry.name);
|
|
54
|
-
if (entry.isDirectory()) out.push(...collectFilesRecursively(childAbs, childRel));
|
|
55
|
-
else if (entry.isFile()) out.push(childRel);
|
|
56
|
-
}
|
|
57
|
-
return out;
|
|
58
|
-
}
|
|
59
|
-
function catalogRulerDir(repoRoot, rulerDirRel) {
|
|
60
|
-
const abs = join(repoRoot, rulerDirRel);
|
|
61
|
-
const catalog = { otherMd: [], unmapped: [] };
|
|
62
|
-
const mdFilenames = [];
|
|
63
|
-
let entries;
|
|
64
|
-
try {
|
|
65
|
-
entries = readdirSync(abs, { withFileTypes: true });
|
|
66
|
-
} catch {
|
|
67
|
-
entries = [];
|
|
68
|
-
}
|
|
69
|
-
for (const entry of entries) {
|
|
70
|
-
if (entry.isSymbolicLink()) continue;
|
|
71
|
-
const childRel = toRepoRelative(rulerDirRel, entry.name);
|
|
72
|
-
if (entry.isDirectory()) {
|
|
73
|
-
catalog.unmapped.push(...collectFilesRecursively(join(abs, entry.name), childRel));
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
if (!entry.isFile()) continue;
|
|
77
|
-
if (entry.name === "AGENTS.md") catalog.agentsMd = readFileSync(join(abs, entry.name), "utf8");
|
|
78
|
-
else if (entry.name === "mcp.json") catalog.mcpJson = readFileSync(join(abs, entry.name), "utf8");
|
|
79
|
-
else if (entry.name === "ruler.toml") catalog.rulerTomlPath = childRel;
|
|
80
|
-
else if (entry.name.endsWith(".md")) mdFilenames.push(entry.name);
|
|
81
|
-
else catalog.unmapped.push(childRel);
|
|
82
|
-
}
|
|
83
|
-
catalog.otherMd = mdFilenames.sort((a, b) => a.localeCompare(b)).map((filename) => ({ filename, content: readFileSync(join(abs, filename), "utf8") }));
|
|
84
|
-
return catalog;
|
|
85
|
-
}
|
|
86
|
-
function scopeOf(rulerDirRel) {
|
|
87
|
-
if (rulerDirRel === ".ruler") return "";
|
|
88
|
-
return rulerDirRel.slice(0, rulerDirRel.length - "/.ruler".length);
|
|
89
|
-
}
|
|
90
|
-
function outerlayerDirFor(scopePath) {
|
|
91
|
-
return scopePath === "" ? ".outerlayer" : `${scopePath}/.outerlayer`;
|
|
92
|
-
}
|
|
93
|
-
function writeOutFile(repoRoot, relPath, content) {
|
|
94
|
-
const abs = join(repoRoot, relPath);
|
|
95
|
-
mkdirSync(dirname(abs), { recursive: true });
|
|
96
|
-
writeFileSync(abs, content);
|
|
97
|
-
}
|
|
98
|
-
function renderSuccess(scopes, warnings) {
|
|
99
|
-
const warningSuffix = warnings.length > 0 ? `, ${warnings.length} warning${warnings.length === 1 ? "" : "s"}` : "";
|
|
100
|
-
const lines = [`${C.green}\u2713${C.reset} imported ${scopes.length} .ruler/ scope${scopes.length === 1 ? "" : "s"}${warningSuffix}`];
|
|
101
|
-
for (const s of scopes) {
|
|
102
|
-
const written = [s.agentsMdWritten, s.mcpWritten].filter((p) => p !== void 0);
|
|
103
|
-
lines.push(` ${C.dim}${s.scopePath === "" ? "(root)" : s.scopePath}${C.reset} \u2192 ${written.join(", ") || "nothing to import"}`);
|
|
104
|
-
}
|
|
105
|
-
return lines.join("\n");
|
|
106
|
-
}
|
|
107
|
-
function runImportRuler(opts = {}) {
|
|
108
|
-
const cwd = opts.cwd ?? process.cwd();
|
|
109
|
-
if (!existsSync(cwd)) throw new ImportRulerError(`no such directory: ${cwd}`);
|
|
110
|
-
const rulerDirs = discoverRulerDirs(cwd);
|
|
111
|
-
if (rulerDirs.length === 0) {
|
|
112
|
-
const output2 = opts.json ? JSON.stringify({ scopes: [], warnings: [] }) : `${C.dim}no .ruler/ directories found \u2014 nothing to import${C.reset}`;
|
|
113
|
-
if (!opts.quiet) process.stdout.write(output2 + "\n");
|
|
114
|
-
return { scopes: [], warnings: [], output: output2, exitCode: 0 };
|
|
115
|
-
}
|
|
116
|
-
const conflicts = rulerDirs.map((rel) => outerlayerDirFor(scopeOf(rel))).filter((outerlayerRel) => existsSync(join(cwd, outerlayerRel)));
|
|
117
|
-
if (conflicts.length > 0) {
|
|
118
|
-
throw new ImportRulerError(
|
|
119
|
-
`refusing to import \u2014 .outerlayer/ already exists at: ${conflicts.join(", ")} (never overwritten; remove it first to replace it)`
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
const scopes = [];
|
|
123
|
-
const warnings = [];
|
|
124
|
-
for (const rulerDirRel of rulerDirs) {
|
|
125
|
-
const scopePath = scopeOf(rulerDirRel);
|
|
126
|
-
const outerlayerRel = outerlayerDirFor(scopePath);
|
|
127
|
-
const catalog = catalogRulerDir(cwd, rulerDirRel);
|
|
128
|
-
const scope = { scopePath };
|
|
129
|
-
if (catalog.agentsMd !== void 0 || catalog.otherMd.length > 0) {
|
|
130
|
-
let content = catalog.agentsMd ?? "";
|
|
131
|
-
for (const { filename, content: mdContent } of catalog.otherMd) {
|
|
132
|
-
content += `
|
|
133
|
-
|
|
134
|
-
<!-- imported from .ruler/${filename} -->
|
|
135
|
-
|
|
136
|
-
${mdContent}`;
|
|
137
|
-
}
|
|
138
|
-
const agentsPath = toRepoRelative(outerlayerRel, "AGENTS.md");
|
|
139
|
-
writeOutFile(cwd, agentsPath, content);
|
|
140
|
-
scope.agentsMdWritten = agentsPath;
|
|
141
|
-
}
|
|
142
|
-
if (catalog.mcpJson !== void 0) {
|
|
143
|
-
const mcpPath = toRepoRelative(outerlayerRel, "mcp.json");
|
|
144
|
-
writeOutFile(cwd, mcpPath, catalog.mcpJson);
|
|
145
|
-
scope.mcpWritten = mcpPath;
|
|
146
|
-
}
|
|
147
|
-
if (catalog.rulerTomlPath !== void 0) {
|
|
148
|
-
warnings.push({
|
|
149
|
-
code: "ruler_toml_not_imported",
|
|
150
|
-
path: catalog.rulerTomlPath,
|
|
151
|
-
message: `${catalog.rulerTomlPath} was not imported \u2014 target selection now lives in .outerlayer/config.json; per-tool config is superseded`
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
for (const path of catalog.unmapped) {
|
|
155
|
-
warnings.push({ code: "unmapped_file", path, message: `${path} has no .outerlayer/ equivalent \u2014 not imported` });
|
|
156
|
-
}
|
|
157
|
-
scopes.push(scope);
|
|
158
|
-
}
|
|
159
|
-
warnings.sort((a, b) => a.path.localeCompare(b.path));
|
|
160
|
-
const output = opts.json ? JSON.stringify({ scopes, warnings }) : renderSuccess(scopes, warnings);
|
|
161
|
-
if (!opts.quiet) {
|
|
162
|
-
if (opts.json) {
|
|
163
|
-
process.stdout.write(output + "\n");
|
|
164
|
-
} else {
|
|
165
|
-
process.stdout.write(output + "\n");
|
|
166
|
-
for (const w of warnings) process.stderr.write(` ${C.yellow}!${C.reset} ${w.path}: ${w.message}
|
|
167
|
-
`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return { scopes, warnings, output, exitCode: 0 };
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
export { ImportRulerError, runImportRuler };
|