@outerlayer/cli 0.6.0 → 0.8.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 +34 -0
- package/README.md +15 -5
- package/dist/{agent-setup-USZ2SAXC.js → agent-setup-C7PLRXZO.js} +7 -6
- package/dist/{build-PAEKVYVK.js → build-MS34XEGN.js} +3 -1
- package/dist/build-info.json +1 -1
- package/dist/builder-G52A6GW2.js +13 -0
- package/dist/{check-CCVPBN7A.js → check-FOF3PUKI.js} +35 -26
- package/dist/{chunk-ZILGTTY6.js → chunk-3S4P55NE.js} +3 -3
- package/dist/{chunk-MIGEDH5P.js → chunk-4A5E2G4E.js} +9 -9
- package/dist/chunk-4ACZCY4I.js +39 -0
- package/dist/{chunk-OIRNH6UO.js → chunk-5FWNEQNZ.js} +3 -3
- package/dist/{chunk-BNMCXPG7.js → chunk-5QLNZGAQ.js} +12 -3
- package/dist/chunk-5TNS3PL7.js +263 -0
- package/dist/chunk-7RQ73DLO.js +23 -0
- package/dist/{chunk-VMJ3MMBX.js → chunk-7VNURP6M.js} +538 -46
- package/dist/{chunk-EMY4I27X.js → chunk-7ZR5UPMB.js} +555 -5
- package/dist/{chunk-UMFWVGJO.js → chunk-AIL2R4SI.js} +4 -3
- package/dist/{chunk-NQXFAGHU.js → chunk-AX23QKHS.js} +7 -3
- package/dist/{chunk-RZSF5B46.js → chunk-CM5QTKM4.js} +152 -158
- package/dist/chunk-CX22S5BA.js +45 -0
- package/dist/{chunk-H5NCNVDA.js → chunk-EV3M3EH7.js} +2 -2
- package/dist/{chunk-ANK2B36Y.js → chunk-GAYWY4GI.js} +6190 -28615
- package/dist/chunk-HKMPVPO7.js +55 -0
- package/dist/{chunk-43J3M6KB.js → chunk-IJBVPLZZ.js} +91 -39
- package/dist/{chunk-PMAMOSTP.js → chunk-ILEA3YHM.js} +85 -25
- package/dist/{chunk-MXB5VB4Y.js → chunk-IRCBTGWF.js} +6 -6
- package/dist/{chunk-OUUINEYB.js → chunk-JKIWMRFH.js} +1 -1
- package/dist/{chunk-FA2BOX4O.js → chunk-JPR2WHHF.js} +1 -1
- package/dist/{chunk-IASWYRVG.js → chunk-K35RW5HP.js} +4 -1
- package/dist/{chunk-ZMYPLFG3.js → chunk-M3SQ4YGD.js} +1 -1
- package/dist/{chunk-4NLKY4WR.js → chunk-NALVDFIS.js} +2 -2
- package/dist/{chunk-AUFG23AA.js → chunk-OD2VTIHN.js} +19 -47
- package/dist/{chunk-JWOQNNN2.js → chunk-OEK4JEB3.js} +33 -4
- package/dist/chunk-PTW6W5NR.js +127 -0
- package/dist/{chunk-3DD6AOWC.js → chunk-PWBILI5P.js} +28 -3
- package/dist/{chunk-B2G7JHHB.js → chunk-R7STSBLC.js} +1 -1
- package/dist/{chunk-YYYXRJUW.js → chunk-TI7B7UEO.js} +1 -1
- package/dist/{chunk-Z62HNKEJ.js → chunk-TTNFGMHO.js} +72 -54
- package/dist/{chunk-RBOMWNOG.js → chunk-TUUMW4TC.js} +2 -2
- package/dist/{chunk-774HEQL6.js → chunk-U3GOI2B4.js} +91 -8
- package/dist/{chunk-F6GFZXZ3.js → chunk-UXYLWVTQ.js} +1 -18
- package/dist/{chunk-WO2BXCTQ.js → chunk-VXLJORHL.js} +1 -1
- package/dist/{chunk-CBPPJSAR.js → chunk-WVGSB3Z2.js} +2 -2
- package/dist/chunk-YNJEOGDL.js +22434 -0
- package/dist/{chunk-W4SQCOZU.js → chunk-ZOAEPWGL.js} +1 -1
- package/dist/{chunk-3DEVYTNQ.js → chunk-ZYHKJKSU.js} +1 -1
- package/dist/{chunk-WIOZAJ2W.js → chunk-ZZXLM64C.js} +1 -1
- package/dist/{cli-7WCNPBYC.js → cli-AOJPAVFX.js} +109 -81
- package/dist/{command-ARFK3OYF.js → command-SY3SVLAI.js} +67 -27
- package/dist/config-Z3USDBLU.js +11 -0
- package/dist/{connect-cmd-PCESZLTR.js → connect-cmd-PNZ6IJLJ.js} +4 -4
- package/dist/{context-adopt-G5JAELE7.js → context-adopt-CE4KDXS3.js} +5 -4
- package/dist/{context-materialize-3HLPZAF6.js → context-materialize-QL33HDJN.js} +5 -4
- package/dist/{dist-RDLP4GGJ.js → dist-3ZTZF2TP.js} +2 -1
- package/dist/docker-676FD3CQ.js +15 -0
- package/dist/{doctor-VOMYOHQU.js → doctor-WR6TRPSU.js} +49 -19
- package/dist/{emit-artifact-cmd-TBF46VXZ.js → emit-artifact-cmd-AVM4YXMQ.js} +11 -4
- package/dist/{emit-cmd-DCERAU27.js → emit-cmd-2QRMYPYO.js} +4 -3
- package/dist/{emit-criteria-cmd-3427XKFW.js → emit-criteria-cmd-LDBE4YDS.js} +10 -1
- package/dist/{emit-finding-cmd-GSI75K36.js → emit-finding-cmd-6R5WBPCH.js} +12 -1
- package/dist/{emit-result-cmd-3PRQKB55.js → emit-result-cmd-2DMN6O6U.js} +13 -6
- package/dist/{exec-client-4XGXV3XN.js → exec-client-NPYNUAF3.js} +4 -3
- package/dist/{guest-init-GENRHNP7.js → guest-init-JWNNAH2H.js} +4 -3
- package/dist/{hook-fast-NJBBZQ5Q.js → hook-fast-XBOZ3N6L.js} +1 -1
- package/dist/{import-capture-cmd-AVZ4VIVJ.js → import-capture-cmd-T4556ELW.js} +3 -2
- package/dist/{import-ruler-cmd-GUHL6IY5.js → import-ruler-cmd-SG3UVGI7.js} +2 -1
- package/dist/index.js +3 -3
- package/dist/init-KDK5QLQZ.js +46 -0
- package/dist/{init-OHYFIKZD.js → init-R2FJ5KNS.js} +35 -21
- package/dist/{init-cmd-HMFNIFPI.js → init-cmd-BYZYAJ5P.js} +10 -9
- package/dist/{install-DSUZE2TJ.js → install-FHTVJZS6.js} +7 -5
- package/dist/{install-cmd-453C7IZT.js → install-cmd-DCF7TVXD.js} +3 -2
- package/dist/{logs-7RYUH5A6.js → logs-H55NWW4H.js} +1 -0
- package/dist/{loop-UAJB34KA.js → loop-AG3PLXPO.js} +35 -26
- package/dist/machine-LV6WBRRK.js +45 -0
- package/dist/{session-sender-ED26V45B.js → session-sender-Q5HAMOL2.js} +6 -5
- package/dist/{starter-pack-LIZYMKYQ.js → starter-pack-MUXMAU4S.js} +4 -3
- package/dist/{status-6WNXX2O7.js → status-HH4OSOHR.js} +29 -20
- package/dist/{sync-cmd-YONVGUYS.js → sync-cmd-CAEPJR7B.js} +5 -4
- package/dist/{watch-HHKAF26L.js → watch-LAAZFBHH.js} +5 -4
- package/dist/{work-claim-cmd-LXBZTMJA.js → work-claim-cmd-ARIYZARE.js} +15 -7
- package/dist/{work-cmd-OVNF44FY.js → work-cmd-B3FOXZAL.js} +9 -3
- package/dist/{work-comment-cmd-6DGQNTAH.js → work-comment-cmd-O5WGRI6K.js} +9 -3
- package/dist/{work-open-pr-cmd-FCZHFHZS.js → work-open-pr-cmd-M6CQW7KW.js} +10 -4
- package/dist/{work-pr-cmd-QJJVHZDC.js → work-pr-cmd-C4YEGKD6.js} +9 -2
- package/package.json +1 -1
- package/skill-pack/template/build/scripts/record-criteria.mjs +2 -1
- package/dist/chunk-7DBI6SNT.js +0 -55
- package/dist/config-HL2AIR3K.js +0 -9
- package/dist/docker-NEGDLU6D.js +0 -7
- package/dist/init-WVR4BZQ4.js +0 -36
- package/dist/machine-2JOWGRSZ.js +0 -35
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-
|
|
3
|
+
import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-YNJEOGDL.js';
|
|
4
4
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
5
5
|
import { mkdirSync, appendFileSync, writeFileSync, renameSync, existsSync, unlinkSync, readdirSync, readFileSync } from 'fs';
|
|
6
6
|
import { join, dirname } from 'path';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { CONTEXT_PIN_SCHEMA_VERSION, CONTEXT_PIN_FILENAME } from './chunk-
|
|
3
|
+
import { CONTEXT_PIN_SCHEMA_VERSION, CONTEXT_PIN_FILENAME } from './chunk-7ZR5UPMB.js';
|
|
4
4
|
import { readFileSync, existsSync, writeFileSync, mkdirSync, utimesSync, statSync, unlinkSync } from 'fs';
|
|
5
5
|
import { join, dirname } from 'path';
|
|
6
6
|
|
|
@@ -1,27 +1,29 @@
|
|
|
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-
|
|
4
|
-
import './chunk-7DBI6SNT.js';
|
|
3
|
+
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-4A5E2G4E.js';
|
|
5
4
|
import './chunk-F47JBIAW.js';
|
|
6
5
|
import './chunk-BKO6JEZI.js';
|
|
7
|
-
import './chunk-
|
|
6
|
+
import './chunk-5QLNZGAQ.js';
|
|
7
|
+
import './chunk-4ACZCY4I.js';
|
|
8
8
|
import './chunk-BFESLKPP.js';
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
9
|
+
import './chunk-ILEA3YHM.js';
|
|
10
|
+
import './chunk-ZYHKJKSU.js';
|
|
11
|
+
import './chunk-GAYWY4GI.js';
|
|
11
12
|
import './chunk-USO2DKBD.js';
|
|
12
13
|
import './chunk-N6LURUEF.js';
|
|
13
14
|
import { C, NO_COLOR_FLAG, warnDeprecated, stripNoColor, API_KEY_FLAG_DEPRECATION } from './chunk-YRYMNBGQ.js';
|
|
14
15
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
15
16
|
import { settingsPath, readSettings, SettingsParseError, listHookCandidates, wrapHooks, writeSettings, unwrapHooks, REGISTERED_EVENTS, cliCommand, removeHooks, removeStatusline, cliBinResolvable, mergeHooks, repointWrappedHooks, AUTO_WRAP_EVENTS, mergeStatusline } from './chunk-5QRP3MVS.js';
|
|
16
|
-
import { pinExists } from './chunk-
|
|
17
|
-
import './chunk-
|
|
17
|
+
import { pinExists } from './chunk-ZZXLM64C.js';
|
|
18
|
+
import './chunk-7ZR5UPMB.js';
|
|
18
19
|
import './chunk-BCLJSQCV.js';
|
|
19
20
|
import './chunk-BOLTI6LR.js';
|
|
21
|
+
import './chunk-YNJEOGDL.js';
|
|
20
22
|
import './chunk-EABW6AJQ.js';
|
|
21
23
|
import { resolveVersion } from './chunk-RA3O54FC.js';
|
|
22
24
|
import './chunk-M5POMKKW.js';
|
|
23
25
|
import './chunk-ZM2IMMYN.js';
|
|
24
|
-
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-
|
|
26
|
+
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-JPR2WHHF.js';
|
|
25
27
|
import { managedHookScripts, removeJournalHooks, installPreCommitGuardHook, removePreCommitGuardHook } from './chunk-XCCLFVXM.js';
|
|
26
28
|
import './chunk-BJ3KTMDH.js';
|
|
27
29
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
@@ -3621,6 +3623,13 @@ function fail(message) {
|
|
|
3621
3623
|
`);
|
|
3622
3624
|
process.exitCode = 1;
|
|
3623
3625
|
}
|
|
3626
|
+
function printLauncher(result, summary) {
|
|
3627
|
+
const line = summary(result.launcher);
|
|
3628
|
+
if (line !== void 0) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
3629
|
+
`);
|
|
3630
|
+
for (const note of result.launcher.notes) process.stdout.write(`${C.yellow}${note}${C.reset}
|
|
3631
|
+
`);
|
|
3632
|
+
}
|
|
3624
3633
|
function writeJson(value) {
|
|
3625
3634
|
process.stdout.write(`${JSON.stringify(value, null, 2)}
|
|
3626
3635
|
`);
|
|
@@ -3632,7 +3641,7 @@ function warnIfApiKeyFlag(opts) {
|
|
|
3632
3641
|
if (opts.apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
|
|
3633
3642
|
}
|
|
3634
3643
|
async function installStarterPackInRepo() {
|
|
3635
|
-
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-
|
|
3644
|
+
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-MUXMAU4S.js');
|
|
3636
3645
|
const cwd = process.cwd();
|
|
3637
3646
|
let repoRoot = cwd;
|
|
3638
3647
|
try {
|
|
@@ -3792,8 +3801,8 @@ ${starter.output}`),
|
|
|
3792
3801
|
}
|
|
3793
3802
|
}
|
|
3794
3803
|
async function realConnectDepsForCwd() {
|
|
3795
|
-
const { realConnectDeps } = await import('./connect-cmd-
|
|
3796
|
-
const { resolveRepoIdentity } = await import('./dist-
|
|
3804
|
+
const { realConnectDeps } = await import('./connect-cmd-PNZ6IJLJ.js');
|
|
3805
|
+
const { resolveRepoIdentity } = await import('./dist-3ZTZF2TP.js');
|
|
3797
3806
|
return {
|
|
3798
3807
|
...realConnectDeps(),
|
|
3799
3808
|
home: homeFromEnv(),
|
|
@@ -3815,7 +3824,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3815
3824
|
).action(async (opts) => {
|
|
3816
3825
|
let starterTemplate;
|
|
3817
3826
|
if (opts.template !== void 0) {
|
|
3818
|
-
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-
|
|
3827
|
+
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-MUXMAU4S.js');
|
|
3819
3828
|
try {
|
|
3820
3829
|
assertKnownTemplate(opts.template);
|
|
3821
3830
|
} catch (err) {
|
|
@@ -3846,7 +3855,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3846
3855
|
else process.stdout.write(outcome.text);
|
|
3847
3856
|
return;
|
|
3848
3857
|
}
|
|
3849
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3858
|
+
const { runInitCommand } = await import('./init-cmd-BYZYAJ5P.js');
|
|
3850
3859
|
const code = await runInitCommand(
|
|
3851
3860
|
{ json: opts.json, factory: opts.factory },
|
|
3852
3861
|
{
|
|
@@ -3858,7 +3867,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3858
3867
|
return { ok, text, detail };
|
|
3859
3868
|
},
|
|
3860
3869
|
runAgentSetup: async () => {
|
|
3861
|
-
const { runAgentSetup } = await import('./agent-setup-
|
|
3870
|
+
const { runAgentSetup } = await import('./agent-setup-C7PLRXZO.js');
|
|
3862
3871
|
return runAgentSetup({ cwd: process.cwd() });
|
|
3863
3872
|
},
|
|
3864
3873
|
runDoctorChecks: gatherDoctorChecks
|
|
@@ -3870,7 +3879,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3870
3879
|
"after",
|
|
3871
3880
|
"\nRun it in a repository, after `outerlayer login`. With a login, connect lists\nthe factories you can use and takes the first rule that leaves one answer:\n 1. --factory <org>/<factory>, or a factory id\n 2. the factory this repository is already connected to\n 3. the one factory this repository is linked to\n 4. the one factory you can use\n 5. on a terminal, ask; with no terminal, exit 1 and list each --factory value\n\nIt says what it chose and why. The choice is saved in this repository's git\ndirectory (outerlayer/connection.json), shared by every worktree of the\nclone and never committed. A factory key already belongs to one factory, so\nconnect changes nothing for it. Connect never links a repository.\n\nAfter it saves the choice, connect checks that this repository is linked to\nthe factory. If it is not, connect says so, prints the factory's Work page\nlink where you link it, and exits 2. The choice is saved either way. Run\nconnect again once the repository is linked. With --json, the document has\nlinked (true, false, or null when it could not be checked) and, when false,\nlinkUrl.\n"
|
|
3872
3881
|
).action(async (opts) => {
|
|
3873
|
-
const { runConnectCommand } = await import('./connect-cmd-
|
|
3882
|
+
const { runConnectCommand } = await import('./connect-cmd-PNZ6IJLJ.js');
|
|
3874
3883
|
const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
|
|
3875
3884
|
stdout: process.stdout,
|
|
3876
3885
|
stderr: process.stderr
|
|
@@ -3918,7 +3927,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3918
3927
|
"\nIncremental: only sessions newer than the last checkpoint ship. The tier\nis applied on this machine before anything leaves it; `--dry-run` prints\nexactly what would. The hook-triggered background sync runs `--quiet`.\nExit 2 means the server rejected at least one session.\n"
|
|
3919
3928
|
).action(async (opts) => {
|
|
3920
3929
|
warnIfApiKeyFlag(opts);
|
|
3921
|
-
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-
|
|
3930
|
+
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-CAEPJR7B.js');
|
|
3922
3931
|
try {
|
|
3923
3932
|
const result = await runSync({
|
|
3924
3933
|
url: opts.url,
|
|
@@ -3947,7 +3956,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3947
3956
|
if (invokedCommandToken(argv) === "watch") {
|
|
3948
3957
|
warnDeprecated("`outerlayer watch` is now `outerlayer daemon`; the old name will be removed in a future release.");
|
|
3949
3958
|
}
|
|
3950
|
-
const { runWatch } = await import('./watch-
|
|
3959
|
+
const { runWatch } = await import('./watch-LAAZFBHH.js');
|
|
3951
3960
|
await runWatch({ once: opts.once });
|
|
3952
3961
|
});
|
|
3953
3962
|
program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
|
|
@@ -3976,7 +3985,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3976
3985
|
await startRelay({ port, socketPath: opts.socket, forwards });
|
|
3977
3986
|
});
|
|
3978
3987
|
program2.command("vm-exec", { hidden: true }).description("run a command in a microVM build's guest through its exec agent").requiredOption("--socket <path>", "the Unix socket Firecracker serves the build's vsock device on").option("--user <user>", "the user to run as", "").option("--cwd <dir>", "the working directory", "/").option("--env <NAME=value>", "an environment value the command line carries; repeatable", (value, previous) => [...previous, value], []).option("--pass <NAME>", "an environment variable whose value is read from this process; repeatable", (value, previous) => [...previous, value], []).argument("<argv...>", "the command and its arguments").action(async (argv2, opts) => {
|
|
3979
|
-
const { runVmExec } = await import('./exec-client-
|
|
3988
|
+
const { runVmExec } = await import('./exec-client-NPYNUAF3.js');
|
|
3980
3989
|
const env = {};
|
|
3981
3990
|
for (const entry of opts.env) {
|
|
3982
3991
|
const eq = entry.indexOf("=");
|
|
@@ -4001,7 +4010,7 @@ function buildProgram(argv = process.argv) {
|
|
|
4001
4010
|
}
|
|
4002
4011
|
});
|
|
4003
4012
|
program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
|
|
4004
|
-
const { runSessionSender } = await import('./session-sender-
|
|
4013
|
+
const { runSessionSender } = await import('./session-sender-Q5HAMOL2.js');
|
|
4005
4014
|
try {
|
|
4006
4015
|
await runSessionSender();
|
|
4007
4016
|
} catch (err) {
|
|
@@ -4009,7 +4018,7 @@ function buildProgram(argv = process.argv) {
|
|
|
4009
4018
|
}
|
|
4010
4019
|
});
|
|
4011
4020
|
program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
|
|
4012
|
-
const { realGuestHost, runGuestInit } = await import('./guest-init-
|
|
4021
|
+
const { realGuestHost, runGuestInit } = await import('./guest-init-JWNNAH2H.js');
|
|
4013
4022
|
const { readFileSync: readFileSync3 } = await import('fs');
|
|
4014
4023
|
try {
|
|
4015
4024
|
runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
|
|
@@ -4036,7 +4045,7 @@ async function runCli(processArgv) {
|
|
|
4036
4045
|
await buildProgram(argv).parseAsync(argv);
|
|
4037
4046
|
}
|
|
4038
4047
|
async function compileContext(opts) {
|
|
4039
|
-
const { runEmit, EmitError } = await import('./emit-cmd-
|
|
4048
|
+
const { runEmit, EmitError } = await import('./emit-cmd-2QRMYPYO.js');
|
|
4040
4049
|
try {
|
|
4041
4050
|
const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
|
|
4042
4051
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
@@ -4059,7 +4068,7 @@ function registerEmitCommands(program2) {
|
|
|
4059
4068
|
return;
|
|
4060
4069
|
}
|
|
4061
4070
|
warnIfApiKeyFlag(opts);
|
|
4062
|
-
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-
|
|
4071
|
+
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-2DMN6O6U.js');
|
|
4063
4072
|
try {
|
|
4064
4073
|
const result = await runEmitResult({
|
|
4065
4074
|
name,
|
|
@@ -4110,7 +4119,7 @@ locally so it never uploads. One correction can retire several duplicates.
|
|
|
4110
4119
|
`
|
|
4111
4120
|
).action(async (file, opts) => {
|
|
4112
4121
|
warnIfApiKeyFlag(opts);
|
|
4113
|
-
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-
|
|
4122
|
+
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-AVM4YXMQ.js');
|
|
4114
4123
|
let pr;
|
|
4115
4124
|
if (opts.pr !== void 0) {
|
|
4116
4125
|
pr = parseTrackerNumber(opts.pr);
|
|
@@ -4145,7 +4154,7 @@ locally so it never uploads. One correction can retire several duplicates.
|
|
|
4145
4154
|
'\n outerlayer emit finding --id gate-skip --category tooling \\\n --title "The pre-push gate prints green when a step was skipped" \\\n --file scripts/git/pre-push-checks.mjs --where "build session"\n\nRecords one problem you hit in the factory: an instruction that is wrong or\nmissing (context), a flaky test, a misbehaving script (tooling), a local\nsetup trap (environment), a bug outside your own change (defect), or\nanything else. A problem in your own change is fixed, not recorded.\nA context finding needs --rule-path and --rule-relation, and --rule-quote\nunless the relation is missing.\n--item names the work item; without it, inside a recorded session, the\nitem that session was launched for is used automatically.\n'
|
|
4146
4155
|
).action(async (opts) => {
|
|
4147
4156
|
warnIfApiKeyFlag(opts);
|
|
4148
|
-
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4157
|
+
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-6R5WBPCH.js');
|
|
4149
4158
|
try {
|
|
4150
4159
|
refuseRemovedFindingFlags(opts);
|
|
4151
4160
|
const result = await runEmitFinding({
|
|
@@ -4184,7 +4193,7 @@ locally so it never uploads. One correction can retire several duplicates.
|
|
|
4184
4193
|
"\n outerlayer emit findings review.json --item 412\n\nRecords a whole batch at once \u2014 a FindingBatch JSON file (schemaVersion,\noptional headSha / contextSourceSha, and 1-500 findings), validated against\nthe same contract `emit finding` uses before anything is sent. Re-emitting\nan id already on the item replaces that row rather than adding a second one.\n--item names the work item; without it, inside a recorded session, the item\nthat session was launched for is used automatically.\n"
|
|
4185
4194
|
).action(async (file, opts) => {
|
|
4186
4195
|
warnIfApiKeyFlag(opts);
|
|
4187
|
-
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4196
|
+
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-6R5WBPCH.js');
|
|
4188
4197
|
try {
|
|
4189
4198
|
const result = await runEmitFindings({
|
|
4190
4199
|
file,
|
|
@@ -4208,7 +4217,7 @@ locally so it never uploads. One correction can retire several duplicates.
|
|
|
4208
4217
|
'\n outerlayer emit criteria criteria.json --item 412\n\nRecords the item\'s acceptance criteria as one list. The file is JSON:\n { "criteria": [ { "id": "AC-1", "text": "Given ...", "proof": null },\n { "id": "login.redirect", "text": "...", "proof": "screenshot" } ] }\nAn id is 1-64 characters of A-Z a-z 0-9 . _ : - and is the id evidence is bound to with\n`emit artifact --for`. proof is video, screenshot, report, log, test, file or null (any bound\nartifact proves it). The list holds 1 to 200 criteria, each text at most 2,000\ncharacters, and no id twice. The list is validated before anything is sent.\nOnce an item has a list, only a person can replace it: run the command outside an\nagent session, with your own login. A key bound to no member cannot replace it either.\n--item names the work item; without it, inside a recorded session, the item that\nsession was launched for is used automatically.\n'
|
|
4209
4218
|
).action(async (file, opts) => {
|
|
4210
4219
|
warnIfApiKeyFlag(opts);
|
|
4211
|
-
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-
|
|
4220
|
+
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-LDBE4YDS.js');
|
|
4212
4221
|
try {
|
|
4213
4222
|
const result = await runEmitCriteria({
|
|
4214
4223
|
file,
|
|
@@ -4235,7 +4244,7 @@ function registerWorkCommands(program2) {
|
|
|
4235
4244
|
"\n outerlayer work build --issue 42 # a host builds it\n outerlayer work build --item 7 # retry an item already on Work\n outerlayer work build --issue 42 --local # you build it\n outerlayer work build --issue ENG-123 --tracker linear # a Linear issue\n\nWithout --local, records a build request: a host takes the item when it\nhas a free slot. It never links the calling session and never takes a\nlease, even run from inside one.\n\nWith --local, puts the item on Work with no build request, so no host\ntakes it, and prints the line that starts your session on it. That\nsession links itself and holds the item's lease while it works.\n"
|
|
4236
4245
|
).action(async (opts) => {
|
|
4237
4246
|
warnIfApiKeyFlag(opts);
|
|
4238
|
-
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-
|
|
4247
|
+
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4239
4248
|
try {
|
|
4240
4249
|
await runWorkBuild(opts);
|
|
4241
4250
|
} catch (err) {
|
|
@@ -4251,7 +4260,7 @@ function registerWorkCommands(program2) {
|
|
|
4251
4260
|
"\n outerlayer work link-session 42\n\nNames an item that already exists on the calling session \u2014 it never\ncreates one. Create one with `outerlayer work build --local`. Linking\nthe same session to the same item twice is a no-op. Also takes or\nrenews that session's own 20-minute lease, unless --no-lease or\n--ended is given, or another worker already holds a live one.\n"
|
|
4252
4261
|
).action(async (number, opts) => {
|
|
4253
4262
|
warnIfApiKeyFlag(opts);
|
|
4254
|
-
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-
|
|
4263
|
+
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4255
4264
|
try {
|
|
4256
4265
|
await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
|
|
4257
4266
|
} catch (err) {
|
|
@@ -4276,8 +4285,8 @@ most one action flag may be given.
|
|
|
4276
4285
|
`
|
|
4277
4286
|
).action(async (opts) => {
|
|
4278
4287
|
warnIfApiKeyFlag(opts);
|
|
4279
|
-
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4280
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4288
|
+
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-O5WGRI6K.js');
|
|
4289
|
+
const { WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4281
4290
|
try {
|
|
4282
4291
|
await runWorkComment(opts);
|
|
4283
4292
|
} catch (err) {
|
|
@@ -4293,8 +4302,8 @@ most one action flag may be given.
|
|
|
4293
4302
|
"\n outerlayer work threads --item 7\n\nPrints the item's general thread, then one thread per acceptance\ncriterion that carries proof or a comment, each with who is waiting\non whom next.\n"
|
|
4294
4303
|
).action(async (opts) => {
|
|
4295
4304
|
warnIfApiKeyFlag(opts);
|
|
4296
|
-
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4297
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4305
|
+
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-O5WGRI6K.js');
|
|
4306
|
+
const { WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4298
4307
|
try {
|
|
4299
4308
|
await runWorkThreads(opts);
|
|
4300
4309
|
} catch (err) {
|
|
@@ -4316,7 +4325,7 @@ live addition remains on it.
|
|
|
4316
4325
|
`
|
|
4317
4326
|
).action(async (opts) => {
|
|
4318
4327
|
warnIfApiKeyFlag(opts);
|
|
4319
|
-
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-
|
|
4328
|
+
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4320
4329
|
try {
|
|
4321
4330
|
await runWorkRemove(opts);
|
|
4322
4331
|
} catch (err) {
|
|
@@ -4329,7 +4338,7 @@ live addition remains on it.
|
|
|
4329
4338
|
});
|
|
4330
4339
|
workCmd.command("status").description("Show one item's stage, gate ledger, and additions").option("--item <number>", "the item's number inside this factory").option("--issue <number>", "issue number").option("--repo <owner/name>", "repository (default: the current checkout's remote)").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
|
|
4331
4340
|
warnIfApiKeyFlag(opts);
|
|
4332
|
-
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-
|
|
4341
|
+
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4333
4342
|
try {
|
|
4334
4343
|
await runWorkStatus(opts);
|
|
4335
4344
|
} catch (err) {
|
|
@@ -4342,7 +4351,7 @@ live addition remains on it.
|
|
|
4342
4351
|
});
|
|
4343
4352
|
workCmd.command("list").description("List live work items for this factory").option("--stage <spec|build|review>", "filter by stage").option("--section <attention|waiting|flowing>", "filter by Queue section").option("--repo <owner/name>", "repository (default: the current checkout's remote)").option("--unclaimed", "only items with no live lease").option("--claimed", "only items with a live lease, held by a host or a local session").option("--startable", "only items with an unused build request and no live lease").option("--needs <amend>", "only items with a thread waiting on an agent").option("--json", "machine-readable JSON output").option("--url <url>", "cloud base URL (or OUTERLAYER_URL / config)").addOption(apiKeyOption()).option("--app-id <id>", "factory id the key is bound to (or OUTERLAYER_APP_ID / config)").action(async (opts) => {
|
|
4344
4353
|
warnIfApiKeyFlag(opts);
|
|
4345
|
-
const { runWorkList, WorkCommandError } = await import('./work-cmd-
|
|
4354
|
+
const { runWorkList, WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4346
4355
|
try {
|
|
4347
4356
|
await runWorkList(opts);
|
|
4348
4357
|
} catch (err) {
|
|
@@ -4358,7 +4367,7 @@ live addition remains on it.
|
|
|
4358
4367
|
"\n outerlayer work claim --item 42 --kind implement\n\nRecords a lease for this host. A live lease already held by a\ndifferent host is refused; claiming again under the same host extends\nit.\n"
|
|
4359
4368
|
).action(async (opts) => {
|
|
4360
4369
|
warnIfApiKeyFlag(opts);
|
|
4361
|
-
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-
|
|
4370
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-ARIYZARE.js');
|
|
4362
4371
|
try {
|
|
4363
4372
|
await runWorkClaim(opts);
|
|
4364
4373
|
} catch (err) {
|
|
@@ -4374,7 +4383,7 @@ live addition remains on it.
|
|
|
4374
4383
|
"\n outerlayer work renew --item 42\n\nExtends this host's own live lease. Refused with a 410 if the lease\nhas expired, or a 403 if a different host holds it.\n"
|
|
4375
4384
|
).action(async (opts) => {
|
|
4376
4385
|
warnIfApiKeyFlag(opts);
|
|
4377
|
-
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-
|
|
4386
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-ARIYZARE.js');
|
|
4378
4387
|
try {
|
|
4379
4388
|
await runWorkRenew(opts);
|
|
4380
4389
|
} catch (err) {
|
|
@@ -4393,7 +4402,7 @@ live addition remains on it.
|
|
|
4393
4402
|
"\n outerlayer work release --item 42 --outcome ok\n\nMarks this host's lease released, optionally with an outcome.\nReleasing an already-released lease is a no-op that returns the\nrecorded release time and outcome.\n"
|
|
4394
4403
|
).action(async (opts) => {
|
|
4395
4404
|
warnIfApiKeyFlag(opts);
|
|
4396
|
-
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-
|
|
4405
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-ARIYZARE.js');
|
|
4397
4406
|
try {
|
|
4398
4407
|
await runWorkRelease(opts);
|
|
4399
4408
|
} catch (err) {
|
|
@@ -4409,7 +4418,7 @@ live addition remains on it.
|
|
|
4409
4418
|
"\n outerlayer work pr 481\n\nRun inside a session already on a work item. Records that pull\nrequest 481 in the checkout's repository belongs to that item \u2014 the\nsame fact a `pr-link` in the session's own transcript records on\nsync. Idempotent: declaring the same pull request twice is a no-op.\n"
|
|
4410
4419
|
).action(async (number, opts) => {
|
|
4411
4420
|
warnIfApiKeyFlag(opts);
|
|
4412
|
-
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-
|
|
4421
|
+
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-C4YEGKD6.js');
|
|
4413
4422
|
try {
|
|
4414
4423
|
await runWorkPr({ ...opts, number });
|
|
4415
4424
|
} catch (err) {
|
|
@@ -4425,8 +4434,8 @@ live addition remains on it.
|
|
|
4425
4434
|
'\n outerlayer work open-pr --title "Add the thing" --body-file pr.md\n\nIn a host build, which holds an item key, the gateway opens the pull\nrequest as the factory\'s GitHub App, from the branch the claim named,\nor edits the one already open on that branch. No gh command runs.\nIn your own session it runs `gh pr create` (or `gh pr edit`) under your\nlogin, then declares the pull request on the item, as `work pr` does.\nRun it again after a change to the title or description.\n'
|
|
4426
4435
|
).action(async (opts) => {
|
|
4427
4436
|
warnIfApiKeyFlag(opts);
|
|
4428
|
-
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-
|
|
4429
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4437
|
+
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-M6CQW7KW.js');
|
|
4438
|
+
const { WorkCommandError } = await import('./work-cmd-B3FOXZAL.js');
|
|
4430
4439
|
try {
|
|
4431
4440
|
await runWorkOpenPr(opts);
|
|
4432
4441
|
} catch (err) {
|
|
@@ -4442,8 +4451,8 @@ function registerRunnerCommands(program2) {
|
|
|
4442
4451
|
const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
|
|
4443
4452
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
4444
4453
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
4445
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4446
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4454
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-Z3USDBLU.js');
|
|
4455
|
+
const { start, RunnerStartError } = await import('./loop-AG3PLXPO.js');
|
|
4447
4456
|
const { RunnerAlreadyRunningError } = await import('./pidfile-UZRH774M.js');
|
|
4448
4457
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4449
4458
|
try {
|
|
@@ -4458,8 +4467,8 @@ function registerRunnerCommands(program2) {
|
|
|
4458
4467
|
}
|
|
4459
4468
|
});
|
|
4460
4469
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
4461
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4462
|
-
const { runRunnerCheck } = await import('./check-
|
|
4470
|
+
const { defaultRunnerConfigPath } = await import('./config-Z3USDBLU.js');
|
|
4471
|
+
const { runRunnerCheck } = await import('./check-FOF3PUKI.js');
|
|
4463
4472
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4464
4473
|
const result = await runRunnerCheck(configPath);
|
|
4465
4474
|
if (!result.ok) {
|
|
@@ -4474,12 +4483,12 @@ function registerRunnerCommands(program2) {
|
|
|
4474
4483
|
process.stdout.write(`${result.lines.join("\n")}
|
|
4475
4484
|
`);
|
|
4476
4485
|
});
|
|
4477
|
-
runnerCmd.command("install").description("Put this CLI in the runner's install layout; --service adds its service").option("--config <path>", configOption).option("--service", "set up the service that keeps the runner running").option("--print", "with --service, print the unit and set up nothing").option("--user <account>", "with --service, the account the service runs as").option("--replace", "
|
|
4478
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4479
|
-
const { runRunnerInstall, RunnerInstallError } = await import('./install-cmd-
|
|
4486
|
+
runnerCmd.command("install").description("Put this CLI in the runner's install layout; --service adds its service").option("--config <path>", configOption).option("--service", "set up the service that keeps the runner running").option("--print", "with --service, print the unit and set up nothing").option("--user <account>", "with --service, the account the service runs as").option("--replace", "replace a unit or launcher file this command did not write").addOption(new Option("--unit-name <name>", "with --service, the unit's name").hideHelp()).action(async (opts) => {
|
|
4487
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-Z3USDBLU.js');
|
|
4488
|
+
const { runRunnerInstall, RunnerInstallError, launcherSummary } = await import('./install-cmd-DCF7TVXD.js');
|
|
4480
4489
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4481
4490
|
if (opts.service !== true) {
|
|
4482
|
-
for (const flag of ["print", "user", "
|
|
4491
|
+
for (const flag of ["print", "user", "unitName"]) {
|
|
4483
4492
|
if (opts[flag] !== void 0) {
|
|
4484
4493
|
fail(`--${flag === "unitName" ? "unit-name" : flag} is for --service.`);
|
|
4485
4494
|
return;
|
|
@@ -4488,7 +4497,7 @@ function registerRunnerCommands(program2) {
|
|
|
4488
4497
|
}
|
|
4489
4498
|
try {
|
|
4490
4499
|
if (opts.service === true) {
|
|
4491
|
-
const { installServiceCommand } = await import('./command-
|
|
4500
|
+
const { installServiceCommand } = await import('./command-SY3SVLAI.js');
|
|
4492
4501
|
const result2 = await installServiceCommand({
|
|
4493
4502
|
configPath,
|
|
4494
4503
|
print: opts.print,
|
|
@@ -4500,14 +4509,18 @@ function registerRunnerCommands(program2) {
|
|
|
4500
4509
|
home: homeFromEnv()
|
|
4501
4510
|
});
|
|
4502
4511
|
if (result2.unit !== void 0) process.stdout.write(result2.unit);
|
|
4503
|
-
if (result2.ok)
|
|
4512
|
+
if (result2.ok) {
|
|
4513
|
+
for (const line of result2.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
4504
4514
|
`);
|
|
4505
|
-
|
|
4515
|
+
for (const note of result2.notes ?? []) process.stdout.write(`${C.yellow}${note}${C.reset}
|
|
4516
|
+
`);
|
|
4517
|
+
} else fail(result2.lines.length > 0 ? result2.lines.join("\n ") : "the service was not set up");
|
|
4506
4518
|
return;
|
|
4507
4519
|
}
|
|
4508
|
-
const result = runRunnerInstall({ configPath, entryPath: process.argv[1] ?? "", nodePath: process.execPath });
|
|
4520
|
+
const result = runRunnerInstall({ configPath, entryPath: process.argv[1] ?? "", nodePath: process.execPath, home: homeFromEnv(), PATH: process.env.PATH, replace: opts.replace });
|
|
4509
4521
|
process.stdout.write(`${C.green}\u2713${C.reset} installed ${result.version} for the runner; \`current\` names it
|
|
4510
4522
|
`);
|
|
4523
|
+
printLauncher(result, launcherSummary);
|
|
4511
4524
|
process.stdout.write(
|
|
4512
4525
|
`
|
|
4513
4526
|
To keep it running, run ${C.yellow}outerlayer runner install --service${C.reset}. To start the runner from the install layout yourself, use this line, then restart the service:
|
|
@@ -4527,18 +4540,18 @@ To keep it running, run ${C.yellow}outerlayer runner install --service${C.reset}
|
|
|
4527
4540
|
fail("pass --service: `outerlayer runner uninstall --service` removes the runner's service.");
|
|
4528
4541
|
return;
|
|
4529
4542
|
}
|
|
4530
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4531
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
4543
|
+
const { defaultRunnerConfigPath } = await import('./config-Z3USDBLU.js');
|
|
4544
|
+
const { uninstallServiceCommand } = await import('./command-SY3SVLAI.js');
|
|
4532
4545
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
4533
4546
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
4534
4547
|
`);
|
|
4535
4548
|
else fail(result.lines.length > 0 ? result.lines.join("\n ") : "the service was not removed");
|
|
4536
4549
|
});
|
|
4537
4550
|
runnerCmd.command("init").description("Write a runner block that fits this machine; on macOS, offers a Linux VM").option("--config <path>", configOption).option("--vm", "on macOS, run the runner in a Linux VM (Lima), with container builds").option("--no-vm", "on macOS, skip the VM and run builds as unisolated processes").option("--allow-process-builds", "where builds cannot be isolated, run them as processes anyway").addOption(new Option("--config-stdin", "the VM-side hand-off: read the whole config as JSON on stdin").hideHelp()).addOption(new Option("--vm-cli-package <path>", "install this packed CLI tarball in the VM instead of the published version").hideHelp()).addOption(new Option("--unit-name <name>", "the service unit's name").hideHelp()).action(async (opts) => {
|
|
4538
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4539
|
-
const { runRunnerInit, RunnerInitError } = await import('./init-
|
|
4540
|
-
const { detectMachine } = await import('./machine-
|
|
4541
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
4551
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-Z3USDBLU.js');
|
|
4552
|
+
const { runRunnerInit, RunnerInitError } = await import('./init-KDK5QLQZ.js');
|
|
4553
|
+
const { detectMachine } = await import('./machine-LV6WBRRK.js');
|
|
4554
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-R2FJ5KNS.js');
|
|
4542
4555
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4543
4556
|
try {
|
|
4544
4557
|
const machine = detectMachine();
|
|
@@ -4607,13 +4620,14 @@ ${C.yellow}${result.note}${C.reset}
|
|
|
4607
4620
|
To isolate builds in containers instead, run ${C.yellow}outerlayer runner init --vm${C.reset}.
|
|
4608
4621
|
`);
|
|
4609
4622
|
}
|
|
4610
|
-
const { runRunnerInstall, RunnerInstallError } = await import('./install-cmd-
|
|
4623
|
+
const { runRunnerInstall, RunnerInstallError, launcherSummary } = await import('./install-cmd-DCF7TVXD.js');
|
|
4611
4624
|
let installedLayout = false;
|
|
4612
4625
|
try {
|
|
4613
|
-
const installed = runRunnerInstall({ configPath, entryPath: process.argv[1] ?? "", nodePath: process.execPath });
|
|
4626
|
+
const installed = runRunnerInstall({ configPath, entryPath: process.argv[1] ?? "", nodePath: process.execPath, home: homeFromEnv(), PATH: process.env.PATH });
|
|
4614
4627
|
installedLayout = true;
|
|
4615
4628
|
process.stdout.write(`${C.green}\u2713${C.reset} installed ${installed.version} for the runner, so it can update itself
|
|
4616
4629
|
`);
|
|
4630
|
+
printLauncher(installed, launcherSummary);
|
|
4617
4631
|
} catch (installErr) {
|
|
4618
4632
|
if (!(installErr instanceof RunnerInstallError)) throw installErr;
|
|
4619
4633
|
process.stdout.write(`
|
|
@@ -4622,7 +4636,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
4622
4636
|
}
|
|
4623
4637
|
let serviceUp = false;
|
|
4624
4638
|
if (installedLayout) {
|
|
4625
|
-
const { installServiceCommand } = await import('./command-
|
|
4639
|
+
const { installServiceCommand } = await import('./command-SY3SVLAI.js');
|
|
4626
4640
|
const service = await installServiceCommand({
|
|
4627
4641
|
configPath,
|
|
4628
4642
|
entryPath: process.argv[1] ?? "",
|
|
@@ -4660,19 +4674,33 @@ Next:
|
|
|
4660
4674
|
"after",
|
|
4661
4675
|
"\nFetches the head of the default branch into the runner's cache, reads its\n.devcontainer/devcontainer.json, and 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"
|
|
4662
4676
|
).action(async (opts) => {
|
|
4663
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4664
|
-
const { buildRepositoryImage, RecipeError } = await import('./build-
|
|
4677
|
+
const { defaultRunnerConfigPath } = await import('./config-Z3USDBLU.js');
|
|
4678
|
+
const { buildRepositoryImage, RecipeError } = await import('./build-MS34XEGN.js');
|
|
4665
4679
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
4666
|
-
const { createDockerHost } = await import('./docker-
|
|
4680
|
+
const { createDockerHost } = await import('./docker-676FD3CQ.js');
|
|
4681
|
+
const { builderSpec } = await import('./builder-G52A6GW2.js');
|
|
4682
|
+
const { loadRunnerConfig } = await import('./config-Z3USDBLU.js');
|
|
4683
|
+
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4684
|
+
const memory = (() => {
|
|
4685
|
+
try {
|
|
4686
|
+
return loadRunnerConfig(configPath).build?.memory ?? "8g";
|
|
4687
|
+
} catch {
|
|
4688
|
+
return "8g";
|
|
4689
|
+
}
|
|
4690
|
+
})();
|
|
4667
4691
|
try {
|
|
4668
4692
|
const result = await buildRepositoryImage(
|
|
4669
4693
|
{
|
|
4670
4694
|
repository: opts.repository,
|
|
4671
4695
|
remote: opts.remote,
|
|
4672
|
-
configPath
|
|
4673
|
-
cli: currentCliBuild()
|
|
4696
|
+
configPath,
|
|
4697
|
+
cli: currentCliBuild(),
|
|
4698
|
+
log: (line) => {
|
|
4699
|
+
if (!opts.json) process.stdout.write(`${line}
|
|
4700
|
+
`);
|
|
4701
|
+
}
|
|
4674
4702
|
},
|
|
4675
|
-
{ host: createDockerHost() }
|
|
4703
|
+
{ host: createDockerHost({ builder: builderSpec(configPath, memory, process.env), replaceStaleBuilder: false }) }
|
|
4676
4704
|
);
|
|
4677
4705
|
if (opts.json) {
|
|
4678
4706
|
writeJson(result);
|
|
@@ -4712,16 +4740,16 @@ Next:
|
|
|
4712
4740
|
}
|
|
4713
4741
|
});
|
|
4714
4742
|
runnerCmd.command("stop").description("Take no more work; wait for running jobs to finish, then exit").option("--config <path>", "the cloud config file naming the runner to stop").option("--now", "end running jobs immediately, with outcome stopped").action(async (opts) => {
|
|
4715
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4716
|
-
const { requestStop } = await import('./loop-
|
|
4743
|
+
const { defaultRunnerConfigPath } = await import('./config-Z3USDBLU.js');
|
|
4744
|
+
const { requestStop } = await import('./loop-AG3PLXPO.js');
|
|
4717
4745
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4718
4746
|
await requestStop(configPath, Boolean(opts.now));
|
|
4719
4747
|
});
|
|
4720
4748
|
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) => {
|
|
4721
|
-
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-
|
|
4749
|
+
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-Z3USDBLU.js');
|
|
4722
4750
|
const { jobsDir, runnerDir } = await import('./paths-OYKMVYJP.js');
|
|
4723
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
4724
|
-
const { renderStatus } = await import('./status-
|
|
4751
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-AG3PLXPO.js');
|
|
4752
|
+
const { renderStatus } = await import('./status-HH4OSOHR.js');
|
|
4725
4753
|
const { readHousekeepingRecord } = await import('./record-C43U4PKS.js');
|
|
4726
4754
|
const path2 = await import('path');
|
|
4727
4755
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
@@ -4739,7 +4767,7 @@ Next:
|
|
|
4739
4767
|
const service = await (async () => {
|
|
4740
4768
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
|
|
4741
4769
|
const { inspectService, realInspectProbes } = await import('./inspect-XAUSB7L3.js');
|
|
4742
|
-
const { DEFAULT_UNIT_NAME } = await import('./install-
|
|
4770
|
+
const { DEFAULT_UNIT_NAME } = await import('./install-FHTVJZS6.js');
|
|
4743
4771
|
const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
|
|
4744
4772
|
return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
|
|
4745
4773
|
})();
|
|
@@ -4772,9 +4800,9 @@ Next:
|
|
|
4772
4800
|
);
|
|
4773
4801
|
});
|
|
4774
4802
|
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) => {
|
|
4775
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4776
|
-
const { listJobFiles } = await import('./loop-
|
|
4777
|
-
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-
|
|
4803
|
+
const { defaultRunnerConfigPath } = await import('./config-Z3USDBLU.js');
|
|
4804
|
+
const { listJobFiles } = await import('./loop-AG3PLXPO.js');
|
|
4805
|
+
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-H55NWW4H.js');
|
|
4778
4806
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4779
4807
|
const item = parseTrackerNumber(itemArg);
|
|
4780
4808
|
if (item === void 0) {
|
|
@@ -5030,7 +5058,7 @@ function registerMcpCommands(program2) {
|
|
|
5030
5058
|
function registerImportCommands(program2) {
|
|
5031
5059
|
const importCmd = program2.command("import").description("Import an existing config format into .outerlayer/");
|
|
5032
5060
|
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) => {
|
|
5033
|
-
const { runImportRuler, ImportRulerError } = await import('./import-ruler-cmd-
|
|
5061
|
+
const { runImportRuler, ImportRulerError } = await import('./import-ruler-cmd-SG3UVGI7.js');
|
|
5034
5062
|
try {
|
|
5035
5063
|
const result = runImportRuler({ cwd: opts.dir, json: opts.json });
|
|
5036
5064
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
@@ -5046,7 +5074,7 @@ function registerImportCommands(program2) {
|
|
|
5046
5074
|
"after",
|
|
5047
5075
|
"\nInstalls the four maintained skills (emitting-evidence, amend,\nreporting-findings, outerlayer) 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"
|
|
5048
5076
|
).action(async (opts) => {
|
|
5049
|
-
const { runImportCapture, ImportCaptureError } = await import('./import-capture-cmd-
|
|
5077
|
+
const { runImportCapture, ImportCaptureError } = await import('./import-capture-cmd-T4556ELW.js');
|
|
5050
5078
|
try {
|
|
5051
5079
|
runImportCapture({ cwd: opts.dir, json: opts.json });
|
|
5052
5080
|
} catch (err) {
|
|
@@ -5089,7 +5117,7 @@ function registerContextCommands(program2) {
|
|
|
5089
5117
|
await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
|
|
5090
5118
|
});
|
|
5091
5119
|
contextCmd.command("adopt <stagedDir>", { hidden: true }).description("Copy context the runner staged into this checkout (container builds)").option("--json", "machine-readable JSON output").action(async (stagedDir) => {
|
|
5092
|
-
const { runContextAdopt } = await import('./context-adopt-
|
|
5120
|
+
const { runContextAdopt } = await import('./context-adopt-CE4KDXS3.js');
|
|
5093
5121
|
const { exitCode, stdout } = runContextAdopt(stagedDir, process.cwd());
|
|
5094
5122
|
process.stdout.write(stdout);
|
|
5095
5123
|
process.exitCode = exitCode;
|
|
@@ -5098,7 +5126,7 @@ function registerContextCommands(program2) {
|
|
|
5098
5126
|
"after",
|
|
5099
5127
|
"\nThe same flow SessionStart runs automatically, exposed for a manual retry or a\nfirst check outside a session. Writes AGENTS.md, .claude/**, and .outerlayer/**.\n"
|
|
5100
5128
|
).action(async (opts) => {
|
|
5101
|
-
const { materializeContext } = await import('./context-materialize-
|
|
5129
|
+
const { materializeContext } = await import('./context-materialize-QL33HDJN.js');
|
|
5102
5130
|
const result = await materializeContext({ cwd: process.cwd(), sessionId: `manual-${Date.now()}` });
|
|
5103
5131
|
const output = formatContextMaterializeOutput(result);
|
|
5104
5132
|
if (output.exitCode !== void 0) process.exitCode = output.exitCode;
|