@outerlayer/cli 0.26.4 → 0.27.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 +16 -0
- package/README.md +12 -9
- package/dist/{agent-setup-5DXPEO64.js → agent-setup-UW36TAQM.js} +11 -11
- package/dist/{bridge-5KZ36YDG.js → bridge-B5VJVECY.js} +2 -2
- package/dist/{build-F5QWH7G5.js → build-TNM7HYCA.js} +4 -4
- package/dist/build-info.json +1 -1
- package/dist/{builder-KDUXCHTY.js → builder-LDJGS2JC.js} +5 -5
- package/dist/{check-ZSYCR5WG.js → check-JVBAWIN6.js} +40 -39
- package/dist/{chunk-GFHLEVUE.js → chunk-24ID7EQ2.js} +6 -3
- package/dist/{chunk-H57M3HC7.js → chunk-2F762IXY.js} +2 -2
- package/dist/{chunk-2K3TCQHW.js → chunk-2I3LIRZP.js} +26 -8
- package/dist/{chunk-6CGXSMKX.js → chunk-55GNQPO6.js} +17 -6
- package/dist/{chunk-MWPBF2XG.js → chunk-6KKM7VGZ.js} +32 -4
- package/dist/{chunk-VPEGE3QZ.js → chunk-6TRNCUM4.js} +1 -1
- package/dist/{chunk-6SPXKRQR.js → chunk-7AQ5AM7U.js} +12 -5
- package/dist/{chunk-HBISTTG3.js → chunk-7OUOLGUV.js} +20 -5
- package/dist/{chunk-NWPRNKZ5.js → chunk-ABXQBEYK.js} +1 -1
- package/dist/chunk-BM7EC3OZ.js +181 -0
- package/dist/{chunk-4UFSTKE5.js → chunk-BPKO76QR.js} +4 -4
- package/dist/{chunk-MCSINUVC.js → chunk-BWH36FOC.js} +1 -1
- package/dist/{chunk-IZAOO5AR.js → chunk-D7ECMB7B.js} +4 -4
- package/dist/{chunk-UZEQVPKF.js → chunk-DJHNEGNM.js} +27 -3
- package/dist/{chunk-O4362FPA.js → chunk-E5IJ5533.js} +2 -2
- package/dist/{chunk-JWRX5ZTT.js → chunk-EPPIISRD.js} +2 -2
- package/dist/{chunk-KNBWOL2B.js → chunk-FP23SVDD.js} +5 -5
- package/dist/{chunk-6WTAYEKJ.js → chunk-G3EZA6MK.js} +55 -7
- package/dist/{chunk-VGHKTSHU.js → chunk-GFUE5TKO.js} +3 -3
- package/dist/{chunk-XLC7KEUV.js → chunk-GLUKDQS4.js} +1 -1
- package/dist/{chunk-QUP6CVBQ.js → chunk-JH2GQU5T.js} +4 -4
- package/dist/{chunk-JKNYTNYD.js → chunk-LOKSLO25.js} +1 -1
- package/dist/{chunk-2J46BQ5Y.js → chunk-M3MHHIUW.js} +1 -1
- package/dist/{chunk-7Z2WMXM5.js → chunk-MATUHHN4.js} +1 -1
- package/dist/{chunk-MQ743JX3.js → chunk-MHX7YX7Y.js} +1 -1
- package/dist/{chunk-PZA6ZFYW.js → chunk-N4D5TMVU.js} +2 -2
- package/dist/{chunk-WK35HB56.js → chunk-O2IJTY7L.js} +2 -2
- package/dist/{chunk-K4FXNMV5.js → chunk-QHH4OSD4.js} +1 -1
- package/dist/{chunk-OQUD3UYF.js → chunk-QIVOTQOQ.js} +5 -5
- package/dist/{chunk-Y4BXRVDI.js → chunk-QKIQ2R7F.js} +3 -3
- package/dist/{chunk-F3BBEBPL.js → chunk-RHAGBUL5.js} +1 -1
- package/dist/{chunk-OFTFW7TH.js → chunk-RHGF73IU.js} +1 -1
- package/dist/{chunk-27RDUTQH.js → chunk-RK7FWC6B.js} +194 -38
- package/dist/{chunk-6MZSX4M7.js → chunk-STSLH5EJ.js} +3 -1
- package/dist/{chunk-ZMZGWLYD.js → chunk-TXHJ7BGR.js} +13 -13
- package/dist/{chunk-EHBDYLM6.js → chunk-UQYBCJ2L.js} +2 -2
- package/dist/{chunk-VQ7OAG6H.js → chunk-VS27BP3E.js} +4 -4
- package/dist/{chunk-OZKEEXVH.js → chunk-WSYXLLA5.js} +6 -6
- package/dist/{chunk-WX2WEERU.js → chunk-WUL2OP5A.js} +3 -3
- package/dist/{chunk-UOGQZQXN.js → chunk-WVDP6HVZ.js} +6 -6
- package/dist/{chunk-MXTN35XN.js → chunk-XBPUTQ7E.js} +1 -1
- package/dist/{chunk-UNF7MWEL.js → chunk-XS3FDWSZ.js} +1 -1
- package/dist/{chunk-VJBFQP3H.js → chunk-XZ6Q6ZNR.js} +9 -5
- package/dist/{chunk-GWRDL75D.js → chunk-Y4OKEFAX.js} +1 -1
- package/dist/{chunk-Q2SVLBMI.js → chunk-Y7ZCHBYB.js} +2 -2
- package/dist/chunk-YB3CSYXX.js +95 -0
- package/dist/{chunk-SBW4K3XZ.js → chunk-YF56R4DV.js} +75 -29
- package/dist/chunk-YJLHUKYS.js +38 -0
- package/dist/{chunk-V3YJFEZA.js → chunk-ZXRWMOJ3.js} +274 -45
- package/dist/{claude-launcher-TTLTS4N6.js → claude-launcher-TKX4WCUN.js} +8 -4
- package/dist/{cli-SKF3AMZ5.js → cli-XVXQDKZT.js} +133 -127
- package/dist/{command-E5OG5NCH.js → command-B2T7VR77.js} +29 -28
- package/dist/{config-JJ3EO7SB.js → config-TWS5VZEN.js} +3 -3
- package/dist/{connect-cmd-SL4S5HJM.js → connect-cmd-HGS7YPA2.js} +7 -7
- package/dist/{container-start-IA2HK4QI.js → container-start-JE7HTKZG.js} +28 -27
- package/dist/{control-plane-launch-JIQOE6BP.js → control-plane-launch-DBQA3KLJ.js} +8 -8
- package/dist/{docker-KKE5Q5S2.js → docker-MJEEHUUA.js} +5 -5
- package/dist/{doctor-U2N7AF3N.js → doctor-6ZIF2BRZ.js} +180 -33
- package/dist/{emit-artifact-cmd-SDG5H6D7.js → emit-artifact-cmd-ALDK55Y2.js} +11 -11
- package/dist/{emit-cmd-WQH2NK7H.js → emit-cmd-VAQHRWJR.js} +4 -4
- package/dist/{emit-criteria-cmd-QGSP77AG.js → emit-criteria-cmd-Q7SM6VP2.js} +8 -8
- package/dist/{emit-finding-cmd-6FGMTEFM.js → emit-finding-cmd-2NBAPDSV.js} +8 -8
- package/dist/{emit-result-cmd-AUPIXPEU.js → emit-result-cmd-KUSL56RI.js} +11 -11
- package/dist/{emit-step-cmd-PORHEKHN.js → emit-step-cmd-KD4AKEAT.js} +9 -9
- package/dist/{exec-client-J6L5FDRR.js → exec-client-6WVS7DRZ.js} +3 -3
- package/dist/{governing-source-YPBK4H5H.js → governing-source-VVUA5TKB.js} +13 -13
- package/dist/{guest-init-CXIHA5VI.js → guest-init-H5K2RW3P.js} +4 -4
- package/dist/{hook-fast-XMZFMBKC.js → hook-fast-3SUJM765.js} +1 -1
- package/dist/{host-key-GQFBRX3J.js → host-key-XNKZCWTS.js} +3 -3
- package/dist/{image-tag-W4JKVNP4.js → image-tag-R34J4O3F.js} +3 -3
- package/dist/index.js +4 -4
- package/dist/{init-GEFKJNJU.js → init-ETKGFCXR.js} +28 -27
- package/dist/{init-Y64OAKKQ.js → init-Q2RPUUVP.js} +29 -28
- package/dist/{init-cmd-YR4LLIRU.js → init-cmd-M6MQRGOU.js} +15 -14
- package/dist/{init-update-46G6QJHB.js → init-update-N4HTZGVS.js} +55 -26
- package/dist/{inspect-6UYAAXH7.js → inspect-IPFA7AAT.js} +1 -1
- package/dist/{install-AFMXH25X.js → install-6OIY3KHZ.js} +6 -5
- package/dist/{install-cmd-X5XCUTSX.js → install-cmd-JMT67P35.js} +5 -5
- package/dist/{layout-UOJQGEPW.js → layout-XNFDTOET.js} +2 -2
- package/dist/{logs-PKNQOJN6.js → logs-XHAS6LMZ.js} +2 -2
- package/dist/{loop-3TJKFRN7.js → loop-2Y4CUFNP.js} +40 -39
- package/dist/{machine-3W4LKTEW.js → machine-Z2S47JW7.js} +23 -22
- package/dist/machine-skills-RRF4HLAD.js +11 -0
- package/dist/{mcp-serve-cmd-MJIJHSQ6.js → mcp-serve-cmd-LY5A3CE7.js} +4 -4
- package/dist/{paths-6V7572NN.js → paths-LHSPNORF.js} +2 -2
- package/dist/{pending-GUHHKO42.js → pending-3YZCSKON.js} +3 -3
- package/dist/{pidfile-ZQOFDY7T.js → pidfile-DKMYYXLH.js} +3 -3
- package/dist/{record-C4ZVSLKV.js → record-3LPTY3G5.js} +3 -3
- package/dist/{runner-env-6Q2RMENH.js → runner-env-YRRNRKF4.js} +8 -7
- package/dist/{runner-identity-DP577A7S.js → runner-identity-EX7HXPUE.js} +5 -5
- package/dist/{runner-key-LR5P2EJ5.js → runner-key-GO277GW2.js} +28 -27
- package/dist/{session-sender-ZTPWIU5L.js → session-sender-SC5PSU2G.js} +12 -12
- package/dist/{spec-cmd-RLZMX67G.js → spec-cmd-JGYHHJ4P.js} +9 -9
- package/dist/{starter-pack-55EFILC5.js → starter-pack-GPU4X6B7.js} +2 -2
- package/dist/{status-GNUOTHRH.js → status-CJCE2FHD.js} +30 -29
- package/dist/{sync-cmd-GLWEAULP.js → sync-cmd-ATXJVS7S.js} +11 -11
- package/dist/{watch-F47NPUDX.js → watch-M7NR3DOW.js} +11 -11
- package/dist/{work-claim-cmd-GXPIRRBG.js → work-claim-cmd-DNUDZKJA.js} +13 -13
- package/dist/{work-cmd-S2FHIFJA.js → work-cmd-VECTYST6.js} +9 -9
- package/dist/{work-comment-cmd-UJRKULO6.js → work-comment-cmd-F3NRWKPZ.js} +9 -9
- package/dist/{work-logs-cmd-SCAHJXSP.js → work-logs-cmd-QF6P32FE.js} +9 -9
- package/dist/{work-open-pr-cmd-BGMHUQGD.js → work-open-pr-cmd-XE23JA3R.js} +10 -10
- package/dist/{work-pr-cmd-EDDRP5DK.js → work-pr-cmd-BH56GUKN.js} +9 -9
- package/dist/{work-stop-cmd-ADE5K6UX.js → work-stop-cmd-C3F5HNUO.js} +9 -9
- package/package.json +1 -1
- package/skill-pack/maintained/outerlayer-cli/SKILL.md +6 -5
- package/skill-pack/shipped.json +1 -0
- package/skill-pack/template/build/SKILL.md +1 -1
- package/dist/chunk-7RQ73DLO.js +0 -23
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-
|
|
4
|
-
import './chunk-
|
|
5
|
-
import './chunk-
|
|
6
|
-
import { verifiedTrackerNames, TRACKERS } from './chunk-
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
3
|
+
import { gatherDoctorChecks, doctorExitCode, summarizeChecks, renderDoctorText, recordWrapped, recordUnwrapped, recordRemoval, readManifest, recordInstall, recordStatusline } from './chunk-TXHJ7BGR.js';
|
|
4
|
+
import './chunk-G3EZA6MK.js';
|
|
5
|
+
import './chunk-XZ6Q6ZNR.js';
|
|
6
|
+
import { verifiedTrackerNames, TRACKERS } from './chunk-55GNQPO6.js';
|
|
7
|
+
import './chunk-2F762IXY.js';
|
|
8
|
+
import './chunk-N4D5TMVU.js';
|
|
9
9
|
import './chunk-BUP5N3X6.js';
|
|
10
|
+
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-LOKSLO25.js';
|
|
10
11
|
import './chunk-6BLXUD56.js';
|
|
11
12
|
import './chunk-G2JWZDFA.js';
|
|
12
|
-
import './chunk-
|
|
13
|
-
import './chunk-
|
|
14
|
-
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-
|
|
13
|
+
import './chunk-MHX7YX7Y.js';
|
|
14
|
+
import './chunk-BWH36FOC.js';
|
|
15
|
+
import { hookFiredMarkerPath, installedCliDistDir } from './chunk-DJHNEGNM.js';
|
|
15
16
|
import './chunk-ZJSNLVCE.js';
|
|
16
17
|
import './chunk-I7RZHMXW.js';
|
|
17
18
|
import './chunk-BKO6JEZI.js';
|
|
18
19
|
import './chunk-HCVLP7XA.js';
|
|
19
20
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
21
|
+
import './chunk-BM7EC3OZ.js';
|
|
22
|
+
import './chunk-7OUOLGUV.js';
|
|
20
23
|
import './chunk-QE3UQAHK.js';
|
|
21
24
|
import './chunk-KT4CN6OU.js';
|
|
22
25
|
import { C, warnDeprecated, API_KEY_FLAG_DEPRECATION, NO_COLOR_FLAG, stripNoColor } from './chunk-ANPNT6PM.js';
|
|
23
26
|
import './chunk-PJDQPF5N.js';
|
|
24
|
-
import { FIRST_VERSION_READING_AGENTS_SKILLS } from './chunk-JKNYTNYD.js';
|
|
25
|
-
import './chunk-HBISTTG3.js';
|
|
26
27
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
27
28
|
import { cliInvocation, packageRunnerOf } from './chunk-CRB3POP4.js';
|
|
28
29
|
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,9 +34,9 @@ import './chunk-RKOTJQVG.js';
|
|
|
33
34
|
import './chunk-QZBXLLTV.js';
|
|
34
35
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
35
36
|
import { resolveVersion } from './chunk-RA3O54FC.js';
|
|
36
|
-
import './chunk-
|
|
37
|
-
import './chunk-
|
|
38
|
-
import './chunk-
|
|
37
|
+
import './chunk-Y4OKEFAX.js';
|
|
38
|
+
import './chunk-RHAGBUL5.js';
|
|
39
|
+
import './chunk-2I3LIRZP.js';
|
|
39
40
|
import './chunk-JGD5TWQ2.js';
|
|
40
41
|
import './chunk-Z5GEFMRW.js';
|
|
41
42
|
import { EventEmitter } from 'events';
|
|
@@ -3653,14 +3654,14 @@ function apiKeyOption() {
|
|
|
3653
3654
|
return new Option("--api-key <key>", `deprecated: use \`${cliInvocation()} login\` or OUTERLAYER_API_KEY`).hideHelp();
|
|
3654
3655
|
}
|
|
3655
3656
|
async function installStarterPackInRepo() {
|
|
3656
|
-
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-
|
|
3657
|
+
const { installStarterPack, formatStarterPackOutput } = await import('./starter-pack-GPU4X6B7.js');
|
|
3657
3658
|
const cwd = process.cwd();
|
|
3658
3659
|
let repoRoot = cwd;
|
|
3659
3660
|
try {
|
|
3660
3661
|
repoRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { cwd, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim() || cwd;
|
|
3661
3662
|
} catch {
|
|
3662
3663
|
}
|
|
3663
|
-
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-
|
|
3664
|
+
const { declareAgentsMdLayout, isAgentsMdLayout, skillsBaseFor } = await import('./layout-XNFDTOET.js');
|
|
3664
3665
|
const fresh = !isAgentsMdLayout(repoRoot) && !existsSync(join(repoRoot, ".outerlayer"));
|
|
3665
3666
|
const result = installStarterPack({ repoRoot, base: fresh ? ".agents/skills" : skillsBaseFor(repoRoot) });
|
|
3666
3667
|
if (fresh) declareAgentsMdLayout(repoRoot);
|
|
@@ -3785,8 +3786,16 @@ ${starter.output}`),
|
|
|
3785
3786
|
throw err;
|
|
3786
3787
|
}
|
|
3787
3788
|
}
|
|
3789
|
+
async function installMachineSkillsForSetup() {
|
|
3790
|
+
const { setupMachineSkills } = await import('./machine-skills-RRF4HLAD.js');
|
|
3791
|
+
const result = setupMachineSkills(homeFromEnv());
|
|
3792
|
+
for (const failure of result.failures) process.stderr.write(`${C.yellow}!${C.reset} Could not write a maintained skill: ${failure}
|
|
3793
|
+
`);
|
|
3794
|
+
return result.failures.length === 0 ? `${C.green}\u2713${C.reset} Maintained skills: ~/.agents/skills/, linked from ~/.claude/skills/ ${C.dim}(every outerlayer command keeps them at its own version)${C.reset}
|
|
3795
|
+
` : "";
|
|
3796
|
+
}
|
|
3788
3797
|
async function realConnectDepsForCwd() {
|
|
3789
|
-
const { realConnectDeps } = await import('./connect-cmd-
|
|
3798
|
+
const { realConnectDeps } = await import('./connect-cmd-HGS7YPA2.js');
|
|
3790
3799
|
const { resolveRepoIdentity } = await import('./dist-QPHZE47F.js');
|
|
3791
3800
|
return {
|
|
3792
3801
|
...realConnectDeps(),
|
|
@@ -3802,8 +3811,12 @@ function invokedCommandToken(argv) {
|
|
|
3802
3811
|
}
|
|
3803
3812
|
function buildProgram(argv = process.argv) {
|
|
3804
3813
|
const program2 = new Command();
|
|
3805
|
-
program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", (_root, command) => {
|
|
3814
|
+
program2.name(cliInvocation()).description("OuterLayer \u2014 see what your coding agents actually do").enablePositionalOptions().version(resolveVersion()).hook("preAction", async (_root, command) => {
|
|
3806
3815
|
if (command.opts().apiKey !== void 0) warnDeprecated(API_KEY_FLAG_DEPRECATION);
|
|
3816
|
+
const { machineRefreshSkipped, refreshMachineSkills } = await import('./machine-skills-RRF4HLAD.js');
|
|
3817
|
+
const names = [];
|
|
3818
|
+
for (let at = command; at?.parent; at = at.parent) names.push(at.name());
|
|
3819
|
+
if (!machineRefreshSkipped(names, command._hidden === true, argv)) refreshMachineSkills(homeFromEnv());
|
|
3807
3820
|
}).option(NO_COLOR_FLAG, "disable color (NO_COLOR=1 does the same)").addHelpText("after", SUPPORT_TEXT);
|
|
3808
3821
|
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(
|
|
3809
3822
|
"after",
|
|
@@ -3815,19 +3828,14 @@ login it skips the connect step and says to run \`${cliInvocation()} login\`. Wi
|
|
|
3815
3828
|
--json it prints one document naming the outcome of each step: done,
|
|
3816
3829
|
skipped or failed. The exit code is 1 when a step failed.
|
|
3817
3830
|
|
|
3818
|
-
The agent setup step installs the starter skills
|
|
3819
|
-
|
|
3831
|
+
The agent setup step installs the starter skills into .agents/skills/,
|
|
3832
|
+
writes AGENTS.md when there is no AGENTS.md or
|
|
3820
3833
|
CLAUDE.md, writes .outerlayer/config.json with "layout": 2 when there is
|
|
3821
3834
|
none, links .claude/skills to ../.agents/skills, and adds the outerlayer and
|
|
3822
3835
|
outerlayer-docs MCP servers to .mcp.json. Nothing is generated, so nothing
|
|
3823
|
-
needs \`` + cliInvocation() +
|
|
3824
|
-
Nothing you wrote is changed. A repository still in the earlier layout keeps
|
|
3825
|
-
its files in .outerlayer/ and is compiled as before until --update moves it.
|
|
3826
|
-
The files are left uncommitted.
|
|
3827
|
-
The step is skipped outside a git repository and in a repository whose
|
|
3828
|
-
context comes from a control plane, where it arrives at session start.
|
|
3836
|
+
needs \`` + cliInvocation() + " context emit`. --no-skills-link leaves out the link.\nNothing you wrote is changed. A repository still in the earlier layout keeps\nits files in .outerlayer/ and is compiled as before until --update moves it.\nThe files are left uncommitted.\nThe step is skipped outside a git repository and in a repository whose\ncontext comes from a control plane, where it arrives at session start.\n\nEvery init installs the five maintained skills (outerlayer-evidence,\nouterlayer-amend, outerlayer-findings, outerlayer-cli, outerlayer-build) once\nper machine, in ~/.agents/skills/, with a link to each in ~/.claude/skills/.\nEvery later outerlayer command keeps them at its own version. A repository in\nthe AGENTS.md layout carries none of them. `" + cliInvocation() + " claude` installs them too.\nIf a write fails, init says so and goes on; `" + cliInvocation() + ` doctor\` reports it.
|
|
3829
3837
|
|
|
3830
|
-
--local installs only the hooks: no connect step, no agent setup and no
|
|
3838
|
+
--local installs only the hooks and the per-machine skills: no connect step, no agent setup and no
|
|
3831
3839
|
network call. Add \`--template default\` to also write the starter skills and
|
|
3832
3840
|
a policy file, with nothing to compile.
|
|
3833
3841
|
|
|
@@ -3837,23 +3845,19 @@ changes nothing. Wrapping adds one spawn per hook firing; undo it with
|
|
|
3837
3845
|
replaced.
|
|
3838
3846
|
|
|
3839
3847
|
Three of the starter skills are copied once and are yours to edit. The
|
|
3840
|
-
|
|
3841
|
-
|
|
3848
|
+
maintained skills are not copied into a repository in the AGENTS.md layout. A
|
|
3849
|
+
repository that has not moved keeps copies that \`context emit\` rewrites.
|
|
3842
3850
|
|
|
3843
3851
|
--update first moves a repository in the earlier layout to AGENTS.md,
|
|
3844
3852
|
.agents/skills/ and .mcp.json: it removes each file that holds exactly what
|
|
3845
|
-
\`` + cliInvocation() +
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
to a version an earlier release wrote is replaced, and a missing one is
|
|
3850
|
-
written. A file you edited is never touched. The changes are left
|
|
3851
|
-
uncommitted. --dry-run prints the plan, with a command to compare each
|
|
3852
|
-
edited file, and writes nothing. --control-plane makes no link and says
|
|
3853
|
+
\`` + 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. In an edited build, it changes only the line
|
|
3855
|
+
that names ../outerlayer-build/SKILL.md, to ~/.agents/skills/outerlayer-build/SKILL.md.
|
|
3856
|
+
--control-plane makes no link and says
|
|
3853
3857
|
what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocation() + " doctor` reports the same\nstates under Starter files.\n"
|
|
3854
3858
|
).action(async (opts) => {
|
|
3855
3859
|
if (opts.update || opts.dryRun) {
|
|
3856
|
-
const { runInitUpdate, formatInitUpdate, updateFlagProblem } = await import('./init-update-
|
|
3860
|
+
const { runInitUpdate, formatInitUpdate, updateFlagProblem } = await import('./init-update-N4HTZGVS.js');
|
|
3857
3861
|
const problem = updateFlagProblem(opts);
|
|
3858
3862
|
if (problem !== void 0) {
|
|
3859
3863
|
fail(problem);
|
|
@@ -3867,7 +3871,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3867
3871
|
}
|
|
3868
3872
|
let starterTemplate;
|
|
3869
3873
|
if (opts.template !== void 0) {
|
|
3870
|
-
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-
|
|
3874
|
+
const { assertKnownTemplate, StarterPackError } = await import('./starter-pack-GPU4X6B7.js');
|
|
3871
3875
|
try {
|
|
3872
3876
|
assertKnownTemplate(opts.template);
|
|
3873
3877
|
} catch (err) {
|
|
@@ -3889,6 +3893,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3889
3893
|
return;
|
|
3890
3894
|
}
|
|
3891
3895
|
if (opts.remove || opts.local) {
|
|
3896
|
+
const skillsLine = opts.remove ? "" : await installMachineSkillsForSetup();
|
|
3892
3897
|
const outcome = await installHooks(opts, cliBin, void 0, starterTemplate);
|
|
3893
3898
|
if (!outcome.ok) {
|
|
3894
3899
|
fail(outcome.text);
|
|
@@ -3900,12 +3905,13 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3900
3905
|
if (changed.length > 0 && !opts.json) process.stdout.write(`Removed the claude function from ${changed.join(", ")}.
|
|
3901
3906
|
`);
|
|
3902
3907
|
}
|
|
3903
|
-
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-
|
|
3908
|
+
const shell = !opts.remove && opts.shellFunction !== void 0 ? (await import('./init-cmd-M6MQRGOU.js')).applyShellFunctionFlag(opts.shellFunction, { home: homeFromEnv(), shellPath: process.env.SHELL }) : void 0;
|
|
3904
3909
|
if (opts.json) writeJson(shell === void 0 ? outcome.result : { ...outcome.result, shellFunction: { outcome: shell.outcome, reason: shell.reason } });
|
|
3905
|
-
else process.stdout.write(outcome.text + (shell?.text ?? ""));
|
|
3910
|
+
else process.stdout.write(outcome.text + skillsLine + (shell?.text ?? ""));
|
|
3906
3911
|
return;
|
|
3907
3912
|
}
|
|
3908
|
-
|
|
3913
|
+
await installMachineSkillsForSetup();
|
|
3914
|
+
const { runInitCommand } = await import('./init-cmd-M6MQRGOU.js');
|
|
3909
3915
|
const code = await runInitCommand(
|
|
3910
3916
|
{ json: opts.json, factory: opts.factory, shellFunction: opts.shellFunction },
|
|
3911
3917
|
{
|
|
@@ -3917,7 +3923,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3917
3923
|
return { ok, text, detail };
|
|
3918
3924
|
},
|
|
3919
3925
|
runAgentSetup: async () => {
|
|
3920
|
-
const { runAgentSetup } = await import('./agent-setup-
|
|
3926
|
+
const { runAgentSetup } = await import('./agent-setup-UW36TAQM.js');
|
|
3921
3927
|
return runAgentSetup({ cwd: process.cwd(), skillsLink: opts.skillsLink !== false });
|
|
3922
3928
|
},
|
|
3923
3929
|
runDoctorChecks: gatherDoctorChecks,
|
|
@@ -3926,7 +3932,7 @@ what CLIs older than ${FIRST_VERSION_READING_AGENTS_SKILLS} do. \`` + cliInvocat
|
|
|
3926
3932
|
shellPath: process.env.SHELL,
|
|
3927
3933
|
interactive: Boolean(process.stdin.isTTY && process.stderr.isTTY) && opts.json !== true,
|
|
3928
3934
|
ask: async () => {
|
|
3929
|
-
const { promptOnTerminal } = await import('./connect-cmd-
|
|
3935
|
+
const { promptOnTerminal } = await import('./connect-cmd-HGS7YPA2.js');
|
|
3930
3936
|
const answer = await promptOnTerminal({
|
|
3931
3937
|
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.`,
|
|
3932
3938
|
options: [
|
|
@@ -3965,7 +3971,7 @@ linked (true, false, or null when it could not be checked) and, when false,
|
|
|
3965
3971
|
linkUrl.
|
|
3966
3972
|
`
|
|
3967
3973
|
).action(async (opts) => {
|
|
3968
|
-
const { runConnectCommand } = await import('./connect-cmd-
|
|
3974
|
+
const { runConnectCommand } = await import('./connect-cmd-HGS7YPA2.js');
|
|
3969
3975
|
const code = await runConnectCommand({ factory: opts.factory, json: opts.json }, await realConnectDepsForCwd(), {
|
|
3970
3976
|
stdout: process.stdout,
|
|
3971
3977
|
stderr: process.stderr
|
|
@@ -4043,7 +4049,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4043
4049
|
else fail(found.reason);
|
|
4044
4050
|
return;
|
|
4045
4051
|
}
|
|
4046
|
-
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-
|
|
4052
|
+
const { runSync, SyncConfigError, SyncTransportError } = await import('./sync-cmd-ATXJVS7S.js');
|
|
4047
4053
|
try {
|
|
4048
4054
|
const result = await runSync({
|
|
4049
4055
|
url: opts.url,
|
|
@@ -4074,7 +4080,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4074
4080
|
if (invokedCommandToken(argv) === "watch") {
|
|
4075
4081
|
warnDeprecated(`\`${cliInvocation()} watch\` is now \`${cliInvocation()} daemon\`; the old name will be removed in a future release.`);
|
|
4076
4082
|
}
|
|
4077
|
-
const { runWatch } = await import('./watch-
|
|
4083
|
+
const { runWatch } = await import('./watch-M7NR3DOW.js');
|
|
4078
4084
|
await runWatch({ once: opts.once });
|
|
4079
4085
|
});
|
|
4080
4086
|
program2.command("hook <event>", { hidden: true }).description("capture-hook fast path, installed by `init`").action(() => {
|
|
@@ -4135,7 +4141,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4135
4141
|
}
|
|
4136
4142
|
});
|
|
4137
4143
|
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) => {
|
|
4138
|
-
const { runVmExec } = await import('./exec-client-
|
|
4144
|
+
const { runVmExec } = await import('./exec-client-6WVS7DRZ.js');
|
|
4139
4145
|
const env = {};
|
|
4140
4146
|
for (const entry of opts.env) {
|
|
4141
4147
|
const eq = entry.indexOf("=");
|
|
@@ -4164,7 +4170,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4164
4170
|
process.exitCode = await runBuildCommand({ dir: opts.dir, argv: command });
|
|
4165
4171
|
});
|
|
4166
4172
|
program2.command("session-sender", { hidden: true }).description("stream a runner build's sessions to its work item while the build runs").action(async () => {
|
|
4167
|
-
const { runSessionSender } = await import('./session-sender-
|
|
4173
|
+
const { runSessionSender } = await import('./session-sender-SC5PSU2G.js');
|
|
4168
4174
|
try {
|
|
4169
4175
|
await runSessionSender();
|
|
4170
4176
|
} catch (err) {
|
|
@@ -4172,7 +4178,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4172
4178
|
}
|
|
4173
4179
|
});
|
|
4174
4180
|
program2.command("vm-init", { hidden: true }).description("lay out a microVM build's guest; the guest helper runs it").action(async () => {
|
|
4175
|
-
const { realGuestHost, runGuestInit } = await import('./guest-init-
|
|
4181
|
+
const { realGuestHost, runGuestInit } = await import('./guest-init-H5K2RW3P.js');
|
|
4176
4182
|
const { readFileSync: readFileSync3 } = await import('fs');
|
|
4177
4183
|
try {
|
|
4178
4184
|
runGuestInit(realGuestHost(), readFileSync3("/proc/cmdline", "utf8"));
|
|
@@ -4181,7 +4187,7 @@ code is 1: revoke the token on /profile/security.
|
|
|
4181
4187
|
}
|
|
4182
4188
|
});
|
|
4183
4189
|
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) => {
|
|
4184
|
-
const { startBridgeForward } = await import('./bridge-
|
|
4190
|
+
const { startBridgeForward } = await import('./bridge-B5VJVECY.js');
|
|
4185
4191
|
try {
|
|
4186
4192
|
await startBridgeForward(opts);
|
|
4187
4193
|
} catch (err) {
|
|
@@ -4207,7 +4213,7 @@ async function runCli(processArgv) {
|
|
|
4207
4213
|
await buildProgram(argv).parseAsync(argv);
|
|
4208
4214
|
}
|
|
4209
4215
|
async function compileContext(opts) {
|
|
4210
|
-
const { runEmit, EmitError } = await import('./emit-cmd-
|
|
4216
|
+
const { runEmit, EmitError } = await import('./emit-cmd-VAQHRWJR.js');
|
|
4211
4217
|
try {
|
|
4212
4218
|
const result = runEmit({ cwd: opts.dir, check: opts.check, json: opts.json });
|
|
4213
4219
|
if (result.exitCode !== 0) process.exitCode = result.exitCode;
|
|
@@ -4254,7 +4260,7 @@ Compiling .outerlayer/ moved to \`${cliInvocation()} context emit\`.
|
|
|
4254
4260
|
await compileContext({ dir: opts.dir, check: opts.check, json: opts.json });
|
|
4255
4261
|
return;
|
|
4256
4262
|
}
|
|
4257
|
-
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-
|
|
4263
|
+
const { runEmitResult, EmitResultError } = await import('./emit-result-cmd-KUSL56RI.js');
|
|
4258
4264
|
try {
|
|
4259
4265
|
const result = await runEmitResult({
|
|
4260
4266
|
name,
|
|
@@ -4304,7 +4310,7 @@ everywhere, bytes and deep link untouched; a still-queued one is cancelled
|
|
|
4304
4310
|
locally so it never uploads. One correction can retire several duplicates.
|
|
4305
4311
|
`
|
|
4306
4312
|
).action(async (file, opts) => {
|
|
4307
|
-
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-
|
|
4313
|
+
const { runEmitArtifact, EmitArtifactError } = await import('./emit-artifact-cmd-ALDK55Y2.js');
|
|
4308
4314
|
let pr;
|
|
4309
4315
|
if (opts.pr !== void 0) {
|
|
4310
4316
|
pr = parseTrackerNumber(opts.pr);
|
|
@@ -4363,7 +4369,7 @@ recent events with their ids. --find <text> searches all of them.
|
|
|
4363
4369
|
item that session was launched for is used automatically.
|
|
4364
4370
|
`
|
|
4365
4371
|
).action(async (opts) => {
|
|
4366
|
-
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4372
|
+
const { runEmitFinding, refuseRemovedFindingFlags, EmitFindingError } = await import('./emit-finding-cmd-2NBAPDSV.js');
|
|
4367
4373
|
try {
|
|
4368
4374
|
refuseRemovedFindingFlags(opts);
|
|
4369
4375
|
const result = await runEmitFinding({
|
|
@@ -4430,7 +4436,7 @@ the whole batch. "untimed": true records one with no time on purpose.
|
|
|
4430
4436
|
that session was launched for is used automatically.
|
|
4431
4437
|
`
|
|
4432
4438
|
).action(async (file, opts) => {
|
|
4433
|
-
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-
|
|
4439
|
+
const { runEmitFindings, EmitFindingError } = await import('./emit-finding-cmd-2NBAPDSV.js');
|
|
4434
4440
|
try {
|
|
4435
4441
|
const result = await runEmitFindings({
|
|
4436
4442
|
file,
|
|
@@ -4465,7 +4471,7 @@ command, the command exits 0, and \`sync\` sends it later. If the gateway refuse
|
|
|
4465
4471
|
the step, the command prints why and exits 1.
|
|
4466
4472
|
`
|
|
4467
4473
|
).action(async (name, opts) => {
|
|
4468
|
-
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-
|
|
4474
|
+
const { runEmitStep, EmitStepError } = await import('./emit-step-cmd-KD4AKEAT.js');
|
|
4469
4475
|
try {
|
|
4470
4476
|
await runEmitStep({
|
|
4471
4477
|
name,
|
|
@@ -4508,7 +4514,7 @@ of the item, and a (proof: <kind>) annotation names its proof.
|
|
|
4508
4514
|
${cliInvocation()} emit criteria acceptance/412-login.md --item 412
|
|
4509
4515
|
`
|
|
4510
4516
|
).action(async (file, opts) => {
|
|
4511
|
-
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-
|
|
4517
|
+
const { runEmitCriteria, EmitCriteriaError } = await import('./emit-criteria-cmd-Q7SM6VP2.js');
|
|
4512
4518
|
try {
|
|
4513
4519
|
const result = await runEmitCriteria({
|
|
4514
4520
|
file,
|
|
@@ -4532,9 +4538,9 @@ function registerSpecCommands(program2) {
|
|
|
4532
4538
|
const specCmd = program2.command("spec").description("Find, file and edit the issue a spec lives in, in your factory's tracker");
|
|
4533
4539
|
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)");
|
|
4534
4540
|
const run = async (action) => {
|
|
4535
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4541
|
+
const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4536
4542
|
try {
|
|
4537
|
-
await action(await import('./spec-cmd-
|
|
4543
|
+
await action(await import('./spec-cmd-JGYHHJ4P.js'));
|
|
4538
4544
|
} catch (err) {
|
|
4539
4545
|
if (err instanceof WorkCommandError) {
|
|
4540
4546
|
fail(err.message);
|
|
@@ -4576,7 +4582,7 @@ takes it, and prints the line that starts your session on it. That
|
|
|
4576
4582
|
session links itself and holds the item's lease while it works.
|
|
4577
4583
|
`
|
|
4578
4584
|
).action(async (opts) => {
|
|
4579
|
-
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-
|
|
4585
|
+
const { runWorkBuild, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4580
4586
|
try {
|
|
4581
4587
|
await runWorkBuild(opts);
|
|
4582
4588
|
} catch (err) {
|
|
@@ -4599,7 +4605,7 @@ renews that session's own 20-minute lease, unless --no-lease or
|
|
|
4599
4605
|
--ended is given, or another worker already holds a live one.
|
|
4600
4606
|
`
|
|
4601
4607
|
).action(async (number, opts) => {
|
|
4602
|
-
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-
|
|
4608
|
+
const { runWorkLinkSession, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4603
4609
|
try {
|
|
4604
4610
|
await runWorkLinkSession({ ...opts, number, noLease: opts.lease === false, logFailures: opts.logFailures === true });
|
|
4605
4611
|
} catch (err) {
|
|
@@ -4623,8 +4629,8 @@ criterion's new proof; --ready hands the thread back to a person. At
|
|
|
4623
4629
|
most one action flag may be given.
|
|
4624
4630
|
`
|
|
4625
4631
|
).action(async (opts) => {
|
|
4626
|
-
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4627
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4632
|
+
const { runWorkComment, WorkCommentCommandError } = await import('./work-comment-cmd-F3NRWKPZ.js');
|
|
4633
|
+
const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4628
4634
|
try {
|
|
4629
4635
|
await runWorkComment(opts);
|
|
4630
4636
|
} catch (err) {
|
|
@@ -4645,8 +4651,8 @@ criterion that carries proof or a comment, each with who is waiting
|
|
|
4645
4651
|
on whom next.
|
|
4646
4652
|
`
|
|
4647
4653
|
).action(async (opts) => {
|
|
4648
|
-
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-
|
|
4649
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4654
|
+
const { runWorkThreads, WorkCommentCommandError } = await import('./work-comment-cmd-F3NRWKPZ.js');
|
|
4655
|
+
const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4650
4656
|
try {
|
|
4651
4657
|
await runWorkThreads(opts);
|
|
4652
4658
|
} catch (err) {
|
|
@@ -4670,8 +4676,8 @@ still running, or that an older runner released, has no log and the
|
|
|
4670
4676
|
command exits 1.
|
|
4671
4677
|
`
|
|
4672
4678
|
).action(async (opts) => {
|
|
4673
|
-
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-
|
|
4674
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4679
|
+
const { runWorkLogs, WorkLogsCommandError } = await import('./work-logs-cmd-QF6P32FE.js');
|
|
4680
|
+
const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4675
4681
|
try {
|
|
4676
4682
|
await runWorkLogs(opts);
|
|
4677
4683
|
} catch (err) {
|
|
@@ -4694,8 +4700,8 @@ item is not built again until a new build request. Exits 1 when no host
|
|
|
4694
4700
|
build is running for the item.
|
|
4695
4701
|
`
|
|
4696
4702
|
).action(async (opts) => {
|
|
4697
|
-
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-
|
|
4698
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4703
|
+
const { runWorkStop, WorkStopCommandError } = await import('./work-stop-cmd-C3F5HNUO.js');
|
|
4704
|
+
const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4699
4705
|
try {
|
|
4700
4706
|
await runWorkStop(opts);
|
|
4701
4707
|
} catch (err) {
|
|
@@ -4716,7 +4722,7 @@ deletes anything \u2014 the item is removed from Work only once no
|
|
|
4716
4722
|
live addition remains on it.
|
|
4717
4723
|
`
|
|
4718
4724
|
).action(async (opts) => {
|
|
4719
|
-
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-
|
|
4725
|
+
const { runWorkRemove, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4720
4726
|
try {
|
|
4721
4727
|
await runWorkRemove(opts);
|
|
4722
4728
|
} catch (err) {
|
|
@@ -4728,7 +4734,7 @@ live addition remains on it.
|
|
|
4728
4734
|
}
|
|
4729
4735
|
});
|
|
4730
4736
|
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) => {
|
|
4731
|
-
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-
|
|
4737
|
+
const { runWorkStatus, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4732
4738
|
try {
|
|
4733
4739
|
await runWorkStatus(opts);
|
|
4734
4740
|
} catch (err) {
|
|
@@ -4740,7 +4746,7 @@ live addition remains on it.
|
|
|
4740
4746
|
}
|
|
4741
4747
|
});
|
|
4742
4748
|
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) => {
|
|
4743
|
-
const { runWorkList, WorkCommandError } = await import('./work-cmd-
|
|
4749
|
+
const { runWorkList, WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4744
4750
|
try {
|
|
4745
4751
|
await runWorkList(opts);
|
|
4746
4752
|
} catch (err) {
|
|
@@ -4761,7 +4767,7 @@ by a different key is refused; claiming again with the same key extends
|
|
|
4761
4767
|
it. --host is a label only.
|
|
4762
4768
|
`
|
|
4763
4769
|
).action(async (opts) => {
|
|
4764
|
-
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-
|
|
4770
|
+
const { runWorkClaim, WorkCommandError } = await import('./work-claim-cmd-DNUDZKJA.js');
|
|
4765
4771
|
try {
|
|
4766
4772
|
await runWorkClaim(opts);
|
|
4767
4773
|
} catch (err) {
|
|
@@ -4781,7 +4787,7 @@ Extends the live lease this API key holds. Refused with a 410 if the
|
|
|
4781
4787
|
lease has expired, or a 403 if a different key holds it.
|
|
4782
4788
|
`
|
|
4783
4789
|
).action(async (opts) => {
|
|
4784
|
-
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-
|
|
4790
|
+
const { runWorkRenew, WorkCommandError } = await import('./work-claim-cmd-DNUDZKJA.js');
|
|
4785
4791
|
try {
|
|
4786
4792
|
await runWorkRenew(opts);
|
|
4787
4793
|
} catch (err) {
|
|
@@ -4813,7 +4819,7 @@ applies to a host's lease only. A later tool call in the session
|
|
|
4813
4819
|
takes the lease again.
|
|
4814
4820
|
`
|
|
4815
4821
|
).action(async (opts) => {
|
|
4816
|
-
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-
|
|
4822
|
+
const { runWorkRelease, WorkCommandError } = await import('./work-claim-cmd-DNUDZKJA.js');
|
|
4817
4823
|
try {
|
|
4818
4824
|
await runWorkRelease(opts);
|
|
4819
4825
|
} catch (err) {
|
|
@@ -4840,7 +4846,7 @@ Idempotent: declaring the same pull request twice is a no-op.
|
|
|
4840
4846
|
needs your own login; an agent session or a factory key is refused.
|
|
4841
4847
|
`
|
|
4842
4848
|
).action(async (number, opts) => {
|
|
4843
|
-
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-
|
|
4849
|
+
const { runWorkPr, WorkPrCommandError } = await import('./work-pr-cmd-BH56GUKN.js');
|
|
4844
4850
|
try {
|
|
4845
4851
|
await runWorkPr({ ...opts, number });
|
|
4846
4852
|
} catch (err) {
|
|
@@ -4865,8 +4871,8 @@ login, then declares the pull request on the item, as \`work pr\` does.
|
|
|
4865
4871
|
Run it again after a change to the title or description.
|
|
4866
4872
|
`
|
|
4867
4873
|
).action(async (opts) => {
|
|
4868
|
-
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-
|
|
4869
|
-
const { WorkCommandError } = await import('./work-cmd-
|
|
4874
|
+
const { runWorkOpenPr, WorkOpenPrCommandError } = await import('./work-open-pr-cmd-XE23JA3R.js');
|
|
4875
|
+
const { WorkCommandError } = await import('./work-cmd-VECTYST6.js');
|
|
4870
4876
|
try {
|
|
4871
4877
|
await runWorkOpenPr(opts);
|
|
4872
4878
|
} catch (err) {
|
|
@@ -4882,13 +4888,13 @@ function registerRunnerCommands(program2) {
|
|
|
4882
4888
|
const runnerCmd = program2.command("runner").description("Take work from the implement and amend queues on this machine");
|
|
4883
4889
|
const configOption = "the cloud config file to run against (default: ~/.outerlayer/config.json)";
|
|
4884
4890
|
runnerCmd.command("start").description("Run the loop: claim work, run it, report, clean up, repeat").option("--config <path>", configOption).action(async (opts) => {
|
|
4885
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4886
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4887
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
4891
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
|
|
4892
|
+
const { start, RunnerStartError } = await import('./loop-2Y4CUFNP.js');
|
|
4893
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-DKMYYXLH.js');
|
|
4888
4894
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4889
4895
|
try {
|
|
4890
4896
|
const { realUpdateDeps } = await import('./real-deps-KNNBQC75.js');
|
|
4891
|
-
await start(configPath, { update: realUpdateDeps(), fetchImpl: fetch });
|
|
4897
|
+
await start(configPath, { update: realUpdateDeps(), leave: { exit: (code) => process.exit(code) }, fetchImpl: fetch });
|
|
4892
4898
|
} catch (err) {
|
|
4893
4899
|
if (err instanceof RunnerConfigError || err instanceof RunnerAlreadyRunningError || err instanceof RunnerStartError) {
|
|
4894
4900
|
fail(err.message);
|
|
@@ -4901,10 +4907,10 @@ function registerRunnerCommands(program2) {
|
|
|
4901
4907
|
"after",
|
|
4902
4908
|
"\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"
|
|
4903
4909
|
).action(async () => {
|
|
4904
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4905
|
-
const { containerStart } = await import('./container-start-
|
|
4906
|
-
const { start, RunnerStartError } = await import('./loop-
|
|
4907
|
-
const { RunnerAlreadyRunningError } = await import('./pidfile-
|
|
4910
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
|
|
4911
|
+
const { containerStart } = await import('./container-start-JE7HTKZG.js');
|
|
4912
|
+
const { start, RunnerStartError } = await import('./loop-2Y4CUFNP.js');
|
|
4913
|
+
const { RunnerAlreadyRunningError } = await import('./pidfile-DKMYYXLH.js');
|
|
4908
4914
|
try {
|
|
4909
4915
|
const result = await containerStart({
|
|
4910
4916
|
env: process.env,
|
|
@@ -4922,8 +4928,8 @@ function registerRunnerCommands(program2) {
|
|
|
4922
4928
|
}
|
|
4923
4929
|
});
|
|
4924
4930
|
runnerCmd.command("check").description("Validate the config, the hooks and the key, and print the effective settings").option("--config <path>", configOption).action(async (opts) => {
|
|
4925
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
4926
|
-
const { runRunnerCheck } = await import('./check-
|
|
4931
|
+
const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
|
|
4932
|
+
const { runRunnerCheck } = await import('./check-JVBAWIN6.js');
|
|
4927
4933
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4928
4934
|
const result = await runRunnerCheck(configPath);
|
|
4929
4935
|
if (!result.ok) {
|
|
@@ -4944,8 +4950,8 @@ function registerRunnerCommands(program2) {
|
|
|
4944
4950
|
`);
|
|
4945
4951
|
});
|
|
4946
4952
|
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) => {
|
|
4947
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
4948
|
-
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-
|
|
4953
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
|
|
4954
|
+
const { runRunnerInstall, RunnerInstallError, launcherSummary, restartNote } = await import('./install-cmd-JMT67P35.js');
|
|
4949
4955
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
4950
4956
|
if (opts.service !== true) {
|
|
4951
4957
|
for (const flag of ["print", "user", "unitName"]) {
|
|
@@ -4957,7 +4963,7 @@ function registerRunnerCommands(program2) {
|
|
|
4957
4963
|
}
|
|
4958
4964
|
try {
|
|
4959
4965
|
if (opts.service === true) {
|
|
4960
|
-
const { installServiceCommand } = await import('./command-
|
|
4966
|
+
const { installServiceCommand } = await import('./command-B2T7VR77.js');
|
|
4961
4967
|
const result2 = await installServiceCommand({
|
|
4962
4968
|
configPath,
|
|
4963
4969
|
print: opts.print,
|
|
@@ -5012,8 +5018,8 @@ To keep it running, run ${C.yellow}${cliInvocation()} runner install --service${
|
|
|
5012
5018
|
fail(`pass --service: \`${cliInvocation()} runner uninstall --service\` removes the runner's service.`);
|
|
5013
5019
|
return;
|
|
5014
5020
|
}
|
|
5015
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5016
|
-
const { uninstallServiceCommand } = await import('./command-
|
|
5021
|
+
const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
|
|
5022
|
+
const { uninstallServiceCommand } = await import('./command-B2T7VR77.js');
|
|
5017
5023
|
const result = await uninstallServiceCommand({ configPath: opts.config ?? defaultRunnerConfigPath(), unitName: opts.unitName, home: homeFromEnv() });
|
|
5018
5024
|
if (result.ok) for (const line of result.lines) process.stdout.write(`${C.green}\u2713${C.reset} ${line}
|
|
5019
5025
|
`);
|
|
@@ -5040,12 +5046,12 @@ already in runner.env is used.
|
|
|
5040
5046
|
printf '%s' "$CLAUDE_CODE_OAUTH_TOKEN" | ${cliInvocation()} runner init --agent claude --factory <org>/<factory>
|
|
5041
5047
|
`
|
|
5042
5048
|
).action(async (opts) => {
|
|
5043
|
-
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-
|
|
5044
|
-
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-
|
|
5045
|
-
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-
|
|
5046
|
-
const { detectMachine } = await import('./machine-
|
|
5047
|
-
const { chooseVm, runVmInit, VmInitError } = await import('./init-
|
|
5048
|
-
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-
|
|
5049
|
+
const { defaultRunnerConfigPath, RunnerConfigError } = await import('./config-TWS5VZEN.js');
|
|
5050
|
+
const { prepareRunnerInit, runRunnerInit, RunnerInitError, writeRunnerInit } = await import('./init-ETKGFCXR.js');
|
|
5051
|
+
const { obtainRunnerKey, runnerKeyLogin } = await import('./runner-key-GO277GW2.js');
|
|
5052
|
+
const { detectMachine } = await import('./machine-Z2S47JW7.js');
|
|
5053
|
+
const { chooseVm, runVmInit, VmInitError } = await import('./init-Q2RPUUVP.js');
|
|
5054
|
+
const { AGENT_COMMANDS, credentialFromStdin, isAgentName, restartForCredential, RunnerEnvError } = await import('./runner-env-YRRNRKF4.js');
|
|
5049
5055
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5050
5056
|
if (opts.agent !== void 0 && !isAgentName(opts.agent)) {
|
|
5051
5057
|
fail(`--agent ${opts.agent}: runner init writes commands for ${Object.keys(AGENT_COMMANDS).join(", ")}. For another agent, leave --agent out and edit runner.commands.`);
|
|
@@ -5076,7 +5082,7 @@ already in runner.env is used.
|
|
|
5076
5082
|
const chunks = [];
|
|
5077
5083
|
for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));
|
|
5078
5084
|
const result2 = runRunnerInit(configPath, { machine, configFromStdin: Buffer.concat(chunks).toString("utf8"), requireContainer: true });
|
|
5079
|
-
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-
|
|
5085
|
+
const { ensureHostKey: ensureHostKey2 } = await import('./host-key-XNKZCWTS.js');
|
|
5080
5086
|
const hostKey2 = await ensureHostKey2(configPath);
|
|
5081
5087
|
process.stdout.write(`host key ${hostKey2.fingerprint}
|
|
5082
5088
|
hooks: ${result2.hooks}
|
|
@@ -5135,7 +5141,7 @@ hooks: ${result2.hooks}
|
|
|
5135
5141
|
const prepared = prepareRunnerInit(configPath, { machine, allowProcess, agent, credential, keyFromLogin: makeKey !== void 0 });
|
|
5136
5142
|
const created = makeKey === void 0 ? void 0 : await makeKey();
|
|
5137
5143
|
const result = writeRunnerInit(prepared, created);
|
|
5138
|
-
const { ensureHostKey } = await import('./host-key-
|
|
5144
|
+
const { ensureHostKey } = await import('./host-key-XNKZCWTS.js');
|
|
5139
5145
|
const hostKey = await ensureHostKey(configPath);
|
|
5140
5146
|
if (created !== void 0) {
|
|
5141
5147
|
process.stdout.write(`${C.green}\u2713${C.reset} saved the runner key in ${result.configPath}
|
|
@@ -5163,7 +5169,7 @@ ${C.yellow}${result.note}${C.reset}
|
|
|
5163
5169
|
To isolate builds in containers instead, run ${C.yellow}${cliInvocation()} runner init --vm${C.reset}.
|
|
5164
5170
|
`);
|
|
5165
5171
|
}
|
|
5166
|
-
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-
|
|
5172
|
+
const { runRunnerInstall, RunnerInstallError, RunnerDowngradeError, launcherSummary } = await import('./install-cmd-JMT67P35.js');
|
|
5167
5173
|
let installedLayout = false;
|
|
5168
5174
|
let noService = "it starts the runner from the install layout, which needs a CLI installed with npm";
|
|
5169
5175
|
try {
|
|
@@ -5195,7 +5201,7 @@ ${C.yellow}The runner will not update itself: ${installErr.message}${C.reset}
|
|
|
5195
5201
|
let serviceUp = false;
|
|
5196
5202
|
let restart;
|
|
5197
5203
|
if (installedLayout) {
|
|
5198
|
-
const { installServiceCommand } = await import('./command-
|
|
5204
|
+
const { installServiceCommand } = await import('./command-B2T7VR77.js');
|
|
5199
5205
|
const service = await installServiceCommand({
|
|
5200
5206
|
configPath,
|
|
5201
5207
|
entryPath: process.argv[1] ?? "",
|
|
@@ -5239,12 +5245,12 @@ Next:
|
|
|
5239
5245
|
"after",
|
|
5240
5246
|
"\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"
|
|
5241
5247
|
).action(async (opts) => {
|
|
5242
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5243
|
-
const { buildRepositoryImage, RecipeError } = await import('./build-
|
|
5248
|
+
const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
|
|
5249
|
+
const { buildRepositoryImage, RecipeError } = await import('./build-TNM7HYCA.js');
|
|
5244
5250
|
const { currentCliBuild } = await import('./cli-build-K56DK4DS.js');
|
|
5245
|
-
const { createDockerHost } = await import('./docker-
|
|
5246
|
-
const { builderSpec } = await import('./builder-
|
|
5247
|
-
const { loadRunnerConfig } = await import('./config-
|
|
5251
|
+
const { createDockerHost } = await import('./docker-MJEEHUUA.js');
|
|
5252
|
+
const { builderSpec } = await import('./builder-LDJGS2JC.js');
|
|
5253
|
+
const { loadRunnerConfig } = await import('./config-TWS5VZEN.js');
|
|
5248
5254
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5249
5255
|
const loaded = (() => {
|
|
5250
5256
|
try {
|
|
@@ -5255,11 +5261,11 @@ Next:
|
|
|
5255
5261
|
})();
|
|
5256
5262
|
const memory = loaded?.build?.memory ?? "8g";
|
|
5257
5263
|
try {
|
|
5258
|
-
const { ensureRunnerIdentity } = await import('./runner-identity-
|
|
5264
|
+
const { ensureRunnerIdentity } = await import('./runner-identity-EX7HXPUE.js');
|
|
5259
5265
|
await ensureRunnerIdentity(configPath, { log: (line) => console.error(line) }).catch((err) => {
|
|
5260
5266
|
console.error(`the runner's Docker identity could not be stored: ${err instanceof Error ? err.message : String(err)}`);
|
|
5261
5267
|
});
|
|
5262
|
-
const { imageTargetFor } = await import('./governing-source-
|
|
5268
|
+
const { imageTargetFor } = await import('./governing-source-VVUA5TKB.js');
|
|
5263
5269
|
const target = await imageTargetFor({ config: loaded, repository: opts.repository, fetchImpl: fetch });
|
|
5264
5270
|
if (!target.ok) {
|
|
5265
5271
|
if (opts.json) {
|
|
@@ -5322,25 +5328,25 @@ Next:
|
|
|
5322
5328
|
}
|
|
5323
5329
|
});
|
|
5324
5330
|
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) => {
|
|
5325
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5326
|
-
const { requestStop } = await import('./loop-
|
|
5331
|
+
const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
|
|
5332
|
+
const { requestStop } = await import('./loop-2Y4CUFNP.js');
|
|
5327
5333
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5328
|
-
const { runnerImageVersion } = await import('./image-tag-
|
|
5334
|
+
const { runnerImageVersion } = await import('./image-tag-R34J4O3F.js');
|
|
5329
5335
|
await requestStop(configPath, Boolean(opts.now), void 0, { image: runnerImageVersion() !== void 0 });
|
|
5330
5336
|
});
|
|
5331
5337
|
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) => {
|
|
5332
|
-
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-
|
|
5333
|
-
const { jobsDir, runnerDir } = await import('./paths-
|
|
5334
|
-
const { listJobFiles, runnerProcessState } = await import('./loop-
|
|
5335
|
-
const { renderStatus } = await import('./status-
|
|
5336
|
-
const { readHousekeepingRecord } = await import('./record-
|
|
5338
|
+
const { defaultRunnerConfigPath, loadRunnerConfig } = await import('./config-TWS5VZEN.js');
|
|
5339
|
+
const { jobsDir, runnerDir } = await import('./paths-LHSPNORF.js');
|
|
5340
|
+
const { listJobFiles, runnerProcessState } = await import('./loop-2Y4CUFNP.js');
|
|
5341
|
+
const { renderStatus } = await import('./status-CJCE2FHD.js');
|
|
5342
|
+
const { readHousekeepingRecord } = await import('./record-3LPTY3G5.js');
|
|
5337
5343
|
const path2 = await import('path');
|
|
5338
5344
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5339
5345
|
const all = listJobFiles(configPath);
|
|
5340
5346
|
const housekeeping = readHousekeepingRecord(runnerDir(configPath));
|
|
5341
|
-
const { readPendingUpdate } = await import('./pending-
|
|
5347
|
+
const { readPendingUpdate } = await import('./pending-3YZCSKON.js');
|
|
5342
5348
|
const pendingUpdate = readPendingUpdate(runnerDir(configPath));
|
|
5343
|
-
const { readImageStatus } = await import('./image-tag-
|
|
5349
|
+
const { readImageStatus } = await import('./image-tag-R34J4O3F.js');
|
|
5344
5350
|
const image = readImageStatus(runnerDir(configPath));
|
|
5345
5351
|
let host = "unknown";
|
|
5346
5352
|
let concurrency = 1;
|
|
@@ -5353,8 +5359,8 @@ Next:
|
|
|
5353
5359
|
const processState = runnerProcessState(configPath);
|
|
5354
5360
|
const service = await (async () => {
|
|
5355
5361
|
if (process.platform !== "linux" || !existsSync("/run/systemd/system")) return void 0;
|
|
5356
|
-
const { inspectService, realInspectProbes } = await import('./inspect-
|
|
5357
|
-
const { DEFAULT_UNIT_NAME } = await import('./install-
|
|
5362
|
+
const { inspectService, realInspectProbes } = await import('./inspect-IPFA7AAT.js');
|
|
5363
|
+
const { DEFAULT_UNIT_NAME } = await import('./install-6OIY3KHZ.js');
|
|
5358
5364
|
const facts = inspectService(DEFAULT_UNIT_NAME, path2.dirname(configPath), realInspectProbes());
|
|
5359
5365
|
return facts === void 0 ? void 0 : { unit: facts.unit, running: facts.mainPid !== void 0, delegated: facts.delegate };
|
|
5360
5366
|
})();
|
|
@@ -5391,9 +5397,9 @@ Next:
|
|
|
5391
5397
|
);
|
|
5392
5398
|
});
|
|
5393
5399
|
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) => {
|
|
5394
|
-
const { defaultRunnerConfigPath } = await import('./config-
|
|
5395
|
-
const { listJobFiles } = await import('./loop-
|
|
5396
|
-
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-
|
|
5400
|
+
const { defaultRunnerConfigPath } = await import('./config-TWS5VZEN.js');
|
|
5401
|
+
const { listJobFiles } = await import('./loop-2Y4CUFNP.js');
|
|
5402
|
+
const { newestAttempt, logPathFor, tail, RunnerLogsError } = await import('./logs-XHAS6LMZ.js');
|
|
5397
5403
|
const configPath = opts.config ?? defaultRunnerConfigPath();
|
|
5398
5404
|
const item = parseTrackerNumber(itemArg);
|
|
5399
5405
|
if (item === void 0) {
|
|
@@ -5624,7 +5630,7 @@ caller from the bearer token, the gateway answers 401 without that header.
|
|
|
5624
5630
|
"after",
|
|
5625
5631
|
"\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"
|
|
5626
5632
|
).action(async (opts) => {
|
|
5627
|
-
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-
|
|
5633
|
+
const { runMcpServe, handleMcpServeError } = await import('./mcp-serve-cmd-LY5A3CE7.js');
|
|
5628
5634
|
try {
|
|
5629
5635
|
await runMcpServe({ url: opts.url, appId: opts.appId });
|
|
5630
5636
|
} catch (err) {
|