@outerlayer/cli 0.28.4 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/README.md +9 -1
- package/dist/{agent-setup-IDF3EXM4.js → agent-setup-ZNYAXAWI.js} +14 -14
- package/dist/{artifact-link-cmd-LEI6EOZE.js → artifact-link-cmd-VY6OM7S5.js} +2 -2
- package/dist/{bridge-JN3VJ23L.js → bridge-FI7OF2H3.js} +2 -2
- package/dist/{build-JCYOHPLL.js → build-PXRDWSN4.js} +4 -4
- package/dist/build-info.json +1 -1
- package/dist/{builder-HCTVP2O7.js → builder-UNVHUZL7.js} +6 -6
- package/dist/{check-WJ4X2Q44.js → check-BKONE55O.js} +42 -41
- package/dist/{chunk-YYGXCRIW.js → chunk-2ZMJFGOZ.js} +1 -1
- package/dist/{chunk-JYVBEWBC.js → chunk-3F7RC3UA.js} +3 -3
- package/dist/{chunk-JZJLKTZT.js → chunk-3IDNLZPR.js} +5 -5
- package/dist/{chunk-QFNFBQCG.js → chunk-3YLHIXLR.js} +7 -7
- package/dist/{chunk-QBF462QH.js → chunk-44CGGHJF.js} +1 -1
- package/dist/{chunk-AV5MJY45.js → chunk-5HZDPOJI.js} +3 -3
- package/dist/{chunk-OO6OADZN.js → chunk-6CNNRO53.js} +3 -3
- package/dist/{chunk-MFI55TNI.js → chunk-7YSR636F.js} +22 -6
- package/dist/{chunk-JGML2VUN.js → chunk-AKKVPUGK.js} +1 -1
- package/dist/{chunk-KJIUFOC4.js → chunk-AM3GMWQK.js} +1 -1
- package/dist/{emit-finding-cmd-W2FU4CCF.js → chunk-B5CQJBZ2.js} +5 -23
- package/dist/{chunk-KBB3CQTW.js → chunk-B6OYEP3K.js} +5 -5
- package/dist/{chunk-ITAIEJ2T.js → chunk-BCWVTWS7.js} +4 -4
- package/dist/{chunk-O47BTZSN.js → chunk-D3LS7E7U.js} +1 -1
- package/dist/{chunk-2BZTGJII.js → chunk-DBELICD6.js} +7 -7
- package/dist/{chunk-NVUO52YW.js → chunk-DBENBGVF.js} +55 -47
- package/dist/{chunk-X7SFJZIG.js → chunk-DBRB26R7.js} +29 -10
- package/dist/{chunk-TG7FAHRP.js → chunk-DLY22KHX.js} +5 -5
- package/dist/{chunk-UHU7H57K.js → chunk-FTGJ3DPV.js} +202 -35
- package/dist/{chunk-HOU33DW5.js → chunk-G2RRBBOX.js} +1 -1
- package/dist/{chunk-VWFOKRYS.js → chunk-HJUGOAM7.js} +1 -1
- package/dist/{chunk-BUP5N3X6.js → chunk-HSUUTD4E.js} +1 -1
- package/dist/chunk-I3LTIAOR.js +11 -0
- package/dist/{chunk-UXLLWIA2.js → chunk-I3WLYIIW.js} +7 -7
- package/dist/{chunk-R7TMTFJP.js → chunk-IRF2FKB5.js} +1 -1
- package/dist/{chunk-M6NNXKRM.js → chunk-IRTZYDZO.js} +1 -1
- package/dist/{chunk-6P2Z5AUY.js → chunk-ISKWFUEQ.js} +360 -74
- package/dist/{chunk-QZBXLLTV.js → chunk-IWFYKNAO.js} +88 -2
- package/dist/{chunk-ERVZGWUR.js → chunk-JGOMMFNX.js} +7 -7
- package/dist/{chunk-6NFXOQKZ.js → chunk-LJIFCG4G.js} +1 -1
- package/dist/{chunk-WL3QF3QF.js → chunk-MBVSVQVH.js} +18 -16
- package/dist/{chunk-TOHKSZKI.js → chunk-MBZTX4V2.js} +7 -7
- package/dist/{chunk-VM6BX2WJ.js → chunk-PS3AHE6C.js} +5 -5
- package/dist/{chunk-5B7BEQPR.js → chunk-QDDPVBIS.js} +2 -2
- package/dist/{chunk-5Q4NDYQP.js → chunk-QQJGL7LG.js} +25 -24
- package/dist/{chunk-HWOU2HDH.js → chunk-QWJBTFAF.js} +1 -1
- package/dist/{chunk-OOUHNKKX.js → chunk-RJDJFRRY.js} +2 -2
- package/dist/{chunk-NMIYK2G2.js → chunk-SJ4DX2AD.js} +3 -3
- package/dist/{chunk-DWVAG73B.js → chunk-SOWXLIDN.js} +1 -1
- package/dist/{chunk-NKD5BNRX.js → chunk-TGUWHA27.js} +3 -3
- package/dist/{chunk-DIQN5SEL.js → chunk-TKJISBV6.js} +1 -1
- package/dist/{chunk-FTNCNEWE.js → chunk-TKX23NFV.js} +12 -12
- package/dist/{chunk-RXFKXZJS.js → chunk-TN2XMMD7.js} +1 -1
- package/dist/{chunk-TCBVV2JK.js → chunk-U5DC57AF.js} +3 -3
- package/dist/{chunk-DQYMQ47E.js → chunk-UAFMC3PL.js} +1 -1
- package/dist/{chunk-P2RWZCV7.js → chunk-V6IYYQU3.js} +2 -2
- package/dist/{chunk-DSKOHPXN.js → chunk-VL3CF4DZ.js} +1 -1
- package/dist/{chunk-N5EEEKT6.js → chunk-WHCDULC4.js} +7 -3
- package/dist/{chunk-QKXF7CLR.js → chunk-XB7TRWI2.js} +4 -4
- package/dist/{chunk-W3K6GBXY.js → chunk-XRRSFHKV.js} +2 -2
- package/dist/{chunk-SATUCMAJ.js → chunk-XTKH5VAC.js} +2 -2
- package/dist/{chunk-EZ3DZXUH.js → chunk-YVY3IVYV.js} +3 -3
- package/dist/{chunk-YTR435DO.js → chunk-ZNMVBHGJ.js} +3 -3
- package/dist/{chunk-RKOTJQVG.js → chunk-ZUOPFE22.js} +10 -4
- package/dist/{claude-launcher-LVYZ4YJI.js → claude-launcher-ZDZQXW76.js} +5 -5
- package/dist/{cli-X3JGBH2D.js → cli-6NI7WJFP.js} +189 -121
- package/dist/{command-NLWZT7KR.js → command-EFYTEHPF.js} +30 -30
- package/dist/{config-TNV5HHLO.js → config-VM6GKCCE.js} +2 -2
- package/dist/{connect-cmd-43IWARIV.js → connect-cmd-U2DY4OZU.js} +12 -12
- package/dist/{container-start-3MXIUNE2.js → container-start-C3CGPEXA.js} +32 -31
- package/dist/{context-cleanup-LTH77FC3.js → context-cleanup-D5EGQHQV.js} +3 -3
- package/dist/{control-plane-launch-TIK265OT.js → control-plane-launch-2AC4BTWL.js} +10 -10
- package/dist/{dist-JFVKLUHL.js → dist-IDP7Q53A.js} +2 -2
- package/dist/{docker-2IIRBQAB.js → docker-K442NGCS.js} +6 -6
- package/dist/{doctor-PKMAUDTU.js → doctor-RGTHY56D.js} +32 -32
- package/dist/{emit-artifact-cmd-RM2X3PBJ.js → emit-artifact-cmd-IK7GAS7V.js} +16 -16
- package/dist/{emit-cmd-QUABLVO6.js → emit-cmd-PSD7AAKJ.js} +6 -6
- package/dist/{emit-criteria-cmd-ZUI7DFND.js → emit-criteria-cmd-TGBRMX3P.js} +13 -13
- package/dist/emit-finding-cmd-KXCNLJLK.js +34 -0
- package/dist/{emit-result-cmd-JINMQ7QG.js → emit-result-cmd-WJBLCVDL.js} +52 -25
- package/dist/{emit-step-cmd-7FZWQTV3.js → emit-step-cmd-OYX5X65A.js} +14 -14
- package/dist/{exec-client-6ZJJ4KVH.js → exec-client-RMGGSTGR.js} +3 -3
- package/dist/findings-cmd-HFDOB6AC.js +135 -0
- package/dist/{fleet-readiness-3A67MUAU.js → fleet-readiness-5S2GCWZE.js} +12 -12
- package/dist/{governing-source-KQMKM5CI.js → governing-source-LVTBDQIM.js} +17 -17
- package/dist/{guest-init-A4HHI2UR.js → guest-init-O7INUZWE.js} +4 -4
- package/dist/{hook-fast-UJPAWDAO.js → hook-fast-A2N3PSXI.js} +1 -1
- package/dist/{host-key-NGRCMJZ7.js → host-key-HJ66C6MD.js} +3 -3
- package/dist/{image-tag-TEOKZVD5.js → image-tag-LLXOFXKP.js} +3 -3
- package/dist/index.js +4 -4
- package/dist/{init-Q6JV7IGF.js → init-NO5PJEPZ.js} +29 -29
- package/dist/{init-HENNITCI.js → init-VY6J7MAY.js} +29 -29
- package/dist/{init-cmd-GJR37XGU.js → init-cmd-FW67JGI7.js} +22 -22
- package/dist/{init-update-MZ4IRFC7.js → init-update-RN2PZ3MT.js} +21 -21
- package/dist/{install-NPTR35MG.js → install-GZ27NW6U.js} +4 -4
- package/dist/{install-cmd-4PXPAFQX.js → install-cmd-26OY23ZZ.js} +5 -5
- package/dist/{layout-BBTQPS6V.js → layout-3ISIED6A.js} +4 -4
- package/dist/{login-browser-WSOSQH2T.js → login-browser-NTVVDJF7.js} +2 -2
- package/dist/{logs-Z4L4I3OR.js → logs-7O3ELY35.js} +2 -2
- package/dist/loop-SY636F7D.js +81 -0
- package/dist/{machine-HZGUBOUH.js → machine-IJ2QP3FO.js} +25 -25
- package/dist/{machine-skills-O7W6NMWB.js → machine-skills-I4DB2CP3.js} +4 -4
- package/dist/{mcp-serve-cmd-NQM2WDYI.js → mcp-serve-cmd-AT7G6J5V.js} +4 -4
- package/dist/{paths-2VSGK6E2.js → paths-32THAYBB.js} +2 -2
- package/dist/{pending-SFZ2AYSK.js → pending-6CMYQHFL.js} +3 -3
- package/dist/{pidfile-3FT5OLUE.js → pidfile-3BH6WPOA.js} +3 -3
- package/dist/{record-7SSRLSI2.js → record-WHPJCC6Y.js} +3 -3
- package/dist/{runner-env-2Z2DVSUJ.js → runner-env-6Q45P3IE.js} +5 -5
- package/dist/{runner-identity-B37HHOZR.js → runner-identity-KH7HADNF.js} +6 -6
- package/dist/{runner-key-UP5YBUHR.js → runner-key-L6B5CNDG.js} +29 -29
- package/dist/{session-sender-7MSVJZ6Q.js → session-sender-N4DOGRTN.js} +17 -17
- package/dist/{spec-cmd-KAQ7MX4O.js → spec-cmd-7KOT4IQO.js} +14 -14
- package/dist/{starter-pack-5SOT5V4I.js → starter-pack-2WFNRGFA.js} +5 -5
- package/dist/{status-2ICTDC2R.js → status-LOQ2RHWX.js} +33 -32
- package/dist/{sync-cmd-7K3WVQKO.js → sync-cmd-E5VRZ5DK.js} +16 -16
- package/dist/{watch-NCYESLO2.js → watch-P6XAYDM2.js} +16 -16
- package/dist/{work-claim-cmd-IOUEHYIY.js → work-claim-cmd-7YQ5CJ3R.js} +17 -17
- package/dist/{work-cmd-FOI74X5B.js → work-cmd-RRHDQDOX.js} +14 -14
- package/dist/{work-comment-cmd-3C44H4CG.js → work-comment-cmd-XYAPMQYC.js} +14 -14
- package/dist/{work-logs-cmd-YGAWCX3X.js → work-logs-cmd-TTLUEWVX.js} +14 -14
- package/dist/{work-open-pr-cmd-HUG5HAVC.js → work-open-pr-cmd-A63YGIBW.js} +15 -15
- package/dist/{work-pr-cmd-L2EDOYXH.js → work-pr-cmd-HOS5ZHJI.js} +14 -14
- package/dist/{work-stop-cmd-GGDVKC67.js → work-stop-cmd-7KIKIZPO.js} +14 -14
- package/package.json +3 -3
- package/skill-pack/maintained/outerlayer-amend/SKILL.md +40 -39
- package/skill-pack/maintained/outerlayer-build/SKILL.md +9 -10
- package/skill-pack/maintained/outerlayer-build/references/criteria-judge.md +15 -12
- package/skill-pack/maintained/outerlayer-build/references/release.md +11 -6
- package/skill-pack/maintained/outerlayer-findings/SKILL.md +14 -10
- package/skill-pack/shipped.json +2 -0
- package/skill-pack/template/build/SKILL.md +3 -1
- package/skill-pack/validators/acceptance-criteria.yaml +7 -2
- package/dist/loop-DO46LFUH.js +0 -80
|
@@ -1,44 +1,44 @@
|
|
|
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-
|
|
3
|
+
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-TKX23NFV.js';
|
|
4
|
+
import './chunk-BCWVTWS7.js';
|
|
5
|
+
import './chunk-MBZTX4V2.js';
|
|
6
6
|
import './chunk-KT4CN6OU.js';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import { verifiedTrackerNames, TRACKERS } from './chunk-
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
13
|
-
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-
|
|
14
|
-
import './chunk-
|
|
7
|
+
import './chunk-XTKH5VAC.js';
|
|
8
|
+
import { verifiedTrackerNames, TRACKERS } from './chunk-DBRB26R7.js';
|
|
9
|
+
import './chunk-SJ4DX2AD.js';
|
|
10
|
+
import './chunk-3YLHIXLR.js';
|
|
11
|
+
import './chunk-HSUUTD4E.js';
|
|
12
|
+
import './chunk-FTGJ3DPV.js';
|
|
13
|
+
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-QDDPVBIS.js';
|
|
14
|
+
import './chunk-G2RRBBOX.js';
|
|
15
15
|
import './chunk-G2JWZDFA.js';
|
|
16
16
|
import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
|
|
17
|
-
import './chunk-
|
|
18
|
-
import './chunk-
|
|
17
|
+
import './chunk-V6IYYQU3.js';
|
|
18
|
+
import './chunk-AM3GMWQK.js';
|
|
19
19
|
import './chunk-PJDQPF5N.js';
|
|
20
|
-
import './chunk-
|
|
21
|
-
import './chunk-
|
|
22
|
-
import './chunk-
|
|
23
|
-
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-
|
|
20
|
+
import './chunk-IRF2FKB5.js';
|
|
21
|
+
import './chunk-SOWXLIDN.js';
|
|
22
|
+
import './chunk-WHCDULC4.js';
|
|
23
|
+
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-RJDJFRRY.js';
|
|
24
24
|
import './chunk-ZJSNLVCE.js';
|
|
25
25
|
import './chunk-I7RZHMXW.js';
|
|
26
26
|
import './chunk-BKO6JEZI.js';
|
|
27
27
|
import './chunk-HCVLP7XA.js';
|
|
28
28
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
29
|
-
import './chunk-
|
|
30
|
-
import './chunk-
|
|
29
|
+
import './chunk-UAFMC3PL.js';
|
|
30
|
+
import './chunk-AKKVPUGK.js';
|
|
31
31
|
import './chunk-5BHIBJDA.js';
|
|
32
32
|
import './chunk-CDDED64E.js';
|
|
33
33
|
import { resolveVersion, resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
34
34
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
35
35
|
import { cliInvocation, packageRunnerOf } from './chunk-CRB3POP4.js';
|
|
36
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';
|
|
37
|
-
import './chunk-
|
|
37
|
+
import './chunk-HJUGOAM7.js';
|
|
38
38
|
import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
|
|
39
39
|
import { removeJournalHooks, removePreCommitGuardHook } from './chunk-TUSYOL2O.js';
|
|
40
|
-
import './chunk-
|
|
41
|
-
import './chunk-
|
|
40
|
+
import './chunk-ZUOPFE22.js';
|
|
41
|
+
import './chunk-IWFYKNAO.js';
|
|
42
42
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
43
43
|
import './chunk-XD4ZCMA4.js';
|
|
44
44
|
import './chunk-MESOOLF4.js';
|
|
@@ -3658,14 +3658,14 @@ function apiKeyOption() {
|
|
|
3658
3658
|
return new Option("--api-key <key>", `deprecated: use \`${cliInvocation()} login\` or OUTERLAYER_API_KEY`).hideHelp();
|
|
3659
3659
|
}
|
|
3660
3660
|
async function installStarterPackInRepo() {
|
|
3661
|
-
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-
|
|
3661
|
+
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-2WFNRGFA.js');
|
|
3662
3662
|
const cwd = process.cwd();
|
|
3663
3663
|
let repoRoot = cwd;
|
|
3664
3664
|
try {
|
|
3665
3665
|
repoRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim() || cwd;
|
|
3666
3666
|
} catch {
|
|
3667
3667
|
}
|
|
3668
|
-
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-
|
|
3668
|
+
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-3ISIED6A.js');
|
|
3669
3669
|
const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer"));
|
|
3670
3670
|
const result = installStarterPack({ repoRoot, base: fresh ? ".agents/skills" : skillsBaseFor(repoRoot) });
|
|
3671
3671
|
if (fresh) declareAgentsMdLayout(repoRoot);
|
|
@@ -3791,7 +3791,7 @@ ${starter.output}`),
|
|
|
3791
3791
|
}
|
|
3792
3792
|
}
|
|
3793
3793
|
async function installMachineSkillsForSetup() {
|
|
3794
|
-
const { setupMachineSkills } = await import('./machine-skills-
|
|
3794
|
+
const { setupMachineSkills } = await import('./machine-skills-I4DB2CP3.js');
|
|
3795
3795
|
const result = setupMachineSkills(homeFromEnv());
|
|
3796
3796
|
for (const failure of result.failures) process.stderr.write(`${C.yellow}!${C.reset} Could not write a maintained skill: ${failure}
|
|
3797
3797
|
`);
|
|
@@ -3799,8 +3799,8 @@ async function installMachineSkillsForSetup() {
|
|
|
3799
3799
|
` : "";
|
|
3800
3800
|
}
|
|
3801
3801
|
async function realConnectDepsForCwd() {
|
|
3802
|
-
const { realConnectDeps } = await import('./connect-cmd-
|
|
3803
|
-
const { resolveRepoIdentity } = await import('./dist-
|
|
3802
|
+
const { realConnectDeps } = await import('./connect-cmd-U2DY4OZU.js');
|
|
3803
|
+
const { resolveRepoIdentity } = await import('./dist-IDP7Q53A.js');
|
|
3804
3804
|
return {
|
|
3805
3805
|
...realConnectDeps(),
|
|
3806
3806
|
home: homeFromEnv(),
|
|
@@ -3817,7 +3817,7 @@ function buildProgram(argv = process.argv) {
|
|
|
3817
3817
|
const program2 = new Command();
|
|
3818
3818
|
program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", async (_root, command) => {
|
|
3819
3819
|
if (command.opts().apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
|
|
3820
|
-
const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-
|
|
3820
|
+
const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-I4DB2CP3.js');
|
|
3821
3821
|
const names = [];
|
|
3822
3822
|
for (let at = command; at?.parent; at = at.parent) names.push(at.name());
|
|
3823
3823
|
if (!machineRefreshSkipped(names, command._hidden === true, argv)) refreshMachineSkills(homeFromEnv());
|
|
@@ -3874,8 +3874,8 @@ build, ../outerlayer-build/SKILL.md becomes ~/.agents/skills/outerlayer-build/SK
|
|
|
3874
3874
|
what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
|
|
3875
3875
|
).action(async (opts) => {
|
|
3876
3876
|
if (opts.update || opts.dryRun) {
|
|
3877
|
-
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-
|
|
3878
|
-
const { fleetReadiness } = await import('./fleet-readiness-
|
|
3877
|
+
const { runInitUpdateWithFleet, formatInitUpdate, updateFlagProblem } = await import('./init-update-RN2PZ3MT.js');
|
|
3878
|
+
const { fleetReadiness } = await import('./fleet-readiness-5S2GCWZE.js');
|
|
3879
3879
|
const problem = updateFlagProblem(opts);
|
|
3880
3880
|
if (problem !== void 0) {
|
|
3881
3881
|
fail(problem);
|
|
@@ -3892,7 +3892,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3892
3892
|
}
|
|
3893
3893
|
let starterTemplate;
|
|
3894
3894
|
if (opts.template !== void 0) {
|
|
3895
|
-
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-
|
|
3895
|
+
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-2WFNRGFA.js');
|
|
3896
3896
|
try {
|
|
3897
3897
|
assertKnownTemplate(opts.template);
|
|
3898
3898
|
} catch (err) {
|
|
@@ -3926,13 +3926,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3926
3926
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3927
3927
|
`);
|
|
3928
3928
|
}
|
|
3929
|
-
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-
|
|
3929
|
+
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-FW67JGI7.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3930
3930
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3931
3931
|
else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
|
|
3932
3932
|
return;
|
|
3933
3933
|
}
|
|
3934
3934
|
await installMachineSkillsForSetup();
|
|
3935
|
-
const { runInitCommand } = await import('./init-cmd-
|
|
3935
|
+
const { runInitCommand } = await import('./init-cmd-FW67JGI7.js');
|
|
3936
3936
|
const code = await runInitCommand(
|
|
3937
3937
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3938
3938
|
{
|
|
@@ -3944,7 +3944,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3944
3944
|
return { ok, text, detail };
|
|
3945
3945
|
},
|
|
3946
3946
|
runAgentSetup: async () => {
|
|
3947
|
-
const { runAgentSetup } = await import('./agent-setup-
|
|
3947
|
+
const { runAgentSetup } = await import('./agent-setup-ZNYAXAWI.js');
|
|
3948
3948
|
return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
|
|
3949
3949
|
},
|
|
3950
3950
|
runDoctorChecks: gatherDoctorChecks,
|
|
@@ -3953,7 +3953,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3953
3953
|
shellPath: process.env.SHELL,
|
|
3954
3954
|
interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
|
|
3955
3955
|
ask: async () => {
|
|
3956
|
-
const { promptOnTerminal } = await import('./connect-cmd-
|
|
3956
|
+
const { promptOnTerminal } = await import('./connect-cmd-U2DY4OZU.js');
|
|
3957
3957
|
const answer = await promptOnTerminal({
|
|
3958
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.`,
|
|
3959
3959
|
options: [
|
|
@@ -3992,7 +3992,7 @@ linked (true, false, or null when it could not be checked) and, when false,
|
|
|
3992
3992
|
linkUrl.
|
|
3993
3993
|
`
|
|
3994
3994
|
).action(async (opts) => {
|
|
3995
|
-
const { runConnectCommand } = await import('./connect-cmd-
|
|
3995
|
+
const { runConnectCommand } = await import('./connect-cmd-U2DY4OZU.js');
|
|
3996
3996
|
const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
|
|
3997
3997
|
stdout: process.stdout,
|
|
3998
3998
|
stderr: process.stderr
|
|
@@ -4031,7 +4031,7 @@ Every later command reads the saved file, so none of them needs a key on
|
|
|
4031
4031
|
its command line. A saved key is checked for real on the first \`sync\`.
|
|
4032
4032
|
`
|
|
4033
4033
|
).action(async (opts) => {
|
|
4034
|
-
const { runLoginCommand, realLoginDeps } = await import('./login-browser-
|
|
4034
|
+
const { runLoginCommand, realLoginDeps } = await import('./login-browser-NTVVDJF7.js');
|
|
4035
4035
|
const code = await runLoginCommand(
|
|
4036
4036
|
{
|
|
4037
4037
|
browser: opts.browser !== false,
|
|
@@ -4064,13 +4064,13 @@ code is 1: revoke the token on /profile/security.
|
|
|
4064
4064
|
"\nIncremental: only sessions newer than the last checkpoint ship. The tier\nis applied on this machine before anything leaves it; `--dry-run` prints\nexactly what would. The hook-triggered background sync runs `--quiet`.\nExit 2 means the server rejected at least one session.\n"
|
|
4065
4065
|
).action(async (opts) => {
|
|
4066
4066
|
if (opts.link !== void 0) {
|
|
4067
|
-
const { lookupArtifactLink } = await import('./artifact-link-cmd-
|
|
4067
|
+
const { lookupArtifactLink } = await import('./artifact-link-cmd-VY6OM7S5.js');
|
|
4068
4068
|
const found = lookupArtifactLink(opts.link);
|
|
4069
4069
|
if (found.ok) process.stdout.write(found.url + "\n");
|
|
4070
4070
|
else fail(found.reason);
|
|
4071
4071
|
return;
|
|
4072
4072
|
}
|
|
4073
|
-
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-
|
|
4073
|
+
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-E5VRZ5DK.js');
|
|
4074
4074
|
try {
|
|
4075
4075
|
const result = await runSync({
|
|
4076
4076
|
url: opts.url,
|
|
@@ -4101,7 +4101,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4101
4101
|
if (invokedCommandToken(argv) === "watch") {
|
|
4102
4102
|
warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
|
|
4103
4103
|
}
|
|
4104
|
-
const { runWatch } = await import('./watch-
|
|
4104
|
+
const { runWatch } = await import('./watch-P6XAYDM2.js');
|
|
4105
4105
|
await runWatch({ once: opts.once });
|
|
4106
4106
|
});
|
|
4107
4107
|
program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
|
|
@@ -4162,7 +4162,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4162
4162
|
}
|
|
4163
4163
|
});
|
|
4164
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) => {
|
|
4165
|
-
const { runVmExec } = await import('./exec-client-
|
|
4165
|
+
const { runVmExec } = await import('./exec-client-RMGGSTGR.js');
|
|
4166
4166
|
const env = {};
|
|
4167
4167
|
for (const entry of opts.env) {
|
|
4168
4168
|
const eq = entry.indexOf("=");
|
|
@@ -4191,7 +4191,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4191
4191
|
process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
|
|
4192
4192
|
});
|
|
4193
4193
|
program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
|
|
4194
|
-
const { runSessionSender } = await import('./session-sender-
|
|
4194
|
+
const { runSessionSender } = await import('./session-sender-N4DOGRTN.js');
|
|
4195
4195
|
try {
|
|
4196
4196
|
await runSessionSender();
|
|
4197
4197
|
} catch (err) {
|
|
@@ -4199,7 +4199,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4199
4199
|
}
|
|
4200
4200
|
});
|
|
4201
4201
|
program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
|
|
4202
|
-
const { realGuestHost, runGuestInit } = await import('./guest-init-
|
|
4202
|
+
const { realGuestHost, runGuestInit } = await import('./guest-init-O7INUZWE.js');
|
|
4203
4203
|
const { readFileSync: readFileSync3 } = await import('fs');
|
|
4204
4204
|
try {
|
|
4205
4205
|
runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
|
|
@@ -4208,7 +4208,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4208
4208
|
}
|
|
4209
4209
|
});
|
|
4210
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) => {
|
|
4211
|
-
const { startBridgeForward } = await import('./bridge-
|
|
4211
|
+
const { startBridgeForward } = await import('./bridge-FI7OF2H3.js');
|
|
4212
4212
|
try {
|
|
4213
4213
|
await startBridgeForward(opts);
|
|
4214
4214
|
} catch (err) {
|
|
@@ -4234,7 +4234,7 @@ async function runCli(processArgv) {
|
|
|
4234
4234
|
await buildProgram(argv).parseAsync(argv);
|
|
4235
4235
|
}
|
|
4236
4236
|
async function compileContext(opts) {
|
|
4237
|
-
const { runEmit, EmitError } = await import('./emit-cmd-
|
|
4237
|
+
const { runEmit, EmitError } = await import('./emit-cmd-PSD7AAKJ.js');
|
|
4238
4238
|
try {
|
|
4239
4239
|
const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
|
|
4240
4240
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
@@ -4247,7 +4247,7 @@ async function compileContext(opts) {
|
|
|
4247
4247
|
}
|
|
4248
4248
|
}
|
|
4249
4249
|
function registerEmitCommands(program2) {
|
|
4250
|
-
const emitCmd = program2.command("emit").enablePositionalOptions().description("Record evidence for a work item: a named check result").argument("[name]", "the check name a validator declares (e.g. smoke.pass)").option("--link <url>", "proof link, usually the CI run URL").option("--body <text>", "one sentence recording your judgment").option("--body-file <path>", "read the sentence from a file; - reads standard input").option("--result <pass|fail>", "check outcome (default: pass)").option("--item <number>", "work item to record on directly, by its number in this factory").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)").addOption(new Option("--check", "deprecated: use `context emit --check`").hideHelp()).addOption(new Option("--dir <path>", "deprecated: use `context emit --dir`").hideHelp()).addHelpText(
|
|
4250
|
+
const emitCmd = program2.command("emit").enablePositionalOptions().description("Record evidence for a work item: a named check result").argument("[name]", "the check name a validator declares (e.g. smoke.pass)").option("--link <url>", "proof link, usually the CI run URL").option("--body <text>", "one sentence recording your judgment").option("--body-file <path>", "read the sentence from a file; - reads standard input").option("--items <path>", "check items to record, as a JSON array; - reads standard input").option("--result <pass|fail>", "check outcome (default: pass, or fail when a check item fails)").option("--item <number>", "work item to record on directly, by its number in this factory").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)").addOption(new Option("--check", "deprecated: use `context emit --check`").hideHelp()).addOption(new Option("--dir <path>", "deprecated: use `context emit --dir`").hideHelp()).addHelpText(
|
|
4251
4251
|
"after",
|
|
4252
4252
|
`
|
|
4253
4253
|
${cliInvocation()} emit smoke.pass --item 412 --link https://ci.example.com/run/42
|
|
@@ -4262,6 +4262,11 @@ least one of the two. Run from inside a session, the check is stored as
|
|
|
4262
4262
|
the session's; a session cannot record over a person's fail. With
|
|
4263
4263
|
nothing to attach it to, the command refuses.
|
|
4264
4264
|
|
|
4265
|
+
--items names a JSON array of check items, one per thing the check judged:
|
|
4266
|
+
[{"id": "AC-12-03", "criterion": "AC-12-03", "result": "fail", "reason": "..."}]
|
|
4267
|
+
A check item's result is pass, fail or skipped; \`criterion\` joins it to
|
|
4268
|
+
that acceptance criterion. A failing check item fails the check.
|
|
4269
|
+
|
|
4265
4270
|
Who recorded a check is decided by your API key, never by what you send:
|
|
4266
4271
|
a key bound to your membership records it as yours, and nothing automated
|
|
4267
4272
|
can then clear it.
|
|
@@ -4281,13 +4286,14 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
|
|
|
4281
4286
|
await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
|
|
4282
4287
|
return;
|
|
4283
4288
|
}
|
|
4284
|
-
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-
|
|
4289
|
+
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-WJBLCVDL.js');
|
|
4285
4290
|
try {
|
|
4286
4291
|
const result = await runEmitResult({
|
|
4287
4292
|
name,
|
|
4288
4293
|
link: opts.link,
|
|
4289
4294
|
body: opts.body,
|
|
4290
4295
|
bodyFile: opts.bodyFile,
|
|
4296
|
+
itemsFile: opts.items,
|
|
4291
4297
|
result: opts.result,
|
|
4292
4298
|
item: opts.item,
|
|
4293
4299
|
json: opts.json,
|
|
@@ -4331,7 +4337,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
|
|
|
4331
4337
|
locally so it never uploads. One correction can retire several duplicates.
|
|
4332
4338
|
`
|
|
4333
4339
|
).action(async (file, opts) => {
|
|
4334
|
-
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-
|
|
4340
|
+
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-IK7GAS7V.js');
|
|
4335
4341
|
let pr;
|
|
4336
4342
|
if (opts.pr !== void 0) {
|
|
4337
4343
|
pr = parseTrackerNumber(opts.pr);
|
|
@@ -4390,7 +4396,7 @@ recent events with their ids. --find <text> searches all of them.
|
|
|
4390
4396
|
item that session was launched for is used automatically.
|
|
4391
4397
|
`
|
|
4392
4398
|
).action(async (opts) => {
|
|
4393
|
-
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4399
|
+
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-KXCNLJLK.js');
|
|
4394
4400
|
try {
|
|
4395
4401
|
refuseRemovedFindingFlags(opts);
|
|
4396
4402
|
const result = await runEmitFinding({
|
|
@@ -4457,7 +4463,7 @@ the whole batch. "untimed": true records one with no time on purpose.
|
|
|
4457
4463
|
that session was launched for is used automatically.
|
|
4458
4464
|
`
|
|
4459
4465
|
).action(async (file, opts) => {
|
|
4460
|
-
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4466
|
+
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-KXCNLJLK.js');
|
|
4461
4467
|
try {
|
|
4462
4468
|
const result = await runEmitFindings({
|
|
4463
4469
|
file,
|
|
@@ -4492,7 +4498,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
|
|
|
4492
4498
|
the step, the command prints why and exits 1.
|
|
4493
4499
|
`
|
|
4494
4500
|
).action(async (name, opts) => {
|
|
4495
|
-
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-
|
|
4501
|
+
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-OYX5X65A.js');
|
|
4496
4502
|
try {
|
|
4497
4503
|
await runEmitStep({
|
|
4498
4504
|
name,
|
|
@@ -4535,7 +4541,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
|
|
|
4535
4541
|
${cliInvocation()} emit criteria acceptance/412-login.md --item 412
|
|
4536
4542
|
`
|
|
4537
4543
|
).action(async (file, opts) => {
|
|
4538
|
-
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-
|
|
4544
|
+
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-TGBRMX3P.js');
|
|
4539
4545
|
try {
|
|
4540
4546
|
const result = await runEmitCriteria({
|
|
4541
4547
|
file,
|
|
@@ -4559,9 +4565,9 @@ function registerSpecCommands(program2) {
|
|
|
4559
4565
|
const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
|
|
4560
4566
|
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)");
|
|
4561
4567
|
const run = async (action) => {
|
|
4562
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4568
|
+
const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4563
4569
|
try {
|
|
4564
|
-
await action(await import('./spec-cmd-
|
|
4570
|
+
await action(await import('./spec-cmd-7KOT4IQO.js'));
|
|
4565
4571
|
} catch (err) {
|
|
4566
4572
|
if (err instanceof WorkCommandError) {
|
|
4567
4573
|
fail(err.message);
|
|
@@ -4584,6 +4590,68 @@ function registerSpecCommands(program2) {
|
|
|
4584
4590
|
).action((key, opts) => run((spec) => spec.runSpecEdit({ ...opts, key })));
|
|
4585
4591
|
}
|
|
4586
4592
|
function registerWorkCommands(program2) {
|
|
4593
|
+
const findingsCmd = program2.command("findings").description("Read the problems a fix item covers and record fix results");
|
|
4594
|
+
findingsCmd.command("show").description("List the problems this work item covers, with their reports and results").option("--item <number>", "work item to read, by its number in this factory").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)").addHelpText(
|
|
4595
|
+
"after",
|
|
4596
|
+
`
|
|
4597
|
+
${cliInvocation()} findings show
|
|
4598
|
+
${cliInvocation()} findings show --item 412
|
|
4599
|
+
|
|
4600
|
+
Prints each problem the item covers with its id, its reports and its result.
|
|
4601
|
+
--item names the work item; without it, inside a recorded session, the item that
|
|
4602
|
+
session was launched for is used.
|
|
4603
|
+
`
|
|
4604
|
+
).action(async (opts) => {
|
|
4605
|
+
const { runFindingsShow, FindingsCommandError } = await import('./findings-cmd-HFDOB6AC.js');
|
|
4606
|
+
try {
|
|
4607
|
+
const result = await runFindingsShow({
|
|
4608
|
+
item: opts.item,
|
|
4609
|
+
json: opts.json,
|
|
4610
|
+
url: opts.url,
|
|
4611
|
+
apiKey: opts.apiKey,
|
|
4612
|
+
appId: opts.appId
|
|
4613
|
+
});
|
|
4614
|
+
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
4615
|
+
} catch (err) {
|
|
4616
|
+
if (err instanceof FindingsCommandError) {
|
|
4617
|
+
fail(err.message);
|
|
4618
|
+
return;
|
|
4619
|
+
}
|
|
4620
|
+
throw err;
|
|
4621
|
+
}
|
|
4622
|
+
});
|
|
4623
|
+
findingsCmd.command("result <problem>").description("Record whether the fix resolved one covered problem").option("--fixed", "the fix resolved the problem").option("--not-fixed", "the fix did not resolve the problem").option("--note <text>", "what you did, or why you could not fix the problem").option("--item <number>", "work item to record on, by its number in this factory").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)").addHelpText(
|
|
4624
|
+
"after",
|
|
4625
|
+
`
|
|
4626
|
+
${cliInvocation()} findings result 0b6f3e1a-1111-4222-8333-444455556666 --fixed --note "Fixed the hook path."
|
|
4627
|
+
${cliInvocation()} findings result <problem id> --not-fixed --note "The cause is in another repository."
|
|
4628
|
+
|
|
4629
|
+
Give exactly one of --fixed and --not-fixed, and a --note. Run it again for the same
|
|
4630
|
+
problem to replace the earlier result. A problem the item does not cover is refused.
|
|
4631
|
+
`
|
|
4632
|
+
).action(async (problem, opts) => {
|
|
4633
|
+
const { runFindingsResult, FindingsCommandError } = await import('./findings-cmd-HFDOB6AC.js');
|
|
4634
|
+
try {
|
|
4635
|
+
const result = await runFindingsResult({
|
|
4636
|
+
problem,
|
|
4637
|
+
fixed: opts.fixed,
|
|
4638
|
+
notFixed: opts.notFixed,
|
|
4639
|
+
note: opts.note,
|
|
4640
|
+
item: opts.item,
|
|
4641
|
+
json: opts.json,
|
|
4642
|
+
url: opts.url,
|
|
4643
|
+
apiKey: opts.apiKey,
|
|
4644
|
+
appId: opts.appId
|
|
4645
|
+
});
|
|
4646
|
+
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
4647
|
+
} catch (err) {
|
|
4648
|
+
if (err instanceof FindingsCommandError) {
|
|
4649
|
+
fail(err.message);
|
|
4650
|
+
return;
|
|
4651
|
+
}
|
|
4652
|
+
throw err;
|
|
4653
|
+
}
|
|
4654
|
+
});
|
|
4587
4655
|
const workCmd = program2.command("work").description("Start, remove, or read what the factory is working on (the Work page)");
|
|
4588
4656
|
workCmd.command("build").description("Start work on an item: a host builds it, or with --local you do").option("--issue <number>", "issue number, or a Linear/Jira key like ENG-123 (adds it to Work first)").option(TRACKER_OPTION_FLAG, "tracker for a keyed --issue \u2014 required if more than one is connected").option("--item <number>", "the item's own number inside this factory \u2014 must already exist").option("--local", "you build it in a session you start; no host takes it").option("--repo <owner/name>", "repository \u2014 the checkout's remote for a number, never guessed for a key").option("--note <text>", "a short note for people to read; the agent never sees it").option("--instructions <text>", "text the build's agent receives, up to 2000 characters; not with --local").option("--session-id <id>", "session id to record as-is, skipping detection").option("--retry <count>", "retries after a gateway answer worth trying again").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)").addHelpText(
|
|
4589
4657
|
"after",
|
|
@@ -4603,7 +4671,7 @@ takes it, and prints the line that starts your session on it. That
|
|
|
4603
4671
|
session links itself and holds the item's lease while it works.
|
|
4604
4672
|
`
|
|
4605
4673
|
).action(async (opts) => {
|
|
4606
|
-
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-
|
|
4674
|
+
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4607
4675
|
try {
|
|
4608
4676
|
await runWorkBuild(opts);
|
|
4609
4677
|
} catch (err) {
|
|
@@ -4626,7 +4694,7 @@ renews that session's own 20-minute lease, unless --no-lease or
|
|
|
4626
4694
|
--ended is given, or another worker already holds a live one.
|
|
4627
4695
|
`
|
|
4628
4696
|
).action(async (number, opts) => {
|
|
4629
|
-
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-
|
|
4697
|
+
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4630
4698
|
try {
|
|
4631
4699
|
await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
|
|
4632
4700
|
} catch (err) {
|
|
@@ -4650,8 +4718,8 @@ criterion's new proof; --ready hands the thread back to a person. At
|
|
|
4650
4718
|
most one action flag may be given.
|
|
4651
4719
|
`
|
|
4652
4720
|
).action(async (opts) => {
|
|
4653
|
-
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4654
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4721
|
+
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-XYAPMQYC.js');
|
|
4722
|
+
const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4655
4723
|
try {
|
|
4656
4724
|
await runWorkComment(opts);
|
|
4657
4725
|
} catch (err) {
|
|
@@ -4672,8 +4740,8 @@ criterion that carries proof or a comment, each with who is waiting
|
|
|
4672
4740
|
on whom next.
|
|
4673
4741
|
`
|
|
4674
4742
|
).action(async (opts) => {
|
|
4675
|
-
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4676
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4743
|
+
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-XYAPMQYC.js');
|
|
4744
|
+
const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4677
4745
|
try {
|
|
4678
4746
|
await runWorkThreads(opts);
|
|
4679
4747
|
} catch (err) {
|
|
@@ -4697,8 +4765,8 @@ still running, or that an older runner released, has no log and the
|
|
|
4697
4765
|
command exits 1.
|
|
4698
4766
|
`
|
|
4699
4767
|
).action(async (opts) => {
|
|
4700
|
-
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-
|
|
4701
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4768
|
+
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-TTLUEWVX.js');
|
|
4769
|
+
const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4702
4770
|
try {
|
|
4703
4771
|
await runWorkLogs(opts);
|
|
4704
4772
|
} catch (err) {
|
|
@@ -4721,8 +4789,8 @@ item is not built again until a new build request. Exits 1 when no host
|
|
|
4721
4789
|
build is running for the item.
|
|
4722
4790
|
`
|
|
4723
4791
|
).action(async (opts) => {
|
|
4724
|
-
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-
|
|
4725
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4792
|
+
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-7KIKIZPO.js');
|
|
4793
|
+
const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4726
4794
|
try {
|
|
4727
4795
|
await runWorkStop(opts);
|
|
4728
4796
|
} catch (err) {
|
|
@@ -4743,7 +4811,7 @@ deletes anything \u2014 the item is removed from Work only once no
|
|
|
4743
4811
|
live addition remains on it.
|
|
4744
4812
|
`
|
|
4745
4813
|
).action(async (opts) => {
|
|
4746
|
-
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-
|
|
4814
|
+
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4747
4815
|
try {
|
|
4748
4816
|
await runWorkRemove(opts);
|
|
4749
4817
|
} catch (err) {
|
|
@@ -4755,7 +4823,7 @@ live addition remains on it.
|
|
|
4755
4823
|
}
|
|
4756
4824
|
});
|
|
4757
4825
|
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) => {
|
|
4758
|
-
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-
|
|
4826
|
+
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4759
4827
|
try {
|
|
4760
4828
|
await runWorkStatus(opts);
|
|
4761
4829
|
} catch (err) {
|
|
@@ -4767,7 +4835,7 @@ live addition remains on it.
|
|
|
4767
4835
|
}
|
|
4768
4836
|
});
|
|
4769
4837
|
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) => {
|
|
4770
|
-
const { runWorkList, WorkCommandError } = await import('./work-cmd-
|
|
4838
|
+
const { runWorkList, WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4771
4839
|
try {
|
|
4772
4840
|
await runWorkList(opts);
|
|
4773
4841
|
} catch (err) {
|
|
@@ -4788,7 +4856,7 @@ by a different key is refused; claiming again with the same key extends
|
|
|
4788
4856
|
it. --host is a label only.
|
|
4789
4857
|
`
|
|
4790
4858
|
).action(async (opts) => {
|
|
4791
|
-
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-
|
|
4859
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-7YQ5CJ3R.js');
|
|
4792
4860
|
try {
|
|
4793
4861
|
await runWorkClaim(opts);
|
|
4794
4862
|
} catch (err) {
|
|
@@ -4808,7 +4876,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
|
|
|
4808
4876
|
lease has expired, or a 403 if a different key holds it.
|
|
4809
4877
|
`
|
|
4810
4878
|
).action(async (opts) => {
|
|
4811
|
-
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-
|
|
4879
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-7YQ5CJ3R.js');
|
|
4812
4880
|
try {
|
|
4813
4881
|
await runWorkRenew(opts);
|
|
4814
4882
|
} catch (err) {
|
|
@@ -4840,7 +4908,7 @@ applies to a host's lease only. A later tool call in the session
|
|
|
4840
4908
|
takes the lease again.
|
|
4841
4909
|
`
|
|
4842
4910
|
).action(async (opts) => {
|
|
4843
|
-
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-
|
|
4911
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-7YQ5CJ3R.js');
|
|
4844
4912
|
try {
|
|
4845
4913
|
await runWorkRelease(opts);
|
|
4846
4914
|
} catch (err) {
|
|
@@ -4867,7 +4935,7 @@ Idempotent: declaring the same pull request twice is a no-op.
|
|
|
4867
4935
|
needs your own login; an agent session or a factory key is refused.
|
|
4868
4936
|
`
|
|
4869
4937
|
).action(async (number, opts) => {
|
|
4870
|
-
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-
|
|
4938
|
+
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-HOS5ZHJI.js');
|
|
4871
4939
|
try {
|
|
4872
4940
|
await runWorkPr({ ...opts, number });
|
|
4873
4941
|
} catch (err) {
|
|
@@ -4892,8 +4960,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
|
|
|
4892
4960
|
Run it again after a change to the title or description.
|
|
4893
4961
|
`
|
|
4894
4962
|
).action(async (opts) => {
|
|
4895
|
-
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-
|
|
4896
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4963
|
+
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-A63YGIBW.js');
|
|
4964
|
+
const { WorkCommandError } = await import('./work-cmd-RRHDQDOX.js');
|
|
4897
4965
|
try {
|
|
4898
4966
|
await runWorkOpenPr(opts);
|
|
4899
4967
|
} catch (err) {
|
|
@@ -4909,9 +4977,9 @@ function registerRunnerCommands(program2) {
|
|
|
4909
4977
|
const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
|
|
4910
4978
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
4911
4979
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
4912
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4913
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4914
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
4980
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
|
|
4981
|
+
const { start, RunnerStartError } = await import('./loop-SY636F7D.js');
|
|
4982
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-3BH6WPOA.js');
|
|
4915
4983
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4916
4984
|
try {
|
|
4917
4985
|
const { realUpdateDeps } = await import('./real-deps-QX5YH7FG.js');
|
|
@@ -4926,12 +4994,12 @@ function registerRunnerCommands(program2) {
|
|
|
4926
4994
|
});
|
|
4927
4995
|
runnerCmd.command("container-start").description("Container entrypoint: write the config from variables, then run").addHelpText(
|
|
4928
4996
|
"after",
|
|
4929
|
-
"\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN
|
|
4997
|
+
"\nReads OUTERLAYER_URL, OUTERLAYER_APP_ID, OUTERLAYER_API_KEY, OUTERLAYER_RUNNER_NAME and one Claude credential\n(CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY) from the environment. OUTERLAYER_AGENT\nis optional and defaults to claude. On a later start it refuses variables that disagree with the config in the volume.\nThe image sets OUTERLAYER_RUNNER_IMAGE; outside the image, use `runner start`.\n"
|
|
4930
4998
|
).action(async () => {
|
|
4931
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4932
|
-
const { containerStart } = await import('./container-start-
|
|
4933
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4934
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
4999
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
|
|
5000
|
+
const { containerStart } = await import('./container-start-C3CGPEXA.js');
|
|
5001
|
+
const { start, RunnerStartError } = await import('./loop-SY636F7D.js');
|
|
5002
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-3BH6WPOA.js');
|
|
4935
5003
|
try {
|
|
4936
5004
|
const result = await containerStart({
|
|
4937
5005
|
env: process.env,
|
|
@@ -4949,8 +5017,8 @@ function registerRunnerCommands(program2) {
|
|
|
4949
5017
|
}
|
|
4950
5018
|
});
|
|
4951
5019
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
4952
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4953
|
-
const { runRunnerCheck } = await import('./check-
|
|
5020
|
+
const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
|
|
5021
|
+
const { runRunnerCheck } = await import('./check-BKONE55O.js');
|
|
4954
5022
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4955
5023
|
const result = await runRunnerCheck(configPath);
|
|
4956
5024
|
if (!result.ok) {
|
|
@@ -4971,8 +5039,8 @@ function registerRunnerCommands(program2) {
|
|
|
4971
5039
|
`);
|
|
4972
5040
|
});
|
|
4973
5041
|
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) => {
|
|
4974
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4975
|
-
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-
|
|
5042
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
|
|
5043
|
+
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-26OY23ZZ.js');
|
|
4976
5044
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4977
5045
|
if (opts.service !== true) {
|
|
4978
5046
|
for (const flag of ["print", "user", "unitName"]) {
|
|
@@ -4984,7 +5052,7 @@ function registerRunnerCommands(program2) {
|
|
|
4984
5052
|
}
|
|
4985
5053
|
try {
|
|
4986
5054
|
if (opts.service === true) {
|
|
4987
|
-
const { installServiceCommand } = await import('./command-
|
|
5055
|
+
const { installServiceCommand } = await import('./command-EFYTEHPF.js');
|
|
4988
5056
|
const result2 = await installServiceCommand({
|
|
4989
5057
|
configPath,
|
|
4990
5058
|
print: opts.print,
|
|
@@ -5039,8 +5107,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5039
5107
|
fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
|
|
5040
5108
|
return;
|
|
5041
5109
|
}
|
|
5042
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5043
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5110
|
+
const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
|
|
5111
|
+
const { uninstallServiceCommand } = await import('./command-EFYTEHPF.js');
|
|
5044
5112
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5045
5113
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5046
5114
|
`);
|
|
@@ -5067,12 +5135,12 @@ already in claude.env is used.
|
|
|
5067
5135
|
printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
|
|
5068
5136
|
`
|
|
5069
5137
|
).action(async (opts) => {
|
|
5070
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5071
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5072
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5073
|
-
const { detectMachine } = await import('./machine-
|
|
5074
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5075
|
-
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-
|
|
5138
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-VM6GKCCE.js');
|
|
5139
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-NO5PJEPZ.js');
|
|
5140
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-L6B5CNDG.js');
|
|
5141
|
+
const { detectMachine } = await import('./machine-IJ2QP3FO.js');
|
|
5142
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-VY6J7MAY.js');
|
|
5143
|
+
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-6Q45P3IE.js');
|
|
5076
5144
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5077
5145
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
5078
5146
|
fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
|
|
@@ -5086,7 +5154,7 @@ already in claude.env is used.
|
|
|
5086
5154
|
try {
|
|
5087
5155
|
let credential;
|
|
5088
5156
|
if (agent !== void 0) {
|
|
5089
|
-
const { readPipedKey } = await import('./login-browser-
|
|
5157
|
+
const { readPipedKey } = await import('./login-browser-NTVVDJF7.js');
|
|
5090
5158
|
credential = credentialFromStdin(
|
|
5091
5159
|
await readPipedKey(process.stdin, {
|
|
5092
5160
|
onWaiting: () => process.stderr.write(`runner init is waiting for Claude's credential on stdin; close stdin to use the one already in claude.env
|
|
@@ -5103,7 +5171,7 @@ already in claude.env is used.
|
|
|
5103
5171
|
const chunks = [];
|
|
5104
5172
|
for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
|
|
5105
5173
|
const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
|
|
5106
|
-
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-
|
|
5174
|
+
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-HJ66C6MD.js');
|
|
5107
5175
|
const hostKey2 = await ensureHostKey2(configPath);
|
|
5108
5176
|
process.stdout.write(`host key ${hostKey2.fingerprint}
|
|
5109
5177
|
hooks: ${result2.hooks}
|
|
@@ -5162,7 +5230,7 @@ hooks: ${result2.hooks}
|
|
|
5162
5230
|
const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
|
|
5163
5231
|
const created = makeKey === void 0 ? void 0 : await makeKey();
|
|
5164
5232
|
const result = writeRunnerInit(prepared, created);
|
|
5165
|
-
const { ensureHostKey } = await import('./host-key-
|
|
5233
|
+
const { ensureHostKey } = await import('./host-key-HJ66C6MD.js');
|
|
5166
5234
|
const hostKey = await ensureHostKey(configPath);
|
|
5167
5235
|
if (created !== void 0) {
|
|
5168
5236
|
process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
|
|
@@ -5190,7 +5258,7 @@ ${C.yellow}${result.note}${C.reset}
|
|
|
5190
5258
|
To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
|
|
5191
5259
|
`);
|
|
5192
5260
|
}
|
|
5193
|
-
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-
|
|
5261
|
+
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-26OY23ZZ.js');
|
|
5194
5262
|
let installedLayout = false;
|
|
5195
5263
|
let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
|
|
5196
5264
|
try {
|
|
@@ -5222,7 +5290,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5222
5290
|
let serviceUp = false;
|
|
5223
5291
|
let restart;
|
|
5224
5292
|
if (installedLayout) {
|
|
5225
|
-
const { installServiceCommand } = await import('./command-
|
|
5293
|
+
const { installServiceCommand } = await import('./command-EFYTEHPF.js');
|
|
5226
5294
|
const service = await installServiceCommand({
|
|
5227
5295
|
configPath,
|
|
5228
5296
|
entryPath: process.argv[1] ?? "",
|
|
@@ -5266,12 +5334,12 @@ Next:
|
|
|
5266
5334
|
"after",
|
|
5267
5335
|
"\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"
|
|
5268
5336
|
).action(async (opts) => {
|
|
5269
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5270
|
-
const { buildRepositoryImage, RecipeError } = await import('./build-
|
|
5337
|
+
const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
|
|
5338
|
+
const { buildRepositoryImage, RecipeError } = await import('./build-PXRDWSN4.js');
|
|
5271
5339
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
5272
|
-
const { createDockerHost } = await import('./docker-
|
|
5273
|
-
const { builderSpec } = await import('./builder-
|
|
5274
|
-
const { loadRunnerConfig } = await import('./config-
|
|
5340
|
+
const { createDockerHost } = await import('./docker-K442NGCS.js');
|
|
5341
|
+
const { builderSpec } = await import('./builder-UNVHUZL7.js');
|
|
5342
|
+
const { loadRunnerConfig } = await import('./config-VM6GKCCE.js');
|
|
5275
5343
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5276
5344
|
const loaded = (() => {
|
|
5277
5345
|
try {
|
|
@@ -5282,11 +5350,11 @@ Next:
|
|
|
5282
5350
|
})();
|
|
5283
5351
|
const memory = loaded?.build?.memory ?? "8g";
|
|
5284
5352
|
try {
|
|
5285
|
-
const { ensureRunnerIdentity } = await import('./runner-identity-
|
|
5353
|
+
const { ensureRunnerIdentity } = await import('./runner-identity-KH7HADNF.js');
|
|
5286
5354
|
await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
|
|
5287
5355
|
console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
|
|
5288
5356
|
});
|
|
5289
|
-
const { imageTargetFor } = await import('./governing-source-
|
|
5357
|
+
const { imageTargetFor } = await import('./governing-source-LVTBDQIM.js');
|
|
5290
5358
|
const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
|
|
5291
5359
|
if (!target.ok) {
|
|
5292
5360
|
if (opts.json) {
|
|
@@ -5349,25 +5417,25 @@ Next:
|
|
|
5349
5417
|
}
|
|
5350
5418
|
});
|
|
5351
5419
|
runnerCmd.command("stop").description("Take no more work; finish running jobs, then exit").option("--config <path>", "the cloud config file naming the runner to stop").option("--now", "end running jobs immediately, with outcome stopped").action(async (opts) => {
|
|
5352
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5353
|
-
const { requestStop } = await import('./loop-
|
|
5420
|
+
const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
|
|
5421
|
+
const { requestStop } = await import('./loop-SY636F7D.js');
|
|
5354
5422
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5355
|
-
const { runnerImageVersion } = await import('./image-tag-
|
|
5423
|
+
const { runnerImageVersion } = await import('./image-tag-LLXOFXKP.js');
|
|
5356
5424
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
5357
5425
|
});
|
|
5358
5426
|
runnerCmd.command("status").description("List running jobs; with --recent, finished ones too").option("--config <path>", "the cloud config file naming the runner to inspect").option("--recent", "also list finished jobs, newest first, capped at 20").option("--json", "machine-readable JSON output").action(async (opts) => {
|
|
5359
|
-
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-
|
|
5360
|
-
const { jobsDir, runnerDir } = await import('./paths-
|
|
5361
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
5362
|
-
const { renderStatus } = await import('./status-
|
|
5363
|
-
const { readHousekeepingRecord } = await import('./record-
|
|
5427
|
+
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-VM6GKCCE.js');
|
|
5428
|
+
const { jobsDir, runnerDir } = await import('./paths-32THAYBB.js');
|
|
5429
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-SY636F7D.js');
|
|
5430
|
+
const { renderStatus } = await import('./status-LOQ2RHWX.js');
|
|
5431
|
+
const { readHousekeepingRecord } = await import('./record-WHPJCC6Y.js');
|
|
5364
5432
|
const path2 = await import('path');
|
|
5365
5433
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5366
5434
|
const all = listJobFiles(configPath);
|
|
5367
5435
|
const housekeeping = readHousekeepingRecord(runnerDir(configPath));
|
|
5368
|
-
const { readPendingUpdate } = await import('./pending-
|
|
5436
|
+
const { readPendingUpdate } = await import('./pending-6CMYQHFL.js');
|
|
5369
5437
|
const pendingUpdate = readPendingUpdate(runnerDir(configPath));
|
|
5370
|
-
const { readImageStatus } = await import('./image-tag-
|
|
5438
|
+
const { readImageStatus } = await import('./image-tag-LLXOFXKP.js');
|
|
5371
5439
|
const image = readImageStatus(runnerDir(configPath));
|
|
5372
5440
|
let host = "unknown";
|
|
5373
5441
|
let concurrency = 1;
|
|
@@ -5381,7 +5449,7 @@ Next:
|
|
|
5381
5449
|
const service = await (async () => {
|
|
5382
5450
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
|
|
5383
5451
|
const { inspectService, realInspectProbes } = await import('./inspect-L7JIBK3Y.js');
|
|
5384
|
-
const { DEFAULT_UNIT_NAME } = await import('./install-
|
|
5452
|
+
const { DEFAULT_UNIT_NAME } = await import('./install-GZ27NW6U.js');
|
|
5385
5453
|
const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
|
|
5386
5454
|
return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
|
|
5387
5455
|
})();
|
|
@@ -5418,9 +5486,9 @@ Next:
|
|
|
5418
5486
|
);
|
|
5419
5487
|
});
|
|
5420
5488
|
runnerCmd.command("logs").argument("<item>", "the work item's number in the factory").description("Print the newest attempt's log for one item").option("--config <path>", "the cloud config file naming the runner to inspect").option("-f, --follow", "keep printing as the log grows").action(async (itemArg, opts) => {
|
|
5421
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5422
|
-
const { listJobFiles } = await import('./loop-
|
|
5423
|
-
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-
|
|
5489
|
+
const { defaultRunnerConfigPath } = await import('./config-VM6GKCCE.js');
|
|
5490
|
+
const { listJobFiles } = await import('./loop-SY636F7D.js');
|
|
5491
|
+
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-7O3ELY35.js');
|
|
5424
5492
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5425
5493
|
const item = parseTrackerNumber(itemArg);
|
|
5426
5494
|
if (item === void 0) {
|
|
@@ -5651,7 +5719,7 @@ caller from the bearer token, the gateway answers 401 without that header.
|
|
|
5651
5719
|
"after",
|
|
5652
5720
|
"\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"
|
|
5653
5721
|
).action(async (opts) => {
|
|
5654
|
-
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-
|
|
5722
|
+
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-AT7G6J5V.js');
|
|
5655
5723
|
try {
|
|
5656
5724
|
await runMcpServe({ url: opts.url, appId: opts.appId });
|
|
5657
5725
|
} catch (err) {
|