@outerlayer/cli 0.27.1 → 0.28.2
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 +39 -0
- package/README.md +6 -0
- package/dist/{agent-setup-UW36TAQM.js → agent-setup-YVR5RO56.js} +17 -14
- package/dist/{bridge-B5VJVECY.js → bridge-WW2V7DTB.js} +3 -2
- package/dist/build-5FRC3RKM.js +13 -0
- package/dist/build-info.json +1 -1
- package/dist/{builder-6Y6ZWGNH.js → builder-4F2XNSFC.js} +7 -6
- package/dist/{check-YTXFVWK7.js → check-YEI6TCUH.js} +70 -61
- package/dist/{chunk-LPFOWUHG.js → chunk-25X2PJDI.js} +20 -13
- package/dist/{chunk-BPKO76QR.js → chunk-4XN5FRRJ.js} +4 -4
- package/dist/{chunk-EPPIISRD.js → chunk-55XLX5PA.js} +1 -1
- package/dist/{chunk-LOKSLO25.js → chunk-5B7BEQPR.js} +1 -1
- package/dist/chunk-5BHIBJDA.js +93 -0
- package/dist/{chunk-RHAGBUL5.js → chunk-5K3KB4YR.js} +1 -1
- package/dist/{chunk-ABXQBEYK.js → chunk-66T6XJAB.js} +1 -1
- package/dist/{chunk-ZFBJUOYT.js → chunk-6S4V4UIC.js} +10 -10
- package/dist/{chunk-BWH36FOC.js → chunk-7CK2TJFB.js} +20 -4
- package/dist/{chunk-QKIQ2R7F.js → chunk-ATJOFXTE.js} +3 -3
- package/dist/chunk-CDDED64E.js +13 -0
- package/dist/{chunk-QHH4OSD4.js → chunk-CTYSTE5C.js} +1 -1
- package/dist/{chunk-DJHNEGNM.js → chunk-DKWQMPSL.js} +18 -2
- package/dist/{chunk-IMOB4IOI.js → chunk-DQYMQ47E.js} +3 -2
- package/dist/{chunk-YETTWTAY.js → chunk-E7R2GIAW.js} +4 -4
- package/dist/{chunk-GFUE5TKO.js → chunk-F4FA3ZUT.js} +24 -14
- package/dist/{chunk-6TRNCUM4.js → chunk-FGF52V4V.js} +1 -1
- package/dist/{chunk-R7SGBXUD.js → chunk-GLL4TN2M.js} +226 -72
- package/dist/{chunk-MATUHHN4.js → chunk-GUXWQIEY.js} +1 -1
- package/dist/{chunk-B7DJVG25.js → chunk-HOB7Z4JQ.js} +3 -3
- package/dist/{chunk-2I3LIRZP.js → chunk-HXAEQPZR.js} +101 -10
- package/dist/{chunk-P33PZIWS.js → chunk-ITAIEJ2T.js} +7 -142
- package/dist/{chunk-RHGF73IU.js → chunk-IVX3U7KV.js} +1 -1
- package/dist/{chunk-7OUOLGUV.js → chunk-JGML2VUN.js} +3 -7
- package/dist/{chunk-6VFH52MP.js → chunk-KU7QL4XW.js} +24 -22
- package/dist/{chunk-2F762IXY.js → chunk-LNIFYSNK.js} +3 -3
- package/dist/{chunk-XBPUTQ7E.js → chunk-MHAR6S7B.js} +1 -1
- package/dist/{chunk-VS27BP3E.js → chunk-MKIC65SD.js} +52 -9
- package/dist/{chunk-64GMBWAK.js → chunk-MNHMUZGC.js} +6 -6
- package/dist/{chunk-7AQ5AM7U.js → chunk-MQHTM4YJ.js} +177 -21
- package/dist/{chunk-6KKM7VGZ.js → chunk-N7WAEEIU.js} +3 -3
- package/dist/{chunk-D7ECMB7B.js → chunk-NUHZV3A4.js} +1 -1
- package/dist/{chunk-5VMDGJGH.js → chunk-O65LES4V.js} +39 -25
- package/dist/{chunk-MHX7YX7Y.js → chunk-P2RWZCV7.js} +1 -1
- package/dist/chunk-QBQHQEUG.js +300 -0
- package/dist/{chunk-FP23SVDD.js → chunk-QJFDAKRF.js} +5 -5
- package/dist/{chunk-WUL2OP5A.js → chunk-QKXF7CLR.js} +3 -3
- package/dist/{chunk-XZ6Q6ZNR.js → chunk-SATUCMAJ.js} +3 -2
- package/dist/{chunk-Y7ZCHBYB.js → chunk-SFJXGISY.js} +3 -3
- package/dist/{chunk-2BTFKNTR.js → chunk-SJZL5F3F.js} +2 -2
- package/dist/{chunk-HWDYLXHH.js → chunk-T2QSWFSU.js} +4 -4
- package/dist/{chunk-E5IJ5533.js → chunk-TF7G2PR6.js} +3 -3
- package/dist/{chunk-O2IJTY7L.js → chunk-TVZAC2NP.js} +3 -3
- package/dist/{chunk-QE3UQAHK.js → chunk-UHU7H57K.js} +26 -7
- package/dist/{chunk-WSYXLLA5.js → chunk-USJZ2LDK.js} +6 -6
- package/dist/{chunk-EX5MQYEF.js → chunk-VC5J7QPV.js} +5 -5
- package/dist/{chunk-N4D5TMVU.js → chunk-VU7ZJPIR.js} +5 -5
- package/dist/{chunk-GLUKDQS4.js → chunk-WWQVKFN6.js} +1 -1
- package/dist/{chunk-55GNQPO6.js → chunk-X52PMPOM.js} +7 -7
- package/dist/{chunk-YB3CSYXX.js → chunk-XD4ZCMA4.js} +81 -2
- package/dist/{chunk-Y4OKEFAX.js → chunk-YL2VDSNF.js} +1 -1
- package/dist/{chunk-M3MHHIUW.js → chunk-Z3ASAXVU.js} +1 -1
- package/dist/{chunk-XS3FDWSZ.js → chunk-ZTY7HHYB.js} +1 -1
- package/dist/{claude-launcher-NQSZBTQ5.js → claude-launcher-7RGVOYCD.js} +6 -5
- package/dist/{cli-GHEOBXC7.js → cli-SCTKM2Y5.js} +151 -130
- package/dist/cli-update-notice-4DLZ3655.js +9 -0
- package/dist/{command-V7B7GTPZ.js → command-PY3C2E4B.js} +53 -37
- package/dist/{config-TWS5VZEN.js → config-5QYIKYUP.js} +3 -2
- package/dist/{connect-cmd-HGS7YPA2.js → connect-cmd-5TYAOK5M.js} +14 -11
- package/dist/{container-start-FHB2VDC4.js → container-start-7WLZMPEI.js} +37 -36
- package/dist/{control-plane-launch-DBQA3KLJ.js → control-plane-launch-FZMD4MXX.js} +13 -10
- package/dist/{dist-QPHZE47F.js → dist-JFVKLUHL.js} +1 -1
- package/dist/{docker-YT6Z3LXI.js → docker-ZTC4EIU4.js} +7 -6
- package/dist/{doctor-Y4NCNSJM.js → doctor-DQWRUAEB.js} +159 -41
- package/dist/{emit-artifact-cmd-ALDK55Y2.js → emit-artifact-cmd-SOXLBPQB.js} +19 -16
- package/dist/{emit-cmd-VAQHRWJR.js → emit-cmd-QUABLVO6.js} +6 -5
- package/dist/{emit-criteria-cmd-Q7SM6VP2.js → emit-criteria-cmd-JDO2VUG5.js} +15 -12
- package/dist/{emit-finding-cmd-2NBAPDSV.js → emit-finding-cmd-VCQPCLI2.js} +16 -13
- package/dist/{emit-result-cmd-KUSL56RI.js → emit-result-cmd-TKA3GAN7.js} +19 -16
- package/dist/{emit-step-cmd-KD4AKEAT.js → emit-step-cmd-XN44BXYU.js} +16 -13
- package/dist/{exec-client-6WVS7DRZ.js → exec-client-VKT2XNB3.js} +4 -3
- package/dist/fleet-readiness-G5X3MKP2.js +29 -0
- package/dist/{governing-source-VVUA5TKB.js → governing-source-B3M2U4BC.js} +21 -18
- package/dist/{guest-init-H5K2RW3P.js → guest-init-QW2DPX7H.js} +5 -4
- package/dist/{hook-fast-3SUJM765.js → hook-fast-EFC44SXV.js} +4 -1
- package/dist/{host-key-XNKZCWTS.js → host-key-AC6LTZDS.js} +4 -3
- package/dist/{image-tag-R34J4O3F.js → image-tag-SS7YKJHN.js} +4 -3
- package/dist/index.js +4 -4
- package/dist/init-5LHTF72R.js +56 -0
- package/dist/{init-3DAGX7UY.js → init-BTH5YPBC.js} +38 -37
- package/dist/{init-cmd-RIDBVSE4.js → init-cmd-L4VW3ZCT.js} +25 -21
- package/dist/{init-update-ECWNG47R.js → init-update-RWTQSTPE.js} +51 -35
- package/dist/{inspect-IPFA7AAT.js → inspect-L7JIBK3Y.js} +1 -1
- package/dist/{install-6OIY3KHZ.js → install-35SAMY75.js} +5 -5
- package/dist/{install-cmd-JMT67P35.js → install-cmd-GFY4QF72.js} +6 -5
- package/dist/{layout-XNFDTOET.js → layout-BBTQPS6V.js} +4 -3
- package/dist/{login-browser-EWXSGHM7.js → login-browser-WSOSQH2T.js} +2 -2
- package/dist/{logs-XHAS6LMZ.js → logs-X2IRDP5T.js} +3 -2
- package/dist/loop-QDV7T65M.js +80 -0
- package/dist/{machine-OOQ2NXC3.js → machine-PLNSGKNF.js} +32 -30
- package/dist/{machine-skills-FLIRJYP7.js → machine-skills-O7W6NMWB.js} +4 -3
- package/dist/{mcp-serve-cmd-LY5A3CE7.js → mcp-serve-cmd-IITCPAAR.js} +9 -6
- package/dist/{paths-LHSPNORF.js → paths-32DWGK35.js} +3 -2
- package/dist/pending-CSIY4Y2I.js +10 -0
- package/dist/{pidfile-DKMYYXLH.js → pidfile-CYCTH6NQ.js} +4 -3
- package/dist/{real-deps-KNNBQC75.js → real-deps-QX5YH7FG.js} +1 -1
- package/dist/{record-3LPTY3G5.js → record-N4WPZCGK.js} +4 -3
- package/dist/{relay-GFPPD6GF.js → relay-FJ5K37Z5.js} +8 -4
- package/dist/{runner-env-YRRNRKF4.js → runner-env-EIB6WFPG.js} +6 -7
- package/dist/{runner-identity-YS2BZXZV.js → runner-identity-S3V6I4I3.js} +7 -6
- package/dist/{runner-key-EFNTZWNX.js → runner-key-M4N2BY5A.js} +36 -35
- package/dist/{session-sender-SC5PSU2G.js → session-sender-UQ3VF732.js} +20 -17
- package/dist/{spec-cmd-JGYHHJ4P.js → spec-cmd-Z6MGATWC.js} +16 -13
- package/dist/{starter-pack-GPU4X6B7.js → starter-pack-5SOT5V4I.js} +4 -3
- package/dist/{status-7WM7S7JX.js → status-PWMPP4ES.js} +39 -37
- package/dist/{sync-cmd-ATXJVS7S.js → sync-cmd-N4R7ST6X.js} +19 -16
- package/dist/{watch-M7NR3DOW.js → watch-L5MSAWEO.js} +19 -16
- package/dist/{work-claim-cmd-DNUDZKJA.js → work-claim-cmd-CXALMILD.js} +21 -18
- package/dist/{work-cmd-VECTYST6.js → work-cmd-COESFSHE.js} +16 -13
- package/dist/{work-comment-cmd-F3NRWKPZ.js → work-comment-cmd-A4ZUVCSA.js} +16 -13
- package/dist/{work-logs-cmd-QF6P32FE.js → work-logs-cmd-CTF43MBE.js} +16 -13
- package/dist/{work-open-pr-cmd-XE23JA3R.js → work-open-pr-cmd-EMGYJXVD.js} +17 -14
- package/dist/{work-pr-cmd-BH56GUKN.js → work-pr-cmd-FEXMS6RH.js} +16 -13
- package/dist/{work-stop-cmd-C3F5HNUO.js → work-stop-cmd-NIHAN45R.js} +16 -13
- package/package.json +1 -1
- package/dist/build-HRLACBOZ.js +0 -12
- package/dist/chunk-STSLH5EJ.js +0 -71
- package/dist/init-SWKYV6CL.js +0 -55
- package/dist/loop-AIJZVUNA.js +0 -79
- package/dist/pending-3YZCSKON.js +0 -9
- package/dist/{chunk-6BLXUD56.js → chunk-HOU33DW5.js} +1 -1
|
@@ -1,29 +1,36 @@
|
|
|
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-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
3
|
+
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-25X2PJDI.js';
|
|
4
|
+
import './chunk-ITAIEJ2T.js';
|
|
5
|
+
import './chunk-QBQHQEUG.js';
|
|
6
|
+
import './chunk-KT4CN6OU.js';
|
|
7
|
+
import './chunk-SATUCMAJ.js';
|
|
8
|
+
import { verifiedTrackerNames, TRACKERS } from './chunk-X52PMPOM.js';
|
|
9
|
+
import './chunk-LNIFYSNK.js';
|
|
10
|
+
import './chunk-VU7ZJPIR.js';
|
|
9
11
|
import './chunk-BUP5N3X6.js';
|
|
10
|
-
import
|
|
11
|
-
import './chunk-
|
|
12
|
+
import './chunk-UHU7H57K.js';
|
|
13
|
+
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-5B7BEQPR.js';
|
|
14
|
+
import './chunk-HOU33DW5.js';
|
|
12
15
|
import './chunk-G2JWZDFA.js';
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import
|
|
16
|
+
import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
|
|
17
|
+
import './chunk-P2RWZCV7.js';
|
|
18
|
+
import './chunk-7CK2TJFB.js';
|
|
19
|
+
import './chunk-PJDQPF5N.js';
|
|
20
|
+
import './chunk-YL2VDSNF.js';
|
|
21
|
+
import './chunk-5K3KB4YR.js';
|
|
22
|
+
import './chunk-HXAEQPZR.js';
|
|
23
|
+
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-DKWQMPSL.js';
|
|
16
24
|
import './chunk-ZJSNLVCE.js';
|
|
17
25
|
import './chunk-I7RZHMXW.js';
|
|
18
26
|
import './chunk-BKO6JEZI.js';
|
|
19
27
|
import './chunk-HCVLP7XA.js';
|
|
20
28
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
24
|
-
import './chunk-
|
|
25
|
-
import {
|
|
26
|
-
import './chunk-PJDQPF5N.js';
|
|
29
|
+
import './chunk-DQYMQ47E.js';
|
|
30
|
+
import './chunk-JGML2VUN.js';
|
|
31
|
+
import './chunk-5BHIBJDA.js';
|
|
32
|
+
import './chunk-CDDED64E.js';
|
|
33
|
+
import { resolveVersion, resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
27
34
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
28
35
|
import { cliInvocation, packageRunnerOf } from './chunk-CRB3POP4.js';
|
|
29
36
|
import { settingsPath, readSettings, SettingsParseError, listHookCandidates, PORTABLE_BIN, wrapHooks, writeSettings, unwrapHooks, REGISTERED_EVENTS, removeHooks, removeStatusline, cliBinResolvable, mergeHooks, repointWrappedHooks, AUTO_WRAP_EVENTS, mergeStatusline } from './chunk-URIZRCRY.js';
|
|
@@ -33,10 +40,7 @@ import { removeJournalHooks, removePreCommitGuardHook } from './chunk-TUSYOL2O.j
|
|
|
33
40
|
import './chunk-RKOTJQVG.js';
|
|
34
41
|
import './chunk-QZBXLLTV.js';
|
|
35
42
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
36
|
-
import
|
|
37
|
-
import './chunk-Y4OKEFAX.js';
|
|
38
|
-
import './chunk-RHAGBUL5.js';
|
|
39
|
-
import './chunk-2I3LIRZP.js';
|
|
43
|
+
import './chunk-XD4ZCMA4.js';
|
|
40
44
|
import './chunk-JGD5TWQ2.js';
|
|
41
45
|
import './chunk-Z5GEFMRW.js';
|
|
42
46
|
import { EventEmitter } from 'events';
|
|
@@ -3654,14 +3658,14 @@ function apiKeyOption() {
|
|
|
3654
3658
|
return new Option("--api-key <key>", `deprecated: use \`${cliInvocation()} login\` or OUTERLAYER_API_KEY`).hideHelp();
|
|
3655
3659
|
}
|
|
3656
3660
|
async function installStarterPackInRepo() {
|
|
3657
|
-
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-
|
|
3661
|
+
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-5SOT5V4I.js');
|
|
3658
3662
|
const cwd = process.cwd();
|
|
3659
3663
|
let repoRoot = cwd;
|
|
3660
3664
|
try {
|
|
3661
3665
|
repoRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim() || cwd;
|
|
3662
3666
|
} catch {
|
|
3663
3667
|
}
|
|
3664
|
-
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-
|
|
3668
|
+
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-BBTQPS6V.js');
|
|
3665
3669
|
const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer"));
|
|
3666
3670
|
const result = installStarterPack({ repoRoot, base: fresh ? ".agents/skills" : skillsBaseFor(repoRoot) });
|
|
3667
3671
|
if (fresh) declareAgentsMdLayout(repoRoot);
|
|
@@ -3787,7 +3791,7 @@ ${starter.output}`),
|
|
|
3787
3791
|
}
|
|
3788
3792
|
}
|
|
3789
3793
|
async function installMachineSkillsForSetup() {
|
|
3790
|
-
const { setupMachineSkills } = await import('./machine-skills-
|
|
3794
|
+
const { setupMachineSkills } = await import('./machine-skills-O7W6NMWB.js');
|
|
3791
3795
|
const result = setupMachineSkills(homeFromEnv());
|
|
3792
3796
|
for (const failure of result.failures) process.stderr.write(`${C.yellow}!${C.reset} Could not write a maintained skill: ${failure}
|
|
3793
3797
|
`);
|
|
@@ -3795,8 +3799,8 @@ async function installMachineSkillsForSetup() {
|
|
|
3795
3799
|
` : "";
|
|
3796
3800
|
}
|
|
3797
3801
|
async function realConnectDepsForCwd() {
|
|
3798
|
-
const { realConnectDeps } = await import('./connect-cmd-
|
|
3799
|
-
const { resolveRepoIdentity } = await import('./dist-
|
|
3802
|
+
const { realConnectDeps } = await import('./connect-cmd-5TYAOK5M.js');
|
|
3803
|
+
const { resolveRepoIdentity } = await import('./dist-JFVKLUHL.js');
|
|
3800
3804
|
return {
|
|
3801
3805
|
...realConnectDeps(),
|
|
3802
3806
|
home: homeFromEnv(),
|
|
@@ -3813,10 +3817,21 @@ function buildProgram(argv = process.argv) {
|
|
|
3813
3817
|
const program2 = new Command();
|
|
3814
3818
|
program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", async (_root, command) => {
|
|
3815
3819
|
if (command.opts().apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
|
|
3816
|
-
const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-
|
|
3820
|
+
const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-O7W6NMWB.js');
|
|
3817
3821
|
const names = [];
|
|
3818
3822
|
for (let at = command; at?.parent; at = at.parent) names.push(at.name());
|
|
3819
3823
|
if (!machineRefreshSkipped(names, command._hidden === true, argv)) refreshMachineSkills(homeFromEnv());
|
|
3824
|
+
}).hook("postAction", async (_root, command) => {
|
|
3825
|
+
const notice = await import('./cli-update-notice-4DLZ3655.js');
|
|
3826
|
+
let top;
|
|
3827
|
+
for (let at = command; at.parent; at = at.parent) top = at.name();
|
|
3828
|
+
const json = command.opts().json === true || argv.includes("--json");
|
|
3829
|
+
if (notice.updateNoticeSkipped(top, command._hidden === true, argv)) return;
|
|
3830
|
+
if (!notice.isCommandInTerminal({ isTTY: process.stderr.isTTY === true, json, env: process.env }) || notice.updateNoticeSuppressed(process.env)) return;
|
|
3831
|
+
const running = resolvePackageVersion();
|
|
3832
|
+
const recorded = notice.newerRecordedVersion(homeFromEnv(), running);
|
|
3833
|
+
if (recorded !== void 0) process.stderr.write(`${notice.updateNoticeLine(recorded, running)}
|
|
3834
|
+
`);
|
|
3820
3835
|
}).option(NO_COLOR_FLAG, "disable color (NO_COLOR=1 does the same)").addHelpText("after", SUPPORT_TEXT);
|
|
3821
3836
|
program2.command("init").description("Connect this repository, install hooks and agent skills, run doctor").option("--user", "install into user settings [default]").option("--project", "install into project settings (./.claude/settings.json)").option("--org", "print a managed-settings.json snippet for MDM/GPO rollout").option("--remove", "uninstall OuterLayer hooks").option("--local", "install the hooks only: no connect step and no network call").option("--factory <org/factory>", `the factory to connect this repository to (see \`${cliInvocation()} connect\`)`).option("--gitignore", "also add .outerlayer/ to .gitignore (project scope)").option("--template <name>", "install the starter skills and a policy file (only: default)").option("--update", "update the files init wrote that you have not edited, and write missing ones").option("--dry-run", "with --update: print the plan and write nothing").option("--no-skills-link", "do not link .claude/skills to .agents/skills").option("--control-plane", "with --update: this is a control plane; older CLIs keep .claude/skills/").option("--no-wrap-hooks", "leave PreToolUse/PostToolUse hooks unwrapped").option("--statusline", "install the status-line segment [default]").option("--no-statusline", "leave the statusLine slot untouched").option("--shell-function", "make plain claude run `outerlayer claude` (edits ~/.zshrc or ~/.bashrc)").option("--no-shell-function", "do not set up the shell function, and remove it if it is there").option("--json", "machine-readable JSON output").addHelpText(
|
|
3822
3837
|
"after",
|
|
@@ -3851,19 +3866,25 @@ repository that has not moved keeps copies that \`context emit\` rewrites.
|
|
|
3851
3866
|
--update first moves a repository in the earlier layout to AGENTS.md,
|
|
3852
3867
|
.agents/skills/ and .mcp.json: it removes each file that holds exactly what
|
|
3853
3868
|
\`` + cliInvocation() + ' context emit` writes, moves the sources, links .claude/skills\nand sets "layout": 2. A file you edited is kept and listed. It then brings\nthe files init wrote once up to this CLI\'s version: the template skills, the\npolicy, the two starter checks and the two MCP entries. A file still equal\nto a version an earlier release wrote is replaced, and a missing one is\nwritten. A file you edited is never touched. The changes are left\nuncommitted. --dry-run prints the plan, with a command to compare each\nedited file, and writes nothing. In the AGENTS.md layout, --update also removes\neach maintained skill folder whose SKILL.md carries the "maintained by\nOuterLayer" line, from .agents/skills/ and from a .claude/skills that is a\nfolder. It says that every machine and runner host must run this CLI version\nor later, and each machine a person works on must run `' + cliInvocation() + ` init --local\`,
|
|
3854
|
-
before you commit the removal
|
|
3855
|
-
|
|
3869
|
+
before you commit the removal, and with a login it names each runner host that
|
|
3870
|
+
runs an older CLI. Once the folders are gone, it changes each path to one of
|
|
3871
|
+
them in AGENTS.md, CLAUDE.md and the skills to ~/.agents/skills/: in an edited
|
|
3872
|
+
build, ../outerlayer-build/SKILL.md becomes ~/.agents/skills/outerlayer-build/SKILL.md.
|
|
3856
3873
|
--control-plane makes no link and says
|
|
3857
3874
|
what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
|
|
3858
3875
|
).action(async (opts) => {
|
|
3859
3876
|
if (opts.update || opts.dryRun) {
|
|
3860
|
-
const {
|
|
3877
|
+
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-RWTQSTPE.js');
|
|
3878
|
+
const { fleetReadiness } = await import('./fleet-readiness-G5X3MKP2.js');
|
|
3861
3879
|
const problem = updateFlagProblem(opts);
|
|
3862
3880
|
if (problem !== void 0) {
|
|
3863
3881
|
fail(problem);
|
|
3864
3882
|
return;
|
|
3865
3883
|
}
|
|
3866
|
-
const result =
|
|
3884
|
+
const result = await runInitUpdateWithFleet(
|
|
3885
|
+
{ cwd: process.cwd(), dryRun: opts.dryRun === true, skillsLink: opts.skillsLink !== false, controlPlane: opts.controlPlane === true },
|
|
3886
|
+
fleetReadiness
|
|
3887
|
+
);
|
|
3867
3888
|
if (opts.json) writeJson(result);
|
|
3868
3889
|
else process.stdout.write(formatInitUpdate(result));
|
|
3869
3890
|
if (result.status === "failed") process.exitCode = 1;
|
|
@@ -3871,7 +3892,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3871
3892
|
}
|
|
3872
3893
|
let starterTemplate;
|
|
3873
3894
|
if (opts.template !== void 0) {
|
|
3874
|
-
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-
|
|
3895
|
+
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-5SOT5V4I.js');
|
|
3875
3896
|
try {
|
|
3876
3897
|
assertKnownTemplate(opts.template);
|
|
3877
3898
|
} catch (err) {
|
|
@@ -3905,13 +3926,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3905
3926
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3906
3927
|
`);
|
|
3907
3928
|
}
|
|
3908
|
-
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-L4VW3ZCT.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3909
3930
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3910
3931
|
else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
|
|
3911
3932
|
return;
|
|
3912
3933
|
}
|
|
3913
3934
|
await installMachineSkillsForSetup();
|
|
3914
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3935
|
+
const { runInitCommand } = await import('./init-cmd-L4VW3ZCT.js');
|
|
3915
3936
|
const code = await runInitCommand(
|
|
3916
3937
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3917
3938
|
{
|
|
@@ -3923,7 +3944,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3923
3944
|
return { ok, text, detail };
|
|
3924
3945
|
},
|
|
3925
3946
|
runAgentSetup: async () => {
|
|
3926
|
-
const { runAgentSetup } = await import('./agent-setup-
|
|
3947
|
+
const { runAgentSetup } = await import('./agent-setup-YVR5RO56.js');
|
|
3927
3948
|
return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
|
|
3928
3949
|
},
|
|
3929
3950
|
runDoctorChecks: gatherDoctorChecks,
|
|
@@ -3932,7 +3953,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3932
3953
|
shellPath: process.env.SHELL,
|
|
3933
3954
|
interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
|
|
3934
3955
|
ask: async () => {
|
|
3935
|
-
const { promptOnTerminal } = await import('./connect-cmd-
|
|
3956
|
+
const { promptOnTerminal } = await import('./connect-cmd-5TYAOK5M.js');
|
|
3936
3957
|
const answer = await promptOnTerminal({
|
|
3937
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.`,
|
|
3938
3959
|
options: [
|
|
@@ -3971,7 +3992,7 @@ linked (true, false, or null when it could not be checked) and, when false,
|
|
|
3971
3992
|
linkUrl.
|
|
3972
3993
|
`
|
|
3973
3994
|
).action(async (opts) => {
|
|
3974
|
-
const { runConnectCommand } = await import('./connect-cmd-
|
|
3995
|
+
const { runConnectCommand } = await import('./connect-cmd-5TYAOK5M.js');
|
|
3975
3996
|
const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
|
|
3976
3997
|
stdout: process.stdout,
|
|
3977
3998
|
stderr: process.stderr
|
|
@@ -4010,7 +4031,7 @@ Every later command reads the saved file, so none of them needs a key on
|
|
|
4010
4031
|
its command line. A saved key is checked for real on the first \`sync\`.
|
|
4011
4032
|
`
|
|
4012
4033
|
).action(async (opts) => {
|
|
4013
|
-
const { runLoginCommand, realLoginDeps } = await import('./login-browser-
|
|
4034
|
+
const { runLoginCommand, realLoginDeps } = await import('./login-browser-WSOSQH2T.js');
|
|
4014
4035
|
const code = await runLoginCommand(
|
|
4015
4036
|
{
|
|
4016
4037
|
browser: opts.browser !== false,
|
|
@@ -4049,7 +4070,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4049
4070
|
else fail(found.reason);
|
|
4050
4071
|
return;
|
|
4051
4072
|
}
|
|
4052
|
-
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-
|
|
4073
|
+
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-N4R7ST6X.js');
|
|
4053
4074
|
try {
|
|
4054
4075
|
const result = await runSync({
|
|
4055
4076
|
url: opts.url,
|
|
@@ -4080,7 +4101,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4080
4101
|
if (invokedCommandToken(argv) === "watch") {
|
|
4081
4102
|
warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
|
|
4082
4103
|
}
|
|
4083
|
-
const { runWatch } = await import('./watch-
|
|
4104
|
+
const { runWatch } = await import('./watch-L5MSAWEO.js');
|
|
4084
4105
|
await runWatch({ once: opts.once });
|
|
4085
4106
|
});
|
|
4086
4107
|
program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
|
|
@@ -4092,7 +4113,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4092
4113
|
program2.command("claude [args...]").description("start Claude Code with the repository's control plane attached").allowUnknownOption().helpOption(false).action(() => {
|
|
4093
4114
|
});
|
|
4094
4115
|
const brokerRelay = program2.command("broker-relay", { hidden: true }).description("relay a build's loopback connections to the runner's tunnel and destinations").enablePositionalOptions().option("--port <port>", "the loopback port to listen on").option("--socket <path>", "the runner's tunnel socket").option("--join <path>", "the socket the runner's joining process connects to").option("--lease-watchdog", "exit when the runner's lease expiry passes; needs --join").option("--forward <port=target>", "also relay a loopback port to a destination; repeatable", (value, previous) => [...previous, value], []).action(async (opts) => {
|
|
4095
|
-
const { startRelay, startSessionRelay } = await import('./relay-
|
|
4116
|
+
const { startRelay, startSessionRelay } = await import('./relay-FJ5K37Z5.js');
|
|
4096
4117
|
const { TARGET_TUNNEL, targetOfPath } = await import('./relay-protocol-HELO5SNH.js');
|
|
4097
4118
|
const port = Number(opts.port);
|
|
4098
4119
|
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
@@ -4125,7 +4146,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4125
4146
|
await startRelay({ port, socketPath: opts.socket, forwards: forwards.map((forward) => ({ port: forward.port, socketPath: forward.spec })) });
|
|
4126
4147
|
});
|
|
4127
4148
|
brokerRelay.command("join").description("carry the runner's session to the relay over standard input and output").option("--socket <path>", "the relay's joining socket", "/run/outerlayer-relay/join.sock").action(async (opts) => {
|
|
4128
|
-
const { joinRelay } = await import('./relay-
|
|
4149
|
+
const { joinRelay } = await import('./relay-FJ5K37Z5.js');
|
|
4129
4150
|
try {
|
|
4130
4151
|
await joinRelay({ socketPath: opts.socket, input: process.stdin, output: process.stdout });
|
|
4131
4152
|
} catch (err) {
|
|
@@ -4141,7 +4162,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4141
4162
|
}
|
|
4142
4163
|
});
|
|
4143
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) => {
|
|
4144
|
-
const { runVmExec } = await import('./exec-client-
|
|
4165
|
+
const { runVmExec } = await import('./exec-client-VKT2XNB3.js');
|
|
4145
4166
|
const env = {};
|
|
4146
4167
|
for (const entry of opts.env) {
|
|
4147
4168
|
const eq = entry.indexOf("=");
|
|
@@ -4170,7 +4191,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4170
4191
|
process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
|
|
4171
4192
|
});
|
|
4172
4193
|
program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
|
|
4173
|
-
const { runSessionSender } = await import('./session-sender-
|
|
4194
|
+
const { runSessionSender } = await import('./session-sender-UQ3VF732.js');
|
|
4174
4195
|
try {
|
|
4175
4196
|
await runSessionSender();
|
|
4176
4197
|
} catch (err) {
|
|
@@ -4178,7 +4199,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4178
4199
|
}
|
|
4179
4200
|
});
|
|
4180
4201
|
program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
|
|
4181
|
-
const { realGuestHost, runGuestInit } = await import('./guest-init-
|
|
4202
|
+
const { realGuestHost, runGuestInit } = await import('./guest-init-QW2DPX7H.js');
|
|
4182
4203
|
const { readFileSync: readFileSync3 } = await import('fs');
|
|
4183
4204
|
try {
|
|
4184
4205
|
runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
|
|
@@ -4187,7 +4208,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4187
4208
|
}
|
|
4188
4209
|
});
|
|
4189
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) => {
|
|
4190
|
-
const { startBridgeForward } = await import('./bridge-
|
|
4211
|
+
const { startBridgeForward } = await import('./bridge-WW2V7DTB.js');
|
|
4191
4212
|
try {
|
|
4192
4213
|
await startBridgeForward(opts);
|
|
4193
4214
|
} catch (err) {
|
|
@@ -4213,7 +4234,7 @@ async function runCli(processArgv) {
|
|
|
4213
4234
|
await buildProgram(argv).parseAsync(argv);
|
|
4214
4235
|
}
|
|
4215
4236
|
async function compileContext(opts) {
|
|
4216
|
-
const { runEmit, EmitError } = await import('./emit-cmd-
|
|
4237
|
+
const { runEmit, EmitError } = await import('./emit-cmd-QUABLVO6.js');
|
|
4217
4238
|
try {
|
|
4218
4239
|
const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
|
|
4219
4240
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
@@ -4260,7 +4281,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
|
|
|
4260
4281
|
await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
|
|
4261
4282
|
return;
|
|
4262
4283
|
}
|
|
4263
|
-
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-
|
|
4284
|
+
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-TKA3GAN7.js');
|
|
4264
4285
|
try {
|
|
4265
4286
|
const result = await runEmitResult({
|
|
4266
4287
|
name,
|
|
@@ -4310,7 +4331,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
|
|
|
4310
4331
|
locally so it never uploads. One correction can retire several duplicates.
|
|
4311
4332
|
`
|
|
4312
4333
|
).action(async (file, opts) => {
|
|
4313
|
-
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-
|
|
4334
|
+
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-SOXLBPQB.js');
|
|
4314
4335
|
let pr;
|
|
4315
4336
|
if (opts.pr !== void 0) {
|
|
4316
4337
|
pr = parseTrackerNumber(opts.pr);
|
|
@@ -4369,7 +4390,7 @@ recent events with their ids. --find <text> searches all of them.
|
|
|
4369
4390
|
item that session was launched for is used automatically.
|
|
4370
4391
|
`
|
|
4371
4392
|
).action(async (opts) => {
|
|
4372
|
-
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4393
|
+
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-VCQPCLI2.js');
|
|
4373
4394
|
try {
|
|
4374
4395
|
refuseRemovedFindingFlags(opts);
|
|
4375
4396
|
const result = await runEmitFinding({
|
|
@@ -4436,7 +4457,7 @@ the whole batch. "untimed": true records one with no time on purpose.
|
|
|
4436
4457
|
that session was launched for is used automatically.
|
|
4437
4458
|
`
|
|
4438
4459
|
).action(async (file, opts) => {
|
|
4439
|
-
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4460
|
+
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-VCQPCLI2.js');
|
|
4440
4461
|
try {
|
|
4441
4462
|
const result = await runEmitFindings({
|
|
4442
4463
|
file,
|
|
@@ -4471,7 +4492,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
|
|
|
4471
4492
|
the step, the command prints why and exits 1.
|
|
4472
4493
|
`
|
|
4473
4494
|
).action(async (name, opts) => {
|
|
4474
|
-
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-
|
|
4495
|
+
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-XN44BXYU.js');
|
|
4475
4496
|
try {
|
|
4476
4497
|
await runEmitStep({
|
|
4477
4498
|
name,
|
|
@@ -4514,7 +4535,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
|
|
|
4514
4535
|
${cliInvocation()} emit criteria acceptance/412-login.md --item 412
|
|
4515
4536
|
`
|
|
4516
4537
|
).action(async (file, opts) => {
|
|
4517
|
-
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-
|
|
4538
|
+
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-JDO2VUG5.js');
|
|
4518
4539
|
try {
|
|
4519
4540
|
const result = await runEmitCriteria({
|
|
4520
4541
|
file,
|
|
@@ -4538,9 +4559,9 @@ function registerSpecCommands(program2) {
|
|
|
4538
4559
|
const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
|
|
4539
4560
|
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)");
|
|
4540
4561
|
const run = async (action) => {
|
|
4541
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4562
|
+
const { WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4542
4563
|
try {
|
|
4543
|
-
await action(await import('./spec-cmd-
|
|
4564
|
+
await action(await import('./spec-cmd-Z6MGATWC.js'));
|
|
4544
4565
|
} catch (err) {
|
|
4545
4566
|
if (err instanceof WorkCommandError) {
|
|
4546
4567
|
fail(err.message);
|
|
@@ -4582,7 +4603,7 @@ takes it, and prints the line that starts your session on it. That
|
|
|
4582
4603
|
session links itself and holds the item's lease while it works.
|
|
4583
4604
|
`
|
|
4584
4605
|
).action(async (opts) => {
|
|
4585
|
-
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-
|
|
4606
|
+
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4586
4607
|
try {
|
|
4587
4608
|
await runWorkBuild(opts);
|
|
4588
4609
|
} catch (err) {
|
|
@@ -4605,7 +4626,7 @@ renews that session's own 20-minute lease, unless --no-lease or
|
|
|
4605
4626
|
--ended is given, or another worker already holds a live one.
|
|
4606
4627
|
`
|
|
4607
4628
|
).action(async (number, opts) => {
|
|
4608
|
-
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-
|
|
4629
|
+
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4609
4630
|
try {
|
|
4610
4631
|
await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
|
|
4611
4632
|
} catch (err) {
|
|
@@ -4629,8 +4650,8 @@ criterion's new proof; --ready hands the thread back to a person. At
|
|
|
4629
4650
|
most one action flag may be given.
|
|
4630
4651
|
`
|
|
4631
4652
|
).action(async (opts) => {
|
|
4632
|
-
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4633
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4653
|
+
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-A4ZUVCSA.js');
|
|
4654
|
+
const { WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4634
4655
|
try {
|
|
4635
4656
|
await runWorkComment(opts);
|
|
4636
4657
|
} catch (err) {
|
|
@@ -4651,8 +4672,8 @@ criterion that carries proof or a comment, each with who is waiting
|
|
|
4651
4672
|
on whom next.
|
|
4652
4673
|
`
|
|
4653
4674
|
).action(async (opts) => {
|
|
4654
|
-
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4655
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4675
|
+
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-A4ZUVCSA.js');
|
|
4676
|
+
const { WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4656
4677
|
try {
|
|
4657
4678
|
await runWorkThreads(opts);
|
|
4658
4679
|
} catch (err) {
|
|
@@ -4676,8 +4697,8 @@ still running, or that an older runner released, has no log and the
|
|
|
4676
4697
|
command exits 1.
|
|
4677
4698
|
`
|
|
4678
4699
|
).action(async (opts) => {
|
|
4679
|
-
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-
|
|
4680
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4700
|
+
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-CTF43MBE.js');
|
|
4701
|
+
const { WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4681
4702
|
try {
|
|
4682
4703
|
await runWorkLogs(opts);
|
|
4683
4704
|
} catch (err) {
|
|
@@ -4700,8 +4721,8 @@ item is not built again until a new build request. Exits 1 when no host
|
|
|
4700
4721
|
build is running for the item.
|
|
4701
4722
|
`
|
|
4702
4723
|
).action(async (opts) => {
|
|
4703
|
-
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-
|
|
4704
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4724
|
+
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-NIHAN45R.js');
|
|
4725
|
+
const { WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4705
4726
|
try {
|
|
4706
4727
|
await runWorkStop(opts);
|
|
4707
4728
|
} catch (err) {
|
|
@@ -4722,7 +4743,7 @@ deletes anything \u2014 the item is removed from Work only once no
|
|
|
4722
4743
|
live addition remains on it.
|
|
4723
4744
|
`
|
|
4724
4745
|
).action(async (opts) => {
|
|
4725
|
-
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-
|
|
4746
|
+
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4726
4747
|
try {
|
|
4727
4748
|
await runWorkRemove(opts);
|
|
4728
4749
|
} catch (err) {
|
|
@@ -4734,7 +4755,7 @@ live addition remains on it.
|
|
|
4734
4755
|
}
|
|
4735
4756
|
});
|
|
4736
4757
|
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) => {
|
|
4737
|
-
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-
|
|
4758
|
+
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4738
4759
|
try {
|
|
4739
4760
|
await runWorkStatus(opts);
|
|
4740
4761
|
} catch (err) {
|
|
@@ -4746,7 +4767,7 @@ live addition remains on it.
|
|
|
4746
4767
|
}
|
|
4747
4768
|
});
|
|
4748
4769
|
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) => {
|
|
4749
|
-
const { runWorkList, WorkCommandError } = await import('./work-cmd-
|
|
4770
|
+
const { runWorkList, WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4750
4771
|
try {
|
|
4751
4772
|
await runWorkList(opts);
|
|
4752
4773
|
} catch (err) {
|
|
@@ -4767,7 +4788,7 @@ by a different key is refused; claiming again with the same key extends
|
|
|
4767
4788
|
it. --host is a label only.
|
|
4768
4789
|
`
|
|
4769
4790
|
).action(async (opts) => {
|
|
4770
|
-
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-
|
|
4791
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-CXALMILD.js');
|
|
4771
4792
|
try {
|
|
4772
4793
|
await runWorkClaim(opts);
|
|
4773
4794
|
} catch (err) {
|
|
@@ -4787,7 +4808,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
|
|
|
4787
4808
|
lease has expired, or a 403 if a different key holds it.
|
|
4788
4809
|
`
|
|
4789
4810
|
).action(async (opts) => {
|
|
4790
|
-
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-
|
|
4811
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-CXALMILD.js');
|
|
4791
4812
|
try {
|
|
4792
4813
|
await runWorkRenew(opts);
|
|
4793
4814
|
} catch (err) {
|
|
@@ -4819,7 +4840,7 @@ applies to a host's lease only. A later tool call in the session
|
|
|
4819
4840
|
takes the lease again.
|
|
4820
4841
|
`
|
|
4821
4842
|
).action(async (opts) => {
|
|
4822
|
-
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-
|
|
4843
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-CXALMILD.js');
|
|
4823
4844
|
try {
|
|
4824
4845
|
await runWorkRelease(opts);
|
|
4825
4846
|
} catch (err) {
|
|
@@ -4846,7 +4867,7 @@ Idempotent: declaring the same pull request twice is a no-op.
|
|
|
4846
4867
|
needs your own login; an agent session or a factory key is refused.
|
|
4847
4868
|
`
|
|
4848
4869
|
).action(async (number, opts) => {
|
|
4849
|
-
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-
|
|
4870
|
+
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-FEXMS6RH.js');
|
|
4850
4871
|
try {
|
|
4851
4872
|
await runWorkPr({ ...opts, number });
|
|
4852
4873
|
} catch (err) {
|
|
@@ -4871,8 +4892,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
|
|
|
4871
4892
|
Run it again after a change to the title or description.
|
|
4872
4893
|
`
|
|
4873
4894
|
).action(async (opts) => {
|
|
4874
|
-
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-
|
|
4875
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4895
|
+
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-EMGYJXVD.js');
|
|
4896
|
+
const { WorkCommandError } = await import('./work-cmd-COESFSHE.js');
|
|
4876
4897
|
try {
|
|
4877
4898
|
await runWorkOpenPr(opts);
|
|
4878
4899
|
} catch (err) {
|
|
@@ -4888,12 +4909,12 @@ function registerRunnerCommands(program2) {
|
|
|
4888
4909
|
const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
|
|
4889
4910
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
4890
4911
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
4891
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4892
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4893
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
4912
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-5QYIKYUP.js');
|
|
4913
|
+
const { start, RunnerStartError } = await import('./loop-QDV7T65M.js');
|
|
4914
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-CYCTH6NQ.js');
|
|
4894
4915
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4895
4916
|
try {
|
|
4896
|
-
const { realUpdateDeps } = await import('./real-deps-
|
|
4917
|
+
const { realUpdateDeps } = await import('./real-deps-QX5YH7FG.js');
|
|
4897
4918
|
await start(configPath, { update: realUpdateDeps(), leave: { exit: (code) => process.exit(code) }, fetchImpl: fetch });
|
|
4898
4919
|
} catch (err) {
|
|
4899
4920
|
if (err instanceof RunnerConfigError || err instanceof RunnerAlreadyRunningError || err instanceof RunnerStartError) {
|
|
@@ -4907,10 +4928,10 @@ function registerRunnerCommands(program2) {
|
|
|
4907
4928
|
"after",
|
|
4908
4929
|
"\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
|
|
4909
4930
|
).action(async () => {
|
|
4910
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4911
|
-
const { containerStart } = await import('./container-start-
|
|
4912
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4913
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
4931
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-5QYIKYUP.js');
|
|
4932
|
+
const { containerStart } = await import('./container-start-7WLZMPEI.js');
|
|
4933
|
+
const { start, RunnerStartError } = await import('./loop-QDV7T65M.js');
|
|
4934
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-CYCTH6NQ.js');
|
|
4914
4935
|
try {
|
|
4915
4936
|
const result = await containerStart({
|
|
4916
4937
|
env: process.env,
|
|
@@ -4928,8 +4949,8 @@ function registerRunnerCommands(program2) {
|
|
|
4928
4949
|
}
|
|
4929
4950
|
});
|
|
4930
4951
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
4931
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4932
|
-
const { runRunnerCheck } = await import('./check-
|
|
4952
|
+
const { defaultRunnerConfigPath } = await import('./config-5QYIKYUP.js');
|
|
4953
|
+
const { runRunnerCheck } = await import('./check-YEI6TCUH.js');
|
|
4933
4954
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4934
4955
|
const result = await runRunnerCheck(configPath);
|
|
4935
4956
|
if (!result.ok) {
|
|
@@ -4950,8 +4971,8 @@ function registerRunnerCommands(program2) {
|
|
|
4950
4971
|
`);
|
|
4951
4972
|
});
|
|
4952
4973
|
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) => {
|
|
4953
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4954
|
-
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-
|
|
4974
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-5QYIKYUP.js');
|
|
4975
|
+
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-GFY4QF72.js');
|
|
4955
4976
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4956
4977
|
if (opts.service !== true) {
|
|
4957
4978
|
for (const flag of ["print", "user", "unitName"]) {
|
|
@@ -4963,7 +4984,7 @@ function registerRunnerCommands(program2) {
|
|
|
4963
4984
|
}
|
|
4964
4985
|
try {
|
|
4965
4986
|
if (opts.service === true) {
|
|
4966
|
-
const { installServiceCommand } = await import('./command-
|
|
4987
|
+
const { installServiceCommand } = await import('./command-PY3C2E4B.js');
|
|
4967
4988
|
const result2 = await installServiceCommand({
|
|
4968
4989
|
configPath,
|
|
4969
4990
|
print: opts.print,
|
|
@@ -5018,8 +5039,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5018
5039
|
fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
|
|
5019
5040
|
return;
|
|
5020
5041
|
}
|
|
5021
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5022
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5042
|
+
const { defaultRunnerConfigPath } = await import('./config-5QYIKYUP.js');
|
|
5043
|
+
const { uninstallServiceCommand } = await import('./command-PY3C2E4B.js');
|
|
5023
5044
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5024
5045
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5025
5046
|
`);
|
|
@@ -5039,19 +5060,19 @@ With no terminal to ask on, it stops and says what to put in the config file.
|
|
|
5039
5060
|
With --agent claude, the queue commands start Claude Code instead of the
|
|
5040
5061
|
placeholder, and Claude's credential is read from stdin: a token from
|
|
5041
5062
|
\`claude setup-token\` (sk-ant-oat...) or an API key (sk-ant-api...). It is
|
|
5042
|
-
never printed, and is stored in the
|
|
5043
|
-
600.
|
|
5044
|
-
already in
|
|
5063
|
+
never printed, and is stored in the claude.env beside the config with mode
|
|
5064
|
+
600. Any Claude credential line in runner.env is removed. With nothing piped, a credential
|
|
5065
|
+
already in claude.env is used.
|
|
5045
5066
|
|
|
5046
5067
|
printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
|
|
5047
5068
|
`
|
|
5048
5069
|
).action(async (opts) => {
|
|
5049
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5050
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5051
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5052
|
-
const { detectMachine } = await import('./machine-
|
|
5053
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5054
|
-
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-
|
|
5070
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-5QYIKYUP.js');
|
|
5071
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-5LHTF72R.js');
|
|
5072
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-M4N2BY5A.js');
|
|
5073
|
+
const { detectMachine } = await import('./machine-PLNSGKNF.js');
|
|
5074
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-BTH5YPBC.js');
|
|
5075
|
+
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-EIB6WFPG.js');
|
|
5055
5076
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5056
5077
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
5057
5078
|
fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
|
|
@@ -5065,10 +5086,10 @@ already in runner.env is used.
|
|
|
5065
5086
|
try {
|
|
5066
5087
|
let credential;
|
|
5067
5088
|
if (agent !== void 0) {
|
|
5068
|
-
const { readPipedKey } = await import('./login-browser-
|
|
5089
|
+
const { readPipedKey } = await import('./login-browser-WSOSQH2T.js');
|
|
5069
5090
|
credential = credentialFromStdin(
|
|
5070
5091
|
await readPipedKey(process.stdin, {
|
|
5071
|
-
onWaiting: () => process.stderr.write(`runner init is waiting for Claude's credential on stdin; close stdin to use the one already in
|
|
5092
|
+
onWaiting: () => process.stderr.write(`runner init is waiting for Claude's credential on stdin; close stdin to use the one already in claude.env
|
|
5072
5093
|
`)
|
|
5073
5094
|
})
|
|
5074
5095
|
);
|
|
@@ -5082,7 +5103,7 @@ already in runner.env is used.
|
|
|
5082
5103
|
const chunks = [];
|
|
5083
5104
|
for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
|
|
5084
5105
|
const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
|
|
5085
|
-
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-
|
|
5106
|
+
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-AC6LTZDS.js');
|
|
5086
5107
|
const hostKey2 = await ensureHostKey2(configPath);
|
|
5087
5108
|
process.stdout.write(`host key ${hostKey2.fingerprint}
|
|
5088
5109
|
hooks: ${result2.hooks}
|
|
@@ -5117,13 +5138,13 @@ hooks: ${result2.hooks}
|
|
|
5117
5138
|
if (useVm) {
|
|
5118
5139
|
const { realLima } = await import('./lima-7NPCNGWT.js');
|
|
5119
5140
|
const { cpus, totalmem } = await import('os');
|
|
5120
|
-
const { resolvePackageVersion } = await import('./version-BWM6VLDI.js');
|
|
5141
|
+
const { resolvePackageVersion: resolvePackageVersion2 } = await import('./version-BWM6VLDI.js');
|
|
5121
5142
|
const result2 = await runVmInit(configPath, {
|
|
5122
5143
|
lima: realLima(),
|
|
5123
5144
|
home: homeFromEnv(),
|
|
5124
5145
|
hostCpus: cpus().length,
|
|
5125
5146
|
hostMemoryBytes: totalmem(),
|
|
5126
|
-
version:
|
|
5147
|
+
version: resolvePackageVersion2(),
|
|
5127
5148
|
cliPackage: opts.vmCliPackage,
|
|
5128
5149
|
agent,
|
|
5129
5150
|
credential,
|
|
@@ -5141,7 +5162,7 @@ hooks: ${result2.hooks}
|
|
|
5141
5162
|
const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
|
|
5142
5163
|
const created = makeKey === void 0 ? void 0 : await makeKey();
|
|
5143
5164
|
const result = writeRunnerInit(prepared, created);
|
|
5144
|
-
const { ensureHostKey } = await import('./host-key-
|
|
5165
|
+
const { ensureHostKey } = await import('./host-key-AC6LTZDS.js');
|
|
5145
5166
|
const hostKey = await ensureHostKey(configPath);
|
|
5146
5167
|
if (created !== void 0) {
|
|
5147
5168
|
process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
|
|
@@ -5169,7 +5190,7 @@ ${C.yellow}${result.note}${C.reset}
|
|
|
5169
5190
|
To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
|
|
5170
5191
|
`);
|
|
5171
5192
|
}
|
|
5172
|
-
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-
|
|
5193
|
+
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-GFY4QF72.js');
|
|
5173
5194
|
let installedLayout = false;
|
|
5174
5195
|
let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
|
|
5175
5196
|
try {
|
|
@@ -5201,7 +5222,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5201
5222
|
let serviceUp = false;
|
|
5202
5223
|
let restart;
|
|
5203
5224
|
if (installedLayout) {
|
|
5204
|
-
const { installServiceCommand } = await import('./command-
|
|
5225
|
+
const { installServiceCommand } = await import('./command-PY3C2E4B.js');
|
|
5205
5226
|
const service = await installServiceCommand({
|
|
5206
5227
|
configPath,
|
|
5207
5228
|
entryPath: process.argv[1] ?? "",
|
|
@@ -5229,7 +5250,7 @@ ${C.yellow}${restart}${C.reset}
|
|
|
5229
5250
|
`
|
|
5230
5251
|
Next:
|
|
5231
5252
|
` + steps.map((step, i) => ` ${i + 1}. ${step}
|
|
5232
|
-
`).join("") + (serviceUp && agent === void 0 ? ` The runner service claims nothing until step 1 is done and a Claude credential is in ${join(dirname(configPath), "
|
|
5253
|
+
`).join("") + (serviceUp && agent === void 0 ? ` The runner service claims nothing until step 1 is done and a Claude credential is in ${join(dirname(configPath), "claude.env")}; ${C.yellow}${cliInvocation()} runner status${C.reset} shows what it is doing.
|
|
5233
5254
|
` : serviceUp ? ` The runner service is running; ${C.yellow}${cliInvocation()} runner status${C.reset} shows what it is doing.
|
|
5234
5255
|
` : "")
|
|
5235
5256
|
);
|
|
@@ -5245,12 +5266,12 @@ Next:
|
|
|
5245
5266
|
"after",
|
|
5246
5267
|
"\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"
|
|
5247
5268
|
).action(async (opts) => {
|
|
5248
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5249
|
-
const { buildRepositoryImage, RecipeError } = await import('./build-
|
|
5269
|
+
const { defaultRunnerConfigPath } = await import('./config-5QYIKYUP.js');
|
|
5270
|
+
const { buildRepositoryImage, RecipeError } = await import('./build-5FRC3RKM.js');
|
|
5250
5271
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
5251
|
-
const { createDockerHost } = await import('./docker-
|
|
5252
|
-
const { builderSpec } = await import('./builder-
|
|
5253
|
-
const { loadRunnerConfig } = await import('./config-
|
|
5272
|
+
const { createDockerHost } = await import('./docker-ZTC4EIU4.js');
|
|
5273
|
+
const { builderSpec } = await import('./builder-4F2XNSFC.js');
|
|
5274
|
+
const { loadRunnerConfig } = await import('./config-5QYIKYUP.js');
|
|
5254
5275
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5255
5276
|
const loaded = (() => {
|
|
5256
5277
|
try {
|
|
@@ -5261,11 +5282,11 @@ Next:
|
|
|
5261
5282
|
})();
|
|
5262
5283
|
const memory = loaded?.build?.memory ?? "8g";
|
|
5263
5284
|
try {
|
|
5264
|
-
const { ensureRunnerIdentity } = await import('./runner-identity-
|
|
5285
|
+
const { ensureRunnerIdentity } = await import('./runner-identity-S3V6I4I3.js');
|
|
5265
5286
|
await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
|
|
5266
5287
|
console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
|
|
5267
5288
|
});
|
|
5268
|
-
const { imageTargetFor } = await import('./governing-source-
|
|
5289
|
+
const { imageTargetFor } = await import('./governing-source-B3M2U4BC.js');
|
|
5269
5290
|
const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
|
|
5270
5291
|
if (!target.ok) {
|
|
5271
5292
|
if (opts.json) {
|
|
@@ -5328,25 +5349,25 @@ Next:
|
|
|
5328
5349
|
}
|
|
5329
5350
|
});
|
|
5330
5351
|
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) => {
|
|
5331
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5332
|
-
const { requestStop } = await import('./loop-
|
|
5352
|
+
const { defaultRunnerConfigPath } = await import('./config-5QYIKYUP.js');
|
|
5353
|
+
const { requestStop } = await import('./loop-QDV7T65M.js');
|
|
5333
5354
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5334
|
-
const { runnerImageVersion } = await import('./image-tag-
|
|
5355
|
+
const { runnerImageVersion } = await import('./image-tag-SS7YKJHN.js');
|
|
5335
5356
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
5336
5357
|
});
|
|
5337
5358
|
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) => {
|
|
5338
|
-
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-
|
|
5339
|
-
const { jobsDir, runnerDir } = await import('./paths-
|
|
5340
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
5341
|
-
const { renderStatus } = await import('./status-
|
|
5342
|
-
const { readHousekeepingRecord } = await import('./record-
|
|
5359
|
+
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-5QYIKYUP.js');
|
|
5360
|
+
const { jobsDir, runnerDir } = await import('./paths-32DWGK35.js');
|
|
5361
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-QDV7T65M.js');
|
|
5362
|
+
const { renderStatus } = await import('./status-PWMPP4ES.js');
|
|
5363
|
+
const { readHousekeepingRecord } = await import('./record-N4WPZCGK.js');
|
|
5343
5364
|
const path2 = await import('path');
|
|
5344
5365
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5345
5366
|
const all = listJobFiles(configPath);
|
|
5346
5367
|
const housekeeping = readHousekeepingRecord(runnerDir(configPath));
|
|
5347
|
-
const { readPendingUpdate } = await import('./pending-
|
|
5368
|
+
const { readPendingUpdate } = await import('./pending-CSIY4Y2I.js');
|
|
5348
5369
|
const pendingUpdate = readPendingUpdate(runnerDir(configPath));
|
|
5349
|
-
const { readImageStatus } = await import('./image-tag-
|
|
5370
|
+
const { readImageStatus } = await import('./image-tag-SS7YKJHN.js');
|
|
5350
5371
|
const image = readImageStatus(runnerDir(configPath));
|
|
5351
5372
|
let host = "unknown";
|
|
5352
5373
|
let concurrency = 1;
|
|
@@ -5359,8 +5380,8 @@ Next:
|
|
|
5359
5380
|
const processState = runnerProcessState(configPath);
|
|
5360
5381
|
const service = await (async () => {
|
|
5361
5382
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
|
|
5362
|
-
const { inspectService, realInspectProbes } = await import('./inspect-
|
|
5363
|
-
const { DEFAULT_UNIT_NAME } = await import('./install-
|
|
5383
|
+
const { inspectService, realInspectProbes } = await import('./inspect-L7JIBK3Y.js');
|
|
5384
|
+
const { DEFAULT_UNIT_NAME } = await import('./install-35SAMY75.js');
|
|
5364
5385
|
const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
|
|
5365
5386
|
return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
|
|
5366
5387
|
})();
|
|
@@ -5397,9 +5418,9 @@ Next:
|
|
|
5397
5418
|
);
|
|
5398
5419
|
});
|
|
5399
5420
|
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) => {
|
|
5400
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5401
|
-
const { listJobFiles } = await import('./loop-
|
|
5402
|
-
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-
|
|
5421
|
+
const { defaultRunnerConfigPath } = await import('./config-5QYIKYUP.js');
|
|
5422
|
+
const { listJobFiles } = await import('./loop-QDV7T65M.js');
|
|
5423
|
+
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-X2IRDP5T.js');
|
|
5403
5424
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5404
5425
|
const item = parseTrackerNumber(itemArg);
|
|
5405
5426
|
if (item === void 0) {
|
|
@@ -5630,7 +5651,7 @@ caller from the bearer token, the gateway answers 401 without that header.
|
|
|
5630
5651
|
"after",
|
|
5631
5652
|
"\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"
|
|
5632
5653
|
).action(async (opts) => {
|
|
5633
|
-
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-
|
|
5654
|
+
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-IITCPAAR.js');
|
|
5634
5655
|
try {
|
|
5635
5656
|
await runMcpServe({ url: opts.url, appId: opts.appId });
|
|
5636
5657
|
} catch (err) {
|