@outerlayer/cli 0.34.0-next.20261025133402 → 0.34.0-next.20261025180645
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/dist/{agent-setup-UXUWLV7O.js → agent-setup-FNDKCPUP.js} +8 -9
- package/dist/{bridge-OWCSVCXL.js → bridge-YJBB4YA3.js} +2 -3
- package/dist/build-B4OKU4MV.js +16 -0
- package/dist/{build-disk-5ZQHYBO3.js → build-disk-ZL46AEN3.js} +6 -8
- package/dist/build-info.json +1 -1
- package/dist/{builder-54GLXGFV.js → builder-XFPWE74N.js} +5 -7
- package/dist/{check-4TQZZOIQ.js → check-QULEN437.js} +43 -43
- package/dist/{chunk-CXQCBAKO.js → chunk-25GRRBTH.js} +1 -1
- package/dist/{chunk-4XYC2663.js → chunk-2D6CKNR7.js} +8 -4
- package/dist/{chunk-IHY457PB.js → chunk-2ILU7UAU.js} +1 -1
- package/dist/{chunk-JEOPIRUR.js → chunk-3EJBI5JW.js} +3 -3
- package/dist/{chunk-TVGLNHEB.js → chunk-3N77LUQI.js} +1 -1
- package/dist/{chunk-ES4ULBAL.js → chunk-4UPET3R7.js} +7 -3
- package/dist/{chunk-MPDLZCXM.js → chunk-5AFPP3GZ.js} +238 -14
- package/dist/{chunk-HAEDLXHA.js → chunk-63IVRRIO.js} +3 -3
- package/dist/{chunk-BTG5NZHN.js → chunk-6OLVVAOK.js} +4 -4
- package/dist/{chunk-3M6UYJSR.js → chunk-AVPLEFQR.js} +3 -3
- package/dist/{chunk-TVOZOOIW.js → chunk-BHSSGVOY.js} +3 -3
- package/dist/{chunk-QOUR4CQ7.js → chunk-CAQCDYKF.js} +2 -2
- package/dist/{chunk-SMMNU65K.js → chunk-DNZYXEMY.js} +13 -12
- package/dist/{chunk-LMICI7AY.js → chunk-EGVHFHY4.js} +3 -3
- package/dist/{chunk-RNVBSRZZ.js → chunk-FD5ASWTG.js} +18 -19
- package/dist/{chunk-NW5PDZYA.js → chunk-FDJPDZSR.js} +1 -1
- package/dist/{chunk-XA6PGME5.js → chunk-FVCHHSHB.js} +3 -3
- package/dist/{chunk-YOBQIXX6.js → chunk-G4W4B33M.js} +182 -3
- package/dist/{chunk-CCISO7EQ.js → chunk-HHFZXOBC.js} +12 -14
- package/dist/{chunk-AABYHGVO.js → chunk-INOUUSYI.js} +29 -9
- package/dist/{chunk-KDLQGTN6.js → chunk-JBCOUY4M.js} +2 -2
- package/dist/{chunk-POGPX7LI.js → chunk-JQSZTQSK.js} +24 -30
- package/dist/{chunk-JZD2NTRH.js → chunk-K2UAQWYO.js} +3 -3
- package/dist/{chunk-UC2DKBMS.js → chunk-KM2HLQE3.js} +2 -2
- package/dist/{chunk-T7N3BAOO.js → chunk-LUHIN4UZ.js} +3 -3
- package/dist/{chunk-XLJLR7EK.js → chunk-MOI2KDLH.js} +1 -1
- package/dist/{chunk-BUF6DSSM.js → chunk-NW26E4YU.js} +3 -3
- package/dist/{chunk-ZV2JJPDS.js → chunk-O4Z2MNNL.js} +6 -6
- package/dist/{chunk-2RBIW2PD.js → chunk-OGPEHSNW.js} +1 -1
- package/dist/{chunk-EZ7L5IZU.js → chunk-OQLF3MQQ.js} +3 -4
- package/dist/{chunk-J246WRLZ.js → chunk-OS7DJOQJ.js} +1 -1
- package/dist/{chunk-O5G6VQGZ.js → chunk-PFHTT4PP.js} +5 -5
- package/dist/{chunk-N7LAEN3T.js → chunk-PXGU3GKY.js} +1 -1
- package/dist/{chunk-WIK5KUGK.js → chunk-QANM5COC.js} +6 -6
- package/dist/{chunk-PSXVAOEB.js → chunk-QQP3S5FU.js} +3 -3
- package/dist/{chunk-AVLLJW5D.js → chunk-RFVIQLNB.js} +5 -5
- package/dist/{chunk-Z76GVJGQ.js → chunk-RHV5SRI2.js} +3 -3
- package/dist/{chunk-75KZUBHD.js → chunk-SI6WDF3U.js} +1 -1
- package/dist/chunk-SUOZYOWO.js +51 -0
- package/dist/{chunk-36T6W5RA.js → chunk-SYVRBBLW.js} +1 -1
- package/dist/{chunk-E34FRRSW.js → chunk-TBKV4L2W.js} +4 -4
- package/dist/{chunk-56ZHWIR2.js → chunk-TFPNPS4Q.js} +1 -1
- package/dist/{chunk-DUPM5LVJ.js → chunk-UMYYYF7B.js} +1 -1
- package/dist/{chunk-IW6Z337K.js → chunk-UN3SQTVL.js} +7 -7
- package/dist/{chunk-3NFZN7H6.js → chunk-UO4FQAOX.js} +16 -12
- package/dist/{chunk-ZWLEUSJW.js → chunk-VJ34F55N.js} +55 -39
- package/dist/{chunk-3RAAYBSG.js → chunk-YHKU2NOZ.js} +1 -1
- package/dist/{chunk-ENFBYN4A.js → chunk-YNMVVQOQ.js} +1 -1
- package/dist/{claude-launcher-JEB5BN7Q.js → claude-launcher-OQZNW7XJ.js} +1 -1
- package/dist/{cli-DY3EGPUB.js → cli-G3P2B2XE.js} +123 -117
- package/dist/{command-ZAXYAZCI.js → command-4XOXVWFW.js} +169 -48
- package/dist/{config-UN3X6AP2.js → config-QASNKYM6.js} +7 -9
- package/dist/{connect-cmd-TWM4FEKD.js → connect-cmd-MEDWMW3L.js} +8 -9
- package/dist/{container-start-JUNBJ7MU.js → container-start-2DHCWV73.js} +34 -36
- package/dist/{context-show-cmd-K5LRMDEO.js → context-show-cmd-VSFCG663.js} +9 -10
- package/dist/{control-plane-launch-LHOV2FPA.js → control-plane-launch-XBGHM7DB.js} +5 -6
- package/dist/{docker-YZKRM7IP.js → docker-TAC6G4VU.js} +5 -7
- package/dist/{doctor-YOAF7QPL.js → doctor-LK6E3XOW.js} +66 -41
- package/dist/{emit-artifact-cmd-SCF2FKKS.js → emit-artifact-cmd-L4REOPWX.js} +13 -14
- package/dist/{emit-cmd-7NMNKDK7.js → emit-cmd-7TU3JBJ2.js} +2 -2
- package/dist/{emit-criteria-cmd-B6CKUWTW.js → emit-criteria-cmd-QVFOQARC.js} +10 -11
- package/dist/{emit-demo-cmd-BNWRETMJ.js → emit-demo-cmd-L4B6OOTV.js} +15 -16
- package/dist/{emit-finding-cmd-TPSHNZNE.js → emit-finding-cmd-YXFCIWMU.js} +10 -11
- package/dist/{emit-result-cmd-J5DXIC2Q.js → emit-result-cmd-NI4LCTUM.js} +12 -13
- package/dist/{emit-step-cmd-NPH46KAO.js → emit-step-cmd-HWAUCZZB.js} +10 -11
- package/dist/{exec-client-ANW4KGMN.js → exec-client-QB4OZRGM.js} +3 -4
- package/dist/find-unit-4UR647S4.js +18 -0
- package/dist/{findings-cmd-4FJDCFL3.js → findings-cmd-O2IBO25E.js} +10 -11
- package/dist/{fleet-readiness-OK6534T6.js → fleet-readiness-NJYTQYTA.js} +5 -6
- package/dist/{governing-source-GNKTNM32.js → governing-source-JCI7VDQ6.js} +12 -13
- package/dist/{guest-init-C6M7YT3U.js → guest-init-IF5LXGUL.js} +4 -5
- package/dist/{hook-fast-LVTJWAG3.js → hook-fast-GPUL7T77.js} +1 -1
- package/dist/host-key-5RU322O3.js +9 -0
- package/dist/{image-tag-53DJPMSZ.js → image-tag-SEMBVB5D.js} +3 -4
- package/dist/index.js +4 -4
- package/dist/{init-RAJKTSPJ.js → init-2CEULE3F.js} +25 -27
- package/dist/{init-JGYMAOD5.js → init-FAIF7KOK.js} +25 -27
- package/dist/{init-cmd-IB3KTYCV.js → init-cmd-HZUUMO45.js} +13 -14
- package/dist/{init-update-VPWSWDY7.js → init-update-TTMFFNMB.js} +12 -13
- package/dist/{install-cmd-NP7GULCD.js → install-cmd-TWGRGEVL.js} +5 -6
- package/dist/{logs-V6AES5FE.js → logs-6CMB3DO6.js} +2 -3
- package/dist/{loop-ZGDZMVFN.js → loop-7U7MVICV.js} +40 -42
- package/dist/{machine-LJ3VMGS3.js → machine-S3JHOX4V.js} +25 -27
- package/dist/{mcp-serve-cmd-DHGCAMJS.js → mcp-serve-cmd-MWGIN6YL.js} +4 -5
- package/dist/{paths-DMKAJVA5.js → paths-T2DEBI62.js} +2 -3
- package/dist/pending-ERXWVLLG.js +9 -0
- package/dist/{pidfile-XCTXBGA3.js → pidfile-EAD2OEM7.js} +3 -4
- package/dist/{record-RQLGRYWG.js → record-IMXQNHPB.js} +3 -4
- package/dist/{runner-env-AUG2OIP4.js → runner-env-BJPUHAKZ.js} +9 -11
- package/dist/{runner-identity-BQA4SBU6.js → runner-identity-ZCPPC2BJ.js} +5 -7
- package/dist/{runner-key-ZIF7M7YN.js → runner-key-CYSUYKSX.js} +25 -27
- package/dist/{session-sender-VQ4LHJ5K.js → session-sender-5T7BXPKC.js} +13 -14
- package/dist/{spec-cmd-PXM4FJ2O.js → spec-cmd-4ABYAFNZ.js} +11 -12
- package/dist/{status-27EFD2WE.js → status-2AP7J2L7.js} +32 -34
- package/dist/{sync-cmd-VAV7TR2A.js → sync-cmd-34CGNA6T.js} +12 -13
- package/dist/{update-steps-7YLAFW3E.js → update-steps-JQOCCDWO.js} +33 -35
- package/dist/{watch-42XJSTTB.js → watch-6HU7LCUY.js} +12 -13
- package/dist/{work-claim-cmd-HSG4OHFI.js → work-claim-cmd-5QKLHSCR.js} +16 -18
- package/dist/{work-cmd-KCBU3RSD.js → work-cmd-3MKUIE2C.js} +10 -11
- package/dist/{work-comment-cmd-QIP2OUJC.js → work-comment-cmd-ESC3DSHI.js} +11 -12
- package/dist/{work-demo-cmd-6IKAG6ES.js → work-demo-cmd-7S23DGYO.js} +10 -11
- package/dist/{work-logs-cmd-RMKJA4AI.js → work-logs-cmd-46UPNN7Q.js} +10 -11
- package/dist/{work-open-pr-cmd-IAVLUUWW.js → work-open-pr-cmd-JNGTGLIP.js} +11 -12
- package/dist/{work-pr-cmd-3U7SVQII.js → work-pr-cmd-2J2LKETD.js} +10 -11
- package/dist/{work-proofs-cmd-6ZY6ZNNE.js → work-proofs-cmd-HRWTHYSS.js} +11 -12
- package/dist/{work-proofs-record-54GBEUJP.js → work-proofs-record-6OKAT3IC.js} +18 -19
- package/dist/{work-stop-cmd-LH5XY4YL.js → work-stop-cmd-Y22XIVQ6.js} +10 -11
- package/package.json +1 -1
- package/dist/build-4HFDZTUX.js +0 -14
- package/dist/chunk-3Z3MPR55.js +0 -226
- package/dist/chunk-HACGUL52.js +0 -183
- package/dist/host-key-DUGGHAGR.js +0 -10
- package/dist/inspect-DNLXTXLA.js +0 -6
- package/dist/install-QJWJFIWB.js +0 -19
- package/dist/pending-B55JZFOV.js +0 -10
- package/dist/{chunk-2AIOOU3A.js → chunk-KPHRRCUY.js} +1 -1
|
@@ -1,27 +1,24 @@
|
|
|
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-HHFZXOBC.js';
|
|
4
4
|
import './chunk-AP2K4LPI.js';
|
|
5
|
-
import './chunk-3RAAYBSG.js';
|
|
6
5
|
import './chunk-KT4CN6OU.js';
|
|
7
6
|
import './chunk-4P6QGMPN.js';
|
|
8
|
-
import { verifiedTrackerNames, TRACKERS } from './chunk-
|
|
7
|
+
import { verifiedTrackerNames, TRACKERS } from './chunk-UN3SQTVL.js';
|
|
9
8
|
import './chunk-IP7BIBXJ.js';
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-MECW77XP.js';
|
|
13
|
-
import './chunk-AJYZNISW.js';
|
|
14
|
-
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-NKOM4JKY.js';
|
|
9
|
+
import './chunk-AVPLEFQR.js';
|
|
10
|
+
import './chunk-FVCHHSHB.js';
|
|
15
11
|
import './chunk-Y5YCX6AL.js';
|
|
16
12
|
import './chunk-G2JWZDFA.js';
|
|
17
13
|
import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
|
|
14
|
+
import './chunk-YHKU2NOZ.js';
|
|
15
|
+
import './chunk-MECW77XP.js';
|
|
16
|
+
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-NKOM4JKY.js';
|
|
18
17
|
import './chunk-JWNH4ZTF.js';
|
|
19
|
-
import './chunk-
|
|
18
|
+
import './chunk-3N77LUQI.js';
|
|
20
19
|
import './chunk-PJDQPF5N.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-YOBQIXX6.js';
|
|
24
|
-
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-CXQCBAKO.js';
|
|
20
|
+
import './chunk-MOI2KDLH.js';
|
|
21
|
+
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-25GRRBTH.js';
|
|
25
22
|
import './chunk-ZJSNLVCE.js';
|
|
26
23
|
import './chunk-I7RZHMXW.js';
|
|
27
24
|
import './chunk-BKO6JEZI.js';
|
|
@@ -29,6 +26,7 @@ import './chunk-HCVLP7XA.js';
|
|
|
29
26
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
30
27
|
import './chunk-RCRE42V6.js';
|
|
31
28
|
import './chunk-ZQSANKS4.js';
|
|
29
|
+
import './chunk-AJYZNISW.js';
|
|
32
30
|
import './chunk-5BHIBJDA.js';
|
|
33
31
|
import './chunk-CDDED64E.js';
|
|
34
32
|
import { resolveVersion, resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
@@ -41,7 +39,8 @@ import { removeJournalHooks, removePreCommitGuardHook } from './chunk-TUSYOL2O.j
|
|
|
41
39
|
import './chunk-FGXT5OXS.js';
|
|
42
40
|
import './chunk-EOTMDIYC.js';
|
|
43
41
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
44
|
-
import './chunk-
|
|
42
|
+
import './chunk-PXGU3GKY.js';
|
|
43
|
+
import './chunk-G4W4B33M.js';
|
|
45
44
|
import './chunk-MESOOLF4.js';
|
|
46
45
|
import './chunk-Z5GEFMRW.js';
|
|
47
46
|
import { EventEmitter } from 'events';
|
|
@@ -3800,7 +3799,7 @@ async function installMachineSkillsForSetup() {
|
|
|
3800
3799
|
` : "";
|
|
3801
3800
|
}
|
|
3802
3801
|
async function realConnectDepsForCwd() {
|
|
3803
|
-
const { realConnectDeps } = await import('./connect-cmd-
|
|
3802
|
+
const { realConnectDeps } = await import('./connect-cmd-MEDWMW3L.js');
|
|
3804
3803
|
const { resolveRepoIdentity } = await import('./dist-QGN5R4Y2.js');
|
|
3805
3804
|
return {
|
|
3806
3805
|
...realConnectDeps(),
|
|
@@ -3875,8 +3874,8 @@ build, ../outerlayer-build/SKILL.md becomes ~/.agents/skills/outerlayer-build/SK
|
|
|
3875
3874
|
what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
|
|
3876
3875
|
).action(async (opts) => {
|
|
3877
3876
|
if (opts.update || opts.dryRun) {
|
|
3878
|
-
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-
|
|
3879
|
-
const { fleetReadiness } = await import('./fleet-readiness-
|
|
3877
|
+
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-TTMFFNMB.js');
|
|
3878
|
+
const { fleetReadiness } = await import('./fleet-readiness-NJYTQYTA.js');
|
|
3880
3879
|
const problem = updateFlagProblem(opts);
|
|
3881
3880
|
if (problem !== void 0) {
|
|
3882
3881
|
fail(problem);
|
|
@@ -3927,13 +3926,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3927
3926
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3928
3927
|
`);
|
|
3929
3928
|
}
|
|
3930
|
-
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-
|
|
3929
|
+
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-HZUUMO45.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3931
3930
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3932
3931
|
else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
|
|
3933
3932
|
return;
|
|
3934
3933
|
}
|
|
3935
3934
|
await installMachineSkillsForSetup();
|
|
3936
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3935
|
+
const { runInitCommand } = await import('./init-cmd-HZUUMO45.js');
|
|
3937
3936
|
const code = await runInitCommand(
|
|
3938
3937
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3939
3938
|
{
|
|
@@ -3945,7 +3944,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3945
3944
|
return { ok, text, detail };
|
|
3946
3945
|
},
|
|
3947
3946
|
runAgentSetup: async () => {
|
|
3948
|
-
const { runAgentSetup } = await import('./agent-setup-
|
|
3947
|
+
const { runAgentSetup } = await import('./agent-setup-FNDKCPUP.js');
|
|
3949
3948
|
return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
|
|
3950
3949
|
},
|
|
3951
3950
|
runDoctorChecks: gatherDoctorChecks,
|
|
@@ -3954,7 +3953,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3954
3953
|
shellPath: process.env.SHELL,
|
|
3955
3954
|
interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
|
|
3956
3955
|
ask: async () => {
|
|
3957
|
-
const { promptOnTerminal } = await import('./connect-cmd-
|
|
3956
|
+
const { promptOnTerminal } = await import('./connect-cmd-MEDWMW3L.js');
|
|
3958
3957
|
const answer = await promptOnTerminal({
|
|
3959
3958
|
message: `Should plain claude start Claude Code through ${cliInvocation()} claude? That is how a session in a governed repository gets its control plane. It adds one block to your zsh or bash startup file.`,
|
|
3960
3959
|
options: [
|
|
@@ -3993,7 +3992,7 @@ linked (true, false, or null when it could not be checked) and, when false,
|
|
|
3993
3992
|
linkUrl.
|
|
3994
3993
|
`
|
|
3995
3994
|
).action(async (opts) => {
|
|
3996
|
-
const { runConnectCommand } = await import('./connect-cmd-
|
|
3995
|
+
const { runConnectCommand } = await import('./connect-cmd-MEDWMW3L.js');
|
|
3997
3996
|
const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
|
|
3998
3997
|
stdout: process.stdout,
|
|
3999
3998
|
stderr: process.stderr
|
|
@@ -4071,7 +4070,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4071
4070
|
else fail(found.reason);
|
|
4072
4071
|
return;
|
|
4073
4072
|
}
|
|
4074
|
-
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-
|
|
4073
|
+
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-34CGNA6T.js');
|
|
4075
4074
|
try {
|
|
4076
4075
|
const result = await runSync({
|
|
4077
4076
|
url: opts.url,
|
|
@@ -4102,7 +4101,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4102
4101
|
if (invokedCommandToken(argv) === "watch") {
|
|
4103
4102
|
warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
|
|
4104
4103
|
}
|
|
4105
|
-
const { runWatch } = await import('./watch-
|
|
4104
|
+
const { runWatch } = await import('./watch-6HU7LCUY.js');
|
|
4106
4105
|
await runWatch({ once: opts.once });
|
|
4107
4106
|
});
|
|
4108
4107
|
program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
|
|
@@ -4163,7 +4162,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4163
4162
|
}
|
|
4164
4163
|
});
|
|
4165
4164
|
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) => {
|
|
4166
|
-
const { runVmExec } = await import('./exec-client-
|
|
4165
|
+
const { runVmExec } = await import('./exec-client-QB4OZRGM.js');
|
|
4167
4166
|
const env = {};
|
|
4168
4167
|
for (const entry of opts.env) {
|
|
4169
4168
|
const eq = entry.indexOf("=");
|
|
@@ -4192,7 +4191,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4192
4191
|
process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
|
|
4193
4192
|
});
|
|
4194
4193
|
program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
|
|
4195
|
-
const { runSessionSender } = await import('./session-sender-
|
|
4194
|
+
const { runSessionSender } = await import('./session-sender-5T7BXPKC.js');
|
|
4196
4195
|
try {
|
|
4197
4196
|
await runSessionSender();
|
|
4198
4197
|
} catch (err) {
|
|
@@ -4200,7 +4199,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4200
4199
|
}
|
|
4201
4200
|
});
|
|
4202
4201
|
program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
|
|
4203
|
-
const { realGuestHost, runGuestInit } = await import('./guest-init-
|
|
4202
|
+
const { realGuestHost, runGuestInit } = await import('./guest-init-IF5LXGUL.js');
|
|
4204
4203
|
const { readFileSync: readFileSync3 } = await import('fs');
|
|
4205
4204
|
try {
|
|
4206
4205
|
runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
|
|
@@ -4209,7 +4208,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4209
4208
|
}
|
|
4210
4209
|
});
|
|
4211
4210
|
program2.command("vm-forward", { hidden: true }).description("pipe a guest port to another; vm-init runs it").requiredOption("--listen <host:port>", "the address to listen on").requiredOption("--to <host:port>", "the address to pipe each connection to").action(async (opts) => {
|
|
4212
|
-
const { startBridgeForward } = await import('./bridge-
|
|
4211
|
+
const { startBridgeForward } = await import('./bridge-YJBB4YA3.js');
|
|
4213
4212
|
try {
|
|
4214
4213
|
await startBridgeForward(opts);
|
|
4215
4214
|
} catch (err) {
|
|
@@ -4235,7 +4234,7 @@ async function runCli(processArgv) {
|
|
|
4235
4234
|
await buildProgram(argv).parseAsync(argv);
|
|
4236
4235
|
}
|
|
4237
4236
|
async function compileContext(opts) {
|
|
4238
|
-
const { runEmit, EmitError } = await import('./emit-cmd-
|
|
4237
|
+
const { runEmit, EmitError } = await import('./emit-cmd-7TU3JBJ2.js');
|
|
4239
4238
|
try {
|
|
4240
4239
|
const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
|
|
4241
4240
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
@@ -4288,7 +4287,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
|
|
|
4288
4287
|
await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
|
|
4289
4288
|
return;
|
|
4290
4289
|
}
|
|
4291
|
-
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-
|
|
4290
|
+
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-NI4LCTUM.js');
|
|
4292
4291
|
try {
|
|
4293
4292
|
const result = await runEmitResult({
|
|
4294
4293
|
name,
|
|
@@ -4339,7 +4338,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
|
|
|
4339
4338
|
locally so it never uploads. One correction can retire several duplicates.
|
|
4340
4339
|
`
|
|
4341
4340
|
).action(async (file, opts) => {
|
|
4342
|
-
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-
|
|
4341
|
+
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-L4REOPWX.js');
|
|
4343
4342
|
let pr;
|
|
4344
4343
|
if (opts.pr !== void 0) {
|
|
4345
4344
|
pr = parseTrackerNumber(opts.pr);
|
|
@@ -4395,7 +4394,7 @@ its criterion, and the new record retires the old record. The id must be the ite
|
|
|
4395
4394
|
as \`work demo --item <n> --json\` prints it.
|
|
4396
4395
|
`
|
|
4397
4396
|
).action(async (manifest, opts) => {
|
|
4398
|
-
const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-
|
|
4397
|
+
const { runEmitDemo, EmitDemoError } = await import('./emit-demo-cmd-L4B6OOTV.js');
|
|
4399
4398
|
let item;
|
|
4400
4399
|
if (opts.item !== void 0) {
|
|
4401
4400
|
item = parseTrackerNumber(opts.item);
|
|
@@ -4465,7 +4464,7 @@ recent events with their ids. --find <text> searches all of them.
|
|
|
4465
4464
|
item that session was launched for is used automatically.
|
|
4466
4465
|
`
|
|
4467
4466
|
).action(async (opts) => {
|
|
4468
|
-
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4467
|
+
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-YXFCIWMU.js');
|
|
4469
4468
|
try {
|
|
4470
4469
|
refuseRemovedFindingFlags(opts);
|
|
4471
4470
|
const result = await runEmitFinding({
|
|
@@ -4532,7 +4531,7 @@ the whole batch. "untimed": true records one with no time on purpose.
|
|
|
4532
4531
|
that session was launched for is used automatically.
|
|
4533
4532
|
`
|
|
4534
4533
|
).action(async (file, opts) => {
|
|
4535
|
-
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4534
|
+
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-YXFCIWMU.js');
|
|
4536
4535
|
try {
|
|
4537
4536
|
const result = await runEmitFindings({
|
|
4538
4537
|
file,
|
|
@@ -4567,7 +4566,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
|
|
|
4567
4566
|
the step, the command prints why and exits 1.
|
|
4568
4567
|
`
|
|
4569
4568
|
).action(async (name, opts) => {
|
|
4570
|
-
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-
|
|
4569
|
+
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-HWAUCZZB.js');
|
|
4571
4570
|
try {
|
|
4572
4571
|
await runEmitStep({
|
|
4573
4572
|
name,
|
|
@@ -4610,7 +4609,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
|
|
|
4610
4609
|
${cliInvocation()} emit criteria acceptance/412-login.md --item 412
|
|
4611
4610
|
`
|
|
4612
4611
|
).action(async (file, opts) => {
|
|
4613
|
-
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-
|
|
4612
|
+
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-QVFOQARC.js');
|
|
4614
4613
|
try {
|
|
4615
4614
|
const result = await runEmitCriteria({
|
|
4616
4615
|
file,
|
|
@@ -4634,9 +4633,9 @@ function registerSpecCommands(program2) {
|
|
|
4634
4633
|
const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
|
|
4635
4634
|
const credentialOptions = (command) => command.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)");
|
|
4636
4635
|
const run = async (action) => {
|
|
4637
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4636
|
+
const { WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4638
4637
|
try {
|
|
4639
|
-
await action(await import('./spec-cmd-
|
|
4638
|
+
await action(await import('./spec-cmd-4ABYAFNZ.js'));
|
|
4640
4639
|
} catch (err) {
|
|
4641
4640
|
if (err instanceof WorkCommandError) {
|
|
4642
4641
|
fail(err.message);
|
|
@@ -4671,7 +4670,7 @@ Prints each problem the item covers with its id, its reports and its result.
|
|
|
4671
4670
|
session was launched for is used.
|
|
4672
4671
|
`
|
|
4673
4672
|
).action(async (opts) => {
|
|
4674
|
-
const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-
|
|
4673
|
+
const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-O2IBO25E.js');
|
|
4675
4674
|
try {
|
|
4676
4675
|
const result = await runFindingsShow({
|
|
4677
4676
|
item: opts.item,
|
|
@@ -4699,7 +4698,7 @@ Give exactly one of --fixed and --not-fixed, and a --note. Run it again for the
|
|
|
4699
4698
|
problem to replace the earlier result. A problem the item does not cover is refused.
|
|
4700
4699
|
`
|
|
4701
4700
|
).action(async (problem, opts) => {
|
|
4702
|
-
const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-
|
|
4701
|
+
const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-O2IBO25E.js');
|
|
4703
4702
|
try {
|
|
4704
4703
|
const result = await runFindingsResult({
|
|
4705
4704
|
problem,
|
|
@@ -4740,7 +4739,7 @@ takes it, and prints the line that starts your session on it. That
|
|
|
4740
4739
|
session links itself and holds the item's lease while it works.
|
|
4741
4740
|
`
|
|
4742
4741
|
).action(async (opts) => {
|
|
4743
|
-
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-
|
|
4742
|
+
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4744
4743
|
try {
|
|
4745
4744
|
await runWorkBuild(opts);
|
|
4746
4745
|
} catch (err) {
|
|
@@ -4763,7 +4762,7 @@ renews that session's own 20-minute lease, unless --no-lease or
|
|
|
4763
4762
|
--ended is given, or another worker already holds a live one.
|
|
4764
4763
|
`
|
|
4765
4764
|
).action(async (number, opts) => {
|
|
4766
|
-
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-
|
|
4765
|
+
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4767
4766
|
try {
|
|
4768
4767
|
await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
|
|
4769
4768
|
} catch (err) {
|
|
@@ -4787,8 +4786,8 @@ criterion's new proof; --ready hands the thread back to a person. At
|
|
|
4787
4786
|
most one action flag may be given.
|
|
4788
4787
|
`
|
|
4789
4788
|
).action(async (opts) => {
|
|
4790
|
-
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4791
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4789
|
+
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-ESC3DSHI.js');
|
|
4790
|
+
const { WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4792
4791
|
try {
|
|
4793
4792
|
await runWorkComment(opts);
|
|
4794
4793
|
} catch (err) {
|
|
@@ -4809,8 +4808,8 @@ criterion that carries proof or a comment, each with who is waiting
|
|
|
4809
4808
|
on whom next.
|
|
4810
4809
|
`
|
|
4811
4810
|
).action(async (opts) => {
|
|
4812
|
-
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4813
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4811
|
+
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-ESC3DSHI.js');
|
|
4812
|
+
const { WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4814
4813
|
try {
|
|
4815
4814
|
await runWorkThreads(opts);
|
|
4816
4815
|
} catch (err) {
|
|
@@ -4834,8 +4833,8 @@ still running, or that an older runner released, has no log and the
|
|
|
4834
4833
|
command exits 1.
|
|
4835
4834
|
`
|
|
4836
4835
|
).action(async (opts) => {
|
|
4837
|
-
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-
|
|
4838
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4836
|
+
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-46UPNN7Q.js');
|
|
4837
|
+
const { WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4839
4838
|
try {
|
|
4840
4839
|
await runWorkLogs(opts);
|
|
4841
4840
|
} catch (err) {
|
|
@@ -4858,8 +4857,8 @@ item is not built again until a new build request. Exits 1 when no host
|
|
|
4858
4857
|
build is running for the item.
|
|
4859
4858
|
`
|
|
4860
4859
|
).action(async (opts) => {
|
|
4861
|
-
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-
|
|
4862
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4860
|
+
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-Y22XIVQ6.js');
|
|
4861
|
+
const { WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4863
4862
|
try {
|
|
4864
4863
|
await runWorkStop(opts);
|
|
4865
4864
|
} catch (err) {
|
|
@@ -4880,8 +4879,8 @@ Prints the item's newest live demo record: its artifact id, the commit it was re
|
|
|
4880
4879
|
test file that recorded it. With --json, prints { "demo": null } for an item with no demo.
|
|
4881
4880
|
`
|
|
4882
4881
|
).action(async (opts) => {
|
|
4883
|
-
const { runWorkDemo, WorkDemoCommandError } = await import('./work-demo-cmd-
|
|
4884
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4882
|
+
const { runWorkDemo, WorkDemoCommandError } = await import('./work-demo-cmd-7S23DGYO.js');
|
|
4883
|
+
const { WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4885
4884
|
try {
|
|
4886
4885
|
await runWorkDemo(opts);
|
|
4887
4886
|
} catch (err) {
|
|
@@ -4902,7 +4901,7 @@ deletes anything \u2014 the item is removed from Work only once no
|
|
|
4902
4901
|
live addition remains on it.
|
|
4903
4902
|
`
|
|
4904
4903
|
).action(async (opts) => {
|
|
4905
|
-
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-
|
|
4904
|
+
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4906
4905
|
try {
|
|
4907
4906
|
await runWorkRemove(opts);
|
|
4908
4907
|
} catch (err) {
|
|
@@ -4914,7 +4913,7 @@ live addition remains on it.
|
|
|
4914
4913
|
}
|
|
4915
4914
|
});
|
|
4916
4915
|
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, or a Linear/Jira key like ENG-123").option(TRACKER_OPTION_FLAG, "tracker for a keyed --issue, when both hold the key").option("--repo <owner/name>", "repository for an issue number (default: the 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) => {
|
|
4917
|
-
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-
|
|
4916
|
+
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4918
4917
|
try {
|
|
4919
4918
|
await runWorkStatus(opts);
|
|
4920
4919
|
} catch (err) {
|
|
@@ -4958,11 +4957,11 @@ differs from HEAD.
|
|
|
4958
4957
|
fail(trackerNumberError("--pr", opts.pr));
|
|
4959
4958
|
return;
|
|
4960
4959
|
}
|
|
4961
|
-
const { runWorkProofsCommand } = await import('./work-proofs-cmd-
|
|
4960
|
+
const { runWorkProofsCommand } = await import('./work-proofs-cmd-HRWTHYSS.js');
|
|
4962
4961
|
await runWorkProofsCommand({ ...opts, ...pr === void 0 ? {} : { pr } });
|
|
4963
4962
|
});
|
|
4964
4963
|
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 a host can start: a build request, no open PR, 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) => {
|
|
4965
|
-
const { runWorkList, WorkCommandError } = await import('./work-cmd-
|
|
4964
|
+
const { runWorkList, WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
4966
4965
|
try {
|
|
4967
4966
|
await runWorkList(opts);
|
|
4968
4967
|
} catch (err) {
|
|
@@ -4983,7 +4982,7 @@ by a different key is refused; claiming again with the same key extends
|
|
|
4983
4982
|
it. --host is a label only.
|
|
4984
4983
|
`
|
|
4985
4984
|
).action(async (opts) => {
|
|
4986
|
-
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-
|
|
4985
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-5QKLHSCR.js');
|
|
4987
4986
|
try {
|
|
4988
4987
|
await runWorkClaim(opts);
|
|
4989
4988
|
} catch (err) {
|
|
@@ -5003,7 +5002,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
|
|
|
5003
5002
|
lease has expired, or a 403 if a different key holds it.
|
|
5004
5003
|
`
|
|
5005
5004
|
).action(async (opts) => {
|
|
5006
|
-
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-
|
|
5005
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-5QKLHSCR.js');
|
|
5007
5006
|
try {
|
|
5008
5007
|
await runWorkRenew(opts);
|
|
5009
5008
|
} catch (err) {
|
|
@@ -5035,7 +5034,7 @@ applies to a host's lease only. A later tool call in the session
|
|
|
5035
5034
|
takes the lease again.
|
|
5036
5035
|
`
|
|
5037
5036
|
).action(async (opts) => {
|
|
5038
|
-
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-
|
|
5037
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-5QKLHSCR.js');
|
|
5039
5038
|
try {
|
|
5040
5039
|
await runWorkRelease(opts);
|
|
5041
5040
|
} catch (err) {
|
|
@@ -5062,7 +5061,7 @@ Idempotent: declaring the same pull request twice is a no-op.
|
|
|
5062
5061
|
needs your own login; an agent session or a factory key is refused.
|
|
5063
5062
|
`
|
|
5064
5063
|
).action(async (number, opts) => {
|
|
5065
|
-
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-
|
|
5064
|
+
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-2J2LKETD.js');
|
|
5066
5065
|
try {
|
|
5067
5066
|
await runWorkPr({ ...opts, number });
|
|
5068
5067
|
} catch (err) {
|
|
@@ -5087,8 +5086,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
|
|
|
5087
5086
|
Run it again after a change to the title or description.
|
|
5088
5087
|
`
|
|
5089
5088
|
).action(async (opts) => {
|
|
5090
|
-
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-
|
|
5091
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
5089
|
+
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-JNGTGLIP.js');
|
|
5090
|
+
const { WorkCommandError } = await import('./work-cmd-3MKUIE2C.js');
|
|
5092
5091
|
try {
|
|
5093
5092
|
await runWorkOpenPr(opts);
|
|
5094
5093
|
} catch (err) {
|
|
@@ -5104,9 +5103,9 @@ function registerRunnerCommands(program2) {
|
|
|
5104
5103
|
const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
|
|
5105
5104
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
5106
5105
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
5107
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5108
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
5109
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
5106
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-QASNKYM6.js');
|
|
5107
|
+
const { start, RunnerStartError } = await import('./loop-7U7MVICV.js');
|
|
5108
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-EAD2OEM7.js');
|
|
5110
5109
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5111
5110
|
try {
|
|
5112
5111
|
const { realUpdateDeps } = await import('./real-deps-QX5YH7FG.js');
|
|
@@ -5123,10 +5122,10 @@ function registerRunnerCommands(program2) {
|
|
|
5123
5122
|
"after",
|
|
5124
5123
|
"\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
|
|
5125
5124
|
).action(async () => {
|
|
5126
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5127
|
-
const { containerStart } = await import('./container-start-
|
|
5128
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
5129
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
5125
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-QASNKYM6.js');
|
|
5126
|
+
const { containerStart } = await import('./container-start-2DHCWV73.js');
|
|
5127
|
+
const { start, RunnerStartError } = await import('./loop-7U7MVICV.js');
|
|
5128
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-EAD2OEM7.js');
|
|
5130
5129
|
try {
|
|
5131
5130
|
const result = await containerStart({
|
|
5132
5131
|
env: process.env,
|
|
@@ -5147,16 +5146,16 @@ function registerRunnerCommands(program2) {
|
|
|
5147
5146
|
"after",
|
|
5148
5147
|
"\nIn the runner image, run it with `docker exec <container> outerlayer runner update-steps`. It reads the\ncontainer with `docker inspect` and changes nothing. The steps rename the old container and never remove it\nbefore the new one runs. They name the container's variables and never print a value.\n"
|
|
5149
5148
|
).action(async (opts) => {
|
|
5150
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5151
|
-
const { runnerDir } = await import('./paths-
|
|
5152
|
-
const { runUpdateSteps } = await import('./update-steps-
|
|
5149
|
+
const { defaultRunnerConfigPath } = await import('./config-QASNKYM6.js');
|
|
5150
|
+
const { runnerDir } = await import('./paths-T2DEBI62.js');
|
|
5151
|
+
const { runUpdateSteps } = await import('./update-steps-JQOCCDWO.js');
|
|
5153
5152
|
const text = await runUpdateSteps({ runnerDirPath: runnerDir(opts.config ?? defaultRunnerConfigPath()) });
|
|
5154
5153
|
process.stdout.write(`${text}
|
|
5155
5154
|
`);
|
|
5156
5155
|
});
|
|
5157
5156
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
5158
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5159
|
-
const { runRunnerCheck } = await import('./check-
|
|
5157
|
+
const { defaultRunnerConfigPath } = await import('./config-QASNKYM6.js');
|
|
5158
|
+
const { runRunnerCheck } = await import('./check-QULEN437.js');
|
|
5160
5159
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5161
5160
|
const result = await runRunnerCheck(configPath);
|
|
5162
5161
|
if (!result.ok) {
|
|
@@ -5176,21 +5175,27 @@ function registerRunnerCommands(program2) {
|
|
|
5176
5175
|
process.stdout.write(`${JSON.stringify(jobStateFormatsAnswer())}
|
|
5177
5176
|
`);
|
|
5178
5177
|
});
|
|
5179
|
-
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").option("--allow-downgrade", "install this CLI even when it is older than the version the runner runs").option("--unit-name <name>", "with --service, the unit's name, to run a second runner beside the first").action(async (opts) => {
|
|
5180
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5181
|
-
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-
|
|
5178
|
+
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").option("--allow-downgrade", "install this CLI even when it is older than the version the runner runs").option("--unit-name <name>", "with --service, the unit's name, to run a second runner beside the first").option("--build-memory-max <size>", "with --service, memory all builds may use together, such as 16g").option("--build-cpus-max <n>", "with --service, CPUs all builds may use together, such as 4").action(async (opts) => {
|
|
5179
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-QASNKYM6.js');
|
|
5180
|
+
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-TWGRGEVL.js');
|
|
5182
5181
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5183
5182
|
if (opts.service !== true) {
|
|
5184
|
-
|
|
5183
|
+
const names = { print: "print", user: "user", unitName: "unit-name", buildMemoryMax: "build-memory-max", buildCpusMax: "build-cpus-max" };
|
|
5184
|
+
for (const flag of Object.keys(names)) {
|
|
5185
5185
|
if (opts[flag] !== void 0) {
|
|
5186
|
-
fail(`--${flag
|
|
5186
|
+
fail(`--${names[flag]} is for --service.`);
|
|
5187
5187
|
return;
|
|
5188
5188
|
}
|
|
5189
5189
|
}
|
|
5190
5190
|
}
|
|
5191
|
+
const buildCpusMax = opts.buildCpusMax === void 0 ? void 0 : Number(opts.buildCpusMax);
|
|
5192
|
+
if (buildCpusMax !== void 0 && !(await import('./command-4XOXVWFW.js')).cpusAreValid(buildCpusMax)) {
|
|
5193
|
+
fail(`--build-cpus-max ${opts.buildCpusMax} is not a number of CPUs from 0.01 to 1024.`);
|
|
5194
|
+
return;
|
|
5195
|
+
}
|
|
5191
5196
|
try {
|
|
5192
5197
|
if (opts.service === true) {
|
|
5193
|
-
const { installServiceCommand } = await import('./command-
|
|
5198
|
+
const { installServiceCommand } = await import('./command-4XOXVWFW.js');
|
|
5194
5199
|
const result2 = await installServiceCommand({
|
|
5195
5200
|
configPath,
|
|
5196
5201
|
print: opts.print,
|
|
@@ -5198,6 +5203,8 @@ function registerRunnerCommands(program2) {
|
|
|
5198
5203
|
replace: opts.replace,
|
|
5199
5204
|
allowDowngrade: opts.allowDowngrade,
|
|
5200
5205
|
unitName: opts.unitName,
|
|
5206
|
+
...opts.buildMemoryMax === void 0 ? {} : { buildMemoryMax: opts.buildMemoryMax },
|
|
5207
|
+
...buildCpusMax === void 0 ? {} : { buildCpusMax },
|
|
5201
5208
|
entryPath: process.argv[1] ?? "",
|
|
5202
5209
|
nodePath: process.execPath,
|
|
5203
5210
|
home: homeFromEnv()
|
|
@@ -5245,8 +5252,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5245
5252
|
fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
|
|
5246
5253
|
return;
|
|
5247
5254
|
}
|
|
5248
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5249
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5255
|
+
const { defaultRunnerConfigPath } = await import('./config-QASNKYM6.js');
|
|
5256
|
+
const { uninstallServiceCommand } = await import('./command-4XOXVWFW.js');
|
|
5250
5257
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5251
5258
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5252
5259
|
`);
|
|
@@ -5273,12 +5280,12 @@ already in claude.env is used.
|
|
|
5273
5280
|
printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
|
|
5274
5281
|
`
|
|
5275
5282
|
).action(async (opts) => {
|
|
5276
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5277
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5278
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5279
|
-
const { detectMachine } = await import('./machine-
|
|
5280
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5281
|
-
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-
|
|
5283
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-QASNKYM6.js');
|
|
5284
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-FAIF7KOK.js');
|
|
5285
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-CYSUYKSX.js');
|
|
5286
|
+
const { detectMachine } = await import('./machine-S3JHOX4V.js');
|
|
5287
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-2CEULE3F.js');
|
|
5288
|
+
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-BJPUHAKZ.js');
|
|
5282
5289
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5283
5290
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
5284
5291
|
fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
|
|
@@ -5309,7 +5316,7 @@ already in claude.env is used.
|
|
|
5309
5316
|
const chunks = [];
|
|
5310
5317
|
for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
|
|
5311
5318
|
const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
|
|
5312
|
-
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-
|
|
5319
|
+
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-5RU322O3.js');
|
|
5313
5320
|
const hostKey2 = await ensureHostKey2(configPath);
|
|
5314
5321
|
process.stdout.write(`host key ${hostKey2.fingerprint}
|
|
5315
5322
|
hooks: ${result2.hooks}
|
|
@@ -5368,7 +5375,7 @@ hooks: ${result2.hooks}
|
|
|
5368
5375
|
const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
|
|
5369
5376
|
const created = makeKey === void 0 ? void 0 : await makeKey();
|
|
5370
5377
|
const result = writeRunnerInit(prepared, created);
|
|
5371
|
-
const { ensureHostKey } = await import('./host-key-
|
|
5378
|
+
const { ensureHostKey } = await import('./host-key-5RU322O3.js');
|
|
5372
5379
|
const hostKey = await ensureHostKey(configPath);
|
|
5373
5380
|
if (created !== void 0) {
|
|
5374
5381
|
process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
|
|
@@ -5396,7 +5403,7 @@ ${C.yellow}${result.note}${C.reset}
|
|
|
5396
5403
|
To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
|
|
5397
5404
|
`);
|
|
5398
5405
|
}
|
|
5399
|
-
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-
|
|
5406
|
+
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-TWGRGEVL.js');
|
|
5400
5407
|
let installedLayout = false;
|
|
5401
5408
|
let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
|
|
5402
5409
|
try {
|
|
@@ -5428,7 +5435,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5428
5435
|
let serviceUp = false;
|
|
5429
5436
|
let restart;
|
|
5430
5437
|
if (installedLayout) {
|
|
5431
|
-
const { installServiceCommand } = await import('./command-
|
|
5438
|
+
const { installServiceCommand } = await import('./command-4XOXVWFW.js');
|
|
5432
5439
|
const service = await installServiceCommand({
|
|
5433
5440
|
configPath,
|
|
5434
5441
|
entryPath: process.argv[1] ?? "",
|
|
@@ -5472,12 +5479,12 @@ Next:
|
|
|
5472
5479
|
"after",
|
|
5473
5480
|
"\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"
|
|
5474
5481
|
).action(async (opts) => {
|
|
5475
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5476
|
-
const { buildRepositoryImage, RecipeError } = await import('./build-
|
|
5482
|
+
const { defaultRunnerConfigPath } = await import('./config-QASNKYM6.js');
|
|
5483
|
+
const { buildRepositoryImage, RecipeError } = await import('./build-B4OKU4MV.js');
|
|
5477
5484
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
5478
|
-
const { createDockerHost } = await import('./docker-
|
|
5479
|
-
const { builderSpec } = await import('./builder-
|
|
5480
|
-
const { loadRunnerConfig } = await import('./config-
|
|
5485
|
+
const { createDockerHost } = await import('./docker-TAC6G4VU.js');
|
|
5486
|
+
const { builderSpec } = await import('./builder-XFPWE74N.js');
|
|
5487
|
+
const { loadRunnerConfig } = await import('./config-QASNKYM6.js');
|
|
5481
5488
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5482
5489
|
const loaded = (() => {
|
|
5483
5490
|
try {
|
|
@@ -5488,11 +5495,11 @@ Next:
|
|
|
5488
5495
|
})();
|
|
5489
5496
|
const memory = loaded?.build?.memory ?? "8g";
|
|
5490
5497
|
try {
|
|
5491
|
-
const { ensureRunnerIdentity } = await import('./runner-identity-
|
|
5498
|
+
const { ensureRunnerIdentity } = await import('./runner-identity-ZCPPC2BJ.js');
|
|
5492
5499
|
await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
|
|
5493
5500
|
console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
|
|
5494
5501
|
});
|
|
5495
|
-
const { imageTargetFor } = await import('./governing-source-
|
|
5502
|
+
const { imageTargetFor } = await import('./governing-source-JCI7VDQ6.js');
|
|
5496
5503
|
const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
|
|
5497
5504
|
if (!target.ok) {
|
|
5498
5505
|
if (opts.json) {
|
|
@@ -5555,25 +5562,25 @@ Next:
|
|
|
5555
5562
|
}
|
|
5556
5563
|
});
|
|
5557
5564
|
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) => {
|
|
5558
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5559
|
-
const { requestStop } = await import('./loop-
|
|
5565
|
+
const { defaultRunnerConfigPath } = await import('./config-QASNKYM6.js');
|
|
5566
|
+
const { requestStop } = await import('./loop-7U7MVICV.js');
|
|
5560
5567
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5561
|
-
const { runnerImageVersion } = await import('./image-tag-
|
|
5568
|
+
const { runnerImageVersion } = await import('./image-tag-SEMBVB5D.js');
|
|
5562
5569
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
5563
5570
|
});
|
|
5564
5571
|
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) => {
|
|
5565
|
-
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-
|
|
5566
|
-
const { jobsDir, runnerDir } = await import('./paths-
|
|
5567
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
5568
|
-
const { renderStatus } = await import('./status-
|
|
5569
|
-
const { readHousekeepingRecord } = await import('./record-
|
|
5572
|
+
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-QASNKYM6.js');
|
|
5573
|
+
const { jobsDir, runnerDir } = await import('./paths-T2DEBI62.js');
|
|
5574
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-7U7MVICV.js');
|
|
5575
|
+
const { renderStatus } = await import('./status-2AP7J2L7.js');
|
|
5576
|
+
const { readHousekeepingRecord } = await import('./record-IMXQNHPB.js');
|
|
5570
5577
|
const path2 = await import('path');
|
|
5571
5578
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5572
5579
|
const all = listJobFiles(configPath);
|
|
5573
5580
|
const housekeeping = readHousekeepingRecord(runnerDir(configPath));
|
|
5574
|
-
const { readPendingUpdate } = await import('./pending-
|
|
5581
|
+
const { readPendingUpdate } = await import('./pending-ERXWVLLG.js');
|
|
5575
5582
|
const pendingUpdate = readPendingUpdate(runnerDir(configPath));
|
|
5576
|
-
const { readImageStatus } = await import('./image-tag-
|
|
5583
|
+
const { readImageStatus } = await import('./image-tag-SEMBVB5D.js');
|
|
5577
5584
|
const image = readImageStatus(runnerDir(configPath));
|
|
5578
5585
|
let host = "unknown";
|
|
5579
5586
|
let concurrency = 1;
|
|
@@ -5586,9 +5593,8 @@ Next:
|
|
|
5586
5593
|
const processState = runnerProcessState(configPath);
|
|
5587
5594
|
const service = await (async () => {
|
|
5588
5595
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
|
|
5589
|
-
const {
|
|
5590
|
-
const
|
|
5591
|
-
const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
|
|
5596
|
+
const { inspectRunnerService } = await import('./find-unit-4UR647S4.js');
|
|
5597
|
+
const facts = inspectRunnerService(configPath);
|
|
5592
5598
|
return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
|
|
5593
5599
|
})();
|
|
5594
5600
|
if (opts.json) {
|
|
@@ -5624,9 +5630,9 @@ Next:
|
|
|
5624
5630
|
);
|
|
5625
5631
|
});
|
|
5626
5632
|
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) => {
|
|
5627
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5628
|
-
const { listJobFiles } = await import('./loop-
|
|
5629
|
-
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-
|
|
5633
|
+
const { defaultRunnerConfigPath } = await import('./config-QASNKYM6.js');
|
|
5634
|
+
const { listJobFiles } = await import('./loop-7U7MVICV.js');
|
|
5635
|
+
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-6CMB3DO6.js');
|
|
5630
5636
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5631
5637
|
const item = parseTrackerNumber(itemArg);
|
|
5632
5638
|
if (item === void 0) {
|
|
@@ -5857,7 +5863,7 @@ caller from the bearer token, the gateway answers 401 without that header.
|
|
|
5857
5863
|
"after",
|
|
5858
5864
|
"\nWhat the stdio .mcp.json entry spawns. Reads newline-delimited JSON-RPC 2.0 on\nstdin and writes responses on stdout. The API key comes from OUTERLAYER_API_KEY\nor ~/.outerlayer/config.json at start-up; with neither the command exits 1 and\nprints why, which the MCP client shows as the connect error.\n"
|
|
5859
5865
|
).action(async (opts) => {
|
|
5860
|
-
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-
|
|
5866
|
+
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-MWGIN6YL.js');
|
|
5861
5867
|
try {
|
|
5862
5868
|
await runMcpServe({ url: opts.url, appId: opts.appId });
|
|
5863
5869
|
} catch (err) {
|
|
@@ -5878,7 +5884,7 @@ would get, the instruction files and the names of the skills. It warns when the
|
|
|
5878
5884
|
no \`build\`. It needs the context-read permission: a login or a factory key with it is enough.
|
|
5879
5885
|
`
|
|
5880
5886
|
).action(async (opts) => {
|
|
5881
|
-
const { runContextShow, ContextShowError } = await import('./context-show-cmd-
|
|
5887
|
+
const { runContextShow, ContextShowError } = await import('./context-show-cmd-VSFCG663.js');
|
|
5882
5888
|
try {
|
|
5883
5889
|
const result = await runContextShow({ repo: opts.repo, json: opts.json, url: opts.url, apiKey: opts.apiKey, appId: opts.appId });
|
|
5884
5890
|
process.stdout.write(result.output);
|